diff --git a/client/source/scripts/stores/ClientDataStore.js b/client/source/scripts/stores/ClientDataStore.js index d888a560..f1d731e0 100644 --- a/client/source/scripts/stores/ClientDataStore.js +++ b/client/source/scripts/stores/ClientDataStore.js @@ -2,11 +2,9 @@ import ActionTypes from '../constants/ActionTypes'; import AppDispatcher from '../dispatcher/AppDispatcher'; import BaseStore from './BaseStore'; import ClientActions from '../actions/ClientActions'; +import config from '../config/config'; import EventTypes from '../constants/EventTypes'; -const historyLength = 100; -const pollInterval = 5000; - class ClientDataStoreClass extends BaseStore { constructor() { super(); @@ -54,14 +52,14 @@ class ClientDataStoreClass extends BaseStore { let downloadRateHistory = Object.assign([], this.transferRates.download); let uploadRateHistory = Object.assign([], this.transferRates.upload); - if (uploadRateHistory.length === historyLength) { + if (uploadRateHistory.length === config.maxHistoryStates) { downloadRateHistory.shift(); uploadRateHistory.shift(); downloadRateHistory.push(parseInt(transferData.downloadRate)); uploadRateHistory.push(parseInt(transferData.uploadRate)); } else { - while (index < historyLength) { - if (index < historyLength - 1) { + while (index < config.maxHistoryStates) { + if (index < config.maxHistoryStates - 1) { uploadRateHistory[index] = 0; downloadRateHistory[index] = 0; } else { @@ -87,7 +85,7 @@ class ClientDataStoreClass extends BaseStore { startPollingTransferData() { this.pollTransferDataID = setInterval( this.fetchTransferData.bind(this), - pollInterval + config.pollInterval ); } diff --git a/client/source/scripts/stores/TorrentStore.js b/client/source/scripts/stores/TorrentStore.js index ca9ff754..7a97ffac 100644 --- a/client/source/scripts/stores/TorrentStore.js +++ b/client/source/scripts/stores/TorrentStore.js @@ -3,6 +3,7 @@ import _ from 'lodash'; import ActionTypes from '../constants/ActionTypes'; import AppDispatcher from '../dispatcher/AppDispatcher'; import BaseStore from './BaseStore'; +import config from '../config/config'; import EventTypes from '../constants/EventTypes'; import {filterTorrents} from '../util/filterTorrents'; import {searchTorrents} from '../util/searchTorrents'; @@ -12,16 +13,13 @@ import TorrentActions from '../actions/TorrentActions'; import TorrentFilterStore from './TorrentFilterStore'; import UIStore from './UIStore'; -const pollInterval = 5000; - class TorrentStoreClass extends BaseStore { constructor() { super(); + this.filteredTorrents = []; this.pollTorrentDetailsIntervalID = null; this.pollTorrentsIntervalID = null; - this.isPollingTorrentDetails = false; - this.isPollingTorrents = false; this.selectedTorrents = []; this.torrentDetails = {}; this.torrents = []; @@ -29,7 +27,7 @@ class TorrentStoreClass extends BaseStore { fetchTorrentDetails() { TorrentActions.fetchTorrentDetails(UIStore.getTorrentDetailsHash()); - if (!this.isPollingTorrentDetails) { + if (this.pollTorrentDetailsIntervalID === null) { this.stopPollingTorrentDetails(); this.startPollingTorrentDetails(); } @@ -38,7 +36,7 @@ class TorrentStoreClass extends BaseStore { fetchTorrents() { TorrentActions.fetchTorrents(); - if (!this.isPollingTorrents) { + if (this.pollTorrentsIntervalID === null) { this.startPollingTorrents(); } } @@ -108,29 +106,27 @@ class TorrentStoreClass extends BaseStore { } startPollingTorrentDetails() { - this.isPollingTorrentDetails = true; this.pollTorrentDetailsIntervalID = setInterval( this.fetchTorrentDetails.bind(this), - pollInterval + config.pollInterval ); } startPollingTorrents() { - this.isPollingTorrents = true; this.pollTorrentsIntervalID = setInterval( this.fetchTorrents.bind(this), - pollInterval + config.pollInterval ); } stopPollingTorrentDetails() { clearInterval(this.pollTorrentDetailsIntervalID); - this.isPollingTorrents = false; + this.pollTorrentDetailsIntervalID = null; } stopPollingTorrents() { clearInterval(this.pollTorrentsIntervalID); - this.isPollingTorrentDetails = false; + this.pollTorrentsIntervalID = null; } triggerTorrentsFilter() { diff --git a/server/assets/app.js b/server/assets/app.js index 547c1f86..ab692a3c 100644 --- a/server/assets/app.js +++ b/server/assets/app.js @@ -992,7 +992,7 @@ /* 158 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _componentsActionBarActionBar = __webpack_require__(159);\n\nvar _componentsActionBarActionBar2 = _interopRequireDefault(_componentsActionBarActionBar);\n\nvar _componentsModalsModals = __webpack_require__(205);\n\nvar _componentsModalsModals2 = _interopRequireDefault(_componentsModalsModals);\n\nvar _componentsSidebarSidebar = __webpack_require__(208);\n\nvar _componentsSidebarSidebar2 = _interopRequireDefault(_componentsSidebarSidebar);\n\nvar _componentsTorrentListTorrentListContainer = __webpack_require__(218);\n\nvar _componentsTorrentListTorrentListContainer2 = _interopRequireDefault(_componentsTorrentListTorrentListContainer);\n\nvar FloodApp = (function (_React$Component) {\n _inherits(FloodApp, _React$Component);\n\n function FloodApp() {\n _classCallCheck(this, FloodApp);\n\n _get(Object.getPrototypeOf(FloodApp.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(FloodApp, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'div',\n { className: 'flood' },\n _react2['default'].createElement(_componentsSidebarSidebar2['default'], null),\n _react2['default'].createElement(\n 'main',\n { className: 'content' },\n _react2['default'].createElement(_componentsActionBarActionBar2['default'], null),\n _react2['default'].createElement(_componentsTorrentListTorrentListContainer2['default'], null)\n ),\n _react2['default'].createElement(_componentsModalsModals2['default'], null)\n );\n }\n }]);\n\n return FloodApp;\n})(_react2['default'].Component);\n\nexports['default'] = FloodApp;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29udGFpbmVycy9BcHAuanM/ZmU5NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHFCQUFxQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjE1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2NvbXBvbmVudHNBY3Rpb25CYXJBY3Rpb25CYXIgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvQWN0aW9uQmFyJyk7XG5cbnZhciBfY29tcG9uZW50c0FjdGlvbkJhckFjdGlvbkJhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzQWN0aW9uQmFyQWN0aW9uQmFyKTtcblxudmFyIF9jb21wb25lbnRzTW9kYWxzTW9kYWxzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9tb2RhbHMvTW9kYWxzJyk7XG5cbnZhciBfY29tcG9uZW50c01vZGFsc01vZGFsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzTW9kYWxzTW9kYWxzKTtcblxudmFyIF9jb21wb25lbnRzU2lkZWJhclNpZGViYXIgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL3NpZGViYXIvU2lkZWJhcicpO1xuXG52YXIgX2NvbXBvbmVudHNTaWRlYmFyU2lkZWJhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzU2lkZWJhclNpZGViYXIpO1xuXG52YXIgX2NvbXBvbmVudHNUb3JyZW50TGlzdFRvcnJlbnRMaXN0Q29udGFpbmVyID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudExpc3RDb250YWluZXInKTtcblxudmFyIF9jb21wb25lbnRzVG9ycmVudExpc3RUb3JyZW50TGlzdENvbnRhaW5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzVG9ycmVudExpc3RUb3JyZW50TGlzdENvbnRhaW5lcik7XG5cbnZhciBGbG9vZEFwcCA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRmxvb2RBcHAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEZsb29kQXBwKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGbG9vZEFwcCk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihGbG9vZEFwcC5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEZsb29kQXBwLCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAnZmxvb2QnIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzU2lkZWJhclNpZGViYXIyWydkZWZhdWx0J10sIG51bGwpLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnbWFpbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdjb250ZW50JyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzQWN0aW9uQmFyQWN0aW9uQmFyMlsnZGVmYXVsdCddLCBudWxsKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfY29tcG9uZW50c1RvcnJlbnRMaXN0VG9ycmVudExpc3RDb250YWluZXIyWydkZWZhdWx0J10sIG51bGwpXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzTW9kYWxzTW9kYWxzMlsnZGVmYXVsdCddLCBudWxsKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRmxvb2RBcHA7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gRmxvb2RBcHA7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbnRhaW5lcnMvQXBwLmpzXG4gKiogbW9kdWxlIGlkID0gMTU4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _componentsActionBarActionBar = __webpack_require__(159);\n\nvar _componentsActionBarActionBar2 = _interopRequireDefault(_componentsActionBarActionBar);\n\nvar _componentsModalsModals = __webpack_require__(206);\n\nvar _componentsModalsModals2 = _interopRequireDefault(_componentsModalsModals);\n\nvar _componentsSidebarSidebar = __webpack_require__(209);\n\nvar _componentsSidebarSidebar2 = _interopRequireDefault(_componentsSidebarSidebar);\n\nvar _componentsTorrentListTorrentListContainer = __webpack_require__(220);\n\nvar _componentsTorrentListTorrentListContainer2 = _interopRequireDefault(_componentsTorrentListTorrentListContainer);\n\nvar FloodApp = (function (_React$Component) {\n _inherits(FloodApp, _React$Component);\n\n function FloodApp() {\n _classCallCheck(this, FloodApp);\n\n _get(Object.getPrototypeOf(FloodApp.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(FloodApp, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'div',\n { className: 'flood' },\n _react2['default'].createElement(_componentsSidebarSidebar2['default'], null),\n _react2['default'].createElement(\n 'main',\n { className: 'content' },\n _react2['default'].createElement(_componentsActionBarActionBar2['default'], null),\n _react2['default'].createElement(_componentsTorrentListTorrentListContainer2['default'], null)\n ),\n _react2['default'].createElement(_componentsModalsModals2['default'], null)\n );\n }\n }]);\n\n return FloodApp;\n})(_react2['default'].Component);\n\nexports['default'] = FloodApp;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29udGFpbmVycy9BcHAuanM/ZmU5NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHFCQUFxQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjE1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2NvbXBvbmVudHNBY3Rpb25CYXJBY3Rpb25CYXIgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvQWN0aW9uQmFyJyk7XG5cbnZhciBfY29tcG9uZW50c0FjdGlvbkJhckFjdGlvbkJhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzQWN0aW9uQmFyQWN0aW9uQmFyKTtcblxudmFyIF9jb21wb25lbnRzTW9kYWxzTW9kYWxzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9tb2RhbHMvTW9kYWxzJyk7XG5cbnZhciBfY29tcG9uZW50c01vZGFsc01vZGFsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzTW9kYWxzTW9kYWxzKTtcblxudmFyIF9jb21wb25lbnRzU2lkZWJhclNpZGViYXIgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL3NpZGViYXIvU2lkZWJhcicpO1xuXG52YXIgX2NvbXBvbmVudHNTaWRlYmFyU2lkZWJhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzU2lkZWJhclNpZGViYXIpO1xuXG52YXIgX2NvbXBvbmVudHNUb3JyZW50TGlzdFRvcnJlbnRMaXN0Q29udGFpbmVyID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudExpc3RDb250YWluZXInKTtcblxudmFyIF9jb21wb25lbnRzVG9ycmVudExpc3RUb3JyZW50TGlzdENvbnRhaW5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzVG9ycmVudExpc3RUb3JyZW50TGlzdENvbnRhaW5lcik7XG5cbnZhciBGbG9vZEFwcCA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRmxvb2RBcHAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEZsb29kQXBwKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGbG9vZEFwcCk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihGbG9vZEFwcC5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEZsb29kQXBwLCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAnZmxvb2QnIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzU2lkZWJhclNpZGViYXIyWydkZWZhdWx0J10sIG51bGwpLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnbWFpbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdjb250ZW50JyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzQWN0aW9uQmFyQWN0aW9uQmFyMlsnZGVmYXVsdCddLCBudWxsKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfY29tcG9uZW50c1RvcnJlbnRMaXN0VG9ycmVudExpc3RDb250YWluZXIyWydkZWZhdWx0J10sIG51bGwpXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzTW9kYWxzTW9kYWxzMlsnZGVmYXVsdCddLCBudWxsKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRmxvb2RBcHA7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gRmxvb2RBcHA7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbnRhaW5lcnMvQXBwLmpzXG4gKiogbW9kdWxlIGlkID0gMTU4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 159 */ @@ -1022,7 +1022,7 @@ /* 163 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _genericDropdown = __webpack_require__(172);\n\nvar _genericDropdown2 = _interopRequireDefault(_genericDropdown);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['getDropdownHeader', 'handleItemSelect'];\n\nvar SortDropdown = (function (_React$Component) {\n _inherits(SortDropdown, _React$Component);\n\n function SortDropdown() {\n var _this = this;\n\n _classCallCheck(this, SortDropdown);\n\n _get(Object.getPrototypeOf(SortDropdown.prototype), 'constructor', this).call(this);\n\n this.state = {\n isExpanded: false\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(SortDropdown, [{\n key: 'getDropdownHeader',\n value: function getDropdownHeader() {\n return _react2['default'].createElement(\n 'a',\n { className: 'dropdown__button' },\n _react2['default'].createElement(\n 'label',\n { className: 'dropdown__label' },\n 'Sort By'\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'dropdown__value' },\n this.props.selectedItem.displayName\n )\n );\n }\n }, {\n key: 'getMenuItems',\n value: function getMenuItems() {\n return [{\n displayName: 'Name',\n property: 'name'\n }, {\n displayName: 'ETA',\n property: 'eta'\n }, {\n displayName: 'Download Speed',\n property: 'downloadRate'\n }, {\n displayName: 'Upload Speed',\n property: 'uploadRate'\n }, {\n displayName: 'Ratio',\n property: 'ratio'\n }, {\n displayName: 'Percent Complete',\n property: 'percentComplete'\n }, {\n displayName: 'Downloaded',\n property: 'downloadTotal'\n }, {\n displayName: 'Uploaded',\n property: 'uploadTotal'\n }, {\n displayName: 'File Size',\n property: 'sizeBytes'\n }, {\n displayName: 'Date Added',\n property: 'added'\n }];\n }\n }, {\n key: 'handleItemSelect',\n value: function handleItemSelect(sortBy) {\n var direction = this.props.selectedItem.direction;\n\n if (this.props.selectedItem.property === sortBy.property) {\n direction = direction === 'asc' ? 'desc' : 'asc';\n } else {\n direction = 'asc';\n }\n\n var sortProperty = {\n displayName: sortBy.displayName,\n property: sortBy.property,\n direction: direction\n };\n\n this.props.onSortChange(sortProperty);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(_genericDropdown2['default'], {\n handleItemSelect: this.handleItemSelect,\n header: this.getDropdownHeader,\n menuItems: this.getMenuItems(),\n selectedItem: this.props.selectedItem\n });\n }\n }]);\n\n return SortDropdown;\n})(_react2['default'].Component);\n\nexports['default'] = SortDropdown;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9hY3Rpb24tYmFyL1NvcnREcm9wZG93bi5qcz85ZTgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdDQUFnQztBQUN6QztBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfY2xhc3NuYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcblxudmFyIF9jbGFzc25hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzbmFtZXMpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWNzcy10cmFuc2l0aW9uLWdyb3VwJyk7XG5cbnZhciBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXApO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfZ2VuZXJpY0Ryb3Bkb3duID0gcmVxdWlyZSgnLi4vZ2VuZXJpYy9Ecm9wZG93bicpO1xuXG52YXIgX2dlbmVyaWNEcm9wZG93bjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZW5lcmljRHJvcGRvd24pO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9hY3Rpb25zL1VJQWN0aW9ucycpO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc1VJQWN0aW9ucyk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydnZXREcm9wZG93bkhlYWRlcicsICdoYW5kbGVJdGVtU2VsZWN0J107XG5cbnZhciBTb3J0RHJvcGRvd24gPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFNvcnREcm9wZG93biwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU29ydERyb3Bkb3duKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU29ydERyb3Bkb3duKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFNvcnREcm9wZG93bi5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIG1ldGhvZHNUb0JpbmQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTb3J0RHJvcGRvd24sIFt7XG4gICAga2V5OiAnZ2V0RHJvcGRvd25IZWFkZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREcm9wZG93bkhlYWRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2EnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ2Ryb3Bkb3duX19idXR0b24nIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdsYWJlbCcsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdkcm9wZG93bl9fbGFiZWwnIH0sXG4gICAgICAgICAgJ1NvcnQgQnknXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2Ryb3Bkb3duX192YWx1ZScgfSxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGVkSXRlbS5kaXNwbGF5TmFtZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldE1lbnVJdGVtcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1lbnVJdGVtcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICBwcm9wZXJ0eTogJ25hbWUnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnRVRBJyxcbiAgICAgICAgcHJvcGVydHk6ICdldGEnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnRG93bmxvYWQgU3BlZWQnLFxuICAgICAgICBwcm9wZXJ0eTogJ2Rvd25sb2FkUmF0ZSdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdVcGxvYWQgU3BlZWQnLFxuICAgICAgICBwcm9wZXJ0eTogJ3VwbG9hZFJhdGUnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnUmF0aW8nLFxuICAgICAgICBwcm9wZXJ0eTogJ3JhdGlvJ1xuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1BlcmNlbnQgQ29tcGxldGUnLFxuICAgICAgICBwcm9wZXJ0eTogJ3BlcmNlbnRDb21wbGV0ZSdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdEb3dubG9hZGVkJyxcbiAgICAgICAgcHJvcGVydHk6ICdkb3dubG9hZFRvdGFsJ1xuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1VwbG9hZGVkJyxcbiAgICAgICAgcHJvcGVydHk6ICd1cGxvYWRUb3RhbCdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdGaWxlIFNpemUnLFxuICAgICAgICBwcm9wZXJ0eTogJ3NpemVCeXRlcydcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdEYXRlIEFkZGVkJyxcbiAgICAgICAgcHJvcGVydHk6ICdhZGRlZCdcbiAgICAgIH1dO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZUl0ZW1TZWxlY3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVJdGVtU2VsZWN0KHNvcnRCeSkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtLmRpcmVjdGlvbjtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtLnByb3BlcnR5ID09PSBzb3J0QnkucHJvcGVydHkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3J0UHJvcGVydHkgPSB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBzb3J0QnkuZGlzcGxheU5hbWUsXG4gICAgICAgIHByb3BlcnR5OiBzb3J0QnkucHJvcGVydHksXG4gICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnByb3BzLm9uU29ydENoYW5nZShzb3J0UHJvcGVydHkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfZ2VuZXJpY0Ryb3Bkb3duMlsnZGVmYXVsdCddLCB7XG4gICAgICAgIGhhbmRsZUl0ZW1TZWxlY3Q6IHRoaXMuaGFuZGxlSXRlbVNlbGVjdCxcbiAgICAgICAgaGVhZGVyOiB0aGlzLmdldERyb3Bkb3duSGVhZGVyLFxuICAgICAgICBtZW51SXRlbXM6IHRoaXMuZ2V0TWVudUl0ZW1zKCksXG4gICAgICAgIHNlbGVjdGVkSXRlbTogdGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1cbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTb3J0RHJvcGRvd247XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gU29ydERyb3Bkb3duO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL2FjdGlvbi1iYXIvU29ydERyb3Bkb3duLmpzXG4gKiogbW9kdWxlIGlkID0gMTYzXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _genericDropdown = __webpack_require__(172);\n\nvar _genericDropdown2 = _interopRequireDefault(_genericDropdown);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['getDropdownHeader', 'handleItemSelect'];\n\nvar SortDropdown = (function (_React$Component) {\n _inherits(SortDropdown, _React$Component);\n\n function SortDropdown() {\n var _this = this;\n\n _classCallCheck(this, SortDropdown);\n\n _get(Object.getPrototypeOf(SortDropdown.prototype), 'constructor', this).call(this);\n\n this.state = {\n isExpanded: false\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(SortDropdown, [{\n key: 'getDropdownHeader',\n value: function getDropdownHeader() {\n return _react2['default'].createElement(\n 'a',\n { className: 'dropdown__button' },\n _react2['default'].createElement(\n 'label',\n { className: 'dropdown__label' },\n 'Sort By'\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'dropdown__value' },\n this.props.selectedItem.displayName\n )\n );\n }\n }, {\n key: 'getMenuItems',\n value: function getMenuItems() {\n return [{\n displayName: 'Name',\n property: 'name'\n }, {\n displayName: 'ETA',\n property: 'eta'\n }, {\n displayName: 'Download Speed',\n property: 'downloadRate'\n }, {\n displayName: 'Upload Speed',\n property: 'uploadRate'\n }, {\n displayName: 'Ratio',\n property: 'ratio'\n }, {\n displayName: 'Percent Complete',\n property: 'percentComplete'\n }, {\n displayName: 'Downloaded',\n property: 'downloadTotal'\n }, {\n displayName: 'Uploaded',\n property: 'uploadTotal'\n }, {\n displayName: 'File Size',\n property: 'sizeBytes'\n }, {\n displayName: 'Date Added',\n property: 'added'\n }];\n }\n }, {\n key: 'handleItemSelect',\n value: function handleItemSelect(sortBy) {\n var direction = this.props.selectedItem.direction;\n\n if (this.props.selectedItem.property === sortBy.property) {\n direction = direction === 'asc' ? 'desc' : 'asc';\n } else {\n direction = 'asc';\n }\n\n var sortProperty = {\n displayName: sortBy.displayName,\n property: sortBy.property,\n direction: direction\n };\n\n this.props.onSortChange(sortProperty);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(_genericDropdown2['default'], {\n handleItemSelect: this.handleItemSelect,\n header: this.getDropdownHeader(),\n menuItems: this.getMenuItems(),\n selectedItem: this.props.selectedItem\n });\n }\n }]);\n\n return SortDropdown;\n})(_react2['default'].Component);\n\nexports['default'] = SortDropdown;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9hY3Rpb24tYmFyL1NvcnREcm9wZG93bi5qcz85ZTgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdDQUFnQztBQUN6QztBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfY2xhc3NuYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcblxudmFyIF9jbGFzc25hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzbmFtZXMpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWNzcy10cmFuc2l0aW9uLWdyb3VwJyk7XG5cbnZhciBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXApO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfZ2VuZXJpY0Ryb3Bkb3duID0gcmVxdWlyZSgnLi4vZ2VuZXJpYy9Ecm9wZG93bicpO1xuXG52YXIgX2dlbmVyaWNEcm9wZG93bjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZW5lcmljRHJvcGRvd24pO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9hY3Rpb25zL1VJQWN0aW9ucycpO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc1VJQWN0aW9ucyk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydnZXREcm9wZG93bkhlYWRlcicsICdoYW5kbGVJdGVtU2VsZWN0J107XG5cbnZhciBTb3J0RHJvcGRvd24gPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFNvcnREcm9wZG93biwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU29ydERyb3Bkb3duKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU29ydERyb3Bkb3duKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFNvcnREcm9wZG93bi5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIG1ldGhvZHNUb0JpbmQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTb3J0RHJvcGRvd24sIFt7XG4gICAga2V5OiAnZ2V0RHJvcGRvd25IZWFkZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREcm9wZG93bkhlYWRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2EnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ2Ryb3Bkb3duX19idXR0b24nIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdsYWJlbCcsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdkcm9wZG93bl9fbGFiZWwnIH0sXG4gICAgICAgICAgJ1NvcnQgQnknXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2Ryb3Bkb3duX192YWx1ZScgfSxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGVkSXRlbS5kaXNwbGF5TmFtZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldE1lbnVJdGVtcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1lbnVJdGVtcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICBwcm9wZXJ0eTogJ25hbWUnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnRVRBJyxcbiAgICAgICAgcHJvcGVydHk6ICdldGEnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnRG93bmxvYWQgU3BlZWQnLFxuICAgICAgICBwcm9wZXJ0eTogJ2Rvd25sb2FkUmF0ZSdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdVcGxvYWQgU3BlZWQnLFxuICAgICAgICBwcm9wZXJ0eTogJ3VwbG9hZFJhdGUnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnUmF0aW8nLFxuICAgICAgICBwcm9wZXJ0eTogJ3JhdGlvJ1xuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1BlcmNlbnQgQ29tcGxldGUnLFxuICAgICAgICBwcm9wZXJ0eTogJ3BlcmNlbnRDb21wbGV0ZSdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdEb3dubG9hZGVkJyxcbiAgICAgICAgcHJvcGVydHk6ICdkb3dubG9hZFRvdGFsJ1xuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1VwbG9hZGVkJyxcbiAgICAgICAgcHJvcGVydHk6ICd1cGxvYWRUb3RhbCdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdGaWxlIFNpemUnLFxuICAgICAgICBwcm9wZXJ0eTogJ3NpemVCeXRlcydcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdEYXRlIEFkZGVkJyxcbiAgICAgICAgcHJvcGVydHk6ICdhZGRlZCdcbiAgICAgIH1dO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZUl0ZW1TZWxlY3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVJdGVtU2VsZWN0KHNvcnRCeSkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtLmRpcmVjdGlvbjtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtLnByb3BlcnR5ID09PSBzb3J0QnkucHJvcGVydHkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3J0UHJvcGVydHkgPSB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBzb3J0QnkuZGlzcGxheU5hbWUsXG4gICAgICAgIHByb3BlcnR5OiBzb3J0QnkucHJvcGVydHksXG4gICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnByb3BzLm9uU29ydENoYW5nZShzb3J0UHJvcGVydHkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfZ2VuZXJpY0Ryb3Bkb3duMlsnZGVmYXVsdCddLCB7XG4gICAgICAgIGhhbmRsZUl0ZW1TZWxlY3Q6IHRoaXMuaGFuZGxlSXRlbVNlbGVjdCxcbiAgICAgICAgaGVhZGVyOiB0aGlzLmdldERyb3Bkb3duSGVhZGVyKCksXG4gICAgICAgIG1lbnVJdGVtczogdGhpcy5nZXRNZW51SXRlbXMoKSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiB0aGlzLnByb3BzLnNlbGVjdGVkSXRlbVxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNvcnREcm9wZG93bjtcbn0pKF9yZWFjdDJbJ2RlZmF1bHQnXS5Db21wb25lbnQpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBTb3J0RHJvcGRvd247XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvYWN0aW9uLWJhci9Tb3J0RHJvcGRvd24uanNcbiAqKiBtb2R1bGUgaWQgPSAxNjNcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 164 */ @@ -1076,7 +1076,7 @@ /* 172 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames2 = __webpack_require__(164);\n\nvar _classnames3 = _interopRequireDefault(_classnames2);\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar methodsToBind = ['componentDidMount', 'componentWillUnmount', 'getDropdownMenu', 'onItemSelect', 'onDropdownClick', 'onExternalClick'];\n\nvar SortDropdown = (function (_React$Component) {\n _inherits(SortDropdown, _React$Component);\n\n function SortDropdown() {\n var _this = this;\n\n _classCallCheck(this, SortDropdown);\n\n _get(Object.getPrototypeOf(SortDropdown.prototype), 'constructor', this).call(this);\n\n this.state = {\n isExpanded: false\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(SortDropdown, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n window.addEventListener('click', this.onExternalClick);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n window.removeEventListener('click', this.onExternalClick);\n }\n }, {\n key: 'getDropdownMenu',\n value: function getDropdownMenu() {\n var menuItems = this.props.menuItems.map(function (property, index) {\n var classes = (0, _classnames3['default'])({\n 'dropdown__item': true,\n 'is-selected': this.props.selectedItem.property === property.property\n });\n return _react2['default'].createElement(\n 'li',\n { className: classes, key: index, onClick: this.onItemSelect.bind(this, property) },\n property.displayName\n );\n }, this);\n\n return _react2['default'].createElement(\n 'div',\n { className: 'dropdown__content' },\n _react2['default'].createElement(\n 'div',\n { className: 'dropdown__header' },\n this.props.header()\n ),\n _react2['default'].createElement(\n 'ul',\n { className: 'dropdown__items' },\n menuItems\n )\n );\n }\n }, {\n key: 'onDropdownClick',\n value: function onDropdownClick(event) {\n event.stopPropagation();\n this.setState({\n isExpanded: !this.state.isExpanded\n });\n }\n }, {\n key: 'onExternalClick',\n value: function onExternalClick() {\n if (this.state.isExpanded) {\n this.setState({\n isExpanded: false\n });\n }\n }\n }, {\n key: 'onItemSelect',\n value: function onItemSelect(item) {\n this.setState({\n isExpanded: false\n });\n this.props.handleItemSelect(item);\n }\n }, {\n key: 'render',\n value: function render() {\n var classes = (0, _classnames3['default'])(_defineProperty({\n 'dropdown': true,\n 'is-expanded': this.state.isExpanded\n }, this.props.dropdownClasses, true));\n\n var menu = null;\n\n if (this.state.isExpanded) {\n menu = this.getDropdownMenu();\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: classes, onClick: this.onDropdownClick },\n this.props.header(),\n _react2['default'].createElement(\n _reactAddonsCssTransitionGroup2['default'],\n {\n transitionName: 'dropdown__content',\n transitionEnterTimeout: 250,\n transitionLeaveTimeout: 250 },\n menu\n )\n );\n }\n }]);\n\n return SortDropdown;\n})(_react2['default'].Component);\n\nexports['default'] = SortDropdown;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9nZW5lcmljL0Ryb3Bkb3duLmpzPzdjY2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHVDQUF1QyxtQkFBbUIsNEJBQTRCLGlEQUFpRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGFBQWEsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFL29CLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRiwyQ0FBMkMsa0JBQWtCLGtDQUFrQyxxRUFBcUUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLEVBQUUsWUFBWTs7QUFFL00saURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxXQUFXLGtGQUFrRjtBQUM3RjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsU0FBUyxpQ0FBaUM7QUFDMUM7QUFDQTtBQUNBLFdBQVcsZ0NBQWdDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsb0RBQW9EO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMyID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xuXG52YXIgX2NsYXNzbmFtZXMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lczIpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWNzcy10cmFuc2l0aW9uLWdyb3VwJyk7XG5cbnZhciBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXApO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydjb21wb25lbnREaWRNb3VudCcsICdjb21wb25lbnRXaWxsVW5tb3VudCcsICdnZXREcm9wZG93bk1lbnUnLCAnb25JdGVtU2VsZWN0JywgJ29uRHJvcGRvd25DbGljaycsICdvbkV4dGVybmFsQ2xpY2snXTtcblxudmFyIFNvcnREcm9wZG93biA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU29ydERyb3Bkb3duLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTb3J0RHJvcGRvd24oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTb3J0RHJvcGRvd24pO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU29ydERyb3Bkb3duLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgbWV0aG9kc1RvQmluZC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNvcnREcm9wZG93biwgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkV4dGVybmFsQ2xpY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRXh0ZXJuYWxDbGljayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0RHJvcGRvd25NZW51JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RHJvcGRvd25NZW51KCkge1xuICAgICAgdmFyIG1lbnVJdGVtcyA9IHRoaXMucHJvcHMubWVudUl0ZW1zLm1hcChmdW5jdGlvbiAocHJvcGVydHksIGluZGV4KSB7XG4gICAgICAgIHZhciBjbGFzc2VzID0gKDAsIF9jbGFzc25hbWVzM1snZGVmYXVsdCddKSh7XG4gICAgICAgICAgJ2Ryb3Bkb3duX19pdGVtJzogdHJ1ZSxcbiAgICAgICAgICAnaXMtc2VsZWN0ZWQnOiB0aGlzLnByb3BzLnNlbGVjdGVkSXRlbS5wcm9wZXJ0eSA9PT0gcHJvcGVydHkucHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnbGknLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc2VzLCBrZXk6IGluZGV4LCBvbkNsaWNrOiB0aGlzLm9uSXRlbVNlbGVjdC5iaW5kKHRoaXMsIHByb3BlcnR5KSB9LFxuICAgICAgICAgIHByb3BlcnR5LmRpc3BsYXlOYW1lXG4gICAgICAgICk7XG4gICAgICB9LCB0aGlzKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdkcm9wZG93bl9fY29udGVudCcgfSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdkcm9wZG93bl9faGVhZGVyJyB9LFxuICAgICAgICAgIHRoaXMucHJvcHMuaGVhZGVyKClcbiAgICAgICAgKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ3VsJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2Ryb3Bkb3duX19pdGVtcycgfSxcbiAgICAgICAgICBtZW51SXRlbXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRyb3Bkb3duQ2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkRyb3Bkb3duQ2xpY2soZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRXhwYW5kZWQ6ICF0aGlzLnN0YXRlLmlzRXhwYW5kZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRXh0ZXJuYWxDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXh0ZXJuYWxDbGljaygpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25JdGVtU2VsZWN0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25JdGVtU2VsZWN0KGl0ZW0pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb3BzLmhhbmRsZUl0ZW1TZWxlY3QoaXRlbSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNsYXNzZXMgPSAoMCwgX2NsYXNzbmFtZXMzWydkZWZhdWx0J10pKF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgICAgICdkcm9wZG93bic6IHRydWUsXG4gICAgICAgICdpcy1leHBhbmRlZCc6IHRoaXMuc3RhdGUuaXNFeHBhbmRlZFxuICAgICAgfSwgdGhpcy5wcm9wcy5kcm9wZG93bkNsYXNzZXMsIHRydWUpKTtcblxuICAgICAgdmFyIG1lbnUgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgIG1lbnUgPSB0aGlzLmdldERyb3Bkb3duTWVudSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3Nlcywgb25DbGljazogdGhpcy5vbkRyb3Bkb3duQ2xpY2sgfSxcbiAgICAgICAgdGhpcy5wcm9wcy5oZWFkZXIoKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwMlsnZGVmYXVsdCddLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25OYW1lOiAnZHJvcGRvd25fX2NvbnRlbnQnLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkVudGVyVGltZW91dDogMjUwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkxlYXZlVGltZW91dDogMjUwIH0sXG4gICAgICAgICAgbWVudVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTb3J0RHJvcGRvd247XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gU29ydERyb3Bkb3duO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL2dlbmVyaWMvRHJvcGRvd24uanNcbiAqKiBtb2R1bGUgaWQgPSAxNzJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames2 = __webpack_require__(164);\n\nvar _classnames3 = _interopRequireDefault(_classnames2);\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar methodsToBind = ['componentDidMount', 'componentWillUnmount', 'getDropdownMenu', 'onItemSelect', 'onDropdownClick', 'onExternalClick'];\n\nvar SortDropdown = (function (_React$Component) {\n _inherits(SortDropdown, _React$Component);\n\n function SortDropdown() {\n var _this = this;\n\n _classCallCheck(this, SortDropdown);\n\n _get(Object.getPrototypeOf(SortDropdown.prototype), 'constructor', this).call(this);\n\n this.state = {\n isExpanded: false\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(SortDropdown, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n window.addEventListener('click', this.onExternalClick);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n window.removeEventListener('click', this.onExternalClick);\n }\n }, {\n key: 'getDropdownMenu',\n value: function getDropdownMenu() {\n var menuItems = this.props.menuItems.map(function (property, index) {\n var classes = (0, _classnames3['default'])({\n 'dropdown__item': true,\n 'is-selected': this.props.selectedItem.property === property.property\n });\n return _react2['default'].createElement(\n 'li',\n { className: classes, key: index, onClick: this.onItemSelect.bind(this, property) },\n property.displayName\n );\n }, this);\n\n return _react2['default'].createElement(\n 'div',\n { className: 'dropdown__content' },\n _react2['default'].createElement(\n 'div',\n { className: 'dropdown__header' },\n this.props.header\n ),\n _react2['default'].createElement(\n 'ul',\n { className: 'dropdown__items' },\n menuItems\n )\n );\n }\n }, {\n key: 'onDropdownClick',\n value: function onDropdownClick(event) {\n event.stopPropagation();\n this.setState({\n isExpanded: !this.state.isExpanded\n });\n }\n }, {\n key: 'onExternalClick',\n value: function onExternalClick() {\n if (this.state.isExpanded) {\n this.setState({\n isExpanded: false\n });\n }\n }\n }, {\n key: 'onItemSelect',\n value: function onItemSelect(item) {\n this.setState({\n isExpanded: false\n });\n this.props.handleItemSelect(item);\n }\n }, {\n key: 'render',\n value: function render() {\n var classes = (0, _classnames3['default'])(_defineProperty({\n 'dropdown': true,\n 'is-expanded': this.state.isExpanded\n }, this.props.dropdownClasses, true));\n\n var menu = null;\n\n if (this.state.isExpanded) {\n menu = this.getDropdownMenu();\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: classes, onClick: this.onDropdownClick },\n this.props.header,\n _react2['default'].createElement(\n _reactAddonsCssTransitionGroup2['default'],\n {\n transitionName: 'dropdown__content',\n transitionEnterTimeout: 250,\n transitionLeaveTimeout: 250 },\n menu\n )\n );\n }\n }]);\n\n return SortDropdown;\n})(_react2['default'].Component);\n\nexports['default'] = SortDropdown;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9nZW5lcmljL0Ryb3Bkb3duLmpzPzdjY2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHVDQUF1QyxtQkFBbUIsNEJBQTRCLGlEQUFpRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGFBQWEsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFL29CLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRiwyQ0FBMkMsa0JBQWtCLGtDQUFrQyxxRUFBcUUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLEVBQUUsWUFBWTs7QUFFL00saURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxXQUFXLGtGQUFrRjtBQUM3RjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsU0FBUyxpQ0FBaUM7QUFDMUM7QUFDQTtBQUNBLFdBQVcsZ0NBQWdDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsb0RBQW9EO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMyID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xuXG52YXIgX2NsYXNzbmFtZXMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lczIpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWNzcy10cmFuc2l0aW9uLWdyb3VwJyk7XG5cbnZhciBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXApO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydjb21wb25lbnREaWRNb3VudCcsICdjb21wb25lbnRXaWxsVW5tb3VudCcsICdnZXREcm9wZG93bk1lbnUnLCAnb25JdGVtU2VsZWN0JywgJ29uRHJvcGRvd25DbGljaycsICdvbkV4dGVybmFsQ2xpY2snXTtcblxudmFyIFNvcnREcm9wZG93biA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU29ydERyb3Bkb3duLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTb3J0RHJvcGRvd24oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTb3J0RHJvcGRvd24pO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU29ydERyb3Bkb3duLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgbWV0aG9kc1RvQmluZC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNvcnREcm9wZG93biwgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkV4dGVybmFsQ2xpY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRXh0ZXJuYWxDbGljayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0RHJvcGRvd25NZW51JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RHJvcGRvd25NZW51KCkge1xuICAgICAgdmFyIG1lbnVJdGVtcyA9IHRoaXMucHJvcHMubWVudUl0ZW1zLm1hcChmdW5jdGlvbiAocHJvcGVydHksIGluZGV4KSB7XG4gICAgICAgIHZhciBjbGFzc2VzID0gKDAsIF9jbGFzc25hbWVzM1snZGVmYXVsdCddKSh7XG4gICAgICAgICAgJ2Ryb3Bkb3duX19pdGVtJzogdHJ1ZSxcbiAgICAgICAgICAnaXMtc2VsZWN0ZWQnOiB0aGlzLnByb3BzLnNlbGVjdGVkSXRlbS5wcm9wZXJ0eSA9PT0gcHJvcGVydHkucHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnbGknLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc2VzLCBrZXk6IGluZGV4LCBvbkNsaWNrOiB0aGlzLm9uSXRlbVNlbGVjdC5iaW5kKHRoaXMsIHByb3BlcnR5KSB9LFxuICAgICAgICAgIHByb3BlcnR5LmRpc3BsYXlOYW1lXG4gICAgICAgICk7XG4gICAgICB9LCB0aGlzKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdkcm9wZG93bl9fY29udGVudCcgfSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdkcm9wZG93bl9faGVhZGVyJyB9LFxuICAgICAgICAgIHRoaXMucHJvcHMuaGVhZGVyXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd1bCcsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdkcm9wZG93bl9faXRlbXMnIH0sXG4gICAgICAgICAgbWVudUl0ZW1zXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Ecm9wZG93bkNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Ecm9wZG93bkNsaWNrKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0V4cGFuZGVkOiAhdGhpcy5zdGF0ZS5pc0V4cGFuZGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkV4dGVybmFsQ2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkV4dGVybmFsQ2xpY2soKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uSXRlbVNlbGVjdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSXRlbVNlbGVjdChpdGVtKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9wcy5oYW5kbGVJdGVtU2VsZWN0KGl0ZW0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjbGFzc2VzID0gKDAsIF9jbGFzc25hbWVzM1snZGVmYXVsdCddKShfZGVmaW5lUHJvcGVydHkoe1xuICAgICAgICAnZHJvcGRvd24nOiB0cnVlLFxuICAgICAgICAnaXMtZXhwYW5kZWQnOiB0aGlzLnN0YXRlLmlzRXhwYW5kZWRcbiAgICAgIH0sIHRoaXMucHJvcHMuZHJvcGRvd25DbGFzc2VzLCB0cnVlKSk7XG5cbiAgICAgIHZhciBtZW51ID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNFeHBhbmRlZCkge1xuICAgICAgICBtZW51ID0gdGhpcy5nZXREcm9wZG93bk1lbnUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzZXMsIG9uQ2xpY2s6IHRoaXMub25Ecm9wZG93bkNsaWNrIH0sXG4gICAgICAgIHRoaXMucHJvcHMuaGVhZGVyLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyWydkZWZhdWx0J10sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHJhbnNpdGlvbk5hbWU6ICdkcm9wZG93bl9fY29udGVudCcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uRW50ZXJUaW1lb3V0OiAyNTAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uTGVhdmVUaW1lb3V0OiAyNTAgfSxcbiAgICAgICAgICBtZW51XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNvcnREcm9wZG93bjtcbn0pKF9yZWFjdDJbJ2RlZmF1bHQnXS5Db21wb25lbnQpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBTb3J0RHJvcGRvd247XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvZ2VuZXJpYy9Ecm9wZG93bi5qc1xuICoqIG1vZHVsZSBpZCA9IDE3MlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ }, /* 173 */ @@ -1226,7 +1226,7 @@ /* 197 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _BaseStore2 = __webpack_require__(195);\n\nvar _BaseStore3 = _interopRequireDefault(_BaseStore2);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilFilterTorrents = __webpack_require__(200);\n\nvar _utilSearchTorrents = __webpack_require__(201);\n\nvar _utilSelectTorrents = __webpack_require__(202);\n\nvar _utilSortTorrents = __webpack_require__(203);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar _TorrentFilterStore = __webpack_require__(194);\n\nvar _TorrentFilterStore2 = _interopRequireDefault(_TorrentFilterStore);\n\nvar _UIStore = __webpack_require__(204);\n\nvar _UIStore2 = _interopRequireDefault(_UIStore);\n\nvar pollInterval = 5000;\n\nvar TorrentStoreClass = (function (_BaseStore) {\n _inherits(TorrentStoreClass, _BaseStore);\n\n function TorrentStoreClass() {\n _classCallCheck(this, TorrentStoreClass);\n\n _get(Object.getPrototypeOf(TorrentStoreClass.prototype), 'constructor', this).call(this);\n\n this.pollTorrentDetailsIntervalID = null;\n this.pollTorrentsIntervalID = null;\n this.isPollingTorrentDetails = false;\n this.isPollingTorrents = false;\n this.selectedTorrents = [];\n this.torrentDetails = {};\n this.torrents = [];\n }\n\n _createClass(TorrentStoreClass, [{\n key: 'fetchTorrentDetails',\n value: function fetchTorrentDetails() {\n _actionsTorrentActions2['default'].fetchTorrentDetails(_UIStore2['default'].getTorrentDetailsHash());\n if (!this.isPollingTorrentDetails) {\n this.stopPollingTorrentDetails();\n this.startPollingTorrentDetails();\n }\n }\n }, {\n key: 'fetchTorrents',\n value: function fetchTorrents() {\n _actionsTorrentActions2['default'].fetchTorrents();\n\n if (!this.isPollingTorrents) {\n this.startPollingTorrents();\n }\n }\n }, {\n key: 'getTorrentDetails',\n value: function getTorrentDetails(hash) {\n return this.torrentDetails[hash] || {};\n }\n }, {\n key: 'setTorrentDetails',\n value: function setTorrentDetails(hash, torrentDetails) {\n this.torrentDetails[hash] = torrentDetails;\n this.emit(_constantsEventTypes2['default'].CLIENT_TORRENT_DETAILS_CHANGE);\n }\n }, {\n key: 'getSelectedTorrents',\n value: function getSelectedTorrents() {\n return this.selectedTorrents;\n }\n }, {\n key: 'setSelectedTorrents',\n value: function setSelectedTorrents(event, hash) {\n this.selectedTorrents = (0, _utilSelectTorrents.selectTorrents)({\n event: event,\n hash: hash,\n selectedTorrents: this.selectedTorrents,\n torrentList: this.torrents\n });\n this.emit(_constantsEventTypes2['default'].UI_TORRENT_SELECTION_CHANGE);\n }\n }, {\n key: 'getTorrent',\n value: function getTorrent(hash) {\n return _lodash2['default'].find(this.torrents, function (torrent) {\n return torrent.hash === hash;\n });\n }\n }, {\n key: 'getTorrents',\n value: function getTorrents() {\n if (_TorrentFilterStore2['default'].getStatusFilter() || _TorrentFilterStore2['default'].getSearchFilter()) {\n return this.filteredTorrents;\n }\n\n return this.torrents;\n }\n }, {\n key: 'setTorrents',\n value: function setTorrents(torrents) {\n this.torrents = (0, _utilSortTorrents.sortTorrents)(Object.assign([], torrents), _TorrentFilterStore2['default'].getTorrentsSort());\n\n var statusFilter = _TorrentFilterStore2['default'].getStatusFilter();\n var searchFilter = _TorrentFilterStore2['default'].getSearchFilter();\n\n if (statusFilter || searchFilter) {\n var filteredTorrents = Object.assign([], this.torrents);\n\n if (statusFilter && statusFilter !== 'all') {\n filteredTorrents = (0, _utilFilterTorrents.filterTorrents)(filteredTorrents, statusFilter);\n }\n\n if (searchFilter && searchFilter !== '') {\n filteredTorrents = (0, _utilSearchTorrents.searchTorrents)(filteredTorrents, searchFilter);\n }\n\n this.filteredTorrents = filteredTorrents;\n }\n\n this.emit(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_SUCCESS);\n }\n }, {\n key: 'startPollingTorrentDetails',\n value: function startPollingTorrentDetails() {\n this.isPollingTorrentDetails = true;\n this.pollTorrentDetailsIntervalID = setInterval(this.fetchTorrentDetails.bind(this), pollInterval);\n }\n }, {\n key: 'startPollingTorrents',\n value: function startPollingTorrents() {\n this.isPollingTorrents = true;\n this.pollTorrentsIntervalID = setInterval(this.fetchTorrents.bind(this), pollInterval);\n }\n }, {\n key: 'stopPollingTorrentDetails',\n value: function stopPollingTorrentDetails() {\n clearInterval(this.pollTorrentDetailsIntervalID);\n this.isPollingTorrents = false;\n }\n }, {\n key: 'stopPollingTorrents',\n value: function stopPollingTorrents() {\n clearInterval(this.pollTorrentsIntervalID);\n this.isPollingTorrentDetails = false;\n }\n }, {\n key: 'triggerTorrentsFilter',\n value: function triggerTorrentsFilter() {\n this.setTorrents(this.torrents);\n }\n }]);\n\n return TorrentStoreClass;\n})(_BaseStore3['default']);\n\nvar TorrentStore = new TorrentStoreClass();\n\n_dispatcherAppDispatcher2['default'].register(function (payload) {\n var action = payload.action;\n var source = payload.source;\n\n switch (action.type) {\n case _constantsActionTypes2['default'].CLIENT_FETCH_TORRENT_DETAILS_SUCCESS:\n TorrentStore.setTorrentDetails(action.data.hash, action.data.torrentDetails);\n break;\n case _constantsActionTypes2['default'].CLIENT_FETCH_TORRENTS_SUCCESS:\n TorrentStore.setTorrents(action.data.torrents);\n break;\n case _constantsActionTypes2['default'].CLIENT_FETCH_TORRENTS_ERROR:\n console.log(action);\n break;\n case _constantsActionTypes2['default'].UI_CLICK_TORRENT:\n TorrentStore.setSelectedTorrents(action.data.event, action.data.hash);\n break;\n case _constantsActionTypes2['default'].UI_SET_TORRENT_STATUS_FILTER:\n case _constantsActionTypes2['default'].UI_SET_TORRENT_SEARCH_FILTER:\n case _constantsActionTypes2['default'].UI_SET_TORRENT_SORT:\n TorrentStore.triggerTorrentsFilter();\n break;\n case _constantsActionTypes2['default'].CLIENT_ADD_TORRENT_SUCCESS:\n case _constantsActionTypes2['default'].CLIENT_START_TORRENT_SUCCESS:\n case _constantsActionTypes2['default'].CLIENT_STOP_TORRENT_SUCCESS:\n TorrentStore.fetchTorrents();\n break;\n }\n});\n\nexports['default'] = TorrentStore;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL1RvcnJlbnRTdG9yZS5qcz9lMDY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2xvZGFzaCA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG52YXIgX2xvZGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2Rhc2gpO1xuXG52YXIgX2NvbnN0YW50c0FjdGlvblR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzQWN0aW9uVHlwZXMpO1xuXG52YXIgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9BcHBEaXNwYXRjaGVyJyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIpO1xuXG52YXIgX0Jhc2VTdG9yZTIgPSByZXF1aXJlKCcuL0Jhc2VTdG9yZScpO1xuXG52YXIgX0Jhc2VTdG9yZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9CYXNlU3RvcmUyKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0V2ZW50VHlwZXMnKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbnN0YW50c0V2ZW50VHlwZXMpO1xuXG52YXIgX3V0aWxGaWx0ZXJUb3JyZW50cyA9IHJlcXVpcmUoJy4uL3V0aWwvZmlsdGVyVG9ycmVudHMnKTtcblxudmFyIF91dGlsU2VhcmNoVG9ycmVudHMgPSByZXF1aXJlKCcuLi91dGlsL3NlYXJjaFRvcnJlbnRzJyk7XG5cbnZhciBfdXRpbFNlbGVjdFRvcnJlbnRzID0gcmVxdWlyZSgnLi4vdXRpbC9zZWxlY3RUb3JyZW50cycpO1xuXG52YXIgX3V0aWxTb3J0VG9ycmVudHMgPSByZXF1aXJlKCcuLi91dGlsL3NvcnRUb3JyZW50cycpO1xuXG52YXIgX2FjdGlvbnNUb3JyZW50QWN0aW9ucyA9IHJlcXVpcmUoJy4uL2FjdGlvbnMvVG9ycmVudEFjdGlvbnMnKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc1RvcnJlbnRBY3Rpb25zKTtcblxudmFyIF9Ub3JyZW50RmlsdGVyU3RvcmUgPSByZXF1aXJlKCcuL1RvcnJlbnRGaWx0ZXJTdG9yZScpO1xuXG52YXIgX1RvcnJlbnRGaWx0ZXJTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub3JyZW50RmlsdGVyU3RvcmUpO1xuXG52YXIgX1VJU3RvcmUgPSByZXF1aXJlKCcuL1VJU3RvcmUnKTtcblxudmFyIF9VSVN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1VJU3RvcmUpO1xuXG52YXIgcG9sbEludGVydmFsID0gNTAwMDtcblxudmFyIFRvcnJlbnRTdG9yZUNsYXNzID0gKGZ1bmN0aW9uIChfQmFzZVN0b3JlKSB7XG4gIF9pbmhlcml0cyhUb3JyZW50U3RvcmVDbGFzcywgX0Jhc2VTdG9yZSk7XG5cbiAgZnVuY3Rpb24gVG9ycmVudFN0b3JlQ2xhc3MoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvcnJlbnRTdG9yZUNsYXNzKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFRvcnJlbnRTdG9yZUNsYXNzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBvbGxUb3JyZW50RGV0YWlsc0ludGVydmFsSUQgPSBudWxsO1xuICAgIHRoaXMucG9sbFRvcnJlbnRzSW50ZXJ2YWxJRCA9IG51bGw7XG4gICAgdGhpcy5pc1BvbGxpbmdUb3JyZW50RGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMuaXNQb2xsaW5nVG9ycmVudHMgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkVG9ycmVudHMgPSBbXTtcbiAgICB0aGlzLnRvcnJlbnREZXRhaWxzID0ge307XG4gICAgdGhpcy50b3JyZW50cyA9IFtdO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvcnJlbnRTdG9yZUNsYXNzLCBbe1xuICAgIGtleTogJ2ZldGNoVG9ycmVudERldGFpbHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmZXRjaFRvcnJlbnREZXRhaWxzKCkge1xuICAgICAgX2FjdGlvbnNUb3JyZW50QWN0aW9uczJbJ2RlZmF1bHQnXS5mZXRjaFRvcnJlbnREZXRhaWxzKF9VSVN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnREZXRhaWxzSGFzaCgpKTtcbiAgICAgIGlmICghdGhpcy5pc1BvbGxpbmdUb3JyZW50RGV0YWlscykge1xuICAgICAgICB0aGlzLnN0b3BQb2xsaW5nVG9ycmVudERldGFpbHMoKTtcbiAgICAgICAgdGhpcy5zdGFydFBvbGxpbmdUb3JyZW50RGV0YWlscygpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZldGNoVG9ycmVudHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmZXRjaFRvcnJlbnRzKCkge1xuICAgICAgX2FjdGlvbnNUb3JyZW50QWN0aW9uczJbJ2RlZmF1bHQnXS5mZXRjaFRvcnJlbnRzKCk7XG5cbiAgICAgIGlmICghdGhpcy5pc1BvbGxpbmdUb3JyZW50cykge1xuICAgICAgICB0aGlzLnN0YXJ0UG9sbGluZ1RvcnJlbnRzKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0VG9ycmVudERldGFpbHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUb3JyZW50RGV0YWlscyhoYXNoKSB7XG4gICAgICByZXR1cm4gdGhpcy50b3JyZW50RGV0YWlsc1toYXNoXSB8fCB7fTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRUb3JyZW50RGV0YWlscycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFRvcnJlbnREZXRhaWxzKGhhc2gsIHRvcnJlbnREZXRhaWxzKSB7XG4gICAgICB0aGlzLnRvcnJlbnREZXRhaWxzW2hhc2hdID0gdG9ycmVudERldGFpbHM7XG4gICAgICB0aGlzLmVtaXQoX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX1RPUlJFTlRfREVUQUlMU19DSEFOR0UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFNlbGVjdGVkVG9ycmVudHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTZWxlY3RlZFRvcnJlbnRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUb3JyZW50cztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRTZWxlY3RlZFRvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0U2VsZWN0ZWRUb3JyZW50cyhldmVudCwgaGFzaCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRvcnJlbnRzID0gKDAsIF91dGlsU2VsZWN0VG9ycmVudHMuc2VsZWN0VG9ycmVudHMpKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBzZWxlY3RlZFRvcnJlbnRzOiB0aGlzLnNlbGVjdGVkVG9ycmVudHMsXG4gICAgICAgIHRvcnJlbnRMaXN0OiB0aGlzLnRvcnJlbnRzXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UX1NFTEVDVElPTl9DSEFOR0UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRvcnJlbnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUb3JyZW50KGhhc2gpIHtcbiAgICAgIHJldHVybiBfbG9kYXNoMlsnZGVmYXVsdCddLmZpbmQodGhpcy50b3JyZW50cywgZnVuY3Rpb24gKHRvcnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRvcnJlbnQuaGFzaCA9PT0gaGFzaDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VG9ycmVudHMoKSB7XG4gICAgICBpZiAoX1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS5nZXRTdGF0dXNGaWx0ZXIoKSB8fCBfVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmdldFNlYXJjaEZpbHRlcigpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkVG9ycmVudHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRvcnJlbnRzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFRvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VG9ycmVudHModG9ycmVudHMpIHtcbiAgICAgIHRoaXMudG9ycmVudHMgPSAoMCwgX3V0aWxTb3J0VG9ycmVudHMuc29ydFRvcnJlbnRzKShPYmplY3QuYXNzaWduKFtdLCB0b3JyZW50cyksIF9Ub3JyZW50RmlsdGVyU3RvcmUyWydkZWZhdWx0J10uZ2V0VG9ycmVudHNTb3J0KCkpO1xuXG4gICAgICB2YXIgc3RhdHVzRmlsdGVyID0gX1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS5nZXRTdGF0dXNGaWx0ZXIoKTtcbiAgICAgIHZhciBzZWFyY2hGaWx0ZXIgPSBfVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmdldFNlYXJjaEZpbHRlcigpO1xuXG4gICAgICBpZiAoc3RhdHVzRmlsdGVyIHx8IHNlYXJjaEZpbHRlcikge1xuICAgICAgICB2YXIgZmlsdGVyZWRUb3JyZW50cyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMudG9ycmVudHMpO1xuXG4gICAgICAgIGlmIChzdGF0dXNGaWx0ZXIgJiYgc3RhdHVzRmlsdGVyICE9PSAnYWxsJykge1xuICAgICAgICAgIGZpbHRlcmVkVG9ycmVudHMgPSAoMCwgX3V0aWxGaWx0ZXJUb3JyZW50cy5maWx0ZXJUb3JyZW50cykoZmlsdGVyZWRUb3JyZW50cywgc3RhdHVzRmlsdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXIgJiYgc2VhcmNoRmlsdGVyICE9PSAnJykge1xuICAgICAgICAgIGZpbHRlcmVkVG9ycmVudHMgPSAoMCwgX3V0aWxTZWFyY2hUb3JyZW50cy5zZWFyY2hUb3JyZW50cykoZmlsdGVyZWRUb3JyZW50cywgc2VhcmNoRmlsdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsdGVyZWRUb3JyZW50cyA9IGZpbHRlcmVkVG9ycmVudHM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVE9SUkVOVFNfUkVRVUVTVF9TVUNDRVNTKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdGFydFBvbGxpbmdUb3JyZW50RGV0YWlscycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0UG9sbGluZ1RvcnJlbnREZXRhaWxzKCkge1xuICAgICAgdGhpcy5pc1BvbGxpbmdUb3JyZW50RGV0YWlscyA9IHRydWU7XG4gICAgICB0aGlzLnBvbGxUb3JyZW50RGV0YWlsc0ludGVydmFsSUQgPSBzZXRJbnRlcnZhbCh0aGlzLmZldGNoVG9ycmVudERldGFpbHMuYmluZCh0aGlzKSwgcG9sbEludGVydmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdGFydFBvbGxpbmdUb3JyZW50cycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0UG9sbGluZ1RvcnJlbnRzKCkge1xuICAgICAgdGhpcy5pc1BvbGxpbmdUb3JyZW50cyA9IHRydWU7XG4gICAgICB0aGlzLnBvbGxUb3JyZW50c0ludGVydmFsSUQgPSBzZXRJbnRlcnZhbCh0aGlzLmZldGNoVG9ycmVudHMuYmluZCh0aGlzKSwgcG9sbEludGVydmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdG9wUG9sbGluZ1RvcnJlbnREZXRhaWxzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcFBvbGxpbmdUb3JyZW50RGV0YWlscygpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVG9ycmVudERldGFpbHNJbnRlcnZhbElEKTtcbiAgICAgIHRoaXMuaXNQb2xsaW5nVG9ycmVudHMgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdG9wUG9sbGluZ1RvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcFBvbGxpbmdUb3JyZW50cygpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVG9ycmVudHNJbnRlcnZhbElEKTtcbiAgICAgIHRoaXMuaXNQb2xsaW5nVG9ycmVudERldGFpbHMgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd0cmlnZ2VyVG9ycmVudHNGaWx0ZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0cmlnZ2VyVG9ycmVudHNGaWx0ZXIoKSB7XG4gICAgICB0aGlzLnNldFRvcnJlbnRzKHRoaXMudG9ycmVudHMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb3JyZW50U3RvcmVDbGFzcztcbn0pKF9CYXNlU3RvcmUzWydkZWZhdWx0J10pO1xuXG52YXIgVG9ycmVudFN0b3JlID0gbmV3IFRvcnJlbnRTdG9yZUNsYXNzKCk7XG5cbl9kaXNwYXRjaGVyQXBwRGlzcGF0Y2hlcjJbJ2RlZmF1bHQnXS5yZWdpc3RlcihmdW5jdGlvbiAocGF5bG9hZCkge1xuICB2YXIgYWN0aW9uID0gcGF5bG9hZC5hY3Rpb247XG4gIHZhciBzb3VyY2UgPSBwYXlsb2FkLnNvdXJjZTtcblxuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX0ZFVENIX1RPUlJFTlRfREVUQUlMU19TVUNDRVNTOlxuICAgICAgVG9ycmVudFN0b3JlLnNldFRvcnJlbnREZXRhaWxzKGFjdGlvbi5kYXRhLmhhc2gsIGFjdGlvbi5kYXRhLnRvcnJlbnREZXRhaWxzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9GRVRDSF9UT1JSRU5UU19TVUNDRVNTOlxuICAgICAgVG9ycmVudFN0b3JlLnNldFRvcnJlbnRzKGFjdGlvbi5kYXRhLnRvcnJlbnRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9GRVRDSF9UT1JSRU5UU19FUlJPUjpcbiAgICAgIGNvbnNvbGUubG9nKGFjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5VSV9DTElDS19UT1JSRU5UOlxuICAgICAgVG9ycmVudFN0b3JlLnNldFNlbGVjdGVkVG9ycmVudHMoYWN0aW9uLmRhdGEuZXZlbnQsIGFjdGlvbi5kYXRhLmhhc2gpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uVUlfU0VUX1RPUlJFTlRfU1RBVFVTX0ZJTFRFUjpcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5VSV9TRVRfVE9SUkVOVF9TRUFSQ0hfRklMVEVSOlxuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLlVJX1NFVF9UT1JSRU5UX1NPUlQ6XG4gICAgICBUb3JyZW50U3RvcmUudHJpZ2dlclRvcnJlbnRzRmlsdGVyKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfQUREX1RPUlJFTlRfU1VDQ0VTUzpcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfU1RBUlRfVE9SUkVOVF9TVUNDRVNTOlxuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9TVE9QX1RPUlJFTlRfU1VDQ0VTUzpcbiAgICAgIFRvcnJlbnRTdG9yZS5mZXRjaFRvcnJlbnRzKCk7XG4gICAgICBicmVhaztcbiAgfVxufSk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFRvcnJlbnRTdG9yZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL1RvcnJlbnRTdG9yZS5qc1xuICoqIG1vZHVsZSBpZCA9IDE5N1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _BaseStore2 = __webpack_require__(195);\n\nvar _BaseStore3 = _interopRequireDefault(_BaseStore2);\n\nvar _configConfig = __webpack_require__(200);\n\nvar _configConfig2 = _interopRequireDefault(_configConfig);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilFilterTorrents = __webpack_require__(201);\n\nvar _utilSearchTorrents = __webpack_require__(202);\n\nvar _utilSelectTorrents = __webpack_require__(203);\n\nvar _utilSortTorrents = __webpack_require__(204);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar _TorrentFilterStore = __webpack_require__(194);\n\nvar _TorrentFilterStore2 = _interopRequireDefault(_TorrentFilterStore);\n\nvar _UIStore = __webpack_require__(205);\n\nvar _UIStore2 = _interopRequireDefault(_UIStore);\n\nvar TorrentStoreClass = (function (_BaseStore) {\n _inherits(TorrentStoreClass, _BaseStore);\n\n function TorrentStoreClass() {\n _classCallCheck(this, TorrentStoreClass);\n\n _get(Object.getPrototypeOf(TorrentStoreClass.prototype), 'constructor', this).call(this);\n\n this.filteredTorrents = [];\n this.pollTorrentDetailsIntervalID = null;\n this.pollTorrentsIntervalID = null;\n this.selectedTorrents = [];\n this.torrentDetails = {};\n this.torrents = [];\n }\n\n _createClass(TorrentStoreClass, [{\n key: 'fetchTorrentDetails',\n value: function fetchTorrentDetails() {\n _actionsTorrentActions2['default'].fetchTorrentDetails(_UIStore2['default'].getTorrentDetailsHash());\n if (this.pollTorrentDetailsIntervalID === null) {\n this.stopPollingTorrentDetails();\n this.startPollingTorrentDetails();\n }\n }\n }, {\n key: 'fetchTorrents',\n value: function fetchTorrents() {\n _actionsTorrentActions2['default'].fetchTorrents();\n\n if (this.pollTorrentsIntervalID === null) {\n this.startPollingTorrents();\n }\n }\n }, {\n key: 'getTorrentDetails',\n value: function getTorrentDetails(hash) {\n return this.torrentDetails[hash] || {};\n }\n }, {\n key: 'setTorrentDetails',\n value: function setTorrentDetails(hash, torrentDetails) {\n this.torrentDetails[hash] = torrentDetails;\n this.emit(_constantsEventTypes2['default'].CLIENT_TORRENT_DETAILS_CHANGE);\n }\n }, {\n key: 'getSelectedTorrents',\n value: function getSelectedTorrents() {\n return this.selectedTorrents;\n }\n }, {\n key: 'setSelectedTorrents',\n value: function setSelectedTorrents(event, hash) {\n this.selectedTorrents = (0, _utilSelectTorrents.selectTorrents)({\n event: event,\n hash: hash,\n selectedTorrents: this.selectedTorrents,\n torrentList: this.torrents\n });\n this.emit(_constantsEventTypes2['default'].UI_TORRENT_SELECTION_CHANGE);\n }\n }, {\n key: 'getTorrent',\n value: function getTorrent(hash) {\n return _lodash2['default'].find(this.torrents, function (torrent) {\n return torrent.hash === hash;\n });\n }\n }, {\n key: 'getTorrents',\n value: function getTorrents() {\n if (_TorrentFilterStore2['default'].getStatusFilter() || _TorrentFilterStore2['default'].getSearchFilter()) {\n return this.filteredTorrents;\n }\n\n return this.torrents;\n }\n }, {\n key: 'setTorrents',\n value: function setTorrents(torrents) {\n this.torrents = (0, _utilSortTorrents.sortTorrents)(Object.assign([], torrents), _TorrentFilterStore2['default'].getTorrentsSort());\n\n var statusFilter = _TorrentFilterStore2['default'].getStatusFilter();\n var searchFilter = _TorrentFilterStore2['default'].getSearchFilter();\n\n if (statusFilter || searchFilter) {\n var filteredTorrents = Object.assign([], this.torrents);\n\n if (statusFilter && statusFilter !== 'all') {\n filteredTorrents = (0, _utilFilterTorrents.filterTorrents)(filteredTorrents, statusFilter);\n }\n\n if (searchFilter && searchFilter !== '') {\n filteredTorrents = (0, _utilSearchTorrents.searchTorrents)(filteredTorrents, searchFilter);\n }\n\n this.filteredTorrents = filteredTorrents;\n }\n\n this.emit(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_SUCCESS);\n }\n }, {\n key: 'startPollingTorrentDetails',\n value: function startPollingTorrentDetails() {\n this.pollTorrentDetailsIntervalID = setInterval(this.fetchTorrentDetails.bind(this), _configConfig2['default'].pollInterval);\n }\n }, {\n key: 'startPollingTorrents',\n value: function startPollingTorrents() {\n this.pollTorrentsIntervalID = setInterval(this.fetchTorrents.bind(this), _configConfig2['default'].pollInterval);\n }\n }, {\n key: 'stopPollingTorrentDetails',\n value: function stopPollingTorrentDetails() {\n clearInterval(this.pollTorrentDetailsIntervalID);\n this.pollTorrentDetailsIntervalID = null;\n }\n }, {\n key: 'stopPollingTorrents',\n value: function stopPollingTorrents() {\n clearInterval(this.pollTorrentsIntervalID);\n this.pollTorrentsIntervalID = null;\n }\n }, {\n key: 'triggerTorrentsFilter',\n value: function triggerTorrentsFilter() {\n this.setTorrents(this.torrents);\n }\n }]);\n\n return TorrentStoreClass;\n})(_BaseStore3['default']);\n\nvar TorrentStore = new TorrentStoreClass();\n\n_dispatcherAppDispatcher2['default'].register(function (payload) {\n var action = payload.action;\n var source = payload.source;\n\n switch (action.type) {\n case _constantsActionTypes2['default'].CLIENT_FETCH_TORRENT_DETAILS_SUCCESS:\n TorrentStore.setTorrentDetails(action.data.hash, action.data.torrentDetails);\n break;\n case _constantsActionTypes2['default'].CLIENT_FETCH_TORRENTS_SUCCESS:\n TorrentStore.setTorrents(action.data.torrents);\n break;\n case _constantsActionTypes2['default'].CLIENT_FETCH_TORRENTS_ERROR:\n console.log(action);\n break;\n case _constantsActionTypes2['default'].UI_CLICK_TORRENT:\n TorrentStore.setSelectedTorrents(action.data.event, action.data.hash);\n break;\n case _constantsActionTypes2['default'].UI_SET_TORRENT_STATUS_FILTER:\n case _constantsActionTypes2['default'].UI_SET_TORRENT_SEARCH_FILTER:\n case _constantsActionTypes2['default'].UI_SET_TORRENT_SORT:\n TorrentStore.triggerTorrentsFilter();\n break;\n case _constantsActionTypes2['default'].CLIENT_ADD_TORRENT_SUCCESS:\n case _constantsActionTypes2['default'].CLIENT_START_TORRENT_SUCCESS:\n case _constantsActionTypes2['default'].CLIENT_STOP_TORRENT_SUCCESS:\n TorrentStore.fetchTorrents();\n break;\n }\n});\n\nexports['default'] = TorrentStore;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL1RvcnJlbnRTdG9yZS5qcz9lMDY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2xvZGFzaCA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG52YXIgX2xvZGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2Rhc2gpO1xuXG52YXIgX2NvbnN0YW50c0FjdGlvblR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzQWN0aW9uVHlwZXMpO1xuXG52YXIgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9BcHBEaXNwYXRjaGVyJyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIpO1xuXG52YXIgX0Jhc2VTdG9yZTIgPSByZXF1aXJlKCcuL0Jhc2VTdG9yZScpO1xuXG52YXIgX0Jhc2VTdG9yZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9CYXNlU3RvcmUyKTtcblxudmFyIF9jb25maWdDb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcvY29uZmlnJyk7XG5cbnZhciBfY29uZmlnQ29uZmlnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZ0NvbmZpZyk7XG5cbnZhciBfY29uc3RhbnRzRXZlbnRUeXBlcyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy9FdmVudFR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzRXZlbnRUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25zdGFudHNFdmVudFR5cGVzKTtcblxudmFyIF91dGlsRmlsdGVyVG9ycmVudHMgPSByZXF1aXJlKCcuLi91dGlsL2ZpbHRlclRvcnJlbnRzJyk7XG5cbnZhciBfdXRpbFNlYXJjaFRvcnJlbnRzID0gcmVxdWlyZSgnLi4vdXRpbC9zZWFyY2hUb3JyZW50cycpO1xuXG52YXIgX3V0aWxTZWxlY3RUb3JyZW50cyA9IHJlcXVpcmUoJy4uL3V0aWwvc2VsZWN0VG9ycmVudHMnKTtcblxudmFyIF91dGlsU29ydFRvcnJlbnRzID0gcmVxdWlyZSgnLi4vdXRpbC9zb3J0VG9ycmVudHMnKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMgPSByZXF1aXJlKCcuLi9hY3Rpb25zL1RvcnJlbnRBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc1RvcnJlbnRBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNUb3JyZW50QWN0aW9ucyk7XG5cbnZhciBfVG9ycmVudEZpbHRlclN0b3JlID0gcmVxdWlyZSgnLi9Ub3JyZW50RmlsdGVyU3RvcmUnKTtcblxudmFyIF9Ub3JyZW50RmlsdGVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9ycmVudEZpbHRlclN0b3JlKTtcblxudmFyIF9VSVN0b3JlID0gcmVxdWlyZSgnLi9VSVN0b3JlJyk7XG5cbnZhciBfVUlTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9VSVN0b3JlKTtcblxudmFyIFRvcnJlbnRTdG9yZUNsYXNzID0gKGZ1bmN0aW9uIChfQmFzZVN0b3JlKSB7XG4gIF9pbmhlcml0cyhUb3JyZW50U3RvcmVDbGFzcywgX0Jhc2VTdG9yZSk7XG5cbiAgZnVuY3Rpb24gVG9ycmVudFN0b3JlQ2xhc3MoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvcnJlbnRTdG9yZUNsYXNzKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFRvcnJlbnRTdG9yZUNsYXNzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmZpbHRlcmVkVG9ycmVudHMgPSBbXTtcbiAgICB0aGlzLnBvbGxUb3JyZW50RGV0YWlsc0ludGVydmFsSUQgPSBudWxsO1xuICAgIHRoaXMucG9sbFRvcnJlbnRzSW50ZXJ2YWxJRCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFRvcnJlbnRzID0gW107XG4gICAgdGhpcy50b3JyZW50RGV0YWlscyA9IHt9O1xuICAgIHRoaXMudG9ycmVudHMgPSBbXTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUb3JyZW50U3RvcmVDbGFzcywgW3tcbiAgICBrZXk6ICdmZXRjaFRvcnJlbnREZXRhaWxzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmV0Y2hUb3JyZW50RGV0YWlscygpIHtcbiAgICAgIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMyWydkZWZhdWx0J10uZmV0Y2hUb3JyZW50RGV0YWlscyhfVUlTdG9yZTJbJ2RlZmF1bHQnXS5nZXRUb3JyZW50RGV0YWlsc0hhc2goKSk7XG4gICAgICBpZiAodGhpcy5wb2xsVG9ycmVudERldGFpbHNJbnRlcnZhbElEID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3RvcFBvbGxpbmdUb3JyZW50RGV0YWlscygpO1xuICAgICAgICB0aGlzLnN0YXJ0UG9sbGluZ1RvcnJlbnREZXRhaWxzKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZmV0Y2hUb3JyZW50cycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZldGNoVG9ycmVudHMoKSB7XG4gICAgICBfYWN0aW9uc1RvcnJlbnRBY3Rpb25zMlsnZGVmYXVsdCddLmZldGNoVG9ycmVudHMoKTtcblxuICAgICAgaWYgKHRoaXMucG9sbFRvcnJlbnRzSW50ZXJ2YWxJRCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN0YXJ0UG9sbGluZ1RvcnJlbnRzKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0VG9ycmVudERldGFpbHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUb3JyZW50RGV0YWlscyhoYXNoKSB7XG4gICAgICByZXR1cm4gdGhpcy50b3JyZW50RGV0YWlsc1toYXNoXSB8fCB7fTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRUb3JyZW50RGV0YWlscycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFRvcnJlbnREZXRhaWxzKGhhc2gsIHRvcnJlbnREZXRhaWxzKSB7XG4gICAgICB0aGlzLnRvcnJlbnREZXRhaWxzW2hhc2hdID0gdG9ycmVudERldGFpbHM7XG4gICAgICB0aGlzLmVtaXQoX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX1RPUlJFTlRfREVUQUlMU19DSEFOR0UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFNlbGVjdGVkVG9ycmVudHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTZWxlY3RlZFRvcnJlbnRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUb3JyZW50cztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRTZWxlY3RlZFRvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0U2VsZWN0ZWRUb3JyZW50cyhldmVudCwgaGFzaCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRvcnJlbnRzID0gKDAsIF91dGlsU2VsZWN0VG9ycmVudHMuc2VsZWN0VG9ycmVudHMpKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBzZWxlY3RlZFRvcnJlbnRzOiB0aGlzLnNlbGVjdGVkVG9ycmVudHMsXG4gICAgICAgIHRvcnJlbnRMaXN0OiB0aGlzLnRvcnJlbnRzXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UX1NFTEVDVElPTl9DSEFOR0UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRvcnJlbnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUb3JyZW50KGhhc2gpIHtcbiAgICAgIHJldHVybiBfbG9kYXNoMlsnZGVmYXVsdCddLmZpbmQodGhpcy50b3JyZW50cywgZnVuY3Rpb24gKHRvcnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRvcnJlbnQuaGFzaCA9PT0gaGFzaDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VG9ycmVudHMoKSB7XG4gICAgICBpZiAoX1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS5nZXRTdGF0dXNGaWx0ZXIoKSB8fCBfVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmdldFNlYXJjaEZpbHRlcigpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkVG9ycmVudHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRvcnJlbnRzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFRvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VG9ycmVudHModG9ycmVudHMpIHtcbiAgICAgIHRoaXMudG9ycmVudHMgPSAoMCwgX3V0aWxTb3J0VG9ycmVudHMuc29ydFRvcnJlbnRzKShPYmplY3QuYXNzaWduKFtdLCB0b3JyZW50cyksIF9Ub3JyZW50RmlsdGVyU3RvcmUyWydkZWZhdWx0J10uZ2V0VG9ycmVudHNTb3J0KCkpO1xuXG4gICAgICB2YXIgc3RhdHVzRmlsdGVyID0gX1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS5nZXRTdGF0dXNGaWx0ZXIoKTtcbiAgICAgIHZhciBzZWFyY2hGaWx0ZXIgPSBfVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmdldFNlYXJjaEZpbHRlcigpO1xuXG4gICAgICBpZiAoc3RhdHVzRmlsdGVyIHx8IHNlYXJjaEZpbHRlcikge1xuICAgICAgICB2YXIgZmlsdGVyZWRUb3JyZW50cyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMudG9ycmVudHMpO1xuXG4gICAgICAgIGlmIChzdGF0dXNGaWx0ZXIgJiYgc3RhdHVzRmlsdGVyICE9PSAnYWxsJykge1xuICAgICAgICAgIGZpbHRlcmVkVG9ycmVudHMgPSAoMCwgX3V0aWxGaWx0ZXJUb3JyZW50cy5maWx0ZXJUb3JyZW50cykoZmlsdGVyZWRUb3JyZW50cywgc3RhdHVzRmlsdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXIgJiYgc2VhcmNoRmlsdGVyICE9PSAnJykge1xuICAgICAgICAgIGZpbHRlcmVkVG9ycmVudHMgPSAoMCwgX3V0aWxTZWFyY2hUb3JyZW50cy5zZWFyY2hUb3JyZW50cykoZmlsdGVyZWRUb3JyZW50cywgc2VhcmNoRmlsdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsdGVyZWRUb3JyZW50cyA9IGZpbHRlcmVkVG9ycmVudHM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVE9SUkVOVFNfUkVRVUVTVF9TVUNDRVNTKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdGFydFBvbGxpbmdUb3JyZW50RGV0YWlscycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0UG9sbGluZ1RvcnJlbnREZXRhaWxzKCkge1xuICAgICAgdGhpcy5wb2xsVG9ycmVudERldGFpbHNJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwodGhpcy5mZXRjaFRvcnJlbnREZXRhaWxzLmJpbmQodGhpcyksIF9jb25maWdDb25maWcyWydkZWZhdWx0J10ucG9sbEludGVydmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdGFydFBvbGxpbmdUb3JyZW50cycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0UG9sbGluZ1RvcnJlbnRzKCkge1xuICAgICAgdGhpcy5wb2xsVG9ycmVudHNJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwodGhpcy5mZXRjaFRvcnJlbnRzLmJpbmQodGhpcyksIF9jb25maWdDb25maWcyWydkZWZhdWx0J10ucG9sbEludGVydmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdG9wUG9sbGluZ1RvcnJlbnREZXRhaWxzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcFBvbGxpbmdUb3JyZW50RGV0YWlscygpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVG9ycmVudERldGFpbHNJbnRlcnZhbElEKTtcbiAgICAgIHRoaXMucG9sbFRvcnJlbnREZXRhaWxzSW50ZXJ2YWxJRCA9IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc3RvcFBvbGxpbmdUb3JyZW50cycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BQb2xsaW5nVG9ycmVudHMoKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucG9sbFRvcnJlbnRzSW50ZXJ2YWxJRCk7XG4gICAgICB0aGlzLnBvbGxUb3JyZW50c0ludGVydmFsSUQgPSBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3RyaWdnZXJUb3JyZW50c0ZpbHRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRyaWdnZXJUb3JyZW50c0ZpbHRlcigpIHtcbiAgICAgIHRoaXMuc2V0VG9ycmVudHModGhpcy50b3JyZW50cyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRvcnJlbnRTdG9yZUNsYXNzO1xufSkoX0Jhc2VTdG9yZTNbJ2RlZmF1bHQnXSk7XG5cbnZhciBUb3JyZW50U3RvcmUgPSBuZXcgVG9ycmVudFN0b3JlQ2xhc3MoKTtcblxuX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyMlsnZGVmYXVsdCddLnJlZ2lzdGVyKGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gIHZhciBhY3Rpb24gPSBwYXlsb2FkLmFjdGlvbjtcbiAgdmFyIHNvdXJjZSA9IHBheWxvYWQuc291cmNlO1xuXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfRkVUQ0hfVE9SUkVOVF9ERVRBSUxTX1NVQ0NFU1M6XG4gICAgICBUb3JyZW50U3RvcmUuc2V0VG9ycmVudERldGFpbHMoYWN0aW9uLmRhdGEuaGFzaCwgYWN0aW9uLmRhdGEudG9ycmVudERldGFpbHMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX0ZFVENIX1RPUlJFTlRTX1NVQ0NFU1M6XG4gICAgICBUb3JyZW50U3RvcmUuc2V0VG9ycmVudHMoYWN0aW9uLmRhdGEudG9ycmVudHMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX0ZFVENIX1RPUlJFTlRTX0VSUk9SOlxuICAgICAgY29uc29sZS5sb2coYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLlVJX0NMSUNLX1RPUlJFTlQ6XG4gICAgICBUb3JyZW50U3RvcmUuc2V0U2VsZWN0ZWRUb3JyZW50cyhhY3Rpb24uZGF0YS5ldmVudCwgYWN0aW9uLmRhdGEuaGFzaCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5VSV9TRVRfVE9SUkVOVF9TVEFUVVNfRklMVEVSOlxuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLlVJX1NFVF9UT1JSRU5UX1NFQVJDSF9GSUxURVI6XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uVUlfU0VUX1RPUlJFTlRfU09SVDpcbiAgICAgIFRvcnJlbnRTdG9yZS50cmlnZ2VyVG9ycmVudHNGaWx0ZXIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9BRERfVE9SUkVOVF9TVUNDRVNTOlxuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9TVEFSVF9UT1JSRU5UX1NVQ0NFU1M6XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX1NUT1BfVE9SUkVOVF9TVUNDRVNTOlxuICAgICAgVG9ycmVudFN0b3JlLmZldGNoVG9ycmVudHMoKTtcbiAgICAgIGJyZWFrO1xuICB9XG59KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudFN0b3JlO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9zdG9yZXMvVG9ycmVudFN0b3JlLmpzXG4gKiogbW9kdWxlIGlkID0gMTk3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 198 */ @@ -1244,145 +1244,157 @@ /* 200 */ /***/ function(module, exports) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.filterTorrents = filterTorrents;\n\nfunction filterTorrents(torrentList, torrentListFilterBy) {\n var filteredtorrentList = torrentList;\n\n if (torrentListFilterBy !== 'all') {\n filteredtorrentList = torrentList.filter(function (torrent) {\n if (torrent.status.indexOf('is-' + torrentListFilterBy) > -1) {\n return torrent;\n }\n });\n }\n\n return filteredtorrentList;\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9maWx0ZXJUb3JyZW50cy5qcz9lYzc0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EiLCJmaWxlIjoiMjAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVyVG9ycmVudHMgPSBmaWx0ZXJUb3JyZW50cztcblxuZnVuY3Rpb24gZmlsdGVyVG9ycmVudHModG9ycmVudExpc3QsIHRvcnJlbnRMaXN0RmlsdGVyQnkpIHtcbiAgdmFyIGZpbHRlcmVkdG9ycmVudExpc3QgPSB0b3JyZW50TGlzdDtcblxuICBpZiAodG9ycmVudExpc3RGaWx0ZXJCeSAhPT0gJ2FsbCcpIHtcbiAgICBmaWx0ZXJlZHRvcnJlbnRMaXN0ID0gdG9ycmVudExpc3QuZmlsdGVyKGZ1bmN0aW9uICh0b3JyZW50KSB7XG4gICAgICBpZiAodG9ycmVudC5zdGF0dXMuaW5kZXhPZignaXMtJyArIHRvcnJlbnRMaXN0RmlsdGVyQnkpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvcnJlbnQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWR0b3JyZW50TGlzdDtcbn1cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3V0aWwvZmlsdGVyVG9ycmVudHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar config = {\n maxHistoryStates: 30,\n pollInterval: 5000\n};\n\nexports[\"default\"] = config;\nmodule.exports = exports[\"default\"];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29uZmlnL2NvbmZpZy5qcz8zYzQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBjb25maWcgPSB7XG4gIG1heEhpc3RvcnlTdGF0ZXM6IDMwLFxuICBwb2xsSW50ZXJ2YWw6IDUwMDBcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gY29uZmlnO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbmZpZy9jb25maWcuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 201 */ /***/ function(module, exports) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.searchTorrents = searchTorrents;\n\nfunction searchTorrents(torrents, searchString) {\n var searchedTorrents = torrents;\n\n if (searchString !== '') {\n (function () {\n var queries = [];\n var searchTerms = searchString.replace(/,/g, ' ').split(' ');\n\n for (var i = 0, len = searchTerms.length; i < len; i++) {\n queries.push(new RegExp(searchTerms[i], 'gi'));\n }\n\n searchedTorrents = searchedTorrents.filter(function (torrent) {\n for (var i = 0, len = queries.length; i < len; i++) {\n if (!torrent.name.match(queries[i])) {\n return false;\n }\n }\n return true;\n });\n })();\n }\n\n return searchedTorrents;\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zZWFyY2hUb3JyZW50cy5qcz9iNzQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0MsU0FBUztBQUN4RDtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQSIsImZpbGUiOiIyMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWFyY2hUb3JyZW50cyA9IHNlYXJjaFRvcnJlbnRzO1xuXG5mdW5jdGlvbiBzZWFyY2hUb3JyZW50cyh0b3JyZW50cywgc2VhcmNoU3RyaW5nKSB7XG4gIHZhciBzZWFyY2hlZFRvcnJlbnRzID0gdG9ycmVudHM7XG5cbiAgaWYgKHNlYXJjaFN0cmluZyAhPT0gJycpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHF1ZXJpZXMgPSBbXTtcbiAgICAgIHZhciBzZWFyY2hUZXJtcyA9IHNlYXJjaFN0cmluZy5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlYXJjaFRlcm1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHF1ZXJpZXMucHVzaChuZXcgUmVnRXhwKHNlYXJjaFRlcm1zW2ldLCAnZ2knKSk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaGVkVG9ycmVudHMgPSBzZWFyY2hlZFRvcnJlbnRzLmZpbHRlcihmdW5jdGlvbiAodG9ycmVudCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcXVlcmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICghdG9ycmVudC5uYW1lLm1hdGNoKHF1ZXJpZXNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHJldHVybiBzZWFyY2hlZFRvcnJlbnRzO1xufVxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zZWFyY2hUb3JyZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDIwMVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.filterTorrents = filterTorrents;\n\nfunction filterTorrents(torrents, filterBy) {\n if (filterBy !== 'all') {\n torrents = torrentList.filter(function (torrent) {\n if (torrent.status.indexOf('is-' + filterBy) > -1) {\n return torrent;\n }\n });\n }\n return torrents;\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9maWx0ZXJUb3JyZW50cy5qcz9lYzc0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSIsImZpbGUiOiIyMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJUb3JyZW50cyA9IGZpbHRlclRvcnJlbnRzO1xuXG5mdW5jdGlvbiBmaWx0ZXJUb3JyZW50cyh0b3JyZW50cywgZmlsdGVyQnkpIHtcbiAgaWYgKGZpbHRlckJ5ICE9PSAnYWxsJykge1xuICAgIHRvcnJlbnRzID0gdG9ycmVudExpc3QuZmlsdGVyKGZ1bmN0aW9uICh0b3JyZW50KSB7XG4gICAgICBpZiAodG9ycmVudC5zdGF0dXMuaW5kZXhPZignaXMtJyArIGZpbHRlckJ5KSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b3JyZW50O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0b3JyZW50cztcbn1cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3V0aWwvZmlsdGVyVG9ycmVudHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 202 */ /***/ function(module, exports) { - eval("\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.selectTorrents = selectTorrents;\n\nfunction selectTorrents(options) {\n if (options.event.shiftKey) {\n if (options.selectedTorrents.length) {\n (function () {\n var lastHash = options.selectedTorrents[options.selectedTorrents.length - 1];\n var currentHashIndex = undefined;\n var lastHashIndex = undefined;\n\n // get the index of the last selected torrent.\n options.torrentList.some(function (torrent, index) {\n if (torrent.hash === lastHash) {\n lastHashIndex = index;\n return true;\n }\n });\n\n // get the index of the newly selected torrent.\n options.torrentList.some(function (torrent, index) {\n if (torrent.hash === options.hash) {\n currentHashIndex = index;\n return true;\n }\n });\n\n // from the previously selected index to the currently selected index,\n // add all torrent hashes to the selected array.\n // if the newly selcted hash is larger than the previous, start from\n // the newly selected hash and work backwards. otherwise go forwards.\n var increment = 1;\n\n if (currentHashIndex > lastHashIndex) {\n increment = -1;\n }\n\n while (currentHashIndex !== lastHashIndex) {\n var foundHash = options.torrentList[currentHashIndex].hash;\n // if the torrent isn't already selected, add the hash to the array.\n if (options.selectedTorrents.indexOf(foundHash) === -1) {\n options.selectedTorrents.push(foundHash);\n }\n currentHashIndex += increment;\n }\n })();\n } else {\n options.selectedTorrents = [options.hash];\n }\n } else if (options.event.metaKey || options.event.ctrlKey) {\n var hashPosition = options.selectedTorrents.indexOf(options.hash);\n if (hashPosition === -1) {\n // if the hash is not in the array, add it.\n options.selectedTorrents.push(options.hash);\n } else {\n // if the hash is in the array, remove it.\n options.selectedTorrents.splice(hashPosition, 1);\n }\n } else {\n // clicked torrent is only item in list.\n options.selectedTorrents = [options.hash];\n }\n return options.selectedTorrents;\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zZWxlY3RUb3JyZW50cy5qcz9mNjY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlbGVjdFRvcnJlbnRzID0gc2VsZWN0VG9ycmVudHM7XG5cbmZ1bmN0aW9uIHNlbGVjdFRvcnJlbnRzKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuZXZlbnQuc2hpZnRLZXkpIHtcbiAgICBpZiAob3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzLmxlbmd0aCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhc3RIYXNoID0gb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzW29wdGlvbnMuc2VsZWN0ZWRUb3JyZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgdmFyIGN1cnJlbnRIYXNoSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsYXN0SGFzaEluZGV4ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc2VsZWN0ZWQgdG9ycmVudC5cbiAgICAgICAgb3B0aW9ucy50b3JyZW50TGlzdC5zb21lKGZ1bmN0aW9uICh0b3JyZW50LCBpbmRleCkge1xuICAgICAgICAgIGlmICh0b3JyZW50Lmhhc2ggPT09IGxhc3RIYXNoKSB7XG4gICAgICAgICAgICBsYXN0SGFzaEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGdldCB0aGUgaW5kZXggb2YgdGhlIG5ld2x5IHNlbGVjdGVkIHRvcnJlbnQuXG4gICAgICAgIG9wdGlvbnMudG9ycmVudExpc3Quc29tZShmdW5jdGlvbiAodG9ycmVudCwgaW5kZXgpIHtcbiAgICAgICAgICBpZiAodG9ycmVudC5oYXNoID09PSBvcHRpb25zLmhhc2gpIHtcbiAgICAgICAgICAgIGN1cnJlbnRIYXNoSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBpbmRleCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGluZGV4LFxuICAgICAgICAvLyBhZGQgYWxsIHRvcnJlbnQgaGFzaGVzIHRvIHRoZSBzZWxlY3RlZCBhcnJheS5cbiAgICAgICAgLy8gaWYgdGhlIG5ld2x5IHNlbGN0ZWQgaGFzaCBpcyBsYXJnZXIgdGhhbiB0aGUgcHJldmlvdXMsIHN0YXJ0IGZyb21cbiAgICAgICAgLy8gdGhlIG5ld2x5IHNlbGVjdGVkIGhhc2ggYW5kIHdvcmsgYmFja3dhcmRzLiBvdGhlcndpc2UgZ28gZm9yd2FyZHMuXG4gICAgICAgIHZhciBpbmNyZW1lbnQgPSAxO1xuXG4gICAgICAgIGlmIChjdXJyZW50SGFzaEluZGV4ID4gbGFzdEhhc2hJbmRleCkge1xuICAgICAgICAgIGluY3JlbWVudCA9IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRIYXNoSW5kZXggIT09IGxhc3RIYXNoSW5kZXgpIHtcbiAgICAgICAgICB2YXIgZm91bmRIYXNoID0gb3B0aW9ucy50b3JyZW50TGlzdFtjdXJyZW50SGFzaEluZGV4XS5oYXNoO1xuICAgICAgICAgIC8vIGlmIHRoZSB0b3JyZW50IGlzbid0IGFscmVhZHkgc2VsZWN0ZWQsIGFkZCB0aGUgaGFzaCB0byB0aGUgYXJyYXkuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0ZWRUb3JyZW50cy5pbmRleE9mKGZvdW5kSGFzaCkgPT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlbGVjdGVkVG9ycmVudHMucHVzaChmb3VuZEhhc2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50SGFzaEluZGV4ICs9IGluY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzID0gW29wdGlvbnMuaGFzaF07XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuZXZlbnQubWV0YUtleSB8fCBvcHRpb25zLmV2ZW50LmN0cmxLZXkpIHtcbiAgICB2YXIgaGFzaFBvc2l0aW9uID0gb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzLmluZGV4T2Yob3B0aW9ucy5oYXNoKTtcbiAgICBpZiAoaGFzaFBvc2l0aW9uID09PSAtMSkge1xuICAgICAgLy8gaWYgdGhlIGhhc2ggaXMgbm90IGluIHRoZSBhcnJheSwgYWRkIGl0LlxuICAgICAgb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzLnB1c2gob3B0aW9ucy5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlIGhhc2ggaXMgaW4gdGhlIGFycmF5LCByZW1vdmUgaXQuXG4gICAgICBvcHRpb25zLnNlbGVjdGVkVG9ycmVudHMuc3BsaWNlKGhhc2hQb3NpdGlvbiwgMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNsaWNrZWQgdG9ycmVudCBpcyBvbmx5IGl0ZW0gaW4gbGlzdC5cbiAgICBvcHRpb25zLnNlbGVjdGVkVG9ycmVudHMgPSBbb3B0aW9ucy5oYXNoXTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzO1xufVxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zZWxlY3RUb3JyZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDIwMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.searchTorrents = searchTorrents;\n\nfunction searchTorrents(torrents, searchString) {\n if (searchString !== '') {\n (function () {\n var queries = [];\n var searchTerms = searchString.replace(/,/g, ' ').split(' ');\n\n for (var i = 0, len = searchTerms.length; i < len; i++) {\n queries.push(new RegExp(searchTerms[i], 'gi'));\n }\n\n torrents = torrents.filter(function (torrent) {\n for (var i = 0, len = queries.length; i < len; i++) {\n if (!torrent.name.match(queries[i])) {\n return false;\n }\n }\n return true;\n });\n })();\n }\n\n return torrents;\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zZWFyY2hUb3JyZW50cy5qcz9iNzQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0MsU0FBUztBQUN4RDtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQSIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWFyY2hUb3JyZW50cyA9IHNlYXJjaFRvcnJlbnRzO1xuXG5mdW5jdGlvbiBzZWFyY2hUb3JyZW50cyh0b3JyZW50cywgc2VhcmNoU3RyaW5nKSB7XG4gIGlmIChzZWFyY2hTdHJpbmcgIT09ICcnKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBxdWVyaWVzID0gW107XG4gICAgICB2YXIgc2VhcmNoVGVybXMgPSBzZWFyY2hTdHJpbmcucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWFyY2hUZXJtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBxdWVyaWVzLnB1c2gobmV3IFJlZ0V4cChzZWFyY2hUZXJtc1tpXSwgJ2dpJykpO1xuICAgICAgfVxuXG4gICAgICB0b3JyZW50cyA9IHRvcnJlbnRzLmZpbHRlcihmdW5jdGlvbiAodG9ycmVudCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcXVlcmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICghdG9ycmVudC5uYW1lLm1hdGNoKHF1ZXJpZXNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHJldHVybiB0b3JyZW50cztcbn1cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3V0aWwvc2VhcmNoVG9ycmVudHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 203 */ /***/ function(module, exports) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.sortTorrents = sortTorrents;\n\nfunction sortTorrents(torrents, sortBy) {\n if (torrents.length) {\n var _ret = (function () {\n var direction = sortBy.direction;\n var property = sortBy.property;\n var sortedTorrents = Object.assign([], torrents);\n\n sortedTorrents.sort(function (a, b) {\n var valA = a[property];\n var valB = b[property];\n\n if (property === 'eta') {\n // keep infinity at bottom of array when sorting by eta\n if (valA === 'Infinity' && valB !== 'Infinity') {\n return 1;\n } else if (valA !== 'Infinity' && valB === 'Infinity') {\n return -1;\n }\n // if it's not infinity, compare the second as numbers\n if (valA !== 'Infinity') {\n valA = Number(valA.seconds);\n }\n if (valB !== 'Infinity') {\n valB = Number(valB.seconds);\n }\n } else if (property === 'name') {\n valA = valA.toLowerCase();\n valB = valB.toLowerCase();\n } else {\n valA = Number(valA);\n valB = Number(valB);\n }\n\n if (direction === 'asc') {\n if (valA > valB) {\n return 1;\n }\n if (valA < valB) {\n return -1;\n }\n } else {\n if (valA > valB) {\n return -1;\n }\n if (valA < valB) {\n return 1;\n }\n }\n\n return 0;\n });\n\n return {\n v: sortedTorrents\n };\n })();\n\n if (typeof _ret === 'object') return _ret.v;\n } else {\n return torrents;\n }\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zb3J0VG9ycmVudHMuanM/YjliOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSIsImZpbGUiOiIyMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0VG9ycmVudHMgPSBzb3J0VG9ycmVudHM7XG5cbmZ1bmN0aW9uIHNvcnRUb3JyZW50cyh0b3JyZW50cywgc29ydEJ5KSB7XG4gIGlmICh0b3JyZW50cy5sZW5ndGgpIHtcbiAgICB2YXIgX3JldCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gc29ydEJ5LmRpcmVjdGlvbjtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IHNvcnRCeS5wcm9wZXJ0eTtcbiAgICAgIHZhciBzb3J0ZWRUb3JyZW50cyA9IE9iamVjdC5hc3NpZ24oW10sIHRvcnJlbnRzKTtcblxuICAgICAgc29ydGVkVG9ycmVudHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB2YXIgdmFsQSA9IGFbcHJvcGVydHldO1xuICAgICAgICB2YXIgdmFsQiA9IGJbcHJvcGVydHldO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2V0YScpIHtcbiAgICAgICAgICAvLyBrZWVwIGluZmluaXR5IGF0IGJvdHRvbSBvZiBhcnJheSB3aGVuIHNvcnRpbmcgYnkgZXRhXG4gICAgICAgICAgaWYgKHZhbEEgPT09ICdJbmZpbml0eScgJiYgdmFsQiAhPT0gJ0luZmluaXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWxBICE9PSAnSW5maW5pdHknICYmIHZhbEIgPT09ICdJbmZpbml0eScpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaWYgaXQncyBub3QgaW5maW5pdHksIGNvbXBhcmUgdGhlIHNlY29uZCBhcyBudW1iZXJzXG4gICAgICAgICAgaWYgKHZhbEEgIT09ICdJbmZpbml0eScpIHtcbiAgICAgICAgICAgIHZhbEEgPSBOdW1iZXIodmFsQS5zZWNvbmRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbEIgIT09ICdJbmZpbml0eScpIHtcbiAgICAgICAgICAgIHZhbEIgPSBOdW1iZXIodmFsQi5zZWNvbmRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICduYW1lJykge1xuICAgICAgICAgIHZhbEEgPSB2YWxBLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdmFsQiA9IHZhbEIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxBID0gTnVtYmVyKHZhbEEpO1xuICAgICAgICAgIHZhbEIgPSBOdW1iZXIodmFsQik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgIGlmICh2YWxBID4gdmFsQikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWxBIDwgdmFsQikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsQSA+IHZhbEIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbEEgPCB2YWxCKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2OiBzb3J0ZWRUb3JyZW50c1xuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKHR5cGVvZiBfcmV0ID09PSAnb2JqZWN0JykgcmV0dXJuIF9yZXQudjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdG9ycmVudHM7XG4gIH1cbn1cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3V0aWwvc29ydFRvcnJlbnRzLmpzXG4gKiogbW9kdWxlIGlkID0gMjAzXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.selectTorrents = selectTorrents;\n\nfunction selectTorrents(options) {\n if (options.event.shiftKey) {\n if (options.selectedTorrents.length) {\n (function () {\n var lastHash = options.selectedTorrents[options.selectedTorrents.length - 1];\n var currentHashIndex = undefined;\n var lastHashIndex = undefined;\n\n // get the index of the last selected torrent.\n options.torrentList.some(function (torrent, index) {\n if (torrent.hash === lastHash) {\n lastHashIndex = index;\n return true;\n }\n });\n\n // get the index of the newly selected torrent.\n options.torrentList.some(function (torrent, index) {\n if (torrent.hash === options.hash) {\n currentHashIndex = index;\n return true;\n }\n });\n\n // from the previously selected index to the currently selected index,\n // add all torrent hashes to the selected array.\n // if the newly selcted hash is larger than the previous, start from\n // the newly selected hash and work backwards. otherwise go forwards.\n var increment = 1;\n\n if (currentHashIndex > lastHashIndex) {\n increment = -1;\n }\n\n while (currentHashIndex !== lastHashIndex) {\n var foundHash = options.torrentList[currentHashIndex].hash;\n // if the torrent isn't already selected, add the hash to the array.\n if (options.selectedTorrents.indexOf(foundHash) === -1) {\n options.selectedTorrents.push(foundHash);\n }\n currentHashIndex += increment;\n }\n })();\n } else {\n options.selectedTorrents = [options.hash];\n }\n } else if (options.event.metaKey || options.event.ctrlKey) {\n var hashPosition = options.selectedTorrents.indexOf(options.hash);\n if (hashPosition === -1) {\n // if the hash is not in the array, add it.\n options.selectedTorrents.push(options.hash);\n } else {\n // if the hash is in the array, remove it.\n options.selectedTorrents.splice(hashPosition, 1);\n }\n } else {\n // clicked torrent is only item in list.\n options.selectedTorrents = [options.hash];\n }\n return options.selectedTorrents;\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zZWxlY3RUb3JyZW50cy5qcz9mNjY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlbGVjdFRvcnJlbnRzID0gc2VsZWN0VG9ycmVudHM7XG5cbmZ1bmN0aW9uIHNlbGVjdFRvcnJlbnRzKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuZXZlbnQuc2hpZnRLZXkpIHtcbiAgICBpZiAob3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzLmxlbmd0aCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhc3RIYXNoID0gb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzW29wdGlvbnMuc2VsZWN0ZWRUb3JyZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgdmFyIGN1cnJlbnRIYXNoSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsYXN0SGFzaEluZGV4ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc2VsZWN0ZWQgdG9ycmVudC5cbiAgICAgICAgb3B0aW9ucy50b3JyZW50TGlzdC5zb21lKGZ1bmN0aW9uICh0b3JyZW50LCBpbmRleCkge1xuICAgICAgICAgIGlmICh0b3JyZW50Lmhhc2ggPT09IGxhc3RIYXNoKSB7XG4gICAgICAgICAgICBsYXN0SGFzaEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGdldCB0aGUgaW5kZXggb2YgdGhlIG5ld2x5IHNlbGVjdGVkIHRvcnJlbnQuXG4gICAgICAgIG9wdGlvbnMudG9ycmVudExpc3Quc29tZShmdW5jdGlvbiAodG9ycmVudCwgaW5kZXgpIHtcbiAgICAgICAgICBpZiAodG9ycmVudC5oYXNoID09PSBvcHRpb25zLmhhc2gpIHtcbiAgICAgICAgICAgIGN1cnJlbnRIYXNoSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBpbmRleCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGluZGV4LFxuICAgICAgICAvLyBhZGQgYWxsIHRvcnJlbnQgaGFzaGVzIHRvIHRoZSBzZWxlY3RlZCBhcnJheS5cbiAgICAgICAgLy8gaWYgdGhlIG5ld2x5IHNlbGN0ZWQgaGFzaCBpcyBsYXJnZXIgdGhhbiB0aGUgcHJldmlvdXMsIHN0YXJ0IGZyb21cbiAgICAgICAgLy8gdGhlIG5ld2x5IHNlbGVjdGVkIGhhc2ggYW5kIHdvcmsgYmFja3dhcmRzLiBvdGhlcndpc2UgZ28gZm9yd2FyZHMuXG4gICAgICAgIHZhciBpbmNyZW1lbnQgPSAxO1xuXG4gICAgICAgIGlmIChjdXJyZW50SGFzaEluZGV4ID4gbGFzdEhhc2hJbmRleCkge1xuICAgICAgICAgIGluY3JlbWVudCA9IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRIYXNoSW5kZXggIT09IGxhc3RIYXNoSW5kZXgpIHtcbiAgICAgICAgICB2YXIgZm91bmRIYXNoID0gb3B0aW9ucy50b3JyZW50TGlzdFtjdXJyZW50SGFzaEluZGV4XS5oYXNoO1xuICAgICAgICAgIC8vIGlmIHRoZSB0b3JyZW50IGlzbid0IGFscmVhZHkgc2VsZWN0ZWQsIGFkZCB0aGUgaGFzaCB0byB0aGUgYXJyYXkuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0ZWRUb3JyZW50cy5pbmRleE9mKGZvdW5kSGFzaCkgPT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlbGVjdGVkVG9ycmVudHMucHVzaChmb3VuZEhhc2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50SGFzaEluZGV4ICs9IGluY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzID0gW29wdGlvbnMuaGFzaF07XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuZXZlbnQubWV0YUtleSB8fCBvcHRpb25zLmV2ZW50LmN0cmxLZXkpIHtcbiAgICB2YXIgaGFzaFBvc2l0aW9uID0gb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzLmluZGV4T2Yob3B0aW9ucy5oYXNoKTtcbiAgICBpZiAoaGFzaFBvc2l0aW9uID09PSAtMSkge1xuICAgICAgLy8gaWYgdGhlIGhhc2ggaXMgbm90IGluIHRoZSBhcnJheSwgYWRkIGl0LlxuICAgICAgb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzLnB1c2gob3B0aW9ucy5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlIGhhc2ggaXMgaW4gdGhlIGFycmF5LCByZW1vdmUgaXQuXG4gICAgICBvcHRpb25zLnNlbGVjdGVkVG9ycmVudHMuc3BsaWNlKGhhc2hQb3NpdGlvbiwgMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNsaWNrZWQgdG9ycmVudCBpcyBvbmx5IGl0ZW0gaW4gbGlzdC5cbiAgICBvcHRpb25zLnNlbGVjdGVkVG9ycmVudHMgPSBbb3B0aW9ucy5oYXNoXTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zZWxlY3RlZFRvcnJlbnRzO1xufVxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zZWxlY3RUb3JyZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDIwM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ }, /* 204 */ -/***/ function(module, exports, __webpack_require__) { +/***/ function(module, exports) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _BaseStore2 = __webpack_require__(195);\n\nvar _BaseStore3 = _interopRequireDefault(_BaseStore2);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilSelectTorrents = __webpack_require__(202);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar UIStoreClass = (function (_BaseStore) {\n _inherits(UIStoreClass, _BaseStore);\n\n function UIStoreClass() {\n _classCallCheck(this, UIStoreClass);\n\n _get(Object.getPrototypeOf(UIStoreClass.prototype), 'constructor', this).call(this);\n\n this.activeModal = null;\n this.torrentDetailsHash = null;\n this.torrentDetailsOpen = false;\n }\n\n _createClass(UIStoreClass, [{\n key: 'getActiveModal',\n value: function getActiveModal() {\n return this.activeModal;\n }\n }, {\n key: 'setActiveModal',\n value: function setActiveModal(modal) {\n this.activeModal = modal;\n this.emit(_constantsEventTypes2['default'].UI_MODAL_CHANGE);\n }\n }, {\n key: 'getTorrentDetailsHash',\n value: function getTorrentDetailsHash() {\n return this.torrentDetailsHash;\n }\n }, {\n key: 'handleTorrentClick',\n value: function handleTorrentClick(hash) {\n this.torrentDetailsHash = hash;\n this.emit(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_HASH_CHANGE);\n }\n }, {\n key: 'handleTorrentDetailsClick',\n value: function handleTorrentDetailsClick(hash, event) {\n this.torrentDetailsOpen = !this.torrentDetailsOpen;\n this.emit(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_OPEN_CHANGE);\n }\n }, {\n key: 'isTorrentDetailsOpen',\n value: function isTorrentDetailsOpen() {\n return this.torrentDetailsOpen;\n }\n }]);\n\n return UIStoreClass;\n})(_BaseStore3['default']);\n\nvar UIStore = new UIStoreClass();\n\n_dispatcherAppDispatcher2['default'].register(function (payload) {\n var action = payload.action;\n var source = payload.source;\n\n switch (action.type) {\n case _constantsActionTypes2['default'].UI_CLICK_TORRENT:\n UIStore.handleTorrentClick(action.data.hash);\n break;\n case _constantsActionTypes2['default'].UI_CLICK_TORRENT_DETAILS:\n UIStore.handleTorrentDetailsClick(action.data.hash, action.data.event);\n break;\n case _constantsActionTypes2['default'].UI_DISPLAY_MODAL:\n UIStore.setActiveModal(action.data);\n break;\n }\n});\n\nexports['default'] = UIStore;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL1VJU3RvcmUuanM/N2FkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjA0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NvbnN0YW50c0FjdGlvblR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzQWN0aW9uVHlwZXMpO1xuXG52YXIgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9BcHBEaXNwYXRjaGVyJyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIpO1xuXG52YXIgX0Jhc2VTdG9yZTIgPSByZXF1aXJlKCcuL0Jhc2VTdG9yZScpO1xuXG52YXIgX0Jhc2VTdG9yZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9CYXNlU3RvcmUyKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0V2ZW50VHlwZXMnKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbnN0YW50c0V2ZW50VHlwZXMpO1xuXG52YXIgX3V0aWxTZWxlY3RUb3JyZW50cyA9IHJlcXVpcmUoJy4uL3V0aWwvc2VsZWN0VG9ycmVudHMnKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMgPSByZXF1aXJlKCcuLi9hY3Rpb25zL1RvcnJlbnRBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc1RvcnJlbnRBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNUb3JyZW50QWN0aW9ucyk7XG5cbnZhciBVSVN0b3JlQ2xhc3MgPSAoZnVuY3Rpb24gKF9CYXNlU3RvcmUpIHtcbiAgX2luaGVyaXRzKFVJU3RvcmVDbGFzcywgX0Jhc2VTdG9yZSk7XG5cbiAgZnVuY3Rpb24gVUlTdG9yZUNsYXNzKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBVSVN0b3JlQ2xhc3MpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVUlTdG9yZUNsYXNzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFjdGl2ZU1vZGFsID0gbnVsbDtcbiAgICB0aGlzLnRvcnJlbnREZXRhaWxzSGFzaCA9IG51bGw7XG4gICAgdGhpcy50b3JyZW50RGV0YWlsc09wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhVSVN0b3JlQ2xhc3MsIFt7XG4gICAga2V5OiAnZ2V0QWN0aXZlTW9kYWwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBY3RpdmVNb2RhbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU1vZGFsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldEFjdGl2ZU1vZGFsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0QWN0aXZlTW9kYWwobW9kYWwpIHtcbiAgICAgIHRoaXMuYWN0aXZlTW9kYWwgPSBtb2RhbDtcbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9NT0RBTF9DSEFOR0UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRvcnJlbnREZXRhaWxzSGFzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRvcnJlbnREZXRhaWxzSGFzaCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvcnJlbnREZXRhaWxzSGFzaDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVUb3JyZW50Q2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3JyZW50Q2xpY2soaGFzaCkge1xuICAgICAgdGhpcy50b3JyZW50RGV0YWlsc0hhc2ggPSBoYXNoO1xuICAgICAgdGhpcy5lbWl0KF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19IQVNIX0NIQU5HRSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVG9ycmVudERldGFpbHNDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVRvcnJlbnREZXRhaWxzQ2xpY2soaGFzaCwgZXZlbnQpIHtcbiAgICAgIHRoaXMudG9ycmVudERldGFpbHNPcGVuID0gIXRoaXMudG9ycmVudERldGFpbHNPcGVuO1xuICAgICAgdGhpcy5lbWl0KF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19PUEVOX0NIQU5HRSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaXNUb3JyZW50RGV0YWlsc09wZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1RvcnJlbnREZXRhaWxzT3BlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvcnJlbnREZXRhaWxzT3BlbjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVUlTdG9yZUNsYXNzO1xufSkoX0Jhc2VTdG9yZTNbJ2RlZmF1bHQnXSk7XG5cbnZhciBVSVN0b3JlID0gbmV3IFVJU3RvcmVDbGFzcygpO1xuXG5fZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyWydkZWZhdWx0J10ucmVnaXN0ZXIoZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgdmFyIGFjdGlvbiA9IHBheWxvYWQuYWN0aW9uO1xuICB2YXIgc291cmNlID0gcGF5bG9hZC5zb3VyY2U7XG5cbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLlVJX0NMSUNLX1RPUlJFTlQ6XG4gICAgICBVSVN0b3JlLmhhbmRsZVRvcnJlbnRDbGljayhhY3Rpb24uZGF0YS5oYXNoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLlVJX0NMSUNLX1RPUlJFTlRfREVUQUlMUzpcbiAgICAgIFVJU3RvcmUuaGFuZGxlVG9ycmVudERldGFpbHNDbGljayhhY3Rpb24uZGF0YS5oYXNoLCBhY3Rpb24uZGF0YS5ldmVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5VSV9ESVNQTEFZX01PREFMOlxuICAgICAgVUlTdG9yZS5zZXRBY3RpdmVNb2RhbChhY3Rpb24uZGF0YSk7XG4gICAgICBicmVhaztcbiAgfVxufSk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFVJU3RvcmU7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3N0b3Jlcy9VSVN0b3JlLmpzXG4gKiogbW9kdWxlIGlkID0gMjA0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.sortTorrents = sortTorrents;\n\nfunction sortTorrents(torrents, sortBy) {\n if (torrents.length) {\n var _ret = (function () {\n var direction = sortBy.direction;\n var property = sortBy.property;\n var sortedTorrents = Object.assign([], torrents);\n\n sortedTorrents.sort(function (a, b) {\n var valA = a[property];\n var valB = b[property];\n\n if (property === 'eta') {\n // keep infinity at bottom of array when sorting by eta\n if (valA === 'Infinity' && valB !== 'Infinity') {\n return 1;\n } else if (valA !== 'Infinity' && valB === 'Infinity') {\n return -1;\n }\n // if it's not infinity, compare the second as numbers\n if (valA !== 'Infinity') {\n valA = Number(valA.seconds);\n }\n if (valB !== 'Infinity') {\n valB = Number(valB.seconds);\n }\n } else if (property === 'name') {\n valA = valA.toLowerCase();\n valB = valB.toLowerCase();\n } else {\n valA = Number(valA);\n valB = Number(valB);\n }\n\n if (direction === 'asc') {\n if (valA > valB) {\n return 1;\n }\n if (valA < valB) {\n return -1;\n }\n } else {\n if (valA > valB) {\n return -1;\n }\n if (valA < valB) {\n return 1;\n }\n }\n\n return 0;\n });\n\n return {\n v: sortedTorrents\n };\n })();\n\n if (typeof _ret === 'object') return _ret.v;\n } else {\n return torrents;\n }\n}//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9zb3J0VG9ycmVudHMuanM/YjliOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSIsImZpbGUiOiIyMDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0VG9ycmVudHMgPSBzb3J0VG9ycmVudHM7XG5cbmZ1bmN0aW9uIHNvcnRUb3JyZW50cyh0b3JyZW50cywgc29ydEJ5KSB7XG4gIGlmICh0b3JyZW50cy5sZW5ndGgpIHtcbiAgICB2YXIgX3JldCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gc29ydEJ5LmRpcmVjdGlvbjtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IHNvcnRCeS5wcm9wZXJ0eTtcbiAgICAgIHZhciBzb3J0ZWRUb3JyZW50cyA9IE9iamVjdC5hc3NpZ24oW10sIHRvcnJlbnRzKTtcblxuICAgICAgc29ydGVkVG9ycmVudHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB2YXIgdmFsQSA9IGFbcHJvcGVydHldO1xuICAgICAgICB2YXIgdmFsQiA9IGJbcHJvcGVydHldO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2V0YScpIHtcbiAgICAgICAgICAvLyBrZWVwIGluZmluaXR5IGF0IGJvdHRvbSBvZiBhcnJheSB3aGVuIHNvcnRpbmcgYnkgZXRhXG4gICAgICAgICAgaWYgKHZhbEEgPT09ICdJbmZpbml0eScgJiYgdmFsQiAhPT0gJ0luZmluaXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWxBICE9PSAnSW5maW5pdHknICYmIHZhbEIgPT09ICdJbmZpbml0eScpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaWYgaXQncyBub3QgaW5maW5pdHksIGNvbXBhcmUgdGhlIHNlY29uZCBhcyBudW1iZXJzXG4gICAgICAgICAgaWYgKHZhbEEgIT09ICdJbmZpbml0eScpIHtcbiAgICAgICAgICAgIHZhbEEgPSBOdW1iZXIodmFsQS5zZWNvbmRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbEIgIT09ICdJbmZpbml0eScpIHtcbiAgICAgICAgICAgIHZhbEIgPSBOdW1iZXIodmFsQi5zZWNvbmRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICduYW1lJykge1xuICAgICAgICAgIHZhbEEgPSB2YWxBLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdmFsQiA9IHZhbEIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxBID0gTnVtYmVyKHZhbEEpO1xuICAgICAgICAgIHZhbEIgPSBOdW1iZXIodmFsQik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgIGlmICh2YWxBID4gdmFsQikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWxBIDwgdmFsQikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsQSA+IHZhbEIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbEEgPCB2YWxCKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2OiBzb3J0ZWRUb3JyZW50c1xuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKHR5cGVvZiBfcmV0ID09PSAnb2JqZWN0JykgcmV0dXJuIF9yZXQudjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdG9ycmVudHM7XG4gIH1cbn1cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3V0aWwvc29ydFRvcnJlbnRzLmpzXG4gKiogbW9kdWxlIGlkID0gMjA0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 205 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _AddTorrents = __webpack_require__(206);\n\nvar _AddTorrents2 = _interopRequireDefault(_AddTorrents);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar _storesUIStore = __webpack_require__(204);\n\nvar _storesUIStore2 = _interopRequireDefault(_storesUIStore);\n\nvar methodsToBind = ['handleOverlayClick', 'onModalChange'];\n\nvar Modal = (function (_React$Component) {\n _inherits(Modal, _React$Component);\n\n function Modal() {\n var _this = this;\n\n _classCallCheck(this, Modal);\n\n _get(Object.getPrototypeOf(Modal.prototype), 'constructor', this).call(this);\n\n this.state = {\n activeModal: null\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(Modal, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesUIStore2['default'].listen(_constantsEventTypes2['default'].UI_MODAL_CHANGE, this.onModalChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesUIStore2['default'].unlisten(_constantsEventTypes2['default'].UI_MODAL_CHANGE, this.onModalChange);\n }\n }, {\n key: 'handleModalClick',\n value: function handleModalClick(event) {\n event.stopPropagation();\n }\n }, {\n key: 'handleOverlayClick',\n value: function handleOverlayClick() {\n _actionsUIActions2['default'].dismissModal();\n }\n }, {\n key: 'onModalChange',\n value: function onModalChange() {\n this.setState({ activeModal: _storesUIStore2['default'].getActiveModal() });\n }\n }, {\n key: 'render',\n value: function render() {\n var modal = null;\n\n switch (this.state.activeModal) {\n case 'add-torrents':\n modal = _react2['default'].createElement(_AddTorrents2['default'], { dismissModal: this.handleOverlayClick });\n break;\n }\n\n if (modal !== null) {\n modal = _react2['default'].createElement(\n 'div',\n { key: this.state.activeModal, className: 'modal', onClick: this.handleOverlayClick },\n modal\n );\n }\n\n return _react2['default'].createElement(\n _reactAddonsCssTransitionGroup2['default'],\n {\n transitionName: 'modal__animation',\n transitionEnterTimeout: 500,\n transitionLeaveTimeout: 500 },\n modal\n );\n }\n }]);\n\n return Modal;\n})(_react2['default'].Component);\n\nexports['default'] = Modal;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9tb2RhbHMvTW9kYWxzLmpzPzFhMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHVDQUF1QyxtQkFBbUIsNEJBQTRCLGlEQUFpRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGFBQWEsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFL29CLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SiwwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EscUJBQXFCLDJEQUEyRDtBQUNoRjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhFQUE4RSx3Q0FBd0M7QUFDdEg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9GQUFvRjtBQUMvRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIwNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9yZWFjdEFkZG9uc0Nzc1RyYW5zaXRpb25Hcm91cCA9IHJlcXVpcmUoJ3JlYWN0LWFkZG9ucy1jc3MtdHJhbnNpdGlvbi1ncm91cCcpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX0FkZFRvcnJlbnRzID0gcmVxdWlyZSgnLi9BZGRUb3JyZW50cycpO1xuXG52YXIgX0FkZFRvcnJlbnRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0FkZFRvcnJlbnRzKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzID0gcmVxdWlyZSgnLi4vLi4vY29uc3RhbnRzL0V2ZW50VHlwZXMnKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbnN0YW50c0V2ZW50VHlwZXMpO1xuXG52YXIgX2ljb25zSWNvbiA9IHJlcXVpcmUoJy4uL2ljb25zL0ljb24nKTtcblxudmFyIF9pY29uc0ljb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zID0gcmVxdWlyZSgnLi4vLi4vYWN0aW9ucy9VSUFjdGlvbnMnKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNVSUFjdGlvbnMpO1xuXG52YXIgX3N0b3Jlc1VJU3RvcmUgPSByZXF1aXJlKCcuLi8uLi9zdG9yZXMvVUlTdG9yZScpO1xuXG52YXIgX3N0b3Jlc1VJU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RvcmVzVUlTdG9yZSk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydoYW5kbGVPdmVybGF5Q2xpY2snLCAnb25Nb2RhbENoYW5nZSddO1xuXG52YXIgTW9kYWwgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE1vZGFsLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNb2RhbCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1vZGFsKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKE1vZGFsLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlTW9kYWw6IG51bGxcbiAgICB9O1xuXG4gICAgbWV0aG9kc1RvQmluZC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1vZGFsLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfTU9EQUxfQ0hBTkdFLCB0aGlzLm9uTW9kYWxDaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9NT0RBTF9DSEFOR0UsIHRoaXMub25Nb2RhbENoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlTW9kYWxDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1vZGFsQ2xpY2soZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZU92ZXJsYXlDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU92ZXJsYXlDbGljaygpIHtcbiAgICAgIF9hY3Rpb25zVUlBY3Rpb25zMlsnZGVmYXVsdCddLmRpc21pc3NNb2RhbCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uTW9kYWxDaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1vZGFsQ2hhbmdlKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZU1vZGFsOiBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5nZXRBY3RpdmVNb2RhbCgpIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBtb2RhbCA9IG51bGw7XG5cbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZS5hY3RpdmVNb2RhbCkge1xuICAgICAgICBjYXNlICdhZGQtdG9ycmVudHMnOlxuICAgICAgICAgIG1vZGFsID0gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX0FkZFRvcnJlbnRzMlsnZGVmYXVsdCddLCB7IGRpc21pc3NNb2RhbDogdGhpcy5oYW5kbGVPdmVybGF5Q2xpY2sgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RhbCAhPT0gbnVsbCkge1xuICAgICAgICBtb2RhbCA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsga2V5OiB0aGlzLnN0YXRlLmFjdGl2ZU1vZGFsLCBjbGFzc05hbWU6ICdtb2RhbCcsIG9uQ2xpY2s6IHRoaXMuaGFuZGxlT3ZlcmxheUNsaWNrIH0sXG4gICAgICAgICAgbW9kYWxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyWydkZWZhdWx0J10sXG4gICAgICAgIHtcbiAgICAgICAgICB0cmFuc2l0aW9uTmFtZTogJ21vZGFsX19hbmltYXRpb24nLFxuICAgICAgICAgIHRyYW5zaXRpb25FbnRlclRpbWVvdXQ6IDUwMCxcbiAgICAgICAgICB0cmFuc2l0aW9uTGVhdmVUaW1lb3V0OiA1MDAgfSxcbiAgICAgICAgbW9kYWxcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1vZGFsO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IE1vZGFsO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL21vZGFscy9Nb2RhbHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _BaseStore2 = __webpack_require__(195);\n\nvar _BaseStore3 = _interopRequireDefault(_BaseStore2);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilSelectTorrents = __webpack_require__(203);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar UIStoreClass = (function (_BaseStore) {\n _inherits(UIStoreClass, _BaseStore);\n\n function UIStoreClass() {\n _classCallCheck(this, UIStoreClass);\n\n _get(Object.getPrototypeOf(UIStoreClass.prototype), 'constructor', this).call(this);\n\n this.activeModal = null;\n this.torrentDetailsHash = null;\n this.torrentDetailsOpen = false;\n }\n\n _createClass(UIStoreClass, [{\n key: 'getActiveModal',\n value: function getActiveModal() {\n return this.activeModal;\n }\n }, {\n key: 'setActiveModal',\n value: function setActiveModal(modal) {\n this.activeModal = modal;\n this.emit(_constantsEventTypes2['default'].UI_MODAL_CHANGE);\n }\n }, {\n key: 'getTorrentDetailsHash',\n value: function getTorrentDetailsHash() {\n return this.torrentDetailsHash;\n }\n }, {\n key: 'handleTorrentClick',\n value: function handleTorrentClick(hash) {\n this.torrentDetailsHash = hash;\n this.emit(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_HASH_CHANGE);\n }\n }, {\n key: 'handleTorrentDetailsClick',\n value: function handleTorrentDetailsClick(hash, event) {\n this.torrentDetailsOpen = !this.torrentDetailsOpen;\n this.emit(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_OPEN_CHANGE);\n }\n }, {\n key: 'isTorrentDetailsOpen',\n value: function isTorrentDetailsOpen() {\n return this.torrentDetailsOpen;\n }\n }]);\n\n return UIStoreClass;\n})(_BaseStore3['default']);\n\nvar UIStore = new UIStoreClass();\n\n_dispatcherAppDispatcher2['default'].register(function (payload) {\n var action = payload.action;\n var source = payload.source;\n\n switch (action.type) {\n case _constantsActionTypes2['default'].UI_CLICK_TORRENT:\n UIStore.handleTorrentClick(action.data.hash);\n break;\n case _constantsActionTypes2['default'].UI_CLICK_TORRENT_DETAILS:\n UIStore.handleTorrentDetailsClick(action.data.hash, action.data.event);\n break;\n case _constantsActionTypes2['default'].UI_DISPLAY_MODAL:\n UIStore.setActiveModal(action.data);\n break;\n }\n});\n\nexports['default'] = UIStore;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL1VJU3RvcmUuanM/N2FkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjA1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NvbnN0YW50c0FjdGlvblR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzQWN0aW9uVHlwZXMpO1xuXG52YXIgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9BcHBEaXNwYXRjaGVyJyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIpO1xuXG52YXIgX0Jhc2VTdG9yZTIgPSByZXF1aXJlKCcuL0Jhc2VTdG9yZScpO1xuXG52YXIgX0Jhc2VTdG9yZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9CYXNlU3RvcmUyKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0V2ZW50VHlwZXMnKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbnN0YW50c0V2ZW50VHlwZXMpO1xuXG52YXIgX3V0aWxTZWxlY3RUb3JyZW50cyA9IHJlcXVpcmUoJy4uL3V0aWwvc2VsZWN0VG9ycmVudHMnKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMgPSByZXF1aXJlKCcuLi9hY3Rpb25zL1RvcnJlbnRBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc1RvcnJlbnRBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNUb3JyZW50QWN0aW9ucyk7XG5cbnZhciBVSVN0b3JlQ2xhc3MgPSAoZnVuY3Rpb24gKF9CYXNlU3RvcmUpIHtcbiAgX2luaGVyaXRzKFVJU3RvcmVDbGFzcywgX0Jhc2VTdG9yZSk7XG5cbiAgZnVuY3Rpb24gVUlTdG9yZUNsYXNzKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBVSVN0b3JlQ2xhc3MpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVUlTdG9yZUNsYXNzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFjdGl2ZU1vZGFsID0gbnVsbDtcbiAgICB0aGlzLnRvcnJlbnREZXRhaWxzSGFzaCA9IG51bGw7XG4gICAgdGhpcy50b3JyZW50RGV0YWlsc09wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhVSVN0b3JlQ2xhc3MsIFt7XG4gICAga2V5OiAnZ2V0QWN0aXZlTW9kYWwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBY3RpdmVNb2RhbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU1vZGFsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldEFjdGl2ZU1vZGFsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0QWN0aXZlTW9kYWwobW9kYWwpIHtcbiAgICAgIHRoaXMuYWN0aXZlTW9kYWwgPSBtb2RhbDtcbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9NT0RBTF9DSEFOR0UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRvcnJlbnREZXRhaWxzSGFzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRvcnJlbnREZXRhaWxzSGFzaCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvcnJlbnREZXRhaWxzSGFzaDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVUb3JyZW50Q2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3JyZW50Q2xpY2soaGFzaCkge1xuICAgICAgdGhpcy50b3JyZW50RGV0YWlsc0hhc2ggPSBoYXNoO1xuICAgICAgdGhpcy5lbWl0KF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19IQVNIX0NIQU5HRSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVG9ycmVudERldGFpbHNDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVRvcnJlbnREZXRhaWxzQ2xpY2soaGFzaCwgZXZlbnQpIHtcbiAgICAgIHRoaXMudG9ycmVudERldGFpbHNPcGVuID0gIXRoaXMudG9ycmVudERldGFpbHNPcGVuO1xuICAgICAgdGhpcy5lbWl0KF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19PUEVOX0NIQU5HRSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaXNUb3JyZW50RGV0YWlsc09wZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1RvcnJlbnREZXRhaWxzT3BlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvcnJlbnREZXRhaWxzT3BlbjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVUlTdG9yZUNsYXNzO1xufSkoX0Jhc2VTdG9yZTNbJ2RlZmF1bHQnXSk7XG5cbnZhciBVSVN0b3JlID0gbmV3IFVJU3RvcmVDbGFzcygpO1xuXG5fZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyWydkZWZhdWx0J10ucmVnaXN0ZXIoZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgdmFyIGFjdGlvbiA9IHBheWxvYWQuYWN0aW9uO1xuICB2YXIgc291cmNlID0gcGF5bG9hZC5zb3VyY2U7XG5cbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLlVJX0NMSUNLX1RPUlJFTlQ6XG4gICAgICBVSVN0b3JlLmhhbmRsZVRvcnJlbnRDbGljayhhY3Rpb24uZGF0YS5oYXNoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLlVJX0NMSUNLX1RPUlJFTlRfREVUQUlMUzpcbiAgICAgIFVJU3RvcmUuaGFuZGxlVG9ycmVudERldGFpbHNDbGljayhhY3Rpb24uZGF0YS5oYXNoLCBhY3Rpb24uZGF0YS5ldmVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5VSV9ESVNQTEFZX01PREFMOlxuICAgICAgVUlTdG9yZS5zZXRBY3RpdmVNb2RhbChhY3Rpb24uZGF0YSk7XG4gICAgICBicmVhaztcbiAgfVxufSk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFVJU3RvcmU7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3N0b3Jlcy9VSVN0b3JlLmpzXG4gKiogbW9kdWxlIGlkID0gMjA1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 206 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formsTextboxRepeater = __webpack_require__(207);\n\nvar _formsTextboxRepeater2 = _interopRequireDefault(_formsTextboxRepeater);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar methodsToBind = ['getContent', 'handleDestinationChange', 'handleUrlAdd', 'handleUrlChange', 'handleUrlRemove', 'handleAddTorrents'];\n\nvar AddTorrents = (function (_React$Component) {\n _inherits(AddTorrents, _React$Component);\n\n function AddTorrents() {\n var _this = this;\n\n _classCallCheck(this, AddTorrents);\n\n _get(Object.getPrototypeOf(AddTorrents.prototype), 'constructor', this).call(this);\n\n this.state = {\n destination: null,\n isExpanded: false,\n urlTextboxes: [{ value: null }]\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(AddTorrents, [{\n key: 'getContent',\n value: function getContent() {\n return _react2['default'].createElement(\n 'div',\n { className: 'modal__content', onClick: this.handleMenuWrapperClick },\n _react2['default'].createElement(\n 'div',\n { className: 'modal__header' },\n 'Add Torrents'\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal__content__container' },\n _react2['default'].createElement(\n 'div',\n { className: 'form__row' },\n _react2['default'].createElement(_formsTextboxRepeater2['default'], { placeholder: 'Torrent URL',\n handleTextboxAdd: this.handleUrlAdd,\n handleTextboxChange: this.handleUrlChange,\n handleTextboxRemove: this.handleUrlRemove,\n textboxes: this.state.urlTextboxes })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'form__row' },\n _react2['default'].createElement('input', { className: 'textbox',\n onChange: this.handleDestinationChange,\n placeholder: 'Destination',\n value: this.state.destination,\n type: 'text' })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal__button-group form__row' },\n _react2['default'].createElement(\n 'button',\n { className: 'button button--deemphasize',\n onClick: this.props.dismissModal },\n 'Cancel'\n ),\n _react2['default'].createElement(\n 'button',\n { className: 'button button--primary',\n onClick: this.handleAddTorrents },\n 'Add Torrent'\n )\n )\n )\n );\n }\n }, {\n key: 'handleAddTorrents',\n value: function handleAddTorrents() {\n var torrentUrls = _lodash2['default'].pluck(this.state.urlTextboxes, 'value');\n _actionsTorrentActions2['default'].addTorrents(torrentUrls, this.state.destination);\n }\n }, {\n key: 'handleDestinationChange',\n value: function handleDestinationChange(event) {\n this.setState({\n destination: event.target.value\n });\n }\n }, {\n key: 'handleMenuWrapperClick',\n value: function handleMenuWrapperClick(event) {\n event.stopPropagation();\n }\n }, {\n key: 'handleUrlRemove',\n value: function handleUrlRemove(index) {\n var urlTextboxes = Object.assign([], this.state.urlTextboxes);\n urlTextboxes.splice(index, 1);\n this.setState({\n urlTextboxes: urlTextboxes\n });\n }\n }, {\n key: 'handleUrlAdd',\n value: function handleUrlAdd(index) {\n var urlTextboxes = Object.assign([], this.state.urlTextboxes);\n urlTextboxes.splice(index + 1, 0, { value: null });\n this.setState({ urlTextboxes: urlTextboxes });\n }\n }, {\n key: 'handleUrlChange',\n value: function handleUrlChange(index, value) {\n var urlTextboxes = Object.assign([], this.state.urlTextboxes);\n urlTextboxes[index].value = value;\n this.setState({ urlTextboxes: urlTextboxes });\n }\n }, {\n key: 'render',\n value: function render() {\n return this.getContent();\n }\n }]);\n\n return AddTorrents;\n})(_react2['default'].Component);\n\nexports['default'] = AddTorrents;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9tb2RhbHMvQWRkVG9ycmVudHMuanM/MGVlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsY0FBYztBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLG9FQUFvRTtBQUM3RTtBQUNBO0FBQ0EsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEMsaUZBQWlGO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0Qyx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsNkNBQTZDO0FBQzFEO0FBQ0E7QUFDQSxlQUFlO0FBQ2Ysa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGNBQWM7QUFDdkQscUJBQXFCLDZCQUE2QjtBQUNsRDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw2QkFBNkI7QUFDbEQ7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIwNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9sb2Rhc2ggPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxudmFyIF9sb2Rhc2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9kYXNoKTtcblxudmFyIF9jbGFzc25hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xuXG52YXIgX2NsYXNzbmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lcyk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9mb3Jtc1RleHRib3hSZXBlYXRlciA9IHJlcXVpcmUoJy4uL2Zvcm1zL1RleHRib3hSZXBlYXRlcicpO1xuXG52YXIgX2Zvcm1zVGV4dGJveFJlcGVhdGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zvcm1zVGV4dGJveFJlcGVhdGVyKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9hY3Rpb25zL1RvcnJlbnRBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc1RvcnJlbnRBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNUb3JyZW50QWN0aW9ucyk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydnZXRDb250ZW50JywgJ2hhbmRsZURlc3RpbmF0aW9uQ2hhbmdlJywgJ2hhbmRsZVVybEFkZCcsICdoYW5kbGVVcmxDaGFuZ2UnLCAnaGFuZGxlVXJsUmVtb3ZlJywgJ2hhbmRsZUFkZFRvcnJlbnRzJ107XG5cbnZhciBBZGRUb3JyZW50cyA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQWRkVG9ycmVudHMsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEFkZFRvcnJlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWRkVG9ycmVudHMpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoQWRkVG9ycmVudHMucHJvdG90eXBlKSwgJ2NvbnN0cnVjdG9yJywgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkZXN0aW5hdGlvbjogbnVsbCxcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsVGV4dGJveGVzOiBbeyB2YWx1ZTogbnVsbCB9XVxuICAgIH07XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQWRkVG9ycmVudHMsIFt7XG4gICAga2V5OiAnZ2V0Q29udGVudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ21vZGFsX19jb250ZW50Jywgb25DbGljazogdGhpcy5oYW5kbGVNZW51V3JhcHBlckNsaWNrIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbW9kYWxfX2hlYWRlcicgfSxcbiAgICAgICAgICAnQWRkIFRvcnJlbnRzJ1xuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ21vZGFsX19jb250ZW50X19jb250YWluZXInIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnZm9ybV9fcm93JyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2Zvcm1zVGV4dGJveFJlcGVhdGVyMlsnZGVmYXVsdCddLCB7IHBsYWNlaG9sZGVyOiAnVG9ycmVudCBVUkwnLFxuICAgICAgICAgICAgICBoYW5kbGVUZXh0Ym94QWRkOiB0aGlzLmhhbmRsZVVybEFkZCxcbiAgICAgICAgICAgICAgaGFuZGxlVGV4dGJveENoYW5nZTogdGhpcy5oYW5kbGVVcmxDaGFuZ2UsXG4gICAgICAgICAgICAgIGhhbmRsZVRleHRib3hSZW1vdmU6IHRoaXMuaGFuZGxlVXJsUmVtb3ZlLFxuICAgICAgICAgICAgICB0ZXh0Ym94ZXM6IHRoaXMuc3RhdGUudXJsVGV4dGJveGVzIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdmb3JtX19yb3cnIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGNsYXNzTmFtZTogJ3RleHRib3gnLFxuICAgICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVEZXN0aW5hdGlvbkNoYW5nZSxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdEZXN0aW5hdGlvbicsXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLmRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ21vZGFsX19idXR0b24tZ3JvdXAgZm9ybV9fcm93JyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdidXR0b24nLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2J1dHRvbiBidXR0b24tLWRlZW1waGFzaXplJyxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnByb3BzLmRpc21pc3NNb2RhbCB9LFxuICAgICAgICAgICAgICAnQ2FuY2VsJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdidXR0b24gYnV0dG9uLS1wcmltYXJ5JyxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUFkZFRvcnJlbnRzIH0sXG4gICAgICAgICAgICAgICdBZGQgVG9ycmVudCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlQWRkVG9ycmVudHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVBZGRUb3JyZW50cygpIHtcbiAgICAgIHZhciB0b3JyZW50VXJscyA9IF9sb2Rhc2gyWydkZWZhdWx0J10ucGx1Y2sodGhpcy5zdGF0ZS51cmxUZXh0Ym94ZXMsICd2YWx1ZScpO1xuICAgICAgX2FjdGlvbnNUb3JyZW50QWN0aW9uczJbJ2RlZmF1bHQnXS5hZGRUb3JyZW50cyh0b3JyZW50VXJscywgdGhpcy5zdGF0ZS5kZXN0aW5hdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlRGVzdGluYXRpb25DaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVEZXN0aW5hdGlvbkNoYW5nZShldmVudCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRlc3RpbmF0aW9uOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZU1lbnVXcmFwcGVyQ2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVNZW51V3JhcHBlckNsaWNrKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVVcmxSZW1vdmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVVcmxSZW1vdmUoaW5kZXgpIHtcbiAgICAgIHZhciB1cmxUZXh0Ym94ZXMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLnN0YXRlLnVybFRleHRib3hlcyk7XG4gICAgICB1cmxUZXh0Ym94ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB1cmxUZXh0Ym94ZXM6IHVybFRleHRib3hlc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVXJsQWRkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVXJsQWRkKGluZGV4KSB7XG4gICAgICB2YXIgdXJsVGV4dGJveGVzID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5zdGF0ZS51cmxUZXh0Ym94ZXMpO1xuICAgICAgdXJsVGV4dGJveGVzLnNwbGljZShpbmRleCArIDEsIDAsIHsgdmFsdWU6IG51bGwgfSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdXJsVGV4dGJveGVzOiB1cmxUZXh0Ym94ZXMgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVXJsQ2hhbmdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVXJsQ2hhbmdlKGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIHVybFRleHRib3hlcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuc3RhdGUudXJsVGV4dGJveGVzKTtcbiAgICAgIHVybFRleHRib3hlc1tpbmRleF0udmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyB1cmxUZXh0Ym94ZXM6IHVybFRleHRib3hlcyB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEFkZFRvcnJlbnRzO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFkZFRvcnJlbnRzO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL21vZGFscy9BZGRUb3JyZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDIwNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _AddTorrents = __webpack_require__(207);\n\nvar _AddTorrents2 = _interopRequireDefault(_AddTorrents);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar _storesUIStore = __webpack_require__(205);\n\nvar _storesUIStore2 = _interopRequireDefault(_storesUIStore);\n\nvar methodsToBind = ['handleOverlayClick', 'onModalChange'];\n\nvar Modal = (function (_React$Component) {\n _inherits(Modal, _React$Component);\n\n function Modal() {\n var _this = this;\n\n _classCallCheck(this, Modal);\n\n _get(Object.getPrototypeOf(Modal.prototype), 'constructor', this).call(this);\n\n this.state = {\n activeModal: null\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(Modal, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesUIStore2['default'].listen(_constantsEventTypes2['default'].UI_MODAL_CHANGE, this.onModalChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesUIStore2['default'].unlisten(_constantsEventTypes2['default'].UI_MODAL_CHANGE, this.onModalChange);\n }\n }, {\n key: 'handleModalClick',\n value: function handleModalClick(event) {\n event.stopPropagation();\n }\n }, {\n key: 'handleOverlayClick',\n value: function handleOverlayClick() {\n _actionsUIActions2['default'].dismissModal();\n }\n }, {\n key: 'onModalChange',\n value: function onModalChange() {\n this.setState({ activeModal: _storesUIStore2['default'].getActiveModal() });\n }\n }, {\n key: 'render',\n value: function render() {\n var modal = null;\n\n switch (this.state.activeModal) {\n case 'add-torrents':\n modal = _react2['default'].createElement(_AddTorrents2['default'], { dismissModal: this.handleOverlayClick });\n break;\n }\n\n if (modal !== null) {\n modal = _react2['default'].createElement(\n 'div',\n { key: this.state.activeModal, className: 'modal', onClick: this.handleOverlayClick },\n modal\n );\n }\n\n return _react2['default'].createElement(\n _reactAddonsCssTransitionGroup2['default'],\n {\n transitionName: 'modal__animation',\n transitionEnterTimeout: 500,\n transitionLeaveTimeout: 500 },\n modal\n );\n }\n }]);\n\n return Modal;\n})(_react2['default'].Component);\n\nexports['default'] = Modal;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9tb2RhbHMvTW9kYWxzLmpzPzFhMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHVDQUF1QyxtQkFBbUIsNEJBQTRCLGlEQUFpRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGFBQWEsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFL29CLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SiwwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EscUJBQXFCLDJEQUEyRDtBQUNoRjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhFQUE4RSx3Q0FBd0M7QUFDdEg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9GQUFvRjtBQUMvRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIwNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9yZWFjdEFkZG9uc0Nzc1RyYW5zaXRpb25Hcm91cCA9IHJlcXVpcmUoJ3JlYWN0LWFkZG9ucy1jc3MtdHJhbnNpdGlvbi1ncm91cCcpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX0FkZFRvcnJlbnRzID0gcmVxdWlyZSgnLi9BZGRUb3JyZW50cycpO1xuXG52YXIgX0FkZFRvcnJlbnRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0FkZFRvcnJlbnRzKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzID0gcmVxdWlyZSgnLi4vLi4vY29uc3RhbnRzL0V2ZW50VHlwZXMnKTtcblxudmFyIF9jb25zdGFudHNFdmVudFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbnN0YW50c0V2ZW50VHlwZXMpO1xuXG52YXIgX2ljb25zSWNvbiA9IHJlcXVpcmUoJy4uL2ljb25zL0ljb24nKTtcblxudmFyIF9pY29uc0ljb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zID0gcmVxdWlyZSgnLi4vLi4vYWN0aW9ucy9VSUFjdGlvbnMnKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNVSUFjdGlvbnMpO1xuXG52YXIgX3N0b3Jlc1VJU3RvcmUgPSByZXF1aXJlKCcuLi8uLi9zdG9yZXMvVUlTdG9yZScpO1xuXG52YXIgX3N0b3Jlc1VJU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RvcmVzVUlTdG9yZSk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydoYW5kbGVPdmVybGF5Q2xpY2snLCAnb25Nb2RhbENoYW5nZSddO1xuXG52YXIgTW9kYWwgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE1vZGFsLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNb2RhbCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1vZGFsKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKE1vZGFsLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlTW9kYWw6IG51bGxcbiAgICB9O1xuXG4gICAgbWV0aG9kc1RvQmluZC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1vZGFsLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfTU9EQUxfQ0hBTkdFLCB0aGlzLm9uTW9kYWxDaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9NT0RBTF9DSEFOR0UsIHRoaXMub25Nb2RhbENoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlTW9kYWxDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1vZGFsQ2xpY2soZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZU92ZXJsYXlDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU92ZXJsYXlDbGljaygpIHtcbiAgICAgIF9hY3Rpb25zVUlBY3Rpb25zMlsnZGVmYXVsdCddLmRpc21pc3NNb2RhbCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uTW9kYWxDaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1vZGFsQ2hhbmdlKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZU1vZGFsOiBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5nZXRBY3RpdmVNb2RhbCgpIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBtb2RhbCA9IG51bGw7XG5cbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZS5hY3RpdmVNb2RhbCkge1xuICAgICAgICBjYXNlICdhZGQtdG9ycmVudHMnOlxuICAgICAgICAgIG1vZGFsID0gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX0FkZFRvcnJlbnRzMlsnZGVmYXVsdCddLCB7IGRpc21pc3NNb2RhbDogdGhpcy5oYW5kbGVPdmVybGF5Q2xpY2sgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RhbCAhPT0gbnVsbCkge1xuICAgICAgICBtb2RhbCA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsga2V5OiB0aGlzLnN0YXRlLmFjdGl2ZU1vZGFsLCBjbGFzc05hbWU6ICdtb2RhbCcsIG9uQ2xpY2s6IHRoaXMuaGFuZGxlT3ZlcmxheUNsaWNrIH0sXG4gICAgICAgICAgbW9kYWxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyWydkZWZhdWx0J10sXG4gICAgICAgIHtcbiAgICAgICAgICB0cmFuc2l0aW9uTmFtZTogJ21vZGFsX19hbmltYXRpb24nLFxuICAgICAgICAgIHRyYW5zaXRpb25FbnRlclRpbWVvdXQ6IDUwMCxcbiAgICAgICAgICB0cmFuc2l0aW9uTGVhdmVUaW1lb3V0OiA1MDAgfSxcbiAgICAgICAgbW9kYWxcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1vZGFsO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IE1vZGFsO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL21vZGFscy9Nb2RhbHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 207 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsIconJs = __webpack_require__(161);\n\nvar _iconsIconJs2 = _interopRequireDefault(_iconsIconJs);\n\nvar methodsToBind = ['getTextboxes', 'handleTextboxChange'];\n\nvar TextboxRepeater = (function (_React$Component) {\n _inherits(TextboxRepeater, _React$Component);\n\n function TextboxRepeater() {\n var _this = this;\n\n _classCallCheck(this, TextboxRepeater);\n\n _get(Object.getPrototypeOf(TextboxRepeater.prototype), 'constructor', this).call(this);\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(TextboxRepeater, [{\n key: 'getTextboxes',\n value: function getTextboxes() {\n var _this2 = this;\n\n var textboxes = this.props.textboxes.map(function (textbox, index) {\n var addButton = _react2['default'].createElement(\n 'button',\n { className: 'textbox-repeater__add floating-action__button',\n onClick: _this2.props.handleTextboxAdd.bind(textbox, index) },\n _react2['default'].createElement(_iconsIconJs2['default'], { icon: 'addMini', size: 'mini' })\n );\n var removeButton = null;\n\n if (index > 0) {\n removeButton = _react2['default'].createElement(\n 'button',\n { className: 'textbox-repeater__remove floating-action__button',\n onClick: _this2.props.handleTextboxRemove.bind(textbox, index) },\n _react2['default'].createElement(_iconsIconJs2['default'], { icon: 'removeMini', size: 'mini' })\n );\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: 'textbox__wrapper form__row', key: index },\n _react2['default'].createElement('input', { className: 'textbox',\n onChange: _this2.handleTextboxChange.bind(textbox, index),\n placeholder: _this2.props.placeholder,\n value: textbox.value,\n type: 'text' }),\n _react2['default'].createElement(\n 'div',\n { className: 'floating-action__group' },\n removeButton,\n addButton\n )\n );\n });\n return textboxes;\n }\n }, {\n key: 'handleTextboxChange',\n value: function handleTextboxChange(index, event) {\n this.props.handleTextboxChange(index, event.target.value);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'div',\n { className: 'textbox-repeater' },\n this.getTextboxes()\n );\n }\n }]);\n\n return TextboxRepeater;\n})(_react2['default'].Component);\n\nexports['default'] = TextboxRepeater;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9mb3Jtcy9UZXh0Ym94UmVwZWF0ZXIuanM/ODEzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCx5RUFBeUU7QUFDekUsc0VBQXNFLGdDQUFnQztBQUN0RztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYiw4RUFBOEU7QUFDOUUsd0VBQXdFLG1DQUFtQztBQUMzRztBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLHNEQUFzRDtBQUNqRSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSxhQUFhLHNDQUFzQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQ0FBZ0M7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIyMDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfY2xhc3NuYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcblxudmFyIF9jbGFzc25hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzbmFtZXMpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfaWNvbnNJY29uSnMgPSByZXF1aXJlKCcuLi9pY29ucy9JY29uLmpzJyk7XG5cbnZhciBfaWNvbnNJY29uSnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uSnMpO1xuXG52YXIgbWV0aG9kc1RvQmluZCA9IFsnZ2V0VGV4dGJveGVzJywgJ2hhbmRsZVRleHRib3hDaGFuZ2UnXTtcblxudmFyIFRleHRib3hSZXBlYXRlciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVGV4dGJveFJlcGVhdGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUZXh0Ym94UmVwZWF0ZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0Ym94UmVwZWF0ZXIpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGV4dGJveFJlcGVhdGVyLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVGV4dGJveFJlcGVhdGVyLCBbe1xuICAgIGtleTogJ2dldFRleHRib3hlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRleHRib3hlcygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgdGV4dGJveGVzID0gdGhpcy5wcm9wcy50ZXh0Ym94ZXMubWFwKGZ1bmN0aW9uICh0ZXh0Ym94LCBpbmRleCkge1xuICAgICAgICB2YXIgYWRkQnV0dG9uID0gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0ZXh0Ym94LXJlcGVhdGVyX19hZGQgZmxvYXRpbmctYWN0aW9uX19idXR0b24nLFxuICAgICAgICAgICAgb25DbGljazogX3RoaXMyLnByb3BzLmhhbmRsZVRleHRib3hBZGQuYmluZCh0ZXh0Ym94LCBpbmRleCkgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uSnMyWydkZWZhdWx0J10sIHsgaWNvbjogJ2FkZE1pbmknLCBzaXplOiAnbWluaScgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHJlbW92ZUJ1dHRvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgIHJlbW92ZUJ1dHRvbiA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RleHRib3gtcmVwZWF0ZXJfX3JlbW92ZSBmbG9hdGluZy1hY3Rpb25fX2J1dHRvbicsXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMi5wcm9wcy5oYW5kbGVUZXh0Ym94UmVtb3ZlLmJpbmQodGV4dGJveCwgaW5kZXgpIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uSnMyWydkZWZhdWx0J10sIHsgaWNvbjogJ3JlbW92ZU1pbmknLCBzaXplOiAnbWluaScgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndGV4dGJveF9fd3JhcHBlciBmb3JtX19yb3cnLCBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBjbGFzc05hbWU6ICd0ZXh0Ym94JyxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIuaGFuZGxlVGV4dGJveENoYW5nZS5iaW5kKHRleHRib3gsIGluZGV4KSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdGhpczIucHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB2YWx1ZTogdGV4dGJveC52YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyB9KSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdmbG9hdGluZy1hY3Rpb25fX2dyb3VwJyB9LFxuICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLFxuICAgICAgICAgICAgYWRkQnV0dG9uXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGV4dGJveGVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZVRleHRib3hDaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUZXh0Ym94Q2hhbmdlKGluZGV4LCBldmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5oYW5kbGVUZXh0Ym94Q2hhbmdlKGluZGV4LCBldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAndGV4dGJveC1yZXBlYXRlcicgfSxcbiAgICAgICAgdGhpcy5nZXRUZXh0Ym94ZXMoKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVGV4dGJveFJlcGVhdGVyO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFRleHRib3hSZXBlYXRlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9mb3Jtcy9UZXh0Ym94UmVwZWF0ZXIuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formsTextboxRepeater = __webpack_require__(208);\n\nvar _formsTextboxRepeater2 = _interopRequireDefault(_formsTextboxRepeater);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar methodsToBind = ['getContent', 'handleDestinationChange', 'handleUrlAdd', 'handleUrlChange', 'handleUrlRemove', 'handleAddTorrents'];\n\nvar AddTorrents = (function (_React$Component) {\n _inherits(AddTorrents, _React$Component);\n\n function AddTorrents() {\n var _this = this;\n\n _classCallCheck(this, AddTorrents);\n\n _get(Object.getPrototypeOf(AddTorrents.prototype), 'constructor', this).call(this);\n\n this.state = {\n destination: null,\n isExpanded: false,\n urlTextboxes: [{ value: null }]\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(AddTorrents, [{\n key: 'getContent',\n value: function getContent() {\n return _react2['default'].createElement(\n 'div',\n { className: 'modal__content', onClick: this.handleMenuWrapperClick },\n _react2['default'].createElement(\n 'div',\n { className: 'modal__header' },\n 'Add Torrents'\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal__content__container' },\n _react2['default'].createElement(\n 'div',\n { className: 'form__row' },\n _react2['default'].createElement(_formsTextboxRepeater2['default'], { placeholder: 'Torrent URL',\n handleTextboxAdd: this.handleUrlAdd,\n handleTextboxChange: this.handleUrlChange,\n handleTextboxRemove: this.handleUrlRemove,\n textboxes: this.state.urlTextboxes })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'form__row' },\n _react2['default'].createElement('input', { className: 'textbox',\n onChange: this.handleDestinationChange,\n placeholder: 'Destination',\n value: this.state.destination,\n type: 'text' })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal__button-group form__row' },\n _react2['default'].createElement(\n 'button',\n { className: 'button button--deemphasize',\n onClick: this.props.dismissModal },\n 'Cancel'\n ),\n _react2['default'].createElement(\n 'button',\n { className: 'button button--primary',\n onClick: this.handleAddTorrents },\n 'Add Torrent'\n )\n )\n )\n );\n }\n }, {\n key: 'handleAddTorrents',\n value: function handleAddTorrents() {\n var torrentUrls = _lodash2['default'].pluck(this.state.urlTextboxes, 'value');\n _actionsTorrentActions2['default'].addTorrents(torrentUrls, this.state.destination);\n }\n }, {\n key: 'handleDestinationChange',\n value: function handleDestinationChange(event) {\n this.setState({\n destination: event.target.value\n });\n }\n }, {\n key: 'handleMenuWrapperClick',\n value: function handleMenuWrapperClick(event) {\n event.stopPropagation();\n }\n }, {\n key: 'handleUrlRemove',\n value: function handleUrlRemove(index) {\n var urlTextboxes = Object.assign([], this.state.urlTextboxes);\n urlTextboxes.splice(index, 1);\n this.setState({\n urlTextboxes: urlTextboxes\n });\n }\n }, {\n key: 'handleUrlAdd',\n value: function handleUrlAdd(index) {\n var urlTextboxes = Object.assign([], this.state.urlTextboxes);\n urlTextboxes.splice(index + 1, 0, { value: null });\n this.setState({ urlTextboxes: urlTextboxes });\n }\n }, {\n key: 'handleUrlChange',\n value: function handleUrlChange(index, value) {\n var urlTextboxes = Object.assign([], this.state.urlTextboxes);\n urlTextboxes[index].value = value;\n this.setState({ urlTextboxes: urlTextboxes });\n }\n }, {\n key: 'render',\n value: function render() {\n return this.getContent();\n }\n }]);\n\n return AddTorrents;\n})(_react2['default'].Component);\n\nexports['default'] = AddTorrents;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9tb2RhbHMvQWRkVG9ycmVudHMuanM/MGVlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsY0FBYztBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLG9FQUFvRTtBQUM3RTtBQUNBO0FBQ0EsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEMsaUZBQWlGO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0Qyx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsNkNBQTZDO0FBQzFEO0FBQ0E7QUFDQSxlQUFlO0FBQ2Ysa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGNBQWM7QUFDdkQscUJBQXFCLDZCQUE2QjtBQUNsRDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw2QkFBNkI7QUFDbEQ7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9sb2Rhc2ggPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxudmFyIF9sb2Rhc2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9kYXNoKTtcblxudmFyIF9jbGFzc25hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xuXG52YXIgX2NsYXNzbmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lcyk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9mb3Jtc1RleHRib3hSZXBlYXRlciA9IHJlcXVpcmUoJy4uL2Zvcm1zL1RleHRib3hSZXBlYXRlcicpO1xuXG52YXIgX2Zvcm1zVGV4dGJveFJlcGVhdGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zvcm1zVGV4dGJveFJlcGVhdGVyKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9hY3Rpb25zL1RvcnJlbnRBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc1RvcnJlbnRBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNUb3JyZW50QWN0aW9ucyk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydnZXRDb250ZW50JywgJ2hhbmRsZURlc3RpbmF0aW9uQ2hhbmdlJywgJ2hhbmRsZVVybEFkZCcsICdoYW5kbGVVcmxDaGFuZ2UnLCAnaGFuZGxlVXJsUmVtb3ZlJywgJ2hhbmRsZUFkZFRvcnJlbnRzJ107XG5cbnZhciBBZGRUb3JyZW50cyA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQWRkVG9ycmVudHMsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEFkZFRvcnJlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWRkVG9ycmVudHMpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoQWRkVG9ycmVudHMucHJvdG90eXBlKSwgJ2NvbnN0cnVjdG9yJywgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkZXN0aW5hdGlvbjogbnVsbCxcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsVGV4dGJveGVzOiBbeyB2YWx1ZTogbnVsbCB9XVxuICAgIH07XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQWRkVG9ycmVudHMsIFt7XG4gICAga2V5OiAnZ2V0Q29udGVudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ21vZGFsX19jb250ZW50Jywgb25DbGljazogdGhpcy5oYW5kbGVNZW51V3JhcHBlckNsaWNrIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbW9kYWxfX2hlYWRlcicgfSxcbiAgICAgICAgICAnQWRkIFRvcnJlbnRzJ1xuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ21vZGFsX19jb250ZW50X19jb250YWluZXInIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnZm9ybV9fcm93JyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2Zvcm1zVGV4dGJveFJlcGVhdGVyMlsnZGVmYXVsdCddLCB7IHBsYWNlaG9sZGVyOiAnVG9ycmVudCBVUkwnLFxuICAgICAgICAgICAgICBoYW5kbGVUZXh0Ym94QWRkOiB0aGlzLmhhbmRsZVVybEFkZCxcbiAgICAgICAgICAgICAgaGFuZGxlVGV4dGJveENoYW5nZTogdGhpcy5oYW5kbGVVcmxDaGFuZ2UsXG4gICAgICAgICAgICAgIGhhbmRsZVRleHRib3hSZW1vdmU6IHRoaXMuaGFuZGxlVXJsUmVtb3ZlLFxuICAgICAgICAgICAgICB0ZXh0Ym94ZXM6IHRoaXMuc3RhdGUudXJsVGV4dGJveGVzIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdmb3JtX19yb3cnIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGNsYXNzTmFtZTogJ3RleHRib3gnLFxuICAgICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVEZXN0aW5hdGlvbkNoYW5nZSxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdEZXN0aW5hdGlvbicsXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLmRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ21vZGFsX19idXR0b24tZ3JvdXAgZm9ybV9fcm93JyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdidXR0b24nLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2J1dHRvbiBidXR0b24tLWRlZW1waGFzaXplJyxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnByb3BzLmRpc21pc3NNb2RhbCB9LFxuICAgICAgICAgICAgICAnQ2FuY2VsJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdidXR0b24gYnV0dG9uLS1wcmltYXJ5JyxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUFkZFRvcnJlbnRzIH0sXG4gICAgICAgICAgICAgICdBZGQgVG9ycmVudCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlQWRkVG9ycmVudHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVBZGRUb3JyZW50cygpIHtcbiAgICAgIHZhciB0b3JyZW50VXJscyA9IF9sb2Rhc2gyWydkZWZhdWx0J10ucGx1Y2sodGhpcy5zdGF0ZS51cmxUZXh0Ym94ZXMsICd2YWx1ZScpO1xuICAgICAgX2FjdGlvbnNUb3JyZW50QWN0aW9uczJbJ2RlZmF1bHQnXS5hZGRUb3JyZW50cyh0b3JyZW50VXJscywgdGhpcy5zdGF0ZS5kZXN0aW5hdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlRGVzdGluYXRpb25DaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVEZXN0aW5hdGlvbkNoYW5nZShldmVudCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRlc3RpbmF0aW9uOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZU1lbnVXcmFwcGVyQ2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVNZW51V3JhcHBlckNsaWNrKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVVcmxSZW1vdmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVVcmxSZW1vdmUoaW5kZXgpIHtcbiAgICAgIHZhciB1cmxUZXh0Ym94ZXMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLnN0YXRlLnVybFRleHRib3hlcyk7XG4gICAgICB1cmxUZXh0Ym94ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB1cmxUZXh0Ym94ZXM6IHVybFRleHRib3hlc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVXJsQWRkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVXJsQWRkKGluZGV4KSB7XG4gICAgICB2YXIgdXJsVGV4dGJveGVzID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5zdGF0ZS51cmxUZXh0Ym94ZXMpO1xuICAgICAgdXJsVGV4dGJveGVzLnNwbGljZShpbmRleCArIDEsIDAsIHsgdmFsdWU6IG51bGwgfSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdXJsVGV4dGJveGVzOiB1cmxUZXh0Ym94ZXMgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVXJsQ2hhbmdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVXJsQ2hhbmdlKGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIHVybFRleHRib3hlcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuc3RhdGUudXJsVGV4dGJveGVzKTtcbiAgICAgIHVybFRleHRib3hlc1tpbmRleF0udmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyB1cmxUZXh0Ym94ZXM6IHVybFRleHRib3hlcyB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEFkZFRvcnJlbnRzO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFkZFRvcnJlbnRzO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL21vZGFscy9BZGRUb3JyZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDIwN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ }, /* 208 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ClientStats = __webpack_require__(209);\n\nvar _ClientStats2 = _interopRequireDefault(_ClientStats);\n\nvar _StatusFilters = __webpack_require__(215);\n\nvar _StatusFilters2 = _interopRequireDefault(_StatusFilters);\n\nvar _SearchBox = __webpack_require__(217);\n\nvar _SearchBox2 = _interopRequireDefault(_SearchBox);\n\nvar Sidebar = (function (_React$Component) {\n _inherits(Sidebar, _React$Component);\n\n function Sidebar() {\n _classCallCheck(this, Sidebar);\n\n _get(Object.getPrototypeOf(Sidebar.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(Sidebar, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'aside',\n { className: 'sidebar' },\n _react2['default'].createElement(_ClientStats2['default'], null),\n _react2['default'].createElement(_SearchBox2['default'], null),\n _react2['default'].createElement(_StatusFilters2['default'], null)\n );\n }\n }]);\n\n return Sidebar;\n})(_react2['default'].Component);\n\nexports['default'] = Sidebar;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NpZGViYXIuanM/ZWYwNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHVCQUF1QjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIyMDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9DbGllbnRTdGF0cyA9IHJlcXVpcmUoJy4vQ2xpZW50U3RhdHMnKTtcblxudmFyIF9DbGllbnRTdGF0czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9DbGllbnRTdGF0cyk7XG5cbnZhciBfU3RhdHVzRmlsdGVycyA9IHJlcXVpcmUoJy4vU3RhdHVzRmlsdGVycycpO1xuXG52YXIgX1N0YXR1c0ZpbHRlcnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfU3RhdHVzRmlsdGVycyk7XG5cbnZhciBfU2VhcmNoQm94ID0gcmVxdWlyZSgnLi9TZWFyY2hCb3gnKTtcblxudmFyIF9TZWFyY2hCb3gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfU2VhcmNoQm94KTtcblxudmFyIFNpZGViYXIgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFNpZGViYXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFNpZGViYXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNpZGViYXIpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU2lkZWJhci5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNpZGViYXIsIFt7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnYXNpZGUnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ3NpZGViYXInIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9DbGllbnRTdGF0czJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9TZWFyY2hCb3gyWydkZWZhdWx0J10sIG51bGwpLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfU3RhdHVzRmlsdGVyczJbJ2RlZmF1bHQnXSwgbnVsbClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNpZGViYXI7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gU2lkZWJhcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NpZGViYXIuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDhcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsIconJs = __webpack_require__(161);\n\nvar _iconsIconJs2 = _interopRequireDefault(_iconsIconJs);\n\nvar methodsToBind = ['getTextboxes', 'handleTextboxChange'];\n\nvar TextboxRepeater = (function (_React$Component) {\n _inherits(TextboxRepeater, _React$Component);\n\n function TextboxRepeater() {\n var _this = this;\n\n _classCallCheck(this, TextboxRepeater);\n\n _get(Object.getPrototypeOf(TextboxRepeater.prototype), 'constructor', this).call(this);\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(TextboxRepeater, [{\n key: 'getTextboxes',\n value: function getTextboxes() {\n var _this2 = this;\n\n var textboxes = this.props.textboxes.map(function (textbox, index) {\n var addButton = _react2['default'].createElement(\n 'button',\n { className: 'textbox-repeater__add floating-action__button',\n onClick: _this2.props.handleTextboxAdd.bind(textbox, index) },\n _react2['default'].createElement(_iconsIconJs2['default'], { icon: 'addMini', size: 'mini' })\n );\n var removeButton = null;\n\n if (index > 0) {\n removeButton = _react2['default'].createElement(\n 'button',\n { className: 'textbox-repeater__remove floating-action__button',\n onClick: _this2.props.handleTextboxRemove.bind(textbox, index) },\n _react2['default'].createElement(_iconsIconJs2['default'], { icon: 'removeMini', size: 'mini' })\n );\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: 'textbox__wrapper form__row', key: index },\n _react2['default'].createElement('input', { className: 'textbox',\n onChange: _this2.handleTextboxChange.bind(textbox, index),\n placeholder: _this2.props.placeholder,\n value: textbox.value,\n type: 'text' }),\n _react2['default'].createElement(\n 'div',\n { className: 'floating-action__group' },\n removeButton,\n addButton\n )\n );\n });\n return textboxes;\n }\n }, {\n key: 'handleTextboxChange',\n value: function handleTextboxChange(index, event) {\n this.props.handleTextboxChange(index, event.target.value);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'div',\n { className: 'textbox-repeater' },\n this.getTextboxes()\n );\n }\n }]);\n\n return TextboxRepeater;\n})(_react2['default'].Component);\n\nexports['default'] = TextboxRepeater;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9mb3Jtcy9UZXh0Ym94UmVwZWF0ZXIuanM/ODEzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCx5RUFBeUU7QUFDekUsc0VBQXNFLGdDQUFnQztBQUN0RztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYiw4RUFBOEU7QUFDOUUsd0VBQXdFLG1DQUFtQztBQUMzRztBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLHNEQUFzRDtBQUNqRSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSxhQUFhLHNDQUFzQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQ0FBZ0M7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIyMDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfY2xhc3NuYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcblxudmFyIF9jbGFzc25hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzbmFtZXMpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfaWNvbnNJY29uSnMgPSByZXF1aXJlKCcuLi9pY29ucy9JY29uLmpzJyk7XG5cbnZhciBfaWNvbnNJY29uSnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uSnMpO1xuXG52YXIgbWV0aG9kc1RvQmluZCA9IFsnZ2V0VGV4dGJveGVzJywgJ2hhbmRsZVRleHRib3hDaGFuZ2UnXTtcblxudmFyIFRleHRib3hSZXBlYXRlciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVGV4dGJveFJlcGVhdGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUZXh0Ym94UmVwZWF0ZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0Ym94UmVwZWF0ZXIpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGV4dGJveFJlcGVhdGVyLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVGV4dGJveFJlcGVhdGVyLCBbe1xuICAgIGtleTogJ2dldFRleHRib3hlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRleHRib3hlcygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgdGV4dGJveGVzID0gdGhpcy5wcm9wcy50ZXh0Ym94ZXMubWFwKGZ1bmN0aW9uICh0ZXh0Ym94LCBpbmRleCkge1xuICAgICAgICB2YXIgYWRkQnV0dG9uID0gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0ZXh0Ym94LXJlcGVhdGVyX19hZGQgZmxvYXRpbmctYWN0aW9uX19idXR0b24nLFxuICAgICAgICAgICAgb25DbGljazogX3RoaXMyLnByb3BzLmhhbmRsZVRleHRib3hBZGQuYmluZCh0ZXh0Ym94LCBpbmRleCkgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uSnMyWydkZWZhdWx0J10sIHsgaWNvbjogJ2FkZE1pbmknLCBzaXplOiAnbWluaScgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHJlbW92ZUJ1dHRvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgIHJlbW92ZUJ1dHRvbiA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RleHRib3gtcmVwZWF0ZXJfX3JlbW92ZSBmbG9hdGluZy1hY3Rpb25fX2J1dHRvbicsXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMi5wcm9wcy5oYW5kbGVUZXh0Ym94UmVtb3ZlLmJpbmQodGV4dGJveCwgaW5kZXgpIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uSnMyWydkZWZhdWx0J10sIHsgaWNvbjogJ3JlbW92ZU1pbmknLCBzaXplOiAnbWluaScgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndGV4dGJveF9fd3JhcHBlciBmb3JtX19yb3cnLCBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBjbGFzc05hbWU6ICd0ZXh0Ym94JyxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIuaGFuZGxlVGV4dGJveENoYW5nZS5iaW5kKHRleHRib3gsIGluZGV4KSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdGhpczIucHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB2YWx1ZTogdGV4dGJveC52YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyB9KSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdmbG9hdGluZy1hY3Rpb25fX2dyb3VwJyB9LFxuICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLFxuICAgICAgICAgICAgYWRkQnV0dG9uXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGV4dGJveGVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZVRleHRib3hDaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUZXh0Ym94Q2hhbmdlKGluZGV4LCBldmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5oYW5kbGVUZXh0Ym94Q2hhbmdlKGluZGV4LCBldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAndGV4dGJveC1yZXBlYXRlcicgfSxcbiAgICAgICAgdGhpcy5nZXRUZXh0Ym94ZXMoKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVGV4dGJveFJlcGVhdGVyO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFRleHRib3hSZXBlYXRlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9mb3Jtcy9UZXh0Ym94UmVwZWF0ZXIuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDhcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 209 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(157);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _storesClientDataStore = __webpack_require__(210);\n\nvar _storesClientDataStore2 = _interopRequireDefault(_storesClientDataStore);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilFormatData = __webpack_require__(212);\n\nvar _utilFormatData2 = _interopRequireDefault(_utilFormatData);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _LineChart = __webpack_require__(213);\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nvar methodsToBind = ['onTransferDataRequestError', 'onTransferDataRequestSuccess'];\n\nvar ClientStats = (function (_React$Component) {\n _inherits(ClientStats, _React$Component);\n\n function ClientStats() {\n var _this = this;\n\n _classCallCheck(this, ClientStats);\n\n _get(Object.getPrototypeOf(ClientStats.prototype), 'constructor', this).call(this);\n\n this.state = {\n sidebarWidth: 0,\n transferDataRequestError: false,\n transferDataRequestSuccess: false\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(ClientStats, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.setState({\n sidebarWidth: _reactDom2['default'].findDOMNode(this).offsetWidth\n });\n _storesClientDataStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_SUCCESS, this.onTransferDataRequestSuccess);\n _storesClientDataStore2['default'].fetchTransferData();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesClientDataStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_SUCCESS, this.onTransferDataRequestSuccess);\n }\n }, {\n key: 'onTransferDataRequestError',\n value: function onTransferDataRequestError() {\n this.setState({\n transferDataRequestError: true,\n transferDataRequestSuccess: false\n });\n }\n }, {\n key: 'onTransferDataRequestSuccess',\n value: function onTransferDataRequestSuccess() {\n this.setState({\n transferDataRequestError: false,\n transferDataRequestSuccess: true\n });\n }\n }, {\n key: 'render',\n value: function render() {\n if (this.state.transferDataRequestError) {\n return _react2['default'].createElement(\n 'div',\n null,\n 'Error'\n );\n } else if (!this.state.transferDataRequestSuccess) {\n return _react2['default'].createElement(\n 'div',\n null,\n 'Loading'\n );\n }\n\n var transferRate = _storesClientDataStore2['default'].getTransferRate();\n var transferRates = _storesClientDataStore2['default'].getTransferRates();\n var transferTotals = _storesClientDataStore2['default'].getTransferTotals();\n\n var uploadRate = _utilFormatData2['default'].data(transferRate.upload, '/s');\n var uploadTotal = _utilFormatData2['default'].data(transferTotals.upload);\n var downloadRate = _utilFormatData2['default'].data(transferRate.download, '/s');\n var downloadTotal = _utilFormatData2['default'].data(transferTotals.download);\n\n return _react2['default'].createElement(\n 'div',\n { className: 'client-stats sidebar__item' },\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat client-stat--download' },\n _react2['default'].createElement(\n 'span',\n { className: 'client-stat__icon' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'download' })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data' },\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--primary' },\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--secondary' },\n downloadTotal.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadTotal.unit\n ),\n ' Downloaded'\n )\n ),\n _react2['default'].createElement(_LineChart2['default'], {\n data: transferRates.download,\n height: 100,\n id: 'graph--download',\n slug: 'graph--download',\n width: this.state.sidebarWidth })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat client-stat--upload' },\n _react2['default'].createElement(\n 'span',\n { className: 'client-stat__icon' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'upload' })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data' },\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--primary' },\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--secondary' },\n uploadTotal.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadTotal.unit\n ),\n ' Uploaded'\n )\n ),\n _react2['default'].createElement(_LineChart2['default'], {\n data: transferRates.upload,\n height: 100,\n id: 'graph--upload',\n slug: 'graph--upload',\n width: this.state.sidebarWidth })\n ),\n _react2['default'].createElement(\n 'button',\n { className: 'client-stats client-stat--limits' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'limits' }),\n ' Limits'\n )\n );\n }\n }]);\n\n return ClientStats;\n})(_react2['default'].Component);\n\nClientStats.defaultProps = {\n historyLength: 20\n};\n\nexports['default'] = ClientStats;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL0NsaWVudFN0YXRzLmpzPzIxNTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHVDQUF1QyxtQkFBbUIsNEJBQTRCLGlEQUFpRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGFBQWEsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFL29CLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SiwwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsMENBQTBDO0FBQ25EO0FBQ0E7QUFDQSxXQUFXLGlEQUFpRDtBQUM1RDtBQUNBO0FBQ0EsYUFBYSxpQ0FBaUM7QUFDOUMsc0VBQXNFLG1CQUFtQjtBQUN6RjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlDQUFpQztBQUM5QztBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0Q0FBNEM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxXQUFXLCtDQUErQztBQUMxRDtBQUNBO0FBQ0EsYUFBYSxpQ0FBaUM7QUFDOUMsc0VBQXNFLGlCQUFpQjtBQUN2RjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlDQUFpQztBQUM5QztBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0Q0FBNEM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxXQUFXLGdEQUFnRDtBQUMzRCxvRUFBb0UsaUJBQWlCO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcmVhY3REb20gPSByZXF1aXJlKCdyZWFjdC1kb20nKTtcblxudmFyIF9yZWFjdERvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdERvbSk7XG5cbnZhciBfc3RvcmVzQ2xpZW50RGF0YVN0b3JlID0gcmVxdWlyZSgnLi4vLi4vc3RvcmVzL0NsaWVudERhdGFTdG9yZScpO1xuXG52YXIgX3N0b3Jlc0NsaWVudERhdGFTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdG9yZXNDbGllbnREYXRhU3RvcmUpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBfdXRpbEZvcm1hdERhdGEgPSByZXF1aXJlKCcuLi8uLi91dGlsL2Zvcm1hdERhdGEnKTtcblxudmFyIF91dGlsRm9ybWF0RGF0YTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsRm9ybWF0RGF0YSk7XG5cbnZhciBfaWNvbnNJY29uID0gcmVxdWlyZSgnLi4vaWNvbnMvSWNvbicpO1xuXG52YXIgX2ljb25zSWNvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pY29uc0ljb24pO1xuXG52YXIgX0xpbmVDaGFydCA9IHJlcXVpcmUoJy4vTGluZUNoYXJ0Jyk7XG5cbnZhciBfTGluZUNoYXJ0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0xpbmVDaGFydCk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydvblRyYW5zZmVyRGF0YVJlcXVlc3RFcnJvcicsICdvblRyYW5zZmVyRGF0YVJlcXVlc3RTdWNjZXNzJ107XG5cbnZhciBDbGllbnRTdGF0cyA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ2xpZW50U3RhdHMsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENsaWVudFN0YXRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xpZW50U3RhdHMpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2xpZW50U3RhdHMucHJvdG90eXBlKSwgJ2NvbnN0cnVjdG9yJywgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBzaWRlYmFyV2lkdGg6IDAsXG4gICAgICB0cmFuc2ZlckRhdGFSZXF1ZXN0RXJyb3I6IGZhbHNlLFxuICAgICAgdHJhbnNmZXJEYXRhUmVxdWVzdFN1Y2Nlc3M6IGZhbHNlXG4gICAgfTtcblxuICAgIG1ldGhvZHNUb0JpbmQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDbGllbnRTdGF0cywgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNpZGViYXJXaWR0aDogX3JlYWN0RG9tMlsnZGVmYXVsdCddLmZpbmRET01Ob2RlKHRoaXMpLm9mZnNldFdpZHRoXG4gICAgICB9KTtcbiAgICAgIF9zdG9yZXNDbGllbnREYXRhU3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UUkFOU0ZFUl9EQVRBX1JFUVVFU1RfU1VDQ0VTUywgdGhpcy5vblRyYW5zZmVyRGF0YVJlcXVlc3RTdWNjZXNzKTtcbiAgICAgIF9zdG9yZXNDbGllbnREYXRhU3RvcmUyWydkZWZhdWx0J10uZmV0Y2hUcmFuc2ZlckRhdGEoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgX3N0b3Jlc0NsaWVudERhdGFTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVFJBTlNGRVJfREFUQV9SRVFVRVNUX1NVQ0NFU1MsIHRoaXMub25UcmFuc2ZlckRhdGFSZXF1ZXN0U3VjY2Vzcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25UcmFuc2ZlckRhdGFSZXF1ZXN0RXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblRyYW5zZmVyRGF0YVJlcXVlc3RFcnJvcigpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0cmFuc2ZlckRhdGFSZXF1ZXN0RXJyb3I6IHRydWUsXG4gICAgICAgIHRyYW5zZmVyRGF0YVJlcXVlc3RTdWNjZXNzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25UcmFuc2ZlckRhdGFSZXF1ZXN0U3VjY2VzcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVHJhbnNmZXJEYXRhUmVxdWVzdFN1Y2Nlc3MoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdHJhbnNmZXJEYXRhUmVxdWVzdEVycm9yOiBmYWxzZSxcbiAgICAgICAgdHJhbnNmZXJEYXRhUmVxdWVzdFN1Y2Nlc3M6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnRyYW5zZmVyRGF0YVJlcXVlc3RFcnJvcikge1xuICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAnRXJyb3InXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlLnRyYW5zZmVyRGF0YVJlcXVlc3RTdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgICdMb2FkaW5nJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHJhbnNmZXJSYXRlID0gX3N0b3Jlc0NsaWVudERhdGFTdG9yZTJbJ2RlZmF1bHQnXS5nZXRUcmFuc2ZlclJhdGUoKTtcbiAgICAgIHZhciB0cmFuc2ZlclJhdGVzID0gX3N0b3Jlc0NsaWVudERhdGFTdG9yZTJbJ2RlZmF1bHQnXS5nZXRUcmFuc2ZlclJhdGVzKCk7XG4gICAgICB2YXIgdHJhbnNmZXJUb3RhbHMgPSBfc3RvcmVzQ2xpZW50RGF0YVN0b3JlMlsnZGVmYXVsdCddLmdldFRyYW5zZmVyVG90YWxzKCk7XG5cbiAgICAgIHZhciB1cGxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodHJhbnNmZXJSYXRlLnVwbG9hZCwgJy9zJyk7XG4gICAgICB2YXIgdXBsb2FkVG90YWwgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0cmFuc2ZlclRvdGFscy51cGxvYWQpO1xuICAgICAgdmFyIGRvd25sb2FkUmF0ZSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRyYW5zZmVyUmF0ZS5kb3dubG9hZCwgJy9zJyk7XG4gICAgICB2YXIgZG93bmxvYWRUb3RhbCA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRyYW5zZmVyVG90YWxzLmRvd25sb2FkKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdjbGllbnQtc3RhdHMgc2lkZWJhcl9faXRlbScgfSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdjbGllbnQtc3RhdCBjbGllbnQtc3RhdC0tZG93bmxvYWQnIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0X19pY29uJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zSWNvbjJbJ2RlZmF1bHQnXSwgeyBpY29uOiAnZG93bmxvYWQnIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdjbGllbnQtc3RhdF9fZGF0YScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdjbGllbnQtc3RhdF9fZGF0YS0tcHJpbWFyeScgfSxcbiAgICAgICAgICAgICAgZG93bmxvYWRSYXRlLnZhbHVlLFxuICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgICBkb3dubG9hZFJhdGUudW5pdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0X19kYXRhLS1zZWNvbmRhcnknIH0sXG4gICAgICAgICAgICAgIGRvd25sb2FkVG90YWwudmFsdWUsXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgIGRvd25sb2FkVG90YWwudW5pdFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAnIERvd25sb2FkZWQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfTGluZUNoYXJ0MlsnZGVmYXVsdCddLCB7XG4gICAgICAgICAgICBkYXRhOiB0cmFuc2ZlclJhdGVzLmRvd25sb2FkLFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICBpZDogJ2dyYXBoLS1kb3dubG9hZCcsXG4gICAgICAgICAgICBzbHVnOiAnZ3JhcGgtLWRvd25sb2FkJyxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLnNpZGViYXJXaWR0aCB9KVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0IGNsaWVudC1zdGF0LS11cGxvYWQnIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0X19pY29uJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zSWNvbjJbJ2RlZmF1bHQnXSwgeyBpY29uOiAndXBsb2FkJyB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXRfX2RhdGEnIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXRfX2RhdGEtLXByaW1hcnknIH0sXG4gICAgICAgICAgICAgIHVwbG9hZFJhdGUudmFsdWUsXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgIHVwbG9hZFJhdGUudW5pdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0X19kYXRhLS1zZWNvbmRhcnknIH0sXG4gICAgICAgICAgICAgIHVwbG9hZFRvdGFsLnZhbHVlLFxuICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWRUb3RhbC51bml0XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICcgVXBsb2FkZWQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfTGluZUNoYXJ0MlsnZGVmYXVsdCddLCB7XG4gICAgICAgICAgICBkYXRhOiB0cmFuc2ZlclJhdGVzLnVwbG9hZCxcbiAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAgaWQ6ICdncmFwaC0tdXBsb2FkJyxcbiAgICAgICAgICAgIHNsdWc6ICdncmFwaC0tdXBsb2FkJyxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLnNpZGViYXJXaWR0aCB9KVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnYnV0dG9uJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0cyBjbGllbnQtc3RhdC0tbGltaXRzJyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ2xpbWl0cycgfSksXG4gICAgICAgICAgJyBMaW1pdHMnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENsaWVudFN0YXRzO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbkNsaWVudFN0YXRzLmRlZmF1bHRQcm9wcyA9IHtcbiAgaGlzdG9yeUxlbmd0aDogMjBcbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IENsaWVudFN0YXRzO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3NpZGViYXIvQ2xpZW50U3RhdHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMDlcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ClientStats = __webpack_require__(210);\n\nvar _ClientStats2 = _interopRequireDefault(_ClientStats);\n\nvar _SearchBox = __webpack_require__(216);\n\nvar _SearchBox2 = _interopRequireDefault(_SearchBox);\n\nvar _SpeedLimitDropdown = __webpack_require__(217);\n\nvar _SpeedLimitDropdown2 = _interopRequireDefault(_SpeedLimitDropdown);\n\nvar _StatusFilters = __webpack_require__(218);\n\nvar _StatusFilters2 = _interopRequireDefault(_StatusFilters);\n\nvar Sidebar = (function (_React$Component) {\n _inherits(Sidebar, _React$Component);\n\n function Sidebar() {\n _classCallCheck(this, Sidebar);\n\n _get(Object.getPrototypeOf(Sidebar.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(Sidebar, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'aside',\n { className: 'sidebar' },\n _react2['default'].createElement(_SpeedLimitDropdown2['default'], null),\n _react2['default'].createElement(_ClientStats2['default'], null),\n _react2['default'].createElement(_SearchBox2['default'], null),\n _react2['default'].createElement(_StatusFilters2['default'], null)\n );\n }\n }]);\n\n return Sidebar;\n})(_react2['default'].Component);\n\nexports['default'] = Sidebar;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NpZGViYXIuanM/ZWYwNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHVCQUF1QjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX0NsaWVudFN0YXRzID0gcmVxdWlyZSgnLi9DbGllbnRTdGF0cycpO1xuXG52YXIgX0NsaWVudFN0YXRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0NsaWVudFN0YXRzKTtcblxudmFyIF9TZWFyY2hCb3ggPSByZXF1aXJlKCcuL1NlYXJjaEJveCcpO1xuXG52YXIgX1NlYXJjaEJveDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9TZWFyY2hCb3gpO1xuXG52YXIgX1NwZWVkTGltaXREcm9wZG93biA9IHJlcXVpcmUoJy4vU3BlZWRMaW1pdERyb3Bkb3duJyk7XG5cbnZhciBfU3BlZWRMaW1pdERyb3Bkb3duMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1NwZWVkTGltaXREcm9wZG93bik7XG5cbnZhciBfU3RhdHVzRmlsdGVycyA9IHJlcXVpcmUoJy4vU3RhdHVzRmlsdGVycycpO1xuXG52YXIgX1N0YXR1c0ZpbHRlcnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfU3RhdHVzRmlsdGVycyk7XG5cbnZhciBTaWRlYmFyID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTaWRlYmFyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTaWRlYmFyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTaWRlYmFyKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFNpZGViYXIucHJvdG90eXBlKSwgJ2NvbnN0cnVjdG9yJywgdGhpcykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTaWRlYmFyLCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2FzaWRlJyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdzaWRlYmFyJyB9LFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfU3BlZWRMaW1pdERyb3Bkb3duMlsnZGVmYXVsdCddLCBudWxsKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX0NsaWVudFN0YXRzMlsnZGVmYXVsdCddLCBudWxsKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX1NlYXJjaEJveDJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9TdGF0dXNGaWx0ZXJzMlsnZGVmYXVsdCddLCBudWxsKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2lkZWJhcjtcbn0pKF9yZWFjdDJbJ2RlZmF1bHQnXS5Db21wb25lbnQpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBTaWRlYmFyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3NpZGViYXIvU2lkZWJhci5qc1xuICoqIG1vZHVsZSBpZCA9IDIwOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ }, /* 210 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _BaseStore2 = __webpack_require__(195);\n\nvar _BaseStore3 = _interopRequireDefault(_BaseStore2);\n\nvar _actionsClientActions = __webpack_require__(211);\n\nvar _actionsClientActions2 = _interopRequireDefault(_actionsClientActions);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar historyLength = 100;\nvar pollInterval = 5000;\n\nvar ClientDataStoreClass = (function (_BaseStore) {\n _inherits(ClientDataStoreClass, _BaseStore);\n\n function ClientDataStoreClass() {\n _classCallCheck(this, ClientDataStoreClass);\n\n _get(Object.getPrototypeOf(ClientDataStoreClass.prototype), 'constructor', this).call(this);\n\n this.pollTransferDataID = null;\n this.transferRates = { download: [], upload: [] };\n this.transferTotals = { download: null, upload: null };\n }\n\n _createClass(ClientDataStoreClass, [{\n key: 'fetchTransferData',\n value: function fetchTransferData() {\n _actionsClientActions2['default'].fetchTransferData();\n\n if (this.pollTransferDataID === null) {\n this.startPollingTransferData();\n }\n }\n }, {\n key: 'getTransferTotals',\n value: function getTransferTotals() {\n return this.transferTotals;\n }\n }, {\n key: 'getTransferRate',\n value: function getTransferRate() {\n return this.transferRate;\n }\n }, {\n key: 'getTransferRates',\n value: function getTransferRates() {\n return this.transferRates;\n }\n }, {\n key: 'handleTransferDataSuccess',\n value: function handleTransferDataSuccess(transferData) {\n this.transferTotals = {\n download: transferData.downloadTotal,\n upload: transferData.uploadTotal\n };\n\n this.transferRate = {\n download: transferData.downloadRate,\n upload: transferData.uploadRate\n };\n\n // add the latest download & upload rates to the end of the array and remove\n // the first element in the array. if the arrays are empty, fill in zeros\n // for the first n entries.\n var index = 0;\n var downloadRateHistory = Object.assign([], this.transferRates.download);\n var uploadRateHistory = Object.assign([], this.transferRates.upload);\n\n if (uploadRateHistory.length === historyLength) {\n downloadRateHistory.shift();\n uploadRateHistory.shift();\n downloadRateHistory.push(parseInt(transferData.downloadRate));\n uploadRateHistory.push(parseInt(transferData.uploadRate));\n } else {\n while (index < historyLength) {\n if (index < historyLength - 1) {\n uploadRateHistory[index] = 0;\n downloadRateHistory[index] = 0;\n } else {\n downloadRateHistory[index] = parseInt(transferData.downloadRate);\n uploadRateHistory[index] = parseInt(transferData.uploadRate);\n }\n index++;\n }\n }\n\n this.transferRates = {\n download: downloadRateHistory,\n upload: uploadRateHistory\n };\n\n this.emit(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_SUCCESS);\n }\n }, {\n key: 'handleTransferDataError',\n value: function handleTransferDataError() {\n this.emit(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_ERROR);\n }\n }, {\n key: 'startPollingTransferData',\n value: function startPollingTransferData() {\n this.pollTransferDataID = setInterval(this.fetchTransferData.bind(this), pollInterval);\n }\n }, {\n key: 'startPollingTorrents',\n value: function startPollingTorrents() {\n clearInterval(this.pollTransferDataID);\n this.pollTransferDataID = null;\n }\n }, {\n key: 'stopPollingTorrentDetails',\n value: function stopPollingTorrentDetails() {\n clearInterval(this.pollTorrentDetailsIntervalID);\n this.isPollingTorrents = false;\n }\n }]);\n\n return ClientDataStoreClass;\n})(_BaseStore3['default']);\n\nvar ClientDataStore = new ClientDataStoreClass();\n\n_dispatcherAppDispatcher2['default'].register(function (payload) {\n var action = payload.action;\n var source = payload.source;\n\n switch (action.type) {\n case _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_SUCCESS:\n ClientDataStore.handleTransferDataSuccess(action.data.transferData);\n break;\n case _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_ERROR:\n ClientDataStore.handleTransferDataError(action.data.error);\n break;\n }\n});\n\nexports['default'] = ClientDataStore;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL0NsaWVudERhdGFTdG9yZS5qcz82ZDllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUIsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIyMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMgPSByZXF1aXJlKCcuLi9jb25zdGFudHMvQWN0aW9uVHlwZXMnKTtcblxudmFyIF9jb25zdGFudHNBY3Rpb25UeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25zdGFudHNBY3Rpb25UeXBlcyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyL0FwcERpc3BhdGNoZXInKTtcblxudmFyIF9kaXNwYXRjaGVyQXBwRGlzcGF0Y2hlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kaXNwYXRjaGVyQXBwRGlzcGF0Y2hlcik7XG5cbnZhciBfQmFzZVN0b3JlMiA9IHJlcXVpcmUoJy4vQmFzZVN0b3JlJyk7XG5cbnZhciBfQmFzZVN0b3JlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0Jhc2VTdG9yZTIpO1xuXG52YXIgX2FjdGlvbnNDbGllbnRBY3Rpb25zID0gcmVxdWlyZSgnLi4vYWN0aW9ucy9DbGllbnRBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc0NsaWVudEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc0NsaWVudEFjdGlvbnMpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBoaXN0b3J5TGVuZ3RoID0gMTAwO1xudmFyIHBvbGxJbnRlcnZhbCA9IDUwMDA7XG5cbnZhciBDbGllbnREYXRhU3RvcmVDbGFzcyA9IChmdW5jdGlvbiAoX0Jhc2VTdG9yZSkge1xuICBfaW5oZXJpdHMoQ2xpZW50RGF0YVN0b3JlQ2xhc3MsIF9CYXNlU3RvcmUpO1xuXG4gIGZ1bmN0aW9uIENsaWVudERhdGFTdG9yZUNsYXNzKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDbGllbnREYXRhU3RvcmVDbGFzcyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGllbnREYXRhU3RvcmVDbGFzcy5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wb2xsVHJhbnNmZXJEYXRhSUQgPSBudWxsO1xuICAgIHRoaXMudHJhbnNmZXJSYXRlcyA9IHsgZG93bmxvYWQ6IFtdLCB1cGxvYWQ6IFtdIH07XG4gICAgdGhpcy50cmFuc2ZlclRvdGFscyA9IHsgZG93bmxvYWQ6IG51bGwsIHVwbG9hZDogbnVsbCB9O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENsaWVudERhdGFTdG9yZUNsYXNzLCBbe1xuICAgIGtleTogJ2ZldGNoVHJhbnNmZXJEYXRhJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmV0Y2hUcmFuc2ZlckRhdGEoKSB7XG4gICAgICBfYWN0aW9uc0NsaWVudEFjdGlvbnMyWydkZWZhdWx0J10uZmV0Y2hUcmFuc2ZlckRhdGEoKTtcblxuICAgICAgaWYgKHRoaXMucG9sbFRyYW5zZmVyRGF0YUlEID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3RhcnRQb2xsaW5nVHJhbnNmZXJEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0VHJhbnNmZXJUb3RhbHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUcmFuc2ZlclRvdGFscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zZmVyVG90YWxzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRyYW5zZmVyUmF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRyYW5zZmVyUmF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zZmVyUmF0ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRUcmFuc2ZlclJhdGVzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHJhbnNmZXJSYXRlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zZmVyUmF0ZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVHJhbnNmZXJEYXRhU3VjY2VzcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVRyYW5zZmVyRGF0YVN1Y2Nlc3ModHJhbnNmZXJEYXRhKSB7XG4gICAgICB0aGlzLnRyYW5zZmVyVG90YWxzID0ge1xuICAgICAgICBkb3dubG9hZDogdHJhbnNmZXJEYXRhLmRvd25sb2FkVG90YWwsXG4gICAgICAgIHVwbG9hZDogdHJhbnNmZXJEYXRhLnVwbG9hZFRvdGFsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnRyYW5zZmVyUmF0ZSA9IHtcbiAgICAgICAgZG93bmxvYWQ6IHRyYW5zZmVyRGF0YS5kb3dubG9hZFJhdGUsXG4gICAgICAgIHVwbG9hZDogdHJhbnNmZXJEYXRhLnVwbG9hZFJhdGVcbiAgICAgIH07XG5cbiAgICAgIC8vIGFkZCB0aGUgbGF0ZXN0IGRvd25sb2FkICYgdXBsb2FkIHJhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IGFuZCByZW1vdmVcbiAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBhcnJheS4gaWYgdGhlIGFycmF5cyBhcmUgZW1wdHksIGZpbGwgaW4gemVyb3NcbiAgICAgIC8vIGZvciB0aGUgZmlyc3QgbiBlbnRyaWVzLlxuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciBkb3dubG9hZFJhdGVIaXN0b3J5ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy50cmFuc2ZlclJhdGVzLmRvd25sb2FkKTtcbiAgICAgIHZhciB1cGxvYWRSYXRlSGlzdG9yeSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMudHJhbnNmZXJSYXRlcy51cGxvYWQpO1xuXG4gICAgICBpZiAodXBsb2FkUmF0ZUhpc3RvcnkubGVuZ3RoID09PSBoaXN0b3J5TGVuZ3RoKSB7XG4gICAgICAgIGRvd25sb2FkUmF0ZUhpc3Rvcnkuc2hpZnQoKTtcbiAgICAgICAgdXBsb2FkUmF0ZUhpc3Rvcnkuc2hpZnQoKTtcbiAgICAgICAgZG93bmxvYWRSYXRlSGlzdG9yeS5wdXNoKHBhcnNlSW50KHRyYW5zZmVyRGF0YS5kb3dubG9hZFJhdGUpKTtcbiAgICAgICAgdXBsb2FkUmF0ZUhpc3RvcnkucHVzaChwYXJzZUludCh0cmFuc2ZlckRhdGEudXBsb2FkUmF0ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgaGlzdG9yeUxlbmd0aCkge1xuICAgICAgICAgIGlmIChpbmRleCA8IGhpc3RvcnlMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB1cGxvYWRSYXRlSGlzdG9yeVtpbmRleF0gPSAwO1xuICAgICAgICAgICAgZG93bmxvYWRSYXRlSGlzdG9yeVtpbmRleF0gPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3dubG9hZFJhdGVIaXN0b3J5W2luZGV4XSA9IHBhcnNlSW50KHRyYW5zZmVyRGF0YS5kb3dubG9hZFJhdGUpO1xuICAgICAgICAgICAgdXBsb2FkUmF0ZUhpc3RvcnlbaW5kZXhdID0gcGFyc2VJbnQodHJhbnNmZXJEYXRhLnVwbG9hZFJhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhbnNmZXJSYXRlcyA9IHtcbiAgICAgICAgZG93bmxvYWQ6IGRvd25sb2FkUmF0ZUhpc3RvcnksXG4gICAgICAgIHVwbG9hZDogdXBsb2FkUmF0ZUhpc3RvcnlcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVFJBTlNGRVJfREFUQV9SRVFVRVNUX1NVQ0NFU1MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZVRyYW5zZmVyRGF0YUVycm9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVHJhbnNmZXJEYXRhRXJyb3IoKSB7XG4gICAgICB0aGlzLmVtaXQoX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX1RSQU5TRkVSX0RBVEFfUkVRVUVTVF9FUlJPUik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc3RhcnRQb2xsaW5nVHJhbnNmZXJEYXRhJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRQb2xsaW5nVHJhbnNmZXJEYXRhKCkge1xuICAgICAgdGhpcy5wb2xsVHJhbnNmZXJEYXRhSUQgPSBzZXRJbnRlcnZhbCh0aGlzLmZldGNoVHJhbnNmZXJEYXRhLmJpbmQodGhpcyksIHBvbGxJbnRlcnZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc3RhcnRQb2xsaW5nVG9ycmVudHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydFBvbGxpbmdUb3JyZW50cygpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVHJhbnNmZXJEYXRhSUQpO1xuICAgICAgdGhpcy5wb2xsVHJhbnNmZXJEYXRhSUQgPSBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3N0b3BQb2xsaW5nVG9ycmVudERldGFpbHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdG9wUG9sbGluZ1RvcnJlbnREZXRhaWxzKCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxUb3JyZW50RGV0YWlsc0ludGVydmFsSUQpO1xuICAgICAgdGhpcy5pc1BvbGxpbmdUb3JyZW50cyA9IGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDbGllbnREYXRhU3RvcmVDbGFzcztcbn0pKF9CYXNlU3RvcmUzWydkZWZhdWx0J10pO1xuXG52YXIgQ2xpZW50RGF0YVN0b3JlID0gbmV3IENsaWVudERhdGFTdG9yZUNsYXNzKCk7XG5cbl9kaXNwYXRjaGVyQXBwRGlzcGF0Y2hlcjJbJ2RlZmF1bHQnXS5yZWdpc3RlcihmdW5jdGlvbiAocGF5bG9hZCkge1xuICB2YXIgYWN0aW9uID0gcGF5bG9hZC5hY3Rpb247XG4gIHZhciBzb3VyY2UgPSBwYXlsb2FkLnNvdXJjZTtcblxuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX0ZFVENIX1RSQU5TRkVSX0RBVEFfU1VDQ0VTUzpcbiAgICAgIENsaWVudERhdGFTdG9yZS5oYW5kbGVUcmFuc2ZlckRhdGFTdWNjZXNzKGFjdGlvbi5kYXRhLnRyYW5zZmVyRGF0YSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfRkVUQ0hfVFJBTlNGRVJfREFUQV9FUlJPUjpcbiAgICAgIENsaWVudERhdGFTdG9yZS5oYW5kbGVUcmFuc2ZlckRhdGFFcnJvcihhY3Rpb24uZGF0YS5lcnJvcik7XG4gICAgICBicmVhaztcbiAgfVxufSk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IENsaWVudERhdGFTdG9yZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL0NsaWVudERhdGFTdG9yZS5qc1xuICoqIG1vZHVsZSBpZCA9IDIxMFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(157);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _storesClientDataStore = __webpack_require__(211);\n\nvar _storesClientDataStore2 = _interopRequireDefault(_storesClientDataStore);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilFormatData = __webpack_require__(213);\n\nvar _utilFormatData2 = _interopRequireDefault(_utilFormatData);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _LineChart = __webpack_require__(214);\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nvar methodsToBind = ['onTransferDataRequestError', 'onTransferDataRequestSuccess'];\n\nvar ClientStats = (function (_React$Component) {\n _inherits(ClientStats, _React$Component);\n\n function ClientStats() {\n var _this = this;\n\n _classCallCheck(this, ClientStats);\n\n _get(Object.getPrototypeOf(ClientStats.prototype), 'constructor', this).call(this);\n\n this.state = {\n sidebarWidth: 0,\n transferDataRequestError: false,\n transferDataRequestSuccess: false\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(ClientStats, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.setState({\n sidebarWidth: _reactDom2['default'].findDOMNode(this).offsetWidth\n });\n _storesClientDataStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_SUCCESS, this.onTransferDataRequestSuccess);\n _storesClientDataStore2['default'].fetchTransferData();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesClientDataStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_SUCCESS, this.onTransferDataRequestSuccess);\n }\n }, {\n key: 'onTransferDataRequestError',\n value: function onTransferDataRequestError() {\n this.setState({\n transferDataRequestError: true,\n transferDataRequestSuccess: false\n });\n }\n }, {\n key: 'onTransferDataRequestSuccess',\n value: function onTransferDataRequestSuccess() {\n this.setState({\n transferDataRequestError: false,\n transferDataRequestSuccess: true\n });\n }\n }, {\n key: 'render',\n value: function render() {\n if (this.state.transferDataRequestError) {\n return _react2['default'].createElement(\n 'div',\n null,\n 'Error'\n );\n } else if (!this.state.transferDataRequestSuccess) {\n return _react2['default'].createElement(\n 'div',\n null,\n 'Loading'\n );\n }\n\n var transferRate = _storesClientDataStore2['default'].getTransferRate();\n var transferRates = _storesClientDataStore2['default'].getTransferRates();\n var transferTotals = _storesClientDataStore2['default'].getTransferTotals();\n\n var uploadRate = _utilFormatData2['default'].data(transferRate.upload, '/s');\n var uploadTotal = _utilFormatData2['default'].data(transferTotals.upload);\n var downloadRate = _utilFormatData2['default'].data(transferRate.download, '/s');\n var downloadTotal = _utilFormatData2['default'].data(transferTotals.download);\n\n return _react2['default'].createElement(\n 'div',\n { className: 'client-stats sidebar__item' },\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat client-stat--download' },\n _react2['default'].createElement(\n 'span',\n { className: 'client-stat__icon' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'download' })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data' },\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--primary' },\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--secondary' },\n downloadTotal.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadTotal.unit\n ),\n ' Downloaded'\n )\n ),\n _react2['default'].createElement(_LineChart2['default'], {\n data: transferRates.download,\n height: 100,\n id: 'graph--download',\n slug: 'graph--download',\n width: this.state.sidebarWidth })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat client-stat--upload' },\n _react2['default'].createElement(\n 'span',\n { className: 'client-stat__icon' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'upload' })\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data' },\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--primary' },\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'client-stat__data--secondary' },\n uploadTotal.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadTotal.unit\n ),\n ' Uploaded'\n )\n ),\n _react2['default'].createElement(_LineChart2['default'], {\n data: transferRates.upload,\n height: 100,\n id: 'graph--upload',\n slug: 'graph--upload',\n width: this.state.sidebarWidth })\n )\n );\n }\n }]);\n\n return ClientStats;\n})(_react2['default'].Component);\n\nClientStats.defaultProps = {\n historyLength: 20\n};\n\nexports['default'] = ClientStats;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL0NsaWVudFN0YXRzLmpzPzIxNTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHVDQUF1QyxtQkFBbUIsNEJBQTRCLGlEQUFpRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGFBQWEsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFL29CLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SiwwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsMENBQTBDO0FBQ25EO0FBQ0E7QUFDQSxXQUFXLGlEQUFpRDtBQUM1RDtBQUNBO0FBQ0EsYUFBYSxpQ0FBaUM7QUFDOUMsc0VBQXNFLG1CQUFtQjtBQUN6RjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlDQUFpQztBQUM5QztBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0Q0FBNEM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxXQUFXLCtDQUErQztBQUMxRDtBQUNBO0FBQ0EsYUFBYSxpQ0FBaUM7QUFDOUMsc0VBQXNFLGlCQUFpQjtBQUN2RjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlDQUFpQztBQUM5QztBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0Q0FBNEM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIyMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpO1xuXG52YXIgX3JlYWN0RG9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0RG9tKTtcblxudmFyIF9zdG9yZXNDbGllbnREYXRhU3RvcmUgPSByZXF1aXJlKCcuLi8uLi9zdG9yZXMvQ2xpZW50RGF0YVN0b3JlJyk7XG5cbnZhciBfc3RvcmVzQ2xpZW50RGF0YVN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3Jlc0NsaWVudERhdGFTdG9yZSk7XG5cbnZhciBfY29uc3RhbnRzRXZlbnRUeXBlcyA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0YW50cy9FdmVudFR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzRXZlbnRUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25zdGFudHNFdmVudFR5cGVzKTtcblxudmFyIF91dGlsRm9ybWF0RGF0YSA9IHJlcXVpcmUoJy4uLy4uL3V0aWwvZm9ybWF0RGF0YScpO1xuXG52YXIgX3V0aWxGb3JtYXREYXRhMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWxGb3JtYXREYXRhKTtcblxudmFyIF9pY29uc0ljb24gPSByZXF1aXJlKCcuLi9pY29ucy9JY29uJyk7XG5cbnZhciBfaWNvbnNJY29uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ljb25zSWNvbik7XG5cbnZhciBfTGluZUNoYXJ0ID0gcmVxdWlyZSgnLi9MaW5lQ2hhcnQnKTtcblxudmFyIF9MaW5lQ2hhcnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfTGluZUNoYXJ0KTtcblxudmFyIG1ldGhvZHNUb0JpbmQgPSBbJ29uVHJhbnNmZXJEYXRhUmVxdWVzdEVycm9yJywgJ29uVHJhbnNmZXJEYXRhUmVxdWVzdFN1Y2Nlc3MnXTtcblxudmFyIENsaWVudFN0YXRzID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDbGllbnRTdGF0cywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ2xpZW50U3RhdHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDbGllbnRTdGF0cyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGllbnRTdGF0cy5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHNpZGViYXJXaWR0aDogMCxcbiAgICAgIHRyYW5zZmVyRGF0YVJlcXVlc3RFcnJvcjogZmFsc2UsXG4gICAgICB0cmFuc2ZlckRhdGFSZXF1ZXN0U3VjY2VzczogZmFsc2VcbiAgICB9O1xuXG4gICAgbWV0aG9kc1RvQmluZC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENsaWVudFN0YXRzLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2lkZWJhcldpZHRoOiBfcmVhY3REb20yWydkZWZhdWx0J10uZmluZERPTU5vZGUodGhpcykub2Zmc2V0V2lkdGhcbiAgICAgIH0pO1xuICAgICAgX3N0b3Jlc0NsaWVudERhdGFTdG9yZTJbJ2RlZmF1bHQnXS5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX1RSQU5TRkVSX0RBVEFfUkVRVUVTVF9TVUNDRVNTLCB0aGlzLm9uVHJhbnNmZXJEYXRhUmVxdWVzdFN1Y2Nlc3MpO1xuICAgICAgX3N0b3Jlc0NsaWVudERhdGFTdG9yZTJbJ2RlZmF1bHQnXS5mZXRjaFRyYW5zZmVyRGF0YSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBfc3RvcmVzQ2xpZW50RGF0YVN0b3JlMlsnZGVmYXVsdCddLnVubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UUkFOU0ZFUl9EQVRBX1JFUVVFU1RfU1VDQ0VTUywgdGhpcy5vblRyYW5zZmVyRGF0YVJlcXVlc3RTdWNjZXNzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblRyYW5zZmVyRGF0YVJlcXVlc3RFcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVHJhbnNmZXJEYXRhUmVxdWVzdEVycm9yKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHRyYW5zZmVyRGF0YVJlcXVlc3RFcnJvcjogdHJ1ZSxcbiAgICAgICAgdHJhbnNmZXJEYXRhUmVxdWVzdFN1Y2Nlc3M6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblRyYW5zZmVyRGF0YVJlcXVlc3RTdWNjZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25UcmFuc2ZlckRhdGFSZXF1ZXN0U3VjY2VzcygpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0cmFuc2ZlckRhdGFSZXF1ZXN0RXJyb3I6IGZhbHNlLFxuICAgICAgICB0cmFuc2ZlckRhdGFSZXF1ZXN0U3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUudHJhbnNmZXJEYXRhUmVxdWVzdEVycm9yKSB7XG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgICdFcnJvcidcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGUudHJhbnNmZXJEYXRhUmVxdWVzdFN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ0xvYWRpbmcnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFuc2ZlclJhdGUgPSBfc3RvcmVzQ2xpZW50RGF0YVN0b3JlMlsnZGVmYXVsdCddLmdldFRyYW5zZmVyUmF0ZSgpO1xuICAgICAgdmFyIHRyYW5zZmVyUmF0ZXMgPSBfc3RvcmVzQ2xpZW50RGF0YVN0b3JlMlsnZGVmYXVsdCddLmdldFRyYW5zZmVyUmF0ZXMoKTtcbiAgICAgIHZhciB0cmFuc2ZlclRvdGFscyA9IF9zdG9yZXNDbGllbnREYXRhU3RvcmUyWydkZWZhdWx0J10uZ2V0VHJhbnNmZXJUb3RhbHMoKTtcblxuICAgICAgdmFyIHVwbG9hZFJhdGUgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0cmFuc2ZlclJhdGUudXBsb2FkLCAnL3MnKTtcbiAgICAgIHZhciB1cGxvYWRUb3RhbCA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRyYW5zZmVyVG90YWxzLnVwbG9hZCk7XG4gICAgICB2YXIgZG93bmxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodHJhbnNmZXJSYXRlLmRvd25sb2FkLCAnL3MnKTtcbiAgICAgIHZhciBkb3dubG9hZFRvdGFsID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodHJhbnNmZXJUb3RhbHMuZG93bmxvYWQpO1xuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0cyBzaWRlYmFyX19pdGVtJyB9LFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0IGNsaWVudC1zdGF0LS1kb3dubG9hZCcgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXRfX2ljb24nIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdkb3dubG9hZCcgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0X19kYXRhJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2NsaWVudC1zdGF0X19kYXRhLS1wcmltYXJ5JyB9LFxuICAgICAgICAgICAgICBkb3dubG9hZFJhdGUudmFsdWUsXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgIGRvd25sb2FkUmF0ZS51bml0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXRfX2RhdGEtLXNlY29uZGFyeScgfSxcbiAgICAgICAgICAgICAgZG93bmxvYWRUb3RhbC52YWx1ZSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgICAgZG93bmxvYWRUb3RhbC51bml0XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICcgRG93bmxvYWRlZCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9MaW5lQ2hhcnQyWydkZWZhdWx0J10sIHtcbiAgICAgICAgICAgIGRhdGE6IHRyYW5zZmVyUmF0ZXMuZG93bmxvYWQsXG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgICAgIGlkOiAnZ3JhcGgtLWRvd25sb2FkJyxcbiAgICAgICAgICAgIHNsdWc6ICdncmFwaC0tZG93bmxvYWQnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuc3RhdGUuc2lkZWJhcldpZHRoIH0pXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXQgY2xpZW50LXN0YXQtLXVwbG9hZCcgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXRfX2ljb24nIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICd1cGxvYWQnIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdjbGllbnQtc3RhdF9fZGF0YScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdjbGllbnQtc3RhdF9fZGF0YS0tcHJpbWFyeScgfSxcbiAgICAgICAgICAgICAgdXBsb2FkUmF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgICAgdXBsb2FkUmF0ZS51bml0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXRfX2RhdGEtLXNlY29uZGFyeScgfSxcbiAgICAgICAgICAgICAgdXBsb2FkVG90YWwudmFsdWUsXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgIHVwbG9hZFRvdGFsLnVuaXRcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgJyBVcGxvYWRlZCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9MaW5lQ2hhcnQyWydkZWZhdWx0J10sIHtcbiAgICAgICAgICAgIGRhdGE6IHRyYW5zZmVyUmF0ZXMudXBsb2FkLFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICBpZDogJ2dyYXBoLS11cGxvYWQnLFxuICAgICAgICAgICAgc2x1ZzogJ2dyYXBoLS11cGxvYWQnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuc3RhdGUuc2lkZWJhcldpZHRoIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENsaWVudFN0YXRzO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbkNsaWVudFN0YXRzLmRlZmF1bHRQcm9wcyA9IHtcbiAgaGlzdG9yeUxlbmd0aDogMjBcbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IENsaWVudFN0YXRzO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3NpZGViYXIvQ2xpZW50U3RhdHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMTBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 211 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _axios = __webpack_require__(180);\n\nvar _axios2 = _interopRequireDefault(_axios);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar ClientActions = {\n fetchTransferData: function fetchTransferData() {\n return _axios2['default'].get('/client/stats').then(function () {\n var json = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n return json.data;\n }).then(function (transferData) {\n _dispatcherAppDispatcher2['default'].dispatchServerAction({\n type: _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_SUCCESS,\n data: {\n transferData: transferData\n }\n });\n })['catch'](function (error) {\n _dispatcherAppDispatcher2['default'].dispatchServerAction({\n type: _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_ERROR,\n data: {\n error: error\n }\n });\n });\n }\n};\n\nexports['default'] = ClientActions;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvYWN0aW9ucy9DbGllbnRBY3Rpb25zLmpzP2IwMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTs7QUFFekU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9heGlvcyA9IHJlcXVpcmUoJ2F4aW9zJyk7XG5cbnZhciBfYXhpb3MyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXhpb3MpO1xuXG52YXIgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9BcHBEaXNwYXRjaGVyJyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIpO1xuXG52YXIgX2NvbnN0YW50c0FjdGlvblR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzQWN0aW9uVHlwZXMpO1xuXG52YXIgQ2xpZW50QWN0aW9ucyA9IHtcbiAgZmV0Y2hUcmFuc2ZlckRhdGE6IGZ1bmN0aW9uIGZldGNoVHJhbnNmZXJEYXRhKCkge1xuICAgIHJldHVybiBfYXhpb3MyWydkZWZhdWx0J10uZ2V0KCcvY2xpZW50L3N0YXRzJykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIganNvbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXG4gICAgICByZXR1cm4ganNvbi5kYXRhO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRyYW5zZmVyRGF0YSkge1xuICAgICAgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyMlsnZGVmYXVsdCddLmRpc3BhdGNoU2VydmVyQWN0aW9uKHtcbiAgICAgICAgdHlwZTogX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9GRVRDSF9UUkFOU0ZFUl9EQVRBX1NVQ0NFU1MsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0cmFuc2ZlckRhdGE6IHRyYW5zZmVyRGF0YVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KVsnY2F0Y2gnXShmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIF9kaXNwYXRjaGVyQXBwRGlzcGF0Y2hlcjJbJ2RlZmF1bHQnXS5kaXNwYXRjaFNlcnZlckFjdGlvbih7XG4gICAgICAgIHR5cGU6IF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfRkVUQ0hfVFJBTlNGRVJfREFUQV9FUlJPUixcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gQ2xpZW50QWN0aW9ucztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvYWN0aW9ucy9DbGllbnRBY3Rpb25zLmpzXG4gKiogbW9kdWxlIGlkID0gMjExXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _BaseStore2 = __webpack_require__(195);\n\nvar _BaseStore3 = _interopRequireDefault(_BaseStore2);\n\nvar _actionsClientActions = __webpack_require__(212);\n\nvar _actionsClientActions2 = _interopRequireDefault(_actionsClientActions);\n\nvar _configConfig = __webpack_require__(200);\n\nvar _configConfig2 = _interopRequireDefault(_configConfig);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar ClientDataStoreClass = (function (_BaseStore) {\n _inherits(ClientDataStoreClass, _BaseStore);\n\n function ClientDataStoreClass() {\n _classCallCheck(this, ClientDataStoreClass);\n\n _get(Object.getPrototypeOf(ClientDataStoreClass.prototype), 'constructor', this).call(this);\n\n this.pollTransferDataID = null;\n this.transferRates = { download: [], upload: [] };\n this.transferTotals = { download: null, upload: null };\n }\n\n _createClass(ClientDataStoreClass, [{\n key: 'fetchTransferData',\n value: function fetchTransferData() {\n _actionsClientActions2['default'].fetchTransferData();\n\n if (this.pollTransferDataID === null) {\n this.startPollingTransferData();\n }\n }\n }, {\n key: 'getTransferTotals',\n value: function getTransferTotals() {\n return this.transferTotals;\n }\n }, {\n key: 'getTransferRate',\n value: function getTransferRate() {\n return this.transferRate;\n }\n }, {\n key: 'getTransferRates',\n value: function getTransferRates() {\n return this.transferRates;\n }\n }, {\n key: 'handleTransferDataSuccess',\n value: function handleTransferDataSuccess(transferData) {\n this.transferTotals = {\n download: transferData.downloadTotal,\n upload: transferData.uploadTotal\n };\n\n this.transferRate = {\n download: transferData.downloadRate,\n upload: transferData.uploadRate\n };\n\n // add the latest download & upload rates to the end of the array and remove\n // the first element in the array. if the arrays are empty, fill in zeros\n // for the first n entries.\n var index = 0;\n var downloadRateHistory = Object.assign([], this.transferRates.download);\n var uploadRateHistory = Object.assign([], this.transferRates.upload);\n\n if (uploadRateHistory.length === _configConfig2['default'].maxHistoryStates) {\n downloadRateHistory.shift();\n uploadRateHistory.shift();\n downloadRateHistory.push(parseInt(transferData.downloadRate));\n uploadRateHistory.push(parseInt(transferData.uploadRate));\n } else {\n while (index < _configConfig2['default'].maxHistoryStates) {\n if (index < _configConfig2['default'].maxHistoryStates - 1) {\n uploadRateHistory[index] = 0;\n downloadRateHistory[index] = 0;\n } else {\n downloadRateHistory[index] = parseInt(transferData.downloadRate);\n uploadRateHistory[index] = parseInt(transferData.uploadRate);\n }\n index++;\n }\n }\n\n this.transferRates = {\n download: downloadRateHistory,\n upload: uploadRateHistory\n };\n\n this.emit(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_SUCCESS);\n }\n }, {\n key: 'handleTransferDataError',\n value: function handleTransferDataError() {\n this.emit(_constantsEventTypes2['default'].CLIENT_TRANSFER_DATA_REQUEST_ERROR);\n }\n }, {\n key: 'startPollingTransferData',\n value: function startPollingTransferData() {\n this.pollTransferDataID = setInterval(this.fetchTransferData.bind(this), _configConfig2['default'].pollInterval);\n }\n }, {\n key: 'startPollingTorrents',\n value: function startPollingTorrents() {\n clearInterval(this.pollTransferDataID);\n this.pollTransferDataID = null;\n }\n }, {\n key: 'stopPollingTorrentDetails',\n value: function stopPollingTorrentDetails() {\n clearInterval(this.pollTorrentDetailsIntervalID);\n this.isPollingTorrents = false;\n }\n }]);\n\n return ClientDataStoreClass;\n})(_BaseStore3['default']);\n\nvar ClientDataStore = new ClientDataStoreClass();\n\n_dispatcherAppDispatcher2['default'].register(function (payload) {\n var action = payload.action;\n var source = payload.source;\n\n switch (action.type) {\n case _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_SUCCESS:\n ClientDataStore.handleTransferDataSuccess(action.data.transferData);\n break;\n case _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_ERROR:\n ClientDataStore.handleTransferDataError(action.data.error);\n break;\n }\n});\n\nexports['default'] = ClientDataStore;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvc3RvcmVzL0NsaWVudERhdGFTdG9yZS5qcz82ZDllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCLDJCQUEyQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NvbnN0YW50c0FjdGlvblR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzQWN0aW9uVHlwZXMpO1xuXG52YXIgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9BcHBEaXNwYXRjaGVyJyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIpO1xuXG52YXIgX0Jhc2VTdG9yZTIgPSByZXF1aXJlKCcuL0Jhc2VTdG9yZScpO1xuXG52YXIgX0Jhc2VTdG9yZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9CYXNlU3RvcmUyKTtcblxudmFyIF9hY3Rpb25zQ2xpZW50QWN0aW9ucyA9IHJlcXVpcmUoJy4uL2FjdGlvbnMvQ2xpZW50QWN0aW9ucycpO1xuXG52YXIgX2FjdGlvbnNDbGllbnRBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNDbGllbnRBY3Rpb25zKTtcblxudmFyIF9jb25maWdDb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcvY29uZmlnJyk7XG5cbnZhciBfY29uZmlnQ29uZmlnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZ0NvbmZpZyk7XG5cbnZhciBfY29uc3RhbnRzRXZlbnRUeXBlcyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy9FdmVudFR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzRXZlbnRUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25zdGFudHNFdmVudFR5cGVzKTtcblxudmFyIENsaWVudERhdGFTdG9yZUNsYXNzID0gKGZ1bmN0aW9uIChfQmFzZVN0b3JlKSB7XG4gIF9pbmhlcml0cyhDbGllbnREYXRhU3RvcmVDbGFzcywgX0Jhc2VTdG9yZSk7XG5cbiAgZnVuY3Rpb24gQ2xpZW50RGF0YVN0b3JlQ2xhc3MoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsaWVudERhdGFTdG9yZUNsYXNzKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKENsaWVudERhdGFTdG9yZUNsYXNzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBvbGxUcmFuc2ZlckRhdGFJRCA9IG51bGw7XG4gICAgdGhpcy50cmFuc2ZlclJhdGVzID0geyBkb3dubG9hZDogW10sIHVwbG9hZDogW10gfTtcbiAgICB0aGlzLnRyYW5zZmVyVG90YWxzID0geyBkb3dubG9hZDogbnVsbCwgdXBsb2FkOiBudWxsIH07XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ2xpZW50RGF0YVN0b3JlQ2xhc3MsIFt7XG4gICAga2V5OiAnZmV0Y2hUcmFuc2ZlckRhdGEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmZXRjaFRyYW5zZmVyRGF0YSgpIHtcbiAgICAgIF9hY3Rpb25zQ2xpZW50QWN0aW9uczJbJ2RlZmF1bHQnXS5mZXRjaFRyYW5zZmVyRGF0YSgpO1xuXG4gICAgICBpZiAodGhpcy5wb2xsVHJhbnNmZXJEYXRhSUQgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zdGFydFBvbGxpbmdUcmFuc2ZlckRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRUcmFuc2ZlclRvdGFscycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRyYW5zZmVyVG90YWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNmZXJUb3RhbHM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0VHJhbnNmZXJSYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHJhbnNmZXJSYXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNmZXJSYXRlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFRyYW5zZmVyUmF0ZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUcmFuc2ZlclJhdGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNmZXJSYXRlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVUcmFuc2ZlckRhdGFTdWNjZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVHJhbnNmZXJEYXRhU3VjY2Vzcyh0cmFuc2ZlckRhdGEpIHtcbiAgICAgIHRoaXMudHJhbnNmZXJUb3RhbHMgPSB7XG4gICAgICAgIGRvd25sb2FkOiB0cmFuc2ZlckRhdGEuZG93bmxvYWRUb3RhbCxcbiAgICAgICAgdXBsb2FkOiB0cmFuc2ZlckRhdGEudXBsb2FkVG90YWxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudHJhbnNmZXJSYXRlID0ge1xuICAgICAgICBkb3dubG9hZDogdHJhbnNmZXJEYXRhLmRvd25sb2FkUmF0ZSxcbiAgICAgICAgdXBsb2FkOiB0cmFuc2ZlckRhdGEudXBsb2FkUmF0ZVxuICAgICAgfTtcblxuICAgICAgLy8gYWRkIHRoZSBsYXRlc3QgZG93bmxvYWQgJiB1cGxvYWQgcmF0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkgYW5kIHJlbW92ZVxuICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGFycmF5LiBpZiB0aGUgYXJyYXlzIGFyZSBlbXB0eSwgZmlsbCBpbiB6ZXJvc1xuICAgICAgLy8gZm9yIHRoZSBmaXJzdCBuIGVudHJpZXMuXG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIGRvd25sb2FkUmF0ZUhpc3RvcnkgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLnRyYW5zZmVyUmF0ZXMuZG93bmxvYWQpO1xuICAgICAgdmFyIHVwbG9hZFJhdGVIaXN0b3J5ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy50cmFuc2ZlclJhdGVzLnVwbG9hZCk7XG5cbiAgICAgIGlmICh1cGxvYWRSYXRlSGlzdG9yeS5sZW5ndGggPT09IF9jb25maWdDb25maWcyWydkZWZhdWx0J10ubWF4SGlzdG9yeVN0YXRlcykge1xuICAgICAgICBkb3dubG9hZFJhdGVIaXN0b3J5LnNoaWZ0KCk7XG4gICAgICAgIHVwbG9hZFJhdGVIaXN0b3J5LnNoaWZ0KCk7XG4gICAgICAgIGRvd25sb2FkUmF0ZUhpc3RvcnkucHVzaChwYXJzZUludCh0cmFuc2ZlckRhdGEuZG93bmxvYWRSYXRlKSk7XG4gICAgICAgIHVwbG9hZFJhdGVIaXN0b3J5LnB1c2gocGFyc2VJbnQodHJhbnNmZXJEYXRhLnVwbG9hZFJhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IF9jb25maWdDb25maWcyWydkZWZhdWx0J10ubWF4SGlzdG9yeVN0YXRlcykge1xuICAgICAgICAgIGlmIChpbmRleCA8IF9jb25maWdDb25maWcyWydkZWZhdWx0J10ubWF4SGlzdG9yeVN0YXRlcyAtIDEpIHtcbiAgICAgICAgICAgIHVwbG9hZFJhdGVIaXN0b3J5W2luZGV4XSA9IDA7XG4gICAgICAgICAgICBkb3dubG9hZFJhdGVIaXN0b3J5W2luZGV4XSA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvd25sb2FkUmF0ZUhpc3RvcnlbaW5kZXhdID0gcGFyc2VJbnQodHJhbnNmZXJEYXRhLmRvd25sb2FkUmF0ZSk7XG4gICAgICAgICAgICB1cGxvYWRSYXRlSGlzdG9yeVtpbmRleF0gPSBwYXJzZUludCh0cmFuc2ZlckRhdGEudXBsb2FkUmF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy50cmFuc2ZlclJhdGVzID0ge1xuICAgICAgICBkb3dubG9hZDogZG93bmxvYWRSYXRlSGlzdG9yeSxcbiAgICAgICAgdXBsb2FkOiB1cGxvYWRSYXRlSGlzdG9yeVxuICAgICAgfTtcblxuICAgICAgdGhpcy5lbWl0KF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UUkFOU0ZFUl9EQVRBX1JFUVVFU1RfU1VDQ0VTUyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVHJhbnNmZXJEYXRhRXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUcmFuc2ZlckRhdGFFcnJvcigpIHtcbiAgICAgIHRoaXMuZW1pdChfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVFJBTlNGRVJfREFUQV9SRVFVRVNUX0VSUk9SKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdGFydFBvbGxpbmdUcmFuc2ZlckRhdGEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydFBvbGxpbmdUcmFuc2ZlckRhdGEoKSB7XG4gICAgICB0aGlzLnBvbGxUcmFuc2ZlckRhdGFJRCA9IHNldEludGVydmFsKHRoaXMuZmV0Y2hUcmFuc2ZlckRhdGEuYmluZCh0aGlzKSwgX2NvbmZpZ0NvbmZpZzJbJ2RlZmF1bHQnXS5wb2xsSW50ZXJ2YWwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3N0YXJ0UG9sbGluZ1RvcnJlbnRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRQb2xsaW5nVG9ycmVudHMoKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucG9sbFRyYW5zZmVyRGF0YUlEKTtcbiAgICAgIHRoaXMucG9sbFRyYW5zZmVyRGF0YUlEID0gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdG9wUG9sbGluZ1RvcnJlbnREZXRhaWxzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcFBvbGxpbmdUb3JyZW50RGV0YWlscygpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVG9ycmVudERldGFpbHNJbnRlcnZhbElEKTtcbiAgICAgIHRoaXMuaXNQb2xsaW5nVG9ycmVudHMgPSBmYWxzZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ2xpZW50RGF0YVN0b3JlQ2xhc3M7XG59KShfQmFzZVN0b3JlM1snZGVmYXVsdCddKTtcblxudmFyIENsaWVudERhdGFTdG9yZSA9IG5ldyBDbGllbnREYXRhU3RvcmVDbGFzcygpO1xuXG5fZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyWydkZWZhdWx0J10ucmVnaXN0ZXIoZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgdmFyIGFjdGlvbiA9IHBheWxvYWQuYWN0aW9uO1xuICB2YXIgc291cmNlID0gcGF5bG9hZC5zb3VyY2U7XG5cbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9GRVRDSF9UUkFOU0ZFUl9EQVRBX1NVQ0NFU1M6XG4gICAgICBDbGllbnREYXRhU3RvcmUuaGFuZGxlVHJhbnNmZXJEYXRhU3VjY2VzcyhhY3Rpb24uZGF0YS50cmFuc2ZlckRhdGEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBfY29uc3RhbnRzQWN0aW9uVHlwZXMyWydkZWZhdWx0J10uQ0xJRU5UX0ZFVENIX1RSQU5TRkVSX0RBVEFfRVJST1I6XG4gICAgICBDbGllbnREYXRhU3RvcmUuaGFuZGxlVHJhbnNmZXJEYXRhRXJyb3IoYWN0aW9uLmRhdGEuZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gIH1cbn0pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBDbGllbnREYXRhU3RvcmU7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL3N0b3Jlcy9DbGllbnREYXRhU3RvcmUuanNcbiAqKiBtb2R1bGUgaWQgPSAyMTFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 212 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar format = {\n\n eta: function eta(_eta) {\n if (_eta === 'Infinity') {\n return '∞';\n } else if (_eta.years > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.years,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'yr'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.weeks,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'wk'\n )\n )\n );\n } else if (_eta.weeks > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.weeks,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'wk'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.days,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'd'\n )\n )\n );\n } else if (_eta.days > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.days,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'd'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.hours,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'hr'\n )\n )\n );\n } else if (_eta.hours > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.hours,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'hr'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.minutes,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'm'\n )\n )\n );\n } else if (_eta.minutes > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.minutes,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'm'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.seconds,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 's'\n )\n )\n );\n } else {\n return _react2['default'].createElement(\n 'span',\n null,\n _eta.seconds,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 's'\n )\n );\n }\n },\n\n data: function data(bytes, extraUnits, precision) {\n precision = precision || 2;\n\n var kilobyte = 1024,\n megabyte = kilobyte * 1024,\n gigabyte = megabyte * 1024,\n terabyte = gigabyte * 1024,\n value = '',\n unit = '';\n\n if (bytes >= 0 && bytes < kilobyte) {\n value = bytes;\n unit = 'B';\n } else if (bytes >= kilobyte && bytes < megabyte) {\n value = (bytes / kilobyte).toFixed(precision);\n unit = 'kB';\n } else if (bytes >= megabyte && bytes < gigabyte) {\n value = (bytes / megabyte).toFixed(precision);\n unit = 'MB';\n } else if (bytes >= gigabyte && bytes < terabyte) {\n value = (bytes / gigabyte).toFixed(precision);\n unit = 'GB';\n } else if (bytes >= terabyte) {\n value = (bytes / terabyte).toFixed(precision);\n unit = 'TB';\n } else {\n value = bytes;\n unit = 'B';\n }\n\n if (extraUnits) {\n unit += extraUnits;\n }\n\n return {\n value: value,\n unit: unit\n };\n },\n\n ratio: function ratio(_ratio) {\n _ratio = _ratio / 1000;\n var precision = 1;\n\n if (_ratio < 10) {\n precision = 2;\n } else if (_ratio < 100) {\n precision = 0;\n }\n\n return _ratio.toFixed(precision);\n }\n\n};\n\nexports['default'] = format;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9mb3JtYXREYXRhLmpzP2YyY2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUNBQXlDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUNBQXlDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUNBQXlDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgZm9ybWF0ID0ge1xuXG4gIGV0YTogZnVuY3Rpb24gZXRhKF9ldGEpIHtcbiAgICBpZiAoX2V0YSA9PT0gJ0luZmluaXR5Jykge1xuICAgICAgcmV0dXJuICfiiJ4nO1xuICAgIH0gZWxzZSBpZiAoX2V0YS55ZWFycyA+IDApIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICBudWxsLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEueWVhcnMsXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgJ3lyJ1xuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2VnbWVudCcgfSxcbiAgICAgICAgICBfZXRhLndlZWtzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICd3aydcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChfZXRhLndlZWtzID4gMCkge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIG51bGwsXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlZ21lbnQnIH0sXG4gICAgICAgICAgX2V0YS53ZWVrcyxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAnd2snXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEuZGF5cyxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAnZCdcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChfZXRhLmRheXMgPiAwKSB7XG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2VnbWVudCcgfSxcbiAgICAgICAgICBfZXRhLmRheXMsXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgJ2QnXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEuaG91cnMsXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgJ2hyJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKF9ldGEuaG91cnMgPiAwKSB7XG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2VnbWVudCcgfSxcbiAgICAgICAgICBfZXRhLmhvdXJzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICdocidcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlZ21lbnQnIH0sXG4gICAgICAgICAgX2V0YS5taW51dGVzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICdtJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKF9ldGEubWludXRlcyA+IDApIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICBudWxsLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEubWludXRlcyxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAnbSdcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlZ21lbnQnIH0sXG4gICAgICAgICAgX2V0YS5zZWNvbmRzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICdzJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIG51bGwsXG4gICAgICAgIF9ldGEuc2Vjb25kcyxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2VtJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgJ3MnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoYnl0ZXMsIGV4dHJhVW5pdHMsIHByZWNpc2lvbikge1xuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiB8fCAyO1xuXG4gICAgdmFyIGtpbG9ieXRlID0gMTAyNCxcbiAgICAgICAgbWVnYWJ5dGUgPSBraWxvYnl0ZSAqIDEwMjQsXG4gICAgICAgIGdpZ2FieXRlID0gbWVnYWJ5dGUgKiAxMDI0LFxuICAgICAgICB0ZXJhYnl0ZSA9IGdpZ2FieXRlICogMTAyNCxcbiAgICAgICAgdmFsdWUgPSAnJyxcbiAgICAgICAgdW5pdCA9ICcnO1xuXG4gICAgaWYgKGJ5dGVzID49IDAgJiYgYnl0ZXMgPCBraWxvYnl0ZSkge1xuICAgICAgdmFsdWUgPSBieXRlcztcbiAgICAgIHVuaXQgPSAnQic7XG4gICAgfSBlbHNlIGlmIChieXRlcyA+PSBraWxvYnl0ZSAmJiBieXRlcyA8IG1lZ2FieXRlKSB7XG4gICAgICB2YWx1ZSA9IChieXRlcyAvIGtpbG9ieXRlKS50b0ZpeGVkKHByZWNpc2lvbik7XG4gICAgICB1bml0ID0gJ2tCJztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzID49IG1lZ2FieXRlICYmIGJ5dGVzIDwgZ2lnYWJ5dGUpIHtcbiAgICAgIHZhbHVlID0gKGJ5dGVzIC8gbWVnYWJ5dGUpLnRvRml4ZWQocHJlY2lzaW9uKTtcbiAgICAgIHVuaXQgPSAnTUInO1xuICAgIH0gZWxzZSBpZiAoYnl0ZXMgPj0gZ2lnYWJ5dGUgJiYgYnl0ZXMgPCB0ZXJhYnl0ZSkge1xuICAgICAgdmFsdWUgPSAoYnl0ZXMgLyBnaWdhYnl0ZSkudG9GaXhlZChwcmVjaXNpb24pO1xuICAgICAgdW5pdCA9ICdHQic7XG4gICAgfSBlbHNlIGlmIChieXRlcyA+PSB0ZXJhYnl0ZSkge1xuICAgICAgdmFsdWUgPSAoYnl0ZXMgLyB0ZXJhYnl0ZSkudG9GaXhlZChwcmVjaXNpb24pO1xuICAgICAgdW5pdCA9ICdUQic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gYnl0ZXM7XG4gICAgICB1bml0ID0gJ0InO1xuICAgIH1cblxuICAgIGlmIChleHRyYVVuaXRzKSB7XG4gICAgICB1bml0ICs9IGV4dHJhVW5pdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHVuaXQ6IHVuaXRcbiAgICB9O1xuICB9LFxuXG4gIHJhdGlvOiBmdW5jdGlvbiByYXRpbyhfcmF0aW8pIHtcbiAgICBfcmF0aW8gPSBfcmF0aW8gLyAxMDAwO1xuICAgIHZhciBwcmVjaXNpb24gPSAxO1xuXG4gICAgaWYgKF9yYXRpbyA8IDEwKSB7XG4gICAgICBwcmVjaXNpb24gPSAyO1xuICAgIH0gZWxzZSBpZiAoX3JhdGlvIDwgMTAwKSB7XG4gICAgICBwcmVjaXNpb24gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBfcmF0aW8udG9GaXhlZChwcmVjaXNpb24pO1xuICB9XG5cbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZvcm1hdDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9mb3JtYXREYXRhLmpzXG4gKiogbW9kdWxlIGlkID0gMjEyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _axios = __webpack_require__(180);\n\nvar _axios2 = _interopRequireDefault(_axios);\n\nvar _dispatcherAppDispatcher = __webpack_require__(174);\n\nvar _dispatcherAppDispatcher2 = _interopRequireDefault(_dispatcherAppDispatcher);\n\nvar _constantsActionTypes = __webpack_require__(178);\n\nvar _constantsActionTypes2 = _interopRequireDefault(_constantsActionTypes);\n\nvar ClientActions = {\n fetchTransferData: function fetchTransferData() {\n return _axios2['default'].get('/client/stats').then(function () {\n var json = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n return json.data;\n }).then(function (transferData) {\n _dispatcherAppDispatcher2['default'].dispatchServerAction({\n type: _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_SUCCESS,\n data: {\n transferData: transferData\n }\n });\n })['catch'](function (error) {\n _dispatcherAppDispatcher2['default'].dispatchServerAction({\n type: _constantsActionTypes2['default'].CLIENT_FETCH_TRANSFER_DATA_ERROR,\n data: {\n error: error\n }\n });\n });\n }\n};\n\nexports['default'] = ClientActions;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvYWN0aW9ucy9DbGllbnRBY3Rpb25zLmpzP2IwMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTs7QUFFekU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9heGlvcyA9IHJlcXVpcmUoJ2F4aW9zJyk7XG5cbnZhciBfYXhpb3MyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXhpb3MpO1xuXG52YXIgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9BcHBEaXNwYXRjaGVyJyk7XG5cbnZhciBfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzcGF0Y2hlckFwcERpc3BhdGNoZXIpO1xuXG52YXIgX2NvbnN0YW50c0FjdGlvblR5cGVzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzL0FjdGlvblR5cGVzJyk7XG5cbnZhciBfY29uc3RhbnRzQWN0aW9uVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzQWN0aW9uVHlwZXMpO1xuXG52YXIgQ2xpZW50QWN0aW9ucyA9IHtcbiAgZmV0Y2hUcmFuc2ZlckRhdGE6IGZ1bmN0aW9uIGZldGNoVHJhbnNmZXJEYXRhKCkge1xuICAgIHJldHVybiBfYXhpb3MyWydkZWZhdWx0J10uZ2V0KCcvY2xpZW50L3N0YXRzJykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIganNvbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXG4gICAgICByZXR1cm4ganNvbi5kYXRhO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRyYW5zZmVyRGF0YSkge1xuICAgICAgX2Rpc3BhdGNoZXJBcHBEaXNwYXRjaGVyMlsnZGVmYXVsdCddLmRpc3BhdGNoU2VydmVyQWN0aW9uKHtcbiAgICAgICAgdHlwZTogX2NvbnN0YW50c0FjdGlvblR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9GRVRDSF9UUkFOU0ZFUl9EQVRBX1NVQ0NFU1MsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0cmFuc2ZlckRhdGE6IHRyYW5zZmVyRGF0YVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KVsnY2F0Y2gnXShmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIF9kaXNwYXRjaGVyQXBwRGlzcGF0Y2hlcjJbJ2RlZmF1bHQnXS5kaXNwYXRjaFNlcnZlckFjdGlvbih7XG4gICAgICAgIHR5cGU6IF9jb25zdGFudHNBY3Rpb25UeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfRkVUQ0hfVFJBTlNGRVJfREFUQV9FUlJPUixcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gQ2xpZW50QWN0aW9ucztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvYWN0aW9ucy9DbGllbnRBY3Rpb25zLmpzXG4gKiogbW9kdWxlIGlkID0gMjEyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 213 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _d3 = __webpack_require__(214);\n\nvar _d32 = _interopRequireDefault(_d3);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar LineChart = (function (_React$Component) {\n _inherits(LineChart, _React$Component);\n\n function LineChart() {\n _classCallCheck(this, LineChart);\n\n _get(Object.getPrototypeOf(LineChart.prototype), 'constructor', this).call(this);\n }\n\n _createClass(LineChart, [{\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n var graph = _d32['default'].select('#' + this.props.id);\n var lineData = this.props.data;\n var margin = {\n bottom: 10,\n top: 10\n };\n var width = this.props.width;\n var height = this.props.height;\n\n var xRange = _d32['default'].scale.linear().range([0, width]).domain([_d32['default'].min(lineData, function (d, i) {\n return i;\n }), _d32['default'].max(lineData, function (d, i) {\n return i;\n })]);\n\n var yRange = _d32['default'].scale.linear().range([height - margin.bottom - margin.top, 0]).domain([_d32['default'].min(lineData, function (d) {\n return d;\n }), _d32['default'].max(lineData, function (d) {\n return d;\n })]);\n\n var lineFunc = _d32['default'].svg.line().x(function (d, i) {\n return xRange(i);\n }).y(function (d) {\n return yRange(d);\n }).interpolate('basis');\n\n var areaFunc = _d32['default'].svg.area().x(function (d, i) {\n return xRange(i);\n }).y0(height).y1(function (d) {\n return yRange(d);\n }).interpolate('basis');\n\n var points = lineFunc(lineData);\n var area = areaFunc(lineData);\n\n graph.select('g').remove();\n\n graph.append('g').append('svg:path').attr('class', 'graph--area').attr('d', area).attr('transform', 'translate(0,' + margin.top + ')');;\n\n graph.select('g').append('svg:path').attr('class', 'graph--line').attr('d', points).attr('transform', 'translate(0,' + margin.top + ')');\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'svg',\n { className: 'graph', id: this.props.id },\n _react2['default'].createElement(\n 'defs',\n null,\n _react2['default'].createElement(\n 'linearGradient',\n {\n id: this.props.slug + '--gradient',\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%' },\n _react2['default'].createElement('stop', { className: this.props.slug + '--gradient--top', offset: '0%' }),\n _react2['default'].createElement('stop', { className: this.props.slug + '--gradient--bottom', offset: '100%' })\n )\n )\n );\n }\n }]);\n\n return LineChart;\n})(_react2['default'].Component);\n\nexports['default'] = LineChart;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL0xpbmVDaGFydC5qcz8yMDY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHdDQUF3QztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixzREFBc0QsK0RBQStEO0FBQ3JILHNEQUFzRCxvRUFBb0U7QUFDMUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9kMyA9IHJlcXVpcmUoJ2QzJyk7XG5cbnZhciBfZDMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZDMpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBMaW5lQ2hhcnQgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKExpbmVDaGFydCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTGluZUNoYXJ0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaW5lQ2hhcnQpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoTGluZUNoYXJ0LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGluZUNoYXJ0LCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBncmFwaCA9IF9kMzJbJ2RlZmF1bHQnXS5zZWxlY3QoJyMnICsgdGhpcy5wcm9wcy5pZCk7XG4gICAgICB2YXIgbGluZURhdGEgPSB0aGlzLnByb3BzLmRhdGE7XG4gICAgICB2YXIgbWFyZ2luID0ge1xuICAgICAgICBib3R0b206IDEwLFxuICAgICAgICB0b3A6IDEwXG4gICAgICB9O1xuICAgICAgdmFyIHdpZHRoID0gdGhpcy5wcm9wcy53aWR0aDtcbiAgICAgIHZhciBoZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodDtcblxuICAgICAgdmFyIHhSYW5nZSA9IF9kMzJbJ2RlZmF1bHQnXS5zY2FsZS5saW5lYXIoKS5yYW5nZShbMCwgd2lkdGhdKS5kb21haW4oW19kMzJbJ2RlZmF1bHQnXS5taW4obGluZURhdGEsIGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfSksIF9kMzJbJ2RlZmF1bHQnXS5tYXgobGluZURhdGEsIGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfSldKTtcblxuICAgICAgdmFyIHlSYW5nZSA9IF9kMzJbJ2RlZmF1bHQnXS5zY2FsZS5saW5lYXIoKS5yYW5nZShbaGVpZ2h0IC0gbWFyZ2luLmJvdHRvbSAtIG1hcmdpbi50b3AsIDBdKS5kb21haW4oW19kMzJbJ2RlZmF1bHQnXS5taW4obGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSksIF9kMzJbJ2RlZmF1bHQnXS5tYXgobGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSldKTtcblxuICAgICAgdmFyIGxpbmVGdW5jID0gX2QzMlsnZGVmYXVsdCddLnN2Zy5saW5lKCkueChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICByZXR1cm4geFJhbmdlKGkpO1xuICAgICAgfSkueShmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4geVJhbmdlKGQpO1xuICAgICAgfSkuaW50ZXJwb2xhdGUoJ2Jhc2lzJyk7XG5cbiAgICAgIHZhciBhcmVhRnVuYyA9IF9kMzJbJ2RlZmF1bHQnXS5zdmcuYXJlYSgpLngoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgcmV0dXJuIHhSYW5nZShpKTtcbiAgICAgIH0pLnkwKGhlaWdodCkueTEoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgcmV0dXJuIHlSYW5nZShkKTtcbiAgICAgIH0pLmludGVycG9sYXRlKCdiYXNpcycpO1xuXG4gICAgICB2YXIgcG9pbnRzID0gbGluZUZ1bmMobGluZURhdGEpO1xuICAgICAgdmFyIGFyZWEgPSBhcmVhRnVuYyhsaW5lRGF0YSk7XG5cbiAgICAgIGdyYXBoLnNlbGVjdCgnZycpLnJlbW92ZSgpO1xuXG4gICAgICBncmFwaC5hcHBlbmQoJ2cnKS5hcHBlbmQoJ3N2ZzpwYXRoJykuYXR0cignY2xhc3MnLCAnZ3JhcGgtLWFyZWEnKS5hdHRyKCdkJywgYXJlYSkuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBtYXJnaW4udG9wICsgJyknKTs7XG5cbiAgICAgIGdyYXBoLnNlbGVjdCgnZycpLmFwcGVuZCgnc3ZnOnBhdGgnKS5hdHRyKCdjbGFzcycsICdncmFwaC0tbGluZScpLmF0dHIoJ2QnLCBwb2ludHMpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgbWFyZ2luLnRvcCArICcpJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3ZnJyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdncmFwaCcsIGlkOiB0aGlzLnByb3BzLmlkIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkZWZzJyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpbmVhckdyYWRpZW50JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuc2x1ZyArICctLWdyYWRpZW50JyxcbiAgICAgICAgICAgICAgeDE6ICcwJScsXG4gICAgICAgICAgICAgIHkxOiAnMCUnLFxuICAgICAgICAgICAgICB4MjogJzAlJyxcbiAgICAgICAgICAgICAgeTI6ICcxMDAlJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoJ3N0b3AnLCB7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy5zbHVnICsgJy0tZ3JhZGllbnQtLXRvcCcsIG9mZnNldDogJzAlJyB9KSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdzdG9wJywgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMuc2x1ZyArICctLWdyYWRpZW50LS1ib3R0b20nLCBvZmZzZXQ6ICcxMDAlJyB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGluZUNoYXJ0O1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IExpbmVDaGFydDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL0xpbmVDaGFydC5qc1xuICoqIG1vZHVsZSBpZCA9IDIxM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar format = {\n\n eta: function eta(_eta) {\n if (_eta === 'Infinity') {\n return '∞';\n } else if (_eta.years > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.years,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'yr'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.weeks,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'wk'\n )\n )\n );\n } else if (_eta.weeks > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.weeks,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'wk'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.days,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'd'\n )\n )\n );\n } else if (_eta.days > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.days,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'd'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.hours,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'hr'\n )\n )\n );\n } else if (_eta.hours > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.hours,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'hr'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.minutes,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'm'\n )\n )\n );\n } else if (_eta.minutes > 0) {\n return _react2['default'].createElement(\n 'span',\n null,\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.minutes,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 'm'\n )\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details--segment' },\n _eta.seconds,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 's'\n )\n )\n );\n } else {\n return _react2['default'].createElement(\n 'span',\n null,\n _eta.seconds,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n 's'\n )\n );\n }\n },\n\n data: function data(bytes, extraUnits, precision) {\n precision = precision || 2;\n\n var kilobyte = 1024,\n megabyte = kilobyte * 1024,\n gigabyte = megabyte * 1024,\n terabyte = gigabyte * 1024,\n value = '',\n unit = '';\n\n if (bytes >= 0 && bytes < kilobyte) {\n value = bytes;\n unit = 'B';\n } else if (bytes >= kilobyte && bytes < megabyte) {\n value = (bytes / kilobyte).toFixed(precision);\n unit = 'kB';\n } else if (bytes >= megabyte && bytes < gigabyte) {\n value = (bytes / megabyte).toFixed(precision);\n unit = 'MB';\n } else if (bytes >= gigabyte && bytes < terabyte) {\n value = (bytes / gigabyte).toFixed(precision);\n unit = 'GB';\n } else if (bytes >= terabyte) {\n value = (bytes / terabyte).toFixed(precision);\n unit = 'TB';\n } else {\n value = bytes;\n unit = 'B';\n }\n\n if (extraUnits) {\n unit += extraUnits;\n }\n\n return {\n value: value,\n unit: unit\n };\n },\n\n ratio: function ratio(_ratio) {\n _ratio = _ratio / 1000;\n var precision = 1;\n\n if (_ratio < 10) {\n precision = 2;\n } else if (_ratio < 100) {\n precision = 0;\n }\n\n return _ratio.toFixed(precision);\n }\n\n};\n\nexports['default'] = format;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9mb3JtYXREYXRhLmpzP2YyY2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUNBQXlDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUNBQXlDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUNBQXlDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgZm9ybWF0ID0ge1xuXG4gIGV0YTogZnVuY3Rpb24gZXRhKF9ldGEpIHtcbiAgICBpZiAoX2V0YSA9PT0gJ0luZmluaXR5Jykge1xuICAgICAgcmV0dXJuICfiiJ4nO1xuICAgIH0gZWxzZSBpZiAoX2V0YS55ZWFycyA+IDApIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICBudWxsLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEueWVhcnMsXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgJ3lyJ1xuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2VnbWVudCcgfSxcbiAgICAgICAgICBfZXRhLndlZWtzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICd3aydcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChfZXRhLndlZWtzID4gMCkge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIG51bGwsXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlZ21lbnQnIH0sXG4gICAgICAgICAgX2V0YS53ZWVrcyxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAnd2snXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEuZGF5cyxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAnZCdcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChfZXRhLmRheXMgPiAwKSB7XG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2VnbWVudCcgfSxcbiAgICAgICAgICBfZXRhLmRheXMsXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgJ2QnXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEuaG91cnMsXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgJ2hyJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKF9ldGEuaG91cnMgPiAwKSB7XG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2VnbWVudCcgfSxcbiAgICAgICAgICBfZXRhLmhvdXJzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICdocidcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlZ21lbnQnIH0sXG4gICAgICAgICAgX2V0YS5taW51dGVzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICdtJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKF9ldGEubWludXRlcyA+IDApIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICBudWxsLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zZWdtZW50JyB9LFxuICAgICAgICAgIF9ldGEubWludXRlcyxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAnbSdcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlZ21lbnQnIH0sXG4gICAgICAgICAgX2V0YS5zZWNvbmRzLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICdzJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIG51bGwsXG4gICAgICAgIF9ldGEuc2Vjb25kcyxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2VtJyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgJ3MnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoYnl0ZXMsIGV4dHJhVW5pdHMsIHByZWNpc2lvbikge1xuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiB8fCAyO1xuXG4gICAgdmFyIGtpbG9ieXRlID0gMTAyNCxcbiAgICAgICAgbWVnYWJ5dGUgPSBraWxvYnl0ZSAqIDEwMjQsXG4gICAgICAgIGdpZ2FieXRlID0gbWVnYWJ5dGUgKiAxMDI0LFxuICAgICAgICB0ZXJhYnl0ZSA9IGdpZ2FieXRlICogMTAyNCxcbiAgICAgICAgdmFsdWUgPSAnJyxcbiAgICAgICAgdW5pdCA9ICcnO1xuXG4gICAgaWYgKGJ5dGVzID49IDAgJiYgYnl0ZXMgPCBraWxvYnl0ZSkge1xuICAgICAgdmFsdWUgPSBieXRlcztcbiAgICAgIHVuaXQgPSAnQic7XG4gICAgfSBlbHNlIGlmIChieXRlcyA+PSBraWxvYnl0ZSAmJiBieXRlcyA8IG1lZ2FieXRlKSB7XG4gICAgICB2YWx1ZSA9IChieXRlcyAvIGtpbG9ieXRlKS50b0ZpeGVkKHByZWNpc2lvbik7XG4gICAgICB1bml0ID0gJ2tCJztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzID49IG1lZ2FieXRlICYmIGJ5dGVzIDwgZ2lnYWJ5dGUpIHtcbiAgICAgIHZhbHVlID0gKGJ5dGVzIC8gbWVnYWJ5dGUpLnRvRml4ZWQocHJlY2lzaW9uKTtcbiAgICAgIHVuaXQgPSAnTUInO1xuICAgIH0gZWxzZSBpZiAoYnl0ZXMgPj0gZ2lnYWJ5dGUgJiYgYnl0ZXMgPCB0ZXJhYnl0ZSkge1xuICAgICAgdmFsdWUgPSAoYnl0ZXMgLyBnaWdhYnl0ZSkudG9GaXhlZChwcmVjaXNpb24pO1xuICAgICAgdW5pdCA9ICdHQic7XG4gICAgfSBlbHNlIGlmIChieXRlcyA+PSB0ZXJhYnl0ZSkge1xuICAgICAgdmFsdWUgPSAoYnl0ZXMgLyB0ZXJhYnl0ZSkudG9GaXhlZChwcmVjaXNpb24pO1xuICAgICAgdW5pdCA9ICdUQic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gYnl0ZXM7XG4gICAgICB1bml0ID0gJ0InO1xuICAgIH1cblxuICAgIGlmIChleHRyYVVuaXRzKSB7XG4gICAgICB1bml0ICs9IGV4dHJhVW5pdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHVuaXQ6IHVuaXRcbiAgICB9O1xuICB9LFxuXG4gIHJhdGlvOiBmdW5jdGlvbiByYXRpbyhfcmF0aW8pIHtcbiAgICBfcmF0aW8gPSBfcmF0aW8gLyAxMDAwO1xuICAgIHZhciBwcmVjaXNpb24gPSAxO1xuXG4gICAgaWYgKF9yYXRpbyA8IDEwKSB7XG4gICAgICBwcmVjaXNpb24gPSAyO1xuICAgIH0gZWxzZSBpZiAoX3JhdGlvIDwgMTAwKSB7XG4gICAgICBwcmVjaXNpb24gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBfcmF0aW8udG9GaXhlZChwcmVjaXNpb24pO1xuICB9XG5cbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZvcm1hdDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvdXRpbC9mb3JtYXREYXRhLmpzXG4gKiogbW9kdWxlIGlkID0gMjEzXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 214 */ /***/ function(module, exports, __webpack_require__) { - eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\"use strict\";!(function(){var d3={version:\"3.5.7\"};var d3_arraySlice=[].slice,d3_array=function d3_array(list){return d3_arraySlice.call(list);};var d3_document=this.document;function d3_documentElement(node){return node && (node.ownerDocument || node.document || node).documentElement;}function d3_window(node){return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);}if(d3_document){try{d3_array(d3_document.documentElement.childNodes)[0].nodeType;}catch(e) {d3_array = function(list){var i=list.length,array=new Array(i);while(i--) array[i] = list[i];return array;};}}if(!Date.now)Date.now = function(){return +new Date();};if(d3_document){try{d3_document.createElement(\"DIV\").style.setProperty(\"opacity\",0,\"\");}catch(error) {var d3_element_prototype=this.Element.prototype,d3_element_setAttribute=d3_element_prototype.setAttribute,d3_element_setAttributeNS=d3_element_prototype.setAttributeNS,d3_style_prototype=this.CSSStyleDeclaration.prototype,d3_style_setProperty=d3_style_prototype.setProperty;d3_element_prototype.setAttribute = function(name,value){d3_element_setAttribute.call(this,name,value + \"\");};d3_element_prototype.setAttributeNS = function(space,local,value){d3_element_setAttributeNS.call(this,space,local,value + \"\");};d3_style_prototype.setProperty = function(name,value,priority){d3_style_setProperty.call(this,name,value + \"\",priority);};}}d3.ascending = d3_ascending;function d3_ascending(a,b){return a < b?-1:a > b?1:a >= b?0:NaN;}d3.descending = function(a,b){return b < a?-1:b > a?1:b >= a?0:NaN;};d3.min = function(array,f){var i=-1,n=array.length,a,b;if(arguments.length === 1){while(++i < n) if((b = array[i]) != null && b >= b){a = b;break;}while(++i < n) if((b = array[i]) != null && a > b)a = b;}else {while(++i < n) if((b = f.call(array,array[i],i)) != null && b >= b){a = b;break;}while(++i < n) if((b = f.call(array,array[i],i)) != null && a > b)a = b;}return a;};d3.max = function(array,f){var i=-1,n=array.length,a,b;if(arguments.length === 1){while(++i < n) if((b = array[i]) != null && b >= b){a = b;break;}while(++i < n) if((b = array[i]) != null && b > a)a = b;}else {while(++i < n) if((b = f.call(array,array[i],i)) != null && b >= b){a = b;break;}while(++i < n) if((b = f.call(array,array[i],i)) != null && b > a)a = b;}return a;};d3.extent = function(array,f){var i=-1,n=array.length,a,b,c;if(arguments.length === 1){while(++i < n) if((b = array[i]) != null && b >= b){a = c = b;break;}while(++i < n) if((b = array[i]) != null){if(a > b)a = b;if(c < b)c = b;}}else {while(++i < n) if((b = f.call(array,array[i],i)) != null && b >= b){a = c = b;break;}while(++i < n) if((b = f.call(array,array[i],i)) != null){if(a > b)a = b;if(c < b)c = b;}}return [a,c];};function d3_number(x){return x === null?NaN:+x;}function d3_numeric(x){return !isNaN(x);}d3.sum = function(array,f){var s=0,n=array.length,a,i=-1;if(arguments.length === 1){while(++i < n) if(d3_numeric(a = +array[i]))s += a;}else {while(++i < n) if(d3_numeric(a = +f.call(array,array[i],i)))s += a;}return s;};d3.mean = function(array,f){var s=0,n=array.length,a,i=-1,j=n;if(arguments.length === 1){while(++i < n) if(d3_numeric(a = d3_number(array[i])))s += a;else --j;}else {while(++i < n) if(d3_numeric(a = d3_number(f.call(array,array[i],i))))s += a;else --j;}if(j)return s / j;};d3.quantile = function(values,p){var H=(values.length - 1) * p + 1,h=Math.floor(H),v=+values[h - 1],e=H - h;return e?v + e * (values[h] - v):v;};d3.median = function(array,f){var numbers=[],n=array.length,a,i=-1;if(arguments.length === 1){while(++i < n) if(d3_numeric(a = d3_number(array[i])))numbers.push(a);}else {while(++i < n) if(d3_numeric(a = d3_number(f.call(array,array[i],i))))numbers.push(a);}if(numbers.length)return d3.quantile(numbers.sort(d3_ascending),.5);};d3.variance = function(array,f){var n=array.length,m=0,a,d,s=0,i=-1,j=0;if(arguments.length === 1){while(++i < n) {if(d3_numeric(a = d3_number(array[i]))){d = a - m;m += d / ++j;s += d * (a - m);}}}else {while(++i < n) {if(d3_numeric(a = d3_number(f.call(array,array[i],i)))){d = a - m;m += d / ++j;s += d * (a - m);}}}if(j > 1)return s / (j - 1);};d3.deviation = function(){var v=d3.variance.apply(this,arguments);return v?Math.sqrt(v):v;};function d3_bisector(compare){return {left:function left(a,x,lo,hi){if(arguments.length < 3)lo = 0;if(arguments.length < 4)hi = a.length;while(lo < hi) {var mid=lo + hi >>> 1;if(compare(a[mid],x) < 0)lo = mid + 1;else hi = mid;}return lo;},right:function right(a,x,lo,hi){if(arguments.length < 3)lo = 0;if(arguments.length < 4)hi = a.length;while(lo < hi) {var mid=lo + hi >>> 1;if(compare(a[mid],x) > 0)hi = mid;else lo = mid + 1;}return lo;}};}var d3_bisect=d3_bisector(d3_ascending);d3.bisectLeft = d3_bisect.left;d3.bisect = d3.bisectRight = d3_bisect.right;d3.bisector = function(f){return d3_bisector(f.length === 1?function(d,x){return d3_ascending(f(d),x);}:f);};d3.shuffle = function(array,i0,i1){if((m = arguments.length) < 3){i1 = array.length;if(m < 2)i0 = 0;}var m=i1 - i0,t,i;while(m) {i = Math.random() * m-- | 0;t = array[m + i0],array[m + i0] = array[i + i0],array[i + i0] = t;}return array;};d3.permute = function(array,indexes){var i=indexes.length,permutes=new Array(i);while(i--) permutes[i] = array[indexes[i]];return permutes;};d3.pairs = function(array){var i=0,n=array.length - 1,p0,p1=array[0],pairs=new Array(n < 0?0:n);while(i < n) pairs[i] = [p0 = p1,p1 = array[++i]];return pairs;};d3.zip = function(){if(!(n = arguments.length))return [];for(var i=-1,m=d3.min(arguments,d3_zipLength),zips=new Array(m);++i < m;) {for(var j=-1,n,zip=zips[i] = new Array(n);++j < n;) {zip[j] = arguments[j][i];}}return zips;};function d3_zipLength(d){return d.length;}d3.transpose = function(matrix){return d3.zip.apply(d3,matrix);};d3.keys = function(map){var keys=[];for(var key in map) keys.push(key);return keys;};d3.values = function(map){var values=[];for(var key in map) values.push(map[key]);return values;};d3.entries = function(map){var entries=[];for(var key in map) entries.push({key:key,value:map[key]});return entries;};d3.merge = function(arrays){var n=arrays.length,m,i=-1,j=0,merged,array;while(++i < n) j += arrays[i].length;merged = new Array(j);while(--n >= 0) {array = arrays[n];m = array.length;while(--m >= 0) {merged[--j] = array[m];}}return merged;};var abs=Math.abs;d3.range = function(start,stop,step){if(arguments.length < 3){step = 1;if(arguments.length < 2){stop = start;start = 0;}}if((stop - start) / step === Infinity)throw new Error(\"infinite range\");var range=[],k=d3_range_integerScale(abs(step)),i=-1,j;start *= k,stop *= k,step *= k;if(step < 0)while((j = start + step * ++i) > stop) range.push(j / k);else while((j = start + step * ++i) < stop) range.push(j / k);return range;};function d3_range_integerScale(x){var k=1;while(x * k % 1) k *= 10;return k;}function d3_class(ctor,properties){for(var key in properties) {Object.defineProperty(ctor.prototype,key,{value:properties[key],enumerable:false});}}d3.map = function(object,f){var map=new d3_Map();if(object instanceof d3_Map){object.forEach(function(key,value){map.set(key,value);});}else if(Array.isArray(object)){var i=-1,n=object.length,o;if(arguments.length === 1)while(++i < n) map.set(i,object[i]);else while(++i < n) map.set(f.call(object,o = object[i],i),o);}else {for(var key in object) map.set(key,object[key]);}return map;};function d3_Map(){this._ = Object.create(null);}var d3_map_proto=\"__proto__\",d3_map_zero=\"\\x00\";d3_class(d3_Map,{has:d3_map_has,get:function get(key){return this._[d3_map_escape(key)];},set:function set(key,value){return this._[d3_map_escape(key)] = value;},remove:d3_map_remove,keys:d3_map_keys,values:function values(){var values=[];for(var key in this._) values.push(this._[key]);return values;},entries:function entries(){var entries=[];for(var key in this._) entries.push({key:d3_map_unescape(key),value:this._[key]});return entries;},size:d3_map_size,empty:d3_map_empty,forEach:function forEach(f){for(var key in this._) f.call(this,d3_map_unescape(key),this._[key]);}});function d3_map_escape(key){return (key += \"\") === d3_map_proto || key[0] === d3_map_zero?d3_map_zero + key:key;}function d3_map_unescape(key){return (key += \"\")[0] === d3_map_zero?key.slice(1):key;}function d3_map_has(key){return d3_map_escape(key) in this._;}function d3_map_remove(key){return (key = d3_map_escape(key)) in this._ && delete this._[key];}function d3_map_keys(){var keys=[];for(var key in this._) keys.push(d3_map_unescape(key));return keys;}function d3_map_size(){var size=0;for(var key in this._) ++size;return size;}function d3_map_empty(){for(var key in this._) return false;return true;}d3.nest = function(){var nest={},keys=[],sortKeys=[],sortValues,rollup;function map(mapType,array,depth){if(depth >= keys.length)return rollup?rollup.call(nest,array):sortValues?array.sort(sortValues):array;var i=-1,n=array.length,key=keys[depth++],keyValue,object,setter,valuesByKey=new d3_Map(),values;while(++i < n) {if(values = valuesByKey.get(keyValue = key(object = array[i]))){values.push(object);}else {valuesByKey.set(keyValue,[object]);}}if(mapType){object = mapType();setter = function(keyValue,values){object.set(keyValue,map(mapType,values,depth));};}else {object = {};setter = function(keyValue,values){object[keyValue] = map(mapType,values,depth);};}valuesByKey.forEach(setter);return object;}function entries(map,depth){if(depth >= keys.length)return map;var array=[],sortKey=sortKeys[depth++];map.forEach(function(key,keyMap){array.push({key:key,values:entries(keyMap,depth)});});return sortKey?array.sort(function(a,b){return sortKey(a.key,b.key);}):array;}nest.map = function(array,mapType){return map(mapType,array,0);};nest.entries = function(array){return entries(map(d3.map,array,0),0);};nest.key = function(d){keys.push(d);return nest;};nest.sortKeys = function(order){sortKeys[keys.length - 1] = order;return nest;};nest.sortValues = function(order){sortValues = order;return nest;};nest.rollup = function(f){rollup = f;return nest;};return nest;};d3.set = function(array){var set=new d3_Set();if(array)for(var i=0,n=array.length;i < n;++i) set.add(array[i]);return set;};function d3_Set(){this._ = Object.create(null);}d3_class(d3_Set,{has:d3_map_has,add:function add(key){this._[d3_map_escape(key += \"\")] = true;return key;},remove:d3_map_remove,values:d3_map_keys,size:d3_map_size,empty:d3_map_empty,forEach:function forEach(f){for(var key in this._) f.call(this,d3_map_unescape(key));}});d3.behavior = {};function d3_identity(d){return d;}d3.rebind = function(target,source){var i=1,n=arguments.length,method;while(++i < n) target[method = arguments[i]] = d3_rebind(target,source,source[method]);return target;};function d3_rebind(target,source,method){return function(){var value=method.apply(source,arguments);return value === source?target:value;};}function d3_vendorSymbol(object,name){if(name in object)return name;name = name.charAt(0).toUpperCase() + name.slice(1);for(var i=0,n=d3_vendorPrefixes.length;i < n;++i) {var prefixName=d3_vendorPrefixes[i] + name;if(prefixName in object)return prefixName;}}var d3_vendorPrefixes=[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];function d3_noop(){}d3.dispatch = function(){var dispatch=new d3_dispatch(),i=-1,n=arguments.length;while(++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);return dispatch;};function d3_dispatch(){}d3_dispatch.prototype.on = function(type,listener){var i=type.indexOf(\".\"),name=\"\";if(i >= 0){name = type.slice(i + 1);type = type.slice(0,i);}if(type)return arguments.length < 2?this[type].on(name):this[type].on(name,listener);if(arguments.length === 2){if(listener == null)for(type in this) {if(this.hasOwnProperty(type))this[type].on(name,null);}return this;}};function d3_dispatch_event(dispatch){var listeners=[],listenerByName=new d3_Map();function event(){var z=listeners,i=-1,n=z.length,l;while(++i < n) if(l = z[i].on)l.apply(this,arguments);return dispatch;}event.on = function(name,listener){var l=listenerByName.get(name),i;if(arguments.length < 2)return l && l.on;if(l){l.on = null;listeners = listeners.slice(0,i = listeners.indexOf(l)).concat(listeners.slice(i + 1));listenerByName.remove(name);}if(listener)listeners.push(listenerByName.set(name,{on:listener}));return dispatch;};return event;}d3.event = null;function d3_eventPreventDefault(){d3.event.preventDefault();}function d3_eventSource(){var e=d3.event,s;while(s = e.sourceEvent) e = s;return e;}function d3_eventDispatch(target){var dispatch=new d3_dispatch(),i=0,n=arguments.length;while(++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);dispatch.of = function(thiz,argumentz){return function(e1){try{var e0=e1.sourceEvent = d3.event;e1.target = target;d3.event = e1;dispatch[e1.type].apply(thiz,argumentz);}finally {d3.event = e0;}};};return dispatch;}d3.requote = function(s){return s.replace(d3_requote_re,\"\\\\$&\");};var d3_requote_re=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;var d3_subclass=({}).__proto__?function(object,prototype){object.__proto__ = prototype;}:function(object,prototype){for(var property in prototype) object[property] = prototype[property];};function d3_selection(groups){d3_subclass(groups,d3_selectionPrototype);return groups;}var d3_select=function d3_select(s,n){return n.querySelector(s);},d3_selectAll=function d3_selectAll(s,n){return n.querySelectorAll(s);},_d3_selectMatches=function d3_selectMatches(n,s){var d3_selectMatcher=n.matches || n[d3_vendorSymbol(n,\"matchesSelector\")];_d3_selectMatches = function(n,s){return d3_selectMatcher.call(n,s);};return _d3_selectMatches(n,s);};if(typeof Sizzle === \"function\"){d3_select = function(s,n){return Sizzle(s,n)[0] || null;};d3_selectAll = Sizzle;_d3_selectMatches = Sizzle.matchesSelector;}d3.selection = function(){return d3.select(d3_document.documentElement);};var d3_selectionPrototype=d3.selection.prototype = [];d3_selectionPrototype.select = function(selector){var subgroups=[],subgroup,subnode,group,node;selector = d3_selection_selector(selector);for(var j=-1,m=this.length;++j < m;) {subgroups.push(subgroup = []);subgroup.parentNode = (group = this[j]).parentNode;for(var i=-1,n=group.length;++i < n;) {if(node = group[i]){subgroup.push(subnode = selector.call(node,node.__data__,i,j));if(subnode && \"__data__\" in node)subnode.__data__ = node.__data__;}else {subgroup.push(null);}}}return d3_selection(subgroups);};function d3_selection_selector(selector){return typeof selector === \"function\"?selector:function(){return d3_select(selector,this);};}d3_selectionPrototype.selectAll = function(selector){var subgroups=[],subgroup,node;selector = d3_selection_selectorAll(selector);for(var j=-1,m=this.length;++j < m;) {for(var group=this[j],i=-1,n=group.length;++i < n;) {if(node = group[i]){subgroups.push(subgroup = d3_array(selector.call(node,node.__data__,i,j)));subgroup.parentNode = node;}}}return d3_selection(subgroups);};function d3_selection_selectorAll(selector){return typeof selector === \"function\"?selector:function(){return d3_selectAll(selector,this);};}var d3_nsPrefix={svg:\"http://www.w3.org/2000/svg\",xhtml:\"http://www.w3.org/1999/xhtml\",xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};d3.ns = {prefix:d3_nsPrefix,qualify:function qualify(name){var i=name.indexOf(\":\"),prefix=name;if(i >= 0 && (prefix = name.slice(0,i)) !== \"xmlns\")name = name.slice(i + 1);return d3_nsPrefix.hasOwnProperty(prefix)?{space:d3_nsPrefix[prefix],local:name}:name;}};d3_selectionPrototype.attr = function(name,value){if(arguments.length < 2){if(typeof name === \"string\"){var node=this.node();name = d3.ns.qualify(name);return name.local?node.getAttributeNS(name.space,name.local):node.getAttribute(name);}for(value in name) this.each(d3_selection_attr(value,name[value]));return this;}return this.each(d3_selection_attr(name,value));};function d3_selection_attr(name,value){name = d3.ns.qualify(name);function attrNull(){this.removeAttribute(name);}function attrNullNS(){this.removeAttributeNS(name.space,name.local);}function attrConstant(){this.setAttribute(name,value);}function attrConstantNS(){this.setAttributeNS(name.space,name.local,value);}function attrFunction(){var x=value.apply(this,arguments);if(x == null)this.removeAttribute(name);else this.setAttribute(name,x);}function attrFunctionNS(){var x=value.apply(this,arguments);if(x == null)this.removeAttributeNS(name.space,name.local);else this.setAttributeNS(name.space,name.local,x);}return value == null?name.local?attrNullNS:attrNull:typeof value === \"function\"?name.local?attrFunctionNS:attrFunction:name.local?attrConstantNS:attrConstant;}function d3_collapse(s){return s.trim().replace(/\\s+/g,\" \");}d3_selectionPrototype.classed = function(name,value){if(arguments.length < 2){if(typeof name === \"string\"){var node=this.node(),n=(name = d3_selection_classes(name)).length,i=-1;if(value = node.classList){while(++i < n) if(!value.contains(name[i]))return false;}else {value = node.getAttribute(\"class\");while(++i < n) if(!d3_selection_classedRe(name[i]).test(value))return false;}return true;}for(value in name) this.each(d3_selection_classed(value,name[value]));return this;}return this.each(d3_selection_classed(name,value));};function d3_selection_classedRe(name){return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\",\"g\");}function d3_selection_classes(name){return (name + \"\").trim().split(/^|\\s+/);}function d3_selection_classed(name,value){name = d3_selection_classes(name).map(d3_selection_classedName);var n=name.length;function classedConstant(){var i=-1;while(++i < n) name[i](this,value);}function classedFunction(){var i=-1,x=value.apply(this,arguments);while(++i < n) name[i](this,x);}return typeof value === \"function\"?classedFunction:classedConstant;}function d3_selection_classedName(name){var re=d3_selection_classedRe(name);return function(node,value){if(c = node.classList)return value?c.add(name):c.remove(name);var c=node.getAttribute(\"class\") || \"\";if(value){re.lastIndex = 0;if(!re.test(c))node.setAttribute(\"class\",d3_collapse(c + \" \" + name));}else {node.setAttribute(\"class\",d3_collapse(c.replace(re,\" \")));}};}d3_selectionPrototype.style = function(name,value,priority){var n=arguments.length;if(n < 3){if(typeof name !== \"string\"){if(n < 2)value = \"\";for(priority in name) this.each(d3_selection_style(priority,name[priority],value));return this;}if(n < 2){var node=this.node();return d3_window(node).getComputedStyle(node,null).getPropertyValue(name);}priority = \"\";}return this.each(d3_selection_style(name,value,priority));};function d3_selection_style(name,value,priority){function styleNull(){this.style.removeProperty(name);}function styleConstant(){this.style.setProperty(name,value,priority);}function styleFunction(){var x=value.apply(this,arguments);if(x == null)this.style.removeProperty(name);else this.style.setProperty(name,x,priority);}return value == null?styleNull:typeof value === \"function\"?styleFunction:styleConstant;}d3_selectionPrototype.property = function(name,value){if(arguments.length < 2){if(typeof name === \"string\")return this.node()[name];for(value in name) this.each(d3_selection_property(value,name[value]));return this;}return this.each(d3_selection_property(name,value));};function d3_selection_property(name,value){function propertyNull(){delete this[name];}function propertyConstant(){this[name] = value;}function propertyFunction(){var x=value.apply(this,arguments);if(x == null)delete this[name];else this[name] = x;}return value == null?propertyNull:typeof value === \"function\"?propertyFunction:propertyConstant;}d3_selectionPrototype.text = function(value){return arguments.length?this.each(typeof value === \"function\"?function(){var v=value.apply(this,arguments);this.textContent = v == null?\"\":v;}:value == null?function(){this.textContent = \"\";}:function(){this.textContent = value;}):this.node().textContent;};d3_selectionPrototype.html = function(value){return arguments.length?this.each(typeof value === \"function\"?function(){var v=value.apply(this,arguments);this.innerHTML = v == null?\"\":v;}:value == null?function(){this.innerHTML = \"\";}:function(){this.innerHTML = value;}):this.node().innerHTML;};d3_selectionPrototype.append = function(name){name = d3_selection_creator(name);return this.select(function(){return this.appendChild(name.apply(this,arguments));});};function d3_selection_creator(name){function create(){var document=this.ownerDocument,namespace=this.namespaceURI;return namespace?document.createElementNS(namespace,name):document.createElement(name);}function createNS(){return this.ownerDocument.createElementNS(name.space,name.local);}return typeof name === \"function\"?name:(name = d3.ns.qualify(name)).local?createNS:create;}d3_selectionPrototype.insert = function(name,before){name = d3_selection_creator(name);before = d3_selection_selector(before);return this.select(function(){return this.insertBefore(name.apply(this,arguments),before.apply(this,arguments) || null);});};d3_selectionPrototype.remove = function(){return this.each(d3_selectionRemove);};function d3_selectionRemove(){var parent=this.parentNode;if(parent)parent.removeChild(this);}d3_selectionPrototype.data = function(value,key){var i=-1,n=this.length,group,node;if(!arguments.length){value = new Array(n = (group = this[0]).length);while(++i < n) {if(node = group[i]){value[i] = node.__data__;}}return value;}function bind(group,groupData){var i,n=group.length,m=groupData.length,n0=Math.min(n,m),updateNodes=new Array(m),enterNodes=new Array(m),exitNodes=new Array(n),node,nodeData;if(key){var nodeByKeyValue=new d3_Map(),keyValues=new Array(n),keyValue;for(i = -1;++i < n;) {if(node = group[i]){if(nodeByKeyValue.has(keyValue = key.call(node,node.__data__,i))){exitNodes[i] = node;}else {nodeByKeyValue.set(keyValue,node);}keyValues[i] = keyValue;}}for(i = -1;++i < m;) {if(!(node = nodeByKeyValue.get(keyValue = key.call(groupData,nodeData = groupData[i],i)))){enterNodes[i] = d3_selection_dataNode(nodeData);}else if(node !== true){updateNodes[i] = node;node.__data__ = nodeData;}nodeByKeyValue.set(keyValue,true);}for(i = -1;++i < n;) {if(i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true){exitNodes[i] = group[i];}}}else {for(i = -1;++i < n0;) {node = group[i];nodeData = groupData[i];if(node){node.__data__ = nodeData;updateNodes[i] = node;}else {enterNodes[i] = d3_selection_dataNode(nodeData);}}for(;i < m;++i) {enterNodes[i] = d3_selection_dataNode(groupData[i]);}for(;i < n;++i) {exitNodes[i] = group[i];}}enterNodes.update = updateNodes;enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;enter.push(enterNodes);update.push(updateNodes);exit.push(exitNodes);}var enter=d3_selection_enter([]),update=d3_selection([]),exit=d3_selection([]);if(typeof value === \"function\"){while(++i < n) {bind(group = this[i],value.call(group,group.parentNode.__data__,i));}}else {while(++i < n) {bind(group = this[i],value);}}update.enter = function(){return enter;};update.exit = function(){return exit;};return update;};function d3_selection_dataNode(data){return {__data__:data};}d3_selectionPrototype.datum = function(value){return arguments.length?this.property(\"__data__\",value):this.property(\"__data__\");};d3_selectionPrototype.filter = function(filter){var subgroups=[],subgroup,group,node;if(typeof filter !== \"function\")filter = d3_selection_filter(filter);for(var j=0,m=this.length;j < m;j++) {subgroups.push(subgroup = []);subgroup.parentNode = (group = this[j]).parentNode;for(var i=0,n=group.length;i < n;i++) {if((node = group[i]) && filter.call(node,node.__data__,i,j)){subgroup.push(node);}}}return d3_selection(subgroups);};function d3_selection_filter(selector){return function(){return _d3_selectMatches(this,selector);};}d3_selectionPrototype.order = function(){for(var j=-1,m=this.length;++j < m;) {for(var group=this[j],i=group.length - 1,next=group[i],node;--i >= 0;) {if(node = group[i]){if(next && next !== node.nextSibling)next.parentNode.insertBefore(node,next);next = node;}}}return this;};d3_selectionPrototype.sort = function(comparator){comparator = d3_selection_sortComparator.apply(this,arguments);for(var j=-1,m=this.length;++j < m;) this[j].sort(comparator);return this.order();};function d3_selection_sortComparator(comparator){if(!arguments.length)comparator = d3_ascending;return function(a,b){return a && b?comparator(a.__data__,b.__data__):!a - !b;};}d3_selectionPrototype.each = function(callback){return d3_selection_each(this,function(node,i,j){callback.call(node,node.__data__,i,j);});};function d3_selection_each(groups,callback){for(var j=0,m=groups.length;j < m;j++) {for(var group=groups[j],i=0,n=group.length,node;i < n;i++) {if(node = group[i])callback(node,i,j);}}return groups;}d3_selectionPrototype.call = function(callback){var args=d3_array(arguments);callback.apply(args[0] = this,args);return this;};d3_selectionPrototype.empty = function(){return !this.node();};d3_selectionPrototype.node = function(){for(var j=0,m=this.length;j < m;j++) {for(var group=this[j],i=0,n=group.length;i < n;i++) {var node=group[i];if(node)return node;}}return null;};d3_selectionPrototype.size = function(){var n=0;d3_selection_each(this,function(){++n;});return n;};function d3_selection_enter(selection){d3_subclass(selection,d3_selection_enterPrototype);return selection;}var d3_selection_enterPrototype=[];d3.selection.enter = d3_selection_enter;d3.selection.enter.prototype = d3_selection_enterPrototype;d3_selection_enterPrototype.append = d3_selectionPrototype.append;d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;d3_selection_enterPrototype.node = d3_selectionPrototype.node;d3_selection_enterPrototype.call = d3_selectionPrototype.call;d3_selection_enterPrototype.size = d3_selectionPrototype.size;d3_selection_enterPrototype.select = function(selector){var subgroups=[],subgroup,subnode,upgroup,group,node;for(var j=-1,m=this.length;++j < m;) {upgroup = (group = this[j]).update;subgroups.push(subgroup = []);subgroup.parentNode = group.parentNode;for(var i=-1,n=group.length;++i < n;) {if(node = group[i]){subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode,node.__data__,i,j));subnode.__data__ = node.__data__;}else {subgroup.push(null);}}}return d3_selection(subgroups);};d3_selection_enterPrototype.insert = function(name,before){if(arguments.length < 2)before = d3_selection_enterInsertBefore(this);return d3_selectionPrototype.insert.call(this,name,before);};function d3_selection_enterInsertBefore(enter){var i0,j0;return function(d,i,j){var group=enter[j].update,n=group.length,node;if(j != j0)j0 = j,i0 = 0;if(i >= i0)i0 = i + 1;while(!(node = group[i0]) && ++i0 < n);return node;};}d3.select = function(node){var group;if(typeof node === \"string\"){group = [d3_select(node,d3_document)];group.parentNode = d3_document.documentElement;}else {group = [node];group.parentNode = d3_documentElement(node);}return d3_selection([group]);};d3.selectAll = function(nodes){var group;if(typeof nodes === \"string\"){group = d3_array(d3_selectAll(nodes,d3_document));group.parentNode = d3_document.documentElement;}else {group = d3_array(nodes);group.parentNode = null;}return d3_selection([group]);};d3_selectionPrototype.on = function(type,listener,capture){var n=arguments.length;if(n < 3){if(typeof type !== \"string\"){if(n < 2)listener = false;for(capture in type) this.each(d3_selection_on(capture,type[capture],listener));return this;}if(n < 2)return (n = this.node()[\"__on\" + type]) && n._;capture = false;}return this.each(d3_selection_on(type,listener,capture));};function d3_selection_on(type,listener,capture){var name=\"__on\" + type,i=type.indexOf(\".\"),wrap=d3_selection_onListener;if(i > 0)type = type.slice(0,i);var filter=d3_selection_onFilters.get(type);if(filter)type = filter,wrap = d3_selection_onFilter;function onRemove(){var l=this[name];if(l){this.removeEventListener(type,l,l.$);delete this[name];}}function onAdd(){var l=wrap(listener,d3_array(arguments));onRemove.call(this);this.addEventListener(type,this[name] = l,l.$ = capture);l._ = listener;}function removeAll(){var re=new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"),match;for(var name in this) {if(match = name.match(re)){var l=this[name];this.removeEventListener(match[1],l,l.$);delete this[name];}}}return i?listener?onAdd:onRemove:listener?d3_noop:removeAll;}var d3_selection_onFilters=d3.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});if(d3_document){d3_selection_onFilters.forEach(function(k){if(\"on\" + k in d3_document)d3_selection_onFilters.remove(k);});}function d3_selection_onListener(listener,argumentz){return function(e){var o=d3.event;d3.event = e;argumentz[0] = this.__data__;try{listener.apply(this,argumentz);}finally {d3.event = o;}};}function d3_selection_onFilter(listener,argumentz){var l=d3_selection_onListener(listener,argumentz);return function(e){var target=this,related=e.relatedTarget;if(!related || related !== target && !(related.compareDocumentPosition(target) & 8)){l.call(target,e);}};}var d3_event_dragSelect,d3_event_dragId=0;function d3_event_dragSuppress(node){var name=\".dragsuppress-\" + ++d3_event_dragId,click=\"click\" + name,w=d3.select(d3_window(node)).on(\"touchmove\" + name,d3_eventPreventDefault).on(\"dragstart\" + name,d3_eventPreventDefault).on(\"selectstart\" + name,d3_eventPreventDefault);if(d3_event_dragSelect == null){d3_event_dragSelect = \"onselectstart\" in node?false:d3_vendorSymbol(node.style,\"userSelect\");}if(d3_event_dragSelect){var style=d3_documentElement(node).style,select=style[d3_event_dragSelect];style[d3_event_dragSelect] = \"none\";}return function(suppressClick){w.on(name,null);if(d3_event_dragSelect)style[d3_event_dragSelect] = select;if(suppressClick){var off=function off(){w.on(click,null);};w.on(click,function(){d3_eventPreventDefault();off();},true);setTimeout(off,0);}};}d3.mouse = function(container){return d3_mousePoint(container,d3_eventSource());};var d3_mouse_bug44083=this.navigator && /WebKit/.test(this.navigator.userAgent)?-1:0;function d3_mousePoint(container,e){if(e.changedTouches)e = e.changedTouches[0];var svg=container.ownerSVGElement || container;if(svg.createSVGPoint){var point=svg.createSVGPoint();if(d3_mouse_bug44083 < 0){var window=d3_window(container);if(window.scrollX || window.scrollY){svg = d3.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\");var ctm=svg[0][0].getScreenCTM();d3_mouse_bug44083 = !(ctm.f || ctm.e);svg.remove();}}if(d3_mouse_bug44083)point.x = e.pageX,point.y = e.pageY;else point.x = e.clientX,point.y = e.clientY;point = point.matrixTransform(container.getScreenCTM().inverse());return [point.x,point.y];}var rect=container.getBoundingClientRect();return [e.clientX - rect.left - container.clientLeft,e.clientY - rect.top - container.clientTop];}d3.touch = function(container,touches,identifier){if(arguments.length < 3)identifier = touches,touches = d3_eventSource().changedTouches;if(touches)for(var i=0,n=touches.length,touch;i < n;++i) {if((touch = touches[i]).identifier === identifier){return d3_mousePoint(container,touch);}}};d3.behavior.drag = function(){var event=d3_eventDispatch(drag,\"drag\",\"dragstart\",\"dragend\"),origin=null,mousedown=dragstart(d3_noop,d3.mouse,d3_window,\"mousemove\",\"mouseup\"),touchstart=dragstart(d3_behavior_dragTouchId,d3.touch,d3_identity,\"touchmove\",\"touchend\");function drag(){this.on(\"mousedown.drag\",mousedown).on(\"touchstart.drag\",touchstart);}function dragstart(id,position,subject,move,end){return function(){var that=this,target=d3.event.target,parent=that.parentNode,dispatch=event.of(that,arguments),dragged=0,dragId=id(),dragName=\".drag\" + (dragId == null?\"\":\"-\" + dragId),dragOffset,dragSubject=d3.select(subject(target)).on(move + dragName,moved).on(end + dragName,ended),dragRestore=d3_event_dragSuppress(target),position0=position(parent,dragId);if(origin){dragOffset = origin.apply(that,arguments);dragOffset = [dragOffset.x - position0[0],dragOffset.y - position0[1]];}else {dragOffset = [0,0];}dispatch({type:\"dragstart\"});function moved(){var position1=position(parent,dragId),dx,dy;if(!position1)return;dx = position1[0] - position0[0];dy = position1[1] - position0[1];dragged |= dx | dy;position0 = position1;dispatch({type:\"drag\",x:position1[0] + dragOffset[0],y:position1[1] + dragOffset[1],dx:dx,dy:dy});}function ended(){if(!position(parent,dragId))return;dragSubject.on(move + dragName,null).on(end + dragName,null);dragRestore(dragged && d3.event.target === target);dispatch({type:\"dragend\"});}};}drag.origin = function(x){if(!arguments.length)return origin;origin = x;return drag;};return d3.rebind(drag,event,\"on\");};function d3_behavior_dragTouchId(){return d3.event.changedTouches[0].identifier;}d3.touches = function(container,touches){if(arguments.length < 2)touches = d3_eventSource().touches;return touches?d3_array(touches).map(function(touch){var point=d3_mousePoint(container,touch);point.identifier = touch.identifier;return point;}):[];};var ε=1e-6,ε2=ε * ε,π=Math.PI,τ=2 * π,τε=τ - ε,halfπ=π / 2,d3_radians=π / 180,d3_degrees=180 / π;function d3_sgn(x){return x > 0?1:x < 0?-1:0;}function d3_cross2d(a,b,c){return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);}function d3_acos(x){return x > 1?0:x < -1?π:Math.acos(x);}function d3_asin(x){return x > 1?halfπ:x < -1?-halfπ:Math.asin(x);}function d3_sinh(x){return ((x = Math.exp(x)) - 1 / x) / 2;}function d3_cosh(x){return ((x = Math.exp(x)) + 1 / x) / 2;}function d3_tanh(x){return ((x = Math.exp(2 * x)) - 1) / (x + 1);}function d3_haversin(x){return (x = Math.sin(x / 2)) * x;}var ρ=Math.SQRT2,ρ2=2,ρ4=4;d3.interpolateZoom = function(p0,p1){var ux0=p0[0],uy0=p0[1],w0=p0[2],ux1=p1[0],uy1=p1[1],w1=p1[2],dx=ux1 - ux0,dy=uy1 - uy0,d2=dx * dx + dy * dy,i,S;if(d2 < ε2){S = Math.log(w1 / w0) / ρ;i = function(t){return [ux0 + t * dx,uy0 + t * dy,w0 * Math.exp(ρ * t * S)];};}else {var d1=Math.sqrt(d2),b0=(w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1),b1=(w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1),r0=Math.log(Math.sqrt(b0 * b0 + 1) - b0),r1=Math.log(Math.sqrt(b1 * b1 + 1) - b1);S = (r1 - r0) / ρ;i = function(t){var s=t * S,coshr0=d3_cosh(r0),u=w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));return [ux0 + u * dx,uy0 + u * dy,w0 * coshr0 / d3_cosh(ρ * s + r0)];};}i.duration = S * 1e3;return i;};d3.behavior.zoom = function(){var view={x:0,y:0,k:1},translate0,center0,center,size=[960,500],scaleExtent=d3_behavior_zoomInfinity,duration=250,zooming=0,mousedown=\"mousedown.zoom\",mousemove=\"mousemove.zoom\",mouseup=\"mouseup.zoom\",mousewheelTimer,touchstart=\"touchstart.zoom\",touchtime,event=d3_eventDispatch(zoom,\"zoomstart\",\"zoom\",\"zoomend\"),x0,x1,y0,y1;if(!d3_behavior_zoomWheel){d3_behavior_zoomWheel = \"onwheel\" in d3_document?(d3_behavior_zoomDelta = function(){return -d3.event.deltaY * (d3.event.deltaMode?120:1);},\"wheel\"):\"onmousewheel\" in d3_document?(d3_behavior_zoomDelta = function(){return d3.event.wheelDelta;},\"mousewheel\"):(d3_behavior_zoomDelta = function(){return -d3.event.detail;},\"MozMousePixelScroll\");}function zoom(g){g.on(mousedown,mousedowned).on(d3_behavior_zoomWheel + \".zoom\",mousewheeled).on(\"dblclick.zoom\",dblclicked).on(touchstart,touchstarted);}zoom.event = function(g){g.each(function(){var dispatch=event.of(this,arguments),view1=view;if(d3_transitionInheritId){d3.select(this).transition().each(\"start.zoom\",function(){view = this.__chart__ || {x:0,y:0,k:1};zoomstarted(dispatch);}).tween(\"zoom:zoom\",function(){var dx=size[0],dy=size[1],cx=center0?center0[0]:dx / 2,cy=center0?center0[1]:dy / 2,i=d3.interpolateZoom([(cx - view.x) / view.k,(cy - view.y) / view.k,dx / view.k],[(cx - view1.x) / view1.k,(cy - view1.y) / view1.k,dx / view1.k]);return function(t){var l=i(t),k=dx / l[2];this.__chart__ = view = {x:cx - l[0] * k,y:cy - l[1] * k,k:k};zoomed(dispatch);};}).each(\"interrupt.zoom\",function(){zoomended(dispatch);}).each(\"end.zoom\",function(){zoomended(dispatch);});}else {this.__chart__ = view;zoomstarted(dispatch);zoomed(dispatch);zoomended(dispatch);}});};zoom.translate = function(_){if(!arguments.length)return [view.x,view.y];view = {x:+_[0],y:+_[1],k:view.k};rescale();return zoom;};zoom.scale = function(_){if(!arguments.length)return view.k;view = {x:view.x,y:view.y,k:null};scaleTo(+_);rescale();return zoom;};zoom.scaleExtent = function(_){if(!arguments.length)return scaleExtent;scaleExtent = _ == null?d3_behavior_zoomInfinity:[+_[0],+_[1]];return zoom;};zoom.center = function(_){if(!arguments.length)return center;center = _ && [+_[0],+_[1]];return zoom;};zoom.size = function(_){if(!arguments.length)return size;size = _ && [+_[0],+_[1]];return zoom;};zoom.duration = function(_){if(!arguments.length)return duration;duration = +_;return zoom;};zoom.x = function(z){if(!arguments.length)return x1;x1 = z;x0 = z.copy();view = {x:0,y:0,k:1};return zoom;};zoom.y = function(z){if(!arguments.length)return y1;y1 = z;y0 = z.copy();view = {x:0,y:0,k:1};return zoom;};function location(p){return [(p[0] - view.x) / view.k,(p[1] - view.y) / view.k];}function point(l){return [l[0] * view.k + view.x,l[1] * view.k + view.y];}function scaleTo(s){view.k = Math.max(scaleExtent[0],Math.min(scaleExtent[1],s));}function translateTo(p,l){l = point(l);view.x += p[0] - l[0];view.y += p[1] - l[1];}function zoomTo(that,p,l,k){that.__chart__ = {x:view.x,y:view.y,k:view.k};scaleTo(Math.pow(2,k));translateTo(center0 = p,l);that = d3.select(that);if(duration > 0)that = that.transition().duration(duration);that.call(zoom.event);}function rescale(){if(x1)x1.domain(x0.range().map(function(x){return (x - view.x) / view.k;}).map(x0.invert));if(y1)y1.domain(y0.range().map(function(y){return (y - view.y) / view.k;}).map(y0.invert));}function zoomstarted(dispatch){if(! zooming++)dispatch({type:\"zoomstart\"});}function zoomed(dispatch){rescale();dispatch({type:\"zoom\",scale:view.k,translate:[view.x,view.y]});}function zoomended(dispatch){if(! --zooming)dispatch({type:\"zoomend\"}),center0 = null;}function mousedowned(){var that=this,target=d3.event.target,dispatch=event.of(that,arguments),dragged=0,subject=d3.select(d3_window(that)).on(mousemove,moved).on(mouseup,ended),location0=location(d3.mouse(that)),dragRestore=d3_event_dragSuppress(that);d3_selection_interrupt.call(that);zoomstarted(dispatch);function moved(){dragged = 1;translateTo(d3.mouse(that),location0);zoomed(dispatch);}function ended(){subject.on(mousemove,null).on(mouseup,null);dragRestore(dragged && d3.event.target === target);zoomended(dispatch);}}function touchstarted(){var that=this,dispatch=event.of(that,arguments),locations0={},distance0=0,scale0,zoomName=\".zoom-\" + d3.event.changedTouches[0].identifier,touchmove=\"touchmove\" + zoomName,touchend=\"touchend\" + zoomName,targets=[],subject=d3.select(that),dragRestore=d3_event_dragSuppress(that);started();zoomstarted(dispatch);subject.on(mousedown,null).on(touchstart,started);function relocate(){var touches=d3.touches(that);scale0 = view.k;touches.forEach(function(t){if(t.identifier in locations0)locations0[t.identifier] = location(t);});return touches;}function started(){var target=d3.event.target;d3.select(target).on(touchmove,moved).on(touchend,ended);targets.push(target);var changed=d3.event.changedTouches;for(var i=0,n=changed.length;i < n;++i) {locations0[changed[i].identifier] = null;}var touches=relocate(),now=Date.now();if(touches.length === 1){if(now - touchtime < 500){var p=touches[0];zoomTo(that,p,locations0[p.identifier],Math.floor(Math.log(view.k) / Math.LN2) + 1);d3_eventPreventDefault();}touchtime = now;}else if(touches.length > 1){var p=touches[0],q=touches[1],dx=p[0] - q[0],dy=p[1] - q[1];distance0 = dx * dx + dy * dy;}}function moved(){var touches=d3.touches(that),p0,l0,p1,l1;d3_selection_interrupt.call(that);for(var i=0,n=touches.length;i < n;++i,l1 = null) {p1 = touches[i];if(l1 = locations0[p1.identifier]){if(l0)break;p0 = p1,l0 = l1;}}if(l1){var distance1=(distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1,scale1=distance0 && Math.sqrt(distance1 / distance0);p0 = [(p0[0] + p1[0]) / 2,(p0[1] + p1[1]) / 2];l0 = [(l0[0] + l1[0]) / 2,(l0[1] + l1[1]) / 2];scaleTo(scale1 * scale0);}touchtime = null;translateTo(p0,l0);zoomed(dispatch);}function ended(){if(d3.event.touches.length){var changed=d3.event.changedTouches;for(var i=0,n=changed.length;i < n;++i) {delete locations0[changed[i].identifier];}for(var identifier in locations0) {return void relocate();}}d3.selectAll(targets).on(zoomName,null);subject.on(mousedown,mousedowned).on(touchstart,touchstarted);dragRestore();zoomended(dispatch);}}function mousewheeled(){var dispatch=event.of(this,arguments);if(mousewheelTimer)clearTimeout(mousewheelTimer);else d3_selection_interrupt.call(this),translate0 = location(center0 = center || d3.mouse(this)),zoomstarted(dispatch);mousewheelTimer = setTimeout(function(){mousewheelTimer = null;zoomended(dispatch);},50);d3_eventPreventDefault();scaleTo(Math.pow(2,d3_behavior_zoomDelta() * .002) * view.k);translateTo(center0,translate0);zoomed(dispatch);}function dblclicked(){var p=d3.mouse(this),k=Math.log(view.k) / Math.LN2;zoomTo(this,p,location(p),d3.event.shiftKey?Math.ceil(k) - 1:Math.floor(k) + 1);}return d3.rebind(zoom,event,\"on\");};var d3_behavior_zoomInfinity=[0,Infinity],d3_behavior_zoomDelta,d3_behavior_zoomWheel;d3.color = d3_color;function d3_color(){}d3_color.prototype.toString = function(){return this.rgb() + \"\";};d3.hsl = d3_hsl;function d3_hsl(h,s,l){return this instanceof d3_hsl?void (this.h = +h,this.s = +s,this.l = +l):arguments.length < 2?h instanceof d3_hsl?new d3_hsl(h.h,h.s,h.l):d3_rgb_parse(\"\" + h,d3_rgb_hsl,d3_hsl):new d3_hsl(h,s,l);}var d3_hslPrototype=d3_hsl.prototype = new d3_color();d3_hslPrototype.brighter = function(k){k = Math.pow(.7,arguments.length?k:1);return new d3_hsl(this.h,this.s,this.l / k);};d3_hslPrototype.darker = function(k){k = Math.pow(.7,arguments.length?k:1);return new d3_hsl(this.h,this.s,k * this.l);};d3_hslPrototype.rgb = function(){return d3_hsl_rgb(this.h,this.s,this.l);};function d3_hsl_rgb(h,s,l){var m1,m2;h = isNaN(h)?0:(h %= 360) < 0?h + 360:h;s = isNaN(s)?0:s < 0?0:s > 1?1:s;l = l < 0?0:l > 1?1:l;m2 = l <= .5?l * (1 + s):l + s - l * s;m1 = 2 * l - m2;function v(h){if(h > 360)h -= 360;else if(h < 0)h += 360;if(h < 60)return m1 + (m2 - m1) * h / 60;if(h < 180)return m2;if(h < 240)return m1 + (m2 - m1) * (240 - h) / 60;return m1;}function vv(h){return Math.round(v(h) * 255);}return new d3_rgb(vv(h + 120),vv(h),vv(h - 120));}d3.hcl = d3_hcl;function d3_hcl(h,c,l){return this instanceof d3_hcl?void (this.h = +h,this.c = +c,this.l = +l):arguments.length < 2?h instanceof d3_hcl?new d3_hcl(h.h,h.c,h.l):h instanceof d3_lab?d3_lab_hcl(h.l,h.a,h.b):d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r,h.g,h.b)).l,h.a,h.b):new d3_hcl(h,c,l);}var d3_hclPrototype=d3_hcl.prototype = new d3_color();d3_hclPrototype.brighter = function(k){return new d3_hcl(this.h,this.c,Math.min(100,this.l + d3_lab_K * (arguments.length?k:1)));};d3_hclPrototype.darker = function(k){return new d3_hcl(this.h,this.c,Math.max(0,this.l - d3_lab_K * (arguments.length?k:1)));};d3_hclPrototype.rgb = function(){return d3_hcl_lab(this.h,this.c,this.l).rgb();};function d3_hcl_lab(h,c,l){if(isNaN(h))h = 0;if(isNaN(c))c = 0;return new d3_lab(l,Math.cos(h *= d3_radians) * c,Math.sin(h) * c);}d3.lab = d3_lab;function d3_lab(l,a,b){return this instanceof d3_lab?void (this.l = +l,this.a = +a,this.b = +b):arguments.length < 2?l instanceof d3_lab?new d3_lab(l.l,l.a,l.b):l instanceof d3_hcl?d3_hcl_lab(l.h,l.c,l.l):d3_rgb_lab((l = d3_rgb(l)).r,l.g,l.b):new d3_lab(l,a,b);}var d3_lab_K=18;var d3_lab_X=.95047,d3_lab_Y=1,d3_lab_Z=1.08883;var d3_labPrototype=d3_lab.prototype = new d3_color();d3_labPrototype.brighter = function(k){return new d3_lab(Math.min(100,this.l + d3_lab_K * (arguments.length?k:1)),this.a,this.b);};d3_labPrototype.darker = function(k){return new d3_lab(Math.max(0,this.l - d3_lab_K * (arguments.length?k:1)),this.a,this.b);};d3_labPrototype.rgb = function(){return d3_lab_rgb(this.l,this.a,this.b);};function d3_lab_rgb(l,a,b){var y=(l + 16) / 116,x=y + a / 500,z=y - b / 200;x = d3_lab_xyz(x) * d3_lab_X;y = d3_lab_xyz(y) * d3_lab_Y;z = d3_lab_xyz(z) * d3_lab_Z;return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z),d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z),d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));}function d3_lab_hcl(l,a,b){return l > 0?new d3_hcl(Math.atan2(b,a) * d3_degrees,Math.sqrt(a * a + b * b),l):new d3_hcl(NaN,NaN,l);}function d3_lab_xyz(x){return x > .206893034?x * x * x:(x - 4 / 29) / 7.787037;}function d3_xyz_lab(x){return x > .008856?Math.pow(x,1 / 3):7.787037 * x + 4 / 29;}function d3_xyz_rgb(r){return Math.round(255 * (r <= .00304?12.92 * r:1.055 * Math.pow(r,1 / 2.4) - .055));}d3.rgb = d3_rgb;function d3_rgb(r,g,b){return this instanceof d3_rgb?void (this.r = ~ ~r,this.g = ~ ~g,this.b = ~ ~b):arguments.length < 2?r instanceof d3_rgb?new d3_rgb(r.r,r.g,r.b):d3_rgb_parse(\"\" + r,d3_rgb,d3_hsl_rgb):new d3_rgb(r,g,b);}function d3_rgbNumber(value){return new d3_rgb(value >> 16,value >> 8 & 255,value & 255);}function d3_rgbString(value){return d3_rgbNumber(value) + \"\";}var d3_rgbPrototype=d3_rgb.prototype = new d3_color();d3_rgbPrototype.brighter = function(k){k = Math.pow(.7,arguments.length?k:1);var r=this.r,g=this.g,b=this.b,i=30;if(!r && !g && !b)return new d3_rgb(i,i,i);if(r && r < i)r = i;if(g && g < i)g = i;if(b && b < i)b = i;return new d3_rgb(Math.min(255,r / k),Math.min(255,g / k),Math.min(255,b / k));};d3_rgbPrototype.darker = function(k){k = Math.pow(.7,arguments.length?k:1);return new d3_rgb(k * this.r,k * this.g,k * this.b);};d3_rgbPrototype.hsl = function(){return d3_rgb_hsl(this.r,this.g,this.b);};d3_rgbPrototype.toString = function(){return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);};function d3_rgb_hex(v){return v < 16?\"0\" + Math.max(0,v).toString(16):Math.min(255,v).toString(16);}function d3_rgb_parse(format,rgb,hsl){var r=0,g=0,b=0,m1,m2,color;m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());if(m1){m2 = m1[2].split(\",\");switch(m1[1]){case \"hsl\":{return hsl(parseFloat(m2[0]),parseFloat(m2[1]) / 100,parseFloat(m2[2]) / 100);}case \"rgb\":{return rgb(d3_rgb_parseNumber(m2[0]),d3_rgb_parseNumber(m2[1]),d3_rgb_parseNumber(m2[2]));}}}if(color = d3_rgb_names.get(format)){return rgb(color.r,color.g,color.b);}if(format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1),16))){if(format.length === 4){r = (color & 3840) >> 4;r = r >> 4 | r;g = color & 240;g = g >> 4 | g;b = color & 15;b = b << 4 | b;}else if(format.length === 7){r = (color & 16711680) >> 16;g = (color & 65280) >> 8;b = color & 255;}}return rgb(r,g,b);}function d3_rgb_hsl(r,g,b){var min=Math.min(r /= 255,g /= 255,b /= 255),max=Math.max(r,g,b),d=max - min,h,s,l=(max + min) / 2;if(d){s = l < .5?d / (max + min):d / (2 - max - min);if(r == max)h = (g - b) / d + (g < b?6:0);else if(g == max)h = (b - r) / d + 2;else h = (r - g) / d + 4;h *= 60;}else {h = NaN;s = l > 0 && l < 1?0:h;}return new d3_hsl(h,s,l);}function d3_rgb_lab(r,g,b){r = d3_rgb_xyz(r);g = d3_rgb_xyz(g);b = d3_rgb_xyz(b);var x=d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X),y=d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y),z=d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);return d3_lab(116 * y - 16,500 * (x - y),200 * (y - z));}function d3_rgb_xyz(r){return (r /= 255) <= .04045?r / 12.92:Math.pow((r + .055) / 1.055,2.4);}function d3_rgb_parseNumber(c){var f=parseFloat(c);return c.charAt(c.length - 1) === \"%\"?Math.round(f * 2.55):f;}var d3_rgb_names=d3.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});d3_rgb_names.forEach(function(key,value){d3_rgb_names.set(key,d3_rgbNumber(value));});function d3_functor(v){return typeof v === \"function\"?v:function(){return v;};}d3.functor = d3_functor;d3.xhr = d3_xhrType(d3_identity);function d3_xhrType(response){return function(url,mimeType,callback){if(arguments.length === 2 && typeof mimeType === \"function\")callback = mimeType,mimeType = null;return d3_xhr(url,mimeType,response,callback);};}function d3_xhr(url,mimeType,response,callback){var xhr={},dispatch=d3.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),headers={},request=new XMLHttpRequest(),responseType=null;if(this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url))request = new XDomainRequest();\"onload\" in request?request.onload = request.onerror = respond:request.onreadystatechange = function(){request.readyState > 3 && respond();};function respond(){var status=request.status,result;if(!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304){try{result = response.call(xhr,request);}catch(e) {dispatch.error.call(xhr,e);return;}dispatch.load.call(xhr,result);}else {dispatch.error.call(xhr,request);}}request.onprogress = function(event){var o=d3.event;d3.event = event;try{dispatch.progress.call(xhr,request);}finally {d3.event = o;}};xhr.header = function(name,value){name = (name + \"\").toLowerCase();if(arguments.length < 2)return headers[name];if(value == null)delete headers[name];else headers[name] = value + \"\";return xhr;};xhr.mimeType = function(value){if(!arguments.length)return mimeType;mimeType = value == null?null:value + \"\";return xhr;};xhr.responseType = function(value){if(!arguments.length)return responseType;responseType = value;return xhr;};xhr.response = function(value){response = value;return xhr;};[\"get\",\"post\"].forEach(function(method){xhr[method] = function(){return xhr.send.apply(xhr,[method].concat(d3_array(arguments)));};});xhr.send = function(method,data,callback){if(arguments.length === 2 && typeof data === \"function\")callback = data,data = null;request.open(method,url,true);if(mimeType != null && !(\"accept\" in headers))headers[\"accept\"] = mimeType + \",*/*\";if(request.setRequestHeader)for(var name in headers) request.setRequestHeader(name,headers[name]);if(mimeType != null && request.overrideMimeType)request.overrideMimeType(mimeType);if(responseType != null)request.responseType = responseType;if(callback != null)xhr.on(\"error\",callback).on(\"load\",function(request){callback(null,request);});dispatch.beforesend.call(xhr,request);request.send(data == null?null:data);return xhr;};xhr.abort = function(){request.abort();return xhr;};d3.rebind(xhr,dispatch,\"on\");return callback == null?xhr:xhr.get(d3_xhr_fixCallback(callback));}function d3_xhr_fixCallback(callback){return callback.length === 1?function(error,request){callback(error == null?request:null);}:callback;}function d3_xhrHasResponse(request){var type=request.responseType;return type && type !== \"text\"?request.response:request.responseText;}d3.dsv = function(delimiter,mimeType){var reFormat=new RegExp('[\"' + delimiter + \"\\n]\"),delimiterCode=delimiter.charCodeAt(0);function dsv(url,row,callback){if(arguments.length < 3)callback = row,row = null;var xhr=d3_xhr(url,mimeType,row == null?response:typedResponse(row),callback);xhr.row = function(_){return arguments.length?xhr.response((row = _) == null?response:typedResponse(_)):row;};return xhr;}function response(request){return dsv.parse(request.responseText);}function typedResponse(f){return function(request){return dsv.parse(request.responseText,f);};}dsv.parse = function(text,f){var o;return dsv.parseRows(text,function(row,i){if(o)return o(row,i - 1);var a=new Function(\"d\",\"return {\" + row.map(function(name,i){return JSON.stringify(name) + \": d[\" + i + \"]\";}).join(\",\") + \"}\");o = f?function(row,i){return f(a(row),i);}:a;});};dsv.parseRows = function(text,f){var EOL={},EOF={},rows=[],N=text.length,I=0,n=0,t,eol;function token(){if(I >= N)return EOF;if(eol)return eol = false,EOL;var j=I;if(text.charCodeAt(j) === 34){var i=j;while(i++ < N) {if(text.charCodeAt(i) === 34){if(text.charCodeAt(i + 1) !== 34)break;++i;}}I = i + 2;var c=text.charCodeAt(i + 1);if(c === 13){eol = true;if(text.charCodeAt(i + 2) === 10)++I;}else if(c === 10){eol = true;}return text.slice(j + 1,i).replace(/\"\"/g,'\"');}while(I < N) {var c=text.charCodeAt(I++),k=1;if(c === 10)eol = true;else if(c === 13){eol = true;if(text.charCodeAt(I) === 10)++I,++k;}else if(c !== delimiterCode)continue;return text.slice(j,I - k);}return text.slice(j);}while((t = token()) !== EOF) {var a=[];while(t !== EOL && t !== EOF) {a.push(t);t = token();}if(f && (a = f(a,n++)) == null)continue;rows.push(a);}return rows;};dsv.format = function(rows){if(Array.isArray(rows[0]))return dsv.formatRows(rows);var fieldSet=new d3_Set(),fields=[];rows.forEach(function(row){for(var field in row) {if(!fieldSet.has(field)){fields.push(fieldSet.add(field));}}});return [fields.map(formatValue).join(delimiter)].concat(rows.map(function(row){return fields.map(function(field){return formatValue(row[field]);}).join(delimiter);})).join(\"\\n\");};dsv.formatRows = function(rows){return rows.map(formatRow).join(\"\\n\");};function formatRow(row){return row.map(formatValue).join(delimiter);}function formatValue(text){return reFormat.test(text)?'\"' + text.replace(/\\\"/g,'\"\"') + '\"':text;}return dsv;};d3.csv = d3.dsv(\",\",\"text/csv\");d3.tsv = d3.dsv(\"\t\",\"text/tab-separated-values\");var d3_timer_queueHead,d3_timer_queueTail,d3_timer_interval,d3_timer_timeout,d3_timer_frame=this[d3_vendorSymbol(this,\"requestAnimationFrame\")] || function(callback){setTimeout(callback,17);};d3.timer = function(){d3_timer.apply(this,arguments);};function d3_timer(callback,delay,then){var n=arguments.length;if(n < 2)delay = 0;if(n < 3)then = Date.now();var time=then + delay,timer={c:callback,t:time,n:null};if(d3_timer_queueTail)d3_timer_queueTail.n = timer;else d3_timer_queueHead = timer;d3_timer_queueTail = timer;if(!d3_timer_interval){d3_timer_timeout = clearTimeout(d3_timer_timeout);d3_timer_interval = 1;d3_timer_frame(d3_timer_step);}return timer;}function d3_timer_step(){var now=d3_timer_mark(),delay=d3_timer_sweep() - now;if(delay > 24){if(isFinite(delay)){clearTimeout(d3_timer_timeout);d3_timer_timeout = setTimeout(d3_timer_step,delay);}d3_timer_interval = 0;}else {d3_timer_interval = 1;d3_timer_frame(d3_timer_step);}}d3.timer.flush = function(){d3_timer_mark();d3_timer_sweep();};function d3_timer_mark(){var now=Date.now(),timer=d3_timer_queueHead;while(timer) {if(now >= timer.t && timer.c(now - timer.t))timer.c = null;timer = timer.n;}return now;}function d3_timer_sweep(){var t0,t1=d3_timer_queueHead,time=Infinity;while(t1) {if(t1.c){if(t1.t < time)time = t1.t;t1 = (t0 = t1).n;}else {t1 = t0?t0.n = t1.n:d3_timer_queueHead = t1.n;}}d3_timer_queueTail = t0;return time;}function d3_format_precision(x,p){return p - (x?Math.ceil(Math.log(x) / Math.LN10):1);}d3.round = function(x,n){return n?Math.round(x * (n = Math.pow(10,n))) / n:Math.round(x);};var d3_formatPrefixes=[\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"].map(d3_formatPrefix);d3.formatPrefix = function(value,precision){var i=0;if(value = +value){if(value < 0)value *= -1;if(precision)value = d3.round(value,d3_format_precision(value,precision));i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);i = Math.max(-24,Math.min(24,Math.floor((i - 1) / 3) * 3));}return d3_formatPrefixes[8 + i / 3];};function d3_formatPrefix(d,i){var k=Math.pow(10,abs(8 - i) * 3);return {scale:i > 8?function(d){return d / k;}:function(d){return d * k;},symbol:d};}function d3_locale_numberFormat(locale){var locale_decimal=locale.decimal,locale_thousands=locale.thousands,locale_grouping=locale.grouping,locale_currency=locale.currency,formatGroup=locale_grouping && locale_thousands?function(value,width){var i=value.length,t=[],j=0,g=locale_grouping[0],length=0;while(i > 0 && g > 0) {if(length + g + 1 > width)g = Math.max(1,width - length);t.push(value.substring(i -= g,i + g));if((length += g + 1) > width)break;g = locale_grouping[j = (j + 1) % locale_grouping.length];}return t.reverse().join(locale_thousands);}:d3_identity;return function(specifier){var match=d3_format_re.exec(specifier),fill=match[1] || \" \",align=match[2] || \">\",sign=match[3] || \"-\",symbol=match[4] || \"\",zfill=match[5],width=+match[6],comma=match[7],precision=match[8],type=match[9],scale=1,prefix=\"\",suffix=\"\",integer=false,exponent=true;if(precision)precision = +precision.substring(1);if(zfill || fill === \"0\" && align === \"=\"){zfill = fill = \"0\";align = \"=\";}switch(type){case \"n\":comma = true;type = \"g\";break;case \"%\":scale = 100;suffix = \"%\";type = \"f\";break;case \"p\":scale = 100;suffix = \"%\";type = \"r\";break;case \"b\":case \"o\":case \"x\":case \"X\":if(symbol === \"#\")prefix = \"0\" + type.toLowerCase();case \"c\":exponent = false;case \"d\":integer = true;precision = 0;break;case \"s\":scale = -1;type = \"r\";break;}if(symbol === \"$\")prefix = locale_currency[0],suffix = locale_currency[1];if(type == \"r\" && !precision)type = \"g\";if(precision != null){if(type == \"g\")precision = Math.max(1,Math.min(21,precision));else if(type == \"e\" || type == \"f\")precision = Math.max(0,Math.min(20,precision));}type = d3_format_types.get(type) || d3_format_typeDefault;var zcomma=zfill && comma;return function(value){var fullSuffix=suffix;if(integer && value % 1)return \"\";var negative=value < 0 || value === 0 && 1 / value < 0?(value = -value,\"-\"):sign === \"-\"?\"\":sign;if(scale < 0){var unit=d3.formatPrefix(value,precision);value = unit.scale(value);fullSuffix = unit.symbol + suffix;}else {value *= scale;}value = type(value,precision);var i=value.lastIndexOf(\".\"),before,after;if(i < 0){var j=exponent?value.lastIndexOf(\"e\"):-1;if(j < 0)before = value,after = \"\";else before = value.substring(0,j),after = value.substring(j);}else {before = value.substring(0,i);after = locale_decimal + value.substring(i + 1);}if(!zfill && comma)before = formatGroup(before,Infinity);var length=prefix.length + before.length + after.length + (zcomma?0:negative.length),padding=length < width?new Array(length = width - length + 1).join(fill):\"\";if(zcomma)before = formatGroup(padding + before,padding.length?width - after.length:Infinity);negative += prefix;value = before + after;return (align === \"<\"?negative + value + padding:align === \">\"?padding + negative + value:align === \"^\"?padding.substring(0,length >>= 1) + negative + value + padding.substring(length):negative + (zcomma?value:padding + value)) + fullSuffix;};};}var d3_format_re=/(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;var d3_format_types=d3.map({b:function b(x){return x.toString(2);},c:function c(x){return String.fromCharCode(x);},o:function o(x){return x.toString(8);},x:function x(_x){return _x.toString(16);},X:function X(x){return x.toString(16).toUpperCase();},g:function g(x,p){return x.toPrecision(p);},e:function e(x,p){return x.toExponential(p);},f:function f(x,p){return x.toFixed(p);},r:function r(x,p){return (x = d3.round(x,d3_format_precision(x,p))).toFixed(Math.max(0,Math.min(20,d3_format_precision(x * (1 + 1e-15),p))));}});function d3_format_typeDefault(x){return x + \"\";}var d3_time=d3.time = {},d3_date=Date;function d3_date_utc(){this._ = new Date(arguments.length > 1?Date.UTC.apply(this,arguments):arguments[0]);}d3_date_utc.prototype = {getDate:function getDate(){return this._.getUTCDate();},getDay:function getDay(){return this._.getUTCDay();},getFullYear:function getFullYear(){return this._.getUTCFullYear();},getHours:function getHours(){return this._.getUTCHours();},getMilliseconds:function getMilliseconds(){return this._.getUTCMilliseconds();},getMinutes:function getMinutes(){return this._.getUTCMinutes();},getMonth:function getMonth(){return this._.getUTCMonth();},getSeconds:function getSeconds(){return this._.getUTCSeconds();},getTime:function getTime(){return this._.getTime();},getTimezoneOffset:function getTimezoneOffset(){return 0;},valueOf:function valueOf(){return this._.valueOf();},setDate:function setDate(){d3_time_prototype.setUTCDate.apply(this._,arguments);},setDay:function setDay(){d3_time_prototype.setUTCDay.apply(this._,arguments);},setFullYear:function setFullYear(){d3_time_prototype.setUTCFullYear.apply(this._,arguments);},setHours:function setHours(){d3_time_prototype.setUTCHours.apply(this._,arguments);},setMilliseconds:function setMilliseconds(){d3_time_prototype.setUTCMilliseconds.apply(this._,arguments);},setMinutes:function setMinutes(){d3_time_prototype.setUTCMinutes.apply(this._,arguments);},setMonth:function setMonth(){d3_time_prototype.setUTCMonth.apply(this._,arguments);},setSeconds:function setSeconds(){d3_time_prototype.setUTCSeconds.apply(this._,arguments);},setTime:function setTime(){d3_time_prototype.setTime.apply(this._,arguments);}};var d3_time_prototype=Date.prototype;function d3_time_interval(local,step,number){function round(date){var d0=local(date),d1=offset(d0,1);return date - d0 < d1 - date?d0:d1;}function ceil(date){step(date = local(new d3_date(date - 1)),1);return date;}function offset(date,k){step(date = new d3_date(+date),k);return date;}function range(t0,t1,dt){var time=ceil(t0),times=[];if(dt > 1){while(time < t1) {if(!(number(time) % dt))times.push(new Date(+time));step(time,1);}}else {while(time < t1) times.push(new Date(+time)),step(time,1);}return times;}function range_utc(t0,t1,dt){try{d3_date = d3_date_utc;var utc=new d3_date_utc();utc._ = t0;return range(utc,t1,dt);}finally {d3_date = Date;}}local.floor = local;local.round = round;local.ceil = ceil;local.offset = offset;local.range = range;var utc=local.utc = d3_time_interval_utc(local);utc.floor = utc;utc.round = d3_time_interval_utc(round);utc.ceil = d3_time_interval_utc(ceil);utc.offset = d3_time_interval_utc(offset);utc.range = range_utc;return local;}function d3_time_interval_utc(method){return function(date,k){try{d3_date = d3_date_utc;var utc=new d3_date_utc();utc._ = date;return method(utc,k)._;}finally {d3_date = Date;}};}d3_time.year = d3_time_interval(function(date){date = d3_time.day(date);date.setMonth(0,1);return date;},function(date,offset){date.setFullYear(date.getFullYear() + offset);},function(date){return date.getFullYear();});d3_time.years = d3_time.year.range;d3_time.years.utc = d3_time.year.utc.range;d3_time.day = d3_time_interval(function(date){var day=new d3_date(2e3,0);day.setFullYear(date.getFullYear(),date.getMonth(),date.getDate());return day;},function(date,offset){date.setDate(date.getDate() + offset);},function(date){return date.getDate() - 1;});d3_time.days = d3_time.day.range;d3_time.days.utc = d3_time.day.utc.range;d3_time.dayOfYear = function(date){var year=d3_time.year(date);return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);};[\"sunday\",\"monday\",\"tuesday\",\"wednesday\",\"thursday\",\"friday\",\"saturday\"].forEach(function(day,i){i = 7 - i;var interval=d3_time[day] = d3_time_interval(function(date){(date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);return date;},function(date,offset){date.setDate(date.getDate() + Math.floor(offset) * 7);},function(date){var day=d3_time.year(date).getDay();return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);});d3_time[day + \"s\"] = interval.range;d3_time[day + \"s\"].utc = interval.utc.range;d3_time[day + \"OfYear\"] = function(date){var day=d3_time.year(date).getDay();return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);};});d3_time.week = d3_time.sunday;d3_time.weeks = d3_time.sunday.range;d3_time.weeks.utc = d3_time.sunday.utc.range;d3_time.weekOfYear = d3_time.sundayOfYear;function d3_locale_timeFormat(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_days=locale.days,locale_shortDays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths;function d3_time_format(template){var n=template.length;function format(date){var string=[],i=-1,j=0,c,p,f;while(++i < n) {if(template.charCodeAt(i) === 37){string.push(template.slice(j,i));if((p = d3_time_formatPads[c = template.charAt(++i)]) != null)c = template.charAt(++i);if(f = d3_time_formats[c])c = f(date,p == null?c === \"e\"?\" \":\"0\":p);string.push(c);j = i + 1;}}string.push(template.slice(j,i));return string.join(\"\");}format.parse = function(string){var d={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=d3_time_parse(d,template,string,0);if(i != string.length)return null;if(\"p\" in d)d.H = d.H % 12 + d.p * 12;var localZ=d.Z != null && d3_date !== d3_date_utc,date=new (localZ?d3_date_utc:d3_date)();if(\"j\" in d)date.setFullYear(d.y,0,d.j);else if(\"W\" in d || \"U\" in d){if(!(\"w\" in d))d.w = \"W\" in d?1:0;date.setFullYear(d.y,0,1);date.setFullYear(d.y,0,\"W\" in d?(d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7:d.w + d.U * 7 - (date.getDay() + 6) % 7);}else date.setFullYear(d.y,d.m,d.d);date.setHours(d.H + (d.Z / 100 | 0),d.M + d.Z % 100,d.S,d.L);return localZ?date._:date;};format.toString = function(){return template;};return format;}function d3_time_parse(date,template,string,j){var c,p,t,i=0,n=template.length,m=string.length;while(i < n) {if(j >= m)return -1;c = template.charCodeAt(i++);if(c === 37){t = template.charAt(i++);p = d3_time_parsers[t in d3_time_formatPads?template.charAt(i++):t];if(!p || (j = p(date,string,j)) < 0)return -1;}else if(c != string.charCodeAt(j++)){return -1;}}return j;}d3_time_format.utc = function(template){var local=d3_time_format(template);function format(date){try{d3_date = d3_date_utc;var utc=new d3_date();utc._ = date;return local(utc);}finally {d3_date = Date;}}format.parse = function(string){try{d3_date = d3_date_utc;var date=local.parse(string);return date && date._;}finally {d3_date = Date;}};format.toString = local.toString;return format;};d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;var d3_time_periodLookup=d3.map(),d3_time_dayRe=d3_time_formatRe(locale_days),d3_time_dayLookup=d3_time_formatLookup(locale_days),d3_time_dayAbbrevRe=d3_time_formatRe(locale_shortDays),d3_time_dayAbbrevLookup=d3_time_formatLookup(locale_shortDays),d3_time_monthRe=d3_time_formatRe(locale_months),d3_time_monthLookup=d3_time_formatLookup(locale_months),d3_time_monthAbbrevRe=d3_time_formatRe(locale_shortMonths),d3_time_monthAbbrevLookup=d3_time_formatLookup(locale_shortMonths);locale_periods.forEach(function(p,i){d3_time_periodLookup.set(p.toLowerCase(),i);});var d3_time_formats={a:function a(d){return locale_shortDays[d.getDay()];},A:function A(d){return locale_days[d.getDay()];},b:function b(d){return locale_shortMonths[d.getMonth()];},B:function B(d){return locale_months[d.getMonth()];},c:d3_time_format(locale_dateTime),d:function d(_d,p){return d3_time_formatPad(_d.getDate(),p,2);},e:function e(d,p){return d3_time_formatPad(d.getDate(),p,2);},H:function H(d,p){return d3_time_formatPad(d.getHours(),p,2);},I:function I(d,p){return d3_time_formatPad(d.getHours() % 12 || 12,p,2);},j:function j(d,p){return d3_time_formatPad(1 + d3_time.dayOfYear(d),p,3);},L:function L(d,p){return d3_time_formatPad(d.getMilliseconds(),p,3);},m:function m(d,p){return d3_time_formatPad(d.getMonth() + 1,p,2);},M:function M(d,p){return d3_time_formatPad(d.getMinutes(),p,2);},p:function p(d){return locale_periods[+(d.getHours() >= 12)];},S:function S(d,p){return d3_time_formatPad(d.getSeconds(),p,2);},U:function U(d,p){return d3_time_formatPad(d3_time.sundayOfYear(d),p,2);},w:function w(d){return d.getDay();},W:function W(d,p){return d3_time_formatPad(d3_time.mondayOfYear(d),p,2);},x:d3_time_format(locale_date),X:d3_time_format(locale_time),y:function y(d,p){return d3_time_formatPad(d.getFullYear() % 100,p,2);},Y:function Y(d,p){return d3_time_formatPad(d.getFullYear() % 1e4,p,4);},Z:d3_time_zone,\"%\":function _(){return \"%\";}};var d3_time_parsers={a:d3_time_parseWeekdayAbbrev,A:d3_time_parseWeekday,b:d3_time_parseMonthAbbrev,B:d3_time_parseMonth,c:d3_time_parseLocaleFull,d:d3_time_parseDay,e:d3_time_parseDay,H:d3_time_parseHour24,I:d3_time_parseHour24,j:d3_time_parseDayOfYear,L:d3_time_parseMilliseconds,m:d3_time_parseMonthNumber,M:d3_time_parseMinutes,p:d3_time_parseAmPm,S:d3_time_parseSeconds,U:d3_time_parseWeekNumberSunday,w:d3_time_parseWeekdayNumber,W:d3_time_parseWeekNumberMonday,x:d3_time_parseLocaleDate,X:d3_time_parseLocaleTime,y:d3_time_parseYear,Y:d3_time_parseFullYear,Z:d3_time_parseZone,\"%\":d3_time_parseLiteralPercent};function d3_time_parseWeekdayAbbrev(date,string,i){d3_time_dayAbbrevRe.lastIndex = 0;var n=d3_time_dayAbbrevRe.exec(string.slice(i));return n?(date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseWeekday(date,string,i){d3_time_dayRe.lastIndex = 0;var n=d3_time_dayRe.exec(string.slice(i));return n?(date.w = d3_time_dayLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseMonthAbbrev(date,string,i){d3_time_monthAbbrevRe.lastIndex = 0;var n=d3_time_monthAbbrevRe.exec(string.slice(i));return n?(date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseMonth(date,string,i){d3_time_monthRe.lastIndex = 0;var n=d3_time_monthRe.exec(string.slice(i));return n?(date.m = d3_time_monthLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseLocaleFull(date,string,i){return d3_time_parse(date,d3_time_formats.c.toString(),string,i);}function d3_time_parseLocaleDate(date,string,i){return d3_time_parse(date,d3_time_formats.x.toString(),string,i);}function d3_time_parseLocaleTime(date,string,i){return d3_time_parse(date,d3_time_formats.X.toString(),string,i);}function d3_time_parseAmPm(date,string,i){var n=d3_time_periodLookup.get(string.slice(i,i += 2).toLowerCase());return n == null?-1:(date.p = n,i);}return d3_time_format;}var d3_time_formatPads={\"-\":\"\",_:\" \",\"0\":\"0\"},d3_time_numberRe=/^\\s*\\d+/,d3_time_percentRe=/^%/;function d3_time_formatPad(value,fill,width){var sign=value < 0?\"-\":\"\",string=(sign?-value:value) + \"\",length=string.length;return sign + (length < width?new Array(width - length + 1).join(fill) + string:string);}function d3_time_formatRe(names){return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\",\"i\");}function d3_time_formatLookup(names){var map=new d3_Map(),i=-1,n=names.length;while(++i < n) map.set(names[i].toLowerCase(),i);return map;}function d3_time_parseWeekdayNumber(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 1));return n?(date.w = +n[0],i + n[0].length):-1;}function d3_time_parseWeekNumberSunday(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i));return n?(date.U = +n[0],i + n[0].length):-1;}function d3_time_parseWeekNumberMonday(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i));return n?(date.W = +n[0],i + n[0].length):-1;}function d3_time_parseFullYear(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 4));return n?(date.y = +n[0],i + n[0].length):-1;}function d3_time_parseYear(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.y = d3_time_expandYear(+n[0]),i + n[0].length):-1;}function d3_time_parseZone(date,string,i){return (/^[+-]\\d{4}$/.test(string = string.slice(i,i + 5))?(date.Z = -string,i + 5):-1);}function d3_time_expandYear(d){return d + (d > 68?1900:2e3);}function d3_time_parseMonthNumber(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.m = n[0] - 1,i + n[0].length):-1;}function d3_time_parseDay(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.d = +n[0],i + n[0].length):-1;}function d3_time_parseDayOfYear(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 3));return n?(date.j = +n[0],i + n[0].length):-1;}function d3_time_parseHour24(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.H = +n[0],i + n[0].length):-1;}function d3_time_parseMinutes(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.M = +n[0],i + n[0].length):-1;}function d3_time_parseSeconds(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.S = +n[0],i + n[0].length):-1;}function d3_time_parseMilliseconds(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 3));return n?(date.L = +n[0],i + n[0].length):-1;}function d3_time_zone(d){var z=d.getTimezoneOffset(),zs=z > 0?\"-\":\"+\",zh=abs(z) / 60 | 0,zm=abs(z) % 60;return zs + d3_time_formatPad(zh,\"0\",2) + d3_time_formatPad(zm,\"0\",2);}function d3_time_parseLiteralPercent(date,string,i){d3_time_percentRe.lastIndex = 0;var n=d3_time_percentRe.exec(string.slice(i,i + 1));return n?i + n[0].length:-1;}function d3_time_formatMulti(formats){var n=formats.length,i=-1;while(++i < n) formats[i][0] = this(formats[i][0]);return function(date){var i=0,f=formats[i];while(!f[1](date)) f = formats[++i];return f[0](date);};}d3.locale = function(locale){return {numberFormat:d3_locale_numberFormat(locale),timeFormat:d3_locale_timeFormat(locale)};};var d3_locale_enUS=d3.locale({decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],dateTime:\"%a %b %e %X %Y\",date:\"%m/%d/%Y\",time:\"%H:%M:%S\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]});d3.format = d3_locale_enUS.numberFormat;d3.geo = {};function d3_adder(){}d3_adder.prototype = {s:0,t:0,add:function add(y){d3_adderSum(y,this.t,d3_adderTemp);d3_adderSum(d3_adderTemp.s,this.s,this);if(this.s)this.t += d3_adderTemp.t;else this.s = d3_adderTemp.t;},reset:function reset(){this.s = this.t = 0;},valueOf:function valueOf(){return this.s;}};var d3_adderTemp=new d3_adder();function d3_adderSum(a,b,o){var x=o.s = a + b,bv=x - a,av=x - bv;o.t = a - av + (b - bv);}d3.geo.stream = function(object,listener){if(object && d3_geo_streamObjectType.hasOwnProperty(object.type)){d3_geo_streamObjectType[object.type](object,listener);}else {d3_geo_streamGeometry(object,listener);}};function d3_geo_streamGeometry(geometry,listener){if(geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)){d3_geo_streamGeometryType[geometry.type](geometry,listener);}}var d3_geo_streamObjectType={Feature:function Feature(feature,listener){d3_geo_streamGeometry(feature.geometry,listener);},FeatureCollection:function FeatureCollection(object,listener){var features=object.features,i=-1,n=features.length;while(++i < n) d3_geo_streamGeometry(features[i].geometry,listener);}};var d3_geo_streamGeometryType={Sphere:function Sphere(object,listener){listener.sphere();},Point:function Point(object,listener){object = object.coordinates;listener.point(object[0],object[1],object[2]);},MultiPoint:function MultiPoint(object,listener){var coordinates=object.coordinates,i=-1,n=coordinates.length;while(++i < n) object = coordinates[i],listener.point(object[0],object[1],object[2]);},LineString:function LineString(object,listener){d3_geo_streamLine(object.coordinates,listener,0);},MultiLineString:function MultiLineString(object,listener){var coordinates=object.coordinates,i=-1,n=coordinates.length;while(++i < n) d3_geo_streamLine(coordinates[i],listener,0);},Polygon:function Polygon(object,listener){d3_geo_streamPolygon(object.coordinates,listener);},MultiPolygon:function MultiPolygon(object,listener){var coordinates=object.coordinates,i=-1,n=coordinates.length;while(++i < n) d3_geo_streamPolygon(coordinates[i],listener);},GeometryCollection:function GeometryCollection(object,listener){var geometries=object.geometries,i=-1,n=geometries.length;while(++i < n) d3_geo_streamGeometry(geometries[i],listener);}};function d3_geo_streamLine(coordinates,listener,closed){var i=-1,n=coordinates.length - closed,coordinate;listener.lineStart();while(++i < n) coordinate = coordinates[i],listener.point(coordinate[0],coordinate[1],coordinate[2]);listener.lineEnd();}function d3_geo_streamPolygon(coordinates,listener){var i=-1,n=coordinates.length;listener.polygonStart();while(++i < n) d3_geo_streamLine(coordinates[i],listener,1);listener.polygonEnd();}d3.geo.area = function(object){d3_geo_areaSum = 0;d3.geo.stream(object,d3_geo_area);return d3_geo_areaSum;};var d3_geo_areaSum,d3_geo_areaRingSum=new d3_adder();var d3_geo_area={sphere:function sphere(){d3_geo_areaSum += 4 * π;},point:d3_noop,lineStart:d3_noop,lineEnd:d3_noop,polygonStart:function polygonStart(){d3_geo_areaRingSum.reset();d3_geo_area.lineStart = d3_geo_areaRingStart;},polygonEnd:function polygonEnd(){var area=2 * d3_geo_areaRingSum;d3_geo_areaSum += area < 0?4 * π + area:area;d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;}};function d3_geo_areaRingStart(){var λ00,φ00,λ0,cosφ0,sinφ0;d3_geo_area.point = function(λ,φ){d3_geo_area.point = nextPoint;λ0 = (λ00 = λ) * d3_radians,cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4),sinφ0 = Math.sin(φ);};function nextPoint(λ,φ){λ *= d3_radians;φ = φ * d3_radians / 2 + π / 4;var dλ=λ - λ0,sdλ=dλ >= 0?1:-1,adλ=sdλ * dλ,cosφ=Math.cos(φ),sinφ=Math.sin(φ),k=sinφ0 * sinφ,u=cosφ0 * cosφ + k * Math.cos(adλ),v=k * sdλ * Math.sin(adλ);d3_geo_areaRingSum.add(Math.atan2(v,u));λ0 = λ,cosφ0 = cosφ,sinφ0 = sinφ;}d3_geo_area.lineEnd = function(){nextPoint(λ00,φ00);};}function d3_geo_cartesian(spherical){var λ=spherical[0],φ=spherical[1],cosφ=Math.cos(φ);return [cosφ * Math.cos(λ),cosφ * Math.sin(λ),Math.sin(φ)];}function d3_geo_cartesianDot(a,b){return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];}function d3_geo_cartesianCross(a,b){return [a[1] * b[2] - a[2] * b[1],a[2] * b[0] - a[0] * b[2],a[0] * b[1] - a[1] * b[0]];}function d3_geo_cartesianAdd(a,b){a[0] += b[0];a[1] += b[1];a[2] += b[2];}function d3_geo_cartesianScale(vector,k){return [vector[0] * k,vector[1] * k,vector[2] * k];}function d3_geo_cartesianNormalize(d){var l=Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);d[0] /= l;d[1] /= l;d[2] /= l;}function d3_geo_spherical(cartesian){return [Math.atan2(cartesian[1],cartesian[0]),d3_asin(cartesian[2])];}function d3_geo_sphericalEqual(a,b){return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;}d3.geo.bounds = (function(){var λ0,φ0,λ1,φ1,λ_,λ__,φ__,p0,dλSum,ranges,range;var bound={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){bound.point = ringPoint;bound.lineStart = ringStart;bound.lineEnd = ringEnd;dλSum = 0;d3_geo_area.polygonStart();},polygonEnd:function polygonEnd(){d3_geo_area.polygonEnd();bound.point = point;bound.lineStart = lineStart;bound.lineEnd = lineEnd;if(d3_geo_areaRingSum < 0)λ0 = -(λ1 = 180),φ0 = -(φ1 = 90);else if(dλSum > ε)φ1 = 90;else if(dλSum < -ε)φ0 = -90;range[0] = λ0,range[1] = λ1;}};function point(λ,φ){ranges.push(range = [λ0 = λ,λ1 = λ]);if(φ < φ0)φ0 = φ;if(φ > φ1)φ1 = φ;}function linePoint(λ,φ){var p=d3_geo_cartesian([λ * d3_radians,φ * d3_radians]);if(p0){var normal=d3_geo_cartesianCross(p0,p),equatorial=[normal[1],-normal[0],0],inflection=d3_geo_cartesianCross(equatorial,normal);d3_geo_cartesianNormalize(inflection);inflection = d3_geo_spherical(inflection);var dλ=λ - λ_,s=dλ > 0?1:-1,λi=inflection[0] * d3_degrees * s,antimeridian=abs(dλ) > 180;if(antimeridian ^ (s * λ_ < λi && λi < s * λ)){var φi=inflection[1] * d3_degrees;if(φi > φ1)φ1 = φi;}else if((λi = (λi + 360) % 360 - 180,antimeridian ^ (s * λ_ < λi && λi < s * λ))){var φi=-inflection[1] * d3_degrees;if(φi < φ0)φ0 = φi;}else {if(φ < φ0)φ0 = φ;if(φ > φ1)φ1 = φ;}if(antimeridian){if(λ < λ_){if(angle(λ0,λ) > angle(λ0,λ1))λ1 = λ;}else {if(angle(λ,λ1) > angle(λ0,λ1))λ0 = λ;}}else {if(λ1 >= λ0){if(λ < λ0)λ0 = λ;if(λ > λ1)λ1 = λ;}else {if(λ > λ_){if(angle(λ0,λ) > angle(λ0,λ1))λ1 = λ;}else {if(angle(λ,λ1) > angle(λ0,λ1))λ0 = λ;}}}}else {point(λ,φ);}p0 = p,λ_ = λ;}function lineStart(){bound.point = linePoint;}function lineEnd(){range[0] = λ0,range[1] = λ1;bound.point = point;p0 = null;}function ringPoint(λ,φ){if(p0){var dλ=λ - λ_;dλSum += abs(dλ) > 180?dλ + (dλ > 0?360:-360):dλ;}else λ__ = λ,φ__ = φ;d3_geo_area.point(λ,φ);linePoint(λ,φ);}function ringStart(){d3_geo_area.lineStart();}function ringEnd(){ringPoint(λ__,φ__);d3_geo_area.lineEnd();if(abs(dλSum) > ε)λ0 = -(λ1 = 180);range[0] = λ0,range[1] = λ1;p0 = null;}function angle(λ0,λ1){return (λ1 -= λ0) < 0?λ1 + 360:λ1;}function compareRanges(a,b){return a[0] - b[0];}function withinRange(x,range){return range[0] <= range[1]?range[0] <= x && x <= range[1]:x < range[0] || range[1] < x;}return function(feature){φ1 = λ1 = -(λ0 = φ0 = Infinity);ranges = [];d3.geo.stream(feature,bound);var n=ranges.length;if(n){ranges.sort(compareRanges);for(var i=1,a=ranges[0],b,merged=[a];i < n;++i) {b = ranges[i];if(withinRange(b[0],a) || withinRange(b[1],a)){if(angle(a[0],b[1]) > angle(a[0],a[1]))a[1] = b[1];if(angle(b[0],a[1]) > angle(a[0],a[1]))a[0] = b[0];}else {merged.push(a = b);}}var best=-Infinity,dλ;for(var n=merged.length - 1,i=0,a=merged[n],b;i <= n;a = b,++i) {b = merged[i];if((dλ = angle(a[1],b[0])) > best)best = dλ,λ0 = b[0],λ1 = a[1];}}ranges = range = null;return λ0 === Infinity || φ0 === Infinity?[[NaN,NaN],[NaN,NaN]]:[[λ0,φ0],[λ1,φ1]];};})();d3.geo.centroid = function(object){d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;d3.geo.stream(object,d3_geo_centroid);var x=d3_geo_centroidX2,y=d3_geo_centroidY2,z=d3_geo_centroidZ2,m=x * x + y * y + z * z;if(m < ε2){x = d3_geo_centroidX1,y = d3_geo_centroidY1,z = d3_geo_centroidZ1;if(d3_geo_centroidW1 < ε)x = d3_geo_centroidX0,y = d3_geo_centroidY0,z = d3_geo_centroidZ0;m = x * x + y * y + z * z;if(m < ε2)return [NaN,NaN];}return [Math.atan2(y,x) * d3_degrees,d3_asin(z / Math.sqrt(m)) * d3_degrees];};var d3_geo_centroidW0,d3_geo_centroidW1,d3_geo_centroidX0,d3_geo_centroidY0,d3_geo_centroidZ0,d3_geo_centroidX1,d3_geo_centroidY1,d3_geo_centroidZ1,d3_geo_centroidX2,d3_geo_centroidY2,d3_geo_centroidZ2;var d3_geo_centroid={sphere:d3_noop,point:d3_geo_centroidPoint,lineStart:d3_geo_centroidLineStart,lineEnd:d3_geo_centroidLineEnd,polygonStart:function polygonStart(){d3_geo_centroid.lineStart = d3_geo_centroidRingStart;},polygonEnd:function polygonEnd(){d3_geo_centroid.lineStart = d3_geo_centroidLineStart;}};function d3_geo_centroidPoint(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians);d3_geo_centroidPointXYZ(cosφ * Math.cos(λ),cosφ * Math.sin(λ),Math.sin(φ));}function d3_geo_centroidPointXYZ(x,y,z){++d3_geo_centroidW0;d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;}function d3_geo_centroidLineStart(){var x0,y0,z0;d3_geo_centroid.point = function(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians);x0 = cosφ * Math.cos(λ);y0 = cosφ * Math.sin(λ);z0 = Math.sin(φ);d3_geo_centroid.point = nextPoint;d3_geo_centroidPointXYZ(x0,y0,z0);};function nextPoint(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians),x=cosφ * Math.cos(λ),y=cosφ * Math.sin(λ),z=Math.sin(φ),w=Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w),x0 * x + y0 * y + z0 * z);d3_geo_centroidW1 += w;d3_geo_centroidX1 += w * (x0 + (x0 = x));d3_geo_centroidY1 += w * (y0 + (y0 = y));d3_geo_centroidZ1 += w * (z0 + (z0 = z));d3_geo_centroidPointXYZ(x0,y0,z0);}}function d3_geo_centroidLineEnd(){d3_geo_centroid.point = d3_geo_centroidPoint;}function d3_geo_centroidRingStart(){var λ00,φ00,x0,y0,z0;d3_geo_centroid.point = function(λ,φ){λ00 = λ,φ00 = φ;d3_geo_centroid.point = nextPoint;λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians);x0 = cosφ * Math.cos(λ);y0 = cosφ * Math.sin(λ);z0 = Math.sin(φ);d3_geo_centroidPointXYZ(x0,y0,z0);};d3_geo_centroid.lineEnd = function(){nextPoint(λ00,φ00);d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;d3_geo_centroid.point = d3_geo_centroidPoint;};function nextPoint(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians),x=cosφ * Math.cos(λ),y=cosφ * Math.sin(λ),z=Math.sin(φ),cx=y0 * z - z0 * y,cy=z0 * x - x0 * z,cz=x0 * y - y0 * x,m=Math.sqrt(cx * cx + cy * cy + cz * cz),u=x0 * x + y0 * y + z0 * z,v=m && -d3_acos(u) / m,w=Math.atan2(m,u);d3_geo_centroidX2 += v * cx;d3_geo_centroidY2 += v * cy;d3_geo_centroidZ2 += v * cz;d3_geo_centroidW1 += w;d3_geo_centroidX1 += w * (x0 + (x0 = x));d3_geo_centroidY1 += w * (y0 + (y0 = y));d3_geo_centroidZ1 += w * (z0 + (z0 = z));d3_geo_centroidPointXYZ(x0,y0,z0);}}function d3_geo_compose(a,b){function compose(x,y){return x = a(x,y),b(x[0],x[1]);}if(a.invert && b.invert)compose.invert = function(x,y){return x = b.invert(x,y),x && a.invert(x[0],x[1]);};return compose;}function d3_true(){return true;}function d3_geo_clipPolygon(segments,compare,clipStartInside,interpolate,listener){var subject=[],clip=[];segments.forEach(function(segment){if((n = segment.length - 1) <= 0)return;var n,p0=segment[0],p1=segment[n];if(d3_geo_sphericalEqual(p0,p1)){listener.lineStart();for(var i=0;i < n;++i) listener.point((p0 = segment[i])[0],p0[1]);listener.lineEnd();return;}var a=new d3_geo_clipPolygonIntersection(p0,segment,null,true),b=new d3_geo_clipPolygonIntersection(p0,null,a,false);a.o = b;subject.push(a);clip.push(b);a = new d3_geo_clipPolygonIntersection(p1,segment,null,false);b = new d3_geo_clipPolygonIntersection(p1,null,a,true);a.o = b;subject.push(a);clip.push(b);});clip.sort(compare);d3_geo_clipPolygonLinkCircular(subject);d3_geo_clipPolygonLinkCircular(clip);if(!subject.length)return;for(var i=0,entry=clipStartInside,n=clip.length;i < n;++i) {clip[i].e = entry = !entry;}var start=subject[0],points,point;while(1) {var current=start,isSubject=true;while(current.v) if((current = current.n) === start)return;points = current.z;listener.lineStart();do {current.v = current.o.v = true;if(current.e){if(isSubject){for(var i=0,n=points.length;i < n;++i) listener.point((point = points[i])[0],point[1]);}else {interpolate(current.x,current.n.x,1,listener);}current = current.n;}else {if(isSubject){points = current.p.z;for(var i=points.length - 1;i >= 0;--i) listener.point((point = points[i])[0],point[1]);}else {interpolate(current.x,current.p.x,-1,listener);}current = current.p;}current = current.o;points = current.z;isSubject = !isSubject;}while(!current.v);listener.lineEnd();}}function d3_geo_clipPolygonLinkCircular(array){if(!(n = array.length))return;var n,i=0,a=array[0],b;while(++i < n) {a.n = b = array[i];b.p = a;a = b;}a.n = b = array[0];b.p = a;}function d3_geo_clipPolygonIntersection(point,points,other,entry){this.x = point;this.z = points;this.o = other;this.e = entry;this.v = false;this.n = this.p = null;}function d3_geo_clip(pointVisible,clipLine,interpolate,clipStart){return function(rotate,listener){var line=clipLine(listener),rotatedClipStart=rotate.invert(clipStart[0],clipStart[1]);var clip={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){clip.point = pointRing;clip.lineStart = ringStart;clip.lineEnd = ringEnd;segments = [];polygon = [];},polygonEnd:function polygonEnd(){clip.point = point;clip.lineStart = lineStart;clip.lineEnd = lineEnd;segments = d3.merge(segments);var clipStartInside=d3_geo_pointInPolygon(rotatedClipStart,polygon);if(segments.length){if(!polygonStarted)listener.polygonStart(),polygonStarted = true;d3_geo_clipPolygon(segments,d3_geo_clipSort,clipStartInside,interpolate,listener);}else if(clipStartInside){if(!polygonStarted)listener.polygonStart(),polygonStarted = true;listener.lineStart();interpolate(null,null,1,listener);listener.lineEnd();}if(polygonStarted)listener.polygonEnd(),polygonStarted = false;segments = polygon = null;},sphere:function sphere(){listener.polygonStart();listener.lineStart();interpolate(null,null,1,listener);listener.lineEnd();listener.polygonEnd();}};function point(λ,φ){var point=rotate(λ,φ);if(pointVisible(λ = point[0],φ = point[1]))listener.point(λ,φ);}function pointLine(λ,φ){var point=rotate(λ,φ);line.point(point[0],point[1]);}function lineStart(){clip.point = pointLine;line.lineStart();}function lineEnd(){clip.point = point;line.lineEnd();}var segments;var buffer=d3_geo_clipBufferListener(),ringListener=clipLine(buffer),polygonStarted=false,polygon,ring;function pointRing(λ,φ){ring.push([λ,φ]);var point=rotate(λ,φ);ringListener.point(point[0],point[1]);}function ringStart(){ringListener.lineStart();ring = [];}function ringEnd(){pointRing(ring[0][0],ring[0][1]);ringListener.lineEnd();var clean=ringListener.clean(),ringSegments=buffer.buffer(),segment,n=ringSegments.length;ring.pop();polygon.push(ring);ring = null;if(!n)return;if(clean & 1){segment = ringSegments[0];var n=segment.length - 1,i=-1,point;if(n > 0){if(!polygonStarted)listener.polygonStart(),polygonStarted = true;listener.lineStart();while(++i < n) listener.point((point = segment[i])[0],point[1]);listener.lineEnd();}return;}if(n > 1 && clean & 2)ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));}return clip;};}function d3_geo_clipSegmentLength1(segment){return segment.length > 1;}function d3_geo_clipBufferListener(){var lines=[],line;return {lineStart:function lineStart(){lines.push(line = []);},point:function point(λ,φ){line.push([λ,φ]);},lineEnd:d3_noop,buffer:function buffer(){var buffer=lines;lines = [];line = null;return buffer;},rejoin:function rejoin(){if(lines.length > 1)lines.push(lines.pop().concat(lines.shift()));}};}function d3_geo_clipSort(a,b){return ((a = a.x)[0] < 0?a[1] - halfπ - ε:halfπ - a[1]) - ((b = b.x)[0] < 0?b[1] - halfπ - ε:halfπ - b[1]);}var d3_geo_clipAntimeridian=d3_geo_clip(d3_true,d3_geo_clipAntimeridianLine,d3_geo_clipAntimeridianInterpolate,[-π,-π / 2]);function d3_geo_clipAntimeridianLine(listener){var λ0=NaN,φ0=NaN,sλ0=NaN,_clean;return {lineStart:function lineStart(){listener.lineStart();_clean = 1;},point:function point(λ1,φ1){var sλ1=λ1 > 0?π:-π,dλ=abs(λ1 - λ0);if(abs(dλ - π) < ε){listener.point(λ0,φ0 = (φ0 + φ1) / 2 > 0?halfπ:-halfπ);listener.point(sλ0,φ0);listener.lineEnd();listener.lineStart();listener.point(sλ1,φ0);listener.point(λ1,φ0);_clean = 0;}else if(sλ0 !== sλ1 && dλ >= π){if(abs(λ0 - sλ0) < ε)λ0 -= sλ0 * ε;if(abs(λ1 - sλ1) < ε)λ1 -= sλ1 * ε;φ0 = d3_geo_clipAntimeridianIntersect(λ0,φ0,λ1,φ1);listener.point(sλ0,φ0);listener.lineEnd();listener.lineStart();listener.point(sλ1,φ0);_clean = 0;}listener.point(λ0 = λ1,φ0 = φ1);sλ0 = sλ1;},lineEnd:function lineEnd(){listener.lineEnd();λ0 = φ0 = NaN;},clean:function clean(){return 2 - _clean;}};}function d3_geo_clipAntimeridianIntersect(λ0,φ0,λ1,φ1){var cosφ0,cosφ1,sinλ0_λ1=Math.sin(λ0 - λ1);return abs(sinλ0_λ1) > ε?Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)):(φ0 + φ1) / 2;}function d3_geo_clipAntimeridianInterpolate(from,to,direction,listener){var φ;if(from == null){φ = direction * halfπ;listener.point(-π,φ);listener.point(0,φ);listener.point(π,φ);listener.point(π,0);listener.point(π,-φ);listener.point(0,-φ);listener.point(-π,-φ);listener.point(-π,0);listener.point(-π,φ);}else if(abs(from[0] - to[0]) > ε){var s=from[0] < to[0]?π:-π;φ = direction * s / 2;listener.point(-s,φ);listener.point(0,φ);listener.point(s,φ);}else {listener.point(to[0],to[1]);}}function d3_geo_pointInPolygon(point,polygon){var meridian=point[0],parallel=point[1],meridianNormal=[Math.sin(meridian),-Math.cos(meridian),0],polarAngle=0,winding=0;d3_geo_areaRingSum.reset();for(var i=0,n=polygon.length;i < n;++i) {var ring=polygon[i],m=ring.length;if(!m)continue;var point0=ring[0],λ0=point0[0],φ0=point0[1] / 2 + π / 4,sinφ0=Math.sin(φ0),cosφ0=Math.cos(φ0),j=1;while(true) {if(j === m)j = 0;point = ring[j];var λ=point[0],φ=point[1] / 2 + π / 4,sinφ=Math.sin(φ),cosφ=Math.cos(φ),dλ=λ - λ0,sdλ=dλ >= 0?1:-1,adλ=sdλ * dλ,antimeridian=adλ > π,k=sinφ0 * sinφ;d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ),cosφ0 * cosφ + k * Math.cos(adλ)));polarAngle += antimeridian?dλ + sdλ * τ:dλ;if(antimeridian ^ λ0 >= meridian ^ λ >= meridian){var arc=d3_geo_cartesianCross(d3_geo_cartesian(point0),d3_geo_cartesian(point));d3_geo_cartesianNormalize(arc);var intersection=d3_geo_cartesianCross(meridianNormal,arc);d3_geo_cartesianNormalize(intersection);var φarc=(antimeridian ^ dλ >= 0?-1:1) * d3_asin(intersection[2]);if(parallel > φarc || parallel === φarc && (arc[0] || arc[1])){winding += antimeridian ^ dλ >= 0?1:-1;}}if(! j++)break;λ0 = λ,sinφ0 = sinφ,cosφ0 = cosφ,point0 = point;}}return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;}function d3_geo_clipCircle(radius){var cr=Math.cos(radius),smallRadius=cr > 0,notHemisphere=abs(cr) > ε,interpolate=d3_geo_circleInterpolate(radius,6 * d3_radians);return d3_geo_clip(visible,clipLine,interpolate,smallRadius?[0,-radius]:[-π,radius - π]);function visible(λ,φ){return Math.cos(λ) * Math.cos(φ) > cr;}function clipLine(listener){var point0,c0,v0,v00,_clean2;return {lineStart:function lineStart(){v00 = v0 = false;_clean2 = 1;},point:function point(λ,φ){var point1=[λ,φ],point2,v=visible(λ,φ),c=smallRadius?v?0:code(λ,φ):v?code(λ + (λ < 0?π:-π),φ):0;if(!point0 && (v00 = v0 = v))listener.lineStart();if(v !== v0){point2 = intersect(point0,point1);if(d3_geo_sphericalEqual(point0,point2) || d3_geo_sphericalEqual(point1,point2)){point1[0] += ε;point1[1] += ε;v = visible(point1[0],point1[1]);}}if(v !== v0){_clean2 = 0;if(v){listener.lineStart();point2 = intersect(point1,point0);listener.point(point2[0],point2[1]);}else {point2 = intersect(point0,point1);listener.point(point2[0],point2[1]);listener.lineEnd();}point0 = point2;}else if(notHemisphere && point0 && smallRadius ^ v){var t;if(!(c & c0) && (t = intersect(point1,point0,true))){_clean2 = 0;if(smallRadius){listener.lineStart();listener.point(t[0][0],t[0][1]);listener.point(t[1][0],t[1][1]);listener.lineEnd();}else {listener.point(t[1][0],t[1][1]);listener.lineEnd();listener.lineStart();listener.point(t[0][0],t[0][1]);}}}if(v && (!point0 || !d3_geo_sphericalEqual(point0,point1))){listener.point(point1[0],point1[1]);}point0 = point1,v0 = v,c0 = c;},lineEnd:function lineEnd(){if(v0)listener.lineEnd();point0 = null;},clean:function clean(){return _clean2 | (v00 && v0) << 1;}};}function intersect(a,b,two){var pa=d3_geo_cartesian(a),pb=d3_geo_cartesian(b);var n1=[1,0,0],n2=d3_geo_cartesianCross(pa,pb),n2n2=d3_geo_cartesianDot(n2,n2),n1n2=n2[0],determinant=n2n2 - n1n2 * n1n2;if(!determinant)return !two && a;var c1=cr * n2n2 / determinant,c2=-cr * n1n2 / determinant,n1xn2=d3_geo_cartesianCross(n1,n2),A=d3_geo_cartesianScale(n1,c1),B=d3_geo_cartesianScale(n2,c2);d3_geo_cartesianAdd(A,B);var u=n1xn2,w=d3_geo_cartesianDot(A,u),uu=d3_geo_cartesianDot(u,u),t2=w * w - uu * (d3_geo_cartesianDot(A,A) - 1);if(t2 < 0)return;var t=Math.sqrt(t2),q=d3_geo_cartesianScale(u,(-w - t) / uu);d3_geo_cartesianAdd(q,A);q = d3_geo_spherical(q);if(!two)return q;var λ0=a[0],λ1=b[0],φ0=a[1],φ1=b[1],z;if(λ1 < λ0)z = λ0,λ0 = λ1,λ1 = z;var δλ=λ1 - λ0,polar=abs(δλ - π) < ε,meridian=polar || δλ < ε;if(!polar && φ1 < φ0)z = φ0,φ0 = φ1,φ1 = z;if(meridian?polar?φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε?φ0:φ1):φ0 <= q[1] && q[1] <= φ1:δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)){var q1=d3_geo_cartesianScale(u,(-w + t) / uu);d3_geo_cartesianAdd(q1,A);return [q,d3_geo_spherical(q1)];}}function code(λ,φ){var r=smallRadius?radius:π - radius,code=0;if(λ < -r)code |= 1;else if(λ > r)code |= 2;if(φ < -r)code |= 4;else if(φ > r)code |= 8;return code;}}function d3_geom_clipLine(x0,y0,x1,y1){return function(line){var a=line.a,b=line.b,ax=a.x,ay=a.y,bx=b.x,by=b.y,t0=0,t1=1,dx=bx - ax,dy=by - ay,r;r = x0 - ax;if(!dx && r > 0)return;r /= dx;if(dx < 0){if(r < t0)return;if(r < t1)t1 = r;}else if(dx > 0){if(r > t1)return;if(r > t0)t0 = r;}r = x1 - ax;if(!dx && r < 0)return;r /= dx;if(dx < 0){if(r > t1)return;if(r > t0)t0 = r;}else if(dx > 0){if(r < t0)return;if(r < t1)t1 = r;}r = y0 - ay;if(!dy && r > 0)return;r /= dy;if(dy < 0){if(r < t0)return;if(r < t1)t1 = r;}else if(dy > 0){if(r > t1)return;if(r > t0)t0 = r;}r = y1 - ay;if(!dy && r < 0)return;r /= dy;if(dy < 0){if(r > t1)return;if(r > t0)t0 = r;}else if(dy > 0){if(r < t0)return;if(r < t1)t1 = r;}if(t0 > 0)line.a = {x:ax + t0 * dx,y:ay + t0 * dy};if(t1 < 1)line.b = {x:ax + t1 * dx,y:ay + t1 * dy};return line;};}var d3_geo_clipExtentMAX=1e9;d3.geo.clipExtent = function(){var x0,y0,x1,y1,_stream,clip,clipExtent={stream:function stream(output){if(_stream)_stream.valid = false;_stream = clip(output);_stream.valid = true;return _stream;},extent:function extent(_){if(!arguments.length)return [[x0,y0],[x1,y1]];clip = d3_geo_clipExtent(x0 = +_[0][0],y0 = +_[0][1],x1 = +_[1][0],y1 = +_[1][1]);if(_stream)_stream.valid = false,_stream = null;return clipExtent;}};return clipExtent.extent([[0,0],[960,500]]);};function d3_geo_clipExtent(x0,y0,x1,y1){return function(listener){var listener_=listener,bufferListener=d3_geo_clipBufferListener(),clipLine=d3_geom_clipLine(x0,y0,x1,y1),segments,polygon,ring;var clip={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){listener = bufferListener;segments = [];polygon = [];clean = true;},polygonEnd:function polygonEnd(){listener = listener_;segments = d3.merge(segments);var clipStartInside=insidePolygon([x0,y1]),inside=clean && clipStartInside,visible=segments.length;if(inside || visible){listener.polygonStart();if(inside){listener.lineStart();interpolate(null,null,1,listener);listener.lineEnd();}if(visible){d3_geo_clipPolygon(segments,compare,clipStartInside,interpolate,listener);}listener.polygonEnd();}segments = polygon = ring = null;}};function insidePolygon(p){var wn=0,n=polygon.length,y=p[1];for(var i=0;i < n;++i) {for(var j=1,v=polygon[i],m=v.length,a=v[0],b;j < m;++j) {b = v[j];if(a[1] <= y){if(b[1] > y && d3_cross2d(a,b,p) > 0)++wn;}else {if(b[1] <= y && d3_cross2d(a,b,p) < 0)--wn;}a = b;}}return wn !== 0;}function interpolate(from,to,direction,listener){var a=0,a1=0;if(from == null || (a = corner(from,direction)) !== (a1 = corner(to,direction)) || comparePoints(from,to) < 0 ^ direction > 0){do {listener.point(a === 0 || a === 3?x0:x1,a > 1?y1:y0);}while((a = (a + direction + 4) % 4) !== a1);}else {listener.point(to[0],to[1]);}}function pointVisible(x,y){return x0 <= x && x <= x1 && y0 <= y && y <= y1;}function point(x,y){if(pointVisible(x,y))listener.point(x,y);}var x__,y__,v__,x_,y_,v_,first,clean;function lineStart(){clip.point = linePoint;if(polygon)polygon.push(ring = []);first = true;v_ = false;x_ = y_ = NaN;}function lineEnd(){if(segments){linePoint(x__,y__);if(v__ && v_)bufferListener.rejoin();segments.push(bufferListener.buffer());}clip.point = point;if(v_)listener.lineEnd();}function linePoint(x,y){x = Math.max(-d3_geo_clipExtentMAX,Math.min(d3_geo_clipExtentMAX,x));y = Math.max(-d3_geo_clipExtentMAX,Math.min(d3_geo_clipExtentMAX,y));var v=pointVisible(x,y);if(polygon)ring.push([x,y]);if(first){x__ = x,y__ = y,v__ = v;first = false;if(v){listener.lineStart();listener.point(x,y);}}else {if(v && v_)listener.point(x,y);else {var l={a:{x:x_,y:y_},b:{x:x,y:y}};if(clipLine(l)){if(!v_){listener.lineStart();listener.point(l.a.x,l.a.y);}listener.point(l.b.x,l.b.y);if(!v)listener.lineEnd();clean = false;}else if(v){listener.lineStart();listener.point(x,y);clean = false;}}}x_ = x,y_ = y,v_ = v;}return clip;};function corner(p,direction){return abs(p[0] - x0) < ε?direction > 0?0:3:abs(p[0] - x1) < ε?direction > 0?2:1:abs(p[1] - y0) < ε?direction > 0?1:0:direction > 0?3:2;}function compare(a,b){return comparePoints(a.x,b.x);}function comparePoints(a,b){var ca=corner(a,1),cb=corner(b,1);return ca !== cb?ca - cb:ca === 0?b[1] - a[1]:ca === 1?a[0] - b[0]:ca === 2?a[1] - b[1]:b[0] - a[0];}}function d3_geo_conic(projectAt){var φ0=0,φ1=π / 3,m=d3_geo_projectionMutator(projectAt),p=m(φ0,φ1);p.parallels = function(_){if(!arguments.length)return [φ0 / π * 180,φ1 / π * 180];return m(φ0 = _[0] * π / 180,φ1 = _[1] * π / 180);};return p;}function d3_geo_conicEqualArea(φ0,φ1){var sinφ0=Math.sin(φ0),n=(sinφ0 + Math.sin(φ1)) / 2,C=1 + sinφ0 * (2 * n - sinφ0),ρ0=Math.sqrt(C) / n;function forward(λ,φ){var ρ=Math.sqrt(C - 2 * n * Math.sin(φ)) / n;return [ρ * Math.sin(λ *= n),ρ0 - ρ * Math.cos(λ)];}forward.invert = function(x,y){var ρ0_y=ρ0 - y;return [Math.atan2(x,ρ0_y) / n,d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n))];};return forward;}(d3.geo.conicEqualArea = function(){return d3_geo_conic(d3_geo_conicEqualArea);}).raw = d3_geo_conicEqualArea;d3.geo.albers = function(){return d3.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070);};d3.geo.albersUsa = function(){var lower48=d3.geo.albers();var alaska=d3.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]);var hawaii=d3.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]);var _point,pointStream={point:function point(x,y){_point = [x,y];}},lower48Point,alaskaPoint,hawaiiPoint;function albersUsa(coordinates){var x=coordinates[0],y=coordinates[1];_point = null;(lower48Point(x,y),_point) || (alaskaPoint(x,y),_point) || hawaiiPoint(x,y);return _point;}albersUsa.invert = function(coordinates){var k=lower48.scale(),t=lower48.translate(),x=(coordinates[0] - t[0]) / k,y=(coordinates[1] - t[1]) / k;return (y >= .12 && y < .234 && x >= -.425 && x < -.214?alaska:y >= .166 && y < .234 && x >= -.214 && x < -.115?hawaii:lower48).invert(coordinates);};albersUsa.stream = function(stream){var lower48Stream=lower48.stream(stream),alaskaStream=alaska.stream(stream),hawaiiStream=hawaii.stream(stream);return {point:function point(x,y){lower48Stream.point(x,y);alaskaStream.point(x,y);hawaiiStream.point(x,y);},sphere:function sphere(){lower48Stream.sphere();alaskaStream.sphere();hawaiiStream.sphere();},lineStart:function lineStart(){lower48Stream.lineStart();alaskaStream.lineStart();hawaiiStream.lineStart();},lineEnd:function lineEnd(){lower48Stream.lineEnd();alaskaStream.lineEnd();hawaiiStream.lineEnd();},polygonStart:function polygonStart(){lower48Stream.polygonStart();alaskaStream.polygonStart();hawaiiStream.polygonStart();},polygonEnd:function polygonEnd(){lower48Stream.polygonEnd();alaskaStream.polygonEnd();hawaiiStream.polygonEnd();}};};albersUsa.precision = function(_){if(!arguments.length)return lower48.precision();lower48.precision(_);alaska.precision(_);hawaii.precision(_);return albersUsa;};albersUsa.scale = function(_){if(!arguments.length)return lower48.scale();lower48.scale(_);alaska.scale(_ * .35);hawaii.scale(_);return albersUsa.translate(lower48.translate());};albersUsa.translate = function(_){if(!arguments.length)return lower48.translate();var k=lower48.scale(),x=+_[0],y=+_[1];lower48Point = lower48.translate(_).clipExtent([[x - .455 * k,y - .238 * k],[x + .455 * k,y + .238 * k]]).stream(pointStream).point;alaskaPoint = alaska.translate([x - .307 * k,y + .201 * k]).clipExtent([[x - .425 * k + ε,y + .12 * k + ε],[x - .214 * k - ε,y + .234 * k - ε]]).stream(pointStream).point;hawaiiPoint = hawaii.translate([x - .205 * k,y + .212 * k]).clipExtent([[x - .214 * k + ε,y + .166 * k + ε],[x - .115 * k - ε,y + .234 * k - ε]]).stream(pointStream).point;return albersUsa;};return albersUsa.scale(1070);};var d3_geo_pathAreaSum,d3_geo_pathAreaPolygon,d3_geo_pathArea={point:d3_noop,lineStart:d3_noop,lineEnd:d3_noop,polygonStart:function polygonStart(){d3_geo_pathAreaPolygon = 0;d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;},polygonEnd:function polygonEnd(){d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);}};function d3_geo_pathAreaRingStart(){var x00,y00,x0,y0;d3_geo_pathArea.point = function(x,y){d3_geo_pathArea.point = nextPoint;x00 = x0 = x,y00 = y0 = y;};function nextPoint(x,y){d3_geo_pathAreaPolygon += y0 * x - x0 * y;x0 = x,y0 = y;}d3_geo_pathArea.lineEnd = function(){nextPoint(x00,y00);};}var d3_geo_pathBoundsX0,d3_geo_pathBoundsY0,d3_geo_pathBoundsX1,d3_geo_pathBoundsY1;var d3_geo_pathBounds={point:d3_geo_pathBoundsPoint,lineStart:d3_noop,lineEnd:d3_noop,polygonStart:d3_noop,polygonEnd:d3_noop};function d3_geo_pathBoundsPoint(x,y){if(x < d3_geo_pathBoundsX0)d3_geo_pathBoundsX0 = x;if(x > d3_geo_pathBoundsX1)d3_geo_pathBoundsX1 = x;if(y < d3_geo_pathBoundsY0)d3_geo_pathBoundsY0 = y;if(y > d3_geo_pathBoundsY1)d3_geo_pathBoundsY1 = y;}function d3_geo_pathBuffer(){var pointCircle=d3_geo_pathBufferCircle(4.5),buffer=[];var stream={point:point,lineStart:function lineStart(){stream.point = pointLineStart;},lineEnd:lineEnd,polygonStart:function polygonStart(){stream.lineEnd = lineEndPolygon;},polygonEnd:function polygonEnd(){stream.lineEnd = lineEnd;stream.point = point;},pointRadius:function pointRadius(_){pointCircle = d3_geo_pathBufferCircle(_);return stream;},result:function result(){if(buffer.length){var result=buffer.join(\"\");buffer = [];return result;}}};function point(x,y){buffer.push(\"M\",x,\",\",y,pointCircle);}function pointLineStart(x,y){buffer.push(\"M\",x,\",\",y);stream.point = pointLine;}function pointLine(x,y){buffer.push(\"L\",x,\",\",y);}function lineEnd(){stream.point = point;}function lineEndPolygon(){buffer.push(\"Z\");}return stream;}function d3_geo_pathBufferCircle(radius){return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";}var d3_geo_pathCentroid={point:d3_geo_pathCentroidPoint,lineStart:d3_geo_pathCentroidLineStart,lineEnd:d3_geo_pathCentroidLineEnd,polygonStart:function polygonStart(){d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;},polygonEnd:function polygonEnd(){d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;}};function d3_geo_pathCentroidPoint(x,y){d3_geo_centroidX0 += x;d3_geo_centroidY0 += y;++d3_geo_centroidZ0;}function d3_geo_pathCentroidLineStart(){var x0,y0;d3_geo_pathCentroid.point = function(x,y){d3_geo_pathCentroid.point = nextPoint;d3_geo_pathCentroidPoint(x0 = x,y0 = y);};function nextPoint(x,y){var dx=x - x0,dy=y - y0,z=Math.sqrt(dx * dx + dy * dy);d3_geo_centroidX1 += z * (x0 + x) / 2;d3_geo_centroidY1 += z * (y0 + y) / 2;d3_geo_centroidZ1 += z;d3_geo_pathCentroidPoint(x0 = x,y0 = y);}}function d3_geo_pathCentroidLineEnd(){d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;}function d3_geo_pathCentroidRingStart(){var x00,y00,x0,y0;d3_geo_pathCentroid.point = function(x,y){d3_geo_pathCentroid.point = nextPoint;d3_geo_pathCentroidPoint(x00 = x0 = x,y00 = y0 = y);};function nextPoint(x,y){var dx=x - x0,dy=y - y0,z=Math.sqrt(dx * dx + dy * dy);d3_geo_centroidX1 += z * (x0 + x) / 2;d3_geo_centroidY1 += z * (y0 + y) / 2;d3_geo_centroidZ1 += z;z = y0 * x - x0 * y;d3_geo_centroidX2 += z * (x0 + x);d3_geo_centroidY2 += z * (y0 + y);d3_geo_centroidZ2 += z * 3;d3_geo_pathCentroidPoint(x0 = x,y0 = y);}d3_geo_pathCentroid.lineEnd = function(){nextPoint(x00,y00);};}function d3_geo_pathContext(context){var _pointRadius=4.5;var stream={point:point,lineStart:function lineStart(){stream.point = pointLineStart;},lineEnd:lineEnd,polygonStart:function polygonStart(){stream.lineEnd = lineEndPolygon;},polygonEnd:function polygonEnd(){stream.lineEnd = lineEnd;stream.point = point;},pointRadius:function pointRadius(_){_pointRadius = _;return stream;},result:d3_noop};function point(x,y){context.moveTo(x + _pointRadius,y);context.arc(x,y,_pointRadius,0,τ);}function pointLineStart(x,y){context.moveTo(x,y);stream.point = pointLine;}function pointLine(x,y){context.lineTo(x,y);}function lineEnd(){stream.point = point;}function lineEndPolygon(){context.closePath();}return stream;}function d3_geo_resample(project){var δ2=.5,cosMinDistance=Math.cos(30 * d3_radians),maxDepth=16;function resample(stream){return (maxDepth?resampleRecursive:resampleNone)(stream);}function resampleNone(stream){return d3_geo_transformPoint(stream,function(x,y){x = project(x,y);stream.point(x[0],x[1]);});}function resampleRecursive(stream){var λ00,φ00,x00,y00,a00,b00,c00,λ0,x0,y0,a0,b0,c0;var resample={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){stream.polygonStart();resample.lineStart = ringStart;},polygonEnd:function polygonEnd(){stream.polygonEnd();resample.lineStart = lineStart;}};function point(x,y){x = project(x,y);stream.point(x[0],x[1]);}function lineStart(){x0 = NaN;resample.point = linePoint;stream.lineStart();}function linePoint(λ,φ){var c=d3_geo_cartesian([λ,φ]),p=project(λ,φ);resampleLineTo(x0,y0,λ0,a0,b0,c0,x0 = p[0],y0 = p[1],λ0 = λ,a0 = c[0],b0 = c[1],c0 = c[2],maxDepth,stream);stream.point(x0,y0);}function lineEnd(){resample.point = point;stream.lineEnd();}function ringStart(){lineStart();resample.point = ringPoint;resample.lineEnd = ringEnd;}function ringPoint(λ,φ){linePoint(λ00 = λ,φ00 = φ),x00 = x0,y00 = y0,a00 = a0,b00 = b0,c00 = c0;resample.point = linePoint;}function ringEnd(){resampleLineTo(x0,y0,λ0,a0,b0,c0,x00,y00,λ00,a00,b00,c00,maxDepth,stream);resample.lineEnd = lineEnd;lineEnd();}return resample;}function resampleLineTo(x0,y0,λ0,a0,b0,c0,x1,y1,λ1,a1,b1,c1,depth,stream){var dx=x1 - x0,dy=y1 - y0,d2=dx * dx + dy * dy;if(d2 > 4 * δ2 && depth--){var a=a0 + a1,b=b0 + b1,c=c0 + c1,m=Math.sqrt(a * a + b * b + c * c),φ2=Math.asin(c /= m),λ2=abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε?(λ0 + λ1) / 2:Math.atan2(b,a),p=project(λ2,φ2),x2=p[0],y2=p[1],dx2=x2 - x0,dy2=y2 - y0,dz=dy * dx2 - dx * dy2;if(dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance){resampleLineTo(x0,y0,λ0,a0,b0,c0,x2,y2,λ2,a /= m,b /= m,c,depth,stream);stream.point(x2,y2);resampleLineTo(x2,y2,λ2,a,b,c,x1,y1,λ1,a1,b1,c1,depth,stream);}}}resample.precision = function(_){if(!arguments.length)return Math.sqrt(δ2);maxDepth = (δ2 = _ * _) > 0 && 16;return resample;};return resample;}d3.geo.path = function(){var pointRadius=4.5,projection,context,projectStream,contextStream,cacheStream;function path(object){if(object){if(typeof pointRadius === \"function\")contextStream.pointRadius(+pointRadius.apply(this,arguments));if(!cacheStream || !cacheStream.valid)cacheStream = projectStream(contextStream);d3.geo.stream(object,cacheStream);}return contextStream.result();}path.area = function(object){d3_geo_pathAreaSum = 0;d3.geo.stream(object,projectStream(d3_geo_pathArea));return d3_geo_pathAreaSum;};path.centroid = function(object){d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;d3.geo.stream(object,projectStream(d3_geo_pathCentroid));return d3_geo_centroidZ2?[d3_geo_centroidX2 / d3_geo_centroidZ2,d3_geo_centroidY2 / d3_geo_centroidZ2]:d3_geo_centroidZ1?[d3_geo_centroidX1 / d3_geo_centroidZ1,d3_geo_centroidY1 / d3_geo_centroidZ1]:d3_geo_centroidZ0?[d3_geo_centroidX0 / d3_geo_centroidZ0,d3_geo_centroidY0 / d3_geo_centroidZ0]:[NaN,NaN];};path.bounds = function(object){d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);d3.geo.stream(object,projectStream(d3_geo_pathBounds));return [[d3_geo_pathBoundsX0,d3_geo_pathBoundsY0],[d3_geo_pathBoundsX1,d3_geo_pathBoundsY1]];};path.projection = function(_){if(!arguments.length)return projection;projectStream = (projection = _)?_.stream || d3_geo_pathProjectStream(_):d3_identity;return reset();};path.context = function(_){if(!arguments.length)return context;contextStream = (context = _) == null?new d3_geo_pathBuffer():new d3_geo_pathContext(_);if(typeof pointRadius !== \"function\")contextStream.pointRadius(pointRadius);return reset();};path.pointRadius = function(_){if(!arguments.length)return pointRadius;pointRadius = typeof _ === \"function\"?_:(contextStream.pointRadius(+_),+_);return path;};function reset(){cacheStream = null;return path;}return path.projection(d3.geo.albersUsa()).context(null);};function d3_geo_pathProjectStream(project){var resample=d3_geo_resample(function(x,y){return project([x * d3_degrees,y * d3_degrees]);});return function(stream){return d3_geo_projectionRadians(resample(stream));};}d3.geo.transform = function(methods){return {stream:function stream(_stream2){var transform=new d3_geo_transform(_stream2);for(var k in methods) transform[k] = methods[k];return transform;}};};function d3_geo_transform(stream){this.stream = stream;}d3_geo_transform.prototype = {point:function point(x,y){this.stream.point(x,y);},sphere:function sphere(){this.stream.sphere();},lineStart:function lineStart(){this.stream.lineStart();},lineEnd:function lineEnd(){this.stream.lineEnd();},polygonStart:function polygonStart(){this.stream.polygonStart();},polygonEnd:function polygonEnd(){this.stream.polygonEnd();}};function d3_geo_transformPoint(stream,point){return {point:point,sphere:function sphere(){stream.sphere();},lineStart:function lineStart(){stream.lineStart();},lineEnd:function lineEnd(){stream.lineEnd();},polygonStart:function polygonStart(){stream.polygonStart();},polygonEnd:function polygonEnd(){stream.polygonEnd();}};}d3.geo.projection = d3_geo_projection;d3.geo.projectionMutator = d3_geo_projectionMutator;function d3_geo_projection(project){return d3_geo_projectionMutator(function(){return project;})();}function d3_geo_projectionMutator(projectAt){var project,rotate,projectRotate,projectResample=d3_geo_resample(function(x,y){x = project(x,y);return [x[0] * k + δx,δy - x[1] * k];}),k=150,x=480,y=250,λ=0,φ=0,δλ=0,δφ=0,δγ=0,δx,δy,preclip=d3_geo_clipAntimeridian,postclip=d3_identity,clipAngle=null,clipExtent=null,stream;function projection(point){point = projectRotate(point[0] * d3_radians,point[1] * d3_radians);return [point[0] * k + δx,δy - point[1] * k];}function invert(point){point = projectRotate.invert((point[0] - δx) / k,(δy - point[1]) / k);return point && [point[0] * d3_degrees,point[1] * d3_degrees];}projection.stream = function(output){if(stream)stream.valid = false;stream = d3_geo_projectionRadians(preclip(rotate,projectResample(postclip(output))));stream.valid = true;return stream;};projection.clipAngle = function(_){if(!arguments.length)return clipAngle;preclip = _ == null?(clipAngle = _,d3_geo_clipAntimeridian):d3_geo_clipCircle((clipAngle = +_) * d3_radians);return invalidate();};projection.clipExtent = function(_){if(!arguments.length)return clipExtent;clipExtent = _;postclip = _?d3_geo_clipExtent(_[0][0],_[0][1],_[1][0],_[1][1]):d3_identity;return invalidate();};projection.scale = function(_){if(!arguments.length)return k;k = +_;return reset();};projection.translate = function(_){if(!arguments.length)return [x,y];x = +_[0];y = +_[1];return reset();};projection.center = function(_){if(!arguments.length)return [λ * d3_degrees,φ * d3_degrees];λ = _[0] % 360 * d3_radians;φ = _[1] % 360 * d3_radians;return reset();};projection.rotate = function(_){if(!arguments.length)return [δλ * d3_degrees,δφ * d3_degrees,δγ * d3_degrees];δλ = _[0] % 360 * d3_radians;δφ = _[1] % 360 * d3_radians;δγ = _.length > 2?_[2] % 360 * d3_radians:0;return reset();};d3.rebind(projection,projectResample,\"precision\");function reset(){projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ,δφ,δγ),project);var center=project(λ,φ);δx = x - center[0] * k;δy = y + center[1] * k;return invalidate();}function invalidate(){if(stream)stream.valid = false,stream = null;return projection;}return function(){project = projectAt.apply(this,arguments);projection.invert = project.invert && invert;return reset();};}function d3_geo_projectionRadians(stream){return d3_geo_transformPoint(stream,function(x,y){stream.point(x * d3_radians,y * d3_radians);});}function d3_geo_equirectangular(λ,φ){return [λ,φ];}(d3.geo.equirectangular = function(){return d3_geo_projection(d3_geo_equirectangular);}).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;d3.geo.rotation = function(rotate){rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians,rotate[1] * d3_radians,rotate.length > 2?rotate[2] * d3_radians:0);function forward(coordinates){coordinates = rotate(coordinates[0] * d3_radians,coordinates[1] * d3_radians);return coordinates[0] *= d3_degrees,coordinates[1] *= d3_degrees,coordinates;}forward.invert = function(coordinates){coordinates = rotate.invert(coordinates[0] * d3_radians,coordinates[1] * d3_radians);return coordinates[0] *= d3_degrees,coordinates[1] *= d3_degrees,coordinates;};return forward;};function d3_geo_identityRotation(λ,φ){return [λ > π?λ - τ:λ < -π?λ + τ:λ,φ];}d3_geo_identityRotation.invert = d3_geo_equirectangular;function d3_geo_rotation(δλ,δφ,δγ){return δλ?δφ || δγ?d3_geo_compose(d3_geo_rotationλ(δλ),d3_geo_rotationφγ(δφ,δγ)):d3_geo_rotationλ(δλ):δφ || δγ?d3_geo_rotationφγ(δφ,δγ):d3_geo_identityRotation;}function d3_geo_forwardRotationλ(δλ){return function(λ,φ){return λ += δλ,[λ > π?λ - τ:λ < -π?λ + τ:λ,φ];};}function d3_geo_rotationλ(δλ){var rotation=d3_geo_forwardRotationλ(δλ);rotation.invert = d3_geo_forwardRotationλ(-δλ);return rotation;}function d3_geo_rotationφγ(δφ,δγ){var cosδφ=Math.cos(δφ),sinδφ=Math.sin(δφ),cosδγ=Math.cos(δγ),sinδγ=Math.sin(δγ);function rotation(λ,φ){var cosφ=Math.cos(φ),x=Math.cos(λ) * cosφ,y=Math.sin(λ) * cosφ,z=Math.sin(φ),k=z * cosδφ + x * sinδφ;return [Math.atan2(y * cosδγ - k * sinδγ,x * cosδφ - z * sinδφ),d3_asin(k * cosδγ + y * sinδγ)];}rotation.invert = function(λ,φ){var cosφ=Math.cos(φ),x=Math.cos(λ) * cosφ,y=Math.sin(λ) * cosφ,z=Math.sin(φ),k=z * cosδγ - y * sinδγ;return [Math.atan2(y * cosδγ + z * sinδγ,x * cosδφ + k * sinδφ),d3_asin(k * cosδφ - x * sinδφ)];};return rotation;}d3.geo.circle = function(){var origin=[0,0],angle,precision=6,interpolate;function circle(){var center=typeof origin === \"function\"?origin.apply(this,arguments):origin,rotate=d3_geo_rotation(-center[0] * d3_radians,-center[1] * d3_radians,0).invert,ring=[];interpolate(null,null,1,{point:function point(x,y){ring.push(x = rotate(x,y));x[0] *= d3_degrees,x[1] *= d3_degrees;}});return {type:\"Polygon\",coordinates:[ring]};}circle.origin = function(x){if(!arguments.length)return origin;origin = x;return circle;};circle.angle = function(x){if(!arguments.length)return angle;interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians,precision * d3_radians);return circle;};circle.precision = function(_){if(!arguments.length)return precision;interpolate = d3_geo_circleInterpolate(angle * d3_radians,(precision = +_) * d3_radians);return circle;};return circle.angle(90);};function d3_geo_circleInterpolate(radius,precision){var cr=Math.cos(radius),sr=Math.sin(radius);return function(from,to,direction,listener){var step=direction * precision;if(from != null){from = d3_geo_circleAngle(cr,from);to = d3_geo_circleAngle(cr,to);if(direction > 0?from < to:from > to)from += direction * τ;}else {from = radius + direction * τ;to = radius - .5 * step;}for(var point,t=from;direction > 0?t > to:t < to;t -= step) {listener.point((point = d3_geo_spherical([cr,-sr * Math.cos(t),-sr * Math.sin(t)]))[0],point[1]);}};}function d3_geo_circleAngle(cr,point){var a=d3_geo_cartesian(point);a[0] -= cr;d3_geo_cartesianNormalize(a);var angle=d3_acos(-a[1]);return ((-a[2] < 0?-angle:angle) + 2 * Math.PI - ε) % (2 * Math.PI);}d3.geo.distance = function(a,b){var Δλ=(b[0] - a[0]) * d3_radians,φ0=a[1] * d3_radians,φ1=b[1] * d3_radians,sinΔλ=Math.sin(Δλ),cosΔλ=Math.cos(Δλ),sinφ0=Math.sin(φ0),cosφ0=Math.cos(φ0),sinφ1=Math.sin(φ1),cosφ1=Math.cos(φ1),t;return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t),sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);};d3.geo.graticule = function(){var x1,x0,X1,X0,y1,y0,Y1,Y0,dx=10,dy=dx,DX=90,DY=360,x,y,X,Y,precision=2.5;function graticule(){return {type:\"MultiLineString\",coordinates:lines()};}function lines(){return d3.range(Math.ceil(X0 / DX) * DX,X1,DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY,Y1,DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx,x1,dx).filter(function(x){return abs(x % DX) > ε;}).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy,y1,dy).filter(function(y){return abs(y % DY) > ε;}).map(y));}graticule.lines = function(){return lines().map(function(coordinates){return {type:\"LineString\",coordinates:coordinates};});};graticule.outline = function(){return {type:\"Polygon\",coordinates:[X(X0).concat(Y(Y1).slice(1),X(X1).reverse().slice(1),Y(Y0).reverse().slice(1))]};};graticule.extent = function(_){if(!arguments.length)return graticule.minorExtent();return graticule.majorExtent(_).minorExtent(_);};graticule.majorExtent = function(_){if(!arguments.length)return [[X0,Y0],[X1,Y1]];X0 = +_[0][0],X1 = +_[1][0];Y0 = +_[0][1],Y1 = +_[1][1];if(X0 > X1)_ = X0,X0 = X1,X1 = _;if(Y0 > Y1)_ = Y0,Y0 = Y1,Y1 = _;return graticule.precision(precision);};graticule.minorExtent = function(_){if(!arguments.length)return [[x0,y0],[x1,y1]];x0 = +_[0][0],x1 = +_[1][0];y0 = +_[0][1],y1 = +_[1][1];if(x0 > x1)_ = x0,x0 = x1,x1 = _;if(y0 > y1)_ = y0,y0 = y1,y1 = _;return graticule.precision(precision);};graticule.step = function(_){if(!arguments.length)return graticule.minorStep();return graticule.majorStep(_).minorStep(_);};graticule.majorStep = function(_){if(!arguments.length)return [DX,DY];DX = +_[0],DY = +_[1];return graticule;};graticule.minorStep = function(_){if(!arguments.length)return [dx,dy];dx = +_[0],dy = +_[1];return graticule;};graticule.precision = function(_){if(!arguments.length)return precision;precision = +_;x = d3_geo_graticuleX(y0,y1,90);y = d3_geo_graticuleY(x0,x1,precision);X = d3_geo_graticuleX(Y0,Y1,90);Y = d3_geo_graticuleY(X0,X1,precision);return graticule;};return graticule.majorExtent([[-180,-90 + ε],[180,90 - ε]]).minorExtent([[-180,-80 - ε],[180,80 + ε]]);};function d3_geo_graticuleX(y0,y1,dy){var y=d3.range(y0,y1 - ε,dy).concat(y1);return function(x){return y.map(function(y){return [x,y];});};}function d3_geo_graticuleY(x0,x1,dx){var x=d3.range(x0,x1 - ε,dx).concat(x1);return function(y){return x.map(function(x){return [x,y];});};}function d3_source(d){return d.source;}function d3_target(d){return d.target;}d3.geo.greatArc = function(){var source=d3_source,source_,target=d3_target,target_;function greatArc(){return {type:\"LineString\",coordinates:[source_ || source.apply(this,arguments),target_ || target.apply(this,arguments)]};}greatArc.distance = function(){return d3.geo.distance(source_ || source.apply(this,arguments),target_ || target.apply(this,arguments));};greatArc.source = function(_){if(!arguments.length)return source;source = _,source_ = typeof _ === \"function\"?null:_;return greatArc;};greatArc.target = function(_){if(!arguments.length)return target;target = _,target_ = typeof _ === \"function\"?null:_;return greatArc;};greatArc.precision = function(){return arguments.length?greatArc:0;};return greatArc;};d3.geo.interpolate = function(source,target){return d3_geo_interpolate(source[0] * d3_radians,source[1] * d3_radians,target[0] * d3_radians,target[1] * d3_radians);};function d3_geo_interpolate(x0,y0,x1,y1){var cy0=Math.cos(y0),sy0=Math.sin(y0),cy1=Math.cos(y1),sy1=Math.sin(y1),kx0=cy0 * Math.cos(x0),ky0=cy0 * Math.sin(x0),kx1=cy1 * Math.cos(x1),ky1=cy1 * Math.sin(x1),d=2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))),k=1 / Math.sin(d);var interpolate=d?function(t){var B=Math.sin(t *= d) * k,A=Math.sin(d - t) * k,x=A * kx0 + B * kx1,y=A * ky0 + B * ky1,z=A * sy0 + B * sy1;return [Math.atan2(y,x) * d3_degrees,Math.atan2(z,Math.sqrt(x * x + y * y)) * d3_degrees];}:function(){return [x0 * d3_degrees,y0 * d3_degrees];};interpolate.distance = d;return interpolate;}d3.geo.length = function(object){d3_geo_lengthSum = 0;d3.geo.stream(object,d3_geo_length);return d3_geo_lengthSum;};var d3_geo_lengthSum;var d3_geo_length={sphere:d3_noop,point:d3_noop,lineStart:d3_geo_lengthLineStart,lineEnd:d3_noop,polygonStart:d3_noop,polygonEnd:d3_noop};function d3_geo_lengthLineStart(){var λ0,sinφ0,cosφ0;d3_geo_length.point = function(λ,φ){λ0 = λ * d3_radians,sinφ0 = Math.sin(φ *= d3_radians),cosφ0 = Math.cos(φ);d3_geo_length.point = nextPoint;};d3_geo_length.lineEnd = function(){d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;};function nextPoint(λ,φ){var sinφ=Math.sin(φ *= d3_radians),cosφ=Math.cos(φ),t=abs((λ *= d3_radians) - λ0),cosΔλ=Math.cos(t);d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t),sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);λ0 = λ,sinφ0 = sinφ,cosφ0 = cosφ;}}function d3_geo_azimuthal(scale,angle){function azimuthal(λ,φ){var cosλ=Math.cos(λ),cosφ=Math.cos(φ),k=scale(cosλ * cosφ);return [k * cosφ * Math.sin(λ),k * Math.sin(φ)];}azimuthal.invert = function(x,y){var ρ=Math.sqrt(x * x + y * y),c=angle(ρ),sinc=Math.sin(c),cosc=Math.cos(c);return [Math.atan2(x * sinc,ρ * cosc),Math.asin(ρ && y * sinc / ρ)];};return azimuthal;}var d3_geo_azimuthalEqualArea=d3_geo_azimuthal(function(cosλcosφ){return Math.sqrt(2 / (1 + cosλcosφ));},function(ρ){return 2 * Math.asin(ρ / 2);});(d3.geo.azimuthalEqualArea = function(){return d3_geo_projection(d3_geo_azimuthalEqualArea);}).raw = d3_geo_azimuthalEqualArea;var d3_geo_azimuthalEquidistant=d3_geo_azimuthal(function(cosλcosφ){var c=Math.acos(cosλcosφ);return c && c / Math.sin(c);},d3_identity);(d3.geo.azimuthalEquidistant = function(){return d3_geo_projection(d3_geo_azimuthalEquidistant);}).raw = d3_geo_azimuthalEquidistant;function d3_geo_conicConformal(φ0,φ1){var cosφ0=Math.cos(φ0),t=function t(φ){return Math.tan(π / 4 + φ / 2);},n=φ0 === φ1?Math.sin(φ0):Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)),F=cosφ0 * Math.pow(t(φ0),n) / n;if(!n)return d3_geo_mercator;function forward(λ,φ){if(F > 0){if(φ < -halfπ + ε)φ = -halfπ + ε;}else {if(φ > halfπ - ε)φ = halfπ - ε;}var ρ=F / Math.pow(t(φ),n);return [ρ * Math.sin(n * λ),F - ρ * Math.cos(n * λ)];}forward.invert = function(x,y){var ρ0_y=F - y,ρ=d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);return [Math.atan2(x,ρ0_y) / n,2 * Math.atan(Math.pow(F / ρ,1 / n)) - halfπ];};return forward;}(d3.geo.conicConformal = function(){return d3_geo_conic(d3_geo_conicConformal);}).raw = d3_geo_conicConformal;function d3_geo_conicEquidistant(φ0,φ1){var cosφ0=Math.cos(φ0),n=φ0 === φ1?Math.sin(φ0):(cosφ0 - Math.cos(φ1)) / (φ1 - φ0),G=cosφ0 / n + φ0;if(abs(n) < ε)return d3_geo_equirectangular;function forward(λ,φ){var ρ=G - φ;return [ρ * Math.sin(n * λ),G - ρ * Math.cos(n * λ)];}forward.invert = function(x,y){var ρ0_y=G - y;return [Math.atan2(x,ρ0_y) / n,G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y)];};return forward;}(d3.geo.conicEquidistant = function(){return d3_geo_conic(d3_geo_conicEquidistant);}).raw = d3_geo_conicEquidistant;var d3_geo_gnomonic=d3_geo_azimuthal(function(cosλcosφ){return 1 / cosλcosφ;},Math.atan);(d3.geo.gnomonic = function(){return d3_geo_projection(d3_geo_gnomonic);}).raw = d3_geo_gnomonic;function d3_geo_mercator(λ,φ){return [λ,Math.log(Math.tan(π / 4 + φ / 2))];}d3_geo_mercator.invert = function(x,y){return [x,2 * Math.atan(Math.exp(y)) - halfπ];};function d3_geo_mercatorProjection(project){var m=d3_geo_projection(project),scale=m.scale,translate=m.translate,clipExtent=m.clipExtent,clipAuto;m.scale = function(){var v=scale.apply(m,arguments);return v === m?clipAuto?m.clipExtent(null):m:v;};m.translate = function(){var v=translate.apply(m,arguments);return v === m?clipAuto?m.clipExtent(null):m:v;};m.clipExtent = function(_){var v=clipExtent.apply(m,arguments);if(v === m){if(clipAuto = _ == null){var k=π * scale(),t=translate();clipExtent([[t[0] - k,t[1] - k],[t[0] + k,t[1] + k]]);}}else if(clipAuto){v = null;}return v;};return m.clipExtent(null);}(d3.geo.mercator = function(){return d3_geo_mercatorProjection(d3_geo_mercator);}).raw = d3_geo_mercator;var d3_geo_orthographic=d3_geo_azimuthal(function(){return 1;},Math.asin);(d3.geo.orthographic = function(){return d3_geo_projection(d3_geo_orthographic);}).raw = d3_geo_orthographic;var d3_geo_stereographic=d3_geo_azimuthal(function(cosλcosφ){return 1 / (1 + cosλcosφ);},function(ρ){return 2 * Math.atan(ρ);});(d3.geo.stereographic = function(){return d3_geo_projection(d3_geo_stereographic);}).raw = d3_geo_stereographic;function d3_geo_transverseMercator(λ,φ){return [Math.log(Math.tan(π / 4 + φ / 2)),-λ];}d3_geo_transverseMercator.invert = function(x,y){return [-y,2 * Math.atan(Math.exp(x)) - halfπ];};(d3.geo.transverseMercator = function(){var projection=d3_geo_mercatorProjection(d3_geo_transverseMercator),center=projection.center,rotate=projection.rotate;projection.center = function(_){return _?center([-_[1],_[0]]):(_ = center(),[_[1],-_[0]]);};projection.rotate = function(_){return _?rotate([_[0],_[1],_.length > 2?_[2] + 90:90]):(_ = rotate(),[_[0],_[1],_[2] - 90]);};return rotate([0,0,90]);}).raw = d3_geo_transverseMercator;d3.geom = {};function d3_geom_pointX(d){return d[0];}function d3_geom_pointY(d){return d[1];}d3.geom.hull = function(vertices){var x=d3_geom_pointX,y=d3_geom_pointY;if(arguments.length)return hull(vertices);function hull(data){if(data.length < 3)return [];var fx=d3_functor(x),fy=d3_functor(y),i,n=data.length,points=[],flippedPoints=[];for(i = 0;i < n;i++) {points.push([+fx.call(this,data[i],i),+fy.call(this,data[i],i),i]);}points.sort(d3_geom_hullOrder);for(i = 0;i < n;i++) flippedPoints.push([points[i][0],-points[i][1]]);var upper=d3_geom_hullUpper(points),lower=d3_geom_hullUpper(flippedPoints);var skipLeft=lower[0] === upper[0],skipRight=lower[lower.length - 1] === upper[upper.length - 1],polygon=[];for(i = upper.length - 1;i >= 0;--i) polygon.push(data[points[upper[i]][2]]);for(i = +skipLeft;i < lower.length - skipRight;++i) polygon.push(data[points[lower[i]][2]]);return polygon;}hull.x = function(_){return arguments.length?(x = _,hull):x;};hull.y = function(_){return arguments.length?(y = _,hull):y;};return hull;};function d3_geom_hullUpper(points){var n=points.length,hull=[0,1],hs=2;for(var i=2;i < n;i++) {while(hs > 1 && d3_cross2d(points[hull[hs - 2]],points[hull[hs - 1]],points[i]) <= 0) --hs;hull[hs++] = i;}return hull.slice(0,hs);}function d3_geom_hullOrder(a,b){return a[0] - b[0] || a[1] - b[1];}d3.geom.polygon = function(coordinates){d3_subclass(coordinates,d3_geom_polygonPrototype);return coordinates;};var d3_geom_polygonPrototype=d3.geom.polygon.prototype = [];d3_geom_polygonPrototype.area = function(){var i=-1,n=this.length,a,b=this[n - 1],area=0;while(++i < n) {a = b;b = this[i];area += a[1] * b[0] - a[0] * b[1];}return area * .5;};d3_geom_polygonPrototype.centroid = function(k){var i=-1,n=this.length,x=0,y=0,a,b=this[n - 1],c;if(!arguments.length)k = -1 / (6 * this.area());while(++i < n) {a = b;b = this[i];c = a[0] * b[1] - b[0] * a[1];x += (a[0] + b[0]) * c;y += (a[1] + b[1]) * c;}return [x * k,y * k];};d3_geom_polygonPrototype.clip = function(subject){var input,closed=d3_geom_polygonClosed(subject),i=-1,n=this.length - d3_geom_polygonClosed(this),j,m,a=this[n - 1],b,c,d;while(++i < n) {input = subject.slice();subject.length = 0;b = this[i];c = input[(m = input.length - closed) - 1];j = -1;while(++j < m) {d = input[j];if(d3_geom_polygonInside(d,a,b)){if(!d3_geom_polygonInside(c,a,b)){subject.push(d3_geom_polygonIntersect(c,d,a,b));}subject.push(d);}else if(d3_geom_polygonInside(c,a,b)){subject.push(d3_geom_polygonIntersect(c,d,a,b));}c = d;}if(closed)subject.push(subject[0]);a = b;}return subject;};function d3_geom_polygonInside(p,a,b){return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);}function d3_geom_polygonIntersect(c,d,a,b){var x1=c[0],x3=a[0],x21=d[0] - x1,x43=b[0] - x3,y1=c[1],y3=a[1],y21=d[1] - y1,y43=b[1] - y3,ua=(x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);return [x1 + ua * x21,y1 + ua * y21];}function d3_geom_polygonClosed(coordinates){var a=coordinates[0],b=coordinates[coordinates.length - 1];return !(a[0] - b[0] || a[1] - b[1]);}var d3_geom_voronoiEdges,d3_geom_voronoiCells,d3_geom_voronoiBeaches,d3_geom_voronoiBeachPool=[],d3_geom_voronoiFirstCircle,d3_geom_voronoiCircles,d3_geom_voronoiCirclePool=[];function d3_geom_voronoiBeach(){d3_geom_voronoiRedBlackNode(this);this.edge = this.site = this.circle = null;}function d3_geom_voronoiCreateBeach(site){var beach=d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();beach.site = site;return beach;}function d3_geom_voronoiDetachBeach(beach){d3_geom_voronoiDetachCircle(beach);d3_geom_voronoiBeaches.remove(beach);d3_geom_voronoiBeachPool.push(beach);d3_geom_voronoiRedBlackNode(beach);}function d3_geom_voronoiRemoveBeach(beach){var circle=beach.circle,x=circle.x,y=circle.cy,vertex={x:x,y:y},previous=beach.P,next=beach.N,disappearing=[beach];d3_geom_voronoiDetachBeach(beach);var lArc=previous;while(lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {previous = lArc.P;disappearing.unshift(lArc);d3_geom_voronoiDetachBeach(lArc);lArc = previous;}disappearing.unshift(lArc);d3_geom_voronoiDetachCircle(lArc);var rArc=next;while(rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {next = rArc.N;disappearing.push(rArc);d3_geom_voronoiDetachBeach(rArc);rArc = next;}disappearing.push(rArc);d3_geom_voronoiDetachCircle(rArc);var nArcs=disappearing.length,iArc;for(iArc = 1;iArc < nArcs;++iArc) {rArc = disappearing[iArc];lArc = disappearing[iArc - 1];d3_geom_voronoiSetEdgeEnd(rArc.edge,lArc.site,rArc.site,vertex);}lArc = disappearing[0];rArc = disappearing[nArcs - 1];rArc.edge = d3_geom_voronoiCreateEdge(lArc.site,rArc.site,null,vertex);d3_geom_voronoiAttachCircle(lArc);d3_geom_voronoiAttachCircle(rArc);}function d3_geom_voronoiAddBeach(site){var x=site.x,directrix=site.y,lArc,rArc,dxl,dxr,node=d3_geom_voronoiBeaches._;while(node) {dxl = d3_geom_voronoiLeftBreakPoint(node,directrix) - x;if(dxl > ε)node = node.L;else {dxr = x - d3_geom_voronoiRightBreakPoint(node,directrix);if(dxr > ε){if(!node.R){lArc = node;break;}node = node.R;}else {if(dxl > -ε){lArc = node.P;rArc = node;}else if(dxr > -ε){lArc = node;rArc = node.N;}else {lArc = rArc = node;}break;}}}var newArc=d3_geom_voronoiCreateBeach(site);d3_geom_voronoiBeaches.insert(lArc,newArc);if(!lArc && !rArc)return;if(lArc === rArc){d3_geom_voronoiDetachCircle(lArc);rArc = d3_geom_voronoiCreateBeach(lArc.site);d3_geom_voronoiBeaches.insert(newArc,rArc);newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site,newArc.site);d3_geom_voronoiAttachCircle(lArc);d3_geom_voronoiAttachCircle(rArc);return;}if(!rArc){newArc.edge = d3_geom_voronoiCreateEdge(lArc.site,newArc.site);return;}d3_geom_voronoiDetachCircle(lArc);d3_geom_voronoiDetachCircle(rArc);var lSite=lArc.site,ax=lSite.x,ay=lSite.y,bx=site.x - ax,by=site.y - ay,rSite=rArc.site,cx=rSite.x - ax,cy=rSite.y - ay,d=2 * (bx * cy - by * cx),hb=bx * bx + by * by,hc=cx * cx + cy * cy,vertex={x:(cy * hb - by * hc) / d + ax,y:(bx * hc - cx * hb) / d + ay};d3_geom_voronoiSetEdgeEnd(rArc.edge,lSite,rSite,vertex);newArc.edge = d3_geom_voronoiCreateEdge(lSite,site,null,vertex);rArc.edge = d3_geom_voronoiCreateEdge(site,rSite,null,vertex);d3_geom_voronoiAttachCircle(lArc);d3_geom_voronoiAttachCircle(rArc);}function d3_geom_voronoiLeftBreakPoint(arc,directrix){var site=arc.site,rfocx=site.x,rfocy=site.y,pby2=rfocy - directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return -Infinity;site = lArc.site;var lfocx=site.x,lfocy=site.y,plby2=lfocy - directrix;if(!plby2)return lfocx;var hl=lfocx - rfocx,aby2=1 / pby2 - 1 / plby2,b=hl / plby2;if(aby2)return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;return (rfocx + lfocx) / 2;}function d3_geom_voronoiRightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return d3_geom_voronoiLeftBreakPoint(rArc,directrix);var site=arc.site;return site.y === directrix?site.x:Infinity;}function d3_geom_voronoiCell(site){this.site = site;this.edges = [];}d3_geom_voronoiCell.prototype.prepare = function(){var halfEdges=this.edges,iHalfEdge=halfEdges.length,edge;while(iHalfEdge--) {edge = halfEdges[iHalfEdge].edge;if(!edge.b || !edge.a)halfEdges.splice(iHalfEdge,1);}halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);return halfEdges.length;};function d3_geom_voronoiCloseCells(extent){var x0=extent[0][0],x1=extent[1][0],y0=extent[0][1],y1=extent[1][1],x2,y2,x3,y3,cells=d3_geom_voronoiCells,iCell=cells.length,cell,iHalfEdge,halfEdges,nHalfEdges,start,end;while(iCell--) {cell = cells[iCell];if(!cell || !cell.prepare())continue;halfEdges = cell.edges;nHalfEdges = halfEdges.length;iHalfEdge = 0;while(iHalfEdge < nHalfEdges) {end = halfEdges[iHalfEdge].end(),x3 = end.x,y3 = end.y;start = halfEdges[++iHalfEdge % nHalfEdges].start(),x2 = start.x,y2 = start.y;if(abs(x3 - x2) > ε || abs(y3 - y2) > ε){halfEdges.splice(iHalfEdge,0,new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site,end,abs(x3 - x0) < ε && y1 - y3 > ε?{x:x0,y:abs(x2 - x0) < ε?y2:y1}:abs(y3 - y1) < ε && x1 - x3 > ε?{x:abs(y2 - y1) < ε?x2:x1,y:y1}:abs(x3 - x1) < ε && y3 - y0 > ε?{x:x1,y:abs(x2 - x1) < ε?y2:y0}:abs(y3 - y0) < ε && x3 - x0 > ε?{x:abs(y2 - y0) < ε?x2:x0,y:y0}:null),cell.site,null));++nHalfEdges;}}}}function d3_geom_voronoiHalfEdgeOrder(a,b){return b.angle - a.angle;}function d3_geom_voronoiCircle(){d3_geom_voronoiRedBlackNode(this);this.x = this.y = this.arc = this.site = this.cy = null;}function d3_geom_voronoiAttachCircle(arc){var lArc=arc.P,rArc=arc.N;if(!lArc || !rArc)return;var lSite=lArc.site,cSite=arc.site,rSite=rArc.site;if(lSite === rSite)return;var bx=cSite.x,by=cSite.y,ax=lSite.x - bx,ay=lSite.y - by,cx=rSite.x - bx,cy=rSite.y - by;var d=2 * (ax * cy - ay * cx);if(d >= -ε2)return;var ha=ax * ax + ay * ay,hc=cx * cx + cy * cy,x=(cy * ha - ay * hc) / d,y=(ax * hc - cx * ha) / d,cy=y + by;var circle=d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();circle.arc = arc;circle.site = cSite;circle.x = x + bx;circle.y = cy + Math.sqrt(x * x + y * y);circle.cy = cy;arc.circle = circle;var before=null,node=d3_geom_voronoiCircles._;while(node) {if(circle.y < node.y || circle.y === node.y && circle.x <= node.x){if(node.L)node = node.L;else {before = node.P;break;}}else {if(node.R)node = node.R;else {before = node;break;}}}d3_geom_voronoiCircles.insert(before,circle);if(!before)d3_geom_voronoiFirstCircle = circle;}function d3_geom_voronoiDetachCircle(arc){var circle=arc.circle;if(circle){if(!circle.P)d3_geom_voronoiFirstCircle = circle.N;d3_geom_voronoiCircles.remove(circle);d3_geom_voronoiCirclePool.push(circle);d3_geom_voronoiRedBlackNode(circle);arc.circle = null;}}function d3_geom_voronoiClipEdges(extent){var edges=d3_geom_voronoiEdges,clip=d3_geom_clipLine(extent[0][0],extent[0][1],extent[1][0],extent[1][1]),i=edges.length,e;while(i--) {e = edges[i];if(!d3_geom_voronoiConnectEdge(e,extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε){e.a = e.b = null;edges.splice(i,1);}}}function d3_geom_voronoiConnectEdge(edge,extent){var vb=edge.b;if(vb)return true;var va=edge.a,x0=extent[0][0],x1=extent[1][0],y0=extent[0][1],y1=extent[1][1],lSite=edge.l,rSite=edge.r,lx=lSite.x,ly=lSite.y,rx=rSite.x,ry=rSite.y,fx=(lx + rx) / 2,fy=(ly + ry) / 2,fm,fb;if(ry === ly){if(fx < x0 || fx >= x1)return;if(lx > rx){if(!va)va = {x:fx,y:y0};else if(va.y >= y1)return;vb = {x:fx,y:y1};}else {if(!va)va = {x:fx,y:y1};else if(va.y < y0)return;vb = {x:fx,y:y0};}}else {fm = (lx - rx) / (ry - ly);fb = fy - fm * fx;if(fm < -1 || fm > 1){if(lx > rx){if(!va)va = {x:(y0 - fb) / fm,y:y0};else if(va.y >= y1)return;vb = {x:(y1 - fb) / fm,y:y1};}else {if(!va)va = {x:(y1 - fb) / fm,y:y1};else if(va.y < y0)return;vb = {x:(y0 - fb) / fm,y:y0};}}else {if(ly < ry){if(!va)va = {x:x0,y:fm * x0 + fb};else if(va.x >= x1)return;vb = {x:x1,y:fm * x1 + fb};}else {if(!va)va = {x:x1,y:fm * x1 + fb};else if(va.x < x0)return;vb = {x:x0,y:fm * x0 + fb};}}}edge.a = va;edge.b = vb;return true;}function d3_geom_voronoiEdge(lSite,rSite){this.l = lSite;this.r = rSite;this.a = this.b = null;}function d3_geom_voronoiCreateEdge(lSite,rSite,va,vb){var edge=new d3_geom_voronoiEdge(lSite,rSite);d3_geom_voronoiEdges.push(edge);if(va)d3_geom_voronoiSetEdgeEnd(edge,lSite,rSite,va);if(vb)d3_geom_voronoiSetEdgeEnd(edge,rSite,lSite,vb);d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge,lSite,rSite));d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge,rSite,lSite));return edge;}function d3_geom_voronoiCreateBorderEdge(lSite,va,vb){var edge=new d3_geom_voronoiEdge(lSite,null);edge.a = va;edge.b = vb;d3_geom_voronoiEdges.push(edge);return edge;}function d3_geom_voronoiSetEdgeEnd(edge,lSite,rSite,vertex){if(!edge.a && !edge.b){edge.a = vertex;edge.l = lSite;edge.r = rSite;}else if(edge.l === rSite){edge.b = vertex;}else {edge.a = vertex;}}function d3_geom_voronoiHalfEdge(edge,lSite,rSite){var va=edge.a,vb=edge.b;this.edge = edge;this.site = lSite;this.angle = rSite?Math.atan2(rSite.y - lSite.y,rSite.x - lSite.x):edge.l === lSite?Math.atan2(vb.x - va.x,va.y - vb.y):Math.atan2(va.x - vb.x,vb.y - va.y);}d3_geom_voronoiHalfEdge.prototype = {start:function start(){return this.edge.l === this.site?this.edge.a:this.edge.b;},end:function end(){return this.edge.l === this.site?this.edge.b:this.edge.a;}};function d3_geom_voronoiRedBlackTree(){this._ = null;}function d3_geom_voronoiRedBlackNode(node){node.U = node.C = node.L = node.R = node.P = node.N = null;}d3_geom_voronoiRedBlackTree.prototype = {insert:function insert(after,node){var parent,grandpa,uncle;if(after){node.P = after;node.N = after.N;if(after.N)after.N.P = node;after.N = node;if(after.R){after = after.R;while(after.L) after = after.L;after.L = node;}else {after.R = node;}parent = after;}else if(this._){after = d3_geom_voronoiRedBlackFirst(this._);node.P = null;node.N = after;after.P = after.L = node;parent = after;}else {node.P = node.N = null;this._ = node;parent = null;}node.L = node.R = null;node.U = parent;node.C = true;after = node;while(parent && parent.C) {grandpa = parent.U;if(parent === grandpa.L){uncle = grandpa.R;if(uncle && uncle.C){parent.C = uncle.C = false;grandpa.C = true;after = grandpa;}else {if(after === parent.R){d3_geom_voronoiRedBlackRotateLeft(this,parent);after = parent;parent = after.U;}parent.C = false;grandpa.C = true;d3_geom_voronoiRedBlackRotateRight(this,grandpa);}}else {uncle = grandpa.L;if(uncle && uncle.C){parent.C = uncle.C = false;grandpa.C = true;after = grandpa;}else {if(after === parent.L){d3_geom_voronoiRedBlackRotateRight(this,parent);after = parent;parent = after.U;}parent.C = false;grandpa.C = true;d3_geom_voronoiRedBlackRotateLeft(this,grandpa);}}parent = after.U;}this._.C = false;},remove:function remove(node){if(node.N)node.N.P = node.P;if(node.P)node.P.N = node.N;node.N = node.P = null;var parent=node.U,sibling,left=node.L,right=node.R,next,red;if(!left)next = right;else if(!right)next = left;else next = d3_geom_voronoiRedBlackFirst(right);if(parent){if(parent.L === node)parent.L = next;else parent.R = next;}else {this._ = next;}if(left && right){red = next.C;next.C = node.C;next.L = left;left.U = next;if(next !== right){parent = next.U;next.U = node.U;node = next.R;parent.L = node;next.R = right;right.U = next;}else {next.U = parent;parent = next;node = next.R;}}else {red = node.C;node = next;}if(node)node.U = parent;if(red)return;if(node && node.C){node.C = false;return;}do {if(node === this._)break;if(node === parent.L){sibling = parent.R;if(sibling.C){sibling.C = false;parent.C = true;d3_geom_voronoiRedBlackRotateLeft(this,parent);sibling = parent.R;}if(sibling.L && sibling.L.C || sibling.R && sibling.R.C){if(!sibling.R || !sibling.R.C){sibling.L.C = false;sibling.C = true;d3_geom_voronoiRedBlackRotateRight(this,sibling);sibling = parent.R;}sibling.C = parent.C;parent.C = sibling.R.C = false;d3_geom_voronoiRedBlackRotateLeft(this,parent);node = this._;break;}}else {sibling = parent.L;if(sibling.C){sibling.C = false;parent.C = true;d3_geom_voronoiRedBlackRotateRight(this,parent);sibling = parent.L;}if(sibling.L && sibling.L.C || sibling.R && sibling.R.C){if(!sibling.L || !sibling.L.C){sibling.R.C = false;sibling.C = true;d3_geom_voronoiRedBlackRotateLeft(this,sibling);sibling = parent.L;}sibling.C = parent.C;parent.C = sibling.L.C = false;d3_geom_voronoiRedBlackRotateRight(this,parent);node = this._;break;}}sibling.C = true;node = parent;parent = parent.U;}while(!node.C);if(node)node.C = false;}};function d3_geom_voronoiRedBlackRotateLeft(tree,node){var p=node,q=node.R,parent=p.U;if(parent){if(parent.L === p)parent.L = q;else parent.R = q;}else {tree._ = q;}q.U = parent;p.U = q;p.R = q.L;if(p.R)p.R.U = p;q.L = p;}function d3_geom_voronoiRedBlackRotateRight(tree,node){var p=node,q=node.L,parent=p.U;if(parent){if(parent.L === p)parent.L = q;else parent.R = q;}else {tree._ = q;}q.U = parent;p.U = q;p.L = q.R;if(p.L)p.L.U = p;q.R = p;}function d3_geom_voronoiRedBlackFirst(node){while(node.L) node = node.L;return node;}function d3_geom_voronoi(sites,bbox){var site=sites.sort(d3_geom_voronoiVertexOrder).pop(),x0,y0,circle;d3_geom_voronoiEdges = [];d3_geom_voronoiCells = new Array(sites.length);d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();while(true) {circle = d3_geom_voronoiFirstCircle;if(site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)){if(site.x !== x0 || site.y !== y0){d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);d3_geom_voronoiAddBeach(site);x0 = site.x,y0 = site.y;}site = sites.pop();}else if(circle){d3_geom_voronoiRemoveBeach(circle.arc);}else {break;}}if(bbox)d3_geom_voronoiClipEdges(bbox),d3_geom_voronoiCloseCells(bbox);var diagram={cells:d3_geom_voronoiCells,edges:d3_geom_voronoiEdges};d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;return diagram;}function d3_geom_voronoiVertexOrder(a,b){return b.y - a.y || b.x - a.x;}d3.geom.voronoi = function(points){var x=d3_geom_pointX,y=d3_geom_pointY,fx=x,fy=y,clipExtent=d3_geom_voronoiClipExtent;if(points)return voronoi(points);function voronoi(data){var polygons=new Array(data.length),x0=clipExtent[0][0],y0=clipExtent[0][1],x1=clipExtent[1][0],y1=clipExtent[1][1];d3_geom_voronoi(sites(data),clipExtent).cells.forEach(function(cell,i){var edges=cell.edges,site=cell.site,polygon=polygons[i] = edges.length?edges.map(function(e){var s=e.start();return [s.x,s.y];}):site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1?[[x0,y1],[x1,y1],[x1,y0],[x0,y0]]:[];polygon.point = data[i];});return polygons;}function sites(data){return data.map(function(d,i){return {x:Math.round(fx(d,i) / ε) * ε,y:Math.round(fy(d,i) / ε) * ε,i:i};});}voronoi.links = function(data){return d3_geom_voronoi(sites(data)).edges.filter(function(edge){return edge.l && edge.r;}).map(function(edge){return {source:data[edge.l.i],target:data[edge.r.i]};});};voronoi.triangles = function(data){var triangles=[];d3_geom_voronoi(sites(data)).cells.forEach(function(cell,i){var site=cell.site,edges=cell.edges.sort(d3_geom_voronoiHalfEdgeOrder),j=-1,m=edges.length,e0,s0,e1=edges[m - 1].edge,s1=e1.l === site?e1.r:e1.l;while(++j < m) {e0 = e1;s0 = s1;e1 = edges[j].edge;s1 = e1.l === site?e1.r:e1.l;if(i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site,s0,s1) < 0){triangles.push([data[i],data[s0.i],data[s1.i]]);}}});return triangles;};voronoi.x = function(_){return arguments.length?(fx = d3_functor(x = _),voronoi):x;};voronoi.y = function(_){return arguments.length?(fy = d3_functor(y = _),voronoi):y;};voronoi.clipExtent = function(_){if(!arguments.length)return clipExtent === d3_geom_voronoiClipExtent?null:clipExtent;clipExtent = _ == null?d3_geom_voronoiClipExtent:_;return voronoi;};voronoi.size = function(_){if(!arguments.length)return clipExtent === d3_geom_voronoiClipExtent?null:clipExtent && clipExtent[1];return voronoi.clipExtent(_ && [[0,0],_]);};return voronoi;};var d3_geom_voronoiClipExtent=[[-1e6,-1e6],[1e6,1e6]];function d3_geom_voronoiTriangleArea(a,b,c){return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);}d3.geom.delaunay = function(vertices){return d3.geom.voronoi().triangles(vertices);};d3.geom.quadtree = function(points,x1,y1,x2,y2){var x=d3_geom_pointX,y=d3_geom_pointY,compat;if(compat = arguments.length){x = d3_geom_quadtreeCompatX;y = d3_geom_quadtreeCompatY;if(compat === 3){y2 = y1;x2 = x1;y1 = x1 = 0;}return quadtree(points);}function quadtree(data){var d,fx=d3_functor(x),fy=d3_functor(y),xs,ys,i,n,x1_,y1_,x2_,y2_;if(x1 != null){x1_ = x1,y1_ = y1,x2_ = x2,y2_ = y2;}else {x2_ = y2_ = -(x1_ = y1_ = Infinity);xs = [],ys = [];n = data.length;if(compat)for(i = 0;i < n;++i) {d = data[i];if(d.x < x1_)x1_ = d.x;if(d.y < y1_)y1_ = d.y;if(d.x > x2_)x2_ = d.x;if(d.y > y2_)y2_ = d.y;xs.push(d.x);ys.push(d.y);}else for(i = 0;i < n;++i) {var x_=+fx(d = data[i],i),y_=+fy(d,i);if(x_ < x1_)x1_ = x_;if(y_ < y1_)y1_ = y_;if(x_ > x2_)x2_ = x_;if(y_ > y2_)y2_ = y_;xs.push(x_);ys.push(y_);}}var dx=x2_ - x1_,dy=y2_ - y1_;if(dx > dy)y2_ = y1_ + dx;else x2_ = x1_ + dy;function insert(n,d,x,y,x1,y1,x2,y2){if(isNaN(x) || isNaN(y))return;if(n.leaf){var nx=n.x,ny=n.y;if(nx != null){if(abs(nx - x) + abs(ny - y) < .01){insertChild(n,d,x,y,x1,y1,x2,y2);}else {var nPoint=n.point;n.x = n.y = n.point = null;insertChild(n,nPoint,nx,ny,x1,y1,x2,y2);insertChild(n,d,x,y,x1,y1,x2,y2);}}else {n.x = x,n.y = y,n.point = d;}}else {insertChild(n,d,x,y,x1,y1,x2,y2);}}function insertChild(n,d,x,y,x1,y1,x2,y2){var xm=(x1 + x2) * .5,ym=(y1 + y2) * .5,right=x >= xm,below=y >= ym,i=below << 1 | right;n.leaf = false;n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());if(right)x1 = xm;else x2 = xm;if(below)y1 = ym;else y2 = ym;insert(n,d,x,y,x1,y1,x2,y2);}var root=d3_geom_quadtreeNode();root.add = function(d){insert(root,d,+fx(d,++i),+fy(d,i),x1_,y1_,x2_,y2_);};root.visit = function(f){d3_geom_quadtreeVisit(f,root,x1_,y1_,x2_,y2_);};root.find = function(point){return d3_geom_quadtreeFind(root,point[0],point[1],x1_,y1_,x2_,y2_);};i = -1;if(x1 == null){while(++i < n) {insert(root,data[i],xs[i],ys[i],x1_,y1_,x2_,y2_);}--i;}else data.forEach(root.add);xs = ys = data = d = null;return root;}quadtree.x = function(_){return arguments.length?(x = _,quadtree):x;};quadtree.y = function(_){return arguments.length?(y = _,quadtree):y;};quadtree.extent = function(_){if(!arguments.length)return x1 == null?null:[[x1,y1],[x2,y2]];if(_ == null)x1 = y1 = x2 = y2 = null;else x1 = +_[0][0],y1 = +_[0][1],x2 = +_[1][0],y2 = +_[1][1];return quadtree;};quadtree.size = function(_){if(!arguments.length)return x1 == null?null:[x2 - x1,y2 - y1];if(_ == null)x1 = y1 = x2 = y2 = null;else x1 = y1 = 0,x2 = +_[0],y2 = +_[1];return quadtree;};return quadtree;};function d3_geom_quadtreeCompatX(d){return d.x;}function d3_geom_quadtreeCompatY(d){return d.y;}function d3_geom_quadtreeNode(){return {leaf:true,nodes:[],point:null,x:null,y:null};}function d3_geom_quadtreeVisit(f,node,x1,y1,x2,y2){if(!f(node,x1,y1,x2,y2)){var sx=(x1 + x2) * .5,sy=(y1 + y2) * .5,children=node.nodes;if(children[0])d3_geom_quadtreeVisit(f,children[0],x1,y1,sx,sy);if(children[1])d3_geom_quadtreeVisit(f,children[1],sx,y1,x2,sy);if(children[2])d3_geom_quadtreeVisit(f,children[2],x1,sy,sx,y2);if(children[3])d3_geom_quadtreeVisit(f,children[3],sx,sy,x2,y2);}}function d3_geom_quadtreeFind(root,x,y,x0,y0,x3,y3){var minDistance2=Infinity,closestPoint;(function find(node,x1,y1,x2,y2){if(x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0)return;if(point = node.point){var point,dx=x - node.x,dy=y - node.y,distance2=dx * dx + dy * dy;if(distance2 < minDistance2){var distance=Math.sqrt(minDistance2 = distance2);x0 = x - distance,y0 = y - distance;x3 = x + distance,y3 = y + distance;closestPoint = point;}}var children=node.nodes,xm=(x1 + x2) * .5,ym=(y1 + y2) * .5,right=x >= xm,below=y >= ym;for(var i=below << 1 | right,j=i + 4;i < j;++i) {if(node = children[i & 3])switch(i & 3){case 0:find(node,x1,y1,xm,ym);break;case 1:find(node,xm,y1,x2,ym);break;case 2:find(node,x1,ym,xm,y2);break;case 3:find(node,xm,ym,x2,y2);break;}}})(root,x0,y0,x3,y3);return closestPoint;}d3.interpolateRgb = d3_interpolateRgb;function d3_interpolateRgb(a,b){a = d3.rgb(a);b = d3.rgb(b);var ar=a.r,ag=a.g,ab=a.b,br=b.r - ar,bg=b.g - ag,bb=b.b - ab;return function(t){return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));};}d3.interpolateObject = d3_interpolateObject;function d3_interpolateObject(a,b){var i={},c={},k;for(k in a) {if(k in b){i[k] = d3_interpolate(a[k],b[k]);}else {c[k] = a[k];}}for(k in b) {if(!(k in a)){c[k] = b[k];}}return function(t){for(k in i) c[k] = i[k](t);return c;};}d3.interpolateNumber = d3_interpolateNumber;function d3_interpolateNumber(a,b){a = +a,b = +b;return function(t){return a * (1 - t) + b * t;};}d3.interpolateString = d3_interpolateString;function d3_interpolateString(a,b){var bi=d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0,am,bm,bs,i=-1,s=[],q=[];a = a + \"\",b = b + \"\";while((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {if((bs = bm.index) > bi){bs = b.slice(bi,bs);if(s[i])s[i] += bs;else s[++i] = bs;}if((am = am[0]) === (bm = bm[0])){if(s[i])s[i] += bm;else s[++i] = bm;}else {s[++i] = null;q.push({i:i,x:d3_interpolateNumber(am,bm)});}bi = d3_interpolate_numberB.lastIndex;}if(bi < b.length){bs = b.slice(bi);if(s[i])s[i] += bs;else s[++i] = bs;}return s.length < 2?q[0]?(b = q[0].x,function(t){return b(t) + \"\";}):function(){return b;}:(b = q.length,function(t){for(var i=0,o;i < b;++i) s[(o = q[i]).i] = o.x(t);return s.join(\"\");});}var d3_interpolate_numberA=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,d3_interpolate_numberB=new RegExp(d3_interpolate_numberA.source,\"g\");d3.interpolate = d3_interpolate;function d3_interpolate(a,b){var i=d3.interpolators.length,f;while(--i >= 0 && !(f = d3.interpolators[i](a,b)));return f;}d3.interpolators = [function(a,b){var t=typeof b;return (t === \"string\"?d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b)?d3_interpolateRgb:d3_interpolateString:b instanceof d3_color?d3_interpolateRgb:Array.isArray(b)?d3_interpolateArray:t === \"object\" && isNaN(b)?d3_interpolateObject:d3_interpolateNumber)(a,b);}];d3.interpolateArray = d3_interpolateArray;function d3_interpolateArray(a,b){var x=[],c=[],na=a.length,nb=b.length,n0=Math.min(a.length,b.length),i;for(i = 0;i < n0;++i) x.push(d3_interpolate(a[i],b[i]));for(;i < na;++i) c[i] = a[i];for(;i < nb;++i) c[i] = b[i];return function(t){for(i = 0;i < n0;++i) c[i] = x[i](t);return c;};}var d3_ease_default=function d3_ease_default(){return d3_identity;};var d3_ease=d3.map({linear:d3_ease_default,poly:d3_ease_poly,quad:function quad(){return d3_ease_quad;},cubic:function cubic(){return d3_ease_cubic;},sin:function sin(){return d3_ease_sin;},exp:function exp(){return d3_ease_exp;},circle:function circle(){return d3_ease_circle;},elastic:d3_ease_elastic,back:d3_ease_back,bounce:function bounce(){return d3_ease_bounce;}});var d3_ease_mode=d3.map({\"in\":d3_identity,out:d3_ease_reverse,\"in-out\":d3_ease_reflect,\"out-in\":function outIn(f){return d3_ease_reflect(d3_ease_reverse(f));}});d3.ease = function(name){var i=name.indexOf(\"-\"),t=i >= 0?name.slice(0,i):name,m=i >= 0?name.slice(i + 1):\"in\";t = d3_ease.get(t) || d3_ease_default;m = d3_ease_mode.get(m) || d3_identity;return d3_ease_clamp(m(t.apply(null,d3_arraySlice.call(arguments,1))));};function d3_ease_clamp(f){return function(t){return t <= 0?0:t >= 1?1:f(t);};}function d3_ease_reverse(f){return function(t){return 1 - f(1 - t);};}function d3_ease_reflect(f){return function(t){return .5 * (t < .5?f(2 * t):2 - f(2 - 2 * t));};}function d3_ease_quad(t){return t * t;}function d3_ease_cubic(t){return t * t * t;}function d3_ease_cubicInOut(t){if(t <= 0)return 0;if(t >= 1)return 1;var t2=t * t,t3=t2 * t;return 4 * (t < .5?t3:3 * (t - t2) + t3 - .75);}function d3_ease_poly(e){return function(t){return Math.pow(t,e);};}function d3_ease_sin(t){return 1 - Math.cos(t * halfπ);}function d3_ease_exp(t){return Math.pow(2,10 * (t - 1));}function d3_ease_circle(t){return 1 - Math.sqrt(1 - t * t);}function d3_ease_elastic(a,p){var s;if(arguments.length < 2)p = .45;if(arguments.length)s = p / τ * Math.asin(1 / a);else a = 1,s = p / 4;return function(t){return 1 + a * Math.pow(2,-10 * t) * Math.sin((t - s) * τ / p);};}function d3_ease_back(s){if(!s)s = 1.70158;return function(t){return t * t * ((s + 1) * t - s);};}function d3_ease_bounce(t){return t < 1 / 2.75?7.5625 * t * t:t < 2 / 2.75?7.5625 * (t -= 1.5 / 2.75) * t + .75:t < 2.5 / 2.75?7.5625 * (t -= 2.25 / 2.75) * t + .9375:7.5625 * (t -= 2.625 / 2.75) * t + .984375;}d3.interpolateHcl = d3_interpolateHcl;function d3_interpolateHcl(a,b){a = d3.hcl(a);b = d3.hcl(b);var ah=a.h,ac=a.c,al=a.l,bh=b.h - ah,bc=b.c - ac,bl=b.l - al;if(isNaN(bc))bc = 0,ac = isNaN(ac)?b.c:ac;if(isNaN(bh))bh = 0,ah = isNaN(ah)?b.h:ah;else if(bh > 180)bh -= 360;else if(bh < -180)bh += 360;return function(t){return d3_hcl_lab(ah + bh * t,ac + bc * t,al + bl * t) + \"\";};}d3.interpolateHsl = d3_interpolateHsl;function d3_interpolateHsl(a,b){a = d3.hsl(a);b = d3.hsl(b);var ah=a.h,as=a.s,al=a.l,bh=b.h - ah,bs=b.s - as,bl=b.l - al;if(isNaN(bs))bs = 0,as = isNaN(as)?b.s:as;if(isNaN(bh))bh = 0,ah = isNaN(ah)?b.h:ah;else if(bh > 180)bh -= 360;else if(bh < -180)bh += 360;return function(t){return d3_hsl_rgb(ah + bh * t,as + bs * t,al + bl * t) + \"\";};}d3.interpolateLab = d3_interpolateLab;function d3_interpolateLab(a,b){a = d3.lab(a);b = d3.lab(b);var al=a.l,aa=a.a,ab=a.b,bl=b.l - al,ba=b.a - aa,bb=b.b - ab;return function(t){return d3_lab_rgb(al + bl * t,aa + ba * t,ab + bb * t) + \"\";};}d3.interpolateRound = d3_interpolateRound;function d3_interpolateRound(a,b){b -= a;return function(t){return Math.round(a + b * t);};}d3.transform = function(string){var g=d3_document.createElementNS(d3.ns.prefix.svg,\"g\");return (d3.transform = function(string){if(string != null){g.setAttribute(\"transform\",string);var t=g.transform.baseVal.consolidate();}return new d3_transform(t?t.matrix:d3_transformIdentity);})(string);};function d3_transform(m){var r0=[m.a,m.b],r1=[m.c,m.d],kx=d3_transformNormalize(r0),kz=d3_transformDot(r0,r1),ky=d3_transformNormalize(d3_transformCombine(r1,r0,-kz)) || 0;if(r0[0] * r1[1] < r1[0] * r0[1]){r0[0] *= -1;r0[1] *= -1;kx *= -1;kz *= -1;}this.rotate = (kx?Math.atan2(r0[1],r0[0]):Math.atan2(-r1[0],r1[1])) * d3_degrees;this.translate = [m.e,m.f];this.scale = [kx,ky];this.skew = ky?Math.atan2(kz,ky) * d3_degrees:0;}d3_transform.prototype.toString = function(){return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";};function d3_transformDot(a,b){return a[0] * b[0] + a[1] * b[1];}function d3_transformNormalize(a){var k=Math.sqrt(d3_transformDot(a,a));if(k){a[0] /= k;a[1] /= k;}return k;}function d3_transformCombine(a,b,k){a[0] += k * b[0];a[1] += k * b[1];return a;}var d3_transformIdentity={a:1,b:0,c:0,d:1,e:0,f:0};d3.interpolateTransform = d3_interpolateTransform;function d3_interpolateTransformPop(s){return s.length?s.pop() + \",\":\"\";}function d3_interpolateTranslate(ta,tb,s,q){if(ta[0] !== tb[0] || ta[1] !== tb[1]){var i=s.push(\"translate(\",null,\",\",null,\")\");q.push({i:i - 4,x:d3_interpolateNumber(ta[0],tb[0])},{i:i - 2,x:d3_interpolateNumber(ta[1],tb[1])});}else if(tb[0] || tb[1]){s.push(\"translate(\" + tb + \")\");}}function d3_interpolateRotate(ra,rb,s,q){if(ra !== rb){if(ra - rb > 180)rb += 360;else if(rb - ra > 180)ra += 360;q.push({i:s.push(d3_interpolateTransformPop(s) + \"rotate(\",null,\")\") - 2,x:d3_interpolateNumber(ra,rb)});}else if(rb){s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");}}function d3_interpolateSkew(wa,wb,s,q){if(wa !== wb){q.push({i:s.push(d3_interpolateTransformPop(s) + \"skewX(\",null,\")\") - 2,x:d3_interpolateNumber(wa,wb)});}else if(wb){s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");}}function d3_interpolateScale(ka,kb,s,q){if(ka[0] !== kb[0] || ka[1] !== kb[1]){var i=s.push(d3_interpolateTransformPop(s) + \"scale(\",null,\",\",null,\")\");q.push({i:i - 4,x:d3_interpolateNumber(ka[0],kb[0])},{i:i - 2,x:d3_interpolateNumber(ka[1],kb[1])});}else if(kb[0] !== 1 || kb[1] !== 1){s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");}}function d3_interpolateTransform(a,b){var s=[],q=[];a = d3.transform(a),b = d3.transform(b);d3_interpolateTranslate(a.translate,b.translate,s,q);d3_interpolateRotate(a.rotate,b.rotate,s,q);d3_interpolateSkew(a.skew,b.skew,s,q);d3_interpolateScale(a.scale,b.scale,s,q);a = b = null;return function(t){var i=-1,n=q.length,o;while(++i < n) s[(o = q[i]).i] = o.x(t);return s.join(\"\");};}function d3_uninterpolateNumber(a,b){b = (b -= a = +a) || 1 / b;return function(x){return (x - a) / b;};}function d3_uninterpolateClamp(a,b){b = (b -= a = +a) || 1 / b;return function(x){return Math.max(0,Math.min(1,(x - a) / b));};}d3.layout = {};d3.layout.bundle = function(){return function(links){var paths=[],i=-1,n=links.length;while(++i < n) paths.push(d3_layout_bundlePath(links[i]));return paths;};};function d3_layout_bundlePath(link){var start=link.source,end=link.target,lca=d3_layout_bundleLeastCommonAncestor(start,end),points=[start];while(start !== lca) {start = start.parent;points.push(start);}var k=points.length;while(end !== lca) {points.splice(k,0,end);end = end.parent;}return points;}function d3_layout_bundleAncestors(node){var ancestors=[],parent=node.parent;while(parent != null) {ancestors.push(node);node = parent;parent = parent.parent;}ancestors.push(node);return ancestors;}function d3_layout_bundleLeastCommonAncestor(a,b){if(a === b)return a;var aNodes=d3_layout_bundleAncestors(a),bNodes=d3_layout_bundleAncestors(b),aNode=aNodes.pop(),bNode=bNodes.pop(),sharedNode=null;while(aNode === bNode) {sharedNode = aNode;aNode = aNodes.pop();bNode = bNodes.pop();}return sharedNode;}d3.layout.chord = function(){var chord={},chords,groups,matrix,n,padding=0,sortGroups,sortSubgroups,sortChords;function relayout(){var subgroups={},groupSums=[],groupIndex=d3.range(n),subgroupIndex=[],k,x,x0,i,j;chords = [];groups = [];k = 0,i = -1;while(++i < n) {x = 0,j = -1;while(++j < n) {x += matrix[i][j];}groupSums.push(x);subgroupIndex.push(d3.range(n));k += x;}if(sortGroups){groupIndex.sort(function(a,b){return sortGroups(groupSums[a],groupSums[b]);});}if(sortSubgroups){subgroupIndex.forEach(function(d,i){d.sort(function(a,b){return sortSubgroups(matrix[i][a],matrix[i][b]);});});}k = (τ - padding * n) / k;x = 0,i = -1;while(++i < n) {x0 = x,j = -1;while(++j < n) {var di=groupIndex[i],dj=subgroupIndex[di][j],v=matrix[di][dj],a0=x,a1=x += v * k;subgroups[di + \"-\" + dj] = {index:di,subindex:dj,startAngle:a0,endAngle:a1,value:v};}groups[di] = {index:di,startAngle:x0,endAngle:x,value:(x - x0) / k};x += padding;}i = -1;while(++i < n) {j = i - 1;while(++j < n) {var source=subgroups[i + \"-\" + j],target=subgroups[j + \"-\" + i];if(source.value || target.value){chords.push(source.value < target.value?{source:target,target:source}:{source:source,target:target});}}}if(sortChords)resort();}function resort(){chords.sort(function(a,b){return sortChords((a.source.value + a.target.value) / 2,(b.source.value + b.target.value) / 2);});}chord.matrix = function(x){if(!arguments.length)return matrix;n = (matrix = x) && matrix.length;chords = groups = null;return chord;};chord.padding = function(x){if(!arguments.length)return padding;padding = x;chords = groups = null;return chord;};chord.sortGroups = function(x){if(!arguments.length)return sortGroups;sortGroups = x;chords = groups = null;return chord;};chord.sortSubgroups = function(x){if(!arguments.length)return sortSubgroups;sortSubgroups = x;chords = null;return chord;};chord.sortChords = function(x){if(!arguments.length)return sortChords;sortChords = x;if(chords)resort();return chord;};chord.chords = function(){if(!chords)relayout();return chords;};chord.groups = function(){if(!groups)relayout();return groups;};return chord;};d3.layout.force = function(){var force={},event=d3.dispatch(\"start\",\"tick\",\"end\"),timer,size=[1,1],drag,alpha,friction=.9,linkDistance=d3_layout_forceLinkDistance,linkStrength=d3_layout_forceLinkStrength,charge=-30,chargeDistance2=d3_layout_forceChargeDistance2,gravity=.1,theta2=.64,nodes=[],links=[],distances,strengths,charges;function repulse(node){return function(quad,x1,_,x2){if(quad.point !== node){var dx=quad.cx - node.x,dy=quad.cy - node.y,dw=x2 - x1,dn=dx * dx + dy * dy;if(dw * dw / theta2 < dn){if(dn < chargeDistance2){var k=quad.charge / dn;node.px -= dx * k;node.py -= dy * k;}return true;}if(quad.point && dn && dn < chargeDistance2){var k=quad.pointCharge / dn;node.px -= dx * k;node.py -= dy * k;}}return !quad.charge;};}force.tick = function(){if((alpha *= .99) < .005){timer = null;event.end({type:\"end\",alpha:alpha = 0});return true;}var n=nodes.length,m=links.length,q,i,o,s,t,l,k,x,y;for(i = 0;i < m;++i) {o = links[i];s = o.source;t = o.target;x = t.x - s.x;y = t.y - s.y;if(l = x * x + y * y){l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;x *= l;y *= l;t.x -= x * (k = s.weight + t.weight?s.weight / (s.weight + t.weight):.5);t.y -= y * k;s.x += x * (k = 1 - k);s.y += y * k;}}if(k = alpha * gravity){x = size[0] / 2;y = size[1] / 2;i = -1;if(k)while(++i < n) {o = nodes[i];o.x += (x - o.x) * k;o.y += (y - o.y) * k;}}if(charge){d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes),alpha,charges);i = -1;while(++i < n) {if(!(o = nodes[i]).fixed){q.visit(repulse(o));}}}i = -1;while(++i < n) {o = nodes[i];if(o.fixed){o.x = o.px;o.y = o.py;}else {o.x -= (o.px - (o.px = o.x)) * friction;o.y -= (o.py - (o.py = o.y)) * friction;}}event.tick({type:\"tick\",alpha:alpha});};force.nodes = function(x){if(!arguments.length)return nodes;nodes = x;return force;};force.links = function(x){if(!arguments.length)return links;links = x;return force;};force.size = function(x){if(!arguments.length)return size;size = x;return force;};force.linkDistance = function(x){if(!arguments.length)return linkDistance;linkDistance = typeof x === \"function\"?x:+x;return force;};force.distance = force.linkDistance;force.linkStrength = function(x){if(!arguments.length)return linkStrength;linkStrength = typeof x === \"function\"?x:+x;return force;};force.friction = function(x){if(!arguments.length)return friction;friction = +x;return force;};force.charge = function(x){if(!arguments.length)return charge;charge = typeof x === \"function\"?x:+x;return force;};force.chargeDistance = function(x){if(!arguments.length)return Math.sqrt(chargeDistance2);chargeDistance2 = x * x;return force;};force.gravity = function(x){if(!arguments.length)return gravity;gravity = +x;return force;};force.theta = function(x){if(!arguments.length)return Math.sqrt(theta2);theta2 = x * x;return force;};force.alpha = function(x){if(!arguments.length)return alpha;x = +x;if(alpha){if(x > 0){alpha = x;}else {timer.c = null,timer.t = NaN,timer = null;event.start({type:\"end\",alpha:alpha = 0});}}else if(x > 0){event.start({type:\"start\",alpha:alpha = x});timer = d3_timer(force.tick);}return force;};force.start = function(){var i,n=nodes.length,m=links.length,w=size[0],h=size[1],neighbors,o;for(i = 0;i < n;++i) {(o = nodes[i]).index = i;o.weight = 0;}for(i = 0;i < m;++i) {o = links[i];if(typeof o.source == \"number\")o.source = nodes[o.source];if(typeof o.target == \"number\")o.target = nodes[o.target];++o.source.weight;++o.target.weight;}for(i = 0;i < n;++i) {o = nodes[i];if(isNaN(o.x))o.x = position(\"x\",w);if(isNaN(o.y))o.y = position(\"y\",h);if(isNaN(o.px))o.px = o.x;if(isNaN(o.py))o.py = o.y;}distances = [];if(typeof linkDistance === \"function\")for(i = 0;i < m;++i) distances[i] = +linkDistance.call(this,links[i],i);else for(i = 0;i < m;++i) distances[i] = linkDistance;strengths = [];if(typeof linkStrength === \"function\")for(i = 0;i < m;++i) strengths[i] = +linkStrength.call(this,links[i],i);else for(i = 0;i < m;++i) strengths[i] = linkStrength;charges = [];if(typeof charge === \"function\")for(i = 0;i < n;++i) charges[i] = +charge.call(this,nodes[i],i);else for(i = 0;i < n;++i) charges[i] = charge;function position(dimension,size){if(!neighbors){neighbors = new Array(n);for(j = 0;j < n;++j) {neighbors[j] = [];}for(j = 0;j < m;++j) {var o=links[j];neighbors[o.source.index].push(o.target);neighbors[o.target.index].push(o.source);}}var candidates=neighbors[i],j=-1,l=candidates.length,x;while(++j < l) if(!isNaN(x = candidates[j][dimension]))return x;return Math.random() * size;}return force.resume();};force.resume = function(){return force.alpha(.1);};force.stop = function(){return force.alpha(0);};force.drag = function(){if(!drag)drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\",d3_layout_forceDragstart).on(\"drag.force\",dragmove).on(\"dragend.force\",d3_layout_forceDragend);if(!arguments.length)return drag;this.on(\"mouseover.force\",d3_layout_forceMouseover).on(\"mouseout.force\",d3_layout_forceMouseout).call(drag);};function dragmove(d){d.px = d3.event.x,d.py = d3.event.y;force.resume();}return d3.rebind(force,event,\"on\");};function d3_layout_forceDragstart(d){d.fixed |= 2;}function d3_layout_forceDragend(d){d.fixed &= ~6;}function d3_layout_forceMouseover(d){d.fixed |= 4;d.px = d.x,d.py = d.y;}function d3_layout_forceMouseout(d){d.fixed &= ~4;}function d3_layout_forceAccumulate(quad,alpha,charges){var cx=0,cy=0;quad.charge = 0;if(!quad.leaf){var nodes=quad.nodes,n=nodes.length,i=-1,c;while(++i < n) {c = nodes[i];if(c == null)continue;d3_layout_forceAccumulate(c,alpha,charges);quad.charge += c.charge;cx += c.charge * c.cx;cy += c.charge * c.cy;}}if(quad.point){if(!quad.leaf){quad.point.x += Math.random() - .5;quad.point.y += Math.random() - .5;}var k=alpha * charges[quad.point.index];quad.charge += quad.pointCharge = k;cx += k * quad.point.x;cy += k * quad.point.y;}quad.cx = cx / quad.charge;quad.cy = cy / quad.charge;}var d3_layout_forceLinkDistance=20,d3_layout_forceLinkStrength=1,d3_layout_forceChargeDistance2=Infinity;d3.layout.hierarchy = function(){var sort=d3_layout_hierarchySort,children=d3_layout_hierarchyChildren,value=d3_layout_hierarchyValue;function hierarchy(root){var stack=[root],nodes=[],node;root.depth = 0;while((node = stack.pop()) != null) {nodes.push(node);if((childs = children.call(hierarchy,node,node.depth)) && (n = childs.length)){var n,childs,child;while(--n >= 0) {stack.push(child = childs[n]);child.parent = node;child.depth = node.depth + 1;}if(value)node.value = 0;node.children = childs;}else {if(value)node.value = +value.call(hierarchy,node,node.depth) || 0;delete node.children;}}d3_layout_hierarchyVisitAfter(root,function(node){var childs,parent;if(sort && (childs = node.children))childs.sort(sort);if(value && (parent = node.parent))parent.value += node.value;});return nodes;}hierarchy.sort = function(x){if(!arguments.length)return sort;sort = x;return hierarchy;};hierarchy.children = function(x){if(!arguments.length)return children;children = x;return hierarchy;};hierarchy.value = function(x){if(!arguments.length)return value;value = x;return hierarchy;};hierarchy.revalue = function(root){if(value){d3_layout_hierarchyVisitBefore(root,function(node){if(node.children)node.value = 0;});d3_layout_hierarchyVisitAfter(root,function(node){var parent;if(!node.children)node.value = +value.call(hierarchy,node,node.depth) || 0;if(parent = node.parent)parent.value += node.value;});}return root;};return hierarchy;};function d3_layout_hierarchyRebind(object,hierarchy){d3.rebind(object,hierarchy,\"sort\",\"children\",\"value\");object.nodes = object;object.links = d3_layout_hierarchyLinks;return object;}function d3_layout_hierarchyVisitBefore(node,callback){var nodes=[node];while((node = nodes.pop()) != null) {callback(node);if((children = node.children) && (n = children.length)){var n,children;while(--n >= 0) nodes.push(children[n]);}}}function d3_layout_hierarchyVisitAfter(node,callback){var nodes=[node],nodes2=[];while((node = nodes.pop()) != null) {nodes2.push(node);if((children = node.children) && (n = children.length)){var i=-1,n,children;while(++i < n) nodes.push(children[i]);}}while((node = nodes2.pop()) != null) {callback(node);}}function d3_layout_hierarchyChildren(d){return d.children;}function d3_layout_hierarchyValue(d){return d.value;}function d3_layout_hierarchySort(a,b){return b.value - a.value;}function d3_layout_hierarchyLinks(nodes){return d3.merge(nodes.map(function(parent){return (parent.children || []).map(function(child){return {source:parent,target:child};});}));}d3.layout.partition = function(){var hierarchy=d3.layout.hierarchy(),size=[1,1];function position(node,x,dx,dy){var children=node.children;node.x = x;node.y = node.depth * dy;node.dx = dx;node.dy = dy;if(children && (n = children.length)){var i=-1,n,c,d;dx = node.value?dx / node.value:0;while(++i < n) {position(c = children[i],x,d = c.value * dx,dy);x += d;}}}function depth(node){var children=node.children,d=0;if(children && (n = children.length)){var i=-1,n;while(++i < n) d = Math.max(d,depth(children[i]));}return 1 + d;}function partition(d,i){var nodes=hierarchy.call(this,d,i);position(nodes[0],0,size[0],size[1] / depth(nodes[0]));return nodes;}partition.size = function(x){if(!arguments.length)return size;size = x;return partition;};return d3_layout_hierarchyRebind(partition,hierarchy);};d3.layout.pie = function(){var value=Number,sort=d3_layout_pieSortByValue,startAngle=0,endAngle=τ,padAngle=0;function pie(data){var n=data.length,values=data.map(function(d,i){return +value.call(pie,d,i);}),a=+(typeof startAngle === \"function\"?startAngle.apply(this,arguments):startAngle),da=(typeof endAngle === \"function\"?endAngle.apply(this,arguments):endAngle) - a,p=Math.min(Math.abs(da) / n,+(typeof padAngle === \"function\"?padAngle.apply(this,arguments):padAngle)),pa=p * (da < 0?-1:1),sum=d3.sum(values),k=sum?(da - n * pa) / sum:0,index=d3.range(n),arcs=[],v;if(sort != null)index.sort(sort === d3_layout_pieSortByValue?function(i,j){return values[j] - values[i];}:function(i,j){return sort(data[i],data[j]);});index.forEach(function(i){arcs[i] = {data:data[i],value:v = values[i],startAngle:a,endAngle:a += v * k + pa,padAngle:p};});return arcs;}pie.value = function(_){if(!arguments.length)return value;value = _;return pie;};pie.sort = function(_){if(!arguments.length)return sort;sort = _;return pie;};pie.startAngle = function(_){if(!arguments.length)return startAngle;startAngle = _;return pie;};pie.endAngle = function(_){if(!arguments.length)return endAngle;endAngle = _;return pie;};pie.padAngle = function(_){if(!arguments.length)return padAngle;padAngle = _;return pie;};return pie;};var d3_layout_pieSortByValue={};d3.layout.stack = function(){var values=d3_identity,order=d3_layout_stackOrderDefault,offset=d3_layout_stackOffsetZero,out=d3_layout_stackOut,x=d3_layout_stackX,y=d3_layout_stackY;function stack(data,index){if(!(n = data.length))return data;var series=data.map(function(d,i){return values.call(stack,d,i);});var points=series.map(function(d){return d.map(function(v,i){return [x.call(stack,v,i),y.call(stack,v,i)];});});var orders=order.call(stack,points,index);series = d3.permute(series,orders);points = d3.permute(points,orders);var offsets=offset.call(stack,points,index);var m=series[0].length,n,i,j,o;for(j = 0;j < m;++j) {out.call(stack,series[0][j],o = offsets[j],points[0][j][1]);for(i = 1;i < n;++i) {out.call(stack,series[i][j],o += points[i - 1][j][1],points[i][j][1]);}}return data;}stack.values = function(x){if(!arguments.length)return values;values = x;return stack;};stack.order = function(x){if(!arguments.length)return order;order = typeof x === \"function\"?x:d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;return stack;};stack.offset = function(x){if(!arguments.length)return offset;offset = typeof x === \"function\"?x:d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;return stack;};stack.x = function(z){if(!arguments.length)return x;x = z;return stack;};stack.y = function(z){if(!arguments.length)return y;y = z;return stack;};stack.out = function(z){if(!arguments.length)return out;out = z;return stack;};return stack;};function d3_layout_stackX(d){return d.x;}function d3_layout_stackY(d){return d.y;}function d3_layout_stackOut(d,y0,y){d.y0 = y0;d.y = y;}var d3_layout_stackOrders=d3.map({\"inside-out\":function insideOut(data){var n=data.length,i,j,max=data.map(d3_layout_stackMaxIndex),sums=data.map(d3_layout_stackReduceSum),index=d3.range(n).sort(function(a,b){return max[a] - max[b];}),top=0,bottom=0,tops=[],bottoms=[];for(i = 0;i < n;++i) {j = index[i];if(top < bottom){top += sums[j];tops.push(j);}else {bottom += sums[j];bottoms.push(j);}}return bottoms.reverse().concat(tops);},reverse:function reverse(data){return d3.range(data.length).reverse();},\"default\":d3_layout_stackOrderDefault});var d3_layout_stackOffsets=d3.map({silhouette:function silhouette(data){var n=data.length,m=data[0].length,sums=[],max=0,i,j,o,y0=[];for(j = 0;j < m;++j) {for(i = 0,o = 0;i < n;i++) o += data[i][j][1];if(o > max)max = o;sums.push(o);}for(j = 0;j < m;++j) {y0[j] = (max - sums[j]) / 2;}return y0;},wiggle:function wiggle(data){var n=data.length,x=data[0],m=x.length,i,j,k,s1,s2,s3,dx,o,o0,y0=[];y0[0] = o = o0 = 0;for(j = 1;j < m;++j) {for(i = 0,s1 = 0;i < n;++i) s1 += data[i][j][1];for(i = 0,s2 = 0,dx = x[j][0] - x[j - 1][0];i < n;++i) {for(k = 0,s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx);k < i;++k) {s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;}s2 += s3 * data[i][j][1];}y0[j] = o -= s1?s2 / s1 * dx:0;if(o < o0)o0 = o;}for(j = 0;j < m;++j) y0[j] -= o0;return y0;},expand:function expand(data){var n=data.length,m=data[0].length,k=1 / n,i,j,o,y0=[];for(j = 0;j < m;++j) {for(i = 0,o = 0;i < n;i++) o += data[i][j][1];if(o)for(i = 0;i < n;i++) data[i][j][1] /= o;else for(i = 0;i < n;i++) data[i][j][1] = k;}for(j = 0;j < m;++j) y0[j] = 0;return y0;},zero:d3_layout_stackOffsetZero});function d3_layout_stackOrderDefault(data){return d3.range(data.length);}function d3_layout_stackOffsetZero(data){var j=-1,m=data[0].length,y0=[];while(++j < m) y0[j] = 0;return y0;}function d3_layout_stackMaxIndex(array){var i=1,j=0,v=array[0][1],k,n=array.length;for(;i < n;++i) {if((k = array[i][1]) > v){j = i;v = k;}}return j;}function d3_layout_stackReduceSum(d){return d.reduce(d3_layout_stackSum,0);}function d3_layout_stackSum(p,d){return p + d[1];}d3.layout.histogram = function(){var frequency=true,valuer=Number,ranger=d3_layout_histogramRange,binner=d3_layout_histogramBinSturges;function histogram(data,i){var bins=[],values=data.map(valuer,this),range=ranger.call(this,values,i),thresholds=binner.call(this,range,values,i),bin,i=-1,n=values.length,m=thresholds.length - 1,k=frequency?1:1 / n,x;while(++i < m) {bin = bins[i] = [];bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);bin.y = 0;}if(m > 0){i = -1;while(++i < n) {x = values[i];if(x >= range[0] && x <= range[1]){bin = bins[d3.bisect(thresholds,x,1,m) - 1];bin.y += k;bin.push(data[i]);}}}return bins;}histogram.value = function(x){if(!arguments.length)return valuer;valuer = x;return histogram;};histogram.range = function(x){if(!arguments.length)return ranger;ranger = d3_functor(x);return histogram;};histogram.bins = function(x){if(!arguments.length)return binner;binner = typeof x === \"number\"?function(range){return d3_layout_histogramBinFixed(range,x);}:d3_functor(x);return histogram;};histogram.frequency = function(x){if(!arguments.length)return frequency;frequency = !!x;return histogram;};return histogram;};function d3_layout_histogramBinSturges(range,values){return d3_layout_histogramBinFixed(range,Math.ceil(Math.log(values.length) / Math.LN2 + 1));}function d3_layout_histogramBinFixed(range,n){var x=-1,b=+range[0],m=(range[1] - b) / n,f=[];while(++x <= n) f[x] = m * x + b;return f;}function d3_layout_histogramRange(values){return [d3.min(values),d3.max(values)];}d3.layout.pack = function(){var hierarchy=d3.layout.hierarchy().sort(d3_layout_packSort),padding=0,size=[1,1],radius;function pack(d,i){var nodes=hierarchy.call(this,d,i),root=nodes[0],w=size[0],h=size[1],r=radius == null?Math.sqrt:typeof radius === \"function\"?radius:function(){return radius;};root.x = root.y = 0;d3_layout_hierarchyVisitAfter(root,function(d){d.r = +r(d.value);});d3_layout_hierarchyVisitAfter(root,d3_layout_packSiblings);if(padding){var dr=padding * (radius?1:Math.max(2 * root.r / w,2 * root.r / h)) / 2;d3_layout_hierarchyVisitAfter(root,function(d){d.r += dr;});d3_layout_hierarchyVisitAfter(root,d3_layout_packSiblings);d3_layout_hierarchyVisitAfter(root,function(d){d.r -= dr;});}d3_layout_packTransform(root,w / 2,h / 2,radius?1:1 / Math.max(2 * root.r / w,2 * root.r / h));return nodes;}pack.size = function(_){if(!arguments.length)return size;size = _;return pack;};pack.radius = function(_){if(!arguments.length)return radius;radius = _ == null || typeof _ === \"function\"?_:+_;return pack;};pack.padding = function(_){if(!arguments.length)return padding;padding = +_;return pack;};return d3_layout_hierarchyRebind(pack,hierarchy);};function d3_layout_packSort(a,b){return a.value - b.value;}function d3_layout_packInsert(a,b){var c=a._pack_next;a._pack_next = b;b._pack_prev = a;b._pack_next = c;c._pack_prev = b;}function d3_layout_packSplice(a,b){a._pack_next = b;b._pack_prev = a;}function d3_layout_packIntersects(a,b){var dx=b.x - a.x,dy=b.y - a.y,dr=a.r + b.r;return .999 * dr * dr > dx * dx + dy * dy;}function d3_layout_packSiblings(node){if(!(nodes = node.children) || !(n = nodes.length))return;var nodes,xMin=Infinity,xMax=-Infinity,yMin=Infinity,yMax=-Infinity,a,b,c,i,j,k,n;function bound(node){xMin = Math.min(node.x - node.r,xMin);xMax = Math.max(node.x + node.r,xMax);yMin = Math.min(node.y - node.r,yMin);yMax = Math.max(node.y + node.r,yMax);}nodes.forEach(d3_layout_packLink);a = nodes[0];a.x = -a.r;a.y = 0;bound(a);if(n > 1){b = nodes[1];b.x = b.r;b.y = 0;bound(b);if(n > 2){c = nodes[2];d3_layout_packPlace(a,b,c);bound(c);d3_layout_packInsert(a,c);a._pack_prev = c;d3_layout_packInsert(c,b);b = a._pack_next;for(i = 3;i < n;i++) {d3_layout_packPlace(a,b,c = nodes[i]);var isect=0,s1=1,s2=1;for(j = b._pack_next;j !== b;j = j._pack_next,s1++) {if(d3_layout_packIntersects(j,c)){isect = 1;break;}}if(isect == 1){for(k = a._pack_prev;k !== j._pack_prev;k = k._pack_prev,s2++) {if(d3_layout_packIntersects(k,c)){break;}}}if(isect){if(s1 < s2 || s1 == s2 && b.r < a.r)d3_layout_packSplice(a,b = j);else d3_layout_packSplice(a = k,b);i--;}else {d3_layout_packInsert(a,c);b = c;bound(c);}}}}var cx=(xMin + xMax) / 2,cy=(yMin + yMax) / 2,cr=0;for(i = 0;i < n;i++) {c = nodes[i];c.x -= cx;c.y -= cy;cr = Math.max(cr,c.r + Math.sqrt(c.x * c.x + c.y * c.y));}node.r = cr;nodes.forEach(d3_layout_packUnlink);}function d3_layout_packLink(node){node._pack_next = node._pack_prev = node;}function d3_layout_packUnlink(node){delete node._pack_next;delete node._pack_prev;}function d3_layout_packTransform(node,x,y,k){var children=node.children;node.x = x += k * node.x;node.y = y += k * node.y;node.r *= k;if(children){var i=-1,n=children.length;while(++i < n) d3_layout_packTransform(children[i],x,y,k);}}function d3_layout_packPlace(a,b,c){var db=a.r + c.r,dx=b.x - a.x,dy=b.y - a.y;if(db && (dx || dy)){var da=b.r + c.r,dc=dx * dx + dy * dy;da *= da;db *= db;var x=.5 + (db - da) / (2 * dc),y=Math.sqrt(Math.max(0,2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);c.x = a.x + x * dx + y * dy;c.y = a.y + x * dy - y * dx;}else {c.x = a.x + db;c.y = a.y;}}d3.layout.tree = function(){var hierarchy=d3.layout.hierarchy().sort(null).value(null),separation=d3_layout_treeSeparation,size=[1,1],nodeSize=null;function tree(d,i){var nodes=hierarchy.call(this,d,i),root0=nodes[0],root1=wrapTree(root0);d3_layout_hierarchyVisitAfter(root1,firstWalk),root1.parent.m = -root1.z;d3_layout_hierarchyVisitBefore(root1,secondWalk);if(nodeSize)d3_layout_hierarchyVisitBefore(root0,sizeNode);else {var left=root0,right=root0,bottom=root0;d3_layout_hierarchyVisitBefore(root0,function(node){if(node.x < left.x)left = node;if(node.x > right.x)right = node;if(node.depth > bottom.depth)bottom = node;});var tx=separation(left,right) / 2 - left.x,kx=size[0] / (right.x + separation(right,left) / 2 + tx),ky=size[1] / (bottom.depth || 1);d3_layout_hierarchyVisitBefore(root0,function(node){node.x = (node.x + tx) * kx;node.y = node.depth * ky;});}return nodes;}function wrapTree(root0){var root1={A:null,children:[root0]},queue=[root1],node1;while((node1 = queue.pop()) != null) {for(var children=node1.children,child,i=0,n=children.length;i < n;++i) {queue.push((children[i] = child = {_:children[i],parent:node1,children:(child = children[i].children) && child.slice() || [],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:i}).a = child);}}return root1.children[0];}function firstWalk(v){var children=v.children,siblings=v.parent.children,w=v.i?siblings[v.i - 1]:null;if(children.length){d3_layout_treeShift(v);var midpoint=(children[0].z + children[children.length - 1].z) / 2;if(w){v.z = w.z + separation(v._,w._);v.m = v.z - midpoint;}else {v.z = midpoint;}}else if(w){v.z = w.z + separation(v._,w._);}v.parent.A = apportion(v,w,v.parent.A || siblings[0]);}function secondWalk(v){v._.x = v.z + v.parent.m;v.m += v.parent.m;}function apportion(v,w,ancestor){if(w){var vip=v,vop=v,vim=w,vom=vip.parent.children[0],sip=vip.m,sop=vop.m,sim=vim.m,som=vom.m,shift;while((vim = d3_layout_treeRight(vim),vip = d3_layout_treeLeft(vip),vim && vip)) {vom = d3_layout_treeLeft(vom);vop = d3_layout_treeRight(vop);vop.a = v;shift = vim.z + sim - vip.z - sip + separation(vim._,vip._);if(shift > 0){d3_layout_treeMove(d3_layout_treeAncestor(vim,v,ancestor),v,shift);sip += shift;sop += shift;}sim += vim.m;sip += vip.m;som += vom.m;sop += vop.m;}if(vim && !d3_layout_treeRight(vop)){vop.t = vim;vop.m += sim - sop;}if(vip && !d3_layout_treeLeft(vom)){vom.t = vip;vom.m += sip - som;ancestor = v;}}return ancestor;}function sizeNode(node){node.x *= size[0];node.y = node.depth * size[1];}tree.separation = function(x){if(!arguments.length)return separation;separation = x;return tree;};tree.size = function(x){if(!arguments.length)return nodeSize?null:size;nodeSize = (size = x) == null?sizeNode:null;return tree;};tree.nodeSize = function(x){if(!arguments.length)return nodeSize?size:null;nodeSize = (size = x) == null?null:sizeNode;return tree;};return d3_layout_hierarchyRebind(tree,hierarchy);};function d3_layout_treeSeparation(a,b){return a.parent == b.parent?1:2;}function d3_layout_treeLeft(v){var children=v.children;return children.length?children[0]:v.t;}function d3_layout_treeRight(v){var children=v.children,n;return (n = children.length)?children[n - 1]:v.t;}function d3_layout_treeMove(wm,wp,shift){var change=shift / (wp.i - wm.i);wp.c -= change;wp.s += shift;wm.c += change;wp.z += shift;wp.m += shift;}function d3_layout_treeShift(v){var shift=0,change=0,children=v.children,i=children.length,w;while(--i >= 0) {w = children[i];w.z += shift;w.m += shift;shift += w.s + (change += w.c);}}function d3_layout_treeAncestor(vim,v,ancestor){return vim.a.parent === v.parent?vim.a:ancestor;}d3.layout.cluster = function(){var hierarchy=d3.layout.hierarchy().sort(null).value(null),separation=d3_layout_treeSeparation,size=[1,1],nodeSize=false;function cluster(d,i){var nodes=hierarchy.call(this,d,i),root=nodes[0],previousNode,x=0;d3_layout_hierarchyVisitAfter(root,function(node){var children=node.children;if(children && children.length){node.x = d3_layout_clusterX(children);node.y = d3_layout_clusterY(children);}else {node.x = previousNode?x += separation(node,previousNode):0;node.y = 0;previousNode = node;}});var left=d3_layout_clusterLeft(root),right=d3_layout_clusterRight(root),x0=left.x - separation(left,right) / 2,x1=right.x + separation(right,left) / 2;d3_layout_hierarchyVisitAfter(root,nodeSize?function(node){node.x = (node.x - root.x) * size[0];node.y = (root.y - node.y) * size[1];}:function(node){node.x = (node.x - x0) / (x1 - x0) * size[0];node.y = (1 - (root.y?node.y / root.y:1)) * size[1];});return nodes;}cluster.separation = function(x){if(!arguments.length)return separation;separation = x;return cluster;};cluster.size = function(x){if(!arguments.length)return nodeSize?null:size;nodeSize = (size = x) == null;return cluster;};cluster.nodeSize = function(x){if(!arguments.length)return nodeSize?size:null;nodeSize = (size = x) != null;return cluster;};return d3_layout_hierarchyRebind(cluster,hierarchy);};function d3_layout_clusterY(children){return 1 + d3.max(children,function(child){return child.y;});}function d3_layout_clusterX(children){return children.reduce(function(x,child){return x + child.x;},0) / children.length;}function d3_layout_clusterLeft(_x2){var _again=true;_function: while(_again) {var node=_x2;_again = false;var children=node.children;if(children && children.length){_x2 = children[0];_again = true;children = undefined;continue _function;}else {return node;}}}function d3_layout_clusterRight(_x3){var _again2=true;_function2: while(_again2) {var node=_x3;_again2 = false;var children=node.children,n;if(children && (n = children.length)){_x3 = children[n - 1];_again2 = true;children = n = undefined;continue _function2;}else {return node;}}}d3.layout.treemap = function(){var hierarchy=d3.layout.hierarchy(),round=Math.round,size=[1,1],padding=null,pad=d3_layout_treemapPadNull,sticky=false,stickies,mode=\"squarify\",ratio=.5 * (1 + Math.sqrt(5));function scale(children,k){var i=-1,n=children.length,child,area;while(++i < n) {area = (child = children[i]).value * (k < 0?0:k);child.area = isNaN(area) || area <= 0?0:area;}}function squarify(node){var children=node.children;if(children && children.length){var rect=pad(node),row=[],remaining=children.slice(),child,best=Infinity,score,u=mode === \"slice\"?rect.dx:mode === \"dice\"?rect.dy:mode === \"slice-dice\"?node.depth & 1?rect.dy:rect.dx:Math.min(rect.dx,rect.dy),n;scale(remaining,rect.dx * rect.dy / node.value);row.area = 0;while((n = remaining.length) > 0) {row.push(child = remaining[n - 1]);row.area += child.area;if(mode !== \"squarify\" || (score = worst(row,u)) <= best){remaining.pop();best = score;}else {row.area -= row.pop().area;position(row,u,rect,false);u = Math.min(rect.dx,rect.dy);row.length = row.area = 0;best = Infinity;}}if(row.length){position(row,u,rect,true);row.length = row.area = 0;}children.forEach(squarify);}}function stickify(node){var children=node.children;if(children && children.length){var rect=pad(node),remaining=children.slice(),child,row=[];scale(remaining,rect.dx * rect.dy / node.value);row.area = 0;while(child = remaining.pop()) {row.push(child);row.area += child.area;if(child.z != null){position(row,child.z?rect.dx:rect.dy,rect,!remaining.length);row.length = row.area = 0;}}children.forEach(stickify);}}function worst(row,u){var s=row.area,r,rmax=0,rmin=Infinity,i=-1,n=row.length;while(++i < n) {if(!(r = row[i].area))continue;if(r < rmin)rmin = r;if(r > rmax)rmax = r;}s *= s;u *= u;return s?Math.max(u * rmax * ratio / s,s / (u * rmin * ratio)):Infinity;}function position(row,u,rect,flush){var i=-1,n=row.length,x=rect.x,y=rect.y,v=u?round(row.area / u):0,o;if(u == rect.dx){if(flush || v > rect.dy)v = rect.dy;while(++i < n) {o = row[i];o.x = x;o.y = y;o.dy = v;x += o.dx = Math.min(rect.x + rect.dx - x,v?round(o.area / v):0);}o.z = true;o.dx += rect.x + rect.dx - x;rect.y += v;rect.dy -= v;}else {if(flush || v > rect.dx)v = rect.dx;while(++i < n) {o = row[i];o.x = x;o.y = y;o.dx = v;y += o.dy = Math.min(rect.y + rect.dy - y,v?round(o.area / v):0);}o.z = false;o.dy += rect.y + rect.dy - y;rect.x += v;rect.dx -= v;}}function treemap(d){var nodes=stickies || hierarchy(d),root=nodes[0];root.x = root.y = 0;if(root.value)root.dx = size[0],root.dy = size[1];else root.dx = root.dy = 0;if(stickies)hierarchy.revalue(root);scale([root],root.dx * root.dy / root.value);(stickies?stickify:squarify)(root);if(sticky)stickies = nodes;return nodes;}treemap.size = function(x){if(!arguments.length)return size;size = x;return treemap;};treemap.padding = function(x){if(!arguments.length)return padding;function padFunction(node){var p=x.call(treemap,node,node.depth);return p == null?d3_layout_treemapPadNull(node):d3_layout_treemapPad(node,typeof p === \"number\"?[p,p,p,p]:p);}function padConstant(node){return d3_layout_treemapPad(node,x);}var type;pad = (padding = x) == null?d3_layout_treemapPadNull:(type = typeof x) === \"function\"?padFunction:type === \"number\"?(x = [x,x,x,x],padConstant):padConstant;return treemap;};treemap.round = function(x){if(!arguments.length)return round != Number;round = x?Math.round:Number;return treemap;};treemap.sticky = function(x){if(!arguments.length)return sticky;sticky = x;stickies = null;return treemap;};treemap.ratio = function(x){if(!arguments.length)return ratio;ratio = x;return treemap;};treemap.mode = function(x){if(!arguments.length)return mode;mode = x + \"\";return treemap;};return d3_layout_hierarchyRebind(treemap,hierarchy);};function d3_layout_treemapPadNull(node){return {x:node.x,y:node.y,dx:node.dx,dy:node.dy};}function d3_layout_treemapPad(node,padding){var x=node.x + padding[3],y=node.y + padding[0],dx=node.dx - padding[1] - padding[3],dy=node.dy - padding[0] - padding[2];if(dx < 0){x += dx / 2;dx = 0;}if(dy < 0){y += dy / 2;dy = 0;}return {x:x,y:y,dx:dx,dy:dy};}d3.random = {normal:function normal(µ,σ){var n=arguments.length;if(n < 2)σ = 1;if(n < 1)µ = 0;return function(){var x,y,r;do {x = Math.random() * 2 - 1;y = Math.random() * 2 - 1;r = x * x + y * y;}while(!r || r > 1);return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);};},logNormal:function logNormal(){var random=d3.random.normal.apply(d3,arguments);return function(){return Math.exp(random());};},bates:function bates(m){var random=d3.random.irwinHall(m);return function(){return random() / m;};},irwinHall:function irwinHall(m){return function(){for(var s=0,j=0;j < m;j++) s += Math.random();return s;};}};d3.scale = {};function d3_scaleExtent(domain){var start=domain[0],stop=domain[domain.length - 1];return start < stop?[start,stop]:[stop,start];}function d3_scaleRange(scale){return scale.rangeExtent?scale.rangeExtent():d3_scaleExtent(scale.range());}function d3_scale_bilinear(domain,range,uninterpolate,interpolate){var u=uninterpolate(domain[0],domain[1]),i=interpolate(range[0],range[1]);return function(x){return i(u(x));};}function d3_scale_nice(domain,nice){var i0=0,i1=domain.length - 1,x0=domain[i0],x1=domain[i1],dx;if(x1 < x0){dx = i0,i0 = i1,i1 = dx;dx = x0,x0 = x1,x1 = dx;}domain[i0] = nice.floor(x0);domain[i1] = nice.ceil(x1);return domain;}function d3_scale_niceStep(step){return step?{floor:function floor(x){return Math.floor(x / step) * step;},ceil:function ceil(x){return Math.ceil(x / step) * step;}}:d3_scale_niceIdentity;}var d3_scale_niceIdentity={floor:d3_identity,ceil:d3_identity};function d3_scale_polylinear(domain,range,uninterpolate,interpolate){var u=[],i=[],j=0,k=Math.min(domain.length,range.length) - 1;if(domain[k] < domain[0]){domain = domain.slice().reverse();range = range.slice().reverse();}while(++j <= k) {u.push(uninterpolate(domain[j - 1],domain[j]));i.push(interpolate(range[j - 1],range[j]));}return function(x){var j=d3.bisect(domain,x,1,k) - 1;return i[j](u[j](x));};}d3.scale.linear = function(){return d3_scale_linear([0,1],[0,1],d3_interpolate,false);};function d3_scale_linear(domain,range,interpolate,clamp){var output,input;function rescale(){var linear=Math.min(domain.length,range.length) > 2?d3_scale_polylinear:d3_scale_bilinear,uninterpolate=clamp?d3_uninterpolateClamp:d3_uninterpolateNumber;output = linear(domain,range,uninterpolate,interpolate);input = linear(range,domain,uninterpolate,d3_interpolate);return scale;}function scale(x){return output(x);}scale.invert = function(y){return input(y);};scale.domain = function(x){if(!arguments.length)return domain;domain = x.map(Number);return rescale();};scale.range = function(x){if(!arguments.length)return range;range = x;return rescale();};scale.rangeRound = function(x){return scale.range(x).interpolate(d3_interpolateRound);};scale.clamp = function(x){if(!arguments.length)return clamp;clamp = x;return rescale();};scale.interpolate = function(x){if(!arguments.length)return interpolate;interpolate = x;return rescale();};scale.ticks = function(m){return d3_scale_linearTicks(domain,m);};scale.tickFormat = function(m,format){return d3_scale_linearTickFormat(domain,m,format);};scale.nice = function(m){d3_scale_linearNice(domain,m);return rescale();};scale.copy = function(){return d3_scale_linear(domain,range,interpolate,clamp);};return rescale();}function d3_scale_linearRebind(scale,linear){return d3.rebind(scale,linear,\"range\",\"rangeRound\",\"interpolate\",\"clamp\");}function d3_scale_linearNice(domain,m){return d3_scale_nice(domain,d3_scale_niceStep(d3_scale_linearTickRange(domain,m)[2]));}function d3_scale_linearTickRange(domain,m){if(m == null)m = 10;var extent=d3_scaleExtent(domain),span=extent[1] - extent[0],step=Math.pow(10,Math.floor(Math.log(span / m) / Math.LN10)),err=m / span * step;if(err <= .15)step *= 10;else if(err <= .35)step *= 5;else if(err <= .75)step *= 2;extent[0] = Math.ceil(extent[0] / step) * step;extent[1] = Math.floor(extent[1] / step) * step + step * .5;extent[2] = step;return extent;}function d3_scale_linearTicks(domain,m){return d3.range.apply(d3,d3_scale_linearTickRange(domain,m));}function d3_scale_linearTickFormat(domain,m,format){var range=d3_scale_linearTickRange(domain,m);if(format){var match=d3_format_re.exec(format);match.shift();if(match[8] === \"s\"){var prefix=d3.formatPrefix(Math.max(abs(range[0]),abs(range[1])));if(!match[7])match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));match[8] = \"f\";format = d3.format(match.join(\"\"));return function(d){return format(prefix.scale(d)) + prefix.symbol;};}if(!match[7])match[7] = \".\" + d3_scale_linearFormatPrecision(match[8],range);format = match.join(\"\");}else {format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";}return d3.format(format);}var d3_scale_linearFormatSignificant={s:1,g:1,p:1,r:1,e:1};function d3_scale_linearPrecision(value){return -Math.floor(Math.log(value) / Math.LN10 + .01);}function d3_scale_linearFormatPrecision(type,range){var p=d3_scale_linearPrecision(range[2]);return type in d3_scale_linearFormatSignificant?Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]),abs(range[1])))) + +(type !== \"e\"):p - (type === \"%\") * 2;}d3.scale.log = function(){return d3_scale_log(d3.scale.linear().domain([0,1]),10,true,[1,10]);};function d3_scale_log(linear,base,positive,domain){function log(x){return (positive?Math.log(x < 0?0:x):-Math.log(x > 0?0:-x)) / Math.log(base);}function pow(x){return positive?Math.pow(base,x):-Math.pow(base,-x);}function scale(x){return linear(log(x));}scale.invert = function(x){return pow(linear.invert(x));};scale.domain = function(x){if(!arguments.length)return domain;positive = x[0] >= 0;linear.domain((domain = x.map(Number)).map(log));return scale;};scale.base = function(_){if(!arguments.length)return base;base = +_;linear.domain(domain.map(log));return scale;};scale.nice = function(){var niced=d3_scale_nice(domain.map(log),positive?Math:d3_scale_logNiceNegative);linear.domain(niced);domain = niced.map(pow);return scale;};scale.ticks = function(){var extent=d3_scaleExtent(domain),ticks=[],u=extent[0],v=extent[1],i=Math.floor(log(u)),j=Math.ceil(log(v)),n=base % 1?2:base;if(isFinite(j - i)){if(positive){for(;i < j;i++) for(var k=1;k < n;k++) ticks.push(pow(i) * k);ticks.push(pow(i));}else {ticks.push(pow(i));for(;i++ < j;) for(var k=n - 1;k > 0;k--) ticks.push(pow(i) * k);}for(i = 0;ticks[i] < u;i++) {}for(j = ticks.length;ticks[j - 1] > v;j--) {}ticks = ticks.slice(i,j);}return ticks;};scale.tickFormat = function(n,format){if(!arguments.length)return d3_scale_logFormat;if(arguments.length < 2)format = d3_scale_logFormat;else if(typeof format !== \"function\")format = d3.format(format);var k=Math.max(.1,n / scale.ticks().length),f=positive?(e = 1e-12,Math.ceil):(e = -1e-12,Math.floor),e;return function(d){return d / pow(f(log(d) + e)) <= k?format(d):\"\";};};scale.copy = function(){return d3_scale_log(linear.copy(),base,positive,domain);};return d3_scale_linearRebind(scale,linear);}var d3_scale_logFormat=d3.format(\".0e\"),d3_scale_logNiceNegative={floor:function floor(x){return -Math.ceil(-x);},ceil:function ceil(x){return -Math.floor(-x);}};d3.scale.pow = function(){return d3_scale_pow(d3.scale.linear(),1,[0,1]);};function d3_scale_pow(linear,exponent,domain){var powp=d3_scale_powPow(exponent),powb=d3_scale_powPow(1 / exponent);function scale(x){return linear(powp(x));}scale.invert = function(x){return powb(linear.invert(x));};scale.domain = function(x){if(!arguments.length)return domain;linear.domain((domain = x.map(Number)).map(powp));return scale;};scale.ticks = function(m){return d3_scale_linearTicks(domain,m);};scale.tickFormat = function(m,format){return d3_scale_linearTickFormat(domain,m,format);};scale.nice = function(m){return scale.domain(d3_scale_linearNice(domain,m));};scale.exponent = function(x){if(!arguments.length)return exponent;powp = d3_scale_powPow(exponent = x);powb = d3_scale_powPow(1 / exponent);linear.domain(domain.map(powp));return scale;};scale.copy = function(){return d3_scale_pow(linear.copy(),exponent,domain);};return d3_scale_linearRebind(scale,linear);}function d3_scale_powPow(e){return function(x){return x < 0?-Math.pow(-x,e):Math.pow(x,e);};}d3.scale.sqrt = function(){return d3.scale.pow().exponent(.5);};d3.scale.ordinal = function(){return d3_scale_ordinal([],{t:\"range\",a:[[]]});};function d3_scale_ordinal(domain,ranger){var index,range,rangeBand;function scale(x){return range[((index.get(x) || (ranger.t === \"range\"?index.set(x,domain.push(x)):NaN)) - 1) % range.length];}function steps(start,step){return d3.range(domain.length).map(function(i){return start + step * i;});}scale.domain = function(x){if(!arguments.length)return domain;domain = [];index = new d3_Map();var i=-1,n=x.length,xi;while(++i < n) if(!index.has(xi = x[i]))index.set(xi,domain.push(xi));return scale[ranger.t].apply(scale,ranger.a);};scale.range = function(x){if(!arguments.length)return range;range = x;rangeBand = 0;ranger = {t:\"range\",a:arguments};return scale;};scale.rangePoints = function(x,padding){if(arguments.length < 2)padding = 0;var start=x[0],stop=x[1],step=domain.length < 2?(start = (start + stop) / 2,0):(stop - start) / (domain.length - 1 + padding);range = steps(start + step * padding / 2,step);rangeBand = 0;ranger = {t:\"rangePoints\",a:arguments};return scale;};scale.rangeRoundPoints = function(x,padding){if(arguments.length < 2)padding = 0;var start=x[0],stop=x[1],step=domain.length < 2?(start = stop = Math.round((start + stop) / 2),0):(stop - start) / (domain.length - 1 + padding) | 0;range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2),step);rangeBand = 0;ranger = {t:\"rangeRoundPoints\",a:arguments};return scale;};scale.rangeBands = function(x,padding,outerPadding){if(arguments.length < 2)padding = 0;if(arguments.length < 3)outerPadding = padding;var reverse=x[1] < x[0],start=x[reverse - 0],stop=x[1 - reverse],step=(stop - start) / (domain.length - padding + 2 * outerPadding);range = steps(start + step * outerPadding,step);if(reverse)range.reverse();rangeBand = step * (1 - padding);ranger = {t:\"rangeBands\",a:arguments};return scale;};scale.rangeRoundBands = function(x,padding,outerPadding){if(arguments.length < 2)padding = 0;if(arguments.length < 3)outerPadding = padding;var reverse=x[1] < x[0],start=x[reverse - 0],stop=x[1 - reverse],step=Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2),step);if(reverse)range.reverse();rangeBand = Math.round(step * (1 - padding));ranger = {t:\"rangeRoundBands\",a:arguments};return scale;};scale.rangeBand = function(){return rangeBand;};scale.rangeExtent = function(){return d3_scaleExtent(ranger.a[0]);};scale.copy = function(){return d3_scale_ordinal(domain,ranger);};return scale.domain(domain);}d3.scale.category10 = function(){return d3.scale.ordinal().range(d3_category10);};d3.scale.category20 = function(){return d3.scale.ordinal().range(d3_category20);};d3.scale.category20b = function(){return d3.scale.ordinal().range(d3_category20b);};d3.scale.category20c = function(){return d3.scale.ordinal().range(d3_category20c);};var d3_category10=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(d3_rgbString);var d3_category20=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(d3_rgbString);var d3_category20b=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(d3_rgbString);var d3_category20c=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(d3_rgbString);d3.scale.quantile = function(){return d3_scale_quantile([],[]);};function d3_scale_quantile(domain,range){var thresholds;function rescale(){var k=0,q=range.length;thresholds = [];while(++k < q) thresholds[k - 1] = d3.quantile(domain,k / q);return scale;}function scale(x){if(!isNaN(x = +x))return range[d3.bisect(thresholds,x)];}scale.domain = function(x){if(!arguments.length)return domain;domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);return rescale();};scale.range = function(x){if(!arguments.length)return range;range = x;return rescale();};scale.quantiles = function(){return thresholds;};scale.invertExtent = function(y){y = range.indexOf(y);return y < 0?[NaN,NaN]:[y > 0?thresholds[y - 1]:domain[0],y < thresholds.length?thresholds[y]:domain[domain.length - 1]];};scale.copy = function(){return d3_scale_quantile(domain,range);};return rescale();}d3.scale.quantize = function(){return d3_scale_quantize(0,1,[0,1]);};function d3_scale_quantize(x0,x1,range){var kx,i;function scale(x){return range[Math.max(0,Math.min(i,Math.floor(kx * (x - x0))))];}function rescale(){kx = range.length / (x1 - x0);i = range.length - 1;return scale;}scale.domain = function(x){if(!arguments.length)return [x0,x1];x0 = +x[0];x1 = +x[x.length - 1];return rescale();};scale.range = function(x){if(!arguments.length)return range;range = x;return rescale();};scale.invertExtent = function(y){y = range.indexOf(y);y = y < 0?NaN:y / kx + x0;return [y,y + 1 / kx];};scale.copy = function(){return d3_scale_quantize(x0,x1,range);};return rescale();}d3.scale.threshold = function(){return d3_scale_threshold([.5],[0,1]);};function d3_scale_threshold(domain,range){function scale(x){if(x <= x)return range[d3.bisect(domain,x)];}scale.domain = function(_){if(!arguments.length)return domain;domain = _;return scale;};scale.range = function(_){if(!arguments.length)return range;range = _;return scale;};scale.invertExtent = function(y){y = range.indexOf(y);return [domain[y - 1],domain[y]];};scale.copy = function(){return d3_scale_threshold(domain,range);};return scale;}d3.scale.identity = function(){return d3_scale_identity([0,1]);};function d3_scale_identity(domain){function identity(x){return +x;}identity.invert = identity;identity.domain = identity.range = function(x){if(!arguments.length)return domain;domain = x.map(identity);return identity;};identity.ticks = function(m){return d3_scale_linearTicks(domain,m);};identity.tickFormat = function(m,format){return d3_scale_linearTickFormat(domain,m,format);};identity.copy = function(){return d3_scale_identity(domain);};return identity;}d3.svg = {};function d3_zero(){return 0;}d3.svg.arc = function(){var innerRadius=d3_svg_arcInnerRadius,outerRadius=d3_svg_arcOuterRadius,cornerRadius=d3_zero,padRadius=d3_svg_arcAuto,startAngle=d3_svg_arcStartAngle,endAngle=d3_svg_arcEndAngle,padAngle=d3_svg_arcPadAngle;function arc(){var r0=Math.max(0,+innerRadius.apply(this,arguments)),r1=Math.max(0,+outerRadius.apply(this,arguments)),a0=startAngle.apply(this,arguments) - halfπ,a1=endAngle.apply(this,arguments) - halfπ,da=Math.abs(a1 - a0),cw=a0 > a1?0:1;if(r1 < r0)rc = r1,r1 = r0,r0 = rc;if(da >= τε)return circleSegment(r1,cw) + (r0?circleSegment(r0,1 - cw):\"\") + \"Z\";var rc,cr,rp,ap,p0=0,p1=0,x0,y0,x1,y1,x2,y2,x3,y3,path=[];if(ap = (+padAngle.apply(this,arguments) || 0) / 2){rp = padRadius === d3_svg_arcAuto?Math.sqrt(r0 * r0 + r1 * r1):+padRadius.apply(this,arguments);if(!cw)p1 *= -1;if(r1)p1 = d3_asin(rp / r1 * Math.sin(ap));if(r0)p0 = d3_asin(rp / r0 * Math.sin(ap));}if(r1){x0 = r1 * Math.cos(a0 + p1);y0 = r1 * Math.sin(a0 + p1);x1 = r1 * Math.cos(a1 - p1);y1 = r1 * Math.sin(a1 - p1);var l1=Math.abs(a1 - a0 - 2 * p1) <= π?0:1;if(p1 && d3_svg_arcSweep(x0,y0,x1,y1) === cw ^ l1){var h1=(a0 + a1) / 2;x0 = r1 * Math.cos(h1);y0 = r1 * Math.sin(h1);x1 = y1 = null;}}else {x0 = y0 = 0;}if(r0){x2 = r0 * Math.cos(a1 - p0);y2 = r0 * Math.sin(a1 - p0);x3 = r0 * Math.cos(a0 + p0);y3 = r0 * Math.sin(a0 + p0);var l0=Math.abs(a0 - a1 + 2 * p0) <= π?0:1;if(p0 && d3_svg_arcSweep(x2,y2,x3,y3) === 1 - cw ^ l0){var h0=(a0 + a1) / 2;x2 = r0 * Math.cos(h0);y2 = r0 * Math.sin(h0);x3 = y3 = null;}}else {x2 = y2 = 0;}if(da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2,+cornerRadius.apply(this,arguments))) > .001){cr = r0 < r1 ^ cw?0:1;var rc1=rc,rc0=rc;if(da < π){var oc=x3 == null?[x2,y2]:x1 == null?[x0,y0]:d3_geom_polygonIntersect([x0,y0],[x3,y3],[x1,y1],[x2,y2]),ax=x0 - oc[0],ay=y0 - oc[1],bx=x1 - oc[0],by=y1 - oc[1],kc=1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),lc=Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);rc0 = Math.min(rc,(r0 - lc) / (kc - 1));rc1 = Math.min(rc,(r1 - lc) / (kc + 1));}if(x1 != null){var t30=d3_svg_arcCornerTangents(x3 == null?[x2,y2]:[x3,y3],[x0,y0],r1,rc1,cw),t12=d3_svg_arcCornerTangents([x1,y1],[x2,y2],r1,rc1,cw);if(rc === rc1){path.push(\"M\",t30[0],\"A\",rc1,\",\",rc1,\" 0 0,\",cr,\" \",t30[1],\"A\",r1,\",\",r1,\" 0 \",1 - cw ^ d3_svg_arcSweep(t30[1][0],t30[1][1],t12[1][0],t12[1][1]),\",\",cw,\" \",t12[1],\"A\",rc1,\",\",rc1,\" 0 0,\",cr,\" \",t12[0]);}else {path.push(\"M\",t30[0],\"A\",rc1,\",\",rc1,\" 0 1,\",cr,\" \",t12[0]);}}else {path.push(\"M\",x0,\",\",y0);}if(x3 != null){var t03=d3_svg_arcCornerTangents([x0,y0],[x3,y3],r0,-rc0,cw),t21=d3_svg_arcCornerTangents([x2,y2],x1 == null?[x0,y0]:[x1,y1],r0,-rc0,cw);if(rc === rc0){path.push(\"L\",t21[0],\"A\",rc0,\",\",rc0,\" 0 0,\",cr,\" \",t21[1],\"A\",r0,\",\",r0,\" 0 \",cw ^ d3_svg_arcSweep(t21[1][0],t21[1][1],t03[1][0],t03[1][1]),\",\",1 - cw,\" \",t03[1],\"A\",rc0,\",\",rc0,\" 0 0,\",cr,\" \",t03[0]);}else {path.push(\"L\",t21[0],\"A\",rc0,\",\",rc0,\" 0 0,\",cr,\" \",t03[0]);}}else {path.push(\"L\",x2,\",\",y2);}}else {path.push(\"M\",x0,\",\",y0);if(x1 != null)path.push(\"A\",r1,\",\",r1,\" 0 \",l1,\",\",cw,\" \",x1,\",\",y1);path.push(\"L\",x2,\",\",y2);if(x3 != null)path.push(\"A\",r0,\",\",r0,\" 0 \",l0,\",\",1 - cw,\" \",x3,\",\",y3);}path.push(\"Z\");return path.join(\"\");}function circleSegment(r1,cw){return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;}arc.innerRadius = function(v){if(!arguments.length)return innerRadius;innerRadius = d3_functor(v);return arc;};arc.outerRadius = function(v){if(!arguments.length)return outerRadius;outerRadius = d3_functor(v);return arc;};arc.cornerRadius = function(v){if(!arguments.length)return cornerRadius;cornerRadius = d3_functor(v);return arc;};arc.padRadius = function(v){if(!arguments.length)return padRadius;padRadius = v == d3_svg_arcAuto?d3_svg_arcAuto:d3_functor(v);return arc;};arc.startAngle = function(v){if(!arguments.length)return startAngle;startAngle = d3_functor(v);return arc;};arc.endAngle = function(v){if(!arguments.length)return endAngle;endAngle = d3_functor(v);return arc;};arc.padAngle = function(v){if(!arguments.length)return padAngle;padAngle = d3_functor(v);return arc;};arc.centroid = function(){var r=(+innerRadius.apply(this,arguments) + +outerRadius.apply(this,arguments)) / 2,a=(+startAngle.apply(this,arguments) + +endAngle.apply(this,arguments)) / 2 - halfπ;return [Math.cos(a) * r,Math.sin(a) * r];};return arc;};var d3_svg_arcAuto=\"auto\";function d3_svg_arcInnerRadius(d){return d.innerRadius;}function d3_svg_arcOuterRadius(d){return d.outerRadius;}function d3_svg_arcStartAngle(d){return d.startAngle;}function d3_svg_arcEndAngle(d){return d.endAngle;}function d3_svg_arcPadAngle(d){return d && d.padAngle;}function d3_svg_arcSweep(x0,y0,x1,y1){return (x0 - x1) * y0 - (y0 - y1) * x0 > 0?0:1;}function d3_svg_arcCornerTangents(p0,p1,r1,rc,cw){var x01=p0[0] - p1[0],y01=p0[1] - p1[1],lo=(cw?rc:-rc) / Math.sqrt(x01 * x01 + y01 * y01),ox=lo * y01,oy=-lo * x01,x1=p0[0] + ox,y1=p0[1] + oy,x2=p1[0] + ox,y2=p1[1] + oy,x3=(x1 + x2) / 2,y3=(y1 + y2) / 2,dx=x2 - x1,dy=y2 - y1,d2=dx * dx + dy * dy,r=r1 - rc,D=x1 * y2 - x2 * y1,d=(dy < 0?-1:1) * Math.sqrt(Math.max(0,r * r * d2 - D * D)),cx0=(D * dy - dx * d) / d2,cy0=(-D * dx - dy * d) / d2,cx1=(D * dy + dx * d) / d2,cy1=(-D * dx + dy * d) / d2,dx0=cx0 - x3,dy0=cy0 - y3,dx1=cx1 - x3,dy1=cy1 - y3;if(dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1)cx0 = cx1,cy0 = cy1;return [[cx0 - ox,cy0 - oy],[cx0 * r1 / r,cy0 * r1 / r]];}function d3_svg_line(projection){var x=d3_geom_pointX,y=d3_geom_pointY,defined=d3_true,interpolate=d3_svg_lineLinear,interpolateKey=interpolate.key,tension=.7;function line(data){var segments=[],points=[],i=-1,n=data.length,d,fx=d3_functor(x),fy=d3_functor(y);function segment(){segments.push(\"M\",interpolate(projection(points),tension));}while(++i < n) {if(defined.call(this,d = data[i],i)){points.push([+fx.call(this,d,i),+fy.call(this,d,i)]);}else if(points.length){segment();points = [];}}if(points.length)segment();return segments.length?segments.join(\"\"):null;}line.x = function(_){if(!arguments.length)return x;x = _;return line;};line.y = function(_){if(!arguments.length)return y;y = _;return line;};line.defined = function(_){if(!arguments.length)return defined;defined = _;return line;};line.interpolate = function(_){if(!arguments.length)return interpolateKey;if(typeof _ === \"function\")interpolateKey = interpolate = _;else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;return line;};line.tension = function(_){if(!arguments.length)return tension;tension = _;return line;};return line;}d3.svg.line = function(){return d3_svg_line(d3_identity);};var d3_svg_lineInterpolators=d3.map({linear:d3_svg_lineLinear,\"linear-closed\":d3_svg_lineLinearClosed,step:d3_svg_lineStep,\"step-before\":d3_svg_lineStepBefore,\"step-after\":d3_svg_lineStepAfter,basis:d3_svg_lineBasis,\"basis-open\":d3_svg_lineBasisOpen,\"basis-closed\":d3_svg_lineBasisClosed,bundle:d3_svg_lineBundle,cardinal:d3_svg_lineCardinal,\"cardinal-open\":d3_svg_lineCardinalOpen,\"cardinal-closed\":d3_svg_lineCardinalClosed,monotone:d3_svg_lineMonotone});d3_svg_lineInterpolators.forEach(function(key,value){value.key = key;value.closed = /-closed$/.test(key);});function d3_svg_lineLinear(points){return points.length > 1?points.join(\"L\"):points + \"Z\";}function d3_svg_lineLinearClosed(points){return points.join(\"L\") + \"Z\";}function d3_svg_lineStep(points){var i=0,n=points.length,p=points[0],path=[p[0],\",\",p[1]];while(++i < n) path.push(\"H\",(p[0] + (p = points[i])[0]) / 2,\"V\",p[1]);if(n > 1)path.push(\"H\",p[0]);return path.join(\"\");}function d3_svg_lineStepBefore(points){var i=0,n=points.length,p=points[0],path=[p[0],\",\",p[1]];while(++i < n) path.push(\"V\",(p = points[i])[1],\"H\",p[0]);return path.join(\"\");}function d3_svg_lineStepAfter(points){var i=0,n=points.length,p=points[0],path=[p[0],\",\",p[1]];while(++i < n) path.push(\"H\",(p = points[i])[0],\"V\",p[1]);return path.join(\"\");}function d3_svg_lineCardinalOpen(points,tension){return points.length < 4?d3_svg_lineLinear(points):points[1] + d3_svg_lineHermite(points.slice(1,-1),d3_svg_lineCardinalTangents(points,tension));}function d3_svg_lineCardinalClosed(points,tension){return points.length < 3?d3_svg_lineLinearClosed(points):points[0] + d3_svg_lineHermite((points.push(points[0]),points),d3_svg_lineCardinalTangents([points[points.length - 2]].concat(points,[points[1]]),tension));}function d3_svg_lineCardinal(points,tension){return points.length < 3?d3_svg_lineLinear(points):points[0] + d3_svg_lineHermite(points,d3_svg_lineCardinalTangents(points,tension));}function d3_svg_lineHermite(points,tangents){if(tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2){return d3_svg_lineLinear(points);}var quad=points.length != tangents.length,path=\"\",p0=points[0],p=points[1],t0=tangents[0],t=t0,pi=1;if(quad){path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];p0 = points[1];pi = 2;}if(tangents.length > 1){t = tangents[1];p = points[pi];pi++;path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];for(var i=2;i < tangents.length;i++,pi++) {p = points[pi];t = tangents[i];path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];}}if(quad){var lp=points[pi];path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];}return path;}function d3_svg_lineCardinalTangents(points,tension){var tangents=[],a=(1 - tension) / 2,p0,p1=points[0],p2=points[1],i=1,n=points.length;while(++i < n) {p0 = p1;p1 = p2;p2 = points[i];tangents.push([a * (p2[0] - p0[0]),a * (p2[1] - p0[1])]);}return tangents;}function d3_svg_lineBasis(points){if(points.length < 3)return d3_svg_lineLinear(points);var i=1,n=points.length,pi=points[0],x0=pi[0],y0=pi[1],px=[x0,x0,x0,(pi = points[1])[0]],py=[y0,y0,y0,pi[1]],path=[x0,\",\",y0,\"L\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,px),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,py)];points.push(points[n - 1]);while(++i <= n) {pi = points[i];px.shift();px.push(pi[0]);py.shift();py.push(pi[1]);d3_svg_lineBasisBezier(path,px,py);}points.pop();path.push(\"L\",pi);return path.join(\"\");}function d3_svg_lineBasisOpen(points){if(points.length < 4)return d3_svg_lineLinear(points);var path=[],i=-1,n=points.length,pi,px=[0],py=[0];while(++i < 3) {pi = points[i];px.push(pi[0]);py.push(pi[1]);}path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3,px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3,py));--i;while(++i < n) {pi = points[i];px.shift();px.push(pi[0]);py.shift();py.push(pi[1]);d3_svg_lineBasisBezier(path,px,py);}return path.join(\"\");}function d3_svg_lineBasisClosed(points){var path,i=-1,n=points.length,m=n + 4,pi,px=[],py=[];while(++i < 4) {pi = points[i % n];px.push(pi[0]);py.push(pi[1]);}path = [d3_svg_lineDot4(d3_svg_lineBasisBezier3,px),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,py)];--i;while(++i < m) {pi = points[i % n];px.shift();px.push(pi[0]);py.shift();py.push(pi[1]);d3_svg_lineBasisBezier(path,px,py);}return path.join(\"\");}function d3_svg_lineBundle(points,tension){var n=points.length - 1;if(n){var x0=points[0][0],y0=points[0][1],dx=points[n][0] - x0,dy=points[n][1] - y0,i=-1,p,t;while(++i <= n) {p = points[i];t = i / n;p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);}}return d3_svg_lineBasis(points);}function d3_svg_lineDot4(a,b){return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];}var d3_svg_lineBasisBezier1=[0,2 / 3,1 / 3,0],d3_svg_lineBasisBezier2=[0,1 / 3,2 / 3,0],d3_svg_lineBasisBezier3=[0,1 / 6,2 / 3,1 / 6];function d3_svg_lineBasisBezier(path,x,y){path.push(\"C\",d3_svg_lineDot4(d3_svg_lineBasisBezier1,x),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier1,y),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier2,x),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier2,y),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,x),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,y));}function d3_svg_lineSlope(p0,p1){return (p1[1] - p0[1]) / (p1[0] - p0[0]);}function d3_svg_lineFiniteDifferences(points){var i=0,j=points.length - 1,m=[],p0=points[0],p1=points[1],d=m[0] = d3_svg_lineSlope(p0,p1);while(++i < j) {m[i] = (d + (d = d3_svg_lineSlope(p0 = p1,p1 = points[i + 1]))) / 2;}m[i] = d;return m;}function d3_svg_lineMonotoneTangents(points){var tangents=[],d,a,b,s,m=d3_svg_lineFiniteDifferences(points),i=-1,j=points.length - 1;while(++i < j) {d = d3_svg_lineSlope(points[i],points[i + 1]);if(abs(d) < ε){m[i] = m[i + 1] = 0;}else {a = m[i] / d;b = m[i + 1] / d;s = a * a + b * b;if(s > 9){s = d * 3 / Math.sqrt(s);m[i] = s * a;m[i + 1] = s * b;}}}i = -1;while(++i <= j) {s = (points[Math.min(j,i + 1)][0] - points[Math.max(0,i - 1)][0]) / (6 * (1 + m[i] * m[i]));tangents.push([s || 0,m[i] * s || 0]);}return tangents;}function d3_svg_lineMonotone(points){return points.length < 3?d3_svg_lineLinear(points):points[0] + d3_svg_lineHermite(points,d3_svg_lineMonotoneTangents(points));}d3.svg.line.radial = function(){var line=d3_svg_line(d3_svg_lineRadial);line.radius = line.x,delete line.x;line.angle = line.y,delete line.y;return line;};function d3_svg_lineRadial(points){var point,i=-1,n=points.length,r,a;while(++i < n) {point = points[i];r = point[0];a = point[1] - halfπ;point[0] = r * Math.cos(a);point[1] = r * Math.sin(a);}return points;}function d3_svg_area(projection){var x0=d3_geom_pointX,x1=d3_geom_pointX,y0=0,y1=d3_geom_pointY,defined=d3_true,interpolate=d3_svg_lineLinear,interpolateKey=interpolate.key,interpolateReverse=interpolate,L=\"L\",tension=.7;function area(data){var segments=[],points0=[],points1=[],i=-1,n=data.length,d,fx0=d3_functor(x0),fy0=d3_functor(y0),fx1=x0 === x1?function(){return x;}:d3_functor(x1),fy1=y0 === y1?function(){return y;}:d3_functor(y1),x,y;function segment(){segments.push(\"M\",interpolate(projection(points1),tension),L,interpolateReverse(projection(points0.reverse()),tension),\"Z\");}while(++i < n) {if(defined.call(this,d = data[i],i)){points0.push([x = +fx0.call(this,d,i),y = +fy0.call(this,d,i)]);points1.push([+fx1.call(this,d,i),+fy1.call(this,d,i)]);}else if(points0.length){segment();points0 = [];points1 = [];}}if(points0.length)segment();return segments.length?segments.join(\"\"):null;}area.x = function(_){if(!arguments.length)return x1;x0 = x1 = _;return area;};area.x0 = function(_){if(!arguments.length)return x0;x0 = _;return area;};area.x1 = function(_){if(!arguments.length)return x1;x1 = _;return area;};area.y = function(_){if(!arguments.length)return y1;y0 = y1 = _;return area;};area.y0 = function(_){if(!arguments.length)return y0;y0 = _;return area;};area.y1 = function(_){if(!arguments.length)return y1;y1 = _;return area;};area.defined = function(_){if(!arguments.length)return defined;defined = _;return area;};area.interpolate = function(_){if(!arguments.length)return interpolateKey;if(typeof _ === \"function\")interpolateKey = interpolate = _;else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;interpolateReverse = interpolate.reverse || interpolate;L = interpolate.closed?\"M\":\"L\";return area;};area.tension = function(_){if(!arguments.length)return tension;tension = _;return area;};return area;}d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;d3.svg.area = function(){return d3_svg_area(d3_identity);};d3.svg.area.radial = function(){var area=d3_svg_area(d3_svg_lineRadial);area.radius = area.x,delete area.x;area.innerRadius = area.x0,delete area.x0;area.outerRadius = area.x1,delete area.x1;area.angle = area.y,delete area.y;area.startAngle = area.y0,delete area.y0;area.endAngle = area.y1,delete area.y1;return area;};d3.svg.chord = function(){var source=d3_source,target=d3_target,radius=d3_svg_chordRadius,startAngle=d3_svg_arcStartAngle,endAngle=d3_svg_arcEndAngle;function chord(d,i){var s=subgroup(this,source,d,i),t=subgroup(this,target,d,i);return \"M\" + s.p0 + arc(s.r,s.p1,s.a1 - s.a0) + (equals(s,t)?curve(s.r,s.p1,s.r,s.p0):curve(s.r,s.p1,t.r,t.p0) + arc(t.r,t.p1,t.a1 - t.a0) + curve(t.r,t.p1,s.r,s.p0)) + \"Z\";}function subgroup(self,f,d,i){var subgroup=f.call(self,d,i),r=radius.call(self,subgroup,i),a0=startAngle.call(self,subgroup,i) - halfπ,a1=endAngle.call(self,subgroup,i) - halfπ;return {r:r,a0:a0,a1:a1,p0:[r * Math.cos(a0),r * Math.sin(a0)],p1:[r * Math.cos(a1),r * Math.sin(a1)]};}function equals(a,b){return a.a0 == b.a0 && a.a1 == b.a1;}function arc(r,p,a){return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;}function curve(r0,p0,r1,p1){return \"Q 0,0 \" + p1;}chord.radius = function(v){if(!arguments.length)return radius;radius = d3_functor(v);return chord;};chord.source = function(v){if(!arguments.length)return source;source = d3_functor(v);return chord;};chord.target = function(v){if(!arguments.length)return target;target = d3_functor(v);return chord;};chord.startAngle = function(v){if(!arguments.length)return startAngle;startAngle = d3_functor(v);return chord;};chord.endAngle = function(v){if(!arguments.length)return endAngle;endAngle = d3_functor(v);return chord;};return chord;};function d3_svg_chordRadius(d){return d.radius;}d3.svg.diagonal = function(){var source=d3_source,target=d3_target,projection=d3_svg_diagonalProjection;function diagonal(d,i){var p0=source.call(this,d,i),p3=target.call(this,d,i),m=(p0.y + p3.y) / 2,p=[p0,{x:p0.x,y:m},{x:p3.x,y:m},p3];p = p.map(projection);return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];}diagonal.source = function(x){if(!arguments.length)return source;source = d3_functor(x);return diagonal;};diagonal.target = function(x){if(!arguments.length)return target;target = d3_functor(x);return diagonal;};diagonal.projection = function(x){if(!arguments.length)return projection;projection = x;return diagonal;};return diagonal;};function d3_svg_diagonalProjection(d){return [d.x,d.y];}d3.svg.diagonal.radial = function(){var diagonal=d3.svg.diagonal(),projection=d3_svg_diagonalProjection,projection_=diagonal.projection;diagonal.projection = function(x){return arguments.length?projection_(d3_svg_diagonalRadialProjection(projection = x)):projection;};return diagonal;};function d3_svg_diagonalRadialProjection(projection){return function(){var d=projection.apply(this,arguments),r=d[0],a=d[1] - halfπ;return [r * Math.cos(a),r * Math.sin(a)];};}d3.svg.symbol = function(){var type=d3_svg_symbolType,size=d3_svg_symbolSize;function symbol(d,i){return (d3_svg_symbols.get(type.call(this,d,i)) || d3_svg_symbolCircle)(size.call(this,d,i));}symbol.type = function(x){if(!arguments.length)return type;type = d3_functor(x);return symbol;};symbol.size = function(x){if(!arguments.length)return size;size = d3_functor(x);return symbol;};return symbol;};function d3_svg_symbolSize(){return 64;}function d3_svg_symbolType(){return \"circle\";}function d3_svg_symbolCircle(size){var r=Math.sqrt(size / π);return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";}var d3_svg_symbols=d3.map({circle:d3_svg_symbolCircle,cross:function cross(size){var r=Math.sqrt(size / 5) / 2;return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";},diamond:function diamond(size){var ry=Math.sqrt(size / (2 * d3_svg_symbolTan30)),rx=ry * d3_svg_symbolTan30;return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";},square:function square(size){var r=Math.sqrt(size) / 2;return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";},\"triangle-down\":function triangleDown(size){var rx=Math.sqrt(size / d3_svg_symbolSqrt3),ry=rx * d3_svg_symbolSqrt3 / 2;return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";},\"triangle-up\":function triangleUp(size){var rx=Math.sqrt(size / d3_svg_symbolSqrt3),ry=rx * d3_svg_symbolSqrt3 / 2;return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";}});d3.svg.symbolTypes = d3_svg_symbols.keys();var d3_svg_symbolSqrt3=Math.sqrt(3),d3_svg_symbolTan30=Math.tan(30 * d3_radians);d3_selectionPrototype.transition = function(name){var id=d3_transitionInheritId || ++d3_transitionId,ns=d3_transitionNamespace(name),subgroups=[],subgroup,node,transition=d3_transitionInherit || {time:Date.now(),ease:d3_ease_cubicInOut,delay:0,duration:250};for(var j=-1,m=this.length;++j < m;) {subgroups.push(subgroup = []);for(var group=this[j],i=-1,n=group.length;++i < n;) {if(node = group[i])d3_transitionNode(node,i,ns,id,transition);subgroup.push(node);}}return d3_transition(subgroups,ns,id);};d3_selectionPrototype.interrupt = function(name){return this.each(name == null?d3_selection_interrupt:d3_selection_interruptNS(d3_transitionNamespace(name)));};var d3_selection_interrupt=d3_selection_interruptNS(d3_transitionNamespace());function d3_selection_interruptNS(ns){return function(){var lock,activeId,active;if((lock = this[ns]) && (active = lock[activeId = lock.active])){active.timer.c = null;active.timer.t = NaN;if(--lock.count)delete lock[activeId];else delete this[ns];lock.active += .5;active.event && active.event.interrupt.call(this,this.__data__,active.index);}};}function d3_transition(groups,ns,id){d3_subclass(groups,d3_transitionPrototype);groups.namespace = ns;groups.id = id;return groups;}var d3_transitionPrototype=[],d3_transitionId=0,d3_transitionInheritId,d3_transitionInherit;d3_transitionPrototype.call = d3_selectionPrototype.call;d3_transitionPrototype.empty = d3_selectionPrototype.empty;d3_transitionPrototype.node = d3_selectionPrototype.node;d3_transitionPrototype.size = d3_selectionPrototype.size;d3.transition = function(selection,name){return selection && selection.transition?d3_transitionInheritId?selection.transition(name):selection:d3.selection().transition(selection);};d3.transition.prototype = d3_transitionPrototype;d3_transitionPrototype.select = function(selector){var id=this.id,ns=this.namespace,subgroups=[],subgroup,subnode,node;selector = d3_selection_selector(selector);for(var j=-1,m=this.length;++j < m;) {subgroups.push(subgroup = []);for(var group=this[j],i=-1,n=group.length;++i < n;) {if((node = group[i]) && (subnode = selector.call(node,node.__data__,i,j))){if(\"__data__\" in node)subnode.__data__ = node.__data__;d3_transitionNode(subnode,i,ns,id,node[ns][id]);subgroup.push(subnode);}else {subgroup.push(null);}}}return d3_transition(subgroups,ns,id);};d3_transitionPrototype.selectAll = function(selector){var id=this.id,ns=this.namespace,subgroups=[],subgroup,subnodes,node,subnode,transition;selector = d3_selection_selectorAll(selector);for(var j=-1,m=this.length;++j < m;) {for(var group=this[j],i=-1,n=group.length;++i < n;) {if(node = group[i]){transition = node[ns][id];subnodes = selector.call(node,node.__data__,i,j);subgroups.push(subgroup = []);for(var k=-1,o=subnodes.length;++k < o;) {if(subnode = subnodes[k])d3_transitionNode(subnode,k,ns,id,transition);subgroup.push(subnode);}}}}return d3_transition(subgroups,ns,id);};d3_transitionPrototype.filter = function(filter){var subgroups=[],subgroup,group,node;if(typeof filter !== \"function\")filter = d3_selection_filter(filter);for(var j=0,m=this.length;j < m;j++) {subgroups.push(subgroup = []);for(var group=this[j],i=0,n=group.length;i < n;i++) {if((node = group[i]) && filter.call(node,node.__data__,i,j)){subgroup.push(node);}}}return d3_transition(subgroups,this.namespace,this.id);};d3_transitionPrototype.tween = function(name,tween){var id=this.id,ns=this.namespace;if(arguments.length < 2)return this.node()[ns][id].tween.get(name);return d3_selection_each(this,tween == null?function(node){node[ns][id].tween.remove(name);}:function(node){node[ns][id].tween.set(name,tween);});};function d3_transition_tween(groups,name,value,tween){var id=groups.id,ns=groups.namespace;return d3_selection_each(groups,typeof value === \"function\"?function(node,i,j){node[ns][id].tween.set(name,tween(value.call(node,node.__data__,i,j)));}:(value = tween(value),function(node){node[ns][id].tween.set(name,value);}));}d3_transitionPrototype.attr = function(nameNS,value){if(arguments.length < 2){for(value in nameNS) this.attr(value,nameNS[value]);return this;}var interpolate=nameNS == \"transform\"?d3_interpolateTransform:d3_interpolate,name=d3.ns.qualify(nameNS);function attrNull(){this.removeAttribute(name);}function attrNullNS(){this.removeAttributeNS(name.space,name.local);}function attrTween(b){return b == null?attrNull:(b += \"\",function(){var a=this.getAttribute(name),i;return a !== b && (i = interpolate(a,b),function(t){this.setAttribute(name,i(t));});});}function attrTweenNS(b){return b == null?attrNullNS:(b += \"\",function(){var a=this.getAttributeNS(name.space,name.local),i;return a !== b && (i = interpolate(a,b),function(t){this.setAttributeNS(name.space,name.local,i(t));});});}return d3_transition_tween(this,\"attr.\" + nameNS,value,name.local?attrTweenNS:attrTween);};d3_transitionPrototype.attrTween = function(nameNS,tween){var name=d3.ns.qualify(nameNS);function attrTween(d,i){var f=tween.call(this,d,i,this.getAttribute(name));return f && function(t){this.setAttribute(name,f(t));};}function attrTweenNS(d,i){var f=tween.call(this,d,i,this.getAttributeNS(name.space,name.local));return f && function(t){this.setAttributeNS(name.space,name.local,f(t));};}return this.tween(\"attr.\" + nameNS,name.local?attrTweenNS:attrTween);};d3_transitionPrototype.style = function(name,value,priority){var n=arguments.length;if(n < 3){if(typeof name !== \"string\"){if(n < 2)value = \"\";for(priority in name) this.style(priority,name[priority],value);return this;}priority = \"\";}function styleNull(){this.style.removeProperty(name);}function styleString(b){return b == null?styleNull:(b += \"\",function(){var a=d3_window(this).getComputedStyle(this,null).getPropertyValue(name),i;return a !== b && (i = d3_interpolate(a,b),function(t){this.style.setProperty(name,i(t),priority);});});}return d3_transition_tween(this,\"style.\" + name,value,styleString);};d3_transitionPrototype.styleTween = function(name,tween,priority){if(arguments.length < 3)priority = \"\";function styleTween(d,i){var f=tween.call(this,d,i,d3_window(this).getComputedStyle(this,null).getPropertyValue(name));return f && function(t){this.style.setProperty(name,f(t),priority);};}return this.tween(\"style.\" + name,styleTween);};d3_transitionPrototype.text = function(value){return d3_transition_tween(this,\"text\",value,d3_transition_text);};function d3_transition_text(b){if(b == null)b = \"\";return function(){this.textContent = b;};}d3_transitionPrototype.remove = function(){var ns=this.namespace;return this.each(\"end.transition\",function(){var p;if(this[ns].count < 2 && (p = this.parentNode))p.removeChild(this);});};d3_transitionPrototype.ease = function(value){var id=this.id,ns=this.namespace;if(arguments.length < 1)return this.node()[ns][id].ease;if(typeof value !== \"function\")value = d3.ease.apply(d3,arguments);return d3_selection_each(this,function(node){node[ns][id].ease = value;});};d3_transitionPrototype.delay = function(value){var id=this.id,ns=this.namespace;if(arguments.length < 1)return this.node()[ns][id].delay;return d3_selection_each(this,typeof value === \"function\"?function(node,i,j){node[ns][id].delay = +value.call(node,node.__data__,i,j);}:(value = +value,function(node){node[ns][id].delay = value;}));};d3_transitionPrototype.duration = function(value){var id=this.id,ns=this.namespace;if(arguments.length < 1)return this.node()[ns][id].duration;return d3_selection_each(this,typeof value === \"function\"?function(node,i,j){node[ns][id].duration = Math.max(1,value.call(node,node.__data__,i,j));}:(value = Math.max(1,value),function(node){node[ns][id].duration = value;}));};d3_transitionPrototype.each = function(type,listener){var id=this.id,ns=this.namespace;if(arguments.length < 2){var inherit=d3_transitionInherit,inheritId=d3_transitionInheritId;try{d3_transitionInheritId = id;d3_selection_each(this,function(node,i,j){d3_transitionInherit = node[ns][id];type.call(node,node.__data__,i,j);});}finally {d3_transitionInherit = inherit;d3_transitionInheritId = inheritId;}}else {d3_selection_each(this,function(node){var transition=node[ns][id];(transition.event || (transition.event = d3.dispatch(\"start\",\"end\",\"interrupt\"))).on(type,listener);});}return this;};d3_transitionPrototype.transition = function(){var id0=this.id,id1=++d3_transitionId,ns=this.namespace,subgroups=[],subgroup,group,node,transition;for(var j=0,m=this.length;j < m;j++) {subgroups.push(subgroup = []);for(var group=this[j],i=0,n=group.length;i < n;i++) {if(node = group[i]){transition = node[ns][id0];d3_transitionNode(node,i,ns,id1,{time:transition.time,ease:transition.ease,delay:transition.delay + transition.duration,duration:transition.duration});}subgroup.push(node);}}return d3_transition(subgroups,ns,id1);};function d3_transitionNamespace(name){return name == null?\"__transition__\":\"__transition_\" + name + \"__\";}function d3_transitionNode(node,i,ns,id,inherit){var lock=node[ns] || (node[ns] = {active:0,count:0}),transition=lock[id];if(!transition){var schedule=function schedule(elapsed){var delay=transition.delay,duration,ease,tweened=[];timer.t = delay + time;if(delay <= elapsed)return start(elapsed - delay);timer.c = start;function start(elapsed){var activeId=lock.active,active=lock[activeId];if(active){active.timer.c = null;active.timer.t = NaN;--lock.count;delete lock[activeId];active.event && active.event.interrupt.call(node,node.__data__,active.index);}for(var cancelId in lock) {if(+cancelId < id){var cancel=lock[cancelId];cancel.timer.c = null;cancel.timer.t = NaN;--lock.count;delete lock[cancelId];}}lock.active = id;transition.event && transition.event.start.call(node,node.__data__,i);transition.tween.forEach(function(key,value){if(value = value.call(node,node.__data__,i)){tweened.push(value);}});ease = transition.ease;duration = transition.duration;timer.c = tick;d3_timer(function(){if(timer.c && tick(elapsed || 1)){timer.c = null;timer.t = NaN;}return 1;},0,time);}function tick(elapsed){var t=elapsed / duration,e=ease(t),n=tweened.length;while(n > 0) {tweened[--n].call(node,e);}if(t >= 1){transition.event && transition.event.end.call(node,node.__data__,i);if(--lock.count)delete lock[id];else delete node[ns];return 1;}}};var time=inherit.time,timer=d3_timer(schedule,0,time);transition = lock[id] = {tween:new d3_Map(),time:time,timer:timer,delay:inherit.delay,duration:inherit.duration,ease:inherit.ease,index:i};inherit = null;++lock.count;}}d3.svg.axis = function(){var scale=d3.scale.linear(),orient=d3_svg_axisDefaultOrient,innerTickSize=6,outerTickSize=6,tickPadding=3,tickArguments_=[10],tickValues=null,tickFormat_;function axis(g){g.each(function(){var g=d3.select(this);var scale0=this.__chart__ || scale,scale1=this.__chart__ = scale.copy();var ticks=tickValues == null?scale1.ticks?scale1.ticks.apply(scale1,tickArguments_):scale1.domain():tickValues,tickFormat=tickFormat_ == null?scale1.tickFormat?scale1.tickFormat.apply(scale1,tickArguments_):d3_identity:tickFormat_,tick=g.selectAll(\".tick\").data(ticks,scale1),tickEnter=tick.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",ε),tickExit=d3.transition(tick.exit()).style(\"opacity\",ε).remove(),tickUpdate=d3.transition(tick.order()).style(\"opacity\",1),tickSpacing=Math.max(innerTickSize,0) + tickPadding,tickTransform;var range=d3_scaleRange(scale1),path=g.selectAll(\".domain\").data([0]),pathUpdate=(path.enter().append(\"path\").attr(\"class\",\"domain\"),d3.transition(path));tickEnter.append(\"line\");tickEnter.append(\"text\");var lineEnter=tickEnter.select(\"line\"),lineUpdate=tickUpdate.select(\"line\"),text=tick.select(\"text\").text(tickFormat),textEnter=tickEnter.select(\"text\"),textUpdate=tickUpdate.select(\"text\"),sign=orient === \"top\" || orient === \"left\"?-1:1,x1,x2,y1,y2;if(orient === \"bottom\" || orient === \"top\"){tickTransform = d3_svg_axisX,x1 = \"x\",y1 = \"y\",x2 = \"x2\",y2 = \"y2\";text.attr(\"dy\",sign < 0?\"0em\":\".71em\").style(\"text-anchor\",\"middle\");pathUpdate.attr(\"d\",\"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);}else {tickTransform = d3_svg_axisY,x1 = \"y\",y1 = \"x\",x2 = \"y2\",y2 = \"x2\";text.attr(\"dy\",\".32em\").style(\"text-anchor\",sign < 0?\"end\":\"start\");pathUpdate.attr(\"d\",\"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);}lineEnter.attr(y2,sign * innerTickSize);textEnter.attr(y1,sign * tickSpacing);lineUpdate.attr(x2,0).attr(y2,sign * innerTickSize);textUpdate.attr(x1,0).attr(y1,sign * tickSpacing);if(scale1.rangeBand){var x=scale1,dx=x.rangeBand() / 2;scale0 = scale1 = function(d){return x(d) + dx;};}else if(scale0.rangeBand){scale0 = scale1;}else {tickExit.call(tickTransform,scale1,scale0);}tickEnter.call(tickTransform,scale0,scale1);tickUpdate.call(tickTransform,scale1,scale1);});}axis.scale = function(x){if(!arguments.length)return scale;scale = x;return axis;};axis.orient = function(x){if(!arguments.length)return orient;orient = x in d3_svg_axisOrients?x + \"\":d3_svg_axisDefaultOrient;return axis;};axis.ticks = function(){if(!arguments.length)return tickArguments_;tickArguments_ = d3_array(arguments);return axis;};axis.tickValues = function(x){if(!arguments.length)return tickValues;tickValues = x;return axis;};axis.tickFormat = function(x){if(!arguments.length)return tickFormat_;tickFormat_ = x;return axis;};axis.tickSize = function(x){var n=arguments.length;if(!n)return innerTickSize;innerTickSize = +x;outerTickSize = +arguments[n - 1];return axis;};axis.innerTickSize = function(x){if(!arguments.length)return innerTickSize;innerTickSize = +x;return axis;};axis.outerTickSize = function(x){if(!arguments.length)return outerTickSize;outerTickSize = +x;return axis;};axis.tickPadding = function(x){if(!arguments.length)return tickPadding;tickPadding = +x;return axis;};axis.tickSubdivide = function(){return arguments.length && axis;};return axis;};var d3_svg_axisDefaultOrient=\"bottom\",d3_svg_axisOrients={top:1,right:1,bottom:1,left:1};function d3_svg_axisX(selection,x0,x1){selection.attr(\"transform\",function(d){var v0=x0(d);return \"translate(\" + (isFinite(v0)?v0:x1(d)) + \",0)\";});}function d3_svg_axisY(selection,y0,y1){selection.attr(\"transform\",function(d){var v0=y0(d);return \"translate(0,\" + (isFinite(v0)?v0:y1(d)) + \")\";});}d3.svg.brush = function(){var event=d3_eventDispatch(brush,\"brushstart\",\"brush\",\"brushend\"),x=null,y=null,xExtent=[0,0],yExtent=[0,0],xExtentDomain,yExtentDomain,xClamp=true,yClamp=true,resizes=d3_svg_brushResizes[0];function brush(g){g.each(function(){var g=d3.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",brushstart).on(\"touchstart.brush\",brushstart);var background=g.selectAll(\".background\").data([0]);background.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\");g.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var resize=g.selectAll(\".resize\").data(resizes,d3_identity);resize.exit().remove();resize.enter().append(\"g\").attr(\"class\",function(d){return \"resize \" + d;}).style(\"cursor\",function(d){return d3_svg_brushCursor[d];}).append(\"rect\").attr(\"x\",function(d){return (/[ew]$/.test(d)?-3:null);}).attr(\"y\",function(d){return (/^[ns]/.test(d)?-3:null);}).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\");resize.style(\"display\",brush.empty()?\"none\":null);var gUpdate=d3.transition(g),backgroundUpdate=d3.transition(background),range;if(x){range = d3_scaleRange(x);backgroundUpdate.attr(\"x\",range[0]).attr(\"width\",range[1] - range[0]);redrawX(gUpdate);}if(y){range = d3_scaleRange(y);backgroundUpdate.attr(\"y\",range[0]).attr(\"height\",range[1] - range[0]);redrawY(gUpdate);}redraw(gUpdate);});}brush.event = function(g){g.each(function(){var event_=event.of(this,arguments),extent1={x:xExtent,y:yExtent,i:xExtentDomain,j:yExtentDomain},extent0=this.__chart__ || extent1;this.__chart__ = extent1;if(d3_transitionInheritId){d3.select(this).transition().each(\"start.brush\",function(){xExtentDomain = extent0.i;yExtentDomain = extent0.j;xExtent = extent0.x;yExtent = extent0.y;event_({type:\"brushstart\"});}).tween(\"brush:brush\",function(){var xi=d3_interpolateArray(xExtent,extent1.x),yi=d3_interpolateArray(yExtent,extent1.y);xExtentDomain = yExtentDomain = null;return function(t){xExtent = extent1.x = xi(t);yExtent = extent1.y = yi(t);event_({type:\"brush\",mode:\"resize\"});};}).each(\"end.brush\",function(){xExtentDomain = extent1.i;yExtentDomain = extent1.j;event_({type:\"brush\",mode:\"resize\"});event_({type:\"brushend\"});});}else {event_({type:\"brushstart\"});event_({type:\"brush\",mode:\"resize\"});event_({type:\"brushend\"});}});};function redraw(g){g.selectAll(\".resize\").attr(\"transform\",function(d){return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";});}function redrawX(g){g.select(\".extent\").attr(\"x\",xExtent[0]);g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\",xExtent[1] - xExtent[0]);}function redrawY(g){g.select(\".extent\").attr(\"y\",yExtent[0]);g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\",yExtent[1] - yExtent[0]);}function brushstart(){var target=this,eventTarget=d3.select(d3.event.target),event_=event.of(target,arguments),g=d3.select(target),resizing=eventTarget.datum(),resizingX=!/^(n|s)$/.test(resizing) && x,resizingY=!/^(e|w)$/.test(resizing) && y,dragging=eventTarget.classed(\"extent\"),dragRestore=d3_event_dragSuppress(target),center,origin=d3.mouse(target),offset;var w=d3.select(d3_window(target)).on(\"keydown.brush\",keydown).on(\"keyup.brush\",keyup);if(d3.event.changedTouches){w.on(\"touchmove.brush\",brushmove).on(\"touchend.brush\",brushend);}else {w.on(\"mousemove.brush\",brushmove).on(\"mouseup.brush\",brushend);}g.interrupt().selectAll(\"*\").interrupt();if(dragging){origin[0] = xExtent[0] - origin[0];origin[1] = yExtent[0] - origin[1];}else if(resizing){var ex=+/w$/.test(resizing),ey=+/^n/.test(resizing);offset = [xExtent[1 - ex] - origin[0],yExtent[1 - ey] - origin[1]];origin[0] = xExtent[ex];origin[1] = yExtent[ey];}else if(d3.event.altKey)center = origin.slice();g.style(\"pointer-events\",\"none\").selectAll(\".resize\").style(\"display\",null);d3.select(\"body\").style(\"cursor\",eventTarget.style(\"cursor\"));event_({type:\"brushstart\"});brushmove();function keydown(){if(d3.event.keyCode == 32){if(!dragging){center = null;origin[0] -= xExtent[1];origin[1] -= yExtent[1];dragging = 2;}d3_eventPreventDefault();}}function keyup(){if(d3.event.keyCode == 32 && dragging == 2){origin[0] += xExtent[1];origin[1] += yExtent[1];dragging = 0;d3_eventPreventDefault();}}function brushmove(){var point=d3.mouse(target),moved=false;if(offset){point[0] += offset[0];point[1] += offset[1];}if(!dragging){if(d3.event.altKey){if(!center)center = [(xExtent[0] + xExtent[1]) / 2,(yExtent[0] + yExtent[1]) / 2];origin[0] = xExtent[+(point[0] < center[0])];origin[1] = yExtent[+(point[1] < center[1])];}else center = null;}if(resizingX && move1(point,x,0)){redrawX(g);moved = true;}if(resizingY && move1(point,y,1)){redrawY(g);moved = true;}if(moved){redraw(g);event_({type:\"brush\",mode:dragging?\"move\":\"resize\"});}}function move1(point,scale,i){var range=d3_scaleRange(scale),r0=range[0],r1=range[1],position=origin[i],extent=i?yExtent:xExtent,size=extent[1] - extent[0],min,max;if(dragging){r0 -= position;r1 -= size + position;}min = (i?yClamp:xClamp)?Math.max(r0,Math.min(r1,point[i])):point[i];if(dragging){max = (min += position) + size;}else {if(center)position = Math.max(r0,Math.min(r1,2 * center[i] - min));if(position < min){max = min;min = position;}else {max = position;}}if(extent[0] != min || extent[1] != max){if(i)yExtentDomain = null;else xExtentDomain = null;extent[0] = min;extent[1] = max;return true;}}function brushend(){brushmove();g.style(\"pointer-events\",\"all\").selectAll(\".resize\").style(\"display\",brush.empty()?\"none\":null);d3.select(\"body\").style(\"cursor\",null);w.on(\"mousemove.brush\",null).on(\"mouseup.brush\",null).on(\"touchmove.brush\",null).on(\"touchend.brush\",null).on(\"keydown.brush\",null).on(\"keyup.brush\",null);dragRestore();event_({type:\"brushend\"});}}brush.x = function(z){if(!arguments.length)return x;x = z;resizes = d3_svg_brushResizes[!x << 1 | !y];return brush;};brush.y = function(z){if(!arguments.length)return y;y = z;resizes = d3_svg_brushResizes[!x << 1 | !y];return brush;};brush.clamp = function(z){if(!arguments.length)return x && y?[xClamp,yClamp]:x?xClamp:y?yClamp:null;if(x && y)xClamp = !!z[0],yClamp = !!z[1];else if(x)xClamp = !!z;else if(y)yClamp = !!z;return brush;};brush.extent = function(z){var x0,x1,y0,y1,t;if(!arguments.length){if(x){if(xExtentDomain){x0 = xExtentDomain[0],x1 = xExtentDomain[1];}else {x0 = xExtent[0],x1 = xExtent[1];if(x.invert)x0 = x.invert(x0),x1 = x.invert(x1);if(x1 < x0)t = x0,x0 = x1,x1 = t;}}if(y){if(yExtentDomain){y0 = yExtentDomain[0],y1 = yExtentDomain[1];}else {y0 = yExtent[0],y1 = yExtent[1];if(y.invert)y0 = y.invert(y0),y1 = y.invert(y1);if(y1 < y0)t = y0,y0 = y1,y1 = t;}}return x && y?[[x0,y0],[x1,y1]]:x?[x0,x1]:y && [y0,y1];}if(x){x0 = z[0],x1 = z[1];if(y)x0 = x0[0],x1 = x1[0];xExtentDomain = [x0,x1];if(x.invert)x0 = x(x0),x1 = x(x1);if(x1 < x0)t = x0,x0 = x1,x1 = t;if(x0 != xExtent[0] || x1 != xExtent[1])xExtent = [x0,x1];}if(y){y0 = z[0],y1 = z[1];if(x)y0 = y0[1],y1 = y1[1];yExtentDomain = [y0,y1];if(y.invert)y0 = y(y0),y1 = y(y1);if(y1 < y0)t = y0,y0 = y1,y1 = t;if(y0 != yExtent[0] || y1 != yExtent[1])yExtent = [y0,y1];}return brush;};brush.clear = function(){if(!brush.empty()){xExtent = [0,0],yExtent = [0,0];xExtentDomain = yExtentDomain = null;}return brush;};brush.empty = function(){return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];};return d3.rebind(brush,event,\"on\");};var d3_svg_brushCursor={n:\"ns-resize\",e:\"ew-resize\",s:\"ns-resize\",w:\"ew-resize\",nw:\"nwse-resize\",ne:\"nesw-resize\",se:\"nwse-resize\",sw:\"nesw-resize\"};var d3_svg_brushResizes=[[\"n\",\"e\",\"s\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],[\"e\",\"w\"],[\"n\",\"s\"],[]];var d3_time_format=d3_time.format = d3_locale_enUS.timeFormat;var d3_time_formatUtc=d3_time_format.utc;var d3_time_formatIso=d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\")?d3_time_formatIsoNative:d3_time_formatIso;function d3_time_formatIsoNative(date){return date.toISOString();}d3_time_formatIsoNative.parse = function(string){var date=new Date(string);return isNaN(date)?null:date;};d3_time_formatIsoNative.toString = d3_time_formatIso.toString;d3_time.second = d3_time_interval(function(date){return new d3_date(Math.floor(date / 1e3) * 1e3);},function(date,offset){date.setTime(date.getTime() + Math.floor(offset) * 1e3);},function(date){return date.getSeconds();});d3_time.seconds = d3_time.second.range;d3_time.seconds.utc = d3_time.second.utc.range;d3_time.minute = d3_time_interval(function(date){return new d3_date(Math.floor(date / 6e4) * 6e4);},function(date,offset){date.setTime(date.getTime() + Math.floor(offset) * 6e4);},function(date){return date.getMinutes();});d3_time.minutes = d3_time.minute.range;d3_time.minutes.utc = d3_time.minute.utc.range;d3_time.hour = d3_time_interval(function(date){var timezone=date.getTimezoneOffset() / 60;return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);},function(date,offset){date.setTime(date.getTime() + Math.floor(offset) * 36e5);},function(date){return date.getHours();});d3_time.hours = d3_time.hour.range;d3_time.hours.utc = d3_time.hour.utc.range;d3_time.month = d3_time_interval(function(date){date = d3_time.day(date);date.setDate(1);return date;},function(date,offset){date.setMonth(date.getMonth() + offset);},function(date){return date.getMonth();});d3_time.months = d3_time.month.range;d3_time.months.utc = d3_time.month.utc.range;function d3_time_scale(linear,methods,format){function scale(x){return linear(x);}scale.invert = function(x){return d3_time_scaleDate(linear.invert(x));};scale.domain = function(x){if(!arguments.length)return linear.domain().map(d3_time_scaleDate);linear.domain(x);return scale;};function tickMethod(extent,count){var span=extent[1] - extent[0],target=span / count,i=d3.bisect(d3_time_scaleSteps,target);return i == d3_time_scaleSteps.length?[methods.year,d3_scale_linearTickRange(extent.map(function(d){return d / 31536e6;}),count)[2]]:!i?[d3_time_scaleMilliseconds,d3_scale_linearTickRange(extent,count)[2]]:methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target?i - 1:i];}scale.nice = function(interval,skip){var domain=scale.domain(),extent=d3_scaleExtent(domain),method=interval == null?tickMethod(extent,10):typeof interval === \"number\" && tickMethod(extent,interval);if(method)interval = method[0],skip = method[1];function skipped(date){return !isNaN(date) && !interval.range(date,d3_time_scaleDate(+date + 1),skip).length;}return scale.domain(d3_scale_nice(domain,skip > 1?{floor:function floor(date){while(skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);return date;},ceil:function ceil(date){while(skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);return date;}}:interval));};scale.ticks = function(interval,skip){var extent=d3_scaleExtent(scale.domain()),method=interval == null?tickMethod(extent,10):typeof interval === \"number\"?tickMethod(extent,interval):!interval.range && [{range:interval},skip];if(method)interval = method[0],skip = method[1];return interval.range(extent[0],d3_time_scaleDate(+extent[1] + 1),skip < 1?1:skip);};scale.tickFormat = function(){return format;};scale.copy = function(){return d3_time_scale(linear.copy(),methods,format);};return d3_scale_linearRebind(scale,linear);}function d3_time_scaleDate(t){return new Date(t);}var d3_time_scaleSteps=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6];var d3_time_scaleLocalMethods=[[d3_time.second,1],[d3_time.second,5],[d3_time.second,15],[d3_time.second,30],[d3_time.minute,1],[d3_time.minute,5],[d3_time.minute,15],[d3_time.minute,30],[d3_time.hour,1],[d3_time.hour,3],[d3_time.hour,6],[d3_time.hour,12],[d3_time.day,1],[d3_time.day,2],[d3_time.week,1],[d3_time.month,1],[d3_time.month,3],[d3_time.year,1]];var d3_time_scaleLocalFormat=d3_time_format.multi([[\".%L\",function(d){return d.getMilliseconds();}],[\":%S\",function(d){return d.getSeconds();}],[\"%I:%M\",function(d){return d.getMinutes();}],[\"%I %p\",function(d){return d.getHours();}],[\"%a %d\",function(d){return d.getDay() && d.getDate() != 1;}],[\"%b %d\",function(d){return d.getDate() != 1;}],[\"%B\",function(d){return d.getMonth();}],[\"%Y\",d3_true]]);var d3_time_scaleMilliseconds={range:function range(start,stop,step){return d3.range(Math.ceil(start / step) * step,+stop,step).map(d3_time_scaleDate);},floor:d3_identity,ceil:d3_identity};d3_time_scaleLocalMethods.year = d3_time.year;d3_time.scale = function(){return d3_time_scale(d3.scale.linear(),d3_time_scaleLocalMethods,d3_time_scaleLocalFormat);};var d3_time_scaleUtcMethods=d3_time_scaleLocalMethods.map(function(m){return [m[0].utc,m[1]];});var d3_time_scaleUtcFormat=d3_time_formatUtc.multi([[\".%L\",function(d){return d.getUTCMilliseconds();}],[\":%S\",function(d){return d.getUTCSeconds();}],[\"%I:%M\",function(d){return d.getUTCMinutes();}],[\"%I %p\",function(d){return d.getUTCHours();}],[\"%a %d\",function(d){return d.getUTCDay() && d.getUTCDate() != 1;}],[\"%b %d\",function(d){return d.getUTCDate() != 1;}],[\"%B\",function(d){return d.getUTCMonth();}],[\"%Y\",d3_true]]);d3_time_scaleUtcMethods.year = d3_time.year.utc;d3_time.scale.utc = function(){return d3_time_scale(d3.scale.linear(),d3_time_scaleUtcMethods,d3_time_scaleUtcFormat);};d3.text = d3_xhrType(function(request){return request.responseText;});d3.json = function(url,callback){return d3_xhr(url,\"application/json\",d3_json,callback);};function d3_json(request){return JSON.parse(request.responseText);}d3.html = function(url,callback){return d3_xhr(url,\"text/html\",d3_html,callback);};function d3_html(request){var range=d3_document.createRange();range.selectNode(d3_document.body);return range.createContextualFragment(request.responseText);}d3.xml = d3_xhrType(function(request){return request.responseXML;});if(true)!(__WEBPACK_AMD_DEFINE_FACTORY__ = (this.d3 = d3), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else if(typeof module === \"object\" && module.exports)module.exports = d3;else this.d3 = d3;})();//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2QzL2QzLmpzP2NjMGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0VBQWEsYUFBYSxRQUFRLGlCQUFpQiw0REFBNEQsa0NBQWtDLDhCQUE4QixrQ0FBa0MsOEVBQThFLHlCQUF5QixvSEFBb0gsZ0JBQWdCLElBQUksOERBQThELFVBQVUsMEJBQTBCLHFDQUFxQyw4QkFBOEIsaUJBQWlCLG1DQUFtQyxxQkFBcUIsZ0JBQWdCLElBQUksb0VBQW9FLGNBQWMsa1JBQWtSLHlEQUF5RCxxREFBcUQsa0VBQWtFLDhEQUE4RCwrREFBK0QsNkRBQTZELDRCQUE0QiwyQkFBMkIsc0NBQXNDLDhCQUE4Qix1Q0FBdUMsMkJBQTJCLDRCQUE0QiwyQkFBMkIsb0RBQW9ELE1BQU0sT0FBTyx5REFBeUQsTUFBTSxvRUFBb0UsTUFBTSxPQUFPLHlFQUF5RSxXQUFXLDJCQUEyQiw0QkFBNEIsMkJBQTJCLG9EQUFvRCxNQUFNLE9BQU8seURBQXlELE1BQU0sb0VBQW9FLE1BQU0sT0FBTyx5RUFBeUUsV0FBVyw4QkFBOEIsOEJBQThCLDJCQUEyQixvREFBb0QsVUFBVSxPQUFPLDBDQUEwQyxlQUFlLGlCQUFpQixNQUFNLG9FQUFvRSxVQUFVLE9BQU8sMERBQTBELGVBQWUsaUJBQWlCLGVBQWUsc0JBQXNCLDBCQUEwQix1QkFBdUIsa0JBQWtCLDJCQUEyQiw4QkFBOEIsMkJBQTJCLG9EQUFvRCxNQUFNLG9FQUFvRSxXQUFXLDRCQUE0QixrQ0FBa0MsMkJBQTJCLDZEQUE2RCxVQUFVLE1BQU0sNkVBQTZFLFVBQVUsb0JBQW9CLGlDQUFpQywyRUFBMkUscUNBQXFDLDhCQUE4QixxQ0FBcUMsMkJBQTJCLHVFQUF1RSxNQUFNLHVGQUF1RixzRUFBc0UsZ0NBQWdDLHdDQUF3QywyQkFBMkIsZ0JBQWdCLHdDQUF3QyxVQUFVLGFBQWEsb0JBQW9CLE1BQU0sZ0JBQWdCLHdEQUF3RCxVQUFVLGFBQWEsb0JBQW9CLDhCQUE4QiwwQkFBMEIsd0NBQXdDLDBC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NEgsdVdBQXVXLHNFQUFzRSw0QkFBNEIscUJBQXFCLHVCQUF1Qix1QkFBdUIsdUJBQXVCLHVCQUF1QixxQkFBcUIsdUJBQXVCLHVDQUF1Qyx1QkFBdUIseUJBQXlCLG9CQUFvQixxQkFBcUIsbUJBQW1CLCtCQUErQixzQ0FBc0MsbUZBQW1GLHFDQUFxQyw4Q0FBOEMsMkJBQTJCLDZGQUE2RixzRUFBc0Usd0JBQXdCLEVBQUUsdUVBQXVFLCtCQUErQixxQkFBcUIsMEJBQTBCLHVCQUF1QiwwQkFBMEIsdUJBQXVCLHdCQUF3Qix1QkFBdUIsNkNBQTZDLHVCQUF1Qiw0QkFBNEIsb0JBQW9CLHdCQUF3QixtQkFBbUIsZ0RBQWdELCtCQUErQix5RkFBeUYsdUNBQXVDLDZCQUE2QixFQUFFLGlDQUFpQyx5REFBeUQsMEJBQTBCLHlDQUF5QyxpQ0FBaUMsa0RBQWtELDBCQUEwQixvQ0FBb0MsbUNBQW1DLDZEQUE2RCxzQ0FBc0MsNEJBQTRCLEVBQUUsNFdBQW1FLHlFQUF5RSxtQkFBbUIiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7IShmdW5jdGlvbigpe3ZhciBkMz17dmVyc2lvbjpcIjMuNS43XCJ9O3ZhciBkM19hcnJheVNsaWNlPVtdLnNsaWNlLGQzX2FycmF5PWZ1bmN0aW9uIGQzX2FycmF5KGxpc3Qpe3JldHVybiBkM19hcnJheVNsaWNlLmNhbGwobGlzdCk7fTt2YXIgZDNfZG9jdW1lbnQ9dGhpcy5kb2N1bWVudDtmdW5jdGlvbiBkM19kb2N1bWVudEVsZW1lbnQobm9kZSl7cmV0dXJuIG5vZGUgJiYgKG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlLmRvY3VtZW50IHx8IG5vZGUpLmRvY3VtZW50RWxlbWVudDt9ZnVuY3Rpb24gZDNfd2luZG93KG5vZGUpe3JldHVybiBub2RlICYmIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IG5vZGUuZG9jdW1lbnQgJiYgbm9kZSB8fCBub2RlLmRlZmF1bHRWaWV3KTt9aWYoZDNfZG9jdW1lbnQpe3RyeXtkM19hcnJheShkM19kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGU7fWNhdGNoKGUpIHtkM19hcnJheSA9IGZ1bmN0aW9uKGxpc3Qpe3ZhciBpPWxpc3QubGVuZ3RoLGFycmF5PW5ldyBBcnJheShpKTt3aGlsZShpLS0pIGFycmF5W2ldID0gbGlzdFtpXTtyZXR1cm4gYXJyYXk7fTt9fWlmKCFEYXRlLm5vdylEYXRlLm5vdyA9IGZ1bmN0aW9uKCl7cmV0dXJuICtuZXcgRGF0ZSgpO307aWYoZDNfZG9jdW1lbnQpe3RyeXtkM19kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpLnN0eWxlLnNldFByb3BlcnR5KFwib3BhY2l0eVwiLDAsXCJcIik7fWNhdGNoKGVycm9yKSB7dmFyIGQzX2VsZW1lbnRfcHJvdG90eXBlPXRoaXMuRWxlbWVudC5wcm90b3R5cGUsZDNfZWxlbWVudF9zZXRBdHRyaWJ1dGU9ZDNfZWxlbWVudF9wcm90b3R5cGUuc2V0QXR0cmlidXRlLGQzX2VsZW1lbnRfc2V0QXR0cmlidXRlTlM9ZDNfZWxlbWVudF9wcm90b3R5cGUuc2V0QXR0cmlidXRlTlMsZDNfc3R5bGVfcHJvdG90eXBlPXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsZDNfc3R5bGVfc2V0UHJvcGVydHk9ZDNfc3R5bGVfcHJvdG90eXBlLnNldFByb3BlcnR5O2QzX2VsZW1lbnRfcHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsdmFsdWUpe2QzX2VsZW1lbnRfc2V0QXR0cmlidXRlLmNhbGwodGhpcyxuYW1lLHZhbHVlICsgXCJcIik7fTtkM19lbGVtZW50X3Byb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uKHNwYWNlLGxvY2FsLHZhbHVlKXtkM19lbGVtZW50X3NldEF0dHJpYnV0ZU5TLmNhbGwodGhpcyxzcGFjZSxsb2NhbCx2YWx1ZSArIFwiXCIpO307ZDNfc3R5bGVfcHJvdG90eXBlLnNldFByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSx2YWx1ZSxwcmlvcml0eSl7ZDNfc3R5bGVfc2V0UHJvcGVydHkuY2FsbCh0aGlzLG5hbWUsdmFsdWUgKyBcIlwiLHByaW9yaXR5KTt9O319ZDMuYXNjZW5kaW5nID0gZDNfYXNjZW5kaW5nO2Z1bmN0aW9uIGQzX2FzY2VuZGluZyhhLGIpe3JldHVybiBhIDwgYj8tMTphID4gYj8xOmEgPj0gYj8wOk5hTjt9ZDMuZGVzY2VuZGluZyA9IGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIgPCBhPy0xOmIgPiBhPzE6YiA+PSBhPzA6TmFOO307ZDMubWluID0gZnVuY3Rpb24oYXJyYXksZil7dmFyIGk9LTEsbj1hcnJheS5sZW5ndGgsYSxiO2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpe3doaWxlKCsraSA8IG4pIGlmKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBhID4gYilhID0gYjt9ZWxzZSB7d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYSA+IGIpYSA9IGI7fXJldHVybiBhO307ZDMubWF4ID0gZnVuY3Rpb24oYXJyYXksZil7dmFyIGk9LTEsbj1hcnJheS5sZW5ndGgsYSxiO2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpe3doaWxlKCsraSA8IG4pIGlmKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID4gYSlhID0gYjt9ZWxzZSB7d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYiA+IGEpYSA9IGI7fXJldHVybiBhO307ZDMuZXh0ZW50ID0gZnVuY3Rpb24oYXJyYXksZil7dmFyIGk9LTEsbj1hcnJheS5sZW5ndGgsYSxiLGM7aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID49IGIpe2EgPSBjID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCl7aWYoYSA+IGIpYSA9IGI7aWYoYyA8IGIpYyA9IGI7fX1lbHNlIHt3aGlsZSgrK2kgPCBuKSBpZigoYiA9IGYuY2FsbChhcnJheSxhcnJheVtpXSxpKSkgIT0gbnVsbCAmJiBiID49IGIpe2EgPSBjID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwpe2lmKGEgPiBiKWEgPSBiO2lmKGMgPCBiKWMgPSBiO319cmV0dXJuIFthLGNdO307ZnVuY3Rpb24gZDNfbnVtYmVyKHgpe3JldHVybiB4ID09PSBudWxsP05hTjoreDt9ZnVuY3Rpb24gZDNfbnVtZXJpYyh4KXtyZXR1cm4gIWlzTmFOKHgpO31kMy5zdW0gPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgcz0wLG49YXJyYXkubGVuZ3RoLGEsaT0tMTtpZihhcmd1bWVudHMubGVuZ3RoID09PSAxKXt3aGlsZSgrK2kgPCBuKSBpZihkM19udW1lcmljKGEgPSArYXJyYXlbaV0pKXMgKz0gYTt9ZWxzZSB7d2hpbGUoKytpIDwgbikgaWYoZDNfbnVtZXJpYyhhID0gK2YuY2FsbChhcnJheSxhcnJheVtpXSxpKSkpcyArPSBhO31yZXR1cm4gczt9O2QzLm1lYW4gPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgcz0wLG49YXJyYXkubGVuZ3RoLGEsaT0tMSxqPW47aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikgaWYoZDNfbnVtZXJpYyhhID0gZDNfbnVtYmVyKGFycmF5W2ldKSkpcyArPSBhO2Vsc2UgLS1qO31lbHNlIHt3aGlsZSgrK2kgPCBuKSBpZihkM19udW1lcmljKGEgPSBkM19udW1iZXIoZi5jYWxsKGFycmF5LGFycmF5W2ldLGkpKSkpcyArPSBhO2Vsc2UgLS1qO31pZihqKXJldHVybiBzIC8gajt9O2QzLnF1YW50aWxlID0gZnVuY3Rpb24odmFsdWVzLHApe3ZhciBIPSh2YWx1ZXMubGVuZ3RoIC0gMSkgKiBwICsgMSxoPU1hdGguZmxvb3IoSCksdj0rdmFsdWVzW2ggLSAxXSxlPUggLSBoO3JldHVybiBlP3YgKyBlICogKHZhbHVlc1toXSAtIHYpOnY7fTtkMy5tZWRpYW4gPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgbnVtYmVycz1bXSxuPWFycmF5Lmxlbmd0aCxhLGk9LTE7aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikgaWYoZDNfbnVtZXJpYyhhID0gZDNfbnVtYmVyKGFycmF5W2ldKSkpbnVtYmVycy5wdXNoKGEpO31lbHNlIHt3aGlsZSgrK2kgPCBuKSBpZihkM19udW1lcmljKGEgPSBkM19udW1iZXIoZi5jYWxsKGFycmF5LGFycmF5W2ldLGkpKSkpbnVtYmVycy5wdXNoKGEpO31pZihudW1iZXJzLmxlbmd0aClyZXR1cm4gZDMucXVhbnRpbGUobnVtYmVycy5zb3J0KGQzX2FzY2VuZGluZyksLjUpO307ZDMudmFyaWFuY2UgPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgbj1hcnJheS5sZW5ndGgsbT0wLGEsZCxzPTAsaT0tMSxqPTA7aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikge2lmKGQzX251bWVyaWMoYSA9IGQzX251bWJlcihhcnJheVtpXSkpKXtkID0gYSAtIG07bSArPSBkIC8gKytqO3MgKz0gZCAqIChhIC0gbSk7fX19ZWxzZSB7d2hpbGUoKytpIDwgbikge2lmKGQzX251bWVyaWMoYSA9IGQzX251bWJlcihmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpKSl7ZCA9IGEgLSBtO20gKz0gZCAvICsrajtzICs9IGQgKiAoYSAtIG0pO319fWlmKGogPiAxKXJldHVybiBzIC8gKGogLSAxKTt9O2QzLmRldmlhdGlvbiA9IGZ1bmN0aW9uKCl7dmFyIHY9ZDMudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2P01hdGguc3FydCh2KTp2O307ZnVuY3Rpb24gZDNfYmlzZWN0b3IoY29tcGFyZSl7cmV0dXJuIHtsZWZ0OmZ1bmN0aW9uIGxlZnQoYSx4LGxvLGhpKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMylsbyA9IDA7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDQpaGkgPSBhLmxlbmd0aDt3aGlsZShsbyA8IGhpKSB7dmFyIG1pZD1sbyArIGhpID4+PiAxO2lmKGNvbXBhcmUoYVttaWRdLHgpIDwgMClsbyA9IG1pZCArIDE7ZWxzZSBoaSA9IG1pZDt9cmV0dXJuIGxvO30scmlnaHQ6ZnVuY3Rpb24gcmlnaHQoYSx4LGxvLGhpKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMylsbyA9IDA7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDQpaGkgPSBhLmxlbmd0aDt3aGlsZShsbyA8IGhpKSB7dmFyIG1pZD1sbyArIGhpID4+PiAxO2lmKGNvbXBhcmUoYVttaWRdLHgpID4gMCloaSA9IG1pZDtlbHNlIGxvID0gbWlkICsgMTt9cmV0dXJuIGxvO319O312YXIgZDNfYmlzZWN0PWQzX2Jpc2VjdG9yKGQzX2FzY2VuZGluZyk7ZDMuYmlzZWN0TGVmdCA9IGQzX2Jpc2VjdC5sZWZ0O2QzLmJpc2VjdCA9IGQzLmJpc2VjdFJpZ2h0ID0gZDNfYmlzZWN0LnJpZ2h0O2QzLmJpc2VjdG9yID0gZnVuY3Rpb24oZil7cmV0dXJuIGQzX2Jpc2VjdG9yKGYubGVuZ3RoID09PSAxP2Z1bmN0aW9uKGQseCl7cmV0dXJuIGQzX2FzY2VuZGluZyhmKGQpLHgpO306Zik7fTtkMy5zaHVmZmxlID0gZnVuY3Rpb24oYXJyYXksaTAsaTEpe2lmKChtID0gYXJndW1lbnRzLmxlbmd0aCkgPCAzKXtpMSA9IGFycmF5Lmxlbmd0aDtpZihtIDwgMilpMCA9IDA7fXZhciBtPWkxIC0gaTAsdCxpO3doaWxlKG0pIHtpID0gTWF0aC5yYW5kb20oKSAqIG0tLSB8IDA7dCA9IGFycmF5W20gKyBpMF0sYXJyYXlbbSArIGkwXSA9IGFycmF5W2kgKyBpMF0sYXJyYXlbaSArIGkwXSA9IHQ7fXJldHVybiBhcnJheTt9O2QzLnBlcm11dGUgPSBmdW5jdGlvbihhcnJheSxpbmRleGVzKXt2YXIgaT1pbmRleGVzLmxlbmd0aCxwZXJtdXRlcz1uZXcgQXJyYXkoaSk7d2hpbGUoaS0tKSBwZXJtdXRlc1tpXSA9IGFycmF5W2luZGV4ZXNbaV1dO3JldHVybiBwZXJtdXRlczt9O2QzLnBhaXJzID0gZnVuY3Rpb24oYXJyYXkpe3ZhciBpPTAsbj1hcnJheS5sZW5ndGggLSAxLHAwLHAxPWFycmF5WzBdLHBhaXJzPW5ldyBBcnJheShuIDwgMD8wOm4pO3doaWxlKGkgPCBuKSBwYWlyc1tpXSA9IFtwMCA9IHAxLHAxID0gYXJyYXlbKytpXV07cmV0dXJuIHBhaXJzO307ZDMuemlwID0gZnVuY3Rpb24oKXtpZighKG4gPSBhcmd1bWVudHMubGVuZ3RoKSlyZXR1cm4gW107Zm9yKHZhciBpPS0xLG09ZDMubWluKGFyZ3VtZW50cyxkM196aXBMZW5ndGgpLHppcHM9bmV3IEFycmF5KG0pOysraSA8IG07KSB7Zm9yKHZhciBqPS0xLG4semlwPXppcHNbaV0gPSBuZXcgQXJyYXkobik7KytqIDwgbjspIHt6aXBbal0gPSBhcmd1bWVudHNbal1baV07fX1yZXR1cm4gemlwczt9O2Z1bmN0aW9uIGQzX3ppcExlbmd0aChkKXtyZXR1cm4gZC5sZW5ndGg7fWQzLnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG1hdHJpeCl7cmV0dXJuIGQzLnppcC5hcHBseShkMyxtYXRyaXgpO307ZDMua2V5cyA9IGZ1bmN0aW9uKG1hcCl7dmFyIGtleXM9W107Zm9yKHZhciBrZXkgaW4gbWFwKSBrZXlzLnB1c2goa2V5KTtyZXR1cm4ga2V5czt9O2QzLnZhbHVlcyA9IGZ1bmN0aW9uKG1hcCl7dmFyIHZhbHVlcz1bXTtmb3IodmFyIGtleSBpbiBtYXApIHZhbHVlcy5wdXNoKG1hcFtrZXldKTtyZXR1cm4gdmFsdWVzO307ZDMuZW50cmllcyA9IGZ1bmN0aW9uKG1hcCl7dmFyIGVudHJpZXM9W107Zm9yKHZhciBrZXkgaW4gbWFwKSBlbnRyaWVzLnB1c2goe2tleTprZXksdmFsdWU6bWFwW2tleV19KTtyZXR1cm4gZW50cmllczt9O2QzLm1lcmdlID0gZnVuY3Rpb24oYXJyYXlzKXt2YXIgbj1hcnJheXMubGVuZ3RoLG0saT0tMSxqPTAsbWVyZ2VkLGFycmF5O3doaWxlKCsraSA8IG4pIGogKz0gYXJyYXlzW2ldLmxlbmd0aDttZXJnZWQgPSBuZXcgQXJyYXkoaik7d2hpbGUoLS1uID49IDApIHthcnJheSA9IGFycmF5c1tuXTttID0gYXJyYXkubGVuZ3RoO3doaWxlKC0tbSA+PSAwKSB7bWVyZ2VkWy0tal0gPSBhcnJheVttXTt9fXJldHVybiBtZXJnZWQ7fTt2YXIgYWJzPU1hdGguYWJzO2QzLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsc3RvcCxzdGVwKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMyl7c3RlcCA9IDE7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpe3N0b3AgPSBzdGFydDtzdGFydCA9IDA7fX1pZigoc3RvcCAtIHN0YXJ0KSAvIHN0ZXAgPT09IEluZmluaXR5KXRocm93IG5ldyBFcnJvcihcImluZmluaXRlIHJhbmdlXCIpO3ZhciByYW5nZT1bXSxrPWQzX3JhbmdlX2ludGVnZXJTY2FsZShhYnMoc3RlcCkpLGk9LTEsajtzdGFydCAqPSBrLHN0b3AgKj0gayxzdGVwICo9IGs7aWYoc3RlcCA8IDApd2hpbGUoKGogPSBzdGFydCArIHN0ZXAgKiArK2kpID4gc3RvcCkgcmFuZ2UucHVzaChqIC8gayk7ZWxzZSB3aGlsZSgoaiA9IHN0YXJ0ICsgc3RlcCAqICsraSkgPCBzdG9wKSByYW5nZS5wdXNoKGogLyBrKTtyZXR1cm4gcmFuZ2U7fTtmdW5jdGlvbiBkM19yYW5nZV9pbnRlZ2VyU2NhbGUoeCl7dmFyIGs9MTt3aGlsZSh4ICogayAlIDEpIGsgKj0gMTA7cmV0dXJuIGs7fWZ1bmN0aW9uIGQzX2NsYXNzKGN0b3IscHJvcGVydGllcyl7Zm9yKHZhciBrZXkgaW4gcHJvcGVydGllcykge09iamVjdC5kZWZpbmVQcm9wZXJ0eShjdG9yLnByb3RvdHlwZSxrZXkse3ZhbHVlOnByb3BlcnRpZXNba2V5XSxlbnVtZXJhYmxlOmZhbHNlfSk7fX1kMy5tYXAgPSBmdW5jdGlvbihvYmplY3QsZil7dmFyIG1hcD1uZXcgZDNfTWFwKCk7aWYob2JqZWN0IGluc3RhbmNlb2YgZDNfTWFwKXtvYmplY3QuZm9yRWFjaChmdW5jdGlvbihrZXksdmFsdWUpe21hcC5zZXQoa2V5LHZhbHVlKTt9KTt9ZWxzZSBpZihBcnJheS5pc0FycmF5KG9iamVjdCkpe3ZhciBpPS0xLG49b2JqZWN0Lmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpd2hpbGUoKytpIDwgbikgbWFwLnNldChpLG9iamVjdFtpXSk7ZWxzZSB3aGlsZSgrK2kgPCBuKSBtYXAuc2V0KGYuY2FsbChvYmplY3QsbyA9IG9iamVjdFtpXSxpKSxvKTt9ZWxzZSB7Zm9yKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSxvYmplY3Rba2V5XSk7fXJldHVybiBtYXA7fTtmdW5jdGlvbiBkM19NYXAoKXt0aGlzLl8gPSBPYmplY3QuY3JlYXRlKG51bGwpO312YXIgZDNfbWFwX3Byb3RvPVwiX19wcm90b19fXCIsZDNfbWFwX3plcm89XCJcXHgwMFwiO2QzX2NsYXNzKGQzX01hcCx7aGFzOmQzX21hcF9oYXMsZ2V0OmZ1bmN0aW9uIGdldChrZXkpe3JldHVybiB0aGlzLl9bZDNfbWFwX2VzY2FwZShrZXkpXTt9LHNldDpmdW5jdGlvbiBzZXQoa2V5LHZhbHVlKXtyZXR1cm4gdGhpcy5fW2QzX21hcF9lc2NhcGUoa2V5KV0gPSB2YWx1ZTt9LHJlbW92ZTpkM19tYXBfcmVtb3ZlLGtleXM6ZDNfbWFwX2tleXMsdmFsdWVzOmZ1bmN0aW9uIHZhbHVlcygpe3ZhciB2YWx1ZXM9W107Zm9yKHZhciBrZXkgaW4gdGhpcy5fKSB2YWx1ZXMucHVzaCh0aGlzLl9ba2V5XSk7cmV0dXJuIHZhbHVlczt9LGVudHJpZXM6ZnVuY3Rpb24gZW50cmllcygpe3ZhciBlbnRyaWVzPVtdO2Zvcih2YXIga2V5IGluIHRoaXMuXykgZW50cmllcy5wdXNoKHtrZXk6ZDNfbWFwX3VuZXNjYXBlKGtleSksdmFsdWU6dGhpcy5fW2tleV19KTtyZXR1cm4gZW50cmllczt9LHNpemU6ZDNfbWFwX3NpemUsZW1wdHk6ZDNfbWFwX2VtcHR5LGZvckVhY2g6ZnVuY3Rpb24gZm9yRWFjaChmKXtmb3IodmFyIGtleSBpbiB0aGlzLl8pIGYuY2FsbCh0aGlzLGQzX21hcF91bmVzY2FwZShrZXkpLHRoaXMuX1trZXldKTt9fSk7ZnVuY3Rpb24gZDNfbWFwX2VzY2FwZShrZXkpe3JldHVybiAoa2V5ICs9IFwiXCIpID09PSBkM19tYXBfcHJvdG8gfHwga2V5WzBdID09PSBkM19tYXBfemVybz9kM19tYXBfemVybyArIGtleTprZXk7fWZ1bmN0aW9uIGQzX21hcF91bmVzY2FwZShrZXkpe3JldHVybiAoa2V5ICs9IFwiXCIpWzBdID09PSBkM19tYXBfemVybz9rZXkuc2xpY2UoMSk6a2V5O31mdW5jdGlvbiBkM19tYXBfaGFzKGtleSl7cmV0dXJuIGQzX21hcF9lc2NhcGUoa2V5KSBpbiB0aGlzLl87fWZ1bmN0aW9uIGQzX21hcF9yZW1vdmUoa2V5KXtyZXR1cm4gKGtleSA9IGQzX21hcF9lc2NhcGUoa2V5KSkgaW4gdGhpcy5fICYmIGRlbGV0ZSB0aGlzLl9ba2V5XTt9ZnVuY3Rpb24gZDNfbWFwX2tleXMoKXt2YXIga2V5cz1bXTtmb3IodmFyIGtleSBpbiB0aGlzLl8pIGtleXMucHVzaChkM19tYXBfdW5lc2NhcGUoa2V5KSk7cmV0dXJuIGtleXM7fWZ1bmN0aW9uIGQzX21hcF9zaXplKCl7dmFyIHNpemU9MDtmb3IodmFyIGtleSBpbiB0aGlzLl8pICsrc2l6ZTtyZXR1cm4gc2l6ZTt9ZnVuY3Rpb24gZDNfbWFwX2VtcHR5KCl7Zm9yKHZhciBrZXkgaW4gdGhpcy5fKSByZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fWQzLm5lc3QgPSBmdW5jdGlvbigpe3ZhciBuZXN0PXt9LGtleXM9W10sc29ydEtleXM9W10sc29ydFZhbHVlcyxyb2xsdXA7ZnVuY3Rpb24gbWFwKG1hcFR5cGUsYXJyYXksZGVwdGgpe2lmKGRlcHRoID49IGtleXMubGVuZ3RoKXJldHVybiByb2xsdXA/cm9sbHVwLmNhbGwobmVzdCxhcnJheSk6c29ydFZhbHVlcz9hcnJheS5zb3J0KHNvcnRWYWx1ZXMpOmFycmF5O3ZhciBpPS0xLG49YXJyYXkubGVuZ3RoLGtleT1rZXlzW2RlcHRoKytdLGtleVZhbHVlLG9iamVjdCxzZXR0ZXIsdmFsdWVzQnlLZXk9bmV3IGQzX01hcCgpLHZhbHVlczt3aGlsZSgrK2kgPCBuKSB7aWYodmFsdWVzID0gdmFsdWVzQnlLZXkuZ2V0KGtleVZhbHVlID0ga2V5KG9iamVjdCA9IGFycmF5W2ldKSkpe3ZhbHVlcy5wdXNoKG9iamVjdCk7fWVsc2Uge3ZhbHVlc0J5S2V5LnNldChrZXlWYWx1ZSxbb2JqZWN0XSk7fX1pZihtYXBUeXBlKXtvYmplY3QgPSBtYXBUeXBlKCk7c2V0dGVyID0gZnVuY3Rpb24oa2V5VmFsdWUsdmFsdWVzKXtvYmplY3Quc2V0KGtleVZhbHVlLG1hcChtYXBUeXBlLHZhbHVlcyxkZXB0aCkpO307fWVsc2Uge29iamVjdCA9IHt9O3NldHRlciA9IGZ1bmN0aW9uKGtleVZhbHVlLHZhbHVlcyl7b2JqZWN0W2tleVZhbHVlXSA9IG1hcChtYXBUeXBlLHZhbHVlcyxkZXB0aCk7fTt9dmFsdWVzQnlLZXkuZm9yRWFjaChzZXR0ZXIpO3JldHVybiBvYmplY3Q7fWZ1bmN0aW9uIGVudHJpZXMobWFwLGRlcHRoKXtpZihkZXB0aCA+PSBrZXlzLmxlbmd0aClyZXR1cm4gbWFwO3ZhciBhcnJheT1bXSxzb3J0S2V5PXNvcnRLZXlzW2RlcHRoKytdO21hcC5mb3JFYWNoKGZ1bmN0aW9uKGtleSxrZXlNYXApe2FycmF5LnB1c2goe2tleTprZXksdmFsdWVzOmVudHJpZXMoa2V5TWFwLGRlcHRoKX0pO30pO3JldHVybiBzb3J0S2V5P2FycmF5LnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gc29ydEtleShhLmtleSxiLmtleSk7fSk6YXJyYXk7fW5lc3QubWFwID0gZnVuY3Rpb24oYXJyYXksbWFwVHlwZSl7cmV0dXJuIG1hcChtYXBUeXBlLGFycmF5LDApO307bmVzdC5lbnRyaWVzID0gZnVuY3Rpb24oYXJyYXkpe3JldHVybiBlbnRyaWVzKG1hcChkMy5tYXAsYXJyYXksMCksMCk7fTtuZXN0LmtleSA9IGZ1bmN0aW9uKGQpe2tleXMucHVzaChkKTtyZXR1cm4gbmVzdDt9O25lc3Quc29ydEtleXMgPSBmdW5jdGlvbihvcmRlcil7c29ydEtleXNba2V5cy5sZW5ndGggLSAxXSA9IG9yZGVyO3JldHVybiBuZXN0O307bmVzdC5zb3J0VmFsdWVzID0gZnVuY3Rpb24ob3JkZXIpe3NvcnRWYWx1ZXMgPSBvcmRlcjtyZXR1cm4gbmVzdDt9O25lc3Qucm9sbHVwID0gZnVuY3Rpb24oZil7cm9sbHVwID0gZjtyZXR1cm4gbmVzdDt9O3JldHVybiBuZXN0O307ZDMuc2V0ID0gZnVuY3Rpb24oYXJyYXkpe3ZhciBzZXQ9bmV3IGQzX1NldCgpO2lmKGFycmF5KWZvcih2YXIgaT0wLG49YXJyYXkubGVuZ3RoO2kgPCBuOysraSkgc2V0LmFkZChhcnJheVtpXSk7cmV0dXJuIHNldDt9O2Z1bmN0aW9uIGQzX1NldCgpe3RoaXMuXyA9IE9iamVjdC5jcmVhdGUobnVsbCk7fWQzX2NsYXNzKGQzX1NldCx7aGFzOmQzX21hcF9oYXMsYWRkOmZ1bmN0aW9uIGFkZChrZXkpe3RoaXMuX1tkM19tYXBfZXNjYXBlKGtleSArPSBcIlwiKV0gPSB0cnVlO3JldHVybiBrZXk7fSxyZW1vdmU6ZDNfbWFwX3JlbW92ZSx2YWx1ZXM6ZDNfbWFwX2tleXMsc2l6ZTpkM19tYXBfc2l6ZSxlbXB0eTpkM19tYXBfZW1wdHksZm9yRWFjaDpmdW5jdGlvbiBmb3JFYWNoKGYpe2Zvcih2YXIga2V5IGluIHRoaXMuXykgZi5jYWxsKHRoaXMsZDNfbWFwX3VuZXNjYXBlKGtleSkpO319KTtkMy5iZWhhdmlvciA9IHt9O2Z1bmN0aW9uIGQzX2lkZW50aXR5KGQpe3JldHVybiBkO31kMy5yZWJpbmQgPSBmdW5jdGlvbih0YXJnZXQsc291cmNlKXt2YXIgaT0xLG49YXJndW1lbnRzLmxlbmd0aCxtZXRob2Q7d2hpbGUoKytpIDwgbikgdGFyZ2V0W21ldGhvZCA9IGFyZ3VtZW50c1tpXV0gPSBkM19yZWJpbmQodGFyZ2V0LHNvdXJjZSxzb3VyY2VbbWV0aG9kXSk7cmV0dXJuIHRhcmdldDt9O2Z1bmN0aW9uIGQzX3JlYmluZCh0YXJnZXQsc291cmNlLG1ldGhvZCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHZhbHVlPW1ldGhvZC5hcHBseShzb3VyY2UsYXJndW1lbnRzKTtyZXR1cm4gdmFsdWUgPT09IHNvdXJjZT90YXJnZXQ6dmFsdWU7fTt9ZnVuY3Rpb24gZDNfdmVuZG9yU3ltYm9sKG9iamVjdCxuYW1lKXtpZihuYW1lIGluIG9iamVjdClyZXR1cm4gbmFtZTtuYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7Zm9yKHZhciBpPTAsbj1kM192ZW5kb3JQcmVmaXhlcy5sZW5ndGg7aSA8IG47KytpKSB7dmFyIHByZWZpeE5hbWU9ZDNfdmVuZG9yUHJlZml4ZXNbaV0gKyBuYW1lO2lmKHByZWZpeE5hbWUgaW4gb2JqZWN0KXJldHVybiBwcmVmaXhOYW1lO319dmFyIGQzX3ZlbmRvclByZWZpeGVzPVtcIndlYmtpdFwiLFwibXNcIixcIm1velwiLFwiTW96XCIsXCJvXCIsXCJPXCJdO2Z1bmN0aW9uIGQzX25vb3AoKXt9ZDMuZGlzcGF0Y2ggPSBmdW5jdGlvbigpe3ZhciBkaXNwYXRjaD1uZXcgZDNfZGlzcGF0Y2goKSxpPS0xLG49YXJndW1lbnRzLmxlbmd0aDt3aGlsZSgrK2kgPCBuKSBkaXNwYXRjaFthcmd1bWVudHNbaV1dID0gZDNfZGlzcGF0Y2hfZXZlbnQoZGlzcGF0Y2gpO3JldHVybiBkaXNwYXRjaDt9O2Z1bmN0aW9uIGQzX2Rpc3BhdGNoKCl7fWQzX2Rpc3BhdGNoLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsbGlzdGVuZXIpe3ZhciBpPXR5cGUuaW5kZXhPZihcIi5cIiksbmFtZT1cIlwiO2lmKGkgPj0gMCl7bmFtZSA9IHR5cGUuc2xpY2UoaSArIDEpO3R5cGUgPSB0eXBlLnNsaWNlKDAsaSk7fWlmKHR5cGUpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyP3RoaXNbdHlwZV0ub24obmFtZSk6dGhpc1t0eXBlXS5vbihuYW1lLGxpc3RlbmVyKTtpZihhcmd1bWVudHMubGVuZ3RoID09PSAyKXtpZihsaXN0ZW5lciA9PSBudWxsKWZvcih0eXBlIGluIHRoaXMpIHtpZih0aGlzLmhhc093blByb3BlcnR5KHR5cGUpKXRoaXNbdHlwZV0ub24obmFtZSxudWxsKTt9cmV0dXJuIHRoaXM7fX07ZnVuY3Rpb24gZDNfZGlzcGF0Y2hfZXZlbnQoZGlzcGF0Y2gpe3ZhciBsaXN0ZW5lcnM9W10sbGlzdGVuZXJCeU5hbWU9bmV3IGQzX01hcCgpO2Z1bmN0aW9uIGV2ZW50KCl7dmFyIHo9bGlzdGVuZXJzLGk9LTEsbj16Lmxlbmd0aCxsO3doaWxlKCsraSA8IG4pIGlmKGwgPSB6W2ldLm9uKWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBkaXNwYXRjaDt9ZXZlbnQub24gPSBmdW5jdGlvbihuYW1lLGxpc3RlbmVyKXt2YXIgbD1saXN0ZW5lckJ5TmFtZS5nZXQobmFtZSksaTtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilyZXR1cm4gbCAmJiBsLm9uO2lmKGwpe2wub24gPSBudWxsO2xpc3RlbmVycyA9IGxpc3RlbmVycy5zbGljZSgwLGkgPSBsaXN0ZW5lcnMuaW5kZXhPZihsKSkuY29uY2F0KGxpc3RlbmVycy5zbGljZShpICsgMSkpO2xpc3RlbmVyQnlOYW1lLnJlbW92ZShuYW1lKTt9aWYobGlzdGVuZXIpbGlzdGVuZXJzLnB1c2gobGlzdGVuZXJCeU5hbWUuc2V0KG5hbWUse29uOmxpc3RlbmVyfSkpO3JldHVybiBkaXNwYXRjaDt9O3JldHVybiBldmVudDt9ZDMuZXZlbnQgPSBudWxsO2Z1bmN0aW9uIGQzX2V2ZW50UHJldmVudERlZmF1bHQoKXtkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO31mdW5jdGlvbiBkM19ldmVudFNvdXJjZSgpe3ZhciBlPWQzLmV2ZW50LHM7d2hpbGUocyA9IGUuc291cmNlRXZlbnQpIGUgPSBzO3JldHVybiBlO31mdW5jdGlvbiBkM19ldmVudERpc3BhdGNoKHRhcmdldCl7dmFyIGRpc3BhdGNoPW5ldyBkM19kaXNwYXRjaCgpLGk9MCxuPWFyZ3VtZW50cy5sZW5ndGg7d2hpbGUoKytpIDwgbikgZGlzcGF0Y2hbYXJndW1lbnRzW2ldXSA9IGQzX2Rpc3BhdGNoX2V2ZW50KGRpc3BhdGNoKTtkaXNwYXRjaC5vZiA9IGZ1bmN0aW9uKHRoaXosYXJndW1lbnR6KXtyZXR1cm4gZnVuY3Rpb24oZTEpe3RyeXt2YXIgZTA9ZTEuc291cmNlRXZlbnQgPSBkMy5ldmVudDtlMS50YXJnZXQgPSB0YXJnZXQ7ZDMuZXZlbnQgPSBlMTtkaXNwYXRjaFtlMS50eXBlXS5hcHBseSh0aGl6LGFyZ3VtZW50eik7fWZpbmFsbHkge2QzLmV2ZW50ID0gZTA7fX07fTtyZXR1cm4gZGlzcGF0Y2g7fWQzLnJlcXVvdGUgPSBmdW5jdGlvbihzKXtyZXR1cm4gcy5yZXBsYWNlKGQzX3JlcXVvdGVfcmUsXCJcXFxcJCZcIik7fTt2YXIgZDNfcmVxdW90ZV9yZT0vW1xcXFxcXF5cXCRcXCpcXCtcXD9cXHxcXFtcXF1cXChcXClcXC5cXHtcXH1dL2c7dmFyIGQzX3N1YmNsYXNzPSh7fSkuX19wcm90b19fP2Z1bmN0aW9uKG9iamVjdCxwcm90b3R5cGUpe29iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7fTpmdW5jdGlvbihvYmplY3QscHJvdG90eXBlKXtmb3IodmFyIHByb3BlcnR5IGluIHByb3RvdHlwZSkgb2JqZWN0W3Byb3BlcnR5XSA9IHByb3RvdHlwZVtwcm9wZXJ0eV07fTtmdW5jdGlvbiBkM19zZWxlY3Rpb24oZ3JvdXBzKXtkM19zdWJjbGFzcyhncm91cHMsZDNfc2VsZWN0aW9uUHJvdG90eXBlKTtyZXR1cm4gZ3JvdXBzO312YXIgZDNfc2VsZWN0PWZ1bmN0aW9uIGQzX3NlbGVjdChzLG4pe3JldHVybiBuLnF1ZXJ5U2VsZWN0b3Iocyk7fSxkM19zZWxlY3RBbGw9ZnVuY3Rpb24gZDNfc2VsZWN0QWxsKHMsbil7cmV0dXJuIG4ucXVlcnlTZWxlY3RvckFsbChzKTt9LF9kM19zZWxlY3RNYXRjaGVzPWZ1bmN0aW9uIGQzX3NlbGVjdE1hdGNoZXMobixzKXt2YXIgZDNfc2VsZWN0TWF0Y2hlcj1uLm1hdGNoZXMgfHwgbltkM192ZW5kb3JTeW1ib2wobixcIm1hdGNoZXNTZWxlY3RvclwiKV07X2QzX3NlbGVjdE1hdGNoZXMgPSBmdW5jdGlvbihuLHMpe3JldHVybiBkM19zZWxlY3RNYXRjaGVyLmNhbGwobixzKTt9O3JldHVybiBfZDNfc2VsZWN0TWF0Y2hlcyhuLHMpO307aWYodHlwZW9mIFNpenpsZSA9PT0gXCJmdW5jdGlvblwiKXtkM19zZWxlY3QgPSBmdW5jdGlvbihzLG4pe3JldHVybiBTaXp6bGUocyxuKVswXSB8fCBudWxsO307ZDNfc2VsZWN0QWxsID0gU2l6emxlO19kM19zZWxlY3RNYXRjaGVzID0gU2l6emxlLm1hdGNoZXNTZWxlY3Rvcjt9ZDMuc2VsZWN0aW9uID0gZnVuY3Rpb24oKXtyZXR1cm4gZDMuc2VsZWN0KGQzX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7fTt2YXIgZDNfc2VsZWN0aW9uUHJvdG90eXBlPWQzLnNlbGVjdGlvbi5wcm90b3R5cGUgPSBbXTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBzdWJncm91cHM9W10sc3ViZ3JvdXAsc3Vibm9kZSxncm91cCxub2RlO3NlbGVjdG9yID0gZDNfc2VsZWN0aW9uX3NlbGVjdG9yKHNlbGVjdG9yKTtmb3IodmFyIGo9LTEsbT10aGlzLmxlbmd0aDsrK2ogPCBtOykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSAoZ3JvdXAgPSB0aGlzW2pdKS5wYXJlbnROb2RlO2Zvcih2YXIgaT0tMSxuPWdyb3VwLmxlbmd0aDsrK2kgPCBuOykge2lmKG5vZGUgPSBncm91cFtpXSl7c3ViZ3JvdXAucHVzaChzdWJub2RlID0gc2VsZWN0b3IuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSxqKSk7aWYoc3Vibm9kZSAmJiBcIl9fZGF0YV9fXCIgaW4gbm9kZSlzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXzt9ZWxzZSB7c3ViZ3JvdXAucHVzaChudWxsKTt9fX1yZXR1cm4gZDNfc2VsZWN0aW9uKHN1Ymdyb3Vwcyk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fc2VsZWN0b3Ioc2VsZWN0b3Ipe3JldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIj9zZWxlY3RvcjpmdW5jdGlvbigpe3JldHVybiBkM19zZWxlY3Qoc2VsZWN0b3IsdGhpcyk7fTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKHNlbGVjdG9yKXt2YXIgc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLG5vZGU7c2VsZWN0b3IgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3JBbGwoc2VsZWN0b3IpO2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9LTEsbj1ncm91cC5sZW5ndGg7KytpIDwgbjspIHtpZihub2RlID0gZ3JvdXBbaV0pe3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gZDNfYXJyYXkoc2VsZWN0b3IuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSxqKSkpO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSBub2RlO319fXJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9zZWxlY3RvckFsbChzZWxlY3Rvcil7cmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiP3NlbGVjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NlbGVjdEFsbChzZWxlY3Rvcix0aGlzKTt9O312YXIgZDNfbnNQcmVmaXg9e3N2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseGh0bWw6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIseGxpbms6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIseG1sOlwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wifTtkMy5ucyA9IHtwcmVmaXg6ZDNfbnNQcmVmaXgscXVhbGlmeTpmdW5jdGlvbiBxdWFsaWZ5KG5hbWUpe3ZhciBpPW5hbWUuaW5kZXhPZihcIjpcIikscHJlZml4PW5hbWU7aWYoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsaSkpICE9PSBcInhtbG5zXCIpbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO3JldHVybiBkM19uc1ByZWZpeC5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpP3tzcGFjZTpkM19uc1ByZWZpeFtwcmVmaXhdLGxvY2FsOm5hbWV9Om5hbWU7fX07ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmF0dHIgPSBmdW5jdGlvbihuYW1lLHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil7aWYodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpe3ZhciBub2RlPXRoaXMubm9kZSgpO25hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpO3JldHVybiBuYW1lLmxvY2FsP25vZGUuZ2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsKTpub2RlLmdldEF0dHJpYnV0ZShuYW1lKTt9Zm9yKHZhbHVlIGluIG5hbWUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fYXR0cih2YWx1ZSxuYW1lW3ZhbHVlXSkpO3JldHVybiB0aGlzO31yZXR1cm4gdGhpcy5lYWNoKGQzX3NlbGVjdGlvbl9hdHRyKG5hbWUsdmFsdWUpKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9hdHRyKG5hbWUsdmFsdWUpe25hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpO2Z1bmN0aW9uIGF0dHJOdWxsKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fWZ1bmN0aW9uIGF0dHJOdWxsTlMoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7fWZ1bmN0aW9uIGF0dHJDb25zdGFudCgpe3RoaXMuc2V0QXR0cmlidXRlKG5hbWUsdmFsdWUpO31mdW5jdGlvbiBhdHRyQ29uc3RhbnROUygpe3RoaXMuc2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsLHZhbHVlKTt9ZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKCl7dmFyIHg9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHggPT0gbnVsbCl0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUseCk7fWZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKCl7dmFyIHg9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHggPT0gbnVsbCl0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7ZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCx4KTt9cmV0dXJuIHZhbHVlID09IG51bGw/bmFtZS5sb2NhbD9hdHRyTnVsbE5TOmF0dHJOdWxsOnR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP25hbWUubG9jYWw/YXR0ckZ1bmN0aW9uTlM6YXR0ckZ1bmN0aW9uOm5hbWUubG9jYWw/YXR0ckNvbnN0YW50TlM6YXR0ckNvbnN0YW50O31mdW5jdGlvbiBkM19jb2xsYXBzZShzKXtyZXR1cm4gcy50cmltKCkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmNsYXNzZWQgPSBmdW5jdGlvbihuYW1lLHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil7aWYodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpe3ZhciBub2RlPXRoaXMubm9kZSgpLG49KG5hbWUgPSBkM19zZWxlY3Rpb25fY2xhc3NlcyhuYW1lKSkubGVuZ3RoLGk9LTE7aWYodmFsdWUgPSBub2RlLmNsYXNzTGlzdCl7d2hpbGUoKytpIDwgbikgaWYoIXZhbHVlLmNvbnRhaW5zKG5hbWVbaV0pKXJldHVybiBmYWxzZTt9ZWxzZSB7dmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO3doaWxlKCsraSA8IG4pIGlmKCFkM19zZWxlY3Rpb25fY2xhc3NlZFJlKG5hbWVbaV0pLnRlc3QodmFsdWUpKXJldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fWZvcih2YWx1ZSBpbiBuYW1lKSB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX2NsYXNzZWQodmFsdWUsbmFtZVt2YWx1ZV0pKTtyZXR1cm4gdGhpczt9cmV0dXJuIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fY2xhc3NlZChuYW1lLHZhbHVlKSk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fY2xhc3NlZFJlKG5hbWUpe3JldHVybiBuZXcgUmVnRXhwKFwiKD86XnxcXFxccyspXCIgKyBkMy5yZXF1b3RlKG5hbWUpICsgXCIoPzpcXFxccyt8JClcIixcImdcIik7fWZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9jbGFzc2VzKG5hbWUpe3JldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7fWZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9jbGFzc2VkKG5hbWUsdmFsdWUpe25hbWUgPSBkM19zZWxlY3Rpb25fY2xhc3NlcyhuYW1lKS5tYXAoZDNfc2VsZWN0aW9uX2NsYXNzZWROYW1lKTt2YXIgbj1uYW1lLmxlbmd0aDtmdW5jdGlvbiBjbGFzc2VkQ29uc3RhbnQoKXt2YXIgaT0tMTt3aGlsZSgrK2kgPCBuKSBuYW1lW2ldKHRoaXMsdmFsdWUpO31mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24oKXt2YXIgaT0tMSx4PXZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt3aGlsZSgrK2kgPCBuKSBuYW1lW2ldKHRoaXMseCk7fXJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIj9jbGFzc2VkRnVuY3Rpb246Y2xhc3NlZENvbnN0YW50O31mdW5jdGlvbiBkM19zZWxlY3Rpb25fY2xhc3NlZE5hbWUobmFtZSl7dmFyIHJlPWQzX3NlbGVjdGlvbl9jbGFzc2VkUmUobmFtZSk7cmV0dXJuIGZ1bmN0aW9uKG5vZGUsdmFsdWUpe2lmKGMgPSBub2RlLmNsYXNzTGlzdClyZXR1cm4gdmFsdWU/Yy5hZGQobmFtZSk6Yy5yZW1vdmUobmFtZSk7dmFyIGM9bm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiO2lmKHZhbHVlKXtyZS5sYXN0SW5kZXggPSAwO2lmKCFyZS50ZXN0KGMpKW5vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixkM19jb2xsYXBzZShjICsgXCIgXCIgKyBuYW1lKSk7fWVsc2Uge25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixkM19jb2xsYXBzZShjLnJlcGxhY2UocmUsXCIgXCIpKSk7fX07fWQzX3NlbGVjdGlvblByb3RvdHlwZS5zdHlsZSA9IGZ1bmN0aW9uKG5hbWUsdmFsdWUscHJpb3JpdHkpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobiA8IDMpe2lmKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKXtpZihuIDwgMil2YWx1ZSA9IFwiXCI7Zm9yKHByaW9yaXR5IGluIG5hbWUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fc3R5bGUocHJpb3JpdHksbmFtZVtwcmlvcml0eV0sdmFsdWUpKTtyZXR1cm4gdGhpczt9aWYobiA8IDIpe3ZhciBub2RlPXRoaXMubm9kZSgpO3JldHVybiBkM193aW5kb3cobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7fXByaW9yaXR5ID0gXCJcIjt9cmV0dXJuIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fc3R5bGUobmFtZSx2YWx1ZSxwcmlvcml0eSkpO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uX3N0eWxlKG5hbWUsdmFsdWUscHJpb3JpdHkpe2Z1bmN0aW9uIHN0eWxlTnVsbCgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7fWZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQoKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsdmFsdWUscHJpb3JpdHkpO31mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKCl7dmFyIHg9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHggPT0gbnVsbCl0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO2Vsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLHgscHJpb3JpdHkpO31yZXR1cm4gdmFsdWUgPT0gbnVsbD9zdHlsZU51bGw6dHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI/c3R5bGVGdW5jdGlvbjpzdHlsZUNvbnN0YW50O31kM19zZWxlY3Rpb25Qcm90b3R5cGUucHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil7aWYodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpcmV0dXJuIHRoaXMubm9kZSgpW25hbWVdO2Zvcih2YWx1ZSBpbiBuYW1lKSB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX3Byb3BlcnR5KHZhbHVlLG5hbWVbdmFsdWVdKSk7cmV0dXJuIHRoaXM7fXJldHVybiB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX3Byb3BlcnR5KG5hbWUsdmFsdWUpKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9wcm9wZXJ0eShuYW1lLHZhbHVlKXtmdW5jdGlvbiBwcm9wZXJ0eU51bGwoKXtkZWxldGUgdGhpc1tuYW1lXTt9ZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudCgpe3RoaXNbbmFtZV0gPSB2YWx1ZTt9ZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbigpe3ZhciB4PXZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih4ID09IG51bGwpZGVsZXRlIHRoaXNbbmFtZV07ZWxzZSB0aGlzW25hbWVdID0geDt9cmV0dXJuIHZhbHVlID09IG51bGw/cHJvcGVydHlOdWxsOnR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP3Byb3BlcnR5RnVuY3Rpb246cHJvcGVydHlDb25zdGFudDt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP2Z1bmN0aW9uKCl7dmFyIHY9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGw/XCJcIjp2O306dmFsdWUgPT0gbnVsbD9mdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQgPSBcIlwiO306ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7fSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuaHRtbCA9IGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2godHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI/ZnVuY3Rpb24oKXt2YXIgdj12YWx1ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGw/XCJcIjp2O306dmFsdWUgPT0gbnVsbD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MID0gXCJcIjt9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUwgPSB2YWx1ZTt9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUw7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSl7bmFtZSA9IGQzX3NlbGVjdGlvbl9jcmVhdG9yKG5hbWUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG5hbWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKTt9KTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9jcmVhdG9yKG5hbWUpe2Z1bmN0aW9uIGNyZWF0ZSgpe3ZhciBkb2N1bWVudD10aGlzLm93bmVyRG9jdW1lbnQsbmFtZXNwYWNlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuYW1lc3BhY2U/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZSxuYW1lKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO31mdW5jdGlvbiBjcmVhdGVOUygpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7fXJldHVybiB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiP25hbWU6KG5hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpKS5sb2NhbD9jcmVhdGVOUzpjcmVhdGU7fWQzX3NlbGVjdGlvblByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihuYW1lLGJlZm9yZSl7bmFtZSA9IGQzX3NlbGVjdGlvbl9jcmVhdG9yKG5hbWUpO2JlZm9yZSA9IGQzX3NlbGVjdGlvbl9zZWxlY3RvcihiZWZvcmUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuYW1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxiZWZvcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpIHx8IG51bGwpO30pO307ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChkM19zZWxlY3Rpb25SZW1vdmUpO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uUmVtb3ZlKCl7dmFyIHBhcmVudD10aGlzLnBhcmVudE5vZGU7aWYocGFyZW50KXBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbih2YWx1ZSxrZXkpe3ZhciBpPS0xLG49dGhpcy5sZW5ndGgsZ3JvdXAsbm9kZTtpZighYXJndW1lbnRzLmxlbmd0aCl7dmFsdWUgPSBuZXcgQXJyYXkobiA9IChncm91cCA9IHRoaXNbMF0pLmxlbmd0aCk7d2hpbGUoKytpIDwgbikge2lmKG5vZGUgPSBncm91cFtpXSl7dmFsdWVbaV0gPSBub2RlLl9fZGF0YV9fO319cmV0dXJuIHZhbHVlO31mdW5jdGlvbiBiaW5kKGdyb3VwLGdyb3VwRGF0YSl7dmFyIGksbj1ncm91cC5sZW5ndGgsbT1ncm91cERhdGEubGVuZ3RoLG4wPU1hdGgubWluKG4sbSksdXBkYXRlTm9kZXM9bmV3IEFycmF5KG0pLGVudGVyTm9kZXM9bmV3IEFycmF5KG0pLGV4aXROb2Rlcz1uZXcgQXJyYXkobiksbm9kZSxub2RlRGF0YTtpZihrZXkpe3ZhciBub2RlQnlLZXlWYWx1ZT1uZXcgZDNfTWFwKCksa2V5VmFsdWVzPW5ldyBBcnJheShuKSxrZXlWYWx1ZTtmb3IoaSA9IC0xOysraSA8IG47KSB7aWYobm9kZSA9IGdyb3VwW2ldKXtpZihub2RlQnlLZXlWYWx1ZS5oYXMoa2V5VmFsdWUgPSBrZXkuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSkpKXtleGl0Tm9kZXNbaV0gPSBub2RlO31lbHNlIHtub2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsbm9kZSk7fWtleVZhbHVlc1tpXSA9IGtleVZhbHVlO319Zm9yKGkgPSAtMTsrK2kgPCBtOykge2lmKCEobm9kZSA9IG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZSA9IGtleS5jYWxsKGdyb3VwRGF0YSxub2RlRGF0YSA9IGdyb3VwRGF0YVtpXSxpKSkpKXtlbnRlck5vZGVzW2ldID0gZDNfc2VsZWN0aW9uX2RhdGFOb2RlKG5vZGVEYXRhKTt9ZWxzZSBpZihub2RlICE9PSB0cnVlKXt1cGRhdGVOb2Rlc1tpXSA9IG5vZGU7bm9kZS5fX2RhdGFfXyA9IG5vZGVEYXRhO31ub2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsdHJ1ZSk7fWZvcihpID0gLTE7KytpIDwgbjspIHtpZihpIGluIGtleVZhbHVlcyAmJiBub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSAhPT0gdHJ1ZSl7ZXhpdE5vZGVzW2ldID0gZ3JvdXBbaV07fX19ZWxzZSB7Zm9yKGkgPSAtMTsrK2kgPCBuMDspIHtub2RlID0gZ3JvdXBbaV07bm9kZURhdGEgPSBncm91cERhdGFbaV07aWYobm9kZSl7bm9kZS5fX2RhdGFfXyA9IG5vZGVEYXRhO3VwZGF0ZU5vZGVzW2ldID0gbm9kZTt9ZWxzZSB7ZW50ZXJOb2Rlc1tpXSA9IGQzX3NlbGVjdGlvbl9kYXRhTm9kZShub2RlRGF0YSk7fX1mb3IoO2kgPCBtOysraSkge2VudGVyTm9kZXNbaV0gPSBkM19zZWxlY3Rpb25fZGF0YU5vZGUoZ3JvdXBEYXRhW2ldKTt9Zm9yKDtpIDwgbjsrK2kpIHtleGl0Tm9kZXNbaV0gPSBncm91cFtpXTt9fWVudGVyTm9kZXMudXBkYXRlID0gdXBkYXRlTm9kZXM7ZW50ZXJOb2Rlcy5wYXJlbnROb2RlID0gdXBkYXRlTm9kZXMucGFyZW50Tm9kZSA9IGV4aXROb2Rlcy5wYXJlbnROb2RlID0gZ3JvdXAucGFyZW50Tm9kZTtlbnRlci5wdXNoKGVudGVyTm9kZXMpO3VwZGF0ZS5wdXNoKHVwZGF0ZU5vZGVzKTtleGl0LnB1c2goZXhpdE5vZGVzKTt9dmFyIGVudGVyPWQzX3NlbGVjdGlvbl9lbnRlcihbXSksdXBkYXRlPWQzX3NlbGVjdGlvbihbXSksZXhpdD1kM19zZWxlY3Rpb24oW10pO2lmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXt3aGlsZSgrK2kgPCBuKSB7YmluZChncm91cCA9IHRoaXNbaV0sdmFsdWUuY2FsbChncm91cCxncm91cC5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTt9fWVsc2Uge3doaWxlKCsraSA8IG4pIHtiaW5kKGdyb3VwID0gdGhpc1tpXSx2YWx1ZSk7fX11cGRhdGUuZW50ZXIgPSBmdW5jdGlvbigpe3JldHVybiBlbnRlcjt9O3VwZGF0ZS5leGl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZXhpdDt9O3JldHVybiB1cGRhdGU7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fZGF0YU5vZGUoZGF0YSl7cmV0dXJuIHtfX2RhdGFfXzpkYXRhfTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmRhdHVtID0gZnVuY3Rpb24odmFsdWUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLHZhbHVlKTp0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIik7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24oZmlsdGVyKXt2YXIgc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLGdyb3VwLG5vZGU7aWYodHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiKWZpbHRlciA9IGQzX3NlbGVjdGlvbl9maWx0ZXIoZmlsdGVyKTtmb3IodmFyIGo9MCxtPXRoaXMubGVuZ3RoO2ogPCBtO2orKykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSAoZ3JvdXAgPSB0aGlzW2pdKS5wYXJlbnROb2RlO2Zvcih2YXIgaT0wLG49Z3JvdXAubGVuZ3RoO2kgPCBuO2krKykge2lmKChub2RlID0gZ3JvdXBbaV0pICYmIGZpbHRlci5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopKXtzdWJncm91cC5wdXNoKG5vZGUpO319fXJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9maWx0ZXIoc2VsZWN0b3Ipe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBfZDNfc2VsZWN0TWF0Y2hlcyh0aGlzLHNlbGVjdG9yKTt9O31kM19zZWxlY3Rpb25Qcm90b3R5cGUub3JkZXIgPSBmdW5jdGlvbigpe2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9Z3JvdXAubGVuZ3RoIC0gMSxuZXh0PWdyb3VwW2ldLG5vZGU7LS1pID49IDA7KSB7aWYobm9kZSA9IGdyb3VwW2ldKXtpZihuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLG5leHQpO25leHQgPSBub2RlO319fXJldHVybiB0aGlzO307ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbihjb21wYXJhdG9yKXtjb21wYXJhdG9yID0gZDNfc2VsZWN0aW9uX3NvcnRDb21wYXJhdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGo9LTEsbT10aGlzLmxlbmd0aDsrK2ogPCBtOykgdGhpc1tqXS5zb3J0KGNvbXBhcmF0b3IpO3JldHVybiB0aGlzLm9yZGVyKCk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fc29ydENvbXBhcmF0b3IoY29tcGFyYXRvcil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpY29tcGFyYXRvciA9IGQzX2FzY2VuZGluZztyZXR1cm4gZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSAmJiBiP2NvbXBhcmF0b3IoYS5fX2RhdGFfXyxiLl9fZGF0YV9fKTohYSAtICFiO307fWQzX3NlbGVjdGlvblByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24oY2FsbGJhY2spe3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLGZ1bmN0aW9uKG5vZGUsaSxqKXtjYWxsYmFjay5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopO30pO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uX2VhY2goZ3JvdXBzLGNhbGxiYWNrKXtmb3IodmFyIGo9MCxtPWdyb3Vwcy5sZW5ndGg7aiA8IG07aisrKSB7Zm9yKHZhciBncm91cD1ncm91cHNbal0saT0wLG49Z3JvdXAubGVuZ3RoLG5vZGU7aSA8IG47aSsrKSB7aWYobm9kZSA9IGdyb3VwW2ldKWNhbGxiYWNrKG5vZGUsaSxqKTt9fXJldHVybiBncm91cHM7fWQzX3NlbGVjdGlvblByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24oY2FsbGJhY2spe3ZhciBhcmdzPWQzX2FycmF5KGFyZ3VtZW50cyk7Y2FsbGJhY2suYXBwbHkoYXJnc1swXSA9IHRoaXMsYXJncyk7cmV0dXJuIHRoaXM7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbigpe3JldHVybiAhdGhpcy5ub2RlKCk7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUubm9kZSA9IGZ1bmN0aW9uKCl7Zm9yKHZhciBqPTAsbT10aGlzLmxlbmd0aDtqIDwgbTtqKyspIHtmb3IodmFyIGdyb3VwPXRoaXNbal0saT0wLG49Z3JvdXAubGVuZ3RoO2kgPCBuO2krKykge3ZhciBub2RlPWdyb3VwW2ldO2lmKG5vZGUpcmV0dXJuIG5vZGU7fX1yZXR1cm4gbnVsbDt9O2QzX3NlbGVjdGlvblByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24oKXt2YXIgbj0wO2QzX3NlbGVjdGlvbl9lYWNoKHRoaXMsZnVuY3Rpb24oKXsrK247fSk7cmV0dXJuIG47fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fZW50ZXIoc2VsZWN0aW9uKXtkM19zdWJjbGFzcyhzZWxlY3Rpb24sZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlKTtyZXR1cm4gc2VsZWN0aW9uO312YXIgZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlPVtdO2QzLnNlbGVjdGlvbi5lbnRlciA9IGQzX3NlbGVjdGlvbl9lbnRlcjtkMy5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlID0gZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlO2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5hcHBlbmQgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuYXBwZW5kO2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5lbXB0eSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5lbXB0eTtkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUubm9kZSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5ub2RlO2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5jYWxsID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLmNhbGw7ZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlLnNpemUgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuc2l6ZTtkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBzdWJncm91cHM9W10sc3ViZ3JvdXAsc3Vibm9kZSx1cGdyb3VwLGdyb3VwLG5vZGU7Zm9yKHZhciBqPS0xLG09dGhpcy5sZW5ndGg7KytqIDwgbTspIHt1cGdyb3VwID0gKGdyb3VwID0gdGhpc1tqXSkudXBkYXRlO3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSBncm91cC5wYXJlbnROb2RlO2Zvcih2YXIgaT0tMSxuPWdyb3VwLmxlbmd0aDsrK2kgPCBuOykge2lmKG5vZGUgPSBncm91cFtpXSl7c3ViZ3JvdXAucHVzaCh1cGdyb3VwW2ldID0gc3Vibm9kZSA9IHNlbGVjdG9yLmNhbGwoZ3JvdXAucGFyZW50Tm9kZSxub2RlLl9fZGF0YV9fLGksaikpO3N1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO31lbHNlIHtzdWJncm91cC5wdXNoKG51bGwpO319fXJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTt9O2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihuYW1lLGJlZm9yZSl7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpYmVmb3JlID0gZDNfc2VsZWN0aW9uX2VudGVySW5zZXJ0QmVmb3JlKHRoaXMpO3JldHVybiBkM19zZWxlY3Rpb25Qcm90b3R5cGUuaW5zZXJ0LmNhbGwodGhpcyxuYW1lLGJlZm9yZSk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fZW50ZXJJbnNlcnRCZWZvcmUoZW50ZXIpe3ZhciBpMCxqMDtyZXR1cm4gZnVuY3Rpb24oZCxpLGope3ZhciBncm91cD1lbnRlcltqXS51cGRhdGUsbj1ncm91cC5sZW5ndGgsbm9kZTtpZihqICE9IGowKWowID0gaixpMCA9IDA7aWYoaSA+PSBpMClpMCA9IGkgKyAxO3doaWxlKCEobm9kZSA9IGdyb3VwW2kwXSkgJiYgKytpMCA8IG4pO3JldHVybiBub2RlO307fWQzLnNlbGVjdCA9IGZ1bmN0aW9uKG5vZGUpe3ZhciBncm91cDtpZih0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIil7Z3JvdXAgPSBbZDNfc2VsZWN0KG5vZGUsZDNfZG9jdW1lbnQpXTtncm91cC5wYXJlbnROb2RlID0gZDNfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O31lbHNlIHtncm91cCA9IFtub2RlXTtncm91cC5wYXJlbnROb2RlID0gZDNfZG9jdW1lbnRFbGVtZW50KG5vZGUpO31yZXR1cm4gZDNfc2VsZWN0aW9uKFtncm91cF0pO307ZDMuc2VsZWN0QWxsID0gZnVuY3Rpb24obm9kZXMpe3ZhciBncm91cDtpZih0eXBlb2Ygbm9kZXMgPT09IFwic3RyaW5nXCIpe2dyb3VwID0gZDNfYXJyYXkoZDNfc2VsZWN0QWxsKG5vZGVzLGQzX2RvY3VtZW50KSk7Z3JvdXAucGFyZW50Tm9kZSA9IGQzX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDt9ZWxzZSB7Z3JvdXAgPSBkM19hcnJheShub2Rlcyk7Z3JvdXAucGFyZW50Tm9kZSA9IG51bGw7fXJldHVybiBkM19zZWxlY3Rpb24oW2dyb3VwXSk7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLGxpc3RlbmVyLGNhcHR1cmUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobiA8IDMpe2lmKHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiKXtpZihuIDwgMilsaXN0ZW5lciA9IGZhbHNlO2ZvcihjYXB0dXJlIGluIHR5cGUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fb24oY2FwdHVyZSx0eXBlW2NhcHR1cmVdLGxpc3RlbmVyKSk7cmV0dXJuIHRoaXM7fWlmKG4gPCAyKXJldHVybiAobiA9IHRoaXMubm9kZSgpW1wiX19vblwiICsgdHlwZV0pICYmIG4uXztjYXB0dXJlID0gZmFsc2U7fXJldHVybiB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX29uKHR5cGUsbGlzdGVuZXIsY2FwdHVyZSkpO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uX29uKHR5cGUsbGlzdGVuZXIsY2FwdHVyZSl7dmFyIG5hbWU9XCJfX29uXCIgKyB0eXBlLGk9dHlwZS5pbmRleE9mKFwiLlwiKSx3cmFwPWQzX3NlbGVjdGlvbl9vbkxpc3RlbmVyO2lmKGkgPiAwKXR5cGUgPSB0eXBlLnNsaWNlKDAsaSk7dmFyIGZpbHRlcj1kM19zZWxlY3Rpb25fb25GaWx0ZXJzLmdldCh0eXBlKTtpZihmaWx0ZXIpdHlwZSA9IGZpbHRlcix3cmFwID0gZDNfc2VsZWN0aW9uX29uRmlsdGVyO2Z1bmN0aW9uIG9uUmVtb3ZlKCl7dmFyIGw9dGhpc1tuYW1lXTtpZihsKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSxsLGwuJCk7ZGVsZXRlIHRoaXNbbmFtZV07fX1mdW5jdGlvbiBvbkFkZCgpe3ZhciBsPXdyYXAobGlzdGVuZXIsZDNfYXJyYXkoYXJndW1lbnRzKSk7b25SZW1vdmUuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZSx0aGlzW25hbWVdID0gbCxsLiQgPSBjYXB0dXJlKTtsLl8gPSBsaXN0ZW5lcjt9ZnVuY3Rpb24gcmVtb3ZlQWxsKCl7dmFyIHJlPW5ldyBSZWdFeHAoXCJeX19vbihbXi5dKylcIiArIGQzLnJlcXVvdGUodHlwZSkgKyBcIiRcIiksbWF0Y2g7Zm9yKHZhciBuYW1lIGluIHRoaXMpIHtpZihtYXRjaCA9IG5hbWUubWF0Y2gocmUpKXt2YXIgbD10aGlzW25hbWVdO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihtYXRjaFsxXSxsLGwuJCk7ZGVsZXRlIHRoaXNbbmFtZV07fX19cmV0dXJuIGk/bGlzdGVuZXI/b25BZGQ6b25SZW1vdmU6bGlzdGVuZXI/ZDNfbm9vcDpyZW1vdmVBbGw7fXZhciBkM19zZWxlY3Rpb25fb25GaWx0ZXJzPWQzLm1hcCh7bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwifSk7aWYoZDNfZG9jdW1lbnQpe2QzX3NlbGVjdGlvbl9vbkZpbHRlcnMuZm9yRWFjaChmdW5jdGlvbihrKXtpZihcIm9uXCIgKyBrIGluIGQzX2RvY3VtZW50KWQzX3NlbGVjdGlvbl9vbkZpbHRlcnMucmVtb3ZlKGspO30pO31mdW5jdGlvbiBkM19zZWxlY3Rpb25fb25MaXN0ZW5lcihsaXN0ZW5lcixhcmd1bWVudHope3JldHVybiBmdW5jdGlvbihlKXt2YXIgbz1kMy5ldmVudDtkMy5ldmVudCA9IGU7YXJndW1lbnR6WzBdID0gdGhpcy5fX2RhdGFfXzt0cnl7bGlzdGVuZXIuYXBwbHkodGhpcyxhcmd1bWVudHopO31maW5hbGx5IHtkMy5ldmVudCA9IG87fX07fWZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9vbkZpbHRlcihsaXN0ZW5lcixhcmd1bWVudHope3ZhciBsPWQzX3NlbGVjdGlvbl9vbkxpc3RlbmVyKGxpc3RlbmVyLGFyZ3VtZW50eik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0YXJnZXQ9dGhpcyxyZWxhdGVkPWUucmVsYXRlZFRhcmdldDtpZighcmVsYXRlZCB8fCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIShyZWxhdGVkLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRhcmdldCkgJiA4KSl7bC5jYWxsKHRhcmdldCxlKTt9fTt9dmFyIGQzX2V2ZW50X2RyYWdTZWxlY3QsZDNfZXZlbnRfZHJhZ0lkPTA7ZnVuY3Rpb24gZDNfZXZlbnRfZHJhZ1N1cHByZXNzKG5vZGUpe3ZhciBuYW1lPVwiLmRyYWdzdXBwcmVzcy1cIiArICsrZDNfZXZlbnRfZHJhZ0lkLGNsaWNrPVwiY2xpY2tcIiArIG5hbWUsdz1kMy5zZWxlY3QoZDNfd2luZG93KG5vZGUpKS5vbihcInRvdWNobW92ZVwiICsgbmFtZSxkM19ldmVudFByZXZlbnREZWZhdWx0KS5vbihcImRyYWdzdGFydFwiICsgbmFtZSxkM19ldmVudFByZXZlbnREZWZhdWx0KS5vbihcInNlbGVjdHN0YXJ0XCIgKyBuYW1lLGQzX2V2ZW50UHJldmVudERlZmF1bHQpO2lmKGQzX2V2ZW50X2RyYWdTZWxlY3QgPT0gbnVsbCl7ZDNfZXZlbnRfZHJhZ1NlbGVjdCA9IFwib25zZWxlY3RzdGFydFwiIGluIG5vZGU/ZmFsc2U6ZDNfdmVuZG9yU3ltYm9sKG5vZGUuc3R5bGUsXCJ1c2VyU2VsZWN0XCIpO31pZihkM19ldmVudF9kcmFnU2VsZWN0KXt2YXIgc3R5bGU9ZDNfZG9jdW1lbnRFbGVtZW50KG5vZGUpLnN0eWxlLHNlbGVjdD1zdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XTtzdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XSA9IFwibm9uZVwiO31yZXR1cm4gZnVuY3Rpb24oc3VwcHJlc3NDbGljayl7dy5vbihuYW1lLG51bGwpO2lmKGQzX2V2ZW50X2RyYWdTZWxlY3Qpc3R5bGVbZDNfZXZlbnRfZHJhZ1NlbGVjdF0gPSBzZWxlY3Q7aWYoc3VwcHJlc3NDbGljayl7dmFyIG9mZj1mdW5jdGlvbiBvZmYoKXt3Lm9uKGNsaWNrLG51bGwpO307dy5vbihjbGljayxmdW5jdGlvbigpe2QzX2V2ZW50UHJldmVudERlZmF1bHQoKTtvZmYoKTt9LHRydWUpO3NldFRpbWVvdXQob2ZmLDApO319O31kMy5tb3VzZSA9IGZ1bmN0aW9uKGNvbnRhaW5lcil7cmV0dXJuIGQzX21vdXNlUG9pbnQoY29udGFpbmVyLGQzX2V2ZW50U291cmNlKCkpO307dmFyIGQzX21vdXNlX2J1ZzQ0MDgzPXRoaXMubmF2aWdhdG9yICYmIC9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO2Z1bmN0aW9uIGQzX21vdXNlUG9pbnQoY29udGFpbmVyLGUpe2lmKGUuY2hhbmdlZFRvdWNoZXMpZSA9IGUuY2hhbmdlZFRvdWNoZXNbMF07dmFyIHN2Zz1jb250YWluZXIub3duZXJTVkdFbGVtZW50IHx8IGNvbnRhaW5lcjtpZihzdmcuY3JlYXRlU1ZHUG9pbnQpe3ZhciBwb2ludD1zdmcuY3JlYXRlU1ZHUG9pbnQoKTtpZihkM19tb3VzZV9idWc0NDA4MyA8IDApe3ZhciB3aW5kb3c9ZDNfd2luZG93KGNvbnRhaW5lcik7aWYod2luZG93LnNjcm9sbFggfHwgd2luZG93LnNjcm9sbFkpe3N2ZyA9IGQzLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6XCJub25lXCJ9LFwiaW1wb3J0YW50XCIpO3ZhciBjdG09c3ZnWzBdWzBdLmdldFNjcmVlbkNUTSgpO2QzX21vdXNlX2J1ZzQ0MDgzID0gIShjdG0uZiB8fCBjdG0uZSk7c3ZnLnJlbW92ZSgpO319aWYoZDNfbW91c2VfYnVnNDQwODMpcG9pbnQueCA9IGUucGFnZVgscG9pbnQueSA9IGUucGFnZVk7ZWxzZSBwb2ludC54ID0gZS5jbGllbnRYLHBvaW50LnkgPSBlLmNsaWVudFk7cG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0oY29udGFpbmVyLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7cmV0dXJuIFtwb2ludC54LHBvaW50LnldO312YXIgcmVjdD1jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIFtlLmNsaWVudFggLSByZWN0LmxlZnQgLSBjb250YWluZXIuY2xpZW50TGVmdCxlLmNsaWVudFkgLSByZWN0LnRvcCAtIGNvbnRhaW5lci5jbGllbnRUb3BdO31kMy50b3VjaCA9IGZ1bmN0aW9uKGNvbnRhaW5lcix0b3VjaGVzLGlkZW50aWZpZXIpe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKWlkZW50aWZpZXIgPSB0b3VjaGVzLHRvdWNoZXMgPSBkM19ldmVudFNvdXJjZSgpLmNoYW5nZWRUb3VjaGVzO2lmKHRvdWNoZXMpZm9yKHZhciBpPTAsbj10b3VjaGVzLmxlbmd0aCx0b3VjaDtpIDwgbjsrK2kpIHtpZigodG91Y2ggPSB0b3VjaGVzW2ldKS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKXtyZXR1cm4gZDNfbW91c2VQb2ludChjb250YWluZXIsdG91Y2gpO319fTtkMy5iZWhhdmlvci5kcmFnID0gZnVuY3Rpb24oKXt2YXIgZXZlbnQ9ZDNfZXZlbnREaXNwYXRjaChkcmFnLFwiZHJhZ1wiLFwiZHJhZ3N0YXJ0XCIsXCJkcmFnZW5kXCIpLG9yaWdpbj1udWxsLG1vdXNlZG93bj1kcmFnc3RhcnQoZDNfbm9vcCxkMy5tb3VzZSxkM193aW5kb3csXCJtb3VzZW1vdmVcIixcIm1vdXNldXBcIiksdG91Y2hzdGFydD1kcmFnc3RhcnQoZDNfYmVoYXZpb3JfZHJhZ1RvdWNoSWQsZDMudG91Y2gsZDNfaWRlbnRpdHksXCJ0b3VjaG1vdmVcIixcInRvdWNoZW5kXCIpO2Z1bmN0aW9uIGRyYWcoKXt0aGlzLm9uKFwibW91c2Vkb3duLmRyYWdcIixtb3VzZWRvd24pLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsdG91Y2hzdGFydCk7fWZ1bmN0aW9uIGRyYWdzdGFydChpZCxwb3NpdGlvbixzdWJqZWN0LG1vdmUsZW5kKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdGhhdD10aGlzLHRhcmdldD1kMy5ldmVudC50YXJnZXQscGFyZW50PXRoYXQucGFyZW50Tm9kZSxkaXNwYXRjaD1ldmVudC5vZih0aGF0LGFyZ3VtZW50cyksZHJhZ2dlZD0wLGRyYWdJZD1pZCgpLGRyYWdOYW1lPVwiLmRyYWdcIiArIChkcmFnSWQgPT0gbnVsbD9cIlwiOlwiLVwiICsgZHJhZ0lkKSxkcmFnT2Zmc2V0LGRyYWdTdWJqZWN0PWQzLnNlbGVjdChzdWJqZWN0KHRhcmdldCkpLm9uKG1vdmUgKyBkcmFnTmFtZSxtb3ZlZCkub24oZW5kICsgZHJhZ05hbWUsZW5kZWQpLGRyYWdSZXN0b3JlPWQzX2V2ZW50X2RyYWdTdXBwcmVzcyh0YXJnZXQpLHBvc2l0aW9uMD1wb3NpdGlvbihwYXJlbnQsZHJhZ0lkKTtpZihvcmlnaW4pe2RyYWdPZmZzZXQgPSBvcmlnaW4uYXBwbHkodGhhdCxhcmd1bWVudHMpO2RyYWdPZmZzZXQgPSBbZHJhZ09mZnNldC54IC0gcG9zaXRpb24wWzBdLGRyYWdPZmZzZXQueSAtIHBvc2l0aW9uMFsxXV07fWVsc2Uge2RyYWdPZmZzZXQgPSBbMCwwXTt9ZGlzcGF0Y2goe3R5cGU6XCJkcmFnc3RhcnRcIn0pO2Z1bmN0aW9uIG1vdmVkKCl7dmFyIHBvc2l0aW9uMT1wb3NpdGlvbihwYXJlbnQsZHJhZ0lkKSxkeCxkeTtpZighcG9zaXRpb24xKXJldHVybjtkeCA9IHBvc2l0aW9uMVswXSAtIHBvc2l0aW9uMFswXTtkeSA9IHBvc2l0aW9uMVsxXSAtIHBvc2l0aW9uMFsxXTtkcmFnZ2VkIHw9IGR4IHwgZHk7cG9zaXRpb24wID0gcG9zaXRpb24xO2Rpc3BhdGNoKHt0eXBlOlwiZHJhZ1wiLHg6cG9zaXRpb24xWzBdICsgZHJhZ09mZnNldFswXSx5OnBvc2l0aW9uMVsxXSArIGRyYWdPZmZzZXRbMV0sZHg6ZHgsZHk6ZHl9KTt9ZnVuY3Rpb24gZW5kZWQoKXtpZighcG9zaXRpb24ocGFyZW50LGRyYWdJZCkpcmV0dXJuO2RyYWdTdWJqZWN0Lm9uKG1vdmUgKyBkcmFnTmFtZSxudWxsKS5vbihlbmQgKyBkcmFnTmFtZSxudWxsKTtkcmFnUmVzdG9yZShkcmFnZ2VkICYmIGQzLmV2ZW50LnRhcmdldCA9PT0gdGFyZ2V0KTtkaXNwYXRjaCh7dHlwZTpcImRyYWdlbmRcIn0pO319O31kcmFnLm9yaWdpbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvcmlnaW47b3JpZ2luID0geDtyZXR1cm4gZHJhZzt9O3JldHVybiBkMy5yZWJpbmQoZHJhZyxldmVudCxcIm9uXCIpO307ZnVuY3Rpb24gZDNfYmVoYXZpb3JfZHJhZ1RvdWNoSWQoKXtyZXR1cm4gZDMuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcjt9ZDMudG91Y2hlcyA9IGZ1bmN0aW9uKGNvbnRhaW5lcix0b3VjaGVzKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil0b3VjaGVzID0gZDNfZXZlbnRTb3VyY2UoKS50b3VjaGVzO3JldHVybiB0b3VjaGVzP2QzX2FycmF5KHRvdWNoZXMpLm1hcChmdW5jdGlvbih0b3VjaCl7dmFyIHBvaW50PWQzX21vdXNlUG9pbnQoY29udGFpbmVyLHRvdWNoKTtwb2ludC5pZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjtyZXR1cm4gcG9pbnQ7fSk6W107fTt2YXIgzrU9MWUtNizOtTI9zrUgKiDOtSzPgD1NYXRoLlBJLM+EPTIgKiDPgCzPhM61Pc+EIC0gzrUsaGFsZs+APc+AIC8gMixkM19yYWRpYW5zPc+AIC8gMTgwLGQzX2RlZ3JlZXM9MTgwIC8gz4A7ZnVuY3Rpb24gZDNfc2duKHgpe3JldHVybiB4ID4gMD8xOnggPCAwPy0xOjA7fWZ1bmN0aW9uIGQzX2Nyb3NzMmQoYSxiLGMpe3JldHVybiAoYlswXSAtIGFbMF0pICogKGNbMV0gLSBhWzFdKSAtIChiWzFdIC0gYVsxXSkgKiAoY1swXSAtIGFbMF0pO31mdW5jdGlvbiBkM19hY29zKHgpe3JldHVybiB4ID4gMT8wOnggPCAtMT/PgDpNYXRoLmFjb3MoeCk7fWZ1bmN0aW9uIGQzX2FzaW4oeCl7cmV0dXJuIHggPiAxP2hhbGbPgDp4IDwgLTE/LWhhbGbPgDpNYXRoLmFzaW4oeCk7fWZ1bmN0aW9uIGQzX3NpbmgoeCl7cmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSAtIDEgLyB4KSAvIDI7fWZ1bmN0aW9uIGQzX2Nvc2goeCl7cmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSArIDEgLyB4KSAvIDI7fWZ1bmN0aW9uIGQzX3RhbmgoeCl7cmV0dXJuICgoeCA9IE1hdGguZXhwKDIgKiB4KSkgLSAxKSAvICh4ICsgMSk7fWZ1bmN0aW9uIGQzX2hhdmVyc2luKHgpe3JldHVybiAoeCA9IE1hdGguc2luKHggLyAyKSkgKiB4O312YXIgz4E9TWF0aC5TUVJUMizPgTI9MizPgTQ9NDtkMy5pbnRlcnBvbGF0ZVpvb20gPSBmdW5jdGlvbihwMCxwMSl7dmFyIHV4MD1wMFswXSx1eTA9cDBbMV0sdzA9cDBbMl0sdXgxPXAxWzBdLHV5MT1wMVsxXSx3MT1wMVsyXSxkeD11eDEgLSB1eDAsZHk9dXkxIC0gdXkwLGQyPWR4ICogZHggKyBkeSAqIGR5LGksUztpZihkMiA8IM61Mil7UyA9IE1hdGgubG9nKHcxIC8gdzApIC8gz4E7aSA9IGZ1bmN0aW9uKHQpe3JldHVybiBbdXgwICsgdCAqIGR4LHV5MCArIHQgKiBkeSx3MCAqIE1hdGguZXhwKM+BICogdCAqIFMpXTt9O31lbHNlIHt2YXIgZDE9TWF0aC5zcXJ0KGQyKSxiMD0odzEgKiB3MSAtIHcwICogdzAgKyDPgTQgKiBkMikgLyAoMiAqIHcwICogz4EyICogZDEpLGIxPSh3MSAqIHcxIC0gdzAgKiB3MCAtIM+BNCAqIGQyKSAvICgyICogdzEgKiDPgTIgKiBkMSkscjA9TWF0aC5sb2coTWF0aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKSxyMT1NYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBiMSArIDEpIC0gYjEpO1MgPSAocjEgLSByMCkgLyDPgTtpID0gZnVuY3Rpb24odCl7dmFyIHM9dCAqIFMsY29zaHIwPWQzX2Nvc2gocjApLHU9dzAgLyAoz4EyICogZDEpICogKGNvc2hyMCAqIGQzX3Rhbmgoz4EgKiBzICsgcjApIC0gZDNfc2luaChyMCkpO3JldHVybiBbdXgwICsgdSAqIGR4LHV5MCArIHUgKiBkeSx3MCAqIGNvc2hyMCAvIGQzX2Nvc2goz4EgKiBzICsgcjApXTt9O31pLmR1cmF0aW9uID0gUyAqIDFlMztyZXR1cm4gaTt9O2QzLmJlaGF2aW9yLnpvb20gPSBmdW5jdGlvbigpe3ZhciB2aWV3PXt4OjAseTowLGs6MX0sdHJhbnNsYXRlMCxjZW50ZXIwLGNlbnRlcixzaXplPVs5NjAsNTAwXSxzY2FsZUV4dGVudD1kM19iZWhhdmlvcl96b29tSW5maW5pdHksZHVyYXRpb249MjUwLHpvb21pbmc9MCxtb3VzZWRvd249XCJtb3VzZWRvd24uem9vbVwiLG1vdXNlbW92ZT1cIm1vdXNlbW92ZS56b29tXCIsbW91c2V1cD1cIm1vdXNldXAuem9vbVwiLG1vdXNld2hlZWxUaW1lcix0b3VjaHN0YXJ0PVwidG91Y2hzdGFydC56b29tXCIsdG91Y2h0aW1lLGV2ZW50PWQzX2V2ZW50RGlzcGF0Y2goem9vbSxcInpvb21zdGFydFwiLFwiem9vbVwiLFwiem9vbWVuZFwiKSx4MCx4MSx5MCx5MTtpZighZDNfYmVoYXZpb3Jfem9vbVdoZWVsKXtkM19iZWhhdmlvcl96b29tV2hlZWwgPSBcIm9ud2hlZWxcIiBpbiBkM19kb2N1bWVudD8oZDNfYmVoYXZpb3Jfem9vbURlbHRhID0gZnVuY3Rpb24oKXtyZXR1cm4gLWQzLmV2ZW50LmRlbHRhWSAqIChkMy5ldmVudC5kZWx0YU1vZGU/MTIwOjEpO30sXCJ3aGVlbFwiKTpcIm9ubW91c2V3aGVlbFwiIGluIGQzX2RvY3VtZW50PyhkM19iZWhhdmlvcl96b29tRGVsdGEgPSBmdW5jdGlvbigpe3JldHVybiBkMy5ldmVudC53aGVlbERlbHRhO30sXCJtb3VzZXdoZWVsXCIpOihkM19iZWhhdmlvcl96b29tRGVsdGEgPSBmdW5jdGlvbigpe3JldHVybiAtZDMuZXZlbnQuZGV0YWlsO30sXCJNb3pNb3VzZVBpeGVsU2Nyb2xsXCIpO31mdW5jdGlvbiB6b29tKGcpe2cub24obW91c2Vkb3duLG1vdXNlZG93bmVkKS5vbihkM19iZWhhdmlvcl96b29tV2hlZWwgKyBcIi56b29tXCIsbW91c2V3aGVlbGVkKS5vbihcImRibGNsaWNrLnpvb21cIixkYmxjbGlja2VkKS5vbih0b3VjaHN0YXJ0LHRvdWNoc3RhcnRlZCk7fXpvb20uZXZlbnQgPSBmdW5jdGlvbihnKXtnLmVhY2goZnVuY3Rpb24oKXt2YXIgZGlzcGF0Y2g9ZXZlbnQub2YodGhpcyxhcmd1bWVudHMpLHZpZXcxPXZpZXc7aWYoZDNfdHJhbnNpdGlvbkluaGVyaXRJZCl7ZDMuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKFwic3RhcnQuem9vbVwiLGZ1bmN0aW9uKCl7dmlldyA9IHRoaXMuX19jaGFydF9fIHx8IHt4OjAseTowLGs6MX07em9vbXN0YXJ0ZWQoZGlzcGF0Y2gpO30pLnR3ZWVuKFwiem9vbTp6b29tXCIsZnVuY3Rpb24oKXt2YXIgZHg9c2l6ZVswXSxkeT1zaXplWzFdLGN4PWNlbnRlcjA/Y2VudGVyMFswXTpkeCAvIDIsY3k9Y2VudGVyMD9jZW50ZXIwWzFdOmR5IC8gMixpPWQzLmludGVycG9sYXRlWm9vbShbKGN4IC0gdmlldy54KSAvIHZpZXcuaywoY3kgLSB2aWV3LnkpIC8gdmlldy5rLGR4IC8gdmlldy5rXSxbKGN4IC0gdmlldzEueCkgLyB2aWV3MS5rLChjeSAtIHZpZXcxLnkpIC8gdmlldzEuayxkeCAvIHZpZXcxLmtdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGw9aSh0KSxrPWR4IC8gbFsyXTt0aGlzLl9fY2hhcnRfXyA9IHZpZXcgPSB7eDpjeCAtIGxbMF0gKiBrLHk6Y3kgLSBsWzFdICogayxrOmt9O3pvb21lZChkaXNwYXRjaCk7fTt9KS5lYWNoKFwiaW50ZXJydXB0Lnpvb21cIixmdW5jdGlvbigpe3pvb21lbmRlZChkaXNwYXRjaCk7fSkuZWFjaChcImVuZC56b29tXCIsZnVuY3Rpb24oKXt6b29tZW5kZWQoZGlzcGF0Y2gpO30pO31lbHNlIHt0aGlzLl9fY2hhcnRfXyA9IHZpZXc7em9vbXN0YXJ0ZWQoZGlzcGF0Y2gpO3pvb21lZChkaXNwYXRjaCk7em9vbWVuZGVkKGRpc3BhdGNoKTt9fSk7fTt6b29tLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBbdmlldy54LHZpZXcueV07dmlldyA9IHt4OitfWzBdLHk6K19bMV0sazp2aWV3Lmt9O3Jlc2NhbGUoKTtyZXR1cm4gem9vbTt9O3pvb20uc2NhbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdmlldy5rO3ZpZXcgPSB7eDp2aWV3LngseTp2aWV3LnksazpudWxsfTtzY2FsZVRvKCtfKTtyZXNjYWxlKCk7cmV0dXJuIHpvb207fTt6b29tLnNjYWxlRXh0ZW50ID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNjYWxlRXh0ZW50O3NjYWxlRXh0ZW50ID0gXyA9PSBudWxsP2QzX2JlaGF2aW9yX3pvb21JbmZpbml0eTpbK19bMF0sK19bMV1dO3JldHVybiB6b29tO307em9vbS5jZW50ZXIgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2VudGVyO2NlbnRlciA9IF8gJiYgWytfWzBdLCtfWzFdXTtyZXR1cm4gem9vbTt9O3pvb20uc2l6ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzaXplO3NpemUgPSBfICYmIFsrX1swXSwrX1sxXV07cmV0dXJuIHpvb207fTt6b29tLmR1cmF0aW9uID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGR1cmF0aW9uO2R1cmF0aW9uID0gK187cmV0dXJuIHpvb207fTt6b29tLnggPSBmdW5jdGlvbih6KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDE7eDEgPSB6O3gwID0gei5jb3B5KCk7dmlldyA9IHt4OjAseTowLGs6MX07cmV0dXJuIHpvb207fTt6b29tLnkgPSBmdW5jdGlvbih6KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTE7eTEgPSB6O3kwID0gei5jb3B5KCk7dmlldyA9IHt4OjAseTowLGs6MX07cmV0dXJuIHpvb207fTtmdW5jdGlvbiBsb2NhdGlvbihwKXtyZXR1cm4gWyhwWzBdIC0gdmlldy54KSAvIHZpZXcuaywocFsxXSAtIHZpZXcueSkgLyB2aWV3LmtdO31mdW5jdGlvbiBwb2ludChsKXtyZXR1cm4gW2xbMF0gKiB2aWV3LmsgKyB2aWV3LngsbFsxXSAqIHZpZXcuayArIHZpZXcueV07fWZ1bmN0aW9uIHNjYWxlVG8ocyl7dmlldy5rID0gTWF0aC5tYXgoc2NhbGVFeHRlbnRbMF0sTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0scykpO31mdW5jdGlvbiB0cmFuc2xhdGVUbyhwLGwpe2wgPSBwb2ludChsKTt2aWV3LnggKz0gcFswXSAtIGxbMF07dmlldy55ICs9IHBbMV0gLSBsWzFdO31mdW5jdGlvbiB6b29tVG8odGhhdCxwLGwsayl7dGhhdC5fX2NoYXJ0X18gPSB7eDp2aWV3LngseTp2aWV3Lnksazp2aWV3Lmt9O3NjYWxlVG8oTWF0aC5wb3coMixrKSk7dHJhbnNsYXRlVG8oY2VudGVyMCA9IHAsbCk7dGhhdCA9IGQzLnNlbGVjdCh0aGF0KTtpZihkdXJhdGlvbiA+IDApdGhhdCA9IHRoYXQudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKTt0aGF0LmNhbGwoem9vbS5ldmVudCk7fWZ1bmN0aW9uIHJlc2NhbGUoKXtpZih4MSl4MS5kb21haW4oeDAucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuICh4IC0gdmlldy54KSAvIHZpZXcuazt9KS5tYXAoeDAuaW52ZXJ0KSk7aWYoeTEpeTEuZG9tYWluKHkwLnJhbmdlKCkubWFwKGZ1bmN0aW9uKHkpe3JldHVybiAoeSAtIHZpZXcueSkgLyB2aWV3Lms7fSkubWFwKHkwLmludmVydCkpO31mdW5jdGlvbiB6b29tc3RhcnRlZChkaXNwYXRjaCl7aWYoISB6b29taW5nKyspZGlzcGF0Y2goe3R5cGU6XCJ6b29tc3RhcnRcIn0pO31mdW5jdGlvbiB6b29tZWQoZGlzcGF0Y2gpe3Jlc2NhbGUoKTtkaXNwYXRjaCh7dHlwZTpcInpvb21cIixzY2FsZTp2aWV3LmssdHJhbnNsYXRlOlt2aWV3Lngsdmlldy55XX0pO31mdW5jdGlvbiB6b29tZW5kZWQoZGlzcGF0Y2gpe2lmKCEgLS16b29taW5nKWRpc3BhdGNoKHt0eXBlOlwiem9vbWVuZFwifSksY2VudGVyMCA9IG51bGw7fWZ1bmN0aW9uIG1vdXNlZG93bmVkKCl7dmFyIHRoYXQ9dGhpcyx0YXJnZXQ9ZDMuZXZlbnQudGFyZ2V0LGRpc3BhdGNoPWV2ZW50Lm9mKHRoYXQsYXJndW1lbnRzKSxkcmFnZ2VkPTAsc3ViamVjdD1kMy5zZWxlY3QoZDNfd2luZG93KHRoYXQpKS5vbihtb3VzZW1vdmUsbW92ZWQpLm9uKG1vdXNldXAsZW5kZWQpLGxvY2F0aW9uMD1sb2NhdGlvbihkMy5tb3VzZSh0aGF0KSksZHJhZ1Jlc3RvcmU9ZDNfZXZlbnRfZHJhZ1N1cHByZXNzKHRoYXQpO2QzX3NlbGVjdGlvbl9pbnRlcnJ1cHQuY2FsbCh0aGF0KTt6b29tc3RhcnRlZChkaXNwYXRjaCk7ZnVuY3Rpb24gbW92ZWQoKXtkcmFnZ2VkID0gMTt0cmFuc2xhdGVUbyhkMy5tb3VzZSh0aGF0KSxsb2NhdGlvbjApO3pvb21lZChkaXNwYXRjaCk7fWZ1bmN0aW9uIGVuZGVkKCl7c3ViamVjdC5vbihtb3VzZW1vdmUsbnVsbCkub24obW91c2V1cCxudWxsKTtkcmFnUmVzdG9yZShkcmFnZ2VkICYmIGQzLmV2ZW50LnRhcmdldCA9PT0gdGFyZ2V0KTt6b29tZW5kZWQoZGlzcGF0Y2gpO319ZnVuY3Rpb24gdG91Y2hzdGFydGVkKCl7dmFyIHRoYXQ9dGhpcyxkaXNwYXRjaD1ldmVudC5vZih0aGF0LGFyZ3VtZW50cyksbG9jYXRpb25zMD17fSxkaXN0YW5jZTA9MCxzY2FsZTAsem9vbU5hbWU9XCIuem9vbS1cIiArIGQzLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsdG91Y2htb3ZlPVwidG91Y2htb3ZlXCIgKyB6b29tTmFtZSx0b3VjaGVuZD1cInRvdWNoZW5kXCIgKyB6b29tTmFtZSx0YXJnZXRzPVtdLHN1YmplY3Q9ZDMuc2VsZWN0KHRoYXQpLGRyYWdSZXN0b3JlPWQzX2V2ZW50X2RyYWdTdXBwcmVzcyh0aGF0KTtzdGFydGVkKCk7em9vbXN0YXJ0ZWQoZGlzcGF0Y2gpO3N1YmplY3Qub24obW91c2Vkb3duLG51bGwpLm9uKHRvdWNoc3RhcnQsc3RhcnRlZCk7ZnVuY3Rpb24gcmVsb2NhdGUoKXt2YXIgdG91Y2hlcz1kMy50b3VjaGVzKHRoYXQpO3NjYWxlMCA9IHZpZXcuazt0b3VjaGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYodC5pZGVudGlmaWVyIGluIGxvY2F0aW9uczApbG9jYXRpb25zMFt0LmlkZW50aWZpZXJdID0gbG9jYXRpb24odCk7fSk7cmV0dXJuIHRvdWNoZXM7fWZ1bmN0aW9uIHN0YXJ0ZWQoKXt2YXIgdGFyZ2V0PWQzLmV2ZW50LnRhcmdldDtkMy5zZWxlY3QodGFyZ2V0KS5vbih0b3VjaG1vdmUsbW92ZWQpLm9uKHRvdWNoZW5kLGVuZGVkKTt0YXJnZXRzLnB1c2godGFyZ2V0KTt2YXIgY2hhbmdlZD1kMy5ldmVudC5jaGFuZ2VkVG91Y2hlcztmb3IodmFyIGk9MCxuPWNoYW5nZWQubGVuZ3RoO2kgPCBuOysraSkge2xvY2F0aW9uczBbY2hhbmdlZFtpXS5pZGVudGlmaWVyXSA9IG51bGw7fXZhciB0b3VjaGVzPXJlbG9jYXRlKCksbm93PURhdGUubm93KCk7aWYodG91Y2hlcy5sZW5ndGggPT09IDEpe2lmKG5vdyAtIHRvdWNodGltZSA8IDUwMCl7dmFyIHA9dG91Y2hlc1swXTt6b29tVG8odGhhdCxwLGxvY2F0aW9uczBbcC5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKHZpZXcuaykgLyBNYXRoLkxOMikgKyAxKTtkM19ldmVudFByZXZlbnREZWZhdWx0KCk7fXRvdWNodGltZSA9IG5vdzt9ZWxzZSBpZih0b3VjaGVzLmxlbmd0aCA+IDEpe3ZhciBwPXRvdWNoZXNbMF0scT10b3VjaGVzWzFdLGR4PXBbMF0gLSBxWzBdLGR5PXBbMV0gLSBxWzFdO2Rpc3RhbmNlMCA9IGR4ICogZHggKyBkeSAqIGR5O319ZnVuY3Rpb24gbW92ZWQoKXt2YXIgdG91Y2hlcz1kMy50b3VjaGVzKHRoYXQpLHAwLGwwLHAxLGwxO2QzX3NlbGVjdGlvbl9pbnRlcnJ1cHQuY2FsbCh0aGF0KTtmb3IodmFyIGk9MCxuPXRvdWNoZXMubGVuZ3RoO2kgPCBuOysraSxsMSA9IG51bGwpIHtwMSA9IHRvdWNoZXNbaV07aWYobDEgPSBsb2NhdGlvbnMwW3AxLmlkZW50aWZpZXJdKXtpZihsMClicmVhaztwMCA9IHAxLGwwID0gbDE7fX1pZihsMSl7dmFyIGRpc3RhbmNlMT0oZGlzdGFuY2UxID0gcDFbMF0gLSBwMFswXSkgKiBkaXN0YW5jZTEgKyAoZGlzdGFuY2UxID0gcDFbMV0gLSBwMFsxXSkgKiBkaXN0YW5jZTEsc2NhbGUxPWRpc3RhbmNlMCAmJiBNYXRoLnNxcnQoZGlzdGFuY2UxIC8gZGlzdGFuY2UwKTtwMCA9IFsocDBbMF0gKyBwMVswXSkgLyAyLChwMFsxXSArIHAxWzFdKSAvIDJdO2wwID0gWyhsMFswXSArIGwxWzBdKSAvIDIsKGwwWzFdICsgbDFbMV0pIC8gMl07c2NhbGVUbyhzY2FsZTEgKiBzY2FsZTApO310b3VjaHRpbWUgPSBudWxsO3RyYW5zbGF0ZVRvKHAwLGwwKTt6b29tZWQoZGlzcGF0Y2gpO31mdW5jdGlvbiBlbmRlZCgpe2lmKGQzLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXt2YXIgY2hhbmdlZD1kMy5ldmVudC5jaGFuZ2VkVG91Y2hlcztmb3IodmFyIGk9MCxuPWNoYW5nZWQubGVuZ3RoO2kgPCBuOysraSkge2RlbGV0ZSBsb2NhdGlvbnMwW2NoYW5nZWRbaV0uaWRlbnRpZmllcl07fWZvcih2YXIgaWRlbnRpZmllciBpbiBsb2NhdGlvbnMwKSB7cmV0dXJuIHZvaWQgcmVsb2NhdGUoKTt9fWQzLnNlbGVjdEFsbCh0YXJnZXRzKS5vbih6b29tTmFtZSxudWxsKTtzdWJqZWN0Lm9uKG1vdXNlZG93bixtb3VzZWRvd25lZCkub24odG91Y2hzdGFydCx0b3VjaHN0YXJ0ZWQpO2RyYWdSZXN0b3JlKCk7em9vbWVuZGVkKGRpc3BhdGNoKTt9fWZ1bmN0aW9uIG1vdXNld2hlZWxlZCgpe3ZhciBkaXNwYXRjaD1ldmVudC5vZih0aGlzLGFyZ3VtZW50cyk7aWYobW91c2V3aGVlbFRpbWVyKWNsZWFyVGltZW91dChtb3VzZXdoZWVsVGltZXIpO2Vsc2UgZDNfc2VsZWN0aW9uX2ludGVycnVwdC5jYWxsKHRoaXMpLHRyYW5zbGF0ZTAgPSBsb2NhdGlvbihjZW50ZXIwID0gY2VudGVyIHx8IGQzLm1vdXNlKHRoaXMpKSx6b29tc3RhcnRlZChkaXNwYXRjaCk7bW91c2V3aGVlbFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe21vdXNld2hlZWxUaW1lciA9IG51bGw7em9vbWVuZGVkKGRpc3BhdGNoKTt9LDUwKTtkM19ldmVudFByZXZlbnREZWZhdWx0KCk7c2NhbGVUbyhNYXRoLnBvdygyLGQzX2JlaGF2aW9yX3pvb21EZWx0YSgpICogLjAwMikgKiB2aWV3LmspO3RyYW5zbGF0ZVRvKGNlbnRlcjAsdHJhbnNsYXRlMCk7em9vbWVkKGRpc3BhdGNoKTt9ZnVuY3Rpb24gZGJsY2xpY2tlZCgpe3ZhciBwPWQzLm1vdXNlKHRoaXMpLGs9TWF0aC5sb2codmlldy5rKSAvIE1hdGguTE4yO3pvb21Ubyh0aGlzLHAsbG9jYXRpb24ocCksZDMuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKGspIC0gMTpNYXRoLmZsb29yKGspICsgMSk7fXJldHVybiBkMy5yZWJpbmQoem9vbSxldmVudCxcIm9uXCIpO307dmFyIGQzX2JlaGF2aW9yX3pvb21JbmZpbml0eT1bMCxJbmZpbml0eV0sZDNfYmVoYXZpb3Jfem9vbURlbHRhLGQzX2JlaGF2aW9yX3pvb21XaGVlbDtkMy5jb2xvciA9IGQzX2NvbG9yO2Z1bmN0aW9uIGQzX2NvbG9yKCl7fWQzX2NvbG9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkgKyBcIlwiO307ZDMuaHNsID0gZDNfaHNsO2Z1bmN0aW9uIGQzX2hzbChoLHMsbCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkM19oc2w/dm9pZCAodGhpcy5oID0gK2gsdGhpcy5zID0gK3MsdGhpcy5sID0gK2wpOmFyZ3VtZW50cy5sZW5ndGggPCAyP2ggaW5zdGFuY2VvZiBkM19oc2w/bmV3IGQzX2hzbChoLmgsaC5zLGgubCk6ZDNfcmdiX3BhcnNlKFwiXCIgKyBoLGQzX3JnYl9oc2wsZDNfaHNsKTpuZXcgZDNfaHNsKGgscyxsKTt9dmFyIGQzX2hzbFByb3RvdHlwZT1kM19oc2wucHJvdG90eXBlID0gbmV3IGQzX2NvbG9yKCk7ZDNfaHNsUHJvdG90eXBlLmJyaWdodGVyID0gZnVuY3Rpb24oayl7ayA9IE1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/azoxKTtyZXR1cm4gbmV3IGQzX2hzbCh0aGlzLmgsdGhpcy5zLHRoaXMubCAvIGspO307ZDNfaHNsUHJvdG90eXBlLmRhcmtlciA9IGZ1bmN0aW9uKGspe2sgPSBNYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP2s6MSk7cmV0dXJuIG5ldyBkM19oc2wodGhpcy5oLHRoaXMucyxrICogdGhpcy5sKTt9O2QzX2hzbFByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbigpe3JldHVybiBkM19oc2xfcmdiKHRoaXMuaCx0aGlzLnMsdGhpcy5sKTt9O2Z1bmN0aW9uIGQzX2hzbF9yZ2IoaCxzLGwpe3ZhciBtMSxtMjtoID0gaXNOYU4oaCk/MDooaCAlPSAzNjApIDwgMD9oICsgMzYwOmg7cyA9IGlzTmFOKHMpPzA6cyA8IDA/MDpzID4gMT8xOnM7bCA9IGwgPCAwPzA6bCA+IDE/MTpsO20yID0gbCA8PSAuNT9sICogKDEgKyBzKTpsICsgcyAtIGwgKiBzO20xID0gMiAqIGwgLSBtMjtmdW5jdGlvbiB2KGgpe2lmKGggPiAzNjApaCAtPSAzNjA7ZWxzZSBpZihoIDwgMCloICs9IDM2MDtpZihoIDwgNjApcmV0dXJuIG0xICsgKG0yIC0gbTEpICogaCAvIDYwO2lmKGggPCAxODApcmV0dXJuIG0yO2lmKGggPCAyNDApcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjA7cmV0dXJuIG0xO31mdW5jdGlvbiB2dihoKXtyZXR1cm4gTWF0aC5yb3VuZCh2KGgpICogMjU1KTt9cmV0dXJuIG5ldyBkM19yZ2IodnYoaCArIDEyMCksdnYoaCksdnYoaCAtIDEyMCkpO31kMy5oY2wgPSBkM19oY2w7ZnVuY3Rpb24gZDNfaGNsKGgsYyxsKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGQzX2hjbD92b2lkICh0aGlzLmggPSAraCx0aGlzLmMgPSArYyx0aGlzLmwgPSArbCk6YXJndW1lbnRzLmxlbmd0aCA8IDI/aCBpbnN0YW5jZW9mIGQzX2hjbD9uZXcgZDNfaGNsKGguaCxoLmMsaC5sKTpoIGluc3RhbmNlb2YgZDNfbGFiP2QzX2xhYl9oY2woaC5sLGguYSxoLmIpOmQzX2xhYl9oY2woKGggPSBkM19yZ2JfbGFiKChoID0gZDMucmdiKGgpKS5yLGguZyxoLmIpKS5sLGguYSxoLmIpOm5ldyBkM19oY2woaCxjLGwpO312YXIgZDNfaGNsUHJvdG90eXBlPWQzX2hjbC5wcm90b3R5cGUgPSBuZXcgZDNfY29sb3IoKTtkM19oY2xQcm90b3R5cGUuYnJpZ2h0ZXIgPSBmdW5jdGlvbihrKXtyZXR1cm4gbmV3IGQzX2hjbCh0aGlzLmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwgKyBkM19sYWJfSyAqIChhcmd1bWVudHMubGVuZ3RoP2s6MSkpKTt9O2QzX2hjbFByb3RvdHlwZS5kYXJrZXIgPSBmdW5jdGlvbihrKXtyZXR1cm4gbmV3IGQzX2hjbCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sIC0gZDNfbGFiX0sgKiAoYXJndW1lbnRzLmxlbmd0aD9rOjEpKSk7fTtkM19oY2xQcm90b3R5cGUucmdiID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfaGNsX2xhYih0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCk7fTtmdW5jdGlvbiBkM19oY2xfbGFiKGgsYyxsKXtpZihpc05hTihoKSloID0gMDtpZihpc05hTihjKSljID0gMDtyZXR1cm4gbmV3IGQzX2xhYihsLE1hdGguY29zKGggKj0gZDNfcmFkaWFucykgKiBjLE1hdGguc2luKGgpICogYyk7fWQzLmxhYiA9IGQzX2xhYjtmdW5jdGlvbiBkM19sYWIobCxhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZDNfbGFiP3ZvaWQgKHRoaXMubCA9ICtsLHRoaXMuYSA9ICthLHRoaXMuYiA9ICtiKTphcmd1bWVudHMubGVuZ3RoIDwgMj9sIGluc3RhbmNlb2YgZDNfbGFiP25ldyBkM19sYWIobC5sLGwuYSxsLmIpOmwgaW5zdGFuY2VvZiBkM19oY2w/ZDNfaGNsX2xhYihsLmgsbC5jLGwubCk6ZDNfcmdiX2xhYigobCA9IGQzX3JnYihsKSkucixsLmcsbC5iKTpuZXcgZDNfbGFiKGwsYSxiKTt9dmFyIGQzX2xhYl9LPTE4O3ZhciBkM19sYWJfWD0uOTUwNDcsZDNfbGFiX1k9MSxkM19sYWJfWj0xLjA4ODgzO3ZhciBkM19sYWJQcm90b3R5cGU9ZDNfbGFiLnByb3RvdHlwZSA9IG5ldyBkM19jb2xvcigpO2QzX2xhYlByb3RvdHlwZS5icmlnaHRlciA9IGZ1bmN0aW9uKGspe3JldHVybiBuZXcgZDNfbGFiKE1hdGgubWluKDEwMCx0aGlzLmwgKyBkM19sYWJfSyAqIChhcmd1bWVudHMubGVuZ3RoP2s6MSkpLHRoaXMuYSx0aGlzLmIpO307ZDNfbGFiUHJvdG90eXBlLmRhcmtlciA9IGZ1bmN0aW9uKGspe3JldHVybiBuZXcgZDNfbGFiKE1hdGgubWF4KDAsdGhpcy5sIC0gZDNfbGFiX0sgKiAoYXJndW1lbnRzLmxlbmd0aD9rOjEpKSx0aGlzLmEsdGhpcy5iKTt9O2QzX2xhYlByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbigpe3JldHVybiBkM19sYWJfcmdiKHRoaXMubCx0aGlzLmEsdGhpcy5iKTt9O2Z1bmN0aW9uIGQzX2xhYl9yZ2IobCxhLGIpe3ZhciB5PShsICsgMTYpIC8gMTE2LHg9eSArIGEgLyA1MDAsej15IC0gYiAvIDIwMDt4ID0gZDNfbGFiX3h5eih4KSAqIGQzX2xhYl9YO3kgPSBkM19sYWJfeHl6KHkpICogZDNfbGFiX1k7eiA9IGQzX2xhYl94eXooeikgKiBkM19sYWJfWjtyZXR1cm4gbmV3IGQzX3JnYihkM194eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gLjQ5ODUzMTQgKiB6KSxkM194eXpfcmdiKC0uOTY5MjY2ICogeCArIDEuODc2MDEwOCAqIHkgKyAuMDQxNTU2ICogeiksZDNfeHl6X3JnYiguMDU1NjQzNCAqIHggLSAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSk7fWZ1bmN0aW9uIGQzX2xhYl9oY2wobCxhLGIpe3JldHVybiBsID4gMD9uZXcgZDNfaGNsKE1hdGguYXRhbjIoYixhKSAqIGQzX2RlZ3JlZXMsTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpLGwpOm5ldyBkM19oY2woTmFOLE5hTixsKTt9ZnVuY3Rpb24gZDNfbGFiX3h5eih4KXtyZXR1cm4geCA+IC4yMDY4OTMwMzQ/eCAqIHggKiB4Oih4IC0gNCAvIDI5KSAvIDcuNzg3MDM3O31mdW5jdGlvbiBkM194eXpfbGFiKHgpe3JldHVybiB4ID4gLjAwODg1Nj9NYXRoLnBvdyh4LDEgLyAzKTo3Ljc4NzAzNyAqIHggKyA0IC8gMjk7fWZ1bmN0aW9uIGQzX3h5el9yZ2Iocil7cmV0dXJuIE1hdGgucm91bmQoMjU1ICogKHIgPD0gLjAwMzA0PzEyLjkyICogcjoxLjA1NSAqIE1hdGgucG93KHIsMSAvIDIuNCkgLSAuMDU1KSk7fWQzLnJnYiA9IGQzX3JnYjtmdW5jdGlvbiBkM19yZ2IocixnLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZDNfcmdiP3ZvaWQgKHRoaXMuciA9IH4gfnIsdGhpcy5nID0gfiB+Zyx0aGlzLmIgPSB+IH5iKTphcmd1bWVudHMubGVuZ3RoIDwgMj9yIGluc3RhbmNlb2YgZDNfcmdiP25ldyBkM19yZ2Ioci5yLHIuZyxyLmIpOmQzX3JnYl9wYXJzZShcIlwiICsgcixkM19yZ2IsZDNfaHNsX3JnYik6bmV3IGQzX3JnYihyLGcsYik7fWZ1bmN0aW9uIGQzX3JnYk51bWJlcih2YWx1ZSl7cmV0dXJuIG5ldyBkM19yZ2IodmFsdWUgPj4gMTYsdmFsdWUgPj4gOCAmIDI1NSx2YWx1ZSAmIDI1NSk7fWZ1bmN0aW9uIGQzX3JnYlN0cmluZyh2YWx1ZSl7cmV0dXJuIGQzX3JnYk51bWJlcih2YWx1ZSkgKyBcIlwiO312YXIgZDNfcmdiUHJvdG90eXBlPWQzX3JnYi5wcm90b3R5cGUgPSBuZXcgZDNfY29sb3IoKTtkM19yZ2JQcm90b3R5cGUuYnJpZ2h0ZXIgPSBmdW5jdGlvbihrKXtrID0gTWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9rOjEpO3ZhciByPXRoaXMucixnPXRoaXMuZyxiPXRoaXMuYixpPTMwO2lmKCFyICYmICFnICYmICFiKXJldHVybiBuZXcgZDNfcmdiKGksaSxpKTtpZihyICYmIHIgPCBpKXIgPSBpO2lmKGcgJiYgZyA8IGkpZyA9IGk7aWYoYiAmJiBiIDwgaSliID0gaTtyZXR1cm4gbmV3IGQzX3JnYihNYXRoLm1pbigyNTUsciAvIGspLE1hdGgubWluKDI1NSxnIC8gayksTWF0aC5taW4oMjU1LGIgLyBrKSk7fTtkM19yZ2JQcm90b3R5cGUuZGFya2VyID0gZnVuY3Rpb24oayl7ayA9IE1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/azoxKTtyZXR1cm4gbmV3IGQzX3JnYihrICogdGhpcy5yLGsgKiB0aGlzLmcsayAqIHRoaXMuYik7fTtkM19yZ2JQcm90b3R5cGUuaHNsID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfcmdiX2hzbCh0aGlzLnIsdGhpcy5nLHRoaXMuYik7fTtkM19yZ2JQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiBcIiNcIiArIGQzX3JnYl9oZXgodGhpcy5yKSArIGQzX3JnYl9oZXgodGhpcy5nKSArIGQzX3JnYl9oZXgodGhpcy5iKTt9O2Z1bmN0aW9uIGQzX3JnYl9oZXgodil7cmV0dXJuIHYgPCAxNj9cIjBcIiArIE1hdGgubWF4KDAsdikudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx2KS50b1N0cmluZygxNik7fWZ1bmN0aW9uIGQzX3JnYl9wYXJzZShmb3JtYXQscmdiLGhzbCl7dmFyIHI9MCxnPTAsYj0wLG0xLG0yLGNvbG9yO20xID0gLyhbYS16XSspXFwoKC4qKVxcKS8uZXhlYyhmb3JtYXQgPSBmb3JtYXQudG9Mb3dlckNhc2UoKSk7aWYobTEpe20yID0gbTFbMl0uc3BsaXQoXCIsXCIpO3N3aXRjaChtMVsxXSl7Y2FzZSBcImhzbFwiOntyZXR1cm4gaHNsKHBhcnNlRmxvYXQobTJbMF0pLHBhcnNlRmxvYXQobTJbMV0pIC8gMTAwLHBhcnNlRmxvYXQobTJbMl0pIC8gMTAwKTt9Y2FzZSBcInJnYlwiOntyZXR1cm4gcmdiKGQzX3JnYl9wYXJzZU51bWJlcihtMlswXSksZDNfcmdiX3BhcnNlTnVtYmVyKG0yWzFdKSxkM19yZ2JfcGFyc2VOdW1iZXIobTJbMl0pKTt9fX1pZihjb2xvciA9IGQzX3JnYl9uYW1lcy5nZXQoZm9ybWF0KSl7cmV0dXJuIHJnYihjb2xvci5yLGNvbG9yLmcsY29sb3IuYik7fWlmKGZvcm1hdCAhPSBudWxsICYmIGZvcm1hdC5jaGFyQXQoMCkgPT09IFwiI1wiICYmICFpc05hTihjb2xvciA9IHBhcnNlSW50KGZvcm1hdC5zbGljZSgxKSwxNikpKXtpZihmb3JtYXQubGVuZ3RoID09PSA0KXtyID0gKGNvbG9yICYgMzg0MCkgPj4gNDtyID0gciA+PiA0IHwgcjtnID0gY29sb3IgJiAyNDA7ZyA9IGcgPj4gNCB8IGc7YiA9IGNvbG9yICYgMTU7YiA9IGIgPDwgNCB8IGI7fWVsc2UgaWYoZm9ybWF0Lmxlbmd0aCA9PT0gNyl7ciA9IChjb2xvciAmIDE2NzExNjgwKSA+PiAxNjtnID0gKGNvbG9yICYgNjUyODApID4+IDg7YiA9IGNvbG9yICYgMjU1O319cmV0dXJuIHJnYihyLGcsYik7fWZ1bmN0aW9uIGQzX3JnYl9oc2wocixnLGIpe3ZhciBtaW49TWF0aC5taW4ociAvPSAyNTUsZyAvPSAyNTUsYiAvPSAyNTUpLG1heD1NYXRoLm1heChyLGcsYiksZD1tYXggLSBtaW4saCxzLGw9KG1heCArIG1pbikgLyAyO2lmKGQpe3MgPSBsIDwgLjU/ZCAvIChtYXggKyBtaW4pOmQgLyAoMiAtIG1heCAtIG1pbik7aWYociA9PSBtYXgpaCA9IChnIC0gYikgLyBkICsgKGcgPCBiPzY6MCk7ZWxzZSBpZihnID09IG1heCloID0gKGIgLSByKSAvIGQgKyAyO2Vsc2UgaCA9IChyIC0gZykgLyBkICsgNDtoICo9IDYwO31lbHNlIHtoID0gTmFOO3MgPSBsID4gMCAmJiBsIDwgMT8wOmg7fXJldHVybiBuZXcgZDNfaHNsKGgscyxsKTt9ZnVuY3Rpb24gZDNfcmdiX2xhYihyLGcsYil7ciA9IGQzX3JnYl94eXoocik7ZyA9IGQzX3JnYl94eXooZyk7YiA9IGQzX3JnYl94eXooYik7dmFyIHg9ZDNfeHl6X2xhYigoLjQxMjQ1NjQgKiByICsgLjM1NzU3NjEgKiBnICsgLjE4MDQzNzUgKiBiKSAvIGQzX2xhYl9YKSx5PWQzX3h5el9sYWIoKC4yMTI2NzI5ICogciArIC43MTUxNTIyICogZyArIC4wNzIxNzUgKiBiKSAvIGQzX2xhYl9ZKSx6PWQzX3h5el9sYWIoKC4wMTkzMzM5ICogciArIC4xMTkxOTIgKiBnICsgLjk1MDMwNDEgKiBiKSAvIGQzX2xhYl9aKTtyZXR1cm4gZDNfbGFiKDExNiAqIHkgLSAxNiw1MDAgKiAoeCAtIHkpLDIwMCAqICh5IC0geikpO31mdW5jdGlvbiBkM19yZ2JfeHl6KHIpe3JldHVybiAociAvPSAyNTUpIDw9IC4wNDA0NT9yIC8gMTIuOTI6TWF0aC5wb3coKHIgKyAuMDU1KSAvIDEuMDU1LDIuNCk7fWZ1bmN0aW9uIGQzX3JnYl9wYXJzZU51bWJlcihjKXt2YXIgZj1wYXJzZUZsb2F0KGMpO3JldHVybiBjLmNoYXJBdChjLmxlbmd0aCAtIDEpID09PSBcIiVcIj9NYXRoLnJvdW5kKGYgKiAyLjU1KTpmO312YXIgZDNfcmdiX25hbWVzPWQzLm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7ZDNfcmdiX25hbWVzLmZvckVhY2goZnVuY3Rpb24oa2V5LHZhbHVlKXtkM19yZ2JfbmFtZXMuc2V0KGtleSxkM19yZ2JOdW1iZXIodmFsdWUpKTt9KTtmdW5jdGlvbiBkM19mdW5jdG9yKHYpe3JldHVybiB0eXBlb2YgdiA9PT0gXCJmdW5jdGlvblwiP3Y6ZnVuY3Rpb24oKXtyZXR1cm4gdjt9O31kMy5mdW5jdG9yID0gZDNfZnVuY3RvcjtkMy54aHIgPSBkM194aHJUeXBlKGQzX2lkZW50aXR5KTtmdW5jdGlvbiBkM194aHJUeXBlKHJlc3BvbnNlKXtyZXR1cm4gZnVuY3Rpb24odXJsLG1pbWVUeXBlLGNhbGxiYWNrKXtpZihhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBtaW1lVHlwZSA9PT0gXCJmdW5jdGlvblwiKWNhbGxiYWNrID0gbWltZVR5cGUsbWltZVR5cGUgPSBudWxsO3JldHVybiBkM194aHIodXJsLG1pbWVUeXBlLHJlc3BvbnNlLGNhbGxiYWNrKTt9O31mdW5jdGlvbiBkM194aHIodXJsLG1pbWVUeXBlLHJlc3BvbnNlLGNhbGxiYWNrKXt2YXIgeGhyPXt9LGRpc3BhdGNoPWQzLmRpc3BhdGNoKFwiYmVmb3Jlc2VuZFwiLFwicHJvZ3Jlc3NcIixcImxvYWRcIixcImVycm9yXCIpLGhlYWRlcnM9e30scmVxdWVzdD1uZXcgWE1MSHR0cFJlcXVlc3QoKSxyZXNwb25zZVR5cGU9bnVsbDtpZih0aGlzLlhEb21haW5SZXF1ZXN0ICYmICEoXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiByZXF1ZXN0KSAmJiAvXihodHRwKHMpPzopP1xcL1xcLy8udGVzdCh1cmwpKXJlcXVlc3QgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcIm9ubG9hZFwiIGluIHJlcXVlc3Q/cmVxdWVzdC5vbmxvYWQgPSByZXF1ZXN0Lm9uZXJyb3IgPSByZXNwb25kOnJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtyZXF1ZXN0LnJlYWR5U3RhdGUgPiAzICYmIHJlc3BvbmQoKTt9O2Z1bmN0aW9uIHJlc3BvbmQoKXt2YXIgc3RhdHVzPXJlcXVlc3Quc3RhdHVzLHJlc3VsdDtpZighc3RhdHVzICYmIGQzX3hockhhc1Jlc3BvbnNlKHJlcXVlc3QpIHx8IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0KXt0cnl7cmVzdWx0ID0gcmVzcG9uc2UuY2FsbCh4aHIscmVxdWVzdCk7fWNhdGNoKGUpIHtkaXNwYXRjaC5lcnJvci5jYWxsKHhocixlKTtyZXR1cm47fWRpc3BhdGNoLmxvYWQuY2FsbCh4aHIscmVzdWx0KTt9ZWxzZSB7ZGlzcGF0Y2guZXJyb3IuY2FsbCh4aHIscmVxdWVzdCk7fX1yZXF1ZXN0Lm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihldmVudCl7dmFyIG89ZDMuZXZlbnQ7ZDMuZXZlbnQgPSBldmVudDt0cnl7ZGlzcGF0Y2gucHJvZ3Jlc3MuY2FsbCh4aHIscmVxdWVzdCk7fWZpbmFsbHkge2QzLmV2ZW50ID0gbzt9fTt4aHIuaGVhZGVyID0gZnVuY3Rpb24obmFtZSx2YWx1ZSl7bmFtZSA9IChuYW1lICsgXCJcIikudG9Mb3dlckNhc2UoKTtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilyZXR1cm4gaGVhZGVyc1tuYW1lXTtpZih2YWx1ZSA9PSBudWxsKWRlbGV0ZSBoZWFkZXJzW25hbWVdO2Vsc2UgaGVhZGVyc1tuYW1lXSA9IHZhbHVlICsgXCJcIjtyZXR1cm4geGhyO307eGhyLm1pbWVUeXBlID0gZnVuY3Rpb24odmFsdWUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBtaW1lVHlwZTttaW1lVHlwZSA9IHZhbHVlID09IG51bGw/bnVsbDp2YWx1ZSArIFwiXCI7cmV0dXJuIHhocjt9O3hoci5yZXNwb25zZVR5cGUgPSBmdW5jdGlvbih2YWx1ZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJlc3BvbnNlVHlwZTtyZXNwb25zZVR5cGUgPSB2YWx1ZTtyZXR1cm4geGhyO307eGhyLnJlc3BvbnNlID0gZnVuY3Rpb24odmFsdWUpe3Jlc3BvbnNlID0gdmFsdWU7cmV0dXJuIHhocjt9O1tcImdldFwiLFwicG9zdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCl7eGhyW21ldGhvZF0gPSBmdW5jdGlvbigpe3JldHVybiB4aHIuc2VuZC5hcHBseSh4aHIsW21ldGhvZF0uY29uY2F0KGQzX2FycmF5KGFyZ3VtZW50cykpKTt9O30pO3hoci5zZW5kID0gZnVuY3Rpb24obWV0aG9kLGRhdGEsY2FsbGJhY2spe2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIiljYWxsYmFjayA9IGRhdGEsZGF0YSA9IG51bGw7cmVxdWVzdC5vcGVuKG1ldGhvZCx1cmwsdHJ1ZSk7aWYobWltZVR5cGUgIT0gbnVsbCAmJiAhKFwiYWNjZXB0XCIgaW4gaGVhZGVycykpaGVhZGVyc1tcImFjY2VwdFwiXSA9IG1pbWVUeXBlICsgXCIsKi8qXCI7aWYocmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgbmFtZSBpbiBoZWFkZXJzKSByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIobmFtZSxoZWFkZXJzW25hbWVdKTtpZihtaW1lVHlwZSAhPSBudWxsICYmIHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSlyZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUobWltZVR5cGUpO2lmKHJlc3BvbnNlVHlwZSAhPSBudWxsKXJlcXVlc3QucmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlO2lmKGNhbGxiYWNrICE9IG51bGwpeGhyLm9uKFwiZXJyb3JcIixjYWxsYmFjaykub24oXCJsb2FkXCIsZnVuY3Rpb24ocmVxdWVzdCl7Y2FsbGJhY2sobnVsbCxyZXF1ZXN0KTt9KTtkaXNwYXRjaC5iZWZvcmVzZW5kLmNhbGwoeGhyLHJlcXVlc3QpO3JlcXVlc3Quc2VuZChkYXRhID09IG51bGw/bnVsbDpkYXRhKTtyZXR1cm4geGhyO307eGhyLmFib3J0ID0gZnVuY3Rpb24oKXtyZXF1ZXN0LmFib3J0KCk7cmV0dXJuIHhocjt9O2QzLnJlYmluZCh4aHIsZGlzcGF0Y2gsXCJvblwiKTtyZXR1cm4gY2FsbGJhY2sgPT0gbnVsbD94aHI6eGhyLmdldChkM194aHJfZml4Q2FsbGJhY2soY2FsbGJhY2spKTt9ZnVuY3Rpb24gZDNfeGhyX2ZpeENhbGxiYWNrKGNhbGxiYWNrKXtyZXR1cm4gY2FsbGJhY2subGVuZ3RoID09PSAxP2Z1bmN0aW9uKGVycm9yLHJlcXVlc3Qpe2NhbGxiYWNrKGVycm9yID09IG51bGw/cmVxdWVzdDpudWxsKTt9OmNhbGxiYWNrO31mdW5jdGlvbiBkM194aHJIYXNSZXNwb25zZShyZXF1ZXN0KXt2YXIgdHlwZT1yZXF1ZXN0LnJlc3BvbnNlVHlwZTtyZXR1cm4gdHlwZSAmJiB0eXBlICE9PSBcInRleHRcIj9yZXF1ZXN0LnJlc3BvbnNlOnJlcXVlc3QucmVzcG9uc2VUZXh0O31kMy5kc3YgPSBmdW5jdGlvbihkZWxpbWl0ZXIsbWltZVR5cGUpe3ZhciByZUZvcm1hdD1uZXcgUmVnRXhwKCdbXCInICsgZGVsaW1pdGVyICsgXCJcXG5dXCIpLGRlbGltaXRlckNvZGU9ZGVsaW1pdGVyLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gZHN2KHVybCxyb3csY2FsbGJhY2spe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKWNhbGxiYWNrID0gcm93LHJvdyA9IG51bGw7dmFyIHhocj1kM194aHIodXJsLG1pbWVUeXBlLHJvdyA9PSBudWxsP3Jlc3BvbnNlOnR5cGVkUmVzcG9uc2Uocm93KSxjYWxsYmFjayk7eGhyLnJvdyA9IGZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3hoci5yZXNwb25zZSgocm93ID0gXykgPT0gbnVsbD9yZXNwb25zZTp0eXBlZFJlc3BvbnNlKF8pKTpyb3c7fTtyZXR1cm4geGhyO31mdW5jdGlvbiByZXNwb25zZShyZXF1ZXN0KXtyZXR1cm4gZHN2LnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTt9ZnVuY3Rpb24gdHlwZWRSZXNwb25zZShmKXtyZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCl7cmV0dXJuIGRzdi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCxmKTt9O31kc3YucGFyc2UgPSBmdW5jdGlvbih0ZXh0LGYpe3ZhciBvO3JldHVybiBkc3YucGFyc2VSb3dzKHRleHQsZnVuY3Rpb24ocm93LGkpe2lmKG8pcmV0dXJuIG8ocm93LGkgLSAxKTt2YXIgYT1uZXcgRnVuY3Rpb24oXCJkXCIsXCJyZXR1cm4ge1wiICsgcm93Lm1hcChmdW5jdGlvbihuYW1lLGkpe3JldHVybiBKU09OLnN0cmluZ2lmeShuYW1lKSArIFwiOiBkW1wiICsgaSArIFwiXVwiO30pLmpvaW4oXCIsXCIpICsgXCJ9XCIpO28gPSBmP2Z1bmN0aW9uKHJvdyxpKXtyZXR1cm4gZihhKHJvdyksaSk7fTphO30pO307ZHN2LnBhcnNlUm93cyA9IGZ1bmN0aW9uKHRleHQsZil7dmFyIEVPTD17fSxFT0Y9e30scm93cz1bXSxOPXRleHQubGVuZ3RoLEk9MCxuPTAsdCxlb2w7ZnVuY3Rpb24gdG9rZW4oKXtpZihJID49IE4pcmV0dXJuIEVPRjtpZihlb2wpcmV0dXJuIGVvbCA9IGZhbHNlLEVPTDt2YXIgaj1JO2lmKHRleHQuY2hhckNvZGVBdChqKSA9PT0gMzQpe3ZhciBpPWo7d2hpbGUoaSsrIDwgTikge2lmKHRleHQuY2hhckNvZGVBdChpKSA9PT0gMzQpe2lmKHRleHQuY2hhckNvZGVBdChpICsgMSkgIT09IDM0KWJyZWFrOysraTt9fUkgPSBpICsgMjt2YXIgYz10ZXh0LmNoYXJDb2RlQXQoaSArIDEpO2lmKGMgPT09IDEzKXtlb2wgPSB0cnVlO2lmKHRleHQuY2hhckNvZGVBdChpICsgMikgPT09IDEwKSsrSTt9ZWxzZSBpZihjID09PSAxMCl7ZW9sID0gdHJ1ZTt9cmV0dXJuIHRleHQuc2xpY2UoaiArIDEsaSkucmVwbGFjZSgvXCJcIi9nLCdcIicpO313aGlsZShJIDwgTikge3ZhciBjPXRleHQuY2hhckNvZGVBdChJKyspLGs9MTtpZihjID09PSAxMCllb2wgPSB0cnVlO2Vsc2UgaWYoYyA9PT0gMTMpe2VvbCA9IHRydWU7aWYodGV4dC5jaGFyQ29kZUF0KEkpID09PSAxMCkrK0ksKytrO31lbHNlIGlmKGMgIT09IGRlbGltaXRlckNvZGUpY29udGludWU7cmV0dXJuIHRleHQuc2xpY2UoaixJIC0gayk7fXJldHVybiB0ZXh0LnNsaWNlKGopO313aGlsZSgodCA9IHRva2VuKCkpICE9PSBFT0YpIHt2YXIgYT1bXTt3aGlsZSh0ICE9PSBFT0wgJiYgdCAhPT0gRU9GKSB7YS5wdXNoKHQpO3QgPSB0b2tlbigpO31pZihmICYmIChhID0gZihhLG4rKykpID09IG51bGwpY29udGludWU7cm93cy5wdXNoKGEpO31yZXR1cm4gcm93czt9O2Rzdi5mb3JtYXQgPSBmdW5jdGlvbihyb3dzKXtpZihBcnJheS5pc0FycmF5KHJvd3NbMF0pKXJldHVybiBkc3YuZm9ybWF0Um93cyhyb3dzKTt2YXIgZmllbGRTZXQ9bmV3IGQzX1NldCgpLGZpZWxkcz1bXTtyb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KXtmb3IodmFyIGZpZWxkIGluIHJvdykge2lmKCFmaWVsZFNldC5oYXMoZmllbGQpKXtmaWVsZHMucHVzaChmaWVsZFNldC5hZGQoZmllbGQpKTt9fX0pO3JldHVybiBbZmllbGRzLm1hcChmb3JtYXRWYWx1ZSkuam9pbihkZWxpbWl0ZXIpXS5jb25jYXQocm93cy5tYXAoZnVuY3Rpb24ocm93KXtyZXR1cm4gZmllbGRzLm1hcChmdW5jdGlvbihmaWVsZCl7cmV0dXJuIGZvcm1hdFZhbHVlKHJvd1tmaWVsZF0pO30pLmpvaW4oZGVsaW1pdGVyKTt9KSkuam9pbihcIlxcblwiKTt9O2Rzdi5mb3JtYXRSb3dzID0gZnVuY3Rpb24ocm93cyl7cmV0dXJuIHJvd3MubWFwKGZvcm1hdFJvdykuam9pbihcIlxcblwiKTt9O2Z1bmN0aW9uIGZvcm1hdFJvdyhyb3cpe3JldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcik7fWZ1bmN0aW9uIGZvcm1hdFZhbHVlKHRleHQpe3JldHVybiByZUZvcm1hdC50ZXN0KHRleHQpPydcIicgKyB0ZXh0LnJlcGxhY2UoL1xcXCIvZywnXCJcIicpICsgJ1wiJzp0ZXh0O31yZXR1cm4gZHN2O307ZDMuY3N2ID0gZDMuZHN2KFwiLFwiLFwidGV4dC9jc3ZcIik7ZDMudHN2ID0gZDMuZHN2KFwiXHRcIixcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIik7dmFyIGQzX3RpbWVyX3F1ZXVlSGVhZCxkM190aW1lcl9xdWV1ZVRhaWwsZDNfdGltZXJfaW50ZXJ2YWwsZDNfdGltZXJfdGltZW91dCxkM190aW1lcl9mcmFtZT10aGlzW2QzX3ZlbmRvclN5bWJvbCh0aGlzLFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIpXSB8fCBmdW5jdGlvbihjYWxsYmFjayl7c2V0VGltZW91dChjYWxsYmFjaywxNyk7fTtkMy50aW1lciA9IGZ1bmN0aW9uKCl7ZDNfdGltZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO307ZnVuY3Rpb24gZDNfdGltZXIoY2FsbGJhY2ssZGVsYXksdGhlbil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuIDwgMilkZWxheSA9IDA7aWYobiA8IDMpdGhlbiA9IERhdGUubm93KCk7dmFyIHRpbWU9dGhlbiArIGRlbGF5LHRpbWVyPXtjOmNhbGxiYWNrLHQ6dGltZSxuOm51bGx9O2lmKGQzX3RpbWVyX3F1ZXVlVGFpbClkM190aW1lcl9xdWV1ZVRhaWwubiA9IHRpbWVyO2Vsc2UgZDNfdGltZXJfcXVldWVIZWFkID0gdGltZXI7ZDNfdGltZXJfcXVldWVUYWlsID0gdGltZXI7aWYoIWQzX3RpbWVyX2ludGVydmFsKXtkM190aW1lcl90aW1lb3V0ID0gY2xlYXJUaW1lb3V0KGQzX3RpbWVyX3RpbWVvdXQpO2QzX3RpbWVyX2ludGVydmFsID0gMTtkM190aW1lcl9mcmFtZShkM190aW1lcl9zdGVwKTt9cmV0dXJuIHRpbWVyO31mdW5jdGlvbiBkM190aW1lcl9zdGVwKCl7dmFyIG5vdz1kM190aW1lcl9tYXJrKCksZGVsYXk9ZDNfdGltZXJfc3dlZXAoKSAtIG5vdztpZihkZWxheSA+IDI0KXtpZihpc0Zpbml0ZShkZWxheSkpe2NsZWFyVGltZW91dChkM190aW1lcl90aW1lb3V0KTtkM190aW1lcl90aW1lb3V0ID0gc2V0VGltZW91dChkM190aW1lcl9zdGVwLGRlbGF5KTt9ZDNfdGltZXJfaW50ZXJ2YWwgPSAwO31lbHNlIHtkM190aW1lcl9pbnRlcnZhbCA9IDE7ZDNfdGltZXJfZnJhbWUoZDNfdGltZXJfc3RlcCk7fX1kMy50aW1lci5mbHVzaCA9IGZ1bmN0aW9uKCl7ZDNfdGltZXJfbWFyaygpO2QzX3RpbWVyX3N3ZWVwKCk7fTtmdW5jdGlvbiBkM190aW1lcl9tYXJrKCl7dmFyIG5vdz1EYXRlLm5vdygpLHRpbWVyPWQzX3RpbWVyX3F1ZXVlSGVhZDt3aGlsZSh0aW1lcikge2lmKG5vdyA+PSB0aW1lci50ICYmIHRpbWVyLmMobm93IC0gdGltZXIudCkpdGltZXIuYyA9IG51bGw7dGltZXIgPSB0aW1lci5uO31yZXR1cm4gbm93O31mdW5jdGlvbiBkM190aW1lcl9zd2VlcCgpe3ZhciB0MCx0MT1kM190aW1lcl9xdWV1ZUhlYWQsdGltZT1JbmZpbml0eTt3aGlsZSh0MSkge2lmKHQxLmMpe2lmKHQxLnQgPCB0aW1lKXRpbWUgPSB0MS50O3QxID0gKHQwID0gdDEpLm47fWVsc2Uge3QxID0gdDA/dDAubiA9IHQxLm46ZDNfdGltZXJfcXVldWVIZWFkID0gdDEubjt9fWQzX3RpbWVyX3F1ZXVlVGFpbCA9IHQwO3JldHVybiB0aW1lO31mdW5jdGlvbiBkM19mb3JtYXRfcHJlY2lzaW9uKHgscCl7cmV0dXJuIHAgLSAoeD9NYXRoLmNlaWwoTWF0aC5sb2coeCkgLyBNYXRoLkxOMTApOjEpO31kMy5yb3VuZCA9IGZ1bmN0aW9uKHgsbil7cmV0dXJuIG4/TWF0aC5yb3VuZCh4ICogKG4gPSBNYXRoLnBvdygxMCxuKSkpIC8gbjpNYXRoLnJvdW5kKHgpO307dmFyIGQzX2Zvcm1hdFByZWZpeGVzPVtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl0ubWFwKGQzX2Zvcm1hdFByZWZpeCk7ZDMuZm9ybWF0UHJlZml4ID0gZnVuY3Rpb24odmFsdWUscHJlY2lzaW9uKXt2YXIgaT0wO2lmKHZhbHVlID0gK3ZhbHVlKXtpZih2YWx1ZSA8IDApdmFsdWUgKj0gLTE7aWYocHJlY2lzaW9uKXZhbHVlID0gZDMucm91bmQodmFsdWUsZDNfZm9ybWF0X3ByZWNpc2lvbih2YWx1ZSxwcmVjaXNpb24pKTtpID0gMSArIE1hdGguZmxvb3IoMWUtMTIgKyBNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMTApO2kgPSBNYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsTWF0aC5mbG9vcigoaSAtIDEpIC8gMykgKiAzKSk7fXJldHVybiBkM19mb3JtYXRQcmVmaXhlc1s4ICsgaSAvIDNdO307ZnVuY3Rpb24gZDNfZm9ybWF0UHJlZml4KGQsaSl7dmFyIGs9TWF0aC5wb3coMTAsYWJzKDggLSBpKSAqIDMpO3JldHVybiB7c2NhbGU6aSA+IDg/ZnVuY3Rpb24oZCl7cmV0dXJuIGQgLyBrO306ZnVuY3Rpb24oZCl7cmV0dXJuIGQgKiBrO30sc3ltYm9sOmR9O31mdW5jdGlvbiBkM19sb2NhbGVfbnVtYmVyRm9ybWF0KGxvY2FsZSl7dmFyIGxvY2FsZV9kZWNpbWFsPWxvY2FsZS5kZWNpbWFsLGxvY2FsZV90aG91c2FuZHM9bG9jYWxlLnRob3VzYW5kcyxsb2NhbGVfZ3JvdXBpbmc9bG9jYWxlLmdyb3VwaW5nLGxvY2FsZV9jdXJyZW5jeT1sb2NhbGUuY3VycmVuY3ksZm9ybWF0R3JvdXA9bG9jYWxlX2dyb3VwaW5nICYmIGxvY2FsZV90aG91c2FuZHM/ZnVuY3Rpb24odmFsdWUsd2lkdGgpe3ZhciBpPXZhbHVlLmxlbmd0aCx0PVtdLGo9MCxnPWxvY2FsZV9ncm91cGluZ1swXSxsZW5ndGg9MDt3aGlsZShpID4gMCAmJiBnID4gMCkge2lmKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpZyA9IE1hdGgubWF4KDEsd2lkdGggLSBsZW5ndGgpO3QucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLGkgKyBnKSk7aWYoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aClicmVhaztnID0gbG9jYWxlX2dyb3VwaW5nW2ogPSAoaiArIDEpICUgbG9jYWxlX2dyb3VwaW5nLmxlbmd0aF07fXJldHVybiB0LnJldmVyc2UoKS5qb2luKGxvY2FsZV90aG91c2FuZHMpO306ZDNfaWRlbnRpdHk7cmV0dXJuIGZ1bmN0aW9uKHNwZWNpZmllcil7dmFyIG1hdGNoPWQzX2Zvcm1hdF9yZS5leGVjKHNwZWNpZmllciksZmlsbD1tYXRjaFsxXSB8fCBcIiBcIixhbGlnbj1tYXRjaFsyXSB8fCBcIj5cIixzaWduPW1hdGNoWzNdIHx8IFwiLVwiLHN5bWJvbD1tYXRjaFs0XSB8fCBcIlwiLHpmaWxsPW1hdGNoWzVdLHdpZHRoPSttYXRjaFs2XSxjb21tYT1tYXRjaFs3XSxwcmVjaXNpb249bWF0Y2hbOF0sdHlwZT1tYXRjaFs5XSxzY2FsZT0xLHByZWZpeD1cIlwiLHN1ZmZpeD1cIlwiLGludGVnZXI9ZmFsc2UsZXhwb25lbnQ9dHJ1ZTtpZihwcmVjaXNpb24pcHJlY2lzaW9uID0gK3ByZWNpc2lvbi5zdWJzdHJpbmcoMSk7aWYoemZpbGwgfHwgZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKXt6ZmlsbCA9IGZpbGwgPSBcIjBcIjthbGlnbiA9IFwiPVwiO31zd2l0Y2godHlwZSl7Y2FzZSBcIm5cIjpjb21tYSA9IHRydWU7dHlwZSA9IFwiZ1wiO2JyZWFrO2Nhc2UgXCIlXCI6c2NhbGUgPSAxMDA7c3VmZml4ID0gXCIlXCI7dHlwZSA9IFwiZlwiO2JyZWFrO2Nhc2UgXCJwXCI6c2NhbGUgPSAxMDA7c3VmZml4ID0gXCIlXCI7dHlwZSA9IFwiclwiO2JyZWFrO2Nhc2UgXCJiXCI6Y2FzZSBcIm9cIjpjYXNlIFwieFwiOmNhc2UgXCJYXCI6aWYoc3ltYm9sID09PSBcIiNcIilwcmVmaXggPSBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKTtjYXNlIFwiY1wiOmV4cG9uZW50ID0gZmFsc2U7Y2FzZSBcImRcIjppbnRlZ2VyID0gdHJ1ZTtwcmVjaXNpb24gPSAwO2JyZWFrO2Nhc2UgXCJzXCI6c2NhbGUgPSAtMTt0eXBlID0gXCJyXCI7YnJlYWs7fWlmKHN5bWJvbCA9PT0gXCIkXCIpcHJlZml4ID0gbG9jYWxlX2N1cnJlbmN5WzBdLHN1ZmZpeCA9IGxvY2FsZV9jdXJyZW5jeVsxXTtpZih0eXBlID09IFwiclwiICYmICFwcmVjaXNpb24pdHlwZSA9IFwiZ1wiO2lmKHByZWNpc2lvbiAhPSBudWxsKXtpZih0eXBlID09IFwiZ1wiKXByZWNpc2lvbiA9IE1hdGgubWF4KDEsTWF0aC5taW4oMjEscHJlY2lzaW9uKSk7ZWxzZSBpZih0eXBlID09IFwiZVwiIHx8IHR5cGUgPT0gXCJmXCIpcHJlY2lzaW9uID0gTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwcmVjaXNpb24pKTt9dHlwZSA9IGQzX2Zvcm1hdF90eXBlcy5nZXQodHlwZSkgfHwgZDNfZm9ybWF0X3R5cGVEZWZhdWx0O3ZhciB6Y29tbWE9emZpbGwgJiYgY29tbWE7cmV0dXJuIGZ1bmN0aW9uKHZhbHVlKXt2YXIgZnVsbFN1ZmZpeD1zdWZmaXg7aWYoaW50ZWdlciAmJiB2YWx1ZSAlIDEpcmV0dXJuIFwiXCI7dmFyIG5lZ2F0aXZlPXZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwPyh2YWx1ZSA9IC12YWx1ZSxcIi1cIik6c2lnbiA9PT0gXCItXCI/XCJcIjpzaWduO2lmKHNjYWxlIDwgMCl7dmFyIHVuaXQ9ZDMuZm9ybWF0UHJlZml4KHZhbHVlLHByZWNpc2lvbik7dmFsdWUgPSB1bml0LnNjYWxlKHZhbHVlKTtmdWxsU3VmZml4ID0gdW5pdC5zeW1ib2wgKyBzdWZmaXg7fWVsc2Uge3ZhbHVlICo9IHNjYWxlO312YWx1ZSA9IHR5cGUodmFsdWUscHJlY2lzaW9uKTt2YXIgaT12YWx1ZS5sYXN0SW5kZXhPZihcIi5cIiksYmVmb3JlLGFmdGVyO2lmKGkgPCAwKXt2YXIgaj1leHBvbmVudD92YWx1ZS5sYXN0SW5kZXhPZihcImVcIik6LTE7aWYoaiA8IDApYmVmb3JlID0gdmFsdWUsYWZ0ZXIgPSBcIlwiO2Vsc2UgYmVmb3JlID0gdmFsdWUuc3Vic3RyaW5nKDAsaiksYWZ0ZXIgPSB2YWx1ZS5zdWJzdHJpbmcoaik7fWVsc2Uge2JlZm9yZSA9IHZhbHVlLnN1YnN0cmluZygwLGkpO2FmdGVyID0gbG9jYWxlX2RlY2ltYWwgKyB2YWx1ZS5zdWJzdHJpbmcoaSArIDEpO31pZighemZpbGwgJiYgY29tbWEpYmVmb3JlID0gZm9ybWF0R3JvdXAoYmVmb3JlLEluZmluaXR5KTt2YXIgbGVuZ3RoPXByZWZpeC5sZW5ndGggKyBiZWZvcmUubGVuZ3RoICsgYWZ0ZXIubGVuZ3RoICsgKHpjb21tYT8wOm5lZ2F0aXZlLmxlbmd0aCkscGFkZGluZz1sZW5ndGggPCB3aWR0aD9uZXcgQXJyYXkobGVuZ3RoID0gd2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpOlwiXCI7aWYoemNvbW1hKWJlZm9yZSA9IGZvcm1hdEdyb3VwKHBhZGRpbmcgKyBiZWZvcmUscGFkZGluZy5sZW5ndGg/d2lkdGggLSBhZnRlci5sZW5ndGg6SW5maW5pdHkpO25lZ2F0aXZlICs9IHByZWZpeDt2YWx1ZSA9IGJlZm9yZSArIGFmdGVyO3JldHVybiAoYWxpZ24gPT09IFwiPFwiP25lZ2F0aXZlICsgdmFsdWUgKyBwYWRkaW5nOmFsaWduID09PSBcIj5cIj9wYWRkaW5nICsgbmVnYXRpdmUgKyB2YWx1ZTphbGlnbiA9PT0gXCJeXCI/cGFkZGluZy5zdWJzdHJpbmcoMCxsZW5ndGggPj49IDEpICsgbmVnYXRpdmUgKyB2YWx1ZSArIHBhZGRpbmcuc3Vic3RyaW5nKGxlbmd0aCk6bmVnYXRpdmUgKyAoemNvbW1hP3ZhbHVlOnBhZGRpbmcgKyB2YWx1ZSkpICsgZnVsbFN1ZmZpeDt9O307fXZhciBkM19mb3JtYXRfcmU9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXFwtIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuLT9cXGQrKT8oW2EteiVdKT8vaTt2YXIgZDNfZm9ybWF0X3R5cGVzPWQzLm1hcCh7YjpmdW5jdGlvbiBiKHgpe3JldHVybiB4LnRvU3RyaW5nKDIpO30sYzpmdW5jdGlvbiBjKHgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHgpO30sbzpmdW5jdGlvbiBvKHgpe3JldHVybiB4LnRvU3RyaW5nKDgpO30seDpmdW5jdGlvbiB4KF94KXtyZXR1cm4gX3gudG9TdHJpbmcoMTYpO30sWDpmdW5jdGlvbiBYKHgpe3JldHVybiB4LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO30sZzpmdW5jdGlvbiBnKHgscCl7cmV0dXJuIHgudG9QcmVjaXNpb24ocCk7fSxlOmZ1bmN0aW9uIGUoeCxwKXtyZXR1cm4geC50b0V4cG9uZW50aWFsKHApO30sZjpmdW5jdGlvbiBmKHgscCl7cmV0dXJuIHgudG9GaXhlZChwKTt9LHI6ZnVuY3Rpb24gcih4LHApe3JldHVybiAoeCA9IGQzLnJvdW5kKHgsZDNfZm9ybWF0X3ByZWNpc2lvbih4LHApKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLGQzX2Zvcm1hdF9wcmVjaXNpb24oeCAqICgxICsgMWUtMTUpLHApKSkpO319KTtmdW5jdGlvbiBkM19mb3JtYXRfdHlwZURlZmF1bHQoeCl7cmV0dXJuIHggKyBcIlwiO312YXIgZDNfdGltZT1kMy50aW1lID0ge30sZDNfZGF0ZT1EYXRlO2Z1bmN0aW9uIGQzX2RhdGVfdXRjKCl7dGhpcy5fID0gbmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aCA+IDE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSk7fWQzX2RhdGVfdXRjLnByb3RvdHlwZSA9IHtnZXREYXRlOmZ1bmN0aW9uIGdldERhdGUoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKTt9LGdldERheTpmdW5jdGlvbiBnZXREYXkoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RheSgpO30sZ2V0RnVsbFllYXI6ZnVuY3Rpb24gZ2V0RnVsbFllYXIoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCk7fSxnZXRIb3VyczpmdW5jdGlvbiBnZXRIb3Vycygpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKTt9LGdldE1pbGxpc2Vjb25kczpmdW5jdGlvbiBnZXRNaWxsaXNlY29uZHMoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpO30sZ2V0TWludXRlczpmdW5jdGlvbiBnZXRNaW51dGVzKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCk7fSxnZXRNb250aDpmdW5jdGlvbiBnZXRNb250aCgpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKTt9LGdldFNlY29uZHM6ZnVuY3Rpb24gZ2V0U2Vjb25kcygpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpO30sZ2V0VGltZTpmdW5jdGlvbiBnZXRUaW1lKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCk7fSxnZXRUaW1lem9uZU9mZnNldDpmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldCgpe3JldHVybiAwO30sdmFsdWVPZjpmdW5jdGlvbiB2YWx1ZU9mKCl7cmV0dXJuIHRoaXMuXy52YWx1ZU9mKCk7fSxzZXREYXRlOmZ1bmN0aW9uIHNldERhdGUoKXtkM190aW1lX3Byb3RvdHlwZS5zZXRVVENEYXRlLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO30sc2V0RGF5OmZ1bmN0aW9uIHNldERheSgpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTt9LHNldEZ1bGxZZWFyOmZ1bmN0aW9uIHNldEZ1bGxZZWFyKCl7ZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDRnVsbFllYXIuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7fSxzZXRIb3VyczpmdW5jdGlvbiBzZXRIb3Vycygpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO30sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uIHNldE1pbGxpc2Vjb25kcygpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ01pbGxpc2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTt9LHNldE1pbnV0ZXM6ZnVuY3Rpb24gc2V0TWludXRlcygpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ01pbnV0ZXMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7fSxzZXRNb250aDpmdW5jdGlvbiBzZXRNb250aCgpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO30sc2V0U2Vjb25kczpmdW5jdGlvbiBzZXRTZWNvbmRzKCl7ZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTt9LHNldFRpbWU6ZnVuY3Rpb24gc2V0VGltZSgpe2QzX3RpbWVfcHJvdG90eXBlLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7fX07dmFyIGQzX3RpbWVfcHJvdG90eXBlPURhdGUucHJvdG90eXBlO2Z1bmN0aW9uIGQzX3RpbWVfaW50ZXJ2YWwobG9jYWwsc3RlcCxudW1iZXIpe2Z1bmN0aW9uIHJvdW5kKGRhdGUpe3ZhciBkMD1sb2NhbChkYXRlKSxkMT1vZmZzZXQoZDAsMSk7cmV0dXJuIGRhdGUgLSBkMCA8IGQxIC0gZGF0ZT9kMDpkMTt9ZnVuY3Rpb24gY2VpbChkYXRlKXtzdGVwKGRhdGUgPSBsb2NhbChuZXcgZDNfZGF0ZShkYXRlIC0gMSkpLDEpO3JldHVybiBkYXRlO31mdW5jdGlvbiBvZmZzZXQoZGF0ZSxrKXtzdGVwKGRhdGUgPSBuZXcgZDNfZGF0ZSgrZGF0ZSksayk7cmV0dXJuIGRhdGU7fWZ1bmN0aW9uIHJhbmdlKHQwLHQxLGR0KXt2YXIgdGltZT1jZWlsKHQwKSx0aW1lcz1bXTtpZihkdCA+IDEpe3doaWxlKHRpbWUgPCB0MSkge2lmKCEobnVtYmVyKHRpbWUpICUgZHQpKXRpbWVzLnB1c2gobmV3IERhdGUoK3RpbWUpKTtzdGVwKHRpbWUsMSk7fX1lbHNlIHt3aGlsZSh0aW1lIDwgdDEpIHRpbWVzLnB1c2gobmV3IERhdGUoK3RpbWUpKSxzdGVwKHRpbWUsMSk7fXJldHVybiB0aW1lczt9ZnVuY3Rpb24gcmFuZ2VfdXRjKHQwLHQxLGR0KXt0cnl7ZDNfZGF0ZSA9IGQzX2RhdGVfdXRjO3ZhciB1dGM9bmV3IGQzX2RhdGVfdXRjKCk7dXRjLl8gPSB0MDtyZXR1cm4gcmFuZ2UodXRjLHQxLGR0KTt9ZmluYWxseSB7ZDNfZGF0ZSA9IERhdGU7fX1sb2NhbC5mbG9vciA9IGxvY2FsO2xvY2FsLnJvdW5kID0gcm91bmQ7bG9jYWwuY2VpbCA9IGNlaWw7bG9jYWwub2Zmc2V0ID0gb2Zmc2V0O2xvY2FsLnJhbmdlID0gcmFuZ2U7dmFyIHV0Yz1sb2NhbC51dGMgPSBkM190aW1lX2ludGVydmFsX3V0Yyhsb2NhbCk7dXRjLmZsb29yID0gdXRjO3V0Yy5yb3VuZCA9IGQzX3RpbWVfaW50ZXJ2YWxfdXRjKHJvdW5kKTt1dGMuY2VpbCA9IGQzX3RpbWVfaW50ZXJ2YWxfdXRjKGNlaWwpO3V0Yy5vZmZzZXQgPSBkM190aW1lX2ludGVydmFsX3V0YyhvZmZzZXQpO3V0Yy5yYW5nZSA9IHJhbmdlX3V0YztyZXR1cm4gbG9jYWw7fWZ1bmN0aW9uIGQzX3RpbWVfaW50ZXJ2YWxfdXRjKG1ldGhvZCl7cmV0dXJuIGZ1bmN0aW9uKGRhdGUsayl7dHJ5e2QzX2RhdGUgPSBkM19kYXRlX3V0Yzt2YXIgdXRjPW5ldyBkM19kYXRlX3V0YygpO3V0Yy5fID0gZGF0ZTtyZXR1cm4gbWV0aG9kKHV0YyxrKS5fO31maW5hbGx5IHtkM19kYXRlID0gRGF0ZTt9fTt9ZDNfdGltZS55ZWFyID0gZDNfdGltZV9pbnRlcnZhbChmdW5jdGlvbihkYXRlKXtkYXRlID0gZDNfdGltZS5kYXkoZGF0ZSk7ZGF0ZS5zZXRNb250aCgwLDEpO3JldHVybiBkYXRlO30sZnVuY3Rpb24oZGF0ZSxvZmZzZXQpe2RhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgb2Zmc2V0KTt9LGZ1bmN0aW9uKGRhdGUpe3JldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7fSk7ZDNfdGltZS55ZWFycyA9IGQzX3RpbWUueWVhci5yYW5nZTtkM190aW1lLnllYXJzLnV0YyA9IGQzX3RpbWUueWVhci51dGMucmFuZ2U7ZDNfdGltZS5kYXkgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe3ZhciBkYXk9bmV3IGQzX2RhdGUoMmUzLDApO2RheS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksZGF0ZS5nZXRNb250aCgpLGRhdGUuZ2V0RGF0ZSgpKTtyZXR1cm4gZGF5O30sZnVuY3Rpb24oZGF0ZSxvZmZzZXQpe2RhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIG9mZnNldCk7fSxmdW5jdGlvbihkYXRlKXtyZXR1cm4gZGF0ZS5nZXREYXRlKCkgLSAxO30pO2QzX3RpbWUuZGF5cyA9IGQzX3RpbWUuZGF5LnJhbmdlO2QzX3RpbWUuZGF5cy51dGMgPSBkM190aW1lLmRheS51dGMucmFuZ2U7ZDNfdGltZS5kYXlPZlllYXIgPSBmdW5jdGlvbihkYXRlKXt2YXIgeWVhcj1kM190aW1lLnllYXIoZGF0ZSk7cmV0dXJuIE1hdGguZmxvb3IoKGRhdGUgLSB5ZWFyIC0gKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHllYXIuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2ZTQpIC8gODY0ZTUpO307W1wic3VuZGF5XCIsXCJtb25kYXlcIixcInR1ZXNkYXlcIixcIndlZG5lc2RheVwiLFwidGh1cnNkYXlcIixcImZyaWRheVwiLFwic2F0dXJkYXlcIl0uZm9yRWFjaChmdW5jdGlvbihkYXksaSl7aSA9IDcgLSBpO3ZhciBpbnRlcnZhbD1kM190aW1lW2RheV0gPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpeyhkYXRlID0gZDNfdGltZS5kYXkoZGF0ZSkpLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIGkpICUgNyk7cmV0dXJuIGRhdGU7fSxmdW5jdGlvbihkYXRlLG9mZnNldCl7ZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogNyk7fSxmdW5jdGlvbihkYXRlKXt2YXIgZGF5PWQzX3RpbWUueWVhcihkYXRlKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoZDNfdGltZS5kYXlPZlllYXIoZGF0ZSkgKyAoZGF5ICsgaSkgJSA3KSAvIDcpIC0gKGRheSAhPT0gaSk7fSk7ZDNfdGltZVtkYXkgKyBcInNcIl0gPSBpbnRlcnZhbC5yYW5nZTtkM190aW1lW2RheSArIFwic1wiXS51dGMgPSBpbnRlcnZhbC51dGMucmFuZ2U7ZDNfdGltZVtkYXkgKyBcIk9mWWVhclwiXSA9IGZ1bmN0aW9uKGRhdGUpe3ZhciBkYXk9ZDNfdGltZS55ZWFyKGRhdGUpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChkM190aW1lLmRheU9mWWVhcihkYXRlKSArIChkYXkgKyBpKSAlIDcpIC8gNyk7fTt9KTtkM190aW1lLndlZWsgPSBkM190aW1lLnN1bmRheTtkM190aW1lLndlZWtzID0gZDNfdGltZS5zdW5kYXkucmFuZ2U7ZDNfdGltZS53ZWVrcy51dGMgPSBkM190aW1lLnN1bmRheS51dGMucmFuZ2U7ZDNfdGltZS53ZWVrT2ZZZWFyID0gZDNfdGltZS5zdW5kYXlPZlllYXI7ZnVuY3Rpb24gZDNfbG9jYWxlX3RpbWVGb3JtYXQobG9jYWxlKXt2YXIgbG9jYWxlX2RhdGVUaW1lPWxvY2FsZS5kYXRlVGltZSxsb2NhbGVfZGF0ZT1sb2NhbGUuZGF0ZSxsb2NhbGVfdGltZT1sb2NhbGUudGltZSxsb2NhbGVfcGVyaW9kcz1sb2NhbGUucGVyaW9kcyxsb2NhbGVfZGF5cz1sb2NhbGUuZGF5cyxsb2NhbGVfc2hvcnREYXlzPWxvY2FsZS5zaG9ydERheXMsbG9jYWxlX21vbnRocz1sb2NhbGUubW9udGhzLGxvY2FsZV9zaG9ydE1vbnRocz1sb2NhbGUuc2hvcnRNb250aHM7ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXQodGVtcGxhdGUpe3ZhciBuPXRlbXBsYXRlLmxlbmd0aDtmdW5jdGlvbiBmb3JtYXQoZGF0ZSl7dmFyIHN0cmluZz1bXSxpPS0xLGo9MCxjLHAsZjt3aGlsZSgrK2kgPCBuKSB7aWYodGVtcGxhdGUuY2hhckNvZGVBdChpKSA9PT0gMzcpe3N0cmluZy5wdXNoKHRlbXBsYXRlLnNsaWNlKGosaSkpO2lmKChwID0gZDNfdGltZV9mb3JtYXRQYWRzW2MgPSB0ZW1wbGF0ZS5jaGFyQXQoKytpKV0pICE9IG51bGwpYyA9IHRlbXBsYXRlLmNoYXJBdCgrK2kpO2lmKGYgPSBkM190aW1lX2Zvcm1hdHNbY10pYyA9IGYoZGF0ZSxwID09IG51bGw/YyA9PT0gXCJlXCI/XCIgXCI6XCIwXCI6cCk7c3RyaW5nLnB1c2goYyk7aiA9IGkgKyAxO319c3RyaW5nLnB1c2godGVtcGxhdGUuc2xpY2UoaixpKSk7cmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO31mb3JtYXQucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcpe3ZhciBkPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfSxpPWQzX3RpbWVfcGFyc2UoZCx0ZW1wbGF0ZSxzdHJpbmcsMCk7aWYoaSAhPSBzdHJpbmcubGVuZ3RoKXJldHVybiBudWxsO2lmKFwicFwiIGluIGQpZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjt2YXIgbG9jYWxaPWQuWiAhPSBudWxsICYmIGQzX2RhdGUgIT09IGQzX2RhdGVfdXRjLGRhdGU9bmV3IChsb2NhbFo/ZDNfZGF0ZV91dGM6ZDNfZGF0ZSkoKTtpZihcImpcIiBpbiBkKWRhdGUuc2V0RnVsbFllYXIoZC55LDAsZC5qKTtlbHNlIGlmKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCl7aWYoIShcIndcIiBpbiBkKSlkLncgPSBcIldcIiBpbiBkPzE6MDtkYXRlLnNldEZ1bGxZZWFyKGQueSwwLDEpO2RhdGUuc2V0RnVsbFllYXIoZC55LDAsXCJXXCIgaW4gZD8oZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXRlLmdldERheSgpICsgNSkgJSA3OmQudyArIGQuVSAqIDcgLSAoZGF0ZS5nZXREYXkoKSArIDYpICUgNyk7fWVsc2UgZGF0ZS5zZXRGdWxsWWVhcihkLnksZC5tLGQuZCk7ZGF0ZS5zZXRIb3VycyhkLkggKyAoZC5aIC8gMTAwIHwgMCksZC5NICsgZC5aICUgMTAwLGQuUyxkLkwpO3JldHVybiBsb2NhbFo/ZGF0ZS5fOmRhdGU7fTtmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiB0ZW1wbGF0ZTt9O3JldHVybiBmb3JtYXQ7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2UoZGF0ZSx0ZW1wbGF0ZSxzdHJpbmcsail7dmFyIGMscCx0LGk9MCxuPXRlbXBsYXRlLmxlbmd0aCxtPXN0cmluZy5sZW5ndGg7d2hpbGUoaSA8IG4pIHtpZihqID49IG0pcmV0dXJuIC0xO2MgPSB0ZW1wbGF0ZS5jaGFyQ29kZUF0KGkrKyk7aWYoYyA9PT0gMzcpe3QgPSB0ZW1wbGF0ZS5jaGFyQXQoaSsrKTtwID0gZDNfdGltZV9wYXJzZXJzW3QgaW4gZDNfdGltZV9mb3JtYXRQYWRzP3RlbXBsYXRlLmNoYXJBdChpKyspOnRdO2lmKCFwIHx8IChqID0gcChkYXRlLHN0cmluZyxqKSkgPCAwKXJldHVybiAtMTt9ZWxzZSBpZihjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpe3JldHVybiAtMTt9fXJldHVybiBqO31kM190aW1lX2Zvcm1hdC51dGMgPSBmdW5jdGlvbih0ZW1wbGF0ZSl7dmFyIGxvY2FsPWQzX3RpbWVfZm9ybWF0KHRlbXBsYXRlKTtmdW5jdGlvbiBmb3JtYXQoZGF0ZSl7dHJ5e2QzX2RhdGUgPSBkM19kYXRlX3V0Yzt2YXIgdXRjPW5ldyBkM19kYXRlKCk7dXRjLl8gPSBkYXRlO3JldHVybiBsb2NhbCh1dGMpO31maW5hbGx5IHtkM19kYXRlID0gRGF0ZTt9fWZvcm1hdC5wYXJzZSA9IGZ1bmN0aW9uKHN0cmluZyl7dHJ5e2QzX2RhdGUgPSBkM19kYXRlX3V0Yzt2YXIgZGF0ZT1sb2NhbC5wYXJzZShzdHJpbmcpO3JldHVybiBkYXRlICYmIGRhdGUuXzt9ZmluYWxseSB7ZDNfZGF0ZSA9IERhdGU7fX07Zm9ybWF0LnRvU3RyaW5nID0gbG9jYWwudG9TdHJpbmc7cmV0dXJuIGZvcm1hdDt9O2QzX3RpbWVfZm9ybWF0Lm11bHRpID0gZDNfdGltZV9mb3JtYXQudXRjLm11bHRpID0gZDNfdGltZV9mb3JtYXRNdWx0aTt2YXIgZDNfdGltZV9wZXJpb2RMb29rdXA9ZDMubWFwKCksZDNfdGltZV9kYXlSZT1kM190aW1lX2Zvcm1hdFJlKGxvY2FsZV9kYXlzKSxkM190aW1lX2RheUxvb2t1cD1kM190aW1lX2Zvcm1hdExvb2t1cChsb2NhbGVfZGF5cyksZDNfdGltZV9kYXlBYmJyZXZSZT1kM190aW1lX2Zvcm1hdFJlKGxvY2FsZV9zaG9ydERheXMpLGQzX3RpbWVfZGF5QWJicmV2TG9va3VwPWQzX3RpbWVfZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydERheXMpLGQzX3RpbWVfbW9udGhSZT1kM190aW1lX2Zvcm1hdFJlKGxvY2FsZV9tb250aHMpLGQzX3RpbWVfbW9udGhMb29rdXA9ZDNfdGltZV9mb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksZDNfdGltZV9tb250aEFiYnJldlJlPWQzX3RpbWVfZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxkM190aW1lX21vbnRoQWJicmV2TG9va3VwPWQzX3RpbWVfZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7bG9jYWxlX3BlcmlvZHMuZm9yRWFjaChmdW5jdGlvbihwLGkpe2QzX3RpbWVfcGVyaW9kTG9va3VwLnNldChwLnRvTG93ZXJDYXNlKCksaSk7fSk7dmFyIGQzX3RpbWVfZm9ybWF0cz17YTpmdW5jdGlvbiBhKGQpe3JldHVybiBsb2NhbGVfc2hvcnREYXlzW2QuZ2V0RGF5KCldO30sQTpmdW5jdGlvbiBBKGQpe3JldHVybiBsb2NhbGVfZGF5c1tkLmdldERheSgpXTt9LGI6ZnVuY3Rpb24gYihkKXtyZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07fSxCOmZ1bmN0aW9uIEIoZCl7cmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRNb250aCgpXTt9LGM6ZDNfdGltZV9mb3JtYXQobG9jYWxlX2RhdGVUaW1lKSxkOmZ1bmN0aW9uIGQoX2QscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKF9kLmdldERhdGUoKSxwLDIpO30sZTpmdW5jdGlvbiBlKGQscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0RGF0ZSgpLHAsMik7fSxIOmZ1bmN0aW9uIEgoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRIb3VycygpLHAsMik7fSxJOmZ1bmN0aW9uIEkoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIscCwyKTt9LGo6ZnVuY3Rpb24gaihkLHApe3JldHVybiBkM190aW1lX2Zvcm1hdFBhZCgxICsgZDNfdGltZS5kYXlPZlllYXIoZCkscCwzKTt9LEw6ZnVuY3Rpb24gTChkLHApe3JldHVybiBkM190aW1lX2Zvcm1hdFBhZChkLmdldE1pbGxpc2Vjb25kcygpLHAsMyk7fSxtOmZ1bmN0aW9uIG0oZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRNb250aCgpICsgMSxwLDIpO30sTTpmdW5jdGlvbiBNKGQscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0TWludXRlcygpLHAsMik7fSxwOmZ1bmN0aW9uIHAoZCl7cmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07fSxTOmZ1bmN0aW9uIFMoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRTZWNvbmRzKCkscCwyKTt9LFU6ZnVuY3Rpb24gVShkLHApe3JldHVybiBkM190aW1lX2Zvcm1hdFBhZChkM190aW1lLnN1bmRheU9mWWVhcihkKSxwLDIpO30sdzpmdW5jdGlvbiB3KGQpe3JldHVybiBkLmdldERheSgpO30sVzpmdW5jdGlvbiBXKGQscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQzX3RpbWUubW9uZGF5T2ZZZWFyKGQpLHAsMik7fSx4OmQzX3RpbWVfZm9ybWF0KGxvY2FsZV9kYXRlKSxYOmQzX3RpbWVfZm9ybWF0KGxvY2FsZV90aW1lKSx5OmZ1bmN0aW9uIHkoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLHAsMik7fSxZOmZ1bmN0aW9uIFkoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRGdWxsWWVhcigpICUgMWU0LHAsNCk7fSxaOmQzX3RpbWVfem9uZSxcIiVcIjpmdW5jdGlvbiBfKCl7cmV0dXJuIFwiJVwiO319O3ZhciBkM190aW1lX3BhcnNlcnM9e2E6ZDNfdGltZV9wYXJzZVdlZWtkYXlBYmJyZXYsQTpkM190aW1lX3BhcnNlV2Vla2RheSxiOmQzX3RpbWVfcGFyc2VNb250aEFiYnJldixCOmQzX3RpbWVfcGFyc2VNb250aCxjOmQzX3RpbWVfcGFyc2VMb2NhbGVGdWxsLGQ6ZDNfdGltZV9wYXJzZURheSxlOmQzX3RpbWVfcGFyc2VEYXksSDpkM190aW1lX3BhcnNlSG91cjI0LEk6ZDNfdGltZV9wYXJzZUhvdXIyNCxqOmQzX3RpbWVfcGFyc2VEYXlPZlllYXIsTDpkM190aW1lX3BhcnNlTWlsbGlzZWNvbmRzLG06ZDNfdGltZV9wYXJzZU1vbnRoTnVtYmVyLE06ZDNfdGltZV9wYXJzZU1pbnV0ZXMscDpkM190aW1lX3BhcnNlQW1QbSxTOmQzX3RpbWVfcGFyc2VTZWNvbmRzLFU6ZDNfdGltZV9wYXJzZVdlZWtOdW1iZXJTdW5kYXksdzpkM190aW1lX3BhcnNlV2Vla2RheU51bWJlcixXOmQzX3RpbWVfcGFyc2VXZWVrTnVtYmVyTW9uZGF5LHg6ZDNfdGltZV9wYXJzZUxvY2FsZURhdGUsWDpkM190aW1lX3BhcnNlTG9jYWxlVGltZSx5OmQzX3RpbWVfcGFyc2VZZWFyLFk6ZDNfdGltZV9wYXJzZUZ1bGxZZWFyLFo6ZDNfdGltZV9wYXJzZVpvbmUsXCIlXCI6ZDNfdGltZV9wYXJzZUxpdGVyYWxQZXJjZW50fTtmdW5jdGlvbiBkM190aW1lX3BhcnNlV2Vla2RheUFiYnJldihkYXRlLHN0cmluZyxpKXtkM190aW1lX2RheUFiYnJldlJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9kYXlBYmJyZXZSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUudyA9IGQzX3RpbWVfZGF5QWJicmV2TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VXZWVrZGF5KGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfZGF5UmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtyZXR1cm4gbj8oZGF0ZS53ID0gZDNfdGltZV9kYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1vbnRoQWJicmV2KGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbW9udGhBYmJyZXZSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbW9udGhBYmJyZXZSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUubSA9IGQzX3RpbWVfbW9udGhBYmJyZXZMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1vbnRoKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbW9udGhSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUubSA9IGQzX3RpbWVfbW9udGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUxvY2FsZUZ1bGwoZGF0ZSxzdHJpbmcsaSl7cmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSxkM190aW1lX2Zvcm1hdHMuYy50b1N0cmluZygpLHN0cmluZyxpKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUxvY2FsZURhdGUoZGF0ZSxzdHJpbmcsaSl7cmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSxkM190aW1lX2Zvcm1hdHMueC50b1N0cmluZygpLHN0cmluZyxpKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUxvY2FsZVRpbWUoZGF0ZSxzdHJpbmcsaSl7cmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSxkM190aW1lX2Zvcm1hdHMuWC50b1N0cmluZygpLHN0cmluZyxpKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUFtUG0oZGF0ZSxzdHJpbmcsaSl7dmFyIG49ZDNfdGltZV9wZXJpb2RMb29rdXAuZ2V0KHN0cmluZy5zbGljZShpLGkgKz0gMikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG4gPT0gbnVsbD8tMTooZGF0ZS5wID0gbixpKTt9cmV0dXJuIGQzX3RpbWVfZm9ybWF0O312YXIgZDNfdGltZV9mb3JtYXRQYWRzPXtcIi1cIjpcIlwiLF86XCIgXCIsXCIwXCI6XCIwXCJ9LGQzX3RpbWVfbnVtYmVyUmU9L15cXHMqXFxkKy8sZDNfdGltZV9wZXJjZW50UmU9L14lLztmdW5jdGlvbiBkM190aW1lX2Zvcm1hdFBhZCh2YWx1ZSxmaWxsLHdpZHRoKXt2YXIgc2lnbj12YWx1ZSA8IDA/XCItXCI6XCJcIixzdHJpbmc9KHNpZ24/LXZhbHVlOnZhbHVlKSArIFwiXCIsbGVuZ3RoPXN0cmluZy5sZW5ndGg7cmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGg/bmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZzpzdHJpbmcpO31mdW5jdGlvbiBkM190aW1lX2Zvcm1hdFJlKG5hbWVzKXtyZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChkMy5yZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLFwiaVwiKTt9ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXRMb29rdXAobmFtZXMpe3ZhciBtYXA9bmV3IGQzX01hcCgpLGk9LTEsbj1uYW1lcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgbWFwLnNldChuYW1lc1tpXS50b0xvd2VyQ2FzZSgpLGkpO3JldHVybiBtYXA7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VXZWVrZGF5TnVtYmVyKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDEpKTtyZXR1cm4gbj8oZGF0ZS53ID0gK25bMF0saSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZVdlZWtOdW1iZXJTdW5kYXkoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO3JldHVybiBuPyhkYXRlLlUgPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlV2Vla051bWJlck1vbmRheShkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUuVyA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VGdWxsWWVhcihkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyA0KSk7cmV0dXJuIG4/KGRhdGUueSA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VZZWFyKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDIpKTtyZXR1cm4gbj8oZGF0ZS55ID0gZDNfdGltZV9leHBhbmRZZWFyKCtuWzBdKSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlWm9uZShkYXRlLHN0cmluZyxpKXtyZXR1cm4gKC9eWystXVxcZHs0fSQvLnRlc3Qoc3RyaW5nID0gc3RyaW5nLnNsaWNlKGksaSArIDUpKT8oZGF0ZS5aID0gLXN0cmluZyxpICsgNSk6LTEpO31mdW5jdGlvbiBkM190aW1lX2V4cGFuZFllYXIoZCl7cmV0dXJuIGQgKyAoZCA+IDY4PzE5MDA6MmUzKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1vbnRoTnVtYmVyKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDIpKTtyZXR1cm4gbj8oZGF0ZS5tID0gblswXSAtIDEsaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZURheShkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyAyKSk7cmV0dXJuIG4/KGRhdGUuZCA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VEYXlPZlllYXIoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSxpICsgMykpO3JldHVybiBuPyhkYXRlLmogPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlSG91cjI0KGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDIpKTtyZXR1cm4gbj8oZGF0ZS5IID0gK25bMF0saSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1pbnV0ZXMoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSxpICsgMikpO3JldHVybiBuPyhkYXRlLk0gPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlU2Vjb25kcyhkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyAyKSk7cmV0dXJuIG4/KGRhdGUuUyA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VNaWxsaXNlY29uZHMoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSxpICsgMykpO3JldHVybiBuPyhkYXRlLkwgPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3pvbmUoZCl7dmFyIHo9ZC5nZXRUaW1lem9uZU9mZnNldCgpLHpzPXogPiAwP1wiLVwiOlwiK1wiLHpoPWFicyh6KSAvIDYwIHwgMCx6bT1hYnMoeikgJSA2MDtyZXR1cm4genMgKyBkM190aW1lX2Zvcm1hdFBhZCh6aCxcIjBcIiwyKSArIGQzX3RpbWVfZm9ybWF0UGFkKHptLFwiMFwiLDIpO31mdW5jdGlvbiBkM190aW1lX3BhcnNlTGl0ZXJhbFBlcmNlbnQoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9wZXJjZW50UmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX3BlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyAxKSk7cmV0dXJuIG4/aSArIG5bMF0ubGVuZ3RoOi0xO31mdW5jdGlvbiBkM190aW1lX2Zvcm1hdE11bHRpKGZvcm1hdHMpe3ZhciBuPWZvcm1hdHMubGVuZ3RoLGk9LTE7d2hpbGUoKytpIDwgbikgZm9ybWF0c1tpXVswXSA9IHRoaXMoZm9ybWF0c1tpXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGRhdGUpe3ZhciBpPTAsZj1mb3JtYXRzW2ldO3doaWxlKCFmWzFdKGRhdGUpKSBmID0gZm9ybWF0c1srK2ldO3JldHVybiBmWzBdKGRhdGUpO307fWQzLmxvY2FsZSA9IGZ1bmN0aW9uKGxvY2FsZSl7cmV0dXJuIHtudW1iZXJGb3JtYXQ6ZDNfbG9jYWxlX251bWJlckZvcm1hdChsb2NhbGUpLHRpbWVGb3JtYXQ6ZDNfbG9jYWxlX3RpbWVGb3JtYXQobG9jYWxlKX07fTt2YXIgZDNfbG9jYWxlX2VuVVM9ZDMubG9jYWxlKHtkZWNpbWFsOlwiLlwiLHRob3VzYW5kczpcIixcIixncm91cGluZzpbM10sY3VycmVuY3k6W1wiJFwiLFwiXCJdLGRhdGVUaW1lOlwiJWEgJWIgJWUgJVggJVlcIixkYXRlOlwiJW0vJWQvJVlcIix0aW1lOlwiJUg6JU06JVNcIixwZXJpb2RzOltcIkFNXCIsXCJQTVwiXSxkYXlzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLHNob3J0RGF5czpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sbW9udGhzOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxzaG9ydE1vbnRoczpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdfSk7ZDMuZm9ybWF0ID0gZDNfbG9jYWxlX2VuVVMubnVtYmVyRm9ybWF0O2QzLmdlbyA9IHt9O2Z1bmN0aW9uIGQzX2FkZGVyKCl7fWQzX2FkZGVyLnByb3RvdHlwZSA9IHtzOjAsdDowLGFkZDpmdW5jdGlvbiBhZGQoeSl7ZDNfYWRkZXJTdW0oeSx0aGlzLnQsZDNfYWRkZXJUZW1wKTtkM19hZGRlclN1bShkM19hZGRlclRlbXAucyx0aGlzLnMsdGhpcyk7aWYodGhpcy5zKXRoaXMudCArPSBkM19hZGRlclRlbXAudDtlbHNlIHRoaXMucyA9IGQzX2FkZGVyVGVtcC50O30scmVzZXQ6ZnVuY3Rpb24gcmVzZXQoKXt0aGlzLnMgPSB0aGlzLnQgPSAwO30sdmFsdWVPZjpmdW5jdGlvbiB2YWx1ZU9mKCl7cmV0dXJuIHRoaXMuczt9fTt2YXIgZDNfYWRkZXJUZW1wPW5ldyBkM19hZGRlcigpO2Z1bmN0aW9uIGQzX2FkZGVyU3VtKGEsYixvKXt2YXIgeD1vLnMgPSBhICsgYixidj14IC0gYSxhdj14IC0gYnY7by50ID0gYSAtIGF2ICsgKGIgLSBidik7fWQzLmdlby5zdHJlYW0gPSBmdW5jdGlvbihvYmplY3QsbGlzdGVuZXIpe2lmKG9iamVjdCAmJiBkM19nZW9fc3RyZWFtT2JqZWN0VHlwZS5oYXNPd25Qcm9wZXJ0eShvYmplY3QudHlwZSkpe2QzX2dlb19zdHJlYW1PYmplY3RUeXBlW29iamVjdC50eXBlXShvYmplY3QsbGlzdGVuZXIpO31lbHNlIHtkM19nZW9fc3RyZWFtR2VvbWV0cnkob2JqZWN0LGxpc3RlbmVyKTt9fTtmdW5jdGlvbiBkM19nZW9fc3RyZWFtR2VvbWV0cnkoZ2VvbWV0cnksbGlzdGVuZXIpe2lmKGdlb21ldHJ5ICYmIGQzX2dlb19zdHJlYW1HZW9tZXRyeVR5cGUuaGFzT3duUHJvcGVydHkoZ2VvbWV0cnkudHlwZSkpe2QzX2dlb19zdHJlYW1HZW9tZXRyeVR5cGVbZ2VvbWV0cnkudHlwZV0oZ2VvbWV0cnksbGlzdGVuZXIpO319dmFyIGQzX2dlb19zdHJlYW1PYmplY3RUeXBlPXtGZWF0dXJlOmZ1bmN0aW9uIEZlYXR1cmUoZmVhdHVyZSxsaXN0ZW5lcil7ZDNfZ2VvX3N0cmVhbUdlb21ldHJ5KGZlYXR1cmUuZ2VvbWV0cnksbGlzdGVuZXIpO30sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24gRmVhdHVyZUNvbGxlY3Rpb24ob2JqZWN0LGxpc3RlbmVyKXt2YXIgZmVhdHVyZXM9b2JqZWN0LmZlYXR1cmVzLGk9LTEsbj1mZWF0dXJlcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgZDNfZ2VvX3N0cmVhbUdlb21ldHJ5KGZlYXR1cmVzW2ldLmdlb21ldHJ5LGxpc3RlbmVyKTt9fTt2YXIgZDNfZ2VvX3N0cmVhbUdlb21ldHJ5VHlwZT17U3BoZXJlOmZ1bmN0aW9uIFNwaGVyZShvYmplY3QsbGlzdGVuZXIpe2xpc3RlbmVyLnNwaGVyZSgpO30sUG9pbnQ6ZnVuY3Rpb24gUG9pbnQob2JqZWN0LGxpc3RlbmVyKXtvYmplY3QgPSBvYmplY3QuY29vcmRpbmF0ZXM7bGlzdGVuZXIucG9pbnQob2JqZWN0WzBdLG9iamVjdFsxXSxvYmplY3RbMl0pO30sTXVsdGlQb2ludDpmdW5jdGlvbiBNdWx0aVBvaW50KG9iamVjdCxsaXN0ZW5lcil7dmFyIGNvb3JkaW5hdGVzPW9iamVjdC5jb29yZGluYXRlcyxpPS0xLG49Y29vcmRpbmF0ZXMubGVuZ3RoO3doaWxlKCsraSA8IG4pIG9iamVjdCA9IGNvb3JkaW5hdGVzW2ldLGxpc3RlbmVyLnBvaW50KG9iamVjdFswXSxvYmplY3RbMV0sb2JqZWN0WzJdKTt9LExpbmVTdHJpbmc6ZnVuY3Rpb24gTGluZVN0cmluZyhvYmplY3QsbGlzdGVuZXIpe2QzX2dlb19zdHJlYW1MaW5lKG9iamVjdC5jb29yZGluYXRlcyxsaXN0ZW5lciwwKTt9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbiBNdWx0aUxpbmVTdHJpbmcob2JqZWN0LGxpc3RlbmVyKXt2YXIgY29vcmRpbmF0ZXM9b2JqZWN0LmNvb3JkaW5hdGVzLGk9LTEsbj1jb29yZGluYXRlcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgZDNfZ2VvX3N0cmVhbUxpbmUoY29vcmRpbmF0ZXNbaV0sbGlzdGVuZXIsMCk7fSxQb2x5Z29uOmZ1bmN0aW9uIFBvbHlnb24ob2JqZWN0LGxpc3RlbmVyKXtkM19nZW9fc3RyZWFtUG9seWdvbihvYmplY3QuY29vcmRpbmF0ZXMsbGlzdGVuZXIpO30sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uIE11bHRpUG9seWdvbihvYmplY3QsbGlzdGVuZXIpe3ZhciBjb29yZGluYXRlcz1vYmplY3QuY29vcmRpbmF0ZXMsaT0tMSxuPWNvb3JkaW5hdGVzLmxlbmd0aDt3aGlsZSgrK2kgPCBuKSBkM19nZW9fc3RyZWFtUG9seWdvbihjb29yZGluYXRlc1tpXSxsaXN0ZW5lcik7fSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24gR2VvbWV0cnlDb2xsZWN0aW9uKG9iamVjdCxsaXN0ZW5lcil7dmFyIGdlb21ldHJpZXM9b2JqZWN0Lmdlb21ldHJpZXMsaT0tMSxuPWdlb21ldHJpZXMubGVuZ3RoO3doaWxlKCsraSA8IG4pIGQzX2dlb19zdHJlYW1HZW9tZXRyeShnZW9tZXRyaWVzW2ldLGxpc3RlbmVyKTt9fTtmdW5jdGlvbiBkM19nZW9fc3RyZWFtTGluZShjb29yZGluYXRlcyxsaXN0ZW5lcixjbG9zZWQpe3ZhciBpPS0xLG49Y29vcmRpbmF0ZXMubGVuZ3RoIC0gY2xvc2VkLGNvb3JkaW5hdGU7bGlzdGVuZXIubGluZVN0YXJ0KCk7d2hpbGUoKytpIDwgbikgY29vcmRpbmF0ZSA9IGNvb3JkaW5hdGVzW2ldLGxpc3RlbmVyLnBvaW50KGNvb3JkaW5hdGVbMF0sY29vcmRpbmF0ZVsxXSxjb29yZGluYXRlWzJdKTtsaXN0ZW5lci5saW5lRW5kKCk7fWZ1bmN0aW9uIGQzX2dlb19zdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzLGxpc3RlbmVyKXt2YXIgaT0tMSxuPWNvb3JkaW5hdGVzLmxlbmd0aDtsaXN0ZW5lci5wb2x5Z29uU3RhcnQoKTt3aGlsZSgrK2kgPCBuKSBkM19nZW9fc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSxsaXN0ZW5lciwxKTtsaXN0ZW5lci5wb2x5Z29uRW5kKCk7fWQzLmdlby5hcmVhID0gZnVuY3Rpb24ob2JqZWN0KXtkM19nZW9fYXJlYVN1bSA9IDA7ZDMuZ2VvLnN0cmVhbShvYmplY3QsZDNfZ2VvX2FyZWEpO3JldHVybiBkM19nZW9fYXJlYVN1bTt9O3ZhciBkM19nZW9fYXJlYVN1bSxkM19nZW9fYXJlYVJpbmdTdW09bmV3IGQzX2FkZGVyKCk7dmFyIGQzX2dlb19hcmVhPXtzcGhlcmU6ZnVuY3Rpb24gc3BoZXJlKCl7ZDNfZ2VvX2FyZWFTdW0gKz0gNCAqIM+AO30scG9pbnQ6ZDNfbm9vcCxsaW5lU3RhcnQ6ZDNfbm9vcCxsaW5lRW5kOmQzX25vb3AscG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe2QzX2dlb19hcmVhUmluZ1N1bS5yZXNldCgpO2QzX2dlb19hcmVhLmxpbmVTdGFydCA9IGQzX2dlb19hcmVhUmluZ1N0YXJ0O30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7dmFyIGFyZWE9MiAqIGQzX2dlb19hcmVhUmluZ1N1bTtkM19nZW9fYXJlYVN1bSArPSBhcmVhIDwgMD80ICogz4AgKyBhcmVhOmFyZWE7ZDNfZ2VvX2FyZWEubGluZVN0YXJ0ID0gZDNfZ2VvX2FyZWEubGluZUVuZCA9IGQzX2dlb19hcmVhLnBvaW50ID0gZDNfbm9vcDt9fTtmdW5jdGlvbiBkM19nZW9fYXJlYVJpbmdTdGFydCgpe3ZhciDOuzAwLM+GMDAszrswLGNvc8+GMCxzaW7PhjA7ZDNfZ2VvX2FyZWEucG9pbnQgPSBmdW5jdGlvbijOuyzPhil7ZDNfZ2VvX2FyZWEucG9pbnQgPSBuZXh0UG9pbnQ7zrswID0gKM67MDAgPSDOuykgKiBkM19yYWRpYW5zLGNvc8+GMCA9IE1hdGguY29zKM+GID0gKM+GMDAgPSDPhikgKiBkM19yYWRpYW5zIC8gMiArIM+AIC8gNCksc2luz4YwID0gTWF0aC5zaW4oz4YpO307ZnVuY3Rpb24gbmV4dFBvaW50KM67LM+GKXvOuyAqPSBkM19yYWRpYW5zO8+GID0gz4YgKiBkM19yYWRpYW5zIC8gMiArIM+AIC8gNDt2YXIgZM67Pc67IC0gzrswLHNkzrs9ZM67ID49IDA/MTotMSxhZM67PXNkzrsgKiBkzrssY29zz4Y9TWF0aC5jb3Moz4YpLHNpbs+GPU1hdGguc2luKM+GKSxrPXNpbs+GMCAqIHNpbs+GLHU9Y29zz4YwICogY29zz4YgKyBrICogTWF0aC5jb3MoYWTOuyksdj1rICogc2TOuyAqIE1hdGguc2luKGFkzrspO2QzX2dlb19hcmVhUmluZ1N1bS5hZGQoTWF0aC5hdGFuMih2LHUpKTvOuzAgPSDOuyxjb3PPhjAgPSBjb3PPhixzaW7PhjAgPSBzaW7Phjt9ZDNfZ2VvX2FyZWEubGluZUVuZCA9IGZ1bmN0aW9uKCl7bmV4dFBvaW50KM67MDAsz4YwMCk7fTt9ZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbihzcGhlcmljYWwpe3ZhciDOuz1zcGhlcmljYWxbMF0sz4Y9c3BoZXJpY2FsWzFdLGNvc8+GPU1hdGguY29zKM+GKTtyZXR1cm4gW2Nvc8+GICogTWF0aC5jb3MozrspLGNvc8+GICogTWF0aC5zaW4ozrspLE1hdGguc2luKM+GKV07fWZ1bmN0aW9uIGQzX2dlb19jYXJ0ZXNpYW5Eb3QoYSxiKXtyZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO31mdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuQ3Jvc3MoYSxiKXtyZXR1cm4gW2FbMV0gKiBiWzJdIC0gYVsyXSAqIGJbMV0sYVsyXSAqIGJbMF0gLSBhWzBdICogYlsyXSxhWzBdICogYlsxXSAtIGFbMV0gKiBiWzBdXTt9ZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbkFkZChhLGIpe2FbMF0gKz0gYlswXTthWzFdICs9IGJbMV07YVsyXSArPSBiWzJdO31mdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuU2NhbGUodmVjdG9yLGspe3JldHVybiBbdmVjdG9yWzBdICogayx2ZWN0b3JbMV0gKiBrLHZlY3RvclsyXSAqIGtdO31mdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGQpe3ZhciBsPU1hdGguc3FydChkWzBdICogZFswXSArIGRbMV0gKiBkWzFdICsgZFsyXSAqIGRbMl0pO2RbMF0gLz0gbDtkWzFdIC89IGw7ZFsyXSAvPSBsO31mdW5jdGlvbiBkM19nZW9fc3BoZXJpY2FsKGNhcnRlc2lhbil7cmV0dXJuIFtNYXRoLmF0YW4yKGNhcnRlc2lhblsxXSxjYXJ0ZXNpYW5bMF0pLGQzX2FzaW4oY2FydGVzaWFuWzJdKV07fWZ1bmN0aW9uIGQzX2dlb19zcGhlcmljYWxFcXVhbChhLGIpe3JldHVybiBhYnMoYVswXSAtIGJbMF0pIDwgzrUgJiYgYWJzKGFbMV0gLSBiWzFdKSA8IM61O31kMy5nZW8uYm91bmRzID0gKGZ1bmN0aW9uKCl7dmFyIM67MCzPhjAszrsxLM+GMSzOu18szrtfXyzPhl9fLHAwLGTOu1N1bSxyYW5nZXMscmFuZ2U7dmFyIGJvdW5kPXtwb2ludDpwb2ludCxsaW5lU3RhcnQ6bGluZVN0YXJ0LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7Ym91bmQucG9pbnQgPSByaW5nUG9pbnQ7Ym91bmQubGluZVN0YXJ0ID0gcmluZ1N0YXJ0O2JvdW5kLmxpbmVFbmQgPSByaW5nRW5kO2TOu1N1bSA9IDA7ZDNfZ2VvX2FyZWEucG9seWdvblN0YXJ0KCk7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fYXJlYS5wb2x5Z29uRW5kKCk7Ym91bmQucG9pbnQgPSBwb2ludDtib3VuZC5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7Ym91bmQubGluZUVuZCA9IGxpbmVFbmQ7aWYoZDNfZ2VvX2FyZWFSaW5nU3VtIDwgMCnOuzAgPSAtKM67MSA9IDE4MCksz4YwID0gLSjPhjEgPSA5MCk7ZWxzZSBpZihkzrtTdW0gPiDOtSnPhjEgPSA5MDtlbHNlIGlmKGTOu1N1bSA8IC3OtSnPhjAgPSAtOTA7cmFuZ2VbMF0gPSDOuzAscmFuZ2VbMV0gPSDOuzE7fX07ZnVuY3Rpb24gcG9pbnQozrssz4Ype3Jhbmdlcy5wdXNoKHJhbmdlID0gW867MCA9IM67LM67MSA9IM67XSk7aWYoz4YgPCDPhjApz4YwID0gz4Y7aWYoz4YgPiDPhjEpz4YxID0gz4Y7fWZ1bmN0aW9uIGxpbmVQb2ludCjOuyzPhil7dmFyIHA9ZDNfZ2VvX2NhcnRlc2lhbihbzrsgKiBkM19yYWRpYW5zLM+GICogZDNfcmFkaWFuc10pO2lmKHAwKXt2YXIgbm9ybWFsPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhwMCxwKSxlcXVhdG9yaWFsPVtub3JtYWxbMV0sLW5vcm1hbFswXSwwXSxpbmZsZWN0aW9uPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhlcXVhdG9yaWFsLG5vcm1hbCk7ZDNfZ2VvX2NhcnRlc2lhbk5vcm1hbGl6ZShpbmZsZWN0aW9uKTtpbmZsZWN0aW9uID0gZDNfZ2VvX3NwaGVyaWNhbChpbmZsZWN0aW9uKTt2YXIgZM67Pc67IC0gzrtfLHM9ZM67ID4gMD8xOi0xLM67aT1pbmZsZWN0aW9uWzBdICogZDNfZGVncmVlcyAqIHMsYW50aW1lcmlkaWFuPWFicyhkzrspID4gMTgwO2lmKGFudGltZXJpZGlhbiBeIChzICogzrtfIDwgzrtpICYmIM67aSA8IHMgKiDOuykpe3ZhciDPhmk9aW5mbGVjdGlvblsxXSAqIGQzX2RlZ3JlZXM7aWYoz4ZpID4gz4YxKc+GMSA9IM+GaTt9ZWxzZSBpZigozrtpID0gKM67aSArIDM2MCkgJSAzNjAgLSAxODAsYW50aW1lcmlkaWFuIF4gKHMgKiDOu18gPCDOu2kgJiYgzrtpIDwgcyAqIM67KSkpe3ZhciDPhmk9LWluZmxlY3Rpb25bMV0gKiBkM19kZWdyZWVzO2lmKM+GaSA8IM+GMCnPhjAgPSDPhmk7fWVsc2Uge2lmKM+GIDwgz4YwKc+GMCA9IM+GO2lmKM+GID4gz4YxKc+GMSA9IM+GO31pZihhbnRpbWVyaWRpYW4pe2lmKM67IDwgzrtfKXtpZihhbmdsZSjOuzAszrspID4gYW5nbGUozrswLM67MSkpzrsxID0gzrs7fWVsc2Uge2lmKGFuZ2xlKM67LM67MSkgPiBhbmdsZSjOuzAszrsxKSnOuzAgPSDOuzt9fWVsc2Uge2lmKM67MSA+PSDOuzApe2lmKM67IDwgzrswKc67MCA9IM67O2lmKM67ID4gzrsxKc67MSA9IM67O31lbHNlIHtpZijOuyA+IM67Xyl7aWYoYW5nbGUozrswLM67KSA+IGFuZ2xlKM67MCzOuzEpKc67MSA9IM67O31lbHNlIHtpZihhbmdsZSjOuyzOuzEpID4gYW5nbGUozrswLM67MSkpzrswID0gzrs7fX19fWVsc2Uge3BvaW50KM67LM+GKTt9cDAgPSBwLM67XyA9IM67O31mdW5jdGlvbiBsaW5lU3RhcnQoKXtib3VuZC5wb2ludCA9IGxpbmVQb2ludDt9ZnVuY3Rpb24gbGluZUVuZCgpe3JhbmdlWzBdID0gzrswLHJhbmdlWzFdID0gzrsxO2JvdW5kLnBvaW50ID0gcG9pbnQ7cDAgPSBudWxsO31mdW5jdGlvbiByaW5nUG9pbnQozrssz4Ype2lmKHAwKXt2YXIgZM67Pc67IC0gzrtfO2TOu1N1bSArPSBhYnMoZM67KSA+IDE4MD9kzrsgKyAoZM67ID4gMD8zNjA6LTM2MCk6ZM67O31lbHNlIM67X18gPSDOuyzPhl9fID0gz4Y7ZDNfZ2VvX2FyZWEucG9pbnQozrssz4YpO2xpbmVQb2ludCjOuyzPhik7fWZ1bmN0aW9uIHJpbmdTdGFydCgpe2QzX2dlb19hcmVhLmxpbmVTdGFydCgpO31mdW5jdGlvbiByaW5nRW5kKCl7cmluZ1BvaW50KM67X18sz4ZfXyk7ZDNfZ2VvX2FyZWEubGluZUVuZCgpO2lmKGFicyhkzrtTdW0pID4gzrUpzrswID0gLSjOuzEgPSAxODApO3JhbmdlWzBdID0gzrswLHJhbmdlWzFdID0gzrsxO3AwID0gbnVsbDt9ZnVuY3Rpb24gYW5nbGUozrswLM67MSl7cmV0dXJuICjOuzEgLT0gzrswKSA8IDA/zrsxICsgMzYwOs67MTt9ZnVuY3Rpb24gY29tcGFyZVJhbmdlcyhhLGIpe3JldHVybiBhWzBdIC0gYlswXTt9ZnVuY3Rpb24gd2l0aGluUmFuZ2UoeCxyYW5nZSl7cmV0dXJuIHJhbmdlWzBdIDw9IHJhbmdlWzFdP3JhbmdlWzBdIDw9IHggJiYgeCA8PSByYW5nZVsxXTp4IDwgcmFuZ2VbMF0gfHwgcmFuZ2VbMV0gPCB4O31yZXR1cm4gZnVuY3Rpb24oZmVhdHVyZSl7z4YxID0gzrsxID0gLSjOuzAgPSDPhjAgPSBJbmZpbml0eSk7cmFuZ2VzID0gW107ZDMuZ2VvLnN0cmVhbShmZWF0dXJlLGJvdW5kKTt2YXIgbj1yYW5nZXMubGVuZ3RoO2lmKG4pe3Jhbmdlcy5zb3J0KGNvbXBhcmVSYW5nZXMpO2Zvcih2YXIgaT0xLGE9cmFuZ2VzWzBdLGIsbWVyZ2VkPVthXTtpIDwgbjsrK2kpIHtiID0gcmFuZ2VzW2ldO2lmKHdpdGhpblJhbmdlKGJbMF0sYSkgfHwgd2l0aGluUmFuZ2UoYlsxXSxhKSl7aWYoYW5nbGUoYVswXSxiWzFdKSA+IGFuZ2xlKGFbMF0sYVsxXSkpYVsxXSA9IGJbMV07aWYoYW5nbGUoYlswXSxhWzFdKSA+IGFuZ2xlKGFbMF0sYVsxXSkpYVswXSA9IGJbMF07fWVsc2Uge21lcmdlZC5wdXNoKGEgPSBiKTt9fXZhciBiZXN0PS1JbmZpbml0eSxkzrs7Zm9yKHZhciBuPW1lcmdlZC5sZW5ndGggLSAxLGk9MCxhPW1lcmdlZFtuXSxiO2kgPD0gbjthID0gYiwrK2kpIHtiID0gbWVyZ2VkW2ldO2lmKChkzrsgPSBhbmdsZShhWzFdLGJbMF0pKSA+IGJlc3QpYmVzdCA9IGTOuyzOuzAgPSBiWzBdLM67MSA9IGFbMV07fX1yYW5nZXMgPSByYW5nZSA9IG51bGw7cmV0dXJuIM67MCA9PT0gSW5maW5pdHkgfHwgz4YwID09PSBJbmZpbml0eT9bW05hTixOYU5dLFtOYU4sTmFOXV06W1vOuzAsz4YwXSxbzrsxLM+GMV1dO307fSkoKTtkMy5nZW8uY2VudHJvaWQgPSBmdW5jdGlvbihvYmplY3Qpe2QzX2dlb19jZW50cm9pZFcwID0gZDNfZ2VvX2NlbnRyb2lkVzEgPSBkM19nZW9fY2VudHJvaWRYMCA9IGQzX2dlb19jZW50cm9pZFkwID0gZDNfZ2VvX2NlbnRyb2lkWjAgPSBkM19nZW9fY2VudHJvaWRYMSA9IGQzX2dlb19jZW50cm9pZFkxID0gZDNfZ2VvX2NlbnRyb2lkWjEgPSBkM19nZW9fY2VudHJvaWRYMiA9IGQzX2dlb19jZW50cm9pZFkyID0gZDNfZ2VvX2NlbnRyb2lkWjIgPSAwO2QzLmdlby5zdHJlYW0ob2JqZWN0LGQzX2dlb19jZW50cm9pZCk7dmFyIHg9ZDNfZ2VvX2NlbnRyb2lkWDIseT1kM19nZW9fY2VudHJvaWRZMix6PWQzX2dlb19jZW50cm9pZFoyLG09eCAqIHggKyB5ICogeSArIHogKiB6O2lmKG0gPCDOtTIpe3ggPSBkM19nZW9fY2VudHJvaWRYMSx5ID0gZDNfZ2VvX2NlbnRyb2lkWTEseiA9IGQzX2dlb19jZW50cm9pZFoxO2lmKGQzX2dlb19jZW50cm9pZFcxIDwgzrUpeCA9IGQzX2dlb19jZW50cm9pZFgwLHkgPSBkM19nZW9fY2VudHJvaWRZMCx6ID0gZDNfZ2VvX2NlbnRyb2lkWjA7bSA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtpZihtIDwgzrUyKXJldHVybiBbTmFOLE5hTl07fXJldHVybiBbTWF0aC5hdGFuMih5LHgpICogZDNfZGVncmVlcyxkM19hc2luKHogLyBNYXRoLnNxcnQobSkpICogZDNfZGVncmVlc107fTt2YXIgZDNfZ2VvX2NlbnRyb2lkVzAsZDNfZ2VvX2NlbnRyb2lkVzEsZDNfZ2VvX2NlbnRyb2lkWDAsZDNfZ2VvX2NlbnRyb2lkWTAsZDNfZ2VvX2NlbnRyb2lkWjAsZDNfZ2VvX2NlbnRyb2lkWDEsZDNfZ2VvX2NlbnRyb2lkWTEsZDNfZ2VvX2NlbnRyb2lkWjEsZDNfZ2VvX2NlbnRyb2lkWDIsZDNfZ2VvX2NlbnRyb2lkWTIsZDNfZ2VvX2NlbnRyb2lkWjI7dmFyIGQzX2dlb19jZW50cm9pZD17c3BoZXJlOmQzX25vb3AscG9pbnQ6ZDNfZ2VvX2NlbnRyb2lkUG9pbnQsbGluZVN0YXJ0OmQzX2dlb19jZW50cm9pZExpbmVTdGFydCxsaW5lRW5kOmQzX2dlb19jZW50cm9pZExpbmVFbmQscG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe2QzX2dlb19jZW50cm9pZC5saW5lU3RhcnQgPSBkM19nZW9fY2VudHJvaWRSaW5nU3RhcnQ7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fY2VudHJvaWQubGluZVN0YXJ0ID0gZDNfZ2VvX2NlbnRyb2lkTGluZVN0YXJ0O319O2Z1bmN0aW9uIGQzX2dlb19jZW50cm9pZFBvaW50KM67LM+GKXvOuyAqPSBkM19yYWRpYW5zO3ZhciBjb3PPhj1NYXRoLmNvcyjPhiAqPSBkM19yYWRpYW5zKTtkM19nZW9fY2VudHJvaWRQb2ludFhZWihjb3PPhiAqIE1hdGguY29zKM67KSxjb3PPhiAqIE1hdGguc2luKM67KSxNYXRoLnNpbijPhikpO31mdW5jdGlvbiBkM19nZW9fY2VudHJvaWRQb2ludFhZWih4LHkseil7KytkM19nZW9fY2VudHJvaWRXMDtkM19nZW9fY2VudHJvaWRYMCArPSAoeCAtIGQzX2dlb19jZW50cm9pZFgwKSAvIGQzX2dlb19jZW50cm9pZFcwO2QzX2dlb19jZW50cm9pZFkwICs9ICh5IC0gZDNfZ2VvX2NlbnRyb2lkWTApIC8gZDNfZ2VvX2NlbnRyb2lkVzA7ZDNfZ2VvX2NlbnRyb2lkWjAgKz0gKHogLSBkM19nZW9fY2VudHJvaWRaMCkgLyBkM19nZW9fY2VudHJvaWRXMDt9ZnVuY3Rpb24gZDNfZ2VvX2NlbnRyb2lkTGluZVN0YXJ0KCl7dmFyIHgwLHkwLHowO2QzX2dlb19jZW50cm9pZC5wb2ludCA9IGZ1bmN0aW9uKM67LM+GKXvOuyAqPSBkM19yYWRpYW5zO3ZhciBjb3PPhj1NYXRoLmNvcyjPhiAqPSBkM19yYWRpYW5zKTt4MCA9IGNvc8+GICogTWF0aC5jb3MozrspO3kwID0gY29zz4YgKiBNYXRoLnNpbijOuyk7ejAgPSBNYXRoLnNpbijPhik7ZDNfZ2VvX2NlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50O2QzX2dlb19jZW50cm9pZFBvaW50WFlaKHgwLHkwLHowKTt9O2Z1bmN0aW9uIG5leHRQb2ludCjOuyzPhil7zrsgKj0gZDNfcmFkaWFuczt2YXIgY29zz4Y9TWF0aC5jb3Moz4YgKj0gZDNfcmFkaWFucykseD1jb3PPhiAqIE1hdGguY29zKM67KSx5PWNvc8+GICogTWF0aC5zaW4ozrspLHo9TWF0aC5zaW4oz4YpLHc9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHcgPSB5MCAqIHogLSB6MCAqIHkpICogdyArICh3ID0gejAgKiB4IC0geDAgKiB6KSAqIHcgKyAodyA9IHgwICogeSAtIHkwICogeCkgKiB3KSx4MCAqIHggKyB5MCAqIHkgKyB6MCAqIHopO2QzX2dlb19jZW50cm9pZFcxICs9IHc7ZDNfZ2VvX2NlbnRyb2lkWDEgKz0gdyAqICh4MCArICh4MCA9IHgpKTtkM19nZW9fY2VudHJvaWRZMSArPSB3ICogKHkwICsgKHkwID0geSkpO2QzX2dlb19jZW50cm9pZFoxICs9IHcgKiAoejAgKyAoejAgPSB6KSk7ZDNfZ2VvX2NlbnRyb2lkUG9pbnRYWVooeDAseTAsejApO319ZnVuY3Rpb24gZDNfZ2VvX2NlbnRyb2lkTGluZUVuZCgpe2QzX2dlb19jZW50cm9pZC5wb2ludCA9IGQzX2dlb19jZW50cm9pZFBvaW50O31mdW5jdGlvbiBkM19nZW9fY2VudHJvaWRSaW5nU3RhcnQoKXt2YXIgzrswMCzPhjAwLHgwLHkwLHowO2QzX2dlb19jZW50cm9pZC5wb2ludCA9IGZ1bmN0aW9uKM67LM+GKXvOuzAwID0gzrssz4YwMCA9IM+GO2QzX2dlb19jZW50cm9pZC5wb2ludCA9IG5leHRQb2ludDvOuyAqPSBkM19yYWRpYW5zO3ZhciBjb3PPhj1NYXRoLmNvcyjPhiAqPSBkM19yYWRpYW5zKTt4MCA9IGNvc8+GICogTWF0aC5jb3MozrspO3kwID0gY29zz4YgKiBNYXRoLnNpbijOuyk7ejAgPSBNYXRoLnNpbijPhik7ZDNfZ2VvX2NlbnRyb2lkUG9pbnRYWVooeDAseTAsejApO307ZDNfZ2VvX2NlbnRyb2lkLmxpbmVFbmQgPSBmdW5jdGlvbigpe25leHRQb2ludCjOuzAwLM+GMDApO2QzX2dlb19jZW50cm9pZC5saW5lRW5kID0gZDNfZ2VvX2NlbnRyb2lkTGluZUVuZDtkM19nZW9fY2VudHJvaWQucG9pbnQgPSBkM19nZW9fY2VudHJvaWRQb2ludDt9O2Z1bmN0aW9uIG5leHRQb2ludCjOuyzPhil7zrsgKj0gZDNfcmFkaWFuczt2YXIgY29zz4Y9TWF0aC5jb3Moz4YgKj0gZDNfcmFkaWFucykseD1jb3PPhiAqIE1hdGguY29zKM67KSx5PWNvc8+GICogTWF0aC5zaW4ozrspLHo9TWF0aC5zaW4oz4YpLGN4PXkwICogeiAtIHowICogeSxjeT16MCAqIHggLSB4MCAqIHosY3o9eDAgKiB5IC0geTAgKiB4LG09TWF0aC5zcXJ0KGN4ICogY3ggKyBjeSAqIGN5ICsgY3ogKiBjeiksdT14MCAqIHggKyB5MCAqIHkgKyB6MCAqIHosdj1tICYmIC1kM19hY29zKHUpIC8gbSx3PU1hdGguYXRhbjIobSx1KTtkM19nZW9fY2VudHJvaWRYMiArPSB2ICogY3g7ZDNfZ2VvX2NlbnRyb2lkWTIgKz0gdiAqIGN5O2QzX2dlb19jZW50cm9pZFoyICs9IHYgKiBjejtkM19nZW9fY2VudHJvaWRXMSArPSB3O2QzX2dlb19jZW50cm9pZFgxICs9IHcgKiAoeDAgKyAoeDAgPSB4KSk7ZDNfZ2VvX2NlbnRyb2lkWTEgKz0gdyAqICh5MCArICh5MCA9IHkpKTtkM19nZW9fY2VudHJvaWRaMSArPSB3ICogKHowICsgKHowID0geikpO2QzX2dlb19jZW50cm9pZFBvaW50WFlaKHgwLHkwLHowKTt9fWZ1bmN0aW9uIGQzX2dlb19jb21wb3NlKGEsYil7ZnVuY3Rpb24gY29tcG9zZSh4LHkpe3JldHVybiB4ID0gYSh4LHkpLGIoeFswXSx4WzFdKTt9aWYoYS5pbnZlcnQgJiYgYi5pbnZlcnQpY29tcG9zZS5pbnZlcnQgPSBmdW5jdGlvbih4LHkpe3JldHVybiB4ID0gYi5pbnZlcnQoeCx5KSx4ICYmIGEuaW52ZXJ0KHhbMF0seFsxXSk7fTtyZXR1cm4gY29tcG9zZTt9ZnVuY3Rpb24gZDNfdHJ1ZSgpe3JldHVybiB0cnVlO31mdW5jdGlvbiBkM19nZW9fY2xpcFBvbHlnb24oc2VnbWVudHMsY29tcGFyZSxjbGlwU3RhcnRJbnNpZGUsaW50ZXJwb2xhdGUsbGlzdGVuZXIpe3ZhciBzdWJqZWN0PVtdLGNsaXA9W107c2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50KXtpZigobiA9IHNlZ21lbnQubGVuZ3RoIC0gMSkgPD0gMClyZXR1cm47dmFyIG4scDA9c2VnbWVudFswXSxwMT1zZWdtZW50W25dO2lmKGQzX2dlb19zcGhlcmljYWxFcXVhbChwMCxwMSkpe2xpc3RlbmVyLmxpbmVTdGFydCgpO2Zvcih2YXIgaT0wO2kgPCBuOysraSkgbGlzdGVuZXIucG9pbnQoKHAwID0gc2VnbWVudFtpXSlbMF0scDBbMV0pO2xpc3RlbmVyLmxpbmVFbmQoKTtyZXR1cm47fXZhciBhPW5ldyBkM19nZW9fY2xpcFBvbHlnb25JbnRlcnNlY3Rpb24ocDAsc2VnbWVudCxudWxsLHRydWUpLGI9bmV3IGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwMCxudWxsLGEsZmFsc2UpO2EubyA9IGI7c3ViamVjdC5wdXNoKGEpO2NsaXAucHVzaChiKTthID0gbmV3IGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwMSxzZWdtZW50LG51bGwsZmFsc2UpO2IgPSBuZXcgZDNfZ2VvX2NsaXBQb2x5Z29uSW50ZXJzZWN0aW9uKHAxLG51bGwsYSx0cnVlKTthLm8gPSBiO3N1YmplY3QucHVzaChhKTtjbGlwLnB1c2goYik7fSk7Y2xpcC5zb3J0KGNvbXBhcmUpO2QzX2dlb19jbGlwUG9seWdvbkxpbmtDaXJjdWxhcihzdWJqZWN0KTtkM19nZW9fY2xpcFBvbHlnb25MaW5rQ2lyY3VsYXIoY2xpcCk7aWYoIXN1YmplY3QubGVuZ3RoKXJldHVybjtmb3IodmFyIGk9MCxlbnRyeT1jbGlwU3RhcnRJbnNpZGUsbj1jbGlwLmxlbmd0aDtpIDwgbjsrK2kpIHtjbGlwW2ldLmUgPSBlbnRyeSA9ICFlbnRyeTt9dmFyIHN0YXJ0PXN1YmplY3RbMF0scG9pbnRzLHBvaW50O3doaWxlKDEpIHt2YXIgY3VycmVudD1zdGFydCxpc1N1YmplY3Q9dHJ1ZTt3aGlsZShjdXJyZW50LnYpIGlmKChjdXJyZW50ID0gY3VycmVudC5uKSA9PT0gc3RhcnQpcmV0dXJuO3BvaW50cyA9IGN1cnJlbnQuejtsaXN0ZW5lci5saW5lU3RhcnQoKTtkbyB7Y3VycmVudC52ID0gY3VycmVudC5vLnYgPSB0cnVlO2lmKGN1cnJlbnQuZSl7aWYoaXNTdWJqZWN0KXtmb3IodmFyIGk9MCxuPXBvaW50cy5sZW5ndGg7aSA8IG47KytpKSBsaXN0ZW5lci5wb2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLHBvaW50WzFdKTt9ZWxzZSB7aW50ZXJwb2xhdGUoY3VycmVudC54LGN1cnJlbnQubi54LDEsbGlzdGVuZXIpO31jdXJyZW50ID0gY3VycmVudC5uO31lbHNlIHtpZihpc1N1YmplY3Qpe3BvaW50cyA9IGN1cnJlbnQucC56O2Zvcih2YXIgaT1wb2ludHMubGVuZ3RoIC0gMTtpID49IDA7LS1pKSBsaXN0ZW5lci5wb2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLHBvaW50WzFdKTt9ZWxzZSB7aW50ZXJwb2xhdGUoY3VycmVudC54LGN1cnJlbnQucC54LC0xLGxpc3RlbmVyKTt9Y3VycmVudCA9IGN1cnJlbnQucDt9Y3VycmVudCA9IGN1cnJlbnQubztwb2ludHMgPSBjdXJyZW50Lno7aXNTdWJqZWN0ID0gIWlzU3ViamVjdDt9d2hpbGUoIWN1cnJlbnQudik7bGlzdGVuZXIubGluZUVuZCgpO319ZnVuY3Rpb24gZDNfZ2VvX2NsaXBQb2x5Z29uTGlua0NpcmN1bGFyKGFycmF5KXtpZighKG4gPSBhcnJheS5sZW5ndGgpKXJldHVybjt2YXIgbixpPTAsYT1hcnJheVswXSxiO3doaWxlKCsraSA8IG4pIHthLm4gPSBiID0gYXJyYXlbaV07Yi5wID0gYTthID0gYjt9YS5uID0gYiA9IGFycmF5WzBdO2IucCA9IGE7fWZ1bmN0aW9uIGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwb2ludCxwb2ludHMsb3RoZXIsZW50cnkpe3RoaXMueCA9IHBvaW50O3RoaXMueiA9IHBvaW50czt0aGlzLm8gPSBvdGhlcjt0aGlzLmUgPSBlbnRyeTt0aGlzLnYgPSBmYWxzZTt0aGlzLm4gPSB0aGlzLnAgPSBudWxsO31mdW5jdGlvbiBkM19nZW9fY2xpcChwb2ludFZpc2libGUsY2xpcExpbmUsaW50ZXJwb2xhdGUsY2xpcFN0YXJ0KXtyZXR1cm4gZnVuY3Rpb24ocm90YXRlLGxpc3RlbmVyKXt2YXIgbGluZT1jbGlwTGluZShsaXN0ZW5lcikscm90YXRlZENsaXBTdGFydD1yb3RhdGUuaW52ZXJ0KGNsaXBTdGFydFswXSxjbGlwU3RhcnRbMV0pO3ZhciBjbGlwPXtwb2ludDpwb2ludCxsaW5lU3RhcnQ6bGluZVN0YXJ0LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7Y2xpcC5wb2ludCA9IHBvaW50UmluZztjbGlwLmxpbmVTdGFydCA9IHJpbmdTdGFydDtjbGlwLmxpbmVFbmQgPSByaW5nRW5kO3NlZ21lbnRzID0gW107cG9seWdvbiA9IFtdO30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7Y2xpcC5wb2ludCA9IHBvaW50O2NsaXAubGluZVN0YXJ0ID0gbGluZVN0YXJ0O2NsaXAubGluZUVuZCA9IGxpbmVFbmQ7c2VnbWVudHMgPSBkMy5tZXJnZShzZWdtZW50cyk7dmFyIGNsaXBTdGFydEluc2lkZT1kM19nZW9fcG9pbnRJblBvbHlnb24ocm90YXRlZENsaXBTdGFydCxwb2x5Z29uKTtpZihzZWdtZW50cy5sZW5ndGgpe2lmKCFwb2x5Z29uU3RhcnRlZClsaXN0ZW5lci5wb2x5Z29uU3RhcnQoKSxwb2x5Z29uU3RhcnRlZCA9IHRydWU7ZDNfZ2VvX2NsaXBQb2x5Z29uKHNlZ21lbnRzLGQzX2dlb19jbGlwU29ydCxjbGlwU3RhcnRJbnNpZGUsaW50ZXJwb2xhdGUsbGlzdGVuZXIpO31lbHNlIGlmKGNsaXBTdGFydEluc2lkZSl7aWYoIXBvbHlnb25TdGFydGVkKWxpc3RlbmVyLnBvbHlnb25TdGFydCgpLHBvbHlnb25TdGFydGVkID0gdHJ1ZTtsaXN0ZW5lci5saW5lU3RhcnQoKTtpbnRlcnBvbGF0ZShudWxsLG51bGwsMSxsaXN0ZW5lcik7bGlzdGVuZXIubGluZUVuZCgpO31pZihwb2x5Z29uU3RhcnRlZClsaXN0ZW5lci5wb2x5Z29uRW5kKCkscG9seWdvblN0YXJ0ZWQgPSBmYWxzZTtzZWdtZW50cyA9IHBvbHlnb24gPSBudWxsO30sc3BoZXJlOmZ1bmN0aW9uIHNwaGVyZSgpe2xpc3RlbmVyLnBvbHlnb25TdGFydCgpO2xpc3RlbmVyLmxpbmVTdGFydCgpO2ludGVycG9sYXRlKG51bGwsbnVsbCwxLGxpc3RlbmVyKTtsaXN0ZW5lci5saW5lRW5kKCk7bGlzdGVuZXIucG9seWdvbkVuZCgpO319O2Z1bmN0aW9uIHBvaW50KM67LM+GKXt2YXIgcG9pbnQ9cm90YXRlKM67LM+GKTtpZihwb2ludFZpc2libGUozrsgPSBwb2ludFswXSzPhiA9IHBvaW50WzFdKSlsaXN0ZW5lci5wb2ludCjOuyzPhik7fWZ1bmN0aW9uIHBvaW50TGluZSjOuyzPhil7dmFyIHBvaW50PXJvdGF0ZSjOuyzPhik7bGluZS5wb2ludChwb2ludFswXSxwb2ludFsxXSk7fWZ1bmN0aW9uIGxpbmVTdGFydCgpe2NsaXAucG9pbnQgPSBwb2ludExpbmU7bGluZS5saW5lU3RhcnQoKTt9ZnVuY3Rpb24gbGluZUVuZCgpe2NsaXAucG9pbnQgPSBwb2ludDtsaW5lLmxpbmVFbmQoKTt9dmFyIHNlZ21lbnRzO3ZhciBidWZmZXI9ZDNfZ2VvX2NsaXBCdWZmZXJMaXN0ZW5lcigpLHJpbmdMaXN0ZW5lcj1jbGlwTGluZShidWZmZXIpLHBvbHlnb25TdGFydGVkPWZhbHNlLHBvbHlnb24scmluZztmdW5jdGlvbiBwb2ludFJpbmcozrssz4Ype3JpbmcucHVzaChbzrssz4ZdKTt2YXIgcG9pbnQ9cm90YXRlKM67LM+GKTtyaW5nTGlzdGVuZXIucG9pbnQocG9pbnRbMF0scG9pbnRbMV0pO31mdW5jdGlvbiByaW5nU3RhcnQoKXtyaW5nTGlzdGVuZXIubGluZVN0YXJ0KCk7cmluZyA9IFtdO31mdW5jdGlvbiByaW5nRW5kKCl7cG9pbnRSaW5nKHJpbmdbMF1bMF0scmluZ1swXVsxXSk7cmluZ0xpc3RlbmVyLmxpbmVFbmQoKTt2YXIgY2xlYW49cmluZ0xpc3RlbmVyLmNsZWFuKCkscmluZ1NlZ21lbnRzPWJ1ZmZlci5idWZmZXIoKSxzZWdtZW50LG49cmluZ1NlZ21lbnRzLmxlbmd0aDtyaW5nLnBvcCgpO3BvbHlnb24ucHVzaChyaW5nKTtyaW5nID0gbnVsbDtpZighbilyZXR1cm47aWYoY2xlYW4gJiAxKXtzZWdtZW50ID0gcmluZ1NlZ21lbnRzWzBdO3ZhciBuPXNlZ21lbnQubGVuZ3RoIC0gMSxpPS0xLHBvaW50O2lmKG4gPiAwKXtpZighcG9seWdvblN0YXJ0ZWQpbGlzdGVuZXIucG9seWdvblN0YXJ0KCkscG9seWdvblN0YXJ0ZWQgPSB0cnVlO2xpc3RlbmVyLmxpbmVTdGFydCgpO3doaWxlKCsraSA8IG4pIGxpc3RlbmVyLnBvaW50KChwb2ludCA9IHNlZ21lbnRbaV0pWzBdLHBvaW50WzFdKTtsaXN0ZW5lci5saW5lRW5kKCk7fXJldHVybjt9aWYobiA+IDEgJiYgY2xlYW4gJiAyKXJpbmdTZWdtZW50cy5wdXNoKHJpbmdTZWdtZW50cy5wb3AoKS5jb25jYXQocmluZ1NlZ21lbnRzLnNoaWZ0KCkpKTtzZWdtZW50cy5wdXNoKHJpbmdTZWdtZW50cy5maWx0ZXIoZDNfZ2VvX2NsaXBTZWdtZW50TGVuZ3RoMSkpO31yZXR1cm4gY2xpcDt9O31mdW5jdGlvbiBkM19nZW9fY2xpcFNlZ21lbnRMZW5ndGgxKHNlZ21lbnQpe3JldHVybiBzZWdtZW50Lmxlbmd0aCA+IDE7fWZ1bmN0aW9uIGQzX2dlb19jbGlwQnVmZmVyTGlzdGVuZXIoKXt2YXIgbGluZXM9W10sbGluZTtyZXR1cm4ge2xpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtsaW5lcy5wdXNoKGxpbmUgPSBbXSk7fSxwb2ludDpmdW5jdGlvbiBwb2ludCjOuyzPhil7bGluZS5wdXNoKFvOuyzPhl0pO30sbGluZUVuZDpkM19ub29wLGJ1ZmZlcjpmdW5jdGlvbiBidWZmZXIoKXt2YXIgYnVmZmVyPWxpbmVzO2xpbmVzID0gW107bGluZSA9IG51bGw7cmV0dXJuIGJ1ZmZlcjt9LHJlam9pbjpmdW5jdGlvbiByZWpvaW4oKXtpZihsaW5lcy5sZW5ndGggPiAxKWxpbmVzLnB1c2gobGluZXMucG9wKCkuY29uY2F0KGxpbmVzLnNoaWZ0KCkpKTt9fTt9ZnVuY3Rpb24gZDNfZ2VvX2NsaXBTb3J0KGEsYil7cmV0dXJuICgoYSA9IGEueClbMF0gPCAwP2FbMV0gLSBoYWxmz4AgLSDOtTpoYWxmz4AgLSBhWzFdKSAtICgoYiA9IGIueClbMF0gPCAwP2JbMV0gLSBoYWxmz4AgLSDOtTpoYWxmz4AgLSBiWzFdKTt9dmFyIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuPWQzX2dlb19jbGlwKGQzX3RydWUsZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW5MaW5lLGQzX2dlb19jbGlwQW50aW1lcmlkaWFuSW50ZXJwb2xhdGUsWy3PgCwtz4AgLyAyXSk7ZnVuY3Rpb24gZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW5MaW5lKGxpc3RlbmVyKXt2YXIgzrswPU5hTizPhjA9TmFOLHPOuzA9TmFOLF9jbGVhbjtyZXR1cm4ge2xpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtsaXN0ZW5lci5saW5lU3RhcnQoKTtfY2xlYW4gPSAxO30scG9pbnQ6ZnVuY3Rpb24gcG9pbnQozrsxLM+GMSl7dmFyIHPOuzE9zrsxID4gMD/PgDotz4AsZM67PWFicyjOuzEgLSDOuzApO2lmKGFicyhkzrsgLSDPgCkgPCDOtSl7bGlzdGVuZXIucG9pbnQozrswLM+GMCA9ICjPhjAgKyDPhjEpIC8gMiA+IDA/aGFsZs+AOi1oYWxmz4ApO2xpc3RlbmVyLnBvaW50KHPOuzAsz4YwKTtsaXN0ZW5lci5saW5lRW5kKCk7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoc867MSzPhjApO2xpc3RlbmVyLnBvaW50KM67MSzPhjApO19jbGVhbiA9IDA7fWVsc2UgaWYoc867MCAhPT0gc867MSAmJiBkzrsgPj0gz4Ape2lmKGFicyjOuzAgLSBzzrswKSA8IM61Kc67MCAtPSBzzrswICogzrU7aWYoYWJzKM67MSAtIHPOuzEpIDwgzrUpzrsxIC09IHPOuzEgKiDOtTvPhjAgPSBkM19nZW9fY2xpcEFudGltZXJpZGlhbkludGVyc2VjdCjOuzAsz4YwLM67MSzPhjEpO2xpc3RlbmVyLnBvaW50KHPOuzAsz4YwKTtsaXN0ZW5lci5saW5lRW5kKCk7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoc867MSzPhjApO19jbGVhbiA9IDA7fWxpc3RlbmVyLnBvaW50KM67MCA9IM67MSzPhjAgPSDPhjEpO3POuzAgPSBzzrsxO30sbGluZUVuZDpmdW5jdGlvbiBsaW5lRW5kKCl7bGlzdGVuZXIubGluZUVuZCgpO867MCA9IM+GMCA9IE5hTjt9LGNsZWFuOmZ1bmN0aW9uIGNsZWFuKCl7cmV0dXJuIDIgLSBfY2xlYW47fX07fWZ1bmN0aW9uIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuSW50ZXJzZWN0KM67MCzPhjAszrsxLM+GMSl7dmFyIGNvc8+GMCxjb3PPhjEsc2luzrswX867MT1NYXRoLnNpbijOuzAgLSDOuzEpO3JldHVybiBhYnMoc2luzrswX867MSkgPiDOtT9NYXRoLmF0YW4oKE1hdGguc2luKM+GMCkgKiAoY29zz4YxID0gTWF0aC5jb3Moz4YxKSkgKiBNYXRoLnNpbijOuzEpIC0gTWF0aC5zaW4oz4YxKSAqIChjb3PPhjAgPSBNYXRoLmNvcyjPhjApKSAqIE1hdGguc2luKM67MCkpIC8gKGNvc8+GMCAqIGNvc8+GMSAqIHNpbs67MF/OuzEpKTooz4YwICsgz4YxKSAvIDI7fWZ1bmN0aW9uIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuSW50ZXJwb2xhdGUoZnJvbSx0byxkaXJlY3Rpb24sbGlzdGVuZXIpe3ZhciDPhjtpZihmcm9tID09IG51bGwpe8+GID0gZGlyZWN0aW9uICogaGFsZs+AO2xpc3RlbmVyLnBvaW50KC3PgCzPhik7bGlzdGVuZXIucG9pbnQoMCzPhik7bGlzdGVuZXIucG9pbnQoz4Asz4YpO2xpc3RlbmVyLnBvaW50KM+ALDApO2xpc3RlbmVyLnBvaW50KM+ALC3Phik7bGlzdGVuZXIucG9pbnQoMCwtz4YpO2xpc3RlbmVyLnBvaW50KC3PgCwtz4YpO2xpc3RlbmVyLnBvaW50KC3PgCwwKTtsaXN0ZW5lci5wb2ludCgtz4Asz4YpO31lbHNlIGlmKGFicyhmcm9tWzBdIC0gdG9bMF0pID4gzrUpe3ZhciBzPWZyb21bMF0gPCB0b1swXT/PgDotz4A7z4YgPSBkaXJlY3Rpb24gKiBzIC8gMjtsaXN0ZW5lci5wb2ludCgtcyzPhik7bGlzdGVuZXIucG9pbnQoMCzPhik7bGlzdGVuZXIucG9pbnQocyzPhik7fWVsc2Uge2xpc3RlbmVyLnBvaW50KHRvWzBdLHRvWzFdKTt9fWZ1bmN0aW9uIGQzX2dlb19wb2ludEluUG9seWdvbihwb2ludCxwb2x5Z29uKXt2YXIgbWVyaWRpYW49cG9pbnRbMF0scGFyYWxsZWw9cG9pbnRbMV0sbWVyaWRpYW5Ob3JtYWw9W01hdGguc2luKG1lcmlkaWFuKSwtTWF0aC5jb3MobWVyaWRpYW4pLDBdLHBvbGFyQW5nbGU9MCx3aW5kaW5nPTA7ZDNfZ2VvX2FyZWFSaW5nU3VtLnJlc2V0KCk7Zm9yKHZhciBpPTAsbj1wb2x5Z29uLmxlbmd0aDtpIDwgbjsrK2kpIHt2YXIgcmluZz1wb2x5Z29uW2ldLG09cmluZy5sZW5ndGg7aWYoIW0pY29udGludWU7dmFyIHBvaW50MD1yaW5nWzBdLM67MD1wb2ludDBbMF0sz4YwPXBvaW50MFsxXSAvIDIgKyDPgCAvIDQsc2luz4YwPU1hdGguc2luKM+GMCksY29zz4YwPU1hdGguY29zKM+GMCksaj0xO3doaWxlKHRydWUpIHtpZihqID09PSBtKWogPSAwO3BvaW50ID0gcmluZ1tqXTt2YXIgzrs9cG9pbnRbMF0sz4Y9cG9pbnRbMV0gLyAyICsgz4AgLyA0LHNpbs+GPU1hdGguc2luKM+GKSxjb3PPhj1NYXRoLmNvcyjPhiksZM67Pc67IC0gzrswLHNkzrs9ZM67ID49IDA/MTotMSxhZM67PXNkzrsgKiBkzrssYW50aW1lcmlkaWFuPWFkzrsgPiDPgCxrPXNpbs+GMCAqIHNpbs+GO2QzX2dlb19hcmVhUmluZ1N1bS5hZGQoTWF0aC5hdGFuMihrICogc2TOuyAqIE1hdGguc2luKGFkzrspLGNvc8+GMCAqIGNvc8+GICsgayAqIE1hdGguY29zKGFkzrspKSk7cG9sYXJBbmdsZSArPSBhbnRpbWVyaWRpYW4/ZM67ICsgc2TOuyAqIM+EOmTOuztpZihhbnRpbWVyaWRpYW4gXiDOuzAgPj0gbWVyaWRpYW4gXiDOuyA+PSBtZXJpZGlhbil7dmFyIGFyYz1kM19nZW9fY2FydGVzaWFuQ3Jvc3MoZDNfZ2VvX2NhcnRlc2lhbihwb2ludDApLGQzX2dlb19jYXJ0ZXNpYW4ocG9pbnQpKTtkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGFyYyk7dmFyIGludGVyc2VjdGlvbj1kM19nZW9fY2FydGVzaWFuQ3Jvc3MobWVyaWRpYW5Ob3JtYWwsYXJjKTtkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGludGVyc2VjdGlvbik7dmFyIM+GYXJjPShhbnRpbWVyaWRpYW4gXiBkzrsgPj0gMD8tMToxKSAqIGQzX2FzaW4oaW50ZXJzZWN0aW9uWzJdKTtpZihwYXJhbGxlbCA+IM+GYXJjIHx8IHBhcmFsbGVsID09PSDPhmFyYyAmJiAoYXJjWzBdIHx8IGFyY1sxXSkpe3dpbmRpbmcgKz0gYW50aW1lcmlkaWFuIF4gZM67ID49IDA/MTotMTt9fWlmKCEgaisrKWJyZWFrO867MCA9IM67LHNpbs+GMCA9IHNpbs+GLGNvc8+GMCA9IGNvc8+GLHBvaW50MCA9IHBvaW50O319cmV0dXJuIChwb2xhckFuZ2xlIDwgLc61IHx8IHBvbGFyQW5nbGUgPCDOtSAmJiBkM19nZW9fYXJlYVJpbmdTdW0gPCAwKSBeIHdpbmRpbmcgJiAxO31mdW5jdGlvbiBkM19nZW9fY2xpcENpcmNsZShyYWRpdXMpe3ZhciBjcj1NYXRoLmNvcyhyYWRpdXMpLHNtYWxsUmFkaXVzPWNyID4gMCxub3RIZW1pc3BoZXJlPWFicyhjcikgPiDOtSxpbnRlcnBvbGF0ZT1kM19nZW9fY2lyY2xlSW50ZXJwb2xhdGUocmFkaXVzLDYgKiBkM19yYWRpYW5zKTtyZXR1cm4gZDNfZ2VvX2NsaXAodmlzaWJsZSxjbGlwTGluZSxpbnRlcnBvbGF0ZSxzbWFsbFJhZGl1cz9bMCwtcmFkaXVzXTpbLc+ALHJhZGl1cyAtIM+AXSk7ZnVuY3Rpb24gdmlzaWJsZSjOuyzPhil7cmV0dXJuIE1hdGguY29zKM67KSAqIE1hdGguY29zKM+GKSA+IGNyO31mdW5jdGlvbiBjbGlwTGluZShsaXN0ZW5lcil7dmFyIHBvaW50MCxjMCx2MCx2MDAsX2NsZWFuMjtyZXR1cm4ge2xpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXt2MDAgPSB2MCA9IGZhbHNlO19jbGVhbjIgPSAxO30scG9pbnQ6ZnVuY3Rpb24gcG9pbnQozrssz4Ype3ZhciBwb2ludDE9W867LM+GXSxwb2ludDIsdj12aXNpYmxlKM67LM+GKSxjPXNtYWxsUmFkaXVzP3Y/MDpjb2RlKM67LM+GKTp2P2NvZGUozrsgKyAozrsgPCAwP8+AOi3PgCksz4YpOjA7aWYoIXBvaW50MCAmJiAodjAwID0gdjAgPSB2KSlsaXN0ZW5lci5saW5lU3RhcnQoKTtpZih2ICE9PSB2MCl7cG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MCxwb2ludDEpO2lmKGQzX2dlb19zcGhlcmljYWxFcXVhbChwb2ludDAscG9pbnQyKSB8fCBkM19nZW9fc3BoZXJpY2FsRXF1YWwocG9pbnQxLHBvaW50Mikpe3BvaW50MVswXSArPSDOtTtwb2ludDFbMV0gKz0gzrU7diA9IHZpc2libGUocG9pbnQxWzBdLHBvaW50MVsxXSk7fX1pZih2ICE9PSB2MCl7X2NsZWFuMiA9IDA7aWYodil7bGlzdGVuZXIubGluZVN0YXJ0KCk7cG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MSxwb2ludDApO2xpc3RlbmVyLnBvaW50KHBvaW50MlswXSxwb2ludDJbMV0pO31lbHNlIHtwb2ludDIgPSBpbnRlcnNlY3QocG9pbnQwLHBvaW50MSk7bGlzdGVuZXIucG9pbnQocG9pbnQyWzBdLHBvaW50MlsxXSk7bGlzdGVuZXIubGluZUVuZCgpO31wb2ludDAgPSBwb2ludDI7fWVsc2UgaWYobm90SGVtaXNwaGVyZSAmJiBwb2ludDAgJiYgc21hbGxSYWRpdXMgXiB2KXt2YXIgdDtpZighKGMgJiBjMCkgJiYgKHQgPSBpbnRlcnNlY3QocG9pbnQxLHBvaW50MCx0cnVlKSkpe19jbGVhbjIgPSAwO2lmKHNtYWxsUmFkaXVzKXtsaXN0ZW5lci5saW5lU3RhcnQoKTtsaXN0ZW5lci5wb2ludCh0WzBdWzBdLHRbMF1bMV0pO2xpc3RlbmVyLnBvaW50KHRbMV1bMF0sdFsxXVsxXSk7bGlzdGVuZXIubGluZUVuZCgpO31lbHNlIHtsaXN0ZW5lci5wb2ludCh0WzFdWzBdLHRbMV1bMV0pO2xpc3RlbmVyLmxpbmVFbmQoKTtsaXN0ZW5lci5saW5lU3RhcnQoKTtsaXN0ZW5lci5wb2ludCh0WzBdWzBdLHRbMF1bMV0pO319fWlmKHYgJiYgKCFwb2ludDAgfHwgIWQzX2dlb19zcGhlcmljYWxFcXVhbChwb2ludDAscG9pbnQxKSkpe2xpc3RlbmVyLnBvaW50KHBvaW50MVswXSxwb2ludDFbMV0pO31wb2ludDAgPSBwb2ludDEsdjAgPSB2LGMwID0gYzt9LGxpbmVFbmQ6ZnVuY3Rpb24gbGluZUVuZCgpe2lmKHYwKWxpc3RlbmVyLmxpbmVFbmQoKTtwb2ludDAgPSBudWxsO30sY2xlYW46ZnVuY3Rpb24gY2xlYW4oKXtyZXR1cm4gX2NsZWFuMiB8ICh2MDAgJiYgdjApIDw8IDE7fX07fWZ1bmN0aW9uIGludGVyc2VjdChhLGIsdHdvKXt2YXIgcGE9ZDNfZ2VvX2NhcnRlc2lhbihhKSxwYj1kM19nZW9fY2FydGVzaWFuKGIpO3ZhciBuMT1bMSwwLDBdLG4yPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhwYSxwYiksbjJuMj1kM19nZW9fY2FydGVzaWFuRG90KG4yLG4yKSxuMW4yPW4yWzBdLGRldGVybWluYW50PW4ybjIgLSBuMW4yICogbjFuMjtpZighZGV0ZXJtaW5hbnQpcmV0dXJuICF0d28gJiYgYTt2YXIgYzE9Y3IgKiBuMm4yIC8gZGV0ZXJtaW5hbnQsYzI9LWNyICogbjFuMiAvIGRldGVybWluYW50LG4xeG4yPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhuMSxuMiksQT1kM19nZW9fY2FydGVzaWFuU2NhbGUobjEsYzEpLEI9ZDNfZ2VvX2NhcnRlc2lhblNjYWxlKG4yLGMyKTtkM19nZW9fY2FydGVzaWFuQWRkKEEsQik7dmFyIHU9bjF4bjIsdz1kM19nZW9fY2FydGVzaWFuRG90KEEsdSksdXU9ZDNfZ2VvX2NhcnRlc2lhbkRvdCh1LHUpLHQyPXcgKiB3IC0gdXUgKiAoZDNfZ2VvX2NhcnRlc2lhbkRvdChBLEEpIC0gMSk7aWYodDIgPCAwKXJldHVybjt2YXIgdD1NYXRoLnNxcnQodDIpLHE9ZDNfZ2VvX2NhcnRlc2lhblNjYWxlKHUsKC13IC0gdCkgLyB1dSk7ZDNfZ2VvX2NhcnRlc2lhbkFkZChxLEEpO3EgPSBkM19nZW9fc3BoZXJpY2FsKHEpO2lmKCF0d28pcmV0dXJuIHE7dmFyIM67MD1hWzBdLM67MT1iWzBdLM+GMD1hWzFdLM+GMT1iWzFdLHo7aWYozrsxIDwgzrswKXogPSDOuzAszrswID0gzrsxLM67MSA9IHo7dmFyIM60zrs9zrsxIC0gzrswLHBvbGFyPWFicyjOtM67IC0gz4ApIDwgzrUsbWVyaWRpYW49cG9sYXIgfHwgzrTOuyA8IM61O2lmKCFwb2xhciAmJiDPhjEgPCDPhjApeiA9IM+GMCzPhjAgPSDPhjEsz4YxID0gejtpZihtZXJpZGlhbj9wb2xhcj/PhjAgKyDPhjEgPiAwIF4gcVsxXSA8IChhYnMocVswXSAtIM67MCkgPCDOtT/PhjA6z4YxKTrPhjAgPD0gcVsxXSAmJiBxWzFdIDw9IM+GMTrOtM67ID4gz4AgXiAozrswIDw9IHFbMF0gJiYgcVswXSA8PSDOuzEpKXt2YXIgcTE9ZDNfZ2VvX2NhcnRlc2lhblNjYWxlKHUsKC13ICsgdCkgLyB1dSk7ZDNfZ2VvX2NhcnRlc2lhbkFkZChxMSxBKTtyZXR1cm4gW3EsZDNfZ2VvX3NwaGVyaWNhbChxMSldO319ZnVuY3Rpb24gY29kZSjOuyzPhil7dmFyIHI9c21hbGxSYWRpdXM/cmFkaXVzOs+AIC0gcmFkaXVzLGNvZGU9MDtpZijOuyA8IC1yKWNvZGUgfD0gMTtlbHNlIGlmKM67ID4gciljb2RlIHw9IDI7aWYoz4YgPCAtciljb2RlIHw9IDQ7ZWxzZSBpZijPhiA+IHIpY29kZSB8PSA4O3JldHVybiBjb2RlO319ZnVuY3Rpb24gZDNfZ2VvbV9jbGlwTGluZSh4MCx5MCx4MSx5MSl7cmV0dXJuIGZ1bmN0aW9uKGxpbmUpe3ZhciBhPWxpbmUuYSxiPWxpbmUuYixheD1hLngsYXk9YS55LGJ4PWIueCxieT1iLnksdDA9MCx0MT0xLGR4PWJ4IC0gYXgsZHk9YnkgLSBheSxyO3IgPSB4MCAtIGF4O2lmKCFkeCAmJiByID4gMClyZXR1cm47ciAvPSBkeDtpZihkeCA8IDApe2lmKHIgPCB0MClyZXR1cm47aWYociA8IHQxKXQxID0gcjt9ZWxzZSBpZihkeCA+IDApe2lmKHIgPiB0MSlyZXR1cm47aWYociA+IHQwKXQwID0gcjt9ciA9IHgxIC0gYXg7aWYoIWR4ICYmIHIgPCAwKXJldHVybjtyIC89IGR4O2lmKGR4IDwgMCl7aWYociA+IHQxKXJldHVybjtpZihyID4gdDApdDAgPSByO31lbHNlIGlmKGR4ID4gMCl7aWYociA8IHQwKXJldHVybjtpZihyIDwgdDEpdDEgPSByO31yID0geTAgLSBheTtpZighZHkgJiYgciA+IDApcmV0dXJuO3IgLz0gZHk7aWYoZHkgPCAwKXtpZihyIDwgdDApcmV0dXJuO2lmKHIgPCB0MSl0MSA9IHI7fWVsc2UgaWYoZHkgPiAwKXtpZihyID4gdDEpcmV0dXJuO2lmKHIgPiB0MCl0MCA9IHI7fXIgPSB5MSAtIGF5O2lmKCFkeSAmJiByIDwgMClyZXR1cm47ciAvPSBkeTtpZihkeSA8IDApe2lmKHIgPiB0MSlyZXR1cm47aWYociA+IHQwKXQwID0gcjt9ZWxzZSBpZihkeSA+IDApe2lmKHIgPCB0MClyZXR1cm47aWYociA8IHQxKXQxID0gcjt9aWYodDAgPiAwKWxpbmUuYSA9IHt4OmF4ICsgdDAgKiBkeCx5OmF5ICsgdDAgKiBkeX07aWYodDEgPCAxKWxpbmUuYiA9IHt4OmF4ICsgdDEgKiBkeCx5OmF5ICsgdDEgKiBkeX07cmV0dXJuIGxpbmU7fTt9dmFyIGQzX2dlb19jbGlwRXh0ZW50TUFYPTFlOTtkMy5nZW8uY2xpcEV4dGVudCA9IGZ1bmN0aW9uKCl7dmFyIHgwLHkwLHgxLHkxLF9zdHJlYW0sY2xpcCxjbGlwRXh0ZW50PXtzdHJlYW06ZnVuY3Rpb24gc3RyZWFtKG91dHB1dCl7aWYoX3N0cmVhbSlfc3RyZWFtLnZhbGlkID0gZmFsc2U7X3N0cmVhbSA9IGNsaXAob3V0cHV0KTtfc3RyZWFtLnZhbGlkID0gdHJ1ZTtyZXR1cm4gX3N0cmVhbTt9LGV4dGVudDpmdW5jdGlvbiBleHRlbnQoXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFtbeDAseTBdLFt4MSx5MV1dO2NsaXAgPSBkM19nZW9fY2xpcEV4dGVudCh4MCA9ICtfWzBdWzBdLHkwID0gK19bMF1bMV0seDEgPSArX1sxXVswXSx5MSA9ICtfWzFdWzFdKTtpZihfc3RyZWFtKV9zdHJlYW0udmFsaWQgPSBmYWxzZSxfc3RyZWFtID0gbnVsbDtyZXR1cm4gY2xpcEV4dGVudDt9fTtyZXR1cm4gY2xpcEV4dGVudC5leHRlbnQoW1swLDBdLFs5NjAsNTAwXV0pO307ZnVuY3Rpb24gZDNfZ2VvX2NsaXBFeHRlbnQoeDAseTAseDEseTEpe3JldHVybiBmdW5jdGlvbihsaXN0ZW5lcil7dmFyIGxpc3RlbmVyXz1saXN0ZW5lcixidWZmZXJMaXN0ZW5lcj1kM19nZW9fY2xpcEJ1ZmZlckxpc3RlbmVyKCksY2xpcExpbmU9ZDNfZ2VvbV9jbGlwTGluZSh4MCx5MCx4MSx5MSksc2VnbWVudHMscG9seWdvbixyaW5nO3ZhciBjbGlwPXtwb2ludDpwb2ludCxsaW5lU3RhcnQ6bGluZVN0YXJ0LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7bGlzdGVuZXIgPSBidWZmZXJMaXN0ZW5lcjtzZWdtZW50cyA9IFtdO3BvbHlnb24gPSBbXTtjbGVhbiA9IHRydWU7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtsaXN0ZW5lciA9IGxpc3RlbmVyXztzZWdtZW50cyA9IGQzLm1lcmdlKHNlZ21lbnRzKTt2YXIgY2xpcFN0YXJ0SW5zaWRlPWluc2lkZVBvbHlnb24oW3gwLHkxXSksaW5zaWRlPWNsZWFuICYmIGNsaXBTdGFydEluc2lkZSx2aXNpYmxlPXNlZ21lbnRzLmxlbmd0aDtpZihpbnNpZGUgfHwgdmlzaWJsZSl7bGlzdGVuZXIucG9seWdvblN0YXJ0KCk7aWYoaW5zaWRlKXtsaXN0ZW5lci5saW5lU3RhcnQoKTtpbnRlcnBvbGF0ZShudWxsLG51bGwsMSxsaXN0ZW5lcik7bGlzdGVuZXIubGluZUVuZCgpO31pZih2aXNpYmxlKXtkM19nZW9fY2xpcFBvbHlnb24oc2VnbWVudHMsY29tcGFyZSxjbGlwU3RhcnRJbnNpZGUsaW50ZXJwb2xhdGUsbGlzdGVuZXIpO31saXN0ZW5lci5wb2x5Z29uRW5kKCk7fXNlZ21lbnRzID0gcG9seWdvbiA9IHJpbmcgPSBudWxsO319O2Z1bmN0aW9uIGluc2lkZVBvbHlnb24ocCl7dmFyIHduPTAsbj1wb2x5Z29uLmxlbmd0aCx5PXBbMV07Zm9yKHZhciBpPTA7aSA8IG47KytpKSB7Zm9yKHZhciBqPTEsdj1wb2x5Z29uW2ldLG09di5sZW5ndGgsYT12WzBdLGI7aiA8IG07KytqKSB7YiA9IHZbal07aWYoYVsxXSA8PSB5KXtpZihiWzFdID4geSAmJiBkM19jcm9zczJkKGEsYixwKSA+IDApKyt3bjt9ZWxzZSB7aWYoYlsxXSA8PSB5ICYmIGQzX2Nyb3NzMmQoYSxiLHApIDwgMCktLXduO31hID0gYjt9fXJldHVybiB3biAhPT0gMDt9ZnVuY3Rpb24gaW50ZXJwb2xhdGUoZnJvbSx0byxkaXJlY3Rpb24sbGlzdGVuZXIpe3ZhciBhPTAsYTE9MDtpZihmcm9tID09IG51bGwgfHwgKGEgPSBjb3JuZXIoZnJvbSxkaXJlY3Rpb24pKSAhPT0gKGExID0gY29ybmVyKHRvLGRpcmVjdGlvbikpIHx8IGNvbXBhcmVQb2ludHMoZnJvbSx0bykgPCAwIF4gZGlyZWN0aW9uID4gMCl7ZG8ge2xpc3RlbmVyLnBvaW50KGEgPT09IDAgfHwgYSA9PT0gMz94MDp4MSxhID4gMT95MTp5MCk7fXdoaWxlKChhID0gKGEgKyBkaXJlY3Rpb24gKyA0KSAlIDQpICE9PSBhMSk7fWVsc2Uge2xpc3RlbmVyLnBvaW50KHRvWzBdLHRvWzFdKTt9fWZ1bmN0aW9uIHBvaW50VmlzaWJsZSh4LHkpe3JldHVybiB4MCA8PSB4ICYmIHggPD0geDEgJiYgeTAgPD0geSAmJiB5IDw9IHkxO31mdW5jdGlvbiBwb2ludCh4LHkpe2lmKHBvaW50VmlzaWJsZSh4LHkpKWxpc3RlbmVyLnBvaW50KHgseSk7fXZhciB4X18seV9fLHZfXyx4Xyx5Xyx2XyxmaXJzdCxjbGVhbjtmdW5jdGlvbiBsaW5lU3RhcnQoKXtjbGlwLnBvaW50ID0gbGluZVBvaW50O2lmKHBvbHlnb24pcG9seWdvbi5wdXNoKHJpbmcgPSBbXSk7Zmlyc3QgPSB0cnVlO3ZfID0gZmFsc2U7eF8gPSB5XyA9IE5hTjt9ZnVuY3Rpb24gbGluZUVuZCgpe2lmKHNlZ21lbnRzKXtsaW5lUG9pbnQoeF9fLHlfXyk7aWYodl9fICYmIHZfKWJ1ZmZlckxpc3RlbmVyLnJlam9pbigpO3NlZ21lbnRzLnB1c2goYnVmZmVyTGlzdGVuZXIuYnVmZmVyKCkpO31jbGlwLnBvaW50ID0gcG9pbnQ7aWYodl8pbGlzdGVuZXIubGluZUVuZCgpO31mdW5jdGlvbiBsaW5lUG9pbnQoeCx5KXt4ID0gTWF0aC5tYXgoLWQzX2dlb19jbGlwRXh0ZW50TUFYLE1hdGgubWluKGQzX2dlb19jbGlwRXh0ZW50TUFYLHgpKTt5ID0gTWF0aC5tYXgoLWQzX2dlb19jbGlwRXh0ZW50TUFYLE1hdGgubWluKGQzX2dlb19jbGlwRXh0ZW50TUFYLHkpKTt2YXIgdj1wb2ludFZpc2libGUoeCx5KTtpZihwb2x5Z29uKXJpbmcucHVzaChbeCx5XSk7aWYoZmlyc3Qpe3hfXyA9IHgseV9fID0geSx2X18gPSB2O2ZpcnN0ID0gZmFsc2U7aWYodil7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoeCx5KTt9fWVsc2Uge2lmKHYgJiYgdl8pbGlzdGVuZXIucG9pbnQoeCx5KTtlbHNlIHt2YXIgbD17YTp7eDp4Xyx5OnlffSxiOnt4OngseTp5fX07aWYoY2xpcExpbmUobCkpe2lmKCF2Xyl7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQobC5hLngsbC5hLnkpO31saXN0ZW5lci5wb2ludChsLmIueCxsLmIueSk7aWYoIXYpbGlzdGVuZXIubGluZUVuZCgpO2NsZWFuID0gZmFsc2U7fWVsc2UgaWYodil7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoeCx5KTtjbGVhbiA9IGZhbHNlO319fXhfID0geCx5XyA9IHksdl8gPSB2O31yZXR1cm4gY2xpcDt9O2Z1bmN0aW9uIGNvcm5lcihwLGRpcmVjdGlvbil7cmV0dXJuIGFicyhwWzBdIC0geDApIDwgzrU/ZGlyZWN0aW9uID4gMD8wOjM6YWJzKHBbMF0gLSB4MSkgPCDOtT9kaXJlY3Rpb24gPiAwPzI6MTphYnMocFsxXSAtIHkwKSA8IM61P2RpcmVjdGlvbiA+IDA/MTowOmRpcmVjdGlvbiA+IDA/MzoyO31mdW5jdGlvbiBjb21wYXJlKGEsYil7cmV0dXJuIGNvbXBhcmVQb2ludHMoYS54LGIueCk7fWZ1bmN0aW9uIGNvbXBhcmVQb2ludHMoYSxiKXt2YXIgY2E9Y29ybmVyKGEsMSksY2I9Y29ybmVyKGIsMSk7cmV0dXJuIGNhICE9PSBjYj9jYSAtIGNiOmNhID09PSAwP2JbMV0gLSBhWzFdOmNhID09PSAxP2FbMF0gLSBiWzBdOmNhID09PSAyP2FbMV0gLSBiWzFdOmJbMF0gLSBhWzBdO319ZnVuY3Rpb24gZDNfZ2VvX2NvbmljKHByb2plY3RBdCl7dmFyIM+GMD0wLM+GMT3PgCAvIDMsbT1kM19nZW9fcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KSxwPW0oz4YwLM+GMSk7cC5wYXJhbGxlbHMgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW8+GMCAvIM+AICogMTgwLM+GMSAvIM+AICogMTgwXTtyZXR1cm4gbSjPhjAgPSBfWzBdICogz4AgLyAxODAsz4YxID0gX1sxXSAqIM+AIC8gMTgwKTt9O3JldHVybiBwO31mdW5jdGlvbiBkM19nZW9fY29uaWNFcXVhbEFyZWEoz4YwLM+GMSl7dmFyIHNpbs+GMD1NYXRoLnNpbijPhjApLG49KHNpbs+GMCArIE1hdGguc2luKM+GMSkpIC8gMixDPTEgKyBzaW7PhjAgKiAoMiAqIG4gLSBzaW7PhjApLM+BMD1NYXRoLnNxcnQoQykgLyBuO2Z1bmN0aW9uIGZvcndhcmQozrssz4Ype3ZhciDPgT1NYXRoLnNxcnQoQyAtIDIgKiBuICogTWF0aC5zaW4oz4YpKSAvIG47cmV0dXJuIFvPgSAqIE1hdGguc2luKM67ICo9IG4pLM+BMCAtIM+BICogTWF0aC5jb3MozrspXTt9Zm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbih4LHkpe3ZhciDPgTBfeT3PgTAgLSB5O3JldHVybiBbTWF0aC5hdGFuMih4LM+BMF95KSAvIG4sZDNfYXNpbigoQyAtICh4ICogeCArIM+BMF95ICogz4EwX3kpICogbiAqIG4pIC8gKDIgKiBuKSldO307cmV0dXJuIGZvcndhcmQ7fShkMy5nZW8uY29uaWNFcXVhbEFyZWEgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fY29uaWMoZDNfZ2VvX2NvbmljRXF1YWxBcmVhKTt9KS5yYXcgPSBkM19nZW9fY29uaWNFcXVhbEFyZWE7ZDMuZ2VvLmFsYmVycyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApO307ZDMuZ2VvLmFsYmVyc1VzYSA9IGZ1bmN0aW9uKCl7dmFyIGxvd2VyNDg9ZDMuZ2VvLmFsYmVycygpO3ZhciBhbGFza2E9ZDMuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKTt2YXIgaGF3YWlpPWQzLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKTt2YXIgX3BvaW50LHBvaW50U3RyZWFtPXtwb2ludDpmdW5jdGlvbiBwb2ludCh4LHkpe19wb2ludCA9IFt4LHldO319LGxvd2VyNDhQb2ludCxhbGFza2FQb2ludCxoYXdhaWlQb2ludDtmdW5jdGlvbiBhbGJlcnNVc2EoY29vcmRpbmF0ZXMpe3ZhciB4PWNvb3JkaW5hdGVzWzBdLHk9Y29vcmRpbmF0ZXNbMV07X3BvaW50ID0gbnVsbDsobG93ZXI0OFBvaW50KHgseSksX3BvaW50KSB8fCAoYWxhc2thUG9pbnQoeCx5KSxfcG9pbnQpIHx8IGhhd2FpaVBvaW50KHgseSk7cmV0dXJuIF9wb2ludDt9YWxiZXJzVXNhLmludmVydCA9IGZ1bmN0aW9uKGNvb3JkaW5hdGVzKXt2YXIgaz1sb3dlcjQ4LnNjYWxlKCksdD1sb3dlcjQ4LnRyYW5zbGF0ZSgpLHg9KGNvb3JkaW5hdGVzWzBdIC0gdFswXSkgLyBrLHk9KGNvb3JkaW5hdGVzWzFdIC0gdFsxXSkgLyBrO3JldHVybiAoeSA+PSAuMTIgJiYgeSA8IC4yMzQgJiYgeCA+PSAtLjQyNSAmJiB4IDwgLS4yMTQ/YWxhc2thOnkgPj0gLjE2NiAmJiB5IDwgLjIzNCAmJiB4ID49IC0uMjE0ICYmIHggPCAtLjExNT9oYXdhaWk6bG93ZXI0OCkuaW52ZXJ0KGNvb3JkaW5hdGVzKTt9O2FsYmVyc1VzYS5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pe3ZhciBsb3dlcjQ4U3RyZWFtPWxvd2VyNDguc3RyZWFtKHN0cmVhbSksYWxhc2thU3RyZWFtPWFsYXNrYS5zdHJlYW0oc3RyZWFtKSxoYXdhaWlTdHJlYW09aGF3YWlpLnN0cmVhbShzdHJlYW0pO3JldHVybiB7cG9pbnQ6ZnVuY3Rpb24gcG9pbnQoeCx5KXtsb3dlcjQ4U3RyZWFtLnBvaW50KHgseSk7YWxhc2thU3RyZWFtLnBvaW50KHgseSk7aGF3YWlpU3RyZWFtLnBvaW50KHgseSk7fSxzcGhlcmU6ZnVuY3Rpb24gc3BoZXJlKCl7bG93ZXI0OFN0cmVhbS5zcGhlcmUoKTthbGFza2FTdHJlYW0uc3BoZXJlKCk7aGF3YWlpU3RyZWFtLnNwaGVyZSgpO30sbGluZVN0YXJ0OmZ1bmN0aW9uIGxpbmVTdGFydCgpe2xvd2VyNDhTdHJlYW0ubGluZVN0YXJ0KCk7YWxhc2thU3RyZWFtLmxpbmVTdGFydCgpO2hhd2FpaVN0cmVhbS5saW5lU3RhcnQoKTt9LGxpbmVFbmQ6ZnVuY3Rpb24gbGluZUVuZCgpe2xvd2VyNDhTdHJlYW0ubGluZUVuZCgpO2FsYXNrYVN0cmVhbS5saW5lRW5kKCk7aGF3YWlpU3RyZWFtLmxpbmVFbmQoKTt9LHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtsb3dlcjQ4U3RyZWFtLnBvbHlnb25TdGFydCgpO2FsYXNrYVN0cmVhbS5wb2x5Z29uU3RhcnQoKTtoYXdhaWlTdHJlYW0ucG9seWdvblN0YXJ0KCk7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtsb3dlcjQ4U3RyZWFtLnBvbHlnb25FbmQoKTthbGFza2FTdHJlYW0ucG9seWdvbkVuZCgpO2hhd2FpaVN0cmVhbS5wb2x5Z29uRW5kKCk7fX07fTthbGJlcnNVc2EucHJlY2lzaW9uID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGxvd2VyNDgucHJlY2lzaW9uKCk7bG93ZXI0OC5wcmVjaXNpb24oXyk7YWxhc2thLnByZWNpc2lvbihfKTtoYXdhaWkucHJlY2lzaW9uKF8pO3JldHVybiBhbGJlcnNVc2E7fTthbGJlcnNVc2Euc2NhbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbG93ZXI0OC5zY2FsZSgpO2xvd2VyNDguc2NhbGUoXyk7YWxhc2thLnNjYWxlKF8gKiAuMzUpO2hhd2FpaS5zY2FsZShfKTtyZXR1cm4gYWxiZXJzVXNhLnRyYW5zbGF0ZShsb3dlcjQ4LnRyYW5zbGF0ZSgpKTt9O2FsYmVyc1VzYS50cmFuc2xhdGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbG93ZXI0OC50cmFuc2xhdGUoKTt2YXIgaz1sb3dlcjQ4LnNjYWxlKCkseD0rX1swXSx5PStfWzFdO2xvd2VyNDhQb2ludCA9IGxvd2VyNDgudHJhbnNsYXRlKF8pLmNsaXBFeHRlbnQoW1t4IC0gLjQ1NSAqIGsseSAtIC4yMzggKiBrXSxbeCArIC40NTUgKiBrLHkgKyAuMjM4ICoga11dKS5zdHJlYW0ocG9pbnRTdHJlYW0pLnBvaW50O2FsYXNrYVBvaW50ID0gYWxhc2thLnRyYW5zbGF0ZShbeCAtIC4zMDcgKiBrLHkgKyAuMjAxICoga10pLmNsaXBFeHRlbnQoW1t4IC0gLjQyNSAqIGsgKyDOtSx5ICsgLjEyICogayArIM61XSxbeCAtIC4yMTQgKiBrIC0gzrUseSArIC4yMzQgKiBrIC0gzrVdXSkuc3RyZWFtKHBvaW50U3RyZWFtKS5wb2ludDtoYXdhaWlQb2ludCA9IGhhd2FpaS50cmFuc2xhdGUoW3ggLSAuMjA1ICogayx5ICsgLjIxMiAqIGtdKS5jbGlwRXh0ZW50KFtbeCAtIC4yMTQgKiBrICsgzrUseSArIC4xNjYgKiBrICsgzrVdLFt4IC0gLjExNSAqIGsgLSDOtSx5ICsgLjIzNCAqIGsgLSDOtV1dKS5zdHJlYW0ocG9pbnRTdHJlYW0pLnBvaW50O3JldHVybiBhbGJlcnNVc2E7fTtyZXR1cm4gYWxiZXJzVXNhLnNjYWxlKDEwNzApO307dmFyIGQzX2dlb19wYXRoQXJlYVN1bSxkM19nZW9fcGF0aEFyZWFQb2x5Z29uLGQzX2dlb19wYXRoQXJlYT17cG9pbnQ6ZDNfbm9vcCxsaW5lU3RhcnQ6ZDNfbm9vcCxsaW5lRW5kOmQzX25vb3AscG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe2QzX2dlb19wYXRoQXJlYVBvbHlnb24gPSAwO2QzX2dlb19wYXRoQXJlYS5saW5lU3RhcnQgPSBkM19nZW9fcGF0aEFyZWFSaW5nU3RhcnQ7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fcGF0aEFyZWEubGluZVN0YXJ0ID0gZDNfZ2VvX3BhdGhBcmVhLmxpbmVFbmQgPSBkM19nZW9fcGF0aEFyZWEucG9pbnQgPSBkM19ub29wO2QzX2dlb19wYXRoQXJlYVN1bSArPSBhYnMoZDNfZ2VvX3BhdGhBcmVhUG9seWdvbiAvIDIpO319O2Z1bmN0aW9uIGQzX2dlb19wYXRoQXJlYVJpbmdTdGFydCgpe3ZhciB4MDAseTAwLHgwLHkwO2QzX2dlb19wYXRoQXJlYS5wb2ludCA9IGZ1bmN0aW9uKHgseSl7ZDNfZ2VvX3BhdGhBcmVhLnBvaW50ID0gbmV4dFBvaW50O3gwMCA9IHgwID0geCx5MDAgPSB5MCA9IHk7fTtmdW5jdGlvbiBuZXh0UG9pbnQoeCx5KXtkM19nZW9fcGF0aEFyZWFQb2x5Z29uICs9IHkwICogeCAtIHgwICogeTt4MCA9IHgseTAgPSB5O31kM19nZW9fcGF0aEFyZWEubGluZUVuZCA9IGZ1bmN0aW9uKCl7bmV4dFBvaW50KHgwMCx5MDApO307fXZhciBkM19nZW9fcGF0aEJvdW5kc1gwLGQzX2dlb19wYXRoQm91bmRzWTAsZDNfZ2VvX3BhdGhCb3VuZHNYMSxkM19nZW9fcGF0aEJvdW5kc1kxO3ZhciBkM19nZW9fcGF0aEJvdW5kcz17cG9pbnQ6ZDNfZ2VvX3BhdGhCb3VuZHNQb2ludCxsaW5lU3RhcnQ6ZDNfbm9vcCxsaW5lRW5kOmQzX25vb3AscG9seWdvblN0YXJ0OmQzX25vb3AscG9seWdvbkVuZDpkM19ub29wfTtmdW5jdGlvbiBkM19nZW9fcGF0aEJvdW5kc1BvaW50KHgseSl7aWYoeCA8IGQzX2dlb19wYXRoQm91bmRzWDApZDNfZ2VvX3BhdGhCb3VuZHNYMCA9IHg7aWYoeCA+IGQzX2dlb19wYXRoQm91bmRzWDEpZDNfZ2VvX3BhdGhCb3VuZHNYMSA9IHg7aWYoeSA8IGQzX2dlb19wYXRoQm91bmRzWTApZDNfZ2VvX3BhdGhCb3VuZHNZMCA9IHk7aWYoeSA+IGQzX2dlb19wYXRoQm91bmRzWTEpZDNfZ2VvX3BhdGhCb3VuZHNZMSA9IHk7fWZ1bmN0aW9uIGQzX2dlb19wYXRoQnVmZmVyKCl7dmFyIHBvaW50Q2lyY2xlPWQzX2dlb19wYXRoQnVmZmVyQ2lyY2xlKDQuNSksYnVmZmVyPVtdO3ZhciBzdHJlYW09e3BvaW50OnBvaW50LGxpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtzdHJlYW0ucG9pbnQgPSBwb2ludExpbmVTdGFydDt9LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7c3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kUG9seWdvbjt9LHBvbHlnb25FbmQ6ZnVuY3Rpb24gcG9seWdvbkVuZCgpe3N0cmVhbS5saW5lRW5kID0gbGluZUVuZDtzdHJlYW0ucG9pbnQgPSBwb2ludDt9LHBvaW50UmFkaXVzOmZ1bmN0aW9uIHBvaW50UmFkaXVzKF8pe3BvaW50Q2lyY2xlID0gZDNfZ2VvX3BhdGhCdWZmZXJDaXJjbGUoXyk7cmV0dXJuIHN0cmVhbTt9LHJlc3VsdDpmdW5jdGlvbiByZXN1bHQoKXtpZihidWZmZXIubGVuZ3RoKXt2YXIgcmVzdWx0PWJ1ZmZlci5qb2luKFwiXCIpO2J1ZmZlciA9IFtdO3JldHVybiByZXN1bHQ7fX19O2Z1bmN0aW9uIHBvaW50KHgseSl7YnVmZmVyLnB1c2goXCJNXCIseCxcIixcIix5LHBvaW50Q2lyY2xlKTt9ZnVuY3Rpb24gcG9pbnRMaW5lU3RhcnQoeCx5KXtidWZmZXIucHVzaChcIk1cIix4LFwiLFwiLHkpO3N0cmVhbS5wb2ludCA9IHBvaW50TGluZTt9ZnVuY3Rpb24gcG9pbnRMaW5lKHgseSl7YnVmZmVyLnB1c2goXCJMXCIseCxcIixcIix5KTt9ZnVuY3Rpb24gbGluZUVuZCgpe3N0cmVhbS5wb2ludCA9IHBvaW50O31mdW5jdGlvbiBsaW5lRW5kUG9seWdvbigpe2J1ZmZlci5wdXNoKFwiWlwiKTt9cmV0dXJuIHN0cmVhbTt9ZnVuY3Rpb24gZDNfZ2VvX3BhdGhCdWZmZXJDaXJjbGUocmFkaXVzKXtyZXR1cm4gXCJtMCxcIiArIHJhZGl1cyArIFwiYVwiICsgcmFkaXVzICsgXCIsXCIgKyByYWRpdXMgKyBcIiAwIDEsMSAwLFwiICsgLTIgKiByYWRpdXMgKyBcImFcIiArIHJhZGl1cyArIFwiLFwiICsgcmFkaXVzICsgXCIgMCAxLDEgMCxcIiArIDIgKiByYWRpdXMgKyBcInpcIjt9dmFyIGQzX2dlb19wYXRoQ2VudHJvaWQ9e3BvaW50OmQzX2dlb19wYXRoQ2VudHJvaWRQb2ludCxsaW5lU3RhcnQ6ZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVTdGFydCxsaW5lRW5kOmQzX2dlb19wYXRoQ2VudHJvaWRMaW5lRW5kLHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtkM19nZW9fcGF0aENlbnRyb2lkLmxpbmVTdGFydCA9IGQzX2dlb19wYXRoQ2VudHJvaWRSaW5nU3RhcnQ7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gZDNfZ2VvX3BhdGhDZW50cm9pZFBvaW50O2QzX2dlb19wYXRoQ2VudHJvaWQubGluZVN0YXJ0ID0gZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVTdGFydDtkM19nZW9fcGF0aENlbnRyb2lkLmxpbmVFbmQgPSBkM19nZW9fcGF0aENlbnRyb2lkTGluZUVuZDt9fTtmdW5jdGlvbiBkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQoeCx5KXtkM19nZW9fY2VudHJvaWRYMCArPSB4O2QzX2dlb19jZW50cm9pZFkwICs9IHk7KytkM19nZW9fY2VudHJvaWRaMDt9ZnVuY3Rpb24gZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVTdGFydCgpe3ZhciB4MCx5MDtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gZnVuY3Rpb24oeCx5KXtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50O2QzX2dlb19wYXRoQ2VudHJvaWRQb2ludCh4MCA9IHgseTAgPSB5KTt9O2Z1bmN0aW9uIG5leHRQb2ludCh4LHkpe3ZhciBkeD14IC0geDAsZHk9eSAtIHkwLHo9TWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtkM19nZW9fY2VudHJvaWRYMSArPSB6ICogKHgwICsgeCkgLyAyO2QzX2dlb19jZW50cm9pZFkxICs9IHogKiAoeTAgKyB5KSAvIDI7ZDNfZ2VvX2NlbnRyb2lkWjEgKz0gejtkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQoeDAgPSB4LHkwID0geSk7fX1mdW5jdGlvbiBkM19nZW9fcGF0aENlbnRyb2lkTGluZUVuZCgpe2QzX2dlb19wYXRoQ2VudHJvaWQucG9pbnQgPSBkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQ7fWZ1bmN0aW9uIGQzX2dlb19wYXRoQ2VudHJvaWRSaW5nU3RhcnQoKXt2YXIgeDAwLHkwMCx4MCx5MDtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gZnVuY3Rpb24oeCx5KXtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50O2QzX2dlb19wYXRoQ2VudHJvaWRQb2ludCh4MDAgPSB4MCA9IHgseTAwID0geTAgPSB5KTt9O2Z1bmN0aW9uIG5leHRQb2ludCh4LHkpe3ZhciBkeD14IC0geDAsZHk9eSAtIHkwLHo9TWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtkM19nZW9fY2VudHJvaWRYMSArPSB6ICogKHgwICsgeCkgLyAyO2QzX2dlb19jZW50cm9pZFkxICs9IHogKiAoeTAgKyB5KSAvIDI7ZDNfZ2VvX2NlbnRyb2lkWjEgKz0gejt6ID0geTAgKiB4IC0geDAgKiB5O2QzX2dlb19jZW50cm9pZFgyICs9IHogKiAoeDAgKyB4KTtkM19nZW9fY2VudHJvaWRZMiArPSB6ICogKHkwICsgeSk7ZDNfZ2VvX2NlbnRyb2lkWjIgKz0geiAqIDM7ZDNfZ2VvX3BhdGhDZW50cm9pZFBvaW50KHgwID0geCx5MCA9IHkpO31kM19nZW9fcGF0aENlbnRyb2lkLmxpbmVFbmQgPSBmdW5jdGlvbigpe25leHRQb2ludCh4MDAseTAwKTt9O31mdW5jdGlvbiBkM19nZW9fcGF0aENvbnRleHQoY29udGV4dCl7dmFyIF9wb2ludFJhZGl1cz00LjU7dmFyIHN0cmVhbT17cG9pbnQ6cG9pbnQsbGluZVN0YXJ0OmZ1bmN0aW9uIGxpbmVTdGFydCgpe3N0cmVhbS5wb2ludCA9IHBvaW50TGluZVN0YXJ0O30sbGluZUVuZDpsaW5lRW5kLHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtzdHJlYW0ubGluZUVuZCA9IGxpbmVFbmRQb2x5Z29uO30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7c3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kO3N0cmVhbS5wb2ludCA9IHBvaW50O30scG9pbnRSYWRpdXM6ZnVuY3Rpb24gcG9pbnRSYWRpdXMoXyl7X3BvaW50UmFkaXVzID0gXztyZXR1cm4gc3RyZWFtO30scmVzdWx0OmQzX25vb3B9O2Z1bmN0aW9uIHBvaW50KHgseSl7Y29udGV4dC5tb3ZlVG8oeCArIF9wb2ludFJhZGl1cyx5KTtjb250ZXh0LmFyYyh4LHksX3BvaW50UmFkaXVzLDAsz4QpO31mdW5jdGlvbiBwb2ludExpbmVTdGFydCh4LHkpe2NvbnRleHQubW92ZVRvKHgseSk7c3RyZWFtLnBvaW50ID0gcG9pbnRMaW5lO31mdW5jdGlvbiBwb2ludExpbmUoeCx5KXtjb250ZXh0LmxpbmVUbyh4LHkpO31mdW5jdGlvbiBsaW5lRW5kKCl7c3RyZWFtLnBvaW50ID0gcG9pbnQ7fWZ1bmN0aW9uIGxpbmVFbmRQb2x5Z29uKCl7Y29udGV4dC5jbG9zZVBhdGgoKTt9cmV0dXJuIHN0cmVhbTt9ZnVuY3Rpb24gZDNfZ2VvX3Jlc2FtcGxlKHByb2plY3Qpe3ZhciDOtDI9LjUsY29zTWluRGlzdGFuY2U9TWF0aC5jb3MoMzAgKiBkM19yYWRpYW5zKSxtYXhEZXB0aD0xNjtmdW5jdGlvbiByZXNhbXBsZShzdHJlYW0pe3JldHVybiAobWF4RGVwdGg/cmVzYW1wbGVSZWN1cnNpdmU6cmVzYW1wbGVOb25lKShzdHJlYW0pO31mdW5jdGlvbiByZXNhbXBsZU5vbmUoc3RyZWFtKXtyZXR1cm4gZDNfZ2VvX3RyYW5zZm9ybVBvaW50KHN0cmVhbSxmdW5jdGlvbih4LHkpe3ggPSBwcm9qZWN0KHgseSk7c3RyZWFtLnBvaW50KHhbMF0seFsxXSk7fSk7fWZ1bmN0aW9uIHJlc2FtcGxlUmVjdXJzaXZlKHN0cmVhbSl7dmFyIM67MDAsz4YwMCx4MDAseTAwLGEwMCxiMDAsYzAwLM67MCx4MCx5MCxhMCxiMCxjMDt2YXIgcmVzYW1wbGU9e3BvaW50OnBvaW50LGxpbmVTdGFydDpsaW5lU3RhcnQsbGluZUVuZDpsaW5lRW5kLHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtzdHJlYW0ucG9seWdvblN0YXJ0KCk7cmVzYW1wbGUubGluZVN0YXJ0ID0gcmluZ1N0YXJ0O30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7c3RyZWFtLnBvbHlnb25FbmQoKTtyZXNhbXBsZS5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7fX07ZnVuY3Rpb24gcG9pbnQoeCx5KXt4ID0gcHJvamVjdCh4LHkpO3N0cmVhbS5wb2ludCh4WzBdLHhbMV0pO31mdW5jdGlvbiBsaW5lU3RhcnQoKXt4MCA9IE5hTjtyZXNhbXBsZS5wb2ludCA9IGxpbmVQb2ludDtzdHJlYW0ubGluZVN0YXJ0KCk7fWZ1bmN0aW9uIGxpbmVQb2ludCjOuyzPhil7dmFyIGM9ZDNfZ2VvX2NhcnRlc2lhbihbzrssz4ZdKSxwPXByb2plY3Qozrssz4YpO3Jlc2FtcGxlTGluZVRvKHgwLHkwLM67MCxhMCxiMCxjMCx4MCA9IHBbMF0seTAgPSBwWzFdLM67MCA9IM67LGEwID0gY1swXSxiMCA9IGNbMV0sYzAgPSBjWzJdLG1heERlcHRoLHN0cmVhbSk7c3RyZWFtLnBvaW50KHgwLHkwKTt9ZnVuY3Rpb24gbGluZUVuZCgpe3Jlc2FtcGxlLnBvaW50ID0gcG9pbnQ7c3RyZWFtLmxpbmVFbmQoKTt9ZnVuY3Rpb24gcmluZ1N0YXJ0KCl7bGluZVN0YXJ0KCk7cmVzYW1wbGUucG9pbnQgPSByaW5nUG9pbnQ7cmVzYW1wbGUubGluZUVuZCA9IHJpbmdFbmQ7fWZ1bmN0aW9uIHJpbmdQb2ludCjOuyzPhil7bGluZVBvaW50KM67MDAgPSDOuyzPhjAwID0gz4YpLHgwMCA9IHgwLHkwMCA9IHkwLGEwMCA9IGEwLGIwMCA9IGIwLGMwMCA9IGMwO3Jlc2FtcGxlLnBvaW50ID0gbGluZVBvaW50O31mdW5jdGlvbiByaW5nRW5kKCl7cmVzYW1wbGVMaW5lVG8oeDAseTAszrswLGEwLGIwLGMwLHgwMCx5MDAszrswMCxhMDAsYjAwLGMwMCxtYXhEZXB0aCxzdHJlYW0pO3Jlc2FtcGxlLmxpbmVFbmQgPSBsaW5lRW5kO2xpbmVFbmQoKTt9cmV0dXJuIHJlc2FtcGxlO31mdW5jdGlvbiByZXNhbXBsZUxpbmVUbyh4MCx5MCzOuzAsYTAsYjAsYzAseDEseTEszrsxLGExLGIxLGMxLGRlcHRoLHN0cmVhbSl7dmFyIGR4PXgxIC0geDAsZHk9eTEgLSB5MCxkMj1keCAqIGR4ICsgZHkgKiBkeTtpZihkMiA+IDQgKiDOtDIgJiYgZGVwdGgtLSl7dmFyIGE9YTAgKyBhMSxiPWIwICsgYjEsYz1jMCArIGMxLG09TWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIgKyBjICogYyksz4YyPU1hdGguYXNpbihjIC89IG0pLM67Mj1hYnMoYWJzKGMpIC0gMSkgPCDOtSB8fCBhYnMozrswIC0gzrsxKSA8IM61PyjOuzAgKyDOuzEpIC8gMjpNYXRoLmF0YW4yKGIsYSkscD1wcm9qZWN0KM67MizPhjIpLHgyPXBbMF0seTI9cFsxXSxkeDI9eDIgLSB4MCxkeTI9eTIgLSB5MCxkej1keSAqIGR4MiAtIGR4ICogZHkyO2lmKGR6ICogZHogLyBkMiA+IM60MiB8fCBhYnMoKGR4ICogZHgyICsgZHkgKiBkeTIpIC8gZDIgLSAuNSkgPiAuMyB8fCBhMCAqIGExICsgYjAgKiBiMSArIGMwICogYzEgPCBjb3NNaW5EaXN0YW5jZSl7cmVzYW1wbGVMaW5lVG8oeDAseTAszrswLGEwLGIwLGMwLHgyLHkyLM67MixhIC89IG0sYiAvPSBtLGMsZGVwdGgsc3RyZWFtKTtzdHJlYW0ucG9pbnQoeDIseTIpO3Jlc2FtcGxlTGluZVRvKHgyLHkyLM67MixhLGIsYyx4MSx5MSzOuzEsYTEsYjEsYzEsZGVwdGgsc3RyZWFtKTt9fX1yZXNhbXBsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KM60Mik7bWF4RGVwdGggPSAozrQyID0gXyAqIF8pID4gMCAmJiAxNjtyZXR1cm4gcmVzYW1wbGU7fTtyZXR1cm4gcmVzYW1wbGU7fWQzLmdlby5wYXRoID0gZnVuY3Rpb24oKXt2YXIgcG9pbnRSYWRpdXM9NC41LHByb2plY3Rpb24sY29udGV4dCxwcm9qZWN0U3RyZWFtLGNvbnRleHRTdHJlYW0sY2FjaGVTdHJlYW07ZnVuY3Rpb24gcGF0aChvYmplY3Qpe2lmKG9iamVjdCl7aWYodHlwZW9mIHBvaW50UmFkaXVzID09PSBcImZ1bmN0aW9uXCIpY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrcG9pbnRSYWRpdXMuYXBwbHkodGhpcyxhcmd1bWVudHMpKTtpZighY2FjaGVTdHJlYW0gfHwgIWNhY2hlU3RyZWFtLnZhbGlkKWNhY2hlU3RyZWFtID0gcHJvamVjdFN0cmVhbShjb250ZXh0U3RyZWFtKTtkMy5nZW8uc3RyZWFtKG9iamVjdCxjYWNoZVN0cmVhbSk7fXJldHVybiBjb250ZXh0U3RyZWFtLnJlc3VsdCgpO31wYXRoLmFyZWEgPSBmdW5jdGlvbihvYmplY3Qpe2QzX2dlb19wYXRoQXJlYVN1bSA9IDA7ZDMuZ2VvLnN0cmVhbShvYmplY3QscHJvamVjdFN0cmVhbShkM19nZW9fcGF0aEFyZWEpKTtyZXR1cm4gZDNfZ2VvX3BhdGhBcmVhU3VtO307cGF0aC5jZW50cm9pZCA9IGZ1bmN0aW9uKG9iamVjdCl7ZDNfZ2VvX2NlbnRyb2lkWDAgPSBkM19nZW9fY2VudHJvaWRZMCA9IGQzX2dlb19jZW50cm9pZFowID0gZDNfZ2VvX2NlbnRyb2lkWDEgPSBkM19nZW9fY2VudHJvaWRZMSA9IGQzX2dlb19jZW50cm9pZFoxID0gZDNfZ2VvX2NlbnRyb2lkWDIgPSBkM19nZW9fY2VudHJvaWRZMiA9IGQzX2dlb19jZW50cm9pZFoyID0gMDtkMy5nZW8uc3RyZWFtKG9iamVjdCxwcm9qZWN0U3RyZWFtKGQzX2dlb19wYXRoQ2VudHJvaWQpKTtyZXR1cm4gZDNfZ2VvX2NlbnRyb2lkWjI/W2QzX2dlb19jZW50cm9pZFgyIC8gZDNfZ2VvX2NlbnRyb2lkWjIsZDNfZ2VvX2NlbnRyb2lkWTIgLyBkM19nZW9fY2VudHJvaWRaMl06ZDNfZ2VvX2NlbnRyb2lkWjE/W2QzX2dlb19jZW50cm9pZFgxIC8gZDNfZ2VvX2NlbnRyb2lkWjEsZDNfZ2VvX2NlbnRyb2lkWTEgLyBkM19nZW9fY2VudHJvaWRaMV06ZDNfZ2VvX2NlbnRyb2lkWjA/W2QzX2dlb19jZW50cm9pZFgwIC8gZDNfZ2VvX2NlbnRyb2lkWjAsZDNfZ2VvX2NlbnRyb2lkWTAgLyBkM19nZW9fY2VudHJvaWRaMF06W05hTixOYU5dO307cGF0aC5ib3VuZHMgPSBmdW5jdGlvbihvYmplY3Qpe2QzX2dlb19wYXRoQm91bmRzWDEgPSBkM19nZW9fcGF0aEJvdW5kc1kxID0gLShkM19nZW9fcGF0aEJvdW5kc1gwID0gZDNfZ2VvX3BhdGhCb3VuZHNZMCA9IEluZmluaXR5KTtkMy5nZW8uc3RyZWFtKG9iamVjdCxwcm9qZWN0U3RyZWFtKGQzX2dlb19wYXRoQm91bmRzKSk7cmV0dXJuIFtbZDNfZ2VvX3BhdGhCb3VuZHNYMCxkM19nZW9fcGF0aEJvdW5kc1kwXSxbZDNfZ2VvX3BhdGhCb3VuZHNYMSxkM19nZW9fcGF0aEJvdW5kc1kxXV07fTtwYXRoLnByb2plY3Rpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcHJvamVjdGlvbjtwcm9qZWN0U3RyZWFtID0gKHByb2plY3Rpb24gPSBfKT9fLnN0cmVhbSB8fCBkM19nZW9fcGF0aFByb2plY3RTdHJlYW0oXyk6ZDNfaWRlbnRpdHk7cmV0dXJuIHJlc2V0KCk7fTtwYXRoLmNvbnRleHQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY29udGV4dDtjb250ZXh0U3RyZWFtID0gKGNvbnRleHQgPSBfKSA9PSBudWxsP25ldyBkM19nZW9fcGF0aEJ1ZmZlcigpOm5ldyBkM19nZW9fcGF0aENvbnRleHQoXyk7aWYodHlwZW9mIHBvaW50UmFkaXVzICE9PSBcImZ1bmN0aW9uXCIpY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cyhwb2ludFJhZGl1cyk7cmV0dXJuIHJlc2V0KCk7fTtwYXRoLnBvaW50UmFkaXVzID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBvaW50UmFkaXVzO3BvaW50UmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIj9fOihjb250ZXh0U3RyZWFtLnBvaW50UmFkaXVzKCtfKSwrXyk7cmV0dXJuIHBhdGg7fTtmdW5jdGlvbiByZXNldCgpe2NhY2hlU3RyZWFtID0gbnVsbDtyZXR1cm4gcGF0aDt9cmV0dXJuIHBhdGgucHJvamVjdGlvbihkMy5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCk7fTtmdW5jdGlvbiBkM19nZW9fcGF0aFByb2plY3RTdHJlYW0ocHJvamVjdCl7dmFyIHJlc2FtcGxlPWQzX2dlb19yZXNhbXBsZShmdW5jdGlvbih4LHkpe3JldHVybiBwcm9qZWN0KFt4ICogZDNfZGVncmVlcyx5ICogZDNfZGVncmVlc10pO30pO3JldHVybiBmdW5jdGlvbihzdHJlYW0pe3JldHVybiBkM19nZW9fcHJvamVjdGlvblJhZGlhbnMocmVzYW1wbGUoc3RyZWFtKSk7fTt9ZDMuZ2VvLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKG1ldGhvZHMpe3JldHVybiB7c3RyZWFtOmZ1bmN0aW9uIHN0cmVhbShfc3RyZWFtMil7dmFyIHRyYW5zZm9ybT1uZXcgZDNfZ2VvX3RyYW5zZm9ybShfc3RyZWFtMik7Zm9yKHZhciBrIGluIG1ldGhvZHMpIHRyYW5zZm9ybVtrXSA9IG1ldGhvZHNba107cmV0dXJuIHRyYW5zZm9ybTt9fTt9O2Z1bmN0aW9uIGQzX2dlb190cmFuc2Zvcm0oc3RyZWFtKXt0aGlzLnN0cmVhbSA9IHN0cmVhbTt9ZDNfZ2VvX3RyYW5zZm9ybS5wcm90b3R5cGUgPSB7cG9pbnQ6ZnVuY3Rpb24gcG9pbnQoeCx5KXt0aGlzLnN0cmVhbS5wb2ludCh4LHkpO30sc3BoZXJlOmZ1bmN0aW9uIHNwaGVyZSgpe3RoaXMuc3RyZWFtLnNwaGVyZSgpO30sbGluZVN0YXJ0OmZ1bmN0aW9uIGxpbmVTdGFydCgpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpO30sbGluZUVuZDpmdW5jdGlvbiBsaW5lRW5kKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpO30scG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpO30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpO319O2Z1bmN0aW9uIGQzX2dlb190cmFuc2Zvcm1Qb2ludChzdHJlYW0scG9pbnQpe3JldHVybiB7cG9pbnQ6cG9pbnQsc3BoZXJlOmZ1bmN0aW9uIHNwaGVyZSgpe3N0cmVhbS5zcGhlcmUoKTt9LGxpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtzdHJlYW0ubGluZVN0YXJ0KCk7fSxsaW5lRW5kOmZ1bmN0aW9uIGxpbmVFbmQoKXtzdHJlYW0ubGluZUVuZCgpO30scG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe3N0cmVhbS5wb2x5Z29uU3RhcnQoKTt9LHBvbHlnb25FbmQ6ZnVuY3Rpb24gcG9seWdvbkVuZCgpe3N0cmVhbS5wb2x5Z29uRW5kKCk7fX07fWQzLmdlby5wcm9qZWN0aW9uID0gZDNfZ2VvX3Byb2plY3Rpb247ZDMuZ2VvLnByb2plY3Rpb25NdXRhdG9yID0gZDNfZ2VvX3Byb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIGQzX2dlb19wcm9qZWN0aW9uKHByb2plY3Qpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbk11dGF0b3IoZnVuY3Rpb24oKXtyZXR1cm4gcHJvamVjdDt9KSgpO31mdW5jdGlvbiBkM19nZW9fcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KXt2YXIgcHJvamVjdCxyb3RhdGUscHJvamVjdFJvdGF0ZSxwcm9qZWN0UmVzYW1wbGU9ZDNfZ2VvX3Jlc2FtcGxlKGZ1bmN0aW9uKHgseSl7eCA9IHByb2plY3QoeCx5KTtyZXR1cm4gW3hbMF0gKiBrICsgzrR4LM60eSAtIHhbMV0gKiBrXTt9KSxrPTE1MCx4PTQ4MCx5PTI1MCzOuz0wLM+GPTAszrTOuz0wLM60z4Y9MCzOtM6zPTAszrR4LM60eSxwcmVjbGlwPWQzX2dlb19jbGlwQW50aW1lcmlkaWFuLHBvc3RjbGlwPWQzX2lkZW50aXR5LGNsaXBBbmdsZT1udWxsLGNsaXBFeHRlbnQ9bnVsbCxzdHJlYW07ZnVuY3Rpb24gcHJvamVjdGlvbihwb2ludCl7cG9pbnQgPSBwcm9qZWN0Um90YXRlKHBvaW50WzBdICogZDNfcmFkaWFucyxwb2ludFsxXSAqIGQzX3JhZGlhbnMpO3JldHVybiBbcG9pbnRbMF0gKiBrICsgzrR4LM60eSAtIHBvaW50WzFdICoga107fWZ1bmN0aW9uIGludmVydChwb2ludCl7cG9pbnQgPSBwcm9qZWN0Um90YXRlLmludmVydCgocG9pbnRbMF0gLSDOtHgpIC8gaywozrR5IC0gcG9pbnRbMV0pIC8gayk7cmV0dXJuIHBvaW50ICYmIFtwb2ludFswXSAqIGQzX2RlZ3JlZXMscG9pbnRbMV0gKiBkM19kZWdyZWVzXTt9cHJvamVjdGlvbi5zdHJlYW0gPSBmdW5jdGlvbihvdXRwdXQpe2lmKHN0cmVhbSlzdHJlYW0udmFsaWQgPSBmYWxzZTtzdHJlYW0gPSBkM19nZW9fcHJvamVjdGlvblJhZGlhbnMocHJlY2xpcChyb3RhdGUscHJvamVjdFJlc2FtcGxlKHBvc3RjbGlwKG91dHB1dCkpKSk7c3RyZWFtLnZhbGlkID0gdHJ1ZTtyZXR1cm4gc3RyZWFtO307cHJvamVjdGlvbi5jbGlwQW5nbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2xpcEFuZ2xlO3ByZWNsaXAgPSBfID09IG51bGw/KGNsaXBBbmdsZSA9IF8sZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW4pOmQzX2dlb19jbGlwQ2lyY2xlKChjbGlwQW5nbGUgPSArXykgKiBkM19yYWRpYW5zKTtyZXR1cm4gaW52YWxpZGF0ZSgpO307cHJvamVjdGlvbi5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGNsaXBFeHRlbnQ7Y2xpcEV4dGVudCA9IF87cG9zdGNsaXAgPSBfP2QzX2dlb19jbGlwRXh0ZW50KF9bMF1bMF0sX1swXVsxXSxfWzFdWzBdLF9bMV1bMV0pOmQzX2lkZW50aXR5O3JldHVybiBpbnZhbGlkYXRlKCk7fTtwcm9qZWN0aW9uLnNjYWxlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGs7ayA9ICtfO3JldHVybiByZXNldCgpO307cHJvamVjdGlvbi50cmFuc2xhdGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW3gseV07eCA9ICtfWzBdO3kgPSArX1sxXTtyZXR1cm4gcmVzZXQoKTt9O3Byb2plY3Rpb24uY2VudGVyID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFvOuyAqIGQzX2RlZ3JlZXMsz4YgKiBkM19kZWdyZWVzXTvOuyA9IF9bMF0gJSAzNjAgKiBkM19yYWRpYW5zO8+GID0gX1sxXSAlIDM2MCAqIGQzX3JhZGlhbnM7cmV0dXJuIHJlc2V0KCk7fTtwcm9qZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBbzrTOuyAqIGQzX2RlZ3JlZXMszrTPhiAqIGQzX2RlZ3JlZXMszrTOsyAqIGQzX2RlZ3JlZXNdO860zrsgPSBfWzBdICUgMzYwICogZDNfcmFkaWFuczvOtM+GID0gX1sxXSAlIDM2MCAqIGQzX3JhZGlhbnM7zrTOsyA9IF8ubGVuZ3RoID4gMj9fWzJdICUgMzYwICogZDNfcmFkaWFuczowO3JldHVybiByZXNldCgpO307ZDMucmViaW5kKHByb2plY3Rpb24scHJvamVjdFJlc2FtcGxlLFwicHJlY2lzaW9uXCIpO2Z1bmN0aW9uIHJlc2V0KCl7cHJvamVjdFJvdGF0ZSA9IGQzX2dlb19jb21wb3NlKHJvdGF0ZSA9IGQzX2dlb19yb3RhdGlvbijOtM67LM60z4YszrTOsykscHJvamVjdCk7dmFyIGNlbnRlcj1wcm9qZWN0KM67LM+GKTvOtHggPSB4IC0gY2VudGVyWzBdICogazvOtHkgPSB5ICsgY2VudGVyWzFdICogaztyZXR1cm4gaW52YWxpZGF0ZSgpO31mdW5jdGlvbiBpbnZhbGlkYXRlKCl7aWYoc3RyZWFtKXN0cmVhbS52YWxpZCA9IGZhbHNlLHN0cmVhbSA9IG51bGw7cmV0dXJuIHByb2plY3Rpb247fXJldHVybiBmdW5jdGlvbigpe3Byb2plY3QgPSBwcm9qZWN0QXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Byb2plY3Rpb24uaW52ZXJ0ID0gcHJvamVjdC5pbnZlcnQgJiYgaW52ZXJ0O3JldHVybiByZXNldCgpO307fWZ1bmN0aW9uIGQzX2dlb19wcm9qZWN0aW9uUmFkaWFucyhzdHJlYW0pe3JldHVybiBkM19nZW9fdHJhbnNmb3JtUG9pbnQoc3RyZWFtLGZ1bmN0aW9uKHgseSl7c3RyZWFtLnBvaW50KHggKiBkM19yYWRpYW5zLHkgKiBkM19yYWRpYW5zKTt9KTt9ZnVuY3Rpb24gZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcijOuyzPhil7cmV0dXJuIFvOuyzPhl07fShkMy5nZW8uZXF1aXJlY3Rhbmd1bGFyID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfZ2VvX3Byb2plY3Rpb24oZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcik7fSkucmF3ID0gZDNfZ2VvX2VxdWlyZWN0YW5ndWxhci5pbnZlcnQgPSBkM19nZW9fZXF1aXJlY3Rhbmd1bGFyO2QzLmdlby5yb3RhdGlvbiA9IGZ1bmN0aW9uKHJvdGF0ZSl7cm90YXRlID0gZDNfZ2VvX3JvdGF0aW9uKHJvdGF0ZVswXSAlIDM2MCAqIGQzX3JhZGlhbnMscm90YXRlWzFdICogZDNfcmFkaWFucyxyb3RhdGUubGVuZ3RoID4gMj9yb3RhdGVbMl0gKiBkM19yYWRpYW5zOjApO2Z1bmN0aW9uIGZvcndhcmQoY29vcmRpbmF0ZXMpe2Nvb3JkaW5hdGVzID0gcm90YXRlKGNvb3JkaW5hdGVzWzBdICogZDNfcmFkaWFucyxjb29yZGluYXRlc1sxXSAqIGQzX3JhZGlhbnMpO3JldHVybiBjb29yZGluYXRlc1swXSAqPSBkM19kZWdyZWVzLGNvb3JkaW5hdGVzWzFdICo9IGQzX2RlZ3JlZXMsY29vcmRpbmF0ZXM7fWZvcndhcmQuaW52ZXJ0ID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpe2Nvb3JkaW5hdGVzID0gcm90YXRlLmludmVydChjb29yZGluYXRlc1swXSAqIGQzX3JhZGlhbnMsY29vcmRpbmF0ZXNbMV0gKiBkM19yYWRpYW5zKTtyZXR1cm4gY29vcmRpbmF0ZXNbMF0gKj0gZDNfZGVncmVlcyxjb29yZGluYXRlc1sxXSAqPSBkM19kZWdyZWVzLGNvb3JkaW5hdGVzO307cmV0dXJuIGZvcndhcmQ7fTtmdW5jdGlvbiBkM19nZW9faWRlbnRpdHlSb3RhdGlvbijOuyzPhil7cmV0dXJuIFvOuyA+IM+AP867IC0gz4Q6zrsgPCAtz4A/zrsgKyDPhDrOuyzPhl07fWQzX2dlb19pZGVudGl0eVJvdGF0aW9uLmludmVydCA9IGQzX2dlb19lcXVpcmVjdGFuZ3VsYXI7ZnVuY3Rpb24gZDNfZ2VvX3JvdGF0aW9uKM60zrsszrTPhizOtM6zKXtyZXR1cm4gzrTOuz/OtM+GIHx8IM60zrM/ZDNfZ2VvX2NvbXBvc2UoZDNfZ2VvX3JvdGF0aW9uzrsozrTOuyksZDNfZ2VvX3JvdGF0aW9uz4bOsyjOtM+GLM60zrMpKTpkM19nZW9fcm90YXRpb27OuyjOtM67KTrOtM+GIHx8IM60zrM/ZDNfZ2VvX3JvdGF0aW9uz4bOsyjOtM+GLM60zrMpOmQzX2dlb19pZGVudGl0eVJvdGF0aW9uO31mdW5jdGlvbiBkM19nZW9fZm9yd2FyZFJvdGF0aW9uzrsozrTOuyl7cmV0dXJuIGZ1bmN0aW9uKM67LM+GKXtyZXR1cm4gzrsgKz0gzrTOuyxbzrsgPiDPgD/OuyAtIM+EOs67IDwgLc+AP867ICsgz4Q6zrssz4ZdO307fWZ1bmN0aW9uIGQzX2dlb19yb3RhdGlvbs67KM60zrspe3ZhciByb3RhdGlvbj1kM19nZW9fZm9yd2FyZFJvdGF0aW9uzrsozrTOuyk7cm90YXRpb24uaW52ZXJ0ID0gZDNfZ2VvX2ZvcndhcmRSb3RhdGlvbs67KC3OtM67KTtyZXR1cm4gcm90YXRpb247fWZ1bmN0aW9uIGQzX2dlb19yb3RhdGlvbs+GzrMozrTPhizOtM6zKXt2YXIgY29zzrTPhj1NYXRoLmNvcyjOtM+GKSxzaW7OtM+GPU1hdGguc2luKM60z4YpLGNvc860zrM9TWF0aC5jb3MozrTOsyksc2luzrTOsz1NYXRoLnNpbijOtM6zKTtmdW5jdGlvbiByb3RhdGlvbijOuyzPhil7dmFyIGNvc8+GPU1hdGguY29zKM+GKSx4PU1hdGguY29zKM67KSAqIGNvc8+GLHk9TWF0aC5zaW4ozrspICogY29zz4Ysej1NYXRoLnNpbijPhiksaz16ICogY29zzrTPhiArIHggKiBzaW7OtM+GO3JldHVybiBbTWF0aC5hdGFuMih5ICogY29zzrTOsyAtIGsgKiBzaW7OtM6zLHggKiBjb3POtM+GIC0geiAqIHNpbs60z4YpLGQzX2FzaW4oayAqIGNvc860zrMgKyB5ICogc2luzrTOsyldO31yb3RhdGlvbi5pbnZlcnQgPSBmdW5jdGlvbijOuyzPhil7dmFyIGNvc8+GPU1hdGguY29zKM+GKSx4PU1hdGguY29zKM67KSAqIGNvc8+GLHk9TWF0aC5zaW4ozrspICogY29zz4Ysej1NYXRoLnNpbijPhiksaz16ICogY29zzrTOsyAtIHkgKiBzaW7OtM6zO3JldHVybiBbTWF0aC5hdGFuMih5ICogY29zzrTOsyArIHogKiBzaW7OtM6zLHggKiBjb3POtM+GICsgayAqIHNpbs60z4YpLGQzX2FzaW4oayAqIGNvc860z4YgLSB4ICogc2luzrTPhildO307cmV0dXJuIHJvdGF0aW9uO31kMy5nZW8uY2lyY2xlID0gZnVuY3Rpb24oKXt2YXIgb3JpZ2luPVswLDBdLGFuZ2xlLHByZWNpc2lvbj02LGludGVycG9sYXRlO2Z1bmN0aW9uIGNpcmNsZSgpe3ZhciBjZW50ZXI9dHlwZW9mIG9yaWdpbiA9PT0gXCJmdW5jdGlvblwiP29yaWdpbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b3JpZ2luLHJvdGF0ZT1kM19nZW9fcm90YXRpb24oLWNlbnRlclswXSAqIGQzX3JhZGlhbnMsLWNlbnRlclsxXSAqIGQzX3JhZGlhbnMsMCkuaW52ZXJ0LHJpbmc9W107aW50ZXJwb2xhdGUobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uIHBvaW50KHgseSl7cmluZy5wdXNoKHggPSByb3RhdGUoeCx5KSk7eFswXSAqPSBkM19kZWdyZWVzLHhbMV0gKj0gZDNfZGVncmVlczt9fSk7cmV0dXJuIHt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltyaW5nXX07fWNpcmNsZS5vcmlnaW4gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gb3JpZ2luO29yaWdpbiA9IHg7cmV0dXJuIGNpcmNsZTt9O2NpcmNsZS5hbmdsZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhbmdsZTtpbnRlcnBvbGF0ZSA9IGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZSgoYW5nbGUgPSAreCkgKiBkM19yYWRpYW5zLHByZWNpc2lvbiAqIGQzX3JhZGlhbnMpO3JldHVybiBjaXJjbGU7fTtjaXJjbGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHByZWNpc2lvbjtpbnRlcnBvbGF0ZSA9IGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZShhbmdsZSAqIGQzX3JhZGlhbnMsKHByZWNpc2lvbiA9ICtfKSAqIGQzX3JhZGlhbnMpO3JldHVybiBjaXJjbGU7fTtyZXR1cm4gY2lyY2xlLmFuZ2xlKDkwKTt9O2Z1bmN0aW9uIGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZShyYWRpdXMscHJlY2lzaW9uKXt2YXIgY3I9TWF0aC5jb3MocmFkaXVzKSxzcj1NYXRoLnNpbihyYWRpdXMpO3JldHVybiBmdW5jdGlvbihmcm9tLHRvLGRpcmVjdGlvbixsaXN0ZW5lcil7dmFyIHN0ZXA9ZGlyZWN0aW9uICogcHJlY2lzaW9uO2lmKGZyb20gIT0gbnVsbCl7ZnJvbSA9IGQzX2dlb19jaXJjbGVBbmdsZShjcixmcm9tKTt0byA9IGQzX2dlb19jaXJjbGVBbmdsZShjcix0byk7aWYoZGlyZWN0aW9uID4gMD9mcm9tIDwgdG86ZnJvbSA+IHRvKWZyb20gKz0gZGlyZWN0aW9uICogz4Q7fWVsc2Uge2Zyb20gPSByYWRpdXMgKyBkaXJlY3Rpb24gKiDPhDt0byA9IHJhZGl1cyAtIC41ICogc3RlcDt9Zm9yKHZhciBwb2ludCx0PWZyb207ZGlyZWN0aW9uID4gMD90ID4gdG86dCA8IHRvO3QgLT0gc3RlcCkge2xpc3RlbmVyLnBvaW50KChwb2ludCA9IGQzX2dlb19zcGhlcmljYWwoW2NyLC1zciAqIE1hdGguY29zKHQpLC1zciAqIE1hdGguc2luKHQpXSkpWzBdLHBvaW50WzFdKTt9fTt9ZnVuY3Rpb24gZDNfZ2VvX2NpcmNsZUFuZ2xlKGNyLHBvaW50KXt2YXIgYT1kM19nZW9fY2FydGVzaWFuKHBvaW50KTthWzBdIC09IGNyO2QzX2dlb19jYXJ0ZXNpYW5Ob3JtYWxpemUoYSk7dmFyIGFuZ2xlPWQzX2Fjb3MoLWFbMV0pO3JldHVybiAoKC1hWzJdIDwgMD8tYW5nbGU6YW5nbGUpICsgMiAqIE1hdGguUEkgLSDOtSkgJSAoMiAqIE1hdGguUEkpO31kMy5nZW8uZGlzdGFuY2UgPSBmdW5jdGlvbihhLGIpe3ZhciDOlM67PShiWzBdIC0gYVswXSkgKiBkM19yYWRpYW5zLM+GMD1hWzFdICogZDNfcmFkaWFucyzPhjE9YlsxXSAqIGQzX3JhZGlhbnMsc2luzpTOuz1NYXRoLnNpbijOlM67KSxjb3POlM67PU1hdGguY29zKM6UzrspLHNpbs+GMD1NYXRoLnNpbijPhjApLGNvc8+GMD1NYXRoLmNvcyjPhjApLHNpbs+GMT1NYXRoLnNpbijPhjEpLGNvc8+GMT1NYXRoLmNvcyjPhjEpLHQ7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KCh0ID0gY29zz4YxICogc2luzpTOuykgKiB0ICsgKHQgPSBjb3PPhjAgKiBzaW7PhjEgLSBzaW7PhjAgKiBjb3PPhjEgKiBjb3POlM67KSAqIHQpLHNpbs+GMCAqIHNpbs+GMSArIGNvc8+GMCAqIGNvc8+GMSAqIGNvc86UzrspO307ZDMuZ2VvLmdyYXRpY3VsZSA9IGZ1bmN0aW9uKCl7dmFyIHgxLHgwLFgxLFgwLHkxLHkwLFkxLFkwLGR4PTEwLGR5PWR4LERYPTkwLERZPTM2MCx4LHksWCxZLHByZWNpc2lvbj0yLjU7ZnVuY3Rpb24gZ3JhdGljdWxlKCl7cmV0dXJuIHt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6bGluZXMoKX07fWZ1bmN0aW9uIGxpbmVzKCl7cmV0dXJuIGQzLnJhbmdlKE1hdGguY2VpbChYMCAvIERYKSAqIERYLFgxLERYKS5tYXAoWCkuY29uY2F0KGQzLnJhbmdlKE1hdGguY2VpbChZMCAvIERZKSAqIERZLFkxLERZKS5tYXAoWSkpLmNvbmNhdChkMy5yYW5nZShNYXRoLmNlaWwoeDAgLyBkeCkgKiBkeCx4MSxkeCkuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiBhYnMoeCAlIERYKSA+IM61O30pLm1hcCh4KSkuY29uY2F0KGQzLnJhbmdlKE1hdGguY2VpbCh5MCAvIGR5KSAqIGR5LHkxLGR5KS5maWx0ZXIoZnVuY3Rpb24oeSl7cmV0dXJuIGFicyh5ICUgRFkpID4gzrU7fSkubWFwKHkpKTt9Z3JhdGljdWxlLmxpbmVzID0gZnVuY3Rpb24oKXtyZXR1cm4gbGluZXMoKS5tYXAoZnVuY3Rpb24oY29vcmRpbmF0ZXMpe3JldHVybiB7dHlwZTpcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczpjb29yZGluYXRlc307fSk7fTtncmF0aWN1bGUub3V0bGluZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIHt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltYKFgwKS5jb25jYXQoWShZMSkuc2xpY2UoMSksWChYMSkucmV2ZXJzZSgpLnNsaWNlKDEpLFkoWTApLnJldmVyc2UoKS5zbGljZSgxKSldfTt9O2dyYXRpY3VsZS5leHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZ3JhdGljdWxlLm1pbm9yRXh0ZW50KCk7cmV0dXJuIGdyYXRpY3VsZS5tYWpvckV4dGVudChfKS5taW5vckV4dGVudChfKTt9O2dyYXRpY3VsZS5tYWpvckV4dGVudCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBbW1gwLFkwXSxbWDEsWTFdXTtYMCA9ICtfWzBdWzBdLFgxID0gK19bMV1bMF07WTAgPSArX1swXVsxXSxZMSA9ICtfWzFdWzFdO2lmKFgwID4gWDEpXyA9IFgwLFgwID0gWDEsWDEgPSBfO2lmKFkwID4gWTEpXyA9IFkwLFkwID0gWTEsWTEgPSBfO3JldHVybiBncmF0aWN1bGUucHJlY2lzaW9uKHByZWNpc2lvbik7fTtncmF0aWN1bGUubWlub3JFeHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW1t4MCx5MF0sW3gxLHkxXV07eDAgPSArX1swXVswXSx4MSA9ICtfWzFdWzBdO3kwID0gK19bMF1bMV0seTEgPSArX1sxXVsxXTtpZih4MCA+IHgxKV8gPSB4MCx4MCA9IHgxLHgxID0gXztpZih5MCA+IHkxKV8gPSB5MCx5MCA9IHkxLHkxID0gXztyZXR1cm4gZ3JhdGljdWxlLnByZWNpc2lvbihwcmVjaXNpb24pO307Z3JhdGljdWxlLnN0ZXAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZ3JhdGljdWxlLm1pbm9yU3RlcCgpO3JldHVybiBncmF0aWN1bGUubWFqb3JTdGVwKF8pLm1pbm9yU3RlcChfKTt9O2dyYXRpY3VsZS5tYWpvclN0ZXAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW0RYLERZXTtEWCA9ICtfWzBdLERZID0gK19bMV07cmV0dXJuIGdyYXRpY3VsZTt9O2dyYXRpY3VsZS5taW5vclN0ZXAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW2R4LGR5XTtkeCA9ICtfWzBdLGR5ID0gK19bMV07cmV0dXJuIGdyYXRpY3VsZTt9O2dyYXRpY3VsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcHJlY2lzaW9uO3ByZWNpc2lvbiA9ICtfO3ggPSBkM19nZW9fZ3JhdGljdWxlWCh5MCx5MSw5MCk7eSA9IGQzX2dlb19ncmF0aWN1bGVZKHgwLHgxLHByZWNpc2lvbik7WCA9IGQzX2dlb19ncmF0aWN1bGVYKFkwLFkxLDkwKTtZID0gZDNfZ2VvX2dyYXRpY3VsZVkoWDAsWDEscHJlY2lzaW9uKTtyZXR1cm4gZ3JhdGljdWxlO307cmV0dXJuIGdyYXRpY3VsZS5tYWpvckV4dGVudChbWy0xODAsLTkwICsgzrVdLFsxODAsOTAgLSDOtV1dKS5taW5vckV4dGVudChbWy0xODAsLTgwIC0gzrVdLFsxODAsODAgKyDOtV1dKTt9O2Z1bmN0aW9uIGQzX2dlb19ncmF0aWN1bGVYKHkwLHkxLGR5KXt2YXIgeT1kMy5yYW5nZSh5MCx5MSAtIM61LGR5KS5jb25jYXQoeTEpO3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIFt4LHldO30pO307fWZ1bmN0aW9uIGQzX2dlb19ncmF0aWN1bGVZKHgwLHgxLGR4KXt2YXIgeD1kMy5yYW5nZSh4MCx4MSAtIM61LGR4KS5jb25jYXQoeDEpO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4geC5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIFt4LHldO30pO307fWZ1bmN0aW9uIGQzX3NvdXJjZShkKXtyZXR1cm4gZC5zb3VyY2U7fWZ1bmN0aW9uIGQzX3RhcmdldChkKXtyZXR1cm4gZC50YXJnZXQ7fWQzLmdlby5ncmVhdEFyYyA9IGZ1bmN0aW9uKCl7dmFyIHNvdXJjZT1kM19zb3VyY2Usc291cmNlXyx0YXJnZXQ9ZDNfdGFyZ2V0LHRhcmdldF87ZnVuY3Rpb24gZ3JlYXRBcmMoKXtyZXR1cm4ge3R5cGU6XCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6W3NvdXJjZV8gfHwgc291cmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0YXJnZXRfIHx8IHRhcmdldC5hcHBseSh0aGlzLGFyZ3VtZW50cyldfTt9Z3JlYXRBcmMuZGlzdGFuY2UgPSBmdW5jdGlvbigpe3JldHVybiBkMy5nZW8uZGlzdGFuY2Uoc291cmNlXyB8fCBzb3VyY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRhcmdldF8gfHwgdGFyZ2V0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7fTtncmVhdEFyYy5zb3VyY2UgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc291cmNlO3NvdXJjZSA9IF8sc291cmNlXyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCI/bnVsbDpfO3JldHVybiBncmVhdEFyYzt9O2dyZWF0QXJjLnRhcmdldCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0YXJnZXQ7dGFyZ2V0ID0gXyx0YXJnZXRfID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIj9udWxsOl87cmV0dXJuIGdyZWF0QXJjO307Z3JlYXRBcmMucHJlY2lzaW9uID0gZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9ncmVhdEFyYzowO307cmV0dXJuIGdyZWF0QXJjO307ZDMuZ2VvLmludGVycG9sYXRlID0gZnVuY3Rpb24oc291cmNlLHRhcmdldCl7cmV0dXJuIGQzX2dlb19pbnRlcnBvbGF0ZShzb3VyY2VbMF0gKiBkM19yYWRpYW5zLHNvdXJjZVsxXSAqIGQzX3JhZGlhbnMsdGFyZ2V0WzBdICogZDNfcmFkaWFucyx0YXJnZXRbMV0gKiBkM19yYWRpYW5zKTt9O2Z1bmN0aW9uIGQzX2dlb19pbnRlcnBvbGF0ZSh4MCx5MCx4MSx5MSl7dmFyIGN5MD1NYXRoLmNvcyh5MCksc3kwPU1hdGguc2luKHkwKSxjeTE9TWF0aC5jb3MoeTEpLHN5MT1NYXRoLnNpbih5MSksa3gwPWN5MCAqIE1hdGguY29zKHgwKSxreTA9Y3kwICogTWF0aC5zaW4oeDApLGt4MT1jeTEgKiBNYXRoLmNvcyh4MSksa3kxPWN5MSAqIE1hdGguc2luKHgxKSxkPTIgKiBNYXRoLmFzaW4oTWF0aC5zcXJ0KGQzX2hhdmVyc2luKHkxIC0geTApICsgY3kwICogY3kxICogZDNfaGF2ZXJzaW4oeDEgLSB4MCkpKSxrPTEgLyBNYXRoLnNpbihkKTt2YXIgaW50ZXJwb2xhdGU9ZD9mdW5jdGlvbih0KXt2YXIgQj1NYXRoLnNpbih0ICo9IGQpICogayxBPU1hdGguc2luKGQgLSB0KSAqIGsseD1BICoga3gwICsgQiAqIGt4MSx5PUEgKiBreTAgKyBCICoga3kxLHo9QSAqIHN5MCArIEIgKiBzeTE7cmV0dXJuIFtNYXRoLmF0YW4yKHkseCkgKiBkM19kZWdyZWVzLE1hdGguYXRhbjIoeixNYXRoLnNxcnQoeCAqIHggKyB5ICogeSkpICogZDNfZGVncmVlc107fTpmdW5jdGlvbigpe3JldHVybiBbeDAgKiBkM19kZWdyZWVzLHkwICogZDNfZGVncmVlc107fTtpbnRlcnBvbGF0ZS5kaXN0YW5jZSA9IGQ7cmV0dXJuIGludGVycG9sYXRlO31kMy5nZW8ubGVuZ3RoID0gZnVuY3Rpb24ob2JqZWN0KXtkM19nZW9fbGVuZ3RoU3VtID0gMDtkMy5nZW8uc3RyZWFtKG9iamVjdCxkM19nZW9fbGVuZ3RoKTtyZXR1cm4gZDNfZ2VvX2xlbmd0aFN1bTt9O3ZhciBkM19nZW9fbGVuZ3RoU3VtO3ZhciBkM19nZW9fbGVuZ3RoPXtzcGhlcmU6ZDNfbm9vcCxwb2ludDpkM19ub29wLGxpbmVTdGFydDpkM19nZW9fbGVuZ3RoTGluZVN0YXJ0LGxpbmVFbmQ6ZDNfbm9vcCxwb2x5Z29uU3RhcnQ6ZDNfbm9vcCxwb2x5Z29uRW5kOmQzX25vb3B9O2Z1bmN0aW9uIGQzX2dlb19sZW5ndGhMaW5lU3RhcnQoKXt2YXIgzrswLHNpbs+GMCxjb3PPhjA7ZDNfZ2VvX2xlbmd0aC5wb2ludCA9IGZ1bmN0aW9uKM67LM+GKXvOuzAgPSDOuyAqIGQzX3JhZGlhbnMsc2luz4YwID0gTWF0aC5zaW4oz4YgKj0gZDNfcmFkaWFucyksY29zz4YwID0gTWF0aC5jb3Moz4YpO2QzX2dlb19sZW5ndGgucG9pbnQgPSBuZXh0UG9pbnQ7fTtkM19nZW9fbGVuZ3RoLmxpbmVFbmQgPSBmdW5jdGlvbigpe2QzX2dlb19sZW5ndGgucG9pbnQgPSBkM19nZW9fbGVuZ3RoLmxpbmVFbmQgPSBkM19ub29wO307ZnVuY3Rpb24gbmV4dFBvaW50KM67LM+GKXt2YXIgc2luz4Y9TWF0aC5zaW4oz4YgKj0gZDNfcmFkaWFucyksY29zz4Y9TWF0aC5jb3Moz4YpLHQ9YWJzKCjOuyAqPSBkM19yYWRpYW5zKSAtIM67MCksY29zzpTOuz1NYXRoLmNvcyh0KTtkM19nZW9fbGVuZ3RoU3VtICs9IE1hdGguYXRhbjIoTWF0aC5zcXJ0KCh0ID0gY29zz4YgKiBNYXRoLnNpbih0KSkgKiB0ICsgKHQgPSBjb3PPhjAgKiBzaW7PhiAtIHNpbs+GMCAqIGNvc8+GICogY29zzpTOuykgKiB0KSxzaW7PhjAgKiBzaW7PhiArIGNvc8+GMCAqIGNvc8+GICogY29zzpTOuyk7zrswID0gzrssc2luz4YwID0gc2luz4YsY29zz4YwID0gY29zz4Y7fX1mdW5jdGlvbiBkM19nZW9fYXppbXV0aGFsKHNjYWxlLGFuZ2xlKXtmdW5jdGlvbiBhemltdXRoYWwozrssz4Ype3ZhciBjb3POuz1NYXRoLmNvcyjOuyksY29zz4Y9TWF0aC5jb3Moz4YpLGs9c2NhbGUoY29zzrsgKiBjb3PPhik7cmV0dXJuIFtrICogY29zz4YgKiBNYXRoLnNpbijOuyksayAqIE1hdGguc2luKM+GKV07fWF6aW11dGhhbC5pbnZlcnQgPSBmdW5jdGlvbih4LHkpe3ZhciDPgT1NYXRoLnNxcnQoeCAqIHggKyB5ICogeSksYz1hbmdsZSjPgSksc2luYz1NYXRoLnNpbihjKSxjb3NjPU1hdGguY29zKGMpO3JldHVybiBbTWF0aC5hdGFuMih4ICogc2luYyzPgSAqIGNvc2MpLE1hdGguYXNpbijPgSAmJiB5ICogc2luYyAvIM+BKV07fTtyZXR1cm4gYXppbXV0aGFsO312YXIgZDNfZ2VvX2F6aW11dGhhbEVxdWFsQXJlYT1kM19nZW9fYXppbXV0aGFsKGZ1bmN0aW9uKGNvc867Y29zz4Ype3JldHVybiBNYXRoLnNxcnQoMiAvICgxICsgY29zzrtjb3PPhikpO30sZnVuY3Rpb24oz4Epe3JldHVybiAyICogTWF0aC5hc2luKM+BIC8gMik7fSk7KGQzLmdlby5hemltdXRoYWxFcXVhbEFyZWEgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19nZW9fYXppbXV0aGFsRXF1YWxBcmVhKTt9KS5yYXcgPSBkM19nZW9fYXppbXV0aGFsRXF1YWxBcmVhO3ZhciBkM19nZW9fYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZDNfZ2VvX2F6aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+GKXt2YXIgYz1NYXRoLmFjb3MoY29zzrtjb3PPhik7cmV0dXJuIGMgJiYgYyAvIE1hdGguc2luKGMpO30sZDNfaWRlbnRpdHkpOyhkMy5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19nZW9fYXppbXV0aGFsRXF1aWRpc3RhbnQpO30pLnJhdyA9IGQzX2dlb19hemltdXRoYWxFcXVpZGlzdGFudDtmdW5jdGlvbiBkM19nZW9fY29uaWNDb25mb3JtYWwoz4YwLM+GMSl7dmFyIGNvc8+GMD1NYXRoLmNvcyjPhjApLHQ9ZnVuY3Rpb24gdCjPhil7cmV0dXJuIE1hdGgudGFuKM+AIC8gNCArIM+GIC8gMik7fSxuPc+GMCA9PT0gz4YxP01hdGguc2luKM+GMCk6TWF0aC5sb2coY29zz4YwIC8gTWF0aC5jb3Moz4YxKSkgLyBNYXRoLmxvZyh0KM+GMSkgLyB0KM+GMCkpLEY9Y29zz4YwICogTWF0aC5wb3codCjPhjApLG4pIC8gbjtpZighbilyZXR1cm4gZDNfZ2VvX21lcmNhdG9yO2Z1bmN0aW9uIGZvcndhcmQozrssz4Ype2lmKEYgPiAwKXtpZijPhiA8IC1oYWxmz4AgKyDOtSnPhiA9IC1oYWxmz4AgKyDOtTt9ZWxzZSB7aWYoz4YgPiBoYWxmz4AgLSDOtSnPhiA9IGhhbGbPgCAtIM61O312YXIgz4E9RiAvIE1hdGgucG93KHQoz4YpLG4pO3JldHVybiBbz4EgKiBNYXRoLnNpbihuICogzrspLEYgLSDPgSAqIE1hdGguY29zKG4gKiDOuyldO31mb3J3YXJkLmludmVydCA9IGZ1bmN0aW9uKHgseSl7dmFyIM+BMF95PUYgLSB5LM+BPWQzX3NnbihuKSAqIE1hdGguc3FydCh4ICogeCArIM+BMF95ICogz4EwX3kpO3JldHVybiBbTWF0aC5hdGFuMih4LM+BMF95KSAvIG4sMiAqIE1hdGguYXRhbihNYXRoLnBvdyhGIC8gz4EsMSAvIG4pKSAtIGhhbGbPgF07fTtyZXR1cm4gZm9yd2FyZDt9KGQzLmdlby5jb25pY0NvbmZvcm1hbCA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX2dlb19jb25pYyhkM19nZW9fY29uaWNDb25mb3JtYWwpO30pLnJhdyA9IGQzX2dlb19jb25pY0NvbmZvcm1hbDtmdW5jdGlvbiBkM19nZW9fY29uaWNFcXVpZGlzdGFudCjPhjAsz4YxKXt2YXIgY29zz4YwPU1hdGguY29zKM+GMCksbj3PhjAgPT09IM+GMT9NYXRoLnNpbijPhjApOihjb3PPhjAgLSBNYXRoLmNvcyjPhjEpKSAvICjPhjEgLSDPhjApLEc9Y29zz4YwIC8gbiArIM+GMDtpZihhYnMobikgPCDOtSlyZXR1cm4gZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcjtmdW5jdGlvbiBmb3J3YXJkKM67LM+GKXt2YXIgz4E9RyAtIM+GO3JldHVybiBbz4EgKiBNYXRoLnNpbihuICogzrspLEcgLSDPgSAqIE1hdGguY29zKG4gKiDOuyldO31mb3J3YXJkLmludmVydCA9IGZ1bmN0aW9uKHgseSl7dmFyIM+BMF95PUcgLSB5O3JldHVybiBbTWF0aC5hdGFuMih4LM+BMF95KSAvIG4sRyAtIGQzX3NnbihuKSAqIE1hdGguc3FydCh4ICogeCArIM+BMF95ICogz4EwX3kpXTt9O3JldHVybiBmb3J3YXJkO30oZDMuZ2VvLmNvbmljRXF1aWRpc3RhbnQgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fY29uaWMoZDNfZ2VvX2NvbmljRXF1aWRpc3RhbnQpO30pLnJhdyA9IGQzX2dlb19jb25pY0VxdWlkaXN0YW50O3ZhciBkM19nZW9fZ25vbW9uaWM9ZDNfZ2VvX2F6aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+GKXtyZXR1cm4gMSAvIGNvc867Y29zz4Y7fSxNYXRoLmF0YW4pOyhkMy5nZW8uZ25vbW9uaWMgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19nZW9fZ25vbW9uaWMpO30pLnJhdyA9IGQzX2dlb19nbm9tb25pYztmdW5jdGlvbiBkM19nZW9fbWVyY2F0b3Iozrssz4Ype3JldHVybiBbzrssTWF0aC5sb2coTWF0aC50YW4oz4AgLyA0ICsgz4YgLyAyKSldO31kM19nZW9fbWVyY2F0b3IuaW52ZXJ0ID0gZnVuY3Rpb24oeCx5KXtyZXR1cm4gW3gsMiAqIE1hdGguYXRhbihNYXRoLmV4cCh5KSkgLSBoYWxmz4BdO307ZnVuY3Rpb24gZDNfZ2VvX21lcmNhdG9yUHJvamVjdGlvbihwcm9qZWN0KXt2YXIgbT1kM19nZW9fcHJvamVjdGlvbihwcm9qZWN0KSxzY2FsZT1tLnNjYWxlLHRyYW5zbGF0ZT1tLnRyYW5zbGF0ZSxjbGlwRXh0ZW50PW0uY2xpcEV4dGVudCxjbGlwQXV0bzttLnNjYWxlID0gZnVuY3Rpb24oKXt2YXIgdj1zY2FsZS5hcHBseShtLGFyZ3VtZW50cyk7cmV0dXJuIHYgPT09IG0/Y2xpcEF1dG8/bS5jbGlwRXh0ZW50KG51bGwpOm06djt9O20udHJhbnNsYXRlID0gZnVuY3Rpb24oKXt2YXIgdj10cmFuc2xhdGUuYXBwbHkobSxhcmd1bWVudHMpO3JldHVybiB2ID09PSBtP2NsaXBBdXRvP20uY2xpcEV4dGVudChudWxsKTptOnY7fTttLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKXt2YXIgdj1jbGlwRXh0ZW50LmFwcGx5KG0sYXJndW1lbnRzKTtpZih2ID09PSBtKXtpZihjbGlwQXV0byA9IF8gPT0gbnVsbCl7dmFyIGs9z4AgKiBzY2FsZSgpLHQ9dHJhbnNsYXRlKCk7Y2xpcEV4dGVudChbW3RbMF0gLSBrLHRbMV0gLSBrXSxbdFswXSArIGssdFsxXSArIGtdXSk7fX1lbHNlIGlmKGNsaXBBdXRvKXt2ID0gbnVsbDt9cmV0dXJuIHY7fTtyZXR1cm4gbS5jbGlwRXh0ZW50KG51bGwpO30oZDMuZ2VvLm1lcmNhdG9yID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfZ2VvX21lcmNhdG9yUHJvamVjdGlvbihkM19nZW9fbWVyY2F0b3IpO30pLnJhdyA9IGQzX2dlb19tZXJjYXRvcjt2YXIgZDNfZ2VvX29ydGhvZ3JhcGhpYz1kM19nZW9fYXppbXV0aGFsKGZ1bmN0aW9uKCl7cmV0dXJuIDE7fSxNYXRoLmFzaW4pOyhkMy5nZW8ub3J0aG9ncmFwaGljID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfZ2VvX3Byb2plY3Rpb24oZDNfZ2VvX29ydGhvZ3JhcGhpYyk7fSkucmF3ID0gZDNfZ2VvX29ydGhvZ3JhcGhpYzt2YXIgZDNfZ2VvX3N0ZXJlb2dyYXBoaWM9ZDNfZ2VvX2F6aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+GKXtyZXR1cm4gMSAvICgxICsgY29zzrtjb3PPhik7fSxmdW5jdGlvbijPgSl7cmV0dXJuIDIgKiBNYXRoLmF0YW4oz4EpO30pOyhkMy5nZW8uc3RlcmVvZ3JhcGhpYyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX2dlb19wcm9qZWN0aW9uKGQzX2dlb19zdGVyZW9ncmFwaGljKTt9KS5yYXcgPSBkM19nZW9fc3RlcmVvZ3JhcGhpYztmdW5jdGlvbiBkM19nZW9fdHJhbnN2ZXJzZU1lcmNhdG9yKM67LM+GKXtyZXR1cm4gW01hdGgubG9nKE1hdGgudGFuKM+AIC8gNCArIM+GIC8gMikpLC3Ou107fWQzX2dlb190cmFuc3ZlcnNlTWVyY2F0b3IuaW52ZXJ0ID0gZnVuY3Rpb24oeCx5KXtyZXR1cm4gWy15LDIgKiBNYXRoLmF0YW4oTWF0aC5leHAoeCkpIC0gaGFsZs+AXTt9OyhkMy5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yID0gZnVuY3Rpb24oKXt2YXIgcHJvamVjdGlvbj1kM19nZW9fbWVyY2F0b3JQcm9qZWN0aW9uKGQzX2dlb190cmFuc3ZlcnNlTWVyY2F0b3IpLGNlbnRlcj1wcm9qZWN0aW9uLmNlbnRlcixyb3RhdGU9cHJvamVjdGlvbi5yb3RhdGU7cHJvamVjdGlvbi5jZW50ZXIgPSBmdW5jdGlvbihfKXtyZXR1cm4gXz9jZW50ZXIoWy1fWzFdLF9bMF1dKTooXyA9IGNlbnRlcigpLFtfWzFdLC1fWzBdXSk7fTtwcm9qZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pe3JldHVybiBfP3JvdGF0ZShbX1swXSxfWzFdLF8ubGVuZ3RoID4gMj9fWzJdICsgOTA6OTBdKTooXyA9IHJvdGF0ZSgpLFtfWzBdLF9bMV0sX1syXSAtIDkwXSk7fTtyZXR1cm4gcm90YXRlKFswLDAsOTBdKTt9KS5yYXcgPSBkM19nZW9fdHJhbnN2ZXJzZU1lcmNhdG9yO2QzLmdlb20gPSB7fTtmdW5jdGlvbiBkM19nZW9tX3BvaW50WChkKXtyZXR1cm4gZFswXTt9ZnVuY3Rpb24gZDNfZ2VvbV9wb2ludFkoZCl7cmV0dXJuIGRbMV07fWQzLmdlb20uaHVsbCA9IGZ1bmN0aW9uKHZlcnRpY2VzKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGh1bGwodmVydGljZXMpO2Z1bmN0aW9uIGh1bGwoZGF0YSl7aWYoZGF0YS5sZW5ndGggPCAzKXJldHVybiBbXTt2YXIgZng9ZDNfZnVuY3Rvcih4KSxmeT1kM19mdW5jdG9yKHkpLGksbj1kYXRhLmxlbmd0aCxwb2ludHM9W10sZmxpcHBlZFBvaW50cz1bXTtmb3IoaSA9IDA7aSA8IG47aSsrKSB7cG9pbnRzLnB1c2goWytmeC5jYWxsKHRoaXMsZGF0YVtpXSxpKSwrZnkuY2FsbCh0aGlzLGRhdGFbaV0saSksaV0pO31wb2ludHMuc29ydChkM19nZW9tX2h1bGxPcmRlcik7Zm9yKGkgPSAwO2kgPCBuO2krKykgZmxpcHBlZFBvaW50cy5wdXNoKFtwb2ludHNbaV1bMF0sLXBvaW50c1tpXVsxXV0pO3ZhciB1cHBlcj1kM19nZW9tX2h1bGxVcHBlcihwb2ludHMpLGxvd2VyPWQzX2dlb21faHVsbFVwcGVyKGZsaXBwZWRQb2ludHMpO3ZhciBza2lwTGVmdD1sb3dlclswXSA9PT0gdXBwZXJbMF0sc2tpcFJpZ2h0PWxvd2VyW2xvd2VyLmxlbmd0aCAtIDFdID09PSB1cHBlclt1cHBlci5sZW5ndGggLSAxXSxwb2x5Z29uPVtdO2ZvcihpID0gdXBwZXIubGVuZ3RoIC0gMTtpID49IDA7LS1pKSBwb2x5Z29uLnB1c2goZGF0YVtwb2ludHNbdXBwZXJbaV1dWzJdXSk7Zm9yKGkgPSArc2tpcExlZnQ7aSA8IGxvd2VyLmxlbmd0aCAtIHNraXBSaWdodDsrK2kpIHBvbHlnb24ucHVzaChkYXRhW3BvaW50c1tsb3dlcltpXV1bMl1dKTtyZXR1cm4gcG9seWdvbjt9aHVsbC54ID0gZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHggPSBfLGh1bGwpOng7fTtodWxsLnkgPSBmdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeSA9IF8saHVsbCk6eTt9O3JldHVybiBodWxsO307ZnVuY3Rpb24gZDNfZ2VvbV9odWxsVXBwZXIocG9pbnRzKXt2YXIgbj1wb2ludHMubGVuZ3RoLGh1bGw9WzAsMV0saHM9Mjtmb3IodmFyIGk9MjtpIDwgbjtpKyspIHt3aGlsZShocyA+IDEgJiYgZDNfY3Jvc3MyZChwb2ludHNbaHVsbFtocyAtIDJdXSxwb2ludHNbaHVsbFtocyAtIDFdXSxwb2ludHNbaV0pIDw9IDApIC0taHM7aHVsbFtocysrXSA9IGk7fXJldHVybiBodWxsLnNsaWNlKDAsaHMpO31mdW5jdGlvbiBkM19nZW9tX2h1bGxPcmRlcihhLGIpe3JldHVybiBhWzBdIC0gYlswXSB8fCBhWzFdIC0gYlsxXTt9ZDMuZ2VvbS5wb2x5Z29uID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpe2QzX3N1YmNsYXNzKGNvb3JkaW5hdGVzLGQzX2dlb21fcG9seWdvblByb3RvdHlwZSk7cmV0dXJuIGNvb3JkaW5hdGVzO307dmFyIGQzX2dlb21fcG9seWdvblByb3RvdHlwZT1kMy5nZW9tLnBvbHlnb24ucHJvdG90eXBlID0gW107ZDNfZ2VvbV9wb2x5Z29uUHJvdG90eXBlLmFyZWEgPSBmdW5jdGlvbigpe3ZhciBpPS0xLG49dGhpcy5sZW5ndGgsYSxiPXRoaXNbbiAtIDFdLGFyZWE9MDt3aGlsZSgrK2kgPCBuKSB7YSA9IGI7YiA9IHRoaXNbaV07YXJlYSArPSBhWzFdICogYlswXSAtIGFbMF0gKiBiWzFdO31yZXR1cm4gYXJlYSAqIC41O307ZDNfZ2VvbV9wb2x5Z29uUHJvdG90eXBlLmNlbnRyb2lkID0gZnVuY3Rpb24oayl7dmFyIGk9LTEsbj10aGlzLmxlbmd0aCx4PTAseT0wLGEsYj10aGlzW24gLSAxXSxjO2lmKCFhcmd1bWVudHMubGVuZ3RoKWsgPSAtMSAvICg2ICogdGhpcy5hcmVhKCkpO3doaWxlKCsraSA8IG4pIHthID0gYjtiID0gdGhpc1tpXTtjID0gYVswXSAqIGJbMV0gLSBiWzBdICogYVsxXTt4ICs9IChhWzBdICsgYlswXSkgKiBjO3kgKz0gKGFbMV0gKyBiWzFdKSAqIGM7fXJldHVybiBbeCAqIGsseSAqIGtdO307ZDNfZ2VvbV9wb2x5Z29uUHJvdG90eXBlLmNsaXAgPSBmdW5jdGlvbihzdWJqZWN0KXt2YXIgaW5wdXQsY2xvc2VkPWQzX2dlb21fcG9seWdvbkNsb3NlZChzdWJqZWN0KSxpPS0xLG49dGhpcy5sZW5ndGggLSBkM19nZW9tX3BvbHlnb25DbG9zZWQodGhpcyksaixtLGE9dGhpc1tuIC0gMV0sYixjLGQ7d2hpbGUoKytpIDwgbikge2lucHV0ID0gc3ViamVjdC5zbGljZSgpO3N1YmplY3QubGVuZ3RoID0gMDtiID0gdGhpc1tpXTtjID0gaW5wdXRbKG0gPSBpbnB1dC5sZW5ndGggLSBjbG9zZWQpIC0gMV07aiA9IC0xO3doaWxlKCsraiA8IG0pIHtkID0gaW5wdXRbal07aWYoZDNfZ2VvbV9wb2x5Z29uSW5zaWRlKGQsYSxiKSl7aWYoIWQzX2dlb21fcG9seWdvbkluc2lkZShjLGEsYikpe3N1YmplY3QucHVzaChkM19nZW9tX3BvbHlnb25JbnRlcnNlY3QoYyxkLGEsYikpO31zdWJqZWN0LnB1c2goZCk7fWVsc2UgaWYoZDNfZ2VvbV9wb2x5Z29uSW5zaWRlKGMsYSxiKSl7c3ViamVjdC5wdXNoKGQzX2dlb21fcG9seWdvbkludGVyc2VjdChjLGQsYSxiKSk7fWMgPSBkO31pZihjbG9zZWQpc3ViamVjdC5wdXNoKHN1YmplY3RbMF0pO2EgPSBiO31yZXR1cm4gc3ViamVjdDt9O2Z1bmN0aW9uIGQzX2dlb21fcG9seWdvbkluc2lkZShwLGEsYil7cmV0dXJuIChiWzBdIC0gYVswXSkgKiAocFsxXSAtIGFbMV0pIDwgKGJbMV0gLSBhWzFdKSAqIChwWzBdIC0gYVswXSk7fWZ1bmN0aW9uIGQzX2dlb21fcG9seWdvbkludGVyc2VjdChjLGQsYSxiKXt2YXIgeDE9Y1swXSx4Mz1hWzBdLHgyMT1kWzBdIC0geDEseDQzPWJbMF0gLSB4Myx5MT1jWzFdLHkzPWFbMV0seTIxPWRbMV0gLSB5MSx5NDM9YlsxXSAtIHkzLHVhPSh4NDMgKiAoeTEgLSB5MykgLSB5NDMgKiAoeDEgLSB4MykpIC8gKHk0MyAqIHgyMSAtIHg0MyAqIHkyMSk7cmV0dXJuIFt4MSArIHVhICogeDIxLHkxICsgdWEgKiB5MjFdO31mdW5jdGlvbiBkM19nZW9tX3BvbHlnb25DbG9zZWQoY29vcmRpbmF0ZXMpe3ZhciBhPWNvb3JkaW5hdGVzWzBdLGI9Y29vcmRpbmF0ZXNbY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV07cmV0dXJuICEoYVswXSAtIGJbMF0gfHwgYVsxXSAtIGJbMV0pO312YXIgZDNfZ2VvbV92b3Jvbm9pRWRnZXMsZDNfZ2VvbV92b3Jvbm9pQ2VsbHMsZDNfZ2VvbV92b3Jvbm9pQmVhY2hlcyxkM19nZW9tX3Zvcm9ub2lCZWFjaFBvb2w9W10sZDNfZ2VvbV92b3Jvbm9pRmlyc3RDaXJjbGUsZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcyxkM19nZW9tX3Zvcm9ub2lDaXJjbGVQb29sPVtdO2Z1bmN0aW9uIGQzX2dlb21fdm9yb25vaUJlYWNoKCl7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKHRoaXMpO3RoaXMuZWRnZSA9IHRoaXMuc2l0ZSA9IHRoaXMuY2lyY2xlID0gbnVsbDt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlQmVhY2goc2l0ZSl7dmFyIGJlYWNoPWQzX2dlb21fdm9yb25vaUJlYWNoUG9vbC5wb3AoKSB8fCBuZXcgZDNfZ2VvbV92b3Jvbm9pQmVhY2goKTtiZWFjaC5zaXRlID0gc2l0ZTtyZXR1cm4gYmVhY2g7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaURldGFjaEJlYWNoKGJlYWNoKXtkM19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUoYmVhY2gpO2QzX2dlb21fdm9yb25vaUJlYWNoZXMucmVtb3ZlKGJlYWNoKTtkM19nZW9tX3Zvcm9ub2lCZWFjaFBvb2wucHVzaChiZWFjaCk7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKGJlYWNoKTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVtb3ZlQmVhY2goYmVhY2gpe3ZhciBjaXJjbGU9YmVhY2guY2lyY2xlLHg9Y2lyY2xlLngseT1jaXJjbGUuY3ksdmVydGV4PXt4OngseTp5fSxwcmV2aW91cz1iZWFjaC5QLG5leHQ9YmVhY2guTixkaXNhcHBlYXJpbmc9W2JlYWNoXTtkM19nZW9tX3Zvcm9ub2lEZXRhY2hCZWFjaChiZWFjaCk7dmFyIGxBcmM9cHJldmlvdXM7d2hpbGUobEFyYy5jaXJjbGUgJiYgYWJzKHggLSBsQXJjLmNpcmNsZS54KSA8IM61ICYmIGFicyh5IC0gbEFyYy5jaXJjbGUuY3kpIDwgzrUpIHtwcmV2aW91cyA9IGxBcmMuUDtkaXNhcHBlYXJpbmcudW5zaGlmdChsQXJjKTtkM19nZW9tX3Zvcm9ub2lEZXRhY2hCZWFjaChsQXJjKTtsQXJjID0gcHJldmlvdXM7fWRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpO2QzX2dlb21fdm9yb25vaURldGFjaENpcmNsZShsQXJjKTt2YXIgckFyYz1uZXh0O3doaWxlKHJBcmMuY2lyY2xlICYmIGFicyh4IC0gckFyYy5jaXJjbGUueCkgPCDOtSAmJiBhYnMoeSAtIHJBcmMuY2lyY2xlLmN5KSA8IM61KSB7bmV4dCA9IHJBcmMuTjtkaXNhcHBlYXJpbmcucHVzaChyQXJjKTtkM19nZW9tX3Zvcm9ub2lEZXRhY2hCZWFjaChyQXJjKTtyQXJjID0gbmV4dDt9ZGlzYXBwZWFyaW5nLnB1c2gockFyYyk7ZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKHJBcmMpO3ZhciBuQXJjcz1kaXNhcHBlYXJpbmcubGVuZ3RoLGlBcmM7Zm9yKGlBcmMgPSAxO2lBcmMgPCBuQXJjczsrK2lBcmMpIHtyQXJjID0gZGlzYXBwZWFyaW5nW2lBcmNdO2xBcmMgPSBkaXNhcHBlYXJpbmdbaUFyYyAtIDFdO2QzX2dlb21fdm9yb25vaVNldEVkZ2VFbmQockFyYy5lZGdlLGxBcmMuc2l0ZSxyQXJjLnNpdGUsdmVydGV4KTt9bEFyYyA9IGRpc2FwcGVhcmluZ1swXTtyQXJjID0gZGlzYXBwZWFyaW5nW25BcmNzIC0gMV07ckFyYy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShsQXJjLnNpdGUsckFyYy5zaXRlLG51bGwsdmVydGV4KTtkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7ZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2lyY2xlKHJBcmMpO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lBZGRCZWFjaChzaXRlKXt2YXIgeD1zaXRlLngsZGlyZWN0cml4PXNpdGUueSxsQXJjLHJBcmMsZHhsLGR4cixub2RlPWQzX2dlb21fdm9yb25vaUJlYWNoZXMuXzt3aGlsZShub2RlKSB7ZHhsID0gZDNfZ2VvbV92b3Jvbm9pTGVmdEJyZWFrUG9pbnQobm9kZSxkaXJlY3RyaXgpIC0geDtpZihkeGwgPiDOtSlub2RlID0gbm9kZS5MO2Vsc2Uge2R4ciA9IHggLSBkM19nZW9tX3Zvcm9ub2lSaWdodEJyZWFrUG9pbnQobm9kZSxkaXJlY3RyaXgpO2lmKGR4ciA+IM61KXtpZighbm9kZS5SKXtsQXJjID0gbm9kZTticmVhazt9bm9kZSA9IG5vZGUuUjt9ZWxzZSB7aWYoZHhsID4gLc61KXtsQXJjID0gbm9kZS5QO3JBcmMgPSBub2RlO31lbHNlIGlmKGR4ciA+IC3OtSl7bEFyYyA9IG5vZGU7ckFyYyA9IG5vZGUuTjt9ZWxzZSB7bEFyYyA9IHJBcmMgPSBub2RlO31icmVhazt9fX12YXIgbmV3QXJjPWQzX2dlb21fdm9yb25vaUNyZWF0ZUJlYWNoKHNpdGUpO2QzX2dlb21fdm9yb25vaUJlYWNoZXMuaW5zZXJ0KGxBcmMsbmV3QXJjKTtpZighbEFyYyAmJiAhckFyYylyZXR1cm47aWYobEFyYyA9PT0gckFyYyl7ZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKGxBcmMpO3JBcmMgPSBkM19nZW9tX3Zvcm9ub2lDcmVhdGVCZWFjaChsQXJjLnNpdGUpO2QzX2dlb21fdm9yb25vaUJlYWNoZXMuaW5zZXJ0KG5ld0FyYyxyQXJjKTtuZXdBcmMuZWRnZSA9IHJBcmMuZWRnZSA9IGQzX2dlb21fdm9yb25vaUNyZWF0ZUVkZ2UobEFyYy5zaXRlLG5ld0FyYy5zaXRlKTtkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7ZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2lyY2xlKHJBcmMpO3JldHVybjt9aWYoIXJBcmMpe25ld0FyYy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShsQXJjLnNpdGUsbmV3QXJjLnNpdGUpO3JldHVybjt9ZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKGxBcmMpO2QzX2dlb21fdm9yb25vaURldGFjaENpcmNsZShyQXJjKTt2YXIgbFNpdGU9bEFyYy5zaXRlLGF4PWxTaXRlLngsYXk9bFNpdGUueSxieD1zaXRlLnggLSBheCxieT1zaXRlLnkgLSBheSxyU2l0ZT1yQXJjLnNpdGUsY3g9clNpdGUueCAtIGF4LGN5PXJTaXRlLnkgLSBheSxkPTIgKiAoYnggKiBjeSAtIGJ5ICogY3gpLGhiPWJ4ICogYnggKyBieSAqIGJ5LGhjPWN4ICogY3ggKyBjeSAqIGN5LHZlcnRleD17eDooY3kgKiBoYiAtIGJ5ICogaGMpIC8gZCArIGF4LHk6KGJ4ICogaGMgLSBjeCAqIGhiKSAvIGQgKyBheX07ZDNfZ2VvbV92b3Jvbm9pU2V0RWRnZUVuZChyQXJjLmVkZ2UsbFNpdGUsclNpdGUsdmVydGV4KTtuZXdBcmMuZWRnZSA9IGQzX2dlb21fdm9yb25vaUNyZWF0ZUVkZ2UobFNpdGUsc2l0ZSxudWxsLHZlcnRleCk7ckFyYy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShzaXRlLHJTaXRlLG51bGwsdmVydGV4KTtkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7ZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2lyY2xlKHJBcmMpO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lMZWZ0QnJlYWtQb2ludChhcmMsZGlyZWN0cml4KXt2YXIgc2l0ZT1hcmMuc2l0ZSxyZm9jeD1zaXRlLngscmZvY3k9c2l0ZS55LHBieTI9cmZvY3kgLSBkaXJlY3RyaXg7aWYoIXBieTIpcmV0dXJuIHJmb2N4O3ZhciBsQXJjPWFyYy5QO2lmKCFsQXJjKXJldHVybiAtSW5maW5pdHk7c2l0ZSA9IGxBcmMuc2l0ZTt2YXIgbGZvY3g9c2l0ZS54LGxmb2N5PXNpdGUueSxwbGJ5Mj1sZm9jeSAtIGRpcmVjdHJpeDtpZighcGxieTIpcmV0dXJuIGxmb2N4O3ZhciBobD1sZm9jeCAtIHJmb2N4LGFieTI9MSAvIHBieTIgLSAxIC8gcGxieTIsYj1obCAvIHBsYnkyO2lmKGFieTIpcmV0dXJuICgtYiArIE1hdGguc3FydChiICogYiAtIDIgKiBhYnkyICogKGhsICogaGwgLyAoLTIgKiBwbGJ5MikgLSBsZm9jeSArIHBsYnkyIC8gMiArIHJmb2N5IC0gcGJ5MiAvIDIpKSkgLyBhYnkyICsgcmZvY3g7cmV0dXJuIChyZm9jeCArIGxmb2N4KSAvIDI7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJpZ2h0QnJlYWtQb2ludChhcmMsZGlyZWN0cml4KXt2YXIgckFyYz1hcmMuTjtpZihyQXJjKXJldHVybiBkM19nZW9tX3Zvcm9ub2lMZWZ0QnJlYWtQb2ludChyQXJjLGRpcmVjdHJpeCk7dmFyIHNpdGU9YXJjLnNpdGU7cmV0dXJuIHNpdGUueSA9PT0gZGlyZWN0cml4P3NpdGUueDpJbmZpbml0eTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ2VsbChzaXRlKXt0aGlzLnNpdGUgPSBzaXRlO3RoaXMuZWRnZXMgPSBbXTt9ZDNfZ2VvbV92b3Jvbm9pQ2VsbC5wcm90b3R5cGUucHJlcGFyZSA9IGZ1bmN0aW9uKCl7dmFyIGhhbGZFZGdlcz10aGlzLmVkZ2VzLGlIYWxmRWRnZT1oYWxmRWRnZXMubGVuZ3RoLGVkZ2U7d2hpbGUoaUhhbGZFZGdlLS0pIHtlZGdlID0gaGFsZkVkZ2VzW2lIYWxmRWRnZV0uZWRnZTtpZighZWRnZS5iIHx8ICFlZGdlLmEpaGFsZkVkZ2VzLnNwbGljZShpSGFsZkVkZ2UsMSk7fWhhbGZFZGdlcy5zb3J0KGQzX2dlb21fdm9yb25vaUhhbGZFZGdlT3JkZXIpO3JldHVybiBoYWxmRWRnZXMubGVuZ3RoO307ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ2xvc2VDZWxscyhleHRlbnQpe3ZhciB4MD1leHRlbnRbMF1bMF0seDE9ZXh0ZW50WzFdWzBdLHkwPWV4dGVudFswXVsxXSx5MT1leHRlbnRbMV1bMV0seDIseTIseDMseTMsY2VsbHM9ZDNfZ2VvbV92b3Jvbm9pQ2VsbHMsaUNlbGw9Y2VsbHMubGVuZ3RoLGNlbGwsaUhhbGZFZGdlLGhhbGZFZGdlcyxuSGFsZkVkZ2VzLHN0YXJ0LGVuZDt3aGlsZShpQ2VsbC0tKSB7Y2VsbCA9IGNlbGxzW2lDZWxsXTtpZighY2VsbCB8fCAhY2VsbC5wcmVwYXJlKCkpY29udGludWU7aGFsZkVkZ2VzID0gY2VsbC5lZGdlcztuSGFsZkVkZ2VzID0gaGFsZkVkZ2VzLmxlbmd0aDtpSGFsZkVkZ2UgPSAwO3doaWxlKGlIYWxmRWRnZSA8IG5IYWxmRWRnZXMpIHtlbmQgPSBoYWxmRWRnZXNbaUhhbGZFZGdlXS5lbmQoKSx4MyA9IGVuZC54LHkzID0gZW5kLnk7c3RhcnQgPSBoYWxmRWRnZXNbKytpSGFsZkVkZ2UgJSBuSGFsZkVkZ2VzXS5zdGFydCgpLHgyID0gc3RhcnQueCx5MiA9IHN0YXJ0Lnk7aWYoYWJzKHgzIC0geDIpID4gzrUgfHwgYWJzKHkzIC0geTIpID4gzrUpe2hhbGZFZGdlcy5zcGxpY2UoaUhhbGZFZGdlLDAsbmV3IGQzX2dlb21fdm9yb25vaUhhbGZFZGdlKGQzX2dlb21fdm9yb25vaUNyZWF0ZUJvcmRlckVkZ2UoY2VsbC5zaXRlLGVuZCxhYnMoeDMgLSB4MCkgPCDOtSAmJiB5MSAtIHkzID4gzrU/e3g6eDAseTphYnMoeDIgLSB4MCkgPCDOtT95Mjp5MX06YWJzKHkzIC0geTEpIDwgzrUgJiYgeDEgLSB4MyA+IM61P3t4OmFicyh5MiAtIHkxKSA8IM61P3gyOngxLHk6eTF9OmFicyh4MyAtIHgxKSA8IM61ICYmIHkzIC0geTAgPiDOtT97eDp4MSx5OmFicyh4MiAtIHgxKSA8IM61P3kyOnkwfTphYnMoeTMgLSB5MCkgPCDOtSAmJiB4MyAtIHgwID4gzrU/e3g6YWJzKHkyIC0geTApIDwgzrU/eDI6eDAseTp5MH06bnVsbCksY2VsbC5zaXRlLG51bGwpKTsrK25IYWxmRWRnZXM7fX19fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUhhbGZFZGdlT3JkZXIoYSxiKXtyZXR1cm4gYi5hbmdsZSAtIGEuYW5nbGU7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNpcmNsZSgpe2QzX2dlb21fdm9yb25vaVJlZEJsYWNrTm9kZSh0aGlzKTt0aGlzLnggPSB0aGlzLnkgPSB0aGlzLmFyYyA9IHRoaXMuc2l0ZSA9IHRoaXMuY3kgPSBudWxsO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUoYXJjKXt2YXIgbEFyYz1hcmMuUCxyQXJjPWFyYy5OO2lmKCFsQXJjIHx8ICFyQXJjKXJldHVybjt2YXIgbFNpdGU9bEFyYy5zaXRlLGNTaXRlPWFyYy5zaXRlLHJTaXRlPXJBcmMuc2l0ZTtpZihsU2l0ZSA9PT0gclNpdGUpcmV0dXJuO3ZhciBieD1jU2l0ZS54LGJ5PWNTaXRlLnksYXg9bFNpdGUueCAtIGJ4LGF5PWxTaXRlLnkgLSBieSxjeD1yU2l0ZS54IC0gYngsY3k9clNpdGUueSAtIGJ5O3ZhciBkPTIgKiAoYXggKiBjeSAtIGF5ICogY3gpO2lmKGQgPj0gLc61MilyZXR1cm47dmFyIGhhPWF4ICogYXggKyBheSAqIGF5LGhjPWN4ICogY3ggKyBjeSAqIGN5LHg9KGN5ICogaGEgLSBheSAqIGhjKSAvIGQseT0oYXggKiBoYyAtIGN4ICogaGEpIC8gZCxjeT15ICsgYnk7dmFyIGNpcmNsZT1kM19nZW9tX3Zvcm9ub2lDaXJjbGVQb29sLnBvcCgpIHx8IG5ldyBkM19nZW9tX3Zvcm9ub2lDaXJjbGUoKTtjaXJjbGUuYXJjID0gYXJjO2NpcmNsZS5zaXRlID0gY1NpdGU7Y2lyY2xlLnggPSB4ICsgYng7Y2lyY2xlLnkgPSBjeSArIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtjaXJjbGUuY3kgPSBjeTthcmMuY2lyY2xlID0gY2lyY2xlO3ZhciBiZWZvcmU9bnVsbCxub2RlPWQzX2dlb21fdm9yb25vaUNpcmNsZXMuXzt3aGlsZShub2RlKSB7aWYoY2lyY2xlLnkgPCBub2RlLnkgfHwgY2lyY2xlLnkgPT09IG5vZGUueSAmJiBjaXJjbGUueCA8PSBub2RlLngpe2lmKG5vZGUuTClub2RlID0gbm9kZS5MO2Vsc2Uge2JlZm9yZSA9IG5vZGUuUDticmVhazt9fWVsc2Uge2lmKG5vZGUuUilub2RlID0gbm9kZS5SO2Vsc2Uge2JlZm9yZSA9IG5vZGU7YnJlYWs7fX19ZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcy5pbnNlcnQoYmVmb3JlLGNpcmNsZSk7aWYoIWJlZm9yZSlkM19nZW9tX3Zvcm9ub2lGaXJzdENpcmNsZSA9IGNpcmNsZTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKGFyYyl7dmFyIGNpcmNsZT1hcmMuY2lyY2xlO2lmKGNpcmNsZSl7aWYoIWNpcmNsZS5QKWQzX2dlb21fdm9yb25vaUZpcnN0Q2lyY2xlID0gY2lyY2xlLk47ZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcy5yZW1vdmUoY2lyY2xlKTtkM19nZW9tX3Zvcm9ub2lDaXJjbGVQb29sLnB1c2goY2lyY2xlKTtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja05vZGUoY2lyY2xlKTthcmMuY2lyY2xlID0gbnVsbDt9fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNsaXBFZGdlcyhleHRlbnQpe3ZhciBlZGdlcz1kM19nZW9tX3Zvcm9ub2lFZGdlcyxjbGlwPWQzX2dlb21fY2xpcExpbmUoZXh0ZW50WzBdWzBdLGV4dGVudFswXVsxXSxleHRlbnRbMV1bMF0sZXh0ZW50WzFdWzFdKSxpPWVkZ2VzLmxlbmd0aCxlO3doaWxlKGktLSkge2UgPSBlZGdlc1tpXTtpZighZDNfZ2VvbV92b3Jvbm9pQ29ubmVjdEVkZ2UoZSxleHRlbnQpIHx8ICFjbGlwKGUpIHx8IGFicyhlLmEueCAtIGUuYi54KSA8IM61ICYmIGFicyhlLmEueSAtIGUuYi55KSA8IM61KXtlLmEgPSBlLmIgPSBudWxsO2VkZ2VzLnNwbGljZShpLDEpO319fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNvbm5lY3RFZGdlKGVkZ2UsZXh0ZW50KXt2YXIgdmI9ZWRnZS5iO2lmKHZiKXJldHVybiB0cnVlO3ZhciB2YT1lZGdlLmEseDA9ZXh0ZW50WzBdWzBdLHgxPWV4dGVudFsxXVswXSx5MD1leHRlbnRbMF1bMV0seTE9ZXh0ZW50WzFdWzFdLGxTaXRlPWVkZ2UubCxyU2l0ZT1lZGdlLnIsbHg9bFNpdGUueCxseT1sU2l0ZS55LHJ4PXJTaXRlLngscnk9clNpdGUueSxmeD0obHggKyByeCkgLyAyLGZ5PShseSArIHJ5KSAvIDIsZm0sZmI7aWYocnkgPT09IGx5KXtpZihmeCA8IHgwIHx8IGZ4ID49IHgxKXJldHVybjtpZihseCA+IHJ4KXtpZighdmEpdmEgPSB7eDpmeCx5OnkwfTtlbHNlIGlmKHZhLnkgPj0geTEpcmV0dXJuO3ZiID0ge3g6ZngseTp5MX07fWVsc2Uge2lmKCF2YSl2YSA9IHt4OmZ4LHk6eTF9O2Vsc2UgaWYodmEueSA8IHkwKXJldHVybjt2YiA9IHt4OmZ4LHk6eTB9O319ZWxzZSB7Zm0gPSAobHggLSByeCkgLyAocnkgLSBseSk7ZmIgPSBmeSAtIGZtICogZng7aWYoZm0gPCAtMSB8fCBmbSA+IDEpe2lmKGx4ID4gcngpe2lmKCF2YSl2YSA9IHt4Oih5MCAtIGZiKSAvIGZtLHk6eTB9O2Vsc2UgaWYodmEueSA+PSB5MSlyZXR1cm47dmIgPSB7eDooeTEgLSBmYikgLyBmbSx5OnkxfTt9ZWxzZSB7aWYoIXZhKXZhID0ge3g6KHkxIC0gZmIpIC8gZm0seTp5MX07ZWxzZSBpZih2YS55IDwgeTApcmV0dXJuO3ZiID0ge3g6KHkwIC0gZmIpIC8gZm0seTp5MH07fX1lbHNlIHtpZihseSA8IHJ5KXtpZighdmEpdmEgPSB7eDp4MCx5OmZtICogeDAgKyBmYn07ZWxzZSBpZih2YS54ID49IHgxKXJldHVybjt2YiA9IHt4OngxLHk6Zm0gKiB4MSArIGZifTt9ZWxzZSB7aWYoIXZhKXZhID0ge3g6eDEseTpmbSAqIHgxICsgZmJ9O2Vsc2UgaWYodmEueCA8IHgwKXJldHVybjt2YiA9IHt4OngwLHk6Zm0gKiB4MCArIGZifTt9fX1lZGdlLmEgPSB2YTtlZGdlLmIgPSB2YjtyZXR1cm4gdHJ1ZTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pRWRnZShsU2l0ZSxyU2l0ZSl7dGhpcy5sID0gbFNpdGU7dGhpcy5yID0gclNpdGU7dGhpcy5hID0gdGhpcy5iID0gbnVsbDt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShsU2l0ZSxyU2l0ZSx2YSx2Yil7dmFyIGVkZ2U9bmV3IGQzX2dlb21fdm9yb25vaUVkZ2UobFNpdGUsclNpdGUpO2QzX2dlb21fdm9yb25vaUVkZ2VzLnB1c2goZWRnZSk7aWYodmEpZDNfZ2VvbV92b3Jvbm9pU2V0RWRnZUVuZChlZGdlLGxTaXRlLHJTaXRlLHZhKTtpZih2YilkM19nZW9tX3Zvcm9ub2lTZXRFZGdlRW5kKGVkZ2UsclNpdGUsbFNpdGUsdmIpO2QzX2dlb21fdm9yb25vaUNlbGxzW2xTaXRlLmldLmVkZ2VzLnB1c2gobmV3IGQzX2dlb21fdm9yb25vaUhhbGZFZGdlKGVkZ2UsbFNpdGUsclNpdGUpKTtkM19nZW9tX3Zvcm9ub2lDZWxsc1tyU2l0ZS5pXS5lZGdlcy5wdXNoKG5ldyBkM19nZW9tX3Zvcm9ub2lIYWxmRWRnZShlZGdlLHJTaXRlLGxTaXRlKSk7cmV0dXJuIGVkZ2U7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNyZWF0ZUJvcmRlckVkZ2UobFNpdGUsdmEsdmIpe3ZhciBlZGdlPW5ldyBkM19nZW9tX3Zvcm9ub2lFZGdlKGxTaXRlLG51bGwpO2VkZ2UuYSA9IHZhO2VkZ2UuYiA9IHZiO2QzX2dlb21fdm9yb25vaUVkZ2VzLnB1c2goZWRnZSk7cmV0dXJuIGVkZ2U7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVNldEVkZ2VFbmQoZWRnZSxsU2l0ZSxyU2l0ZSx2ZXJ0ZXgpe2lmKCFlZGdlLmEgJiYgIWVkZ2UuYil7ZWRnZS5hID0gdmVydGV4O2VkZ2UubCA9IGxTaXRlO2VkZ2UuciA9IHJTaXRlO31lbHNlIGlmKGVkZ2UubCA9PT0gclNpdGUpe2VkZ2UuYiA9IHZlcnRleDt9ZWxzZSB7ZWRnZS5hID0gdmVydGV4O319ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2UoZWRnZSxsU2l0ZSxyU2l0ZSl7dmFyIHZhPWVkZ2UuYSx2Yj1lZGdlLmI7dGhpcy5lZGdlID0gZWRnZTt0aGlzLnNpdGUgPSBsU2l0ZTt0aGlzLmFuZ2xlID0gclNpdGU/TWF0aC5hdGFuMihyU2l0ZS55IC0gbFNpdGUueSxyU2l0ZS54IC0gbFNpdGUueCk6ZWRnZS5sID09PSBsU2l0ZT9NYXRoLmF0YW4yKHZiLnggLSB2YS54LHZhLnkgLSB2Yi55KTpNYXRoLmF0YW4yKHZhLnggLSB2Yi54LHZiLnkgLSB2YS55KTt9ZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2UucHJvdG90eXBlID0ge3N0YXJ0OmZ1bmN0aW9uIHN0YXJ0KCl7cmV0dXJuIHRoaXMuZWRnZS5sID09PSB0aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmI7fSxlbmQ6ZnVuY3Rpb24gZW5kKCl7cmV0dXJuIHRoaXMuZWRnZS5sID09PSB0aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmE7fX07ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tUcmVlKCl7dGhpcy5fID0gbnVsbDt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKG5vZGUpe25vZGUuVSA9IG5vZGUuQyA9IG5vZGUuTCA9IG5vZGUuUiA9IG5vZGUuUCA9IG5vZGUuTiA9IG51bGw7fWQzX2dlb21fdm9yb25vaVJlZEJsYWNrVHJlZS5wcm90b3R5cGUgPSB7aW5zZXJ0OmZ1bmN0aW9uIGluc2VydChhZnRlcixub2RlKXt2YXIgcGFyZW50LGdyYW5kcGEsdW5jbGU7aWYoYWZ0ZXIpe25vZGUuUCA9IGFmdGVyO25vZGUuTiA9IGFmdGVyLk47aWYoYWZ0ZXIuTilhZnRlci5OLlAgPSBub2RlO2FmdGVyLk4gPSBub2RlO2lmKGFmdGVyLlIpe2FmdGVyID0gYWZ0ZXIuUjt3aGlsZShhZnRlci5MKSBhZnRlciA9IGFmdGVyLkw7YWZ0ZXIuTCA9IG5vZGU7fWVsc2Uge2FmdGVyLlIgPSBub2RlO31wYXJlbnQgPSBhZnRlcjt9ZWxzZSBpZih0aGlzLl8pe2FmdGVyID0gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tGaXJzdCh0aGlzLl8pO25vZGUuUCA9IG51bGw7bm9kZS5OID0gYWZ0ZXI7YWZ0ZXIuUCA9IGFmdGVyLkwgPSBub2RlO3BhcmVudCA9IGFmdGVyO31lbHNlIHtub2RlLlAgPSBub2RlLk4gPSBudWxsO3RoaXMuXyA9IG5vZGU7cGFyZW50ID0gbnVsbDt9bm9kZS5MID0gbm9kZS5SID0gbnVsbDtub2RlLlUgPSBwYXJlbnQ7bm9kZS5DID0gdHJ1ZTthZnRlciA9IG5vZGU7d2hpbGUocGFyZW50ICYmIHBhcmVudC5DKSB7Z3JhbmRwYSA9IHBhcmVudC5VO2lmKHBhcmVudCA9PT0gZ3JhbmRwYS5MKXt1bmNsZSA9IGdyYW5kcGEuUjtpZih1bmNsZSAmJiB1bmNsZS5DKXtwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTtncmFuZHBhLkMgPSB0cnVlO2FmdGVyID0gZ3JhbmRwYTt9ZWxzZSB7aWYoYWZ0ZXIgPT09IHBhcmVudC5SKXtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZUxlZnQodGhpcyxwYXJlbnQpO2FmdGVyID0gcGFyZW50O3BhcmVudCA9IGFmdGVyLlU7fXBhcmVudC5DID0gZmFsc2U7Z3JhbmRwYS5DID0gdHJ1ZTtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsZ3JhbmRwYSk7fX1lbHNlIHt1bmNsZSA9IGdyYW5kcGEuTDtpZih1bmNsZSAmJiB1bmNsZS5DKXtwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTtncmFuZHBhLkMgPSB0cnVlO2FmdGVyID0gZ3JhbmRwYTt9ZWxzZSB7aWYoYWZ0ZXIgPT09IHBhcmVudC5MKXtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMscGFyZW50KTthZnRlciA9IHBhcmVudDtwYXJlbnQgPSBhZnRlci5VO31wYXJlbnQuQyA9IGZhbHNlO2dyYW5kcGEuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsZ3JhbmRwYSk7fX1wYXJlbnQgPSBhZnRlci5VO310aGlzLl8uQyA9IGZhbHNlO30scmVtb3ZlOmZ1bmN0aW9uIHJlbW92ZShub2RlKXtpZihub2RlLk4pbm9kZS5OLlAgPSBub2RlLlA7aWYobm9kZS5QKW5vZGUuUC5OID0gbm9kZS5OO25vZGUuTiA9IG5vZGUuUCA9IG51bGw7dmFyIHBhcmVudD1ub2RlLlUsc2libGluZyxsZWZ0PW5vZGUuTCxyaWdodD1ub2RlLlIsbmV4dCxyZWQ7aWYoIWxlZnQpbmV4dCA9IHJpZ2h0O2Vsc2UgaWYoIXJpZ2h0KW5leHQgPSBsZWZ0O2Vsc2UgbmV4dCA9IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrRmlyc3QocmlnaHQpO2lmKHBhcmVudCl7aWYocGFyZW50LkwgPT09IG5vZGUpcGFyZW50LkwgPSBuZXh0O2Vsc2UgcGFyZW50LlIgPSBuZXh0O31lbHNlIHt0aGlzLl8gPSBuZXh0O31pZihsZWZ0ICYmIHJpZ2h0KXtyZWQgPSBuZXh0LkM7bmV4dC5DID0gbm9kZS5DO25leHQuTCA9IGxlZnQ7bGVmdC5VID0gbmV4dDtpZihuZXh0ICE9PSByaWdodCl7cGFyZW50ID0gbmV4dC5VO25leHQuVSA9IG5vZGUuVTtub2RlID0gbmV4dC5SO3BhcmVudC5MID0gbm9kZTtuZXh0LlIgPSByaWdodDtyaWdodC5VID0gbmV4dDt9ZWxzZSB7bmV4dC5VID0gcGFyZW50O3BhcmVudCA9IG5leHQ7bm9kZSA9IG5leHQuUjt9fWVsc2Uge3JlZCA9IG5vZGUuQztub2RlID0gbmV4dDt9aWYobm9kZSlub2RlLlUgPSBwYXJlbnQ7aWYocmVkKXJldHVybjtpZihub2RlICYmIG5vZGUuQyl7bm9kZS5DID0gZmFsc2U7cmV0dXJuO31kbyB7aWYobm9kZSA9PT0gdGhpcy5fKWJyZWFrO2lmKG5vZGUgPT09IHBhcmVudC5MKXtzaWJsaW5nID0gcGFyZW50LlI7aWYoc2libGluZy5DKXtzaWJsaW5nLkMgPSBmYWxzZTtwYXJlbnQuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMscGFyZW50KTtzaWJsaW5nID0gcGFyZW50LlI7fWlmKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQyB8fCBzaWJsaW5nLlIgJiYgc2libGluZy5SLkMpe2lmKCFzaWJsaW5nLlIgfHwgIXNpYmxpbmcuUi5DKXtzaWJsaW5nLkwuQyA9IGZhbHNlO3NpYmxpbmcuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLHNpYmxpbmcpO3NpYmxpbmcgPSBwYXJlbnQuUjt9c2libGluZy5DID0gcGFyZW50LkM7cGFyZW50LkMgPSBzaWJsaW5nLlIuQyA9IGZhbHNlO2QzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLHBhcmVudCk7bm9kZSA9IHRoaXMuXzticmVhazt9fWVsc2Uge3NpYmxpbmcgPSBwYXJlbnQuTDtpZihzaWJsaW5nLkMpe3NpYmxpbmcuQyA9IGZhbHNlO3BhcmVudC5DID0gdHJ1ZTtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMscGFyZW50KTtzaWJsaW5nID0gcGFyZW50Lkw7fWlmKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQyB8fCBzaWJsaW5nLlIgJiYgc2libGluZy5SLkMpe2lmKCFzaWJsaW5nLkwgfHwgIXNpYmxpbmcuTC5DKXtzaWJsaW5nLlIuQyA9IGZhbHNlO3NpYmxpbmcuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsc2libGluZyk7c2libGluZyA9IHBhcmVudC5MO31zaWJsaW5nLkMgPSBwYXJlbnQuQztwYXJlbnQuQyA9IHNpYmxpbmcuTC5DID0gZmFsc2U7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLHBhcmVudCk7bm9kZSA9IHRoaXMuXzticmVhazt9fXNpYmxpbmcuQyA9IHRydWU7bm9kZSA9IHBhcmVudDtwYXJlbnQgPSBwYXJlbnQuVTt9d2hpbGUoIW5vZGUuQyk7aWYobm9kZSlub2RlLkMgPSBmYWxzZTt9fTtmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZUxlZnQodHJlZSxub2RlKXt2YXIgcD1ub2RlLHE9bm9kZS5SLHBhcmVudD1wLlU7aWYocGFyZW50KXtpZihwYXJlbnQuTCA9PT0gcClwYXJlbnQuTCA9IHE7ZWxzZSBwYXJlbnQuUiA9IHE7fWVsc2Uge3RyZWUuXyA9IHE7fXEuVSA9IHBhcmVudDtwLlUgPSBxO3AuUiA9IHEuTDtpZihwLlIpcC5SLlUgPSBwO3EuTCA9IHA7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlUmlnaHQodHJlZSxub2RlKXt2YXIgcD1ub2RlLHE9bm9kZS5MLHBhcmVudD1wLlU7aWYocGFyZW50KXtpZihwYXJlbnQuTCA9PT0gcClwYXJlbnQuTCA9IHE7ZWxzZSBwYXJlbnQuUiA9IHE7fWVsc2Uge3RyZWUuXyA9IHE7fXEuVSA9IHBhcmVudDtwLlUgPSBxO3AuTCA9IHEuUjtpZihwLkwpcC5MLlUgPSBwO3EuUiA9IHA7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrRmlyc3Qobm9kZSl7d2hpbGUobm9kZS5MKSBub2RlID0gbm9kZS5MO3JldHVybiBub2RlO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2koc2l0ZXMsYmJveCl7dmFyIHNpdGU9c2l0ZXMuc29ydChkM19nZW9tX3Zvcm9ub2lWZXJ0ZXhPcmRlcikucG9wKCkseDAseTAsY2lyY2xlO2QzX2dlb21fdm9yb25vaUVkZ2VzID0gW107ZDNfZ2VvbV92b3Jvbm9pQ2VsbHMgPSBuZXcgQXJyYXkoc2l0ZXMubGVuZ3RoKTtkM19nZW9tX3Zvcm9ub2lCZWFjaGVzID0gbmV3IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrVHJlZSgpO2QzX2dlb21fdm9yb25vaUNpcmNsZXMgPSBuZXcgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tUcmVlKCk7d2hpbGUodHJ1ZSkge2NpcmNsZSA9IGQzX2dlb21fdm9yb25vaUZpcnN0Q2lyY2xlO2lmKHNpdGUgJiYgKCFjaXJjbGUgfHwgc2l0ZS55IDwgY2lyY2xlLnkgfHwgc2l0ZS55ID09PSBjaXJjbGUueSAmJiBzaXRlLnggPCBjaXJjbGUueCkpe2lmKHNpdGUueCAhPT0geDAgfHwgc2l0ZS55ICE9PSB5MCl7ZDNfZ2VvbV92b3Jvbm9pQ2VsbHNbc2l0ZS5pXSA9IG5ldyBkM19nZW9tX3Zvcm9ub2lDZWxsKHNpdGUpO2QzX2dlb21fdm9yb25vaUFkZEJlYWNoKHNpdGUpO3gwID0gc2l0ZS54LHkwID0gc2l0ZS55O31zaXRlID0gc2l0ZXMucG9wKCk7fWVsc2UgaWYoY2lyY2xlKXtkM19nZW9tX3Zvcm9ub2lSZW1vdmVCZWFjaChjaXJjbGUuYXJjKTt9ZWxzZSB7YnJlYWs7fX1pZihiYm94KWQzX2dlb21fdm9yb25vaUNsaXBFZGdlcyhiYm94KSxkM19nZW9tX3Zvcm9ub2lDbG9zZUNlbGxzKGJib3gpO3ZhciBkaWFncmFtPXtjZWxsczpkM19nZW9tX3Zvcm9ub2lDZWxscyxlZGdlczpkM19nZW9tX3Zvcm9ub2lFZGdlc307ZDNfZ2VvbV92b3Jvbm9pQmVhY2hlcyA9IGQzX2dlb21fdm9yb25vaUNpcmNsZXMgPSBkM19nZW9tX3Zvcm9ub2lFZGdlcyA9IGQzX2dlb21fdm9yb25vaUNlbGxzID0gbnVsbDtyZXR1cm4gZGlhZ3JhbTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pVmVydGV4T3JkZXIoYSxiKXtyZXR1cm4gYi55IC0gYS55IHx8IGIueCAtIGEueDt9ZDMuZ2VvbS52b3Jvbm9pID0gZnVuY3Rpb24ocG9pbnRzKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZLGZ4PXgsZnk9eSxjbGlwRXh0ZW50PWQzX2dlb21fdm9yb25vaUNsaXBFeHRlbnQ7aWYocG9pbnRzKXJldHVybiB2b3Jvbm9pKHBvaW50cyk7ZnVuY3Rpb24gdm9yb25vaShkYXRhKXt2YXIgcG9seWdvbnM9bmV3IEFycmF5KGRhdGEubGVuZ3RoKSx4MD1jbGlwRXh0ZW50WzBdWzBdLHkwPWNsaXBFeHRlbnRbMF1bMV0seDE9Y2xpcEV4dGVudFsxXVswXSx5MT1jbGlwRXh0ZW50WzFdWzFdO2QzX2dlb21fdm9yb25vaShzaXRlcyhkYXRhKSxjbGlwRXh0ZW50KS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwsaSl7dmFyIGVkZ2VzPWNlbGwuZWRnZXMsc2l0ZT1jZWxsLnNpdGUscG9seWdvbj1wb2x5Z29uc1tpXSA9IGVkZ2VzLmxlbmd0aD9lZGdlcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHM9ZS5zdGFydCgpO3JldHVybiBbcy54LHMueV07fSk6c2l0ZS54ID49IHgwICYmIHNpdGUueCA8PSB4MSAmJiBzaXRlLnkgPj0geTAgJiYgc2l0ZS55IDw9IHkxP1tbeDAseTFdLFt4MSx5MV0sW3gxLHkwXSxbeDAseTBdXTpbXTtwb2x5Z29uLnBvaW50ID0gZGF0YVtpXTt9KTtyZXR1cm4gcG9seWdvbnM7fWZ1bmN0aW9uIHNpdGVzKGRhdGEpe3JldHVybiBkYXRhLm1hcChmdW5jdGlvbihkLGkpe3JldHVybiB7eDpNYXRoLnJvdW5kKGZ4KGQsaSkgLyDOtSkgKiDOtSx5Ok1hdGgucm91bmQoZnkoZCxpKSAvIM61KSAqIM61LGk6aX07fSk7fXZvcm9ub2kubGlua3MgPSBmdW5jdGlvbihkYXRhKXtyZXR1cm4gZDNfZ2VvbV92b3Jvbm9pKHNpdGVzKGRhdGEpKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZWRnZSl7cmV0dXJuIGVkZ2UubCAmJiBlZGdlLnI7fSkubWFwKGZ1bmN0aW9uKGVkZ2Upe3JldHVybiB7c291cmNlOmRhdGFbZWRnZS5sLmldLHRhcmdldDpkYXRhW2VkZ2Uuci5pXX07fSk7fTt2b3Jvbm9pLnRyaWFuZ2xlcyA9IGZ1bmN0aW9uKGRhdGEpe3ZhciB0cmlhbmdsZXM9W107ZDNfZ2VvbV92b3Jvbm9pKHNpdGVzKGRhdGEpKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwsaSl7dmFyIHNpdGU9Y2VsbC5zaXRlLGVkZ2VzPWNlbGwuZWRnZXMuc29ydChkM19nZW9tX3Zvcm9ub2lIYWxmRWRnZU9yZGVyKSxqPS0xLG09ZWRnZXMubGVuZ3RoLGUwLHMwLGUxPWVkZ2VzW20gLSAxXS5lZGdlLHMxPWUxLmwgPT09IHNpdGU/ZTEucjplMS5sO3doaWxlKCsraiA8IG0pIHtlMCA9IGUxO3MwID0gczE7ZTEgPSBlZGdlc1tqXS5lZGdlO3MxID0gZTEubCA9PT0gc2l0ZT9lMS5yOmUxLmw7aWYoaSA8IHMwLmkgJiYgaSA8IHMxLmkgJiYgZDNfZ2VvbV92b3Jvbm9pVHJpYW5nbGVBcmVhKHNpdGUsczAsczEpIDwgMCl7dHJpYW5nbGVzLnB1c2goW2RhdGFbaV0sZGF0YVtzMC5pXSxkYXRhW3MxLmldXSk7fX19KTtyZXR1cm4gdHJpYW5nbGVzO307dm9yb25vaS54ID0gZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZ4ID0gZDNfZnVuY3Rvcih4ID0gXyksdm9yb25vaSk6eDt9O3Zvcm9ub2kueSA9IGZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmeSA9IGQzX2Z1bmN0b3IoeSA9IF8pLHZvcm9ub2kpOnk7fTt2b3Jvbm9pLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2xpcEV4dGVudCA9PT0gZDNfZ2VvbV92b3Jvbm9pQ2xpcEV4dGVudD9udWxsOmNsaXBFeHRlbnQ7Y2xpcEV4dGVudCA9IF8gPT0gbnVsbD9kM19nZW9tX3Zvcm9ub2lDbGlwRXh0ZW50Ol87cmV0dXJuIHZvcm9ub2k7fTt2b3Jvbm9pLnNpemUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2xpcEV4dGVudCA9PT0gZDNfZ2VvbV92b3Jvbm9pQ2xpcEV4dGVudD9udWxsOmNsaXBFeHRlbnQgJiYgY2xpcEV4dGVudFsxXTtyZXR1cm4gdm9yb25vaS5jbGlwRXh0ZW50KF8gJiYgW1swLDBdLF9dKTt9O3JldHVybiB2b3Jvbm9pO307dmFyIGQzX2dlb21fdm9yb25vaUNsaXBFeHRlbnQ9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pVHJpYW5nbGVBcmVhKGEsYixjKXtyZXR1cm4gKGEueCAtIGMueCkgKiAoYi55IC0gYS55KSAtIChhLnggLSBiLngpICogKGMueSAtIGEueSk7fWQzLmdlb20uZGVsYXVuYXkgPSBmdW5jdGlvbih2ZXJ0aWNlcyl7cmV0dXJuIGQzLmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyh2ZXJ0aWNlcyk7fTtkMy5nZW9tLnF1YWR0cmVlID0gZnVuY3Rpb24ocG9pbnRzLHgxLHkxLHgyLHkyKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZLGNvbXBhdDtpZihjb21wYXQgPSBhcmd1bWVudHMubGVuZ3RoKXt4ID0gZDNfZ2VvbV9xdWFkdHJlZUNvbXBhdFg7eSA9IGQzX2dlb21fcXVhZHRyZWVDb21wYXRZO2lmKGNvbXBhdCA9PT0gMyl7eTIgPSB5MTt4MiA9IHgxO3kxID0geDEgPSAwO31yZXR1cm4gcXVhZHRyZWUocG9pbnRzKTt9ZnVuY3Rpb24gcXVhZHRyZWUoZGF0YSl7dmFyIGQsZng9ZDNfZnVuY3Rvcih4KSxmeT1kM19mdW5jdG9yKHkpLHhzLHlzLGksbix4MV8seTFfLHgyXyx5Ml87aWYoeDEgIT0gbnVsbCl7eDFfID0geDEseTFfID0geTEseDJfID0geDIseTJfID0geTI7fWVsc2Uge3gyXyA9IHkyXyA9IC0oeDFfID0geTFfID0gSW5maW5pdHkpO3hzID0gW10seXMgPSBbXTtuID0gZGF0YS5sZW5ndGg7aWYoY29tcGF0KWZvcihpID0gMDtpIDwgbjsrK2kpIHtkID0gZGF0YVtpXTtpZihkLnggPCB4MV8peDFfID0gZC54O2lmKGQueSA8IHkxXyl5MV8gPSBkLnk7aWYoZC54ID4geDJfKXgyXyA9IGQueDtpZihkLnkgPiB5Ml8peTJfID0gZC55O3hzLnB1c2goZC54KTt5cy5wdXNoKGQueSk7fWVsc2UgZm9yKGkgPSAwO2kgPCBuOysraSkge3ZhciB4Xz0rZngoZCA9IGRhdGFbaV0saSkseV89K2Z5KGQsaSk7aWYoeF8gPCB4MV8peDFfID0geF87aWYoeV8gPCB5MV8peTFfID0geV87aWYoeF8gPiB4Ml8peDJfID0geF87aWYoeV8gPiB5Ml8peTJfID0geV87eHMucHVzaCh4Xyk7eXMucHVzaCh5Xyk7fX12YXIgZHg9eDJfIC0geDFfLGR5PXkyXyAtIHkxXztpZihkeCA+IGR5KXkyXyA9IHkxXyArIGR4O2Vsc2UgeDJfID0geDFfICsgZHk7ZnVuY3Rpb24gaW5zZXJ0KG4sZCx4LHkseDEseTEseDIseTIpe2lmKGlzTmFOKHgpIHx8IGlzTmFOKHkpKXJldHVybjtpZihuLmxlYWYpe3ZhciBueD1uLngsbnk9bi55O2lmKG54ICE9IG51bGwpe2lmKGFicyhueCAtIHgpICsgYWJzKG55IC0geSkgPCAuMDEpe2luc2VydENoaWxkKG4sZCx4LHkseDEseTEseDIseTIpO31lbHNlIHt2YXIgblBvaW50PW4ucG9pbnQ7bi54ID0gbi55ID0gbi5wb2ludCA9IG51bGw7aW5zZXJ0Q2hpbGQobixuUG9pbnQsbngsbnkseDEseTEseDIseTIpO2luc2VydENoaWxkKG4sZCx4LHkseDEseTEseDIseTIpO319ZWxzZSB7bi54ID0geCxuLnkgPSB5LG4ucG9pbnQgPSBkO319ZWxzZSB7aW5zZXJ0Q2hpbGQobixkLHgseSx4MSx5MSx4Mix5Mik7fX1mdW5jdGlvbiBpbnNlcnRDaGlsZChuLGQseCx5LHgxLHkxLHgyLHkyKXt2YXIgeG09KHgxICsgeDIpICogLjUseW09KHkxICsgeTIpICogLjUscmlnaHQ9eCA+PSB4bSxiZWxvdz15ID49IHltLGk9YmVsb3cgPDwgMSB8IHJpZ2h0O24ubGVhZiA9IGZhbHNlO24gPSBuLm5vZGVzW2ldIHx8IChuLm5vZGVzW2ldID0gZDNfZ2VvbV9xdWFkdHJlZU5vZGUoKSk7aWYocmlnaHQpeDEgPSB4bTtlbHNlIHgyID0geG07aWYoYmVsb3cpeTEgPSB5bTtlbHNlIHkyID0geW07aW5zZXJ0KG4sZCx4LHkseDEseTEseDIseTIpO312YXIgcm9vdD1kM19nZW9tX3F1YWR0cmVlTm9kZSgpO3Jvb3QuYWRkID0gZnVuY3Rpb24oZCl7aW5zZXJ0KHJvb3QsZCwrZngoZCwrK2kpLCtmeShkLGkpLHgxXyx5MV8seDJfLHkyXyk7fTtyb290LnZpc2l0ID0gZnVuY3Rpb24oZil7ZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYscm9vdCx4MV8seTFfLHgyXyx5Ml8pO307cm9vdC5maW5kID0gZnVuY3Rpb24ocG9pbnQpe3JldHVybiBkM19nZW9tX3F1YWR0cmVlRmluZChyb290LHBvaW50WzBdLHBvaW50WzFdLHgxXyx5MV8seDJfLHkyXyk7fTtpID0gLTE7aWYoeDEgPT0gbnVsbCl7d2hpbGUoKytpIDwgbikge2luc2VydChyb290LGRhdGFbaV0seHNbaV0seXNbaV0seDFfLHkxXyx4Ml8seTJfKTt9LS1pO31lbHNlIGRhdGEuZm9yRWFjaChyb290LmFkZCk7eHMgPSB5cyA9IGRhdGEgPSBkID0gbnVsbDtyZXR1cm4gcm9vdDt9cXVhZHRyZWUueCA9IGZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4ID0gXyxxdWFkdHJlZSk6eDt9O3F1YWR0cmVlLnkgPSBmdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeSA9IF8scXVhZHRyZWUpOnk7fTtxdWFkdHJlZS5leHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDEgPT0gbnVsbD9udWxsOltbeDEseTFdLFt4Mix5Ml1dO2lmKF8gPT0gbnVsbCl4MSA9IHkxID0geDIgPSB5MiA9IG51bGw7ZWxzZSB4MSA9ICtfWzBdWzBdLHkxID0gK19bMF1bMV0seDIgPSArX1sxXVswXSx5MiA9ICtfWzFdWzFdO3JldHVybiBxdWFkdHJlZTt9O3F1YWR0cmVlLnNpemUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDEgPT0gbnVsbD9udWxsOlt4MiAtIHgxLHkyIC0geTFdO2lmKF8gPT0gbnVsbCl4MSA9IHkxID0geDIgPSB5MiA9IG51bGw7ZWxzZSB4MSA9IHkxID0gMCx4MiA9ICtfWzBdLHkyID0gK19bMV07cmV0dXJuIHF1YWR0cmVlO307cmV0dXJuIHF1YWR0cmVlO307ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZUNvbXBhdFgoZCl7cmV0dXJuIGQueDt9ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZUNvbXBhdFkoZCl7cmV0dXJuIGQueTt9ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZU5vZGUoKXtyZXR1cm4ge2xlYWY6dHJ1ZSxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGx9O31mdW5jdGlvbiBkM19nZW9tX3F1YWR0cmVlVmlzaXQoZixub2RlLHgxLHkxLHgyLHkyKXtpZighZihub2RlLHgxLHkxLHgyLHkyKSl7dmFyIHN4PSh4MSArIHgyKSAqIC41LHN5PSh5MSArIHkyKSAqIC41LGNoaWxkcmVuPW5vZGUubm9kZXM7aWYoY2hpbGRyZW5bMF0pZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYsY2hpbGRyZW5bMF0seDEseTEsc3gsc3kpO2lmKGNoaWxkcmVuWzFdKWQzX2dlb21fcXVhZHRyZWVWaXNpdChmLGNoaWxkcmVuWzFdLHN4LHkxLHgyLHN5KTtpZihjaGlsZHJlblsyXSlkM19nZW9tX3F1YWR0cmVlVmlzaXQoZixjaGlsZHJlblsyXSx4MSxzeSxzeCx5Mik7aWYoY2hpbGRyZW5bM10pZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYsY2hpbGRyZW5bM10sc3gsc3kseDIseTIpO319ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZUZpbmQocm9vdCx4LHkseDAseTAseDMseTMpe3ZhciBtaW5EaXN0YW5jZTI9SW5maW5pdHksY2xvc2VzdFBvaW50OyhmdW5jdGlvbiBmaW5kKG5vZGUseDEseTEseDIseTIpe2lmKHgxID4geDMgfHwgeTEgPiB5MyB8fCB4MiA8IHgwIHx8IHkyIDwgeTApcmV0dXJuO2lmKHBvaW50ID0gbm9kZS5wb2ludCl7dmFyIHBvaW50LGR4PXggLSBub2RlLngsZHk9eSAtIG5vZGUueSxkaXN0YW5jZTI9ZHggKiBkeCArIGR5ICogZHk7aWYoZGlzdGFuY2UyIDwgbWluRGlzdGFuY2UyKXt2YXIgZGlzdGFuY2U9TWF0aC5zcXJ0KG1pbkRpc3RhbmNlMiA9IGRpc3RhbmNlMik7eDAgPSB4IC0gZGlzdGFuY2UseTAgPSB5IC0gZGlzdGFuY2U7eDMgPSB4ICsgZGlzdGFuY2UseTMgPSB5ICsgZGlzdGFuY2U7Y2xvc2VzdFBvaW50ID0gcG9pbnQ7fX12YXIgY2hpbGRyZW49bm9kZS5ub2Rlcyx4bT0oeDEgKyB4MikgKiAuNSx5bT0oeTEgKyB5MikgKiAuNSxyaWdodD14ID49IHhtLGJlbG93PXkgPj0geW07Zm9yKHZhciBpPWJlbG93IDw8IDEgfCByaWdodCxqPWkgKyA0O2kgPCBqOysraSkge2lmKG5vZGUgPSBjaGlsZHJlbltpICYgM10pc3dpdGNoKGkgJiAzKXtjYXNlIDA6ZmluZChub2RlLHgxLHkxLHhtLHltKTticmVhaztjYXNlIDE6ZmluZChub2RlLHhtLHkxLHgyLHltKTticmVhaztjYXNlIDI6ZmluZChub2RlLHgxLHltLHhtLHkyKTticmVhaztjYXNlIDM6ZmluZChub2RlLHhtLHltLHgyLHkyKTticmVhazt9fX0pKHJvb3QseDAseTAseDMseTMpO3JldHVybiBjbG9zZXN0UG9pbnQ7fWQzLmludGVycG9sYXRlUmdiID0gZDNfaW50ZXJwb2xhdGVSZ2I7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVSZ2IoYSxiKXthID0gZDMucmdiKGEpO2IgPSBkMy5yZ2IoYik7dmFyIGFyPWEucixhZz1hLmcsYWI9YS5iLGJyPWIuciAtIGFyLGJnPWIuZyAtIGFnLGJiPWIuYiAtIGFiO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXCIjXCIgKyBkM19yZ2JfaGV4KE1hdGgucm91bmQoYXIgKyBiciAqIHQpKSArIGQzX3JnYl9oZXgoTWF0aC5yb3VuZChhZyArIGJnICogdCkpICsgZDNfcmdiX2hleChNYXRoLnJvdW5kKGFiICsgYmIgKiB0KSk7fTt9ZDMuaW50ZXJwb2xhdGVPYmplY3QgPSBkM19pbnRlcnBvbGF0ZU9iamVjdDtmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZU9iamVjdChhLGIpe3ZhciBpPXt9LGM9e30saztmb3IoayBpbiBhKSB7aWYoayBpbiBiKXtpW2tdID0gZDNfaW50ZXJwb2xhdGUoYVtrXSxiW2tdKTt9ZWxzZSB7Y1trXSA9IGFba107fX1mb3IoayBpbiBiKSB7aWYoIShrIGluIGEpKXtjW2tdID0gYltrXTt9fXJldHVybiBmdW5jdGlvbih0KXtmb3IoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtyZXR1cm4gYzt9O31kMy5pbnRlcnBvbGF0ZU51bWJlciA9IGQzX2ludGVycG9sYXRlTnVtYmVyO2Z1bmN0aW9uIGQzX2ludGVycG9sYXRlTnVtYmVyKGEsYil7YSA9ICthLGIgPSArYjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7fTt9ZDMuaW50ZXJwb2xhdGVTdHJpbmcgPSBkM19pbnRlcnBvbGF0ZVN0cmluZztmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZVN0cmluZyhhLGIpe3ZhciBiaT1kM19pbnRlcnBvbGF0ZV9udW1iZXJBLmxhc3RJbmRleCA9IGQzX2ludGVycG9sYXRlX251bWJlckIubGFzdEluZGV4ID0gMCxhbSxibSxicyxpPS0xLHM9W10scT1bXTthID0gYSArIFwiXCIsYiA9IGIgKyBcIlwiO3doaWxlKChhbSA9IGQzX2ludGVycG9sYXRlX251bWJlckEuZXhlYyhhKSkgJiYgKGJtID0gZDNfaW50ZXJwb2xhdGVfbnVtYmVyQi5leGVjKGIpKSkge2lmKChicyA9IGJtLmluZGV4KSA+IGJpKXticyA9IGIuc2xpY2UoYmksYnMpO2lmKHNbaV0pc1tpXSArPSBicztlbHNlIHNbKytpXSA9IGJzO31pZigoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSl7aWYoc1tpXSlzW2ldICs9IGJtO2Vsc2Ugc1srK2ldID0gYm07fWVsc2Uge3NbKytpXSA9IG51bGw7cS5wdXNoKHtpOmkseDpkM19pbnRlcnBvbGF0ZU51bWJlcihhbSxibSl9KTt9YmkgPSBkM19pbnRlcnBvbGF0ZV9udW1iZXJCLmxhc3RJbmRleDt9aWYoYmkgPCBiLmxlbmd0aCl7YnMgPSBiLnNsaWNlKGJpKTtpZihzW2ldKXNbaV0gKz0gYnM7ZWxzZSBzWysraV0gPSBiczt9cmV0dXJuIHMubGVuZ3RoIDwgMj9xWzBdPyhiID0gcVswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBiKHQpICsgXCJcIjt9KTpmdW5jdGlvbigpe3JldHVybiBiO306KGIgPSBxLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxvO2kgPCBiOysraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO3JldHVybiBzLmpvaW4oXCJcIik7fSk7fXZhciBkM19pbnRlcnBvbGF0ZV9udW1iZXJBPS9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxkM19pbnRlcnBvbGF0ZV9udW1iZXJCPW5ldyBSZWdFeHAoZDNfaW50ZXJwb2xhdGVfbnVtYmVyQS5zb3VyY2UsXCJnXCIpO2QzLmludGVycG9sYXRlID0gZDNfaW50ZXJwb2xhdGU7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGUoYSxiKXt2YXIgaT1kMy5pbnRlcnBvbGF0b3JzLmxlbmd0aCxmO3doaWxlKC0taSA+PSAwICYmICEoZiA9IGQzLmludGVycG9sYXRvcnNbaV0oYSxiKSkpO3JldHVybiBmO31kMy5pbnRlcnBvbGF0b3JzID0gW2Z1bmN0aW9uKGEsYil7dmFyIHQ9dHlwZW9mIGI7cmV0dXJuICh0ID09PSBcInN0cmluZ1wiP2QzX3JnYl9uYW1lcy5oYXMoYi50b0xvd2VyQ2FzZSgpKSB8fCAvXigjfHJnYlxcKHxoc2xcXCgpL2kudGVzdChiKT9kM19pbnRlcnBvbGF0ZVJnYjpkM19pbnRlcnBvbGF0ZVN0cmluZzpiIGluc3RhbmNlb2YgZDNfY29sb3I/ZDNfaW50ZXJwb2xhdGVSZ2I6QXJyYXkuaXNBcnJheShiKT9kM19pbnRlcnBvbGF0ZUFycmF5OnQgPT09IFwib2JqZWN0XCIgJiYgaXNOYU4oYik/ZDNfaW50ZXJwb2xhdGVPYmplY3Q6ZDNfaW50ZXJwb2xhdGVOdW1iZXIpKGEsYik7fV07ZDMuaW50ZXJwb2xhdGVBcnJheSA9IGQzX2ludGVycG9sYXRlQXJyYXk7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVBcnJheShhLGIpe3ZhciB4PVtdLGM9W10sbmE9YS5sZW5ndGgsbmI9Yi5sZW5ndGgsbjA9TWF0aC5taW4oYS5sZW5ndGgsYi5sZW5ndGgpLGk7Zm9yKGkgPSAwO2kgPCBuMDsrK2kpIHgucHVzaChkM19pbnRlcnBvbGF0ZShhW2ldLGJbaV0pKTtmb3IoO2kgPCBuYTsrK2kpIGNbaV0gPSBhW2ldO2Zvcig7aSA8IG5iOysraSkgY1tpXSA9IGJbaV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihpID0gMDtpIDwgbjA7KytpKSBjW2ldID0geFtpXSh0KTtyZXR1cm4gYzt9O312YXIgZDNfZWFzZV9kZWZhdWx0PWZ1bmN0aW9uIGQzX2Vhc2VfZGVmYXVsdCgpe3JldHVybiBkM19pZGVudGl0eTt9O3ZhciBkM19lYXNlPWQzLm1hcCh7bGluZWFyOmQzX2Vhc2VfZGVmYXVsdCxwb2x5OmQzX2Vhc2VfcG9seSxxdWFkOmZ1bmN0aW9uIHF1YWQoKXtyZXR1cm4gZDNfZWFzZV9xdWFkO30sY3ViaWM6ZnVuY3Rpb24gY3ViaWMoKXtyZXR1cm4gZDNfZWFzZV9jdWJpYzt9LHNpbjpmdW5jdGlvbiBzaW4oKXtyZXR1cm4gZDNfZWFzZV9zaW47fSxleHA6ZnVuY3Rpb24gZXhwKCl7cmV0dXJuIGQzX2Vhc2VfZXhwO30sY2lyY2xlOmZ1bmN0aW9uIGNpcmNsZSgpe3JldHVybiBkM19lYXNlX2NpcmNsZTt9LGVsYXN0aWM6ZDNfZWFzZV9lbGFzdGljLGJhY2s6ZDNfZWFzZV9iYWNrLGJvdW5jZTpmdW5jdGlvbiBib3VuY2UoKXtyZXR1cm4gZDNfZWFzZV9ib3VuY2U7fX0pO3ZhciBkM19lYXNlX21vZGU9ZDMubWFwKHtcImluXCI6ZDNfaWRlbnRpdHksb3V0OmQzX2Vhc2VfcmV2ZXJzZSxcImluLW91dFwiOmQzX2Vhc2VfcmVmbGVjdCxcIm91dC1pblwiOmZ1bmN0aW9uIG91dEluKGYpe3JldHVybiBkM19lYXNlX3JlZmxlY3QoZDNfZWFzZV9yZXZlcnNlKGYpKTt9fSk7ZDMuZWFzZSA9IGZ1bmN0aW9uKG5hbWUpe3ZhciBpPW5hbWUuaW5kZXhPZihcIi1cIiksdD1pID49IDA/bmFtZS5zbGljZSgwLGkpOm5hbWUsbT1pID49IDA/bmFtZS5zbGljZShpICsgMSk6XCJpblwiO3QgPSBkM19lYXNlLmdldCh0KSB8fCBkM19lYXNlX2RlZmF1bHQ7bSA9IGQzX2Vhc2VfbW9kZS5nZXQobSkgfHwgZDNfaWRlbnRpdHk7cmV0dXJuIGQzX2Vhc2VfY2xhbXAobSh0LmFwcGx5KG51bGwsZDNfYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywxKSkpKTt9O2Z1bmN0aW9uIGQzX2Vhc2VfY2xhbXAoZil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0IDw9IDA/MDp0ID49IDE/MTpmKHQpO307fWZ1bmN0aW9uIGQzX2Vhc2VfcmV2ZXJzZShmKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEgLSBmKDEgLSB0KTt9O31mdW5jdGlvbiBkM19lYXNlX3JlZmxlY3QoZil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAuNSAqICh0IDwgLjU/ZigyICogdCk6MiAtIGYoMiAtIDIgKiB0KSk7fTt9ZnVuY3Rpb24gZDNfZWFzZV9xdWFkKHQpe3JldHVybiB0ICogdDt9ZnVuY3Rpb24gZDNfZWFzZV9jdWJpYyh0KXtyZXR1cm4gdCAqIHQgKiB0O31mdW5jdGlvbiBkM19lYXNlX2N1YmljSW5PdXQodCl7aWYodCA8PSAwKXJldHVybiAwO2lmKHQgPj0gMSlyZXR1cm4gMTt2YXIgdDI9dCAqIHQsdDM9dDIgKiB0O3JldHVybiA0ICogKHQgPCAuNT90MzozICogKHQgLSB0MikgKyB0MyAtIC43NSk7fWZ1bmN0aW9uIGQzX2Vhc2VfcG9seShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsZSk7fTt9ZnVuY3Rpb24gZDNfZWFzZV9zaW4odCl7cmV0dXJuIDEgLSBNYXRoLmNvcyh0ICogaGFsZs+AKTt9ZnVuY3Rpb24gZDNfZWFzZV9leHAodCl7cmV0dXJuIE1hdGgucG93KDIsMTAgKiAodCAtIDEpKTt9ZnVuY3Rpb24gZDNfZWFzZV9jaXJjbGUodCl7cmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KTt9ZnVuY3Rpb24gZDNfZWFzZV9lbGFzdGljKGEscCl7dmFyIHM7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpcCA9IC40NTtpZihhcmd1bWVudHMubGVuZ3RoKXMgPSBwIC8gz4QgKiBNYXRoLmFzaW4oMSAvIGEpO2Vsc2UgYSA9IDEscyA9IHAgLyA0O3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMSArIGEgKiBNYXRoLnBvdygyLC0xMCAqIHQpICogTWF0aC5zaW4oKHQgLSBzKSAqIM+EIC8gcCk7fTt9ZnVuY3Rpb24gZDNfZWFzZV9iYWNrKHMpe2lmKCFzKXMgPSAxLjcwMTU4O3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCAqIHQgKiAoKHMgKyAxKSAqIHQgLSBzKTt9O31mdW5jdGlvbiBkM19lYXNlX2JvdW5jZSh0KXtyZXR1cm4gdCA8IDEgLyAyLjc1PzcuNTYyNSAqIHQgKiB0OnQgPCAyIC8gMi43NT83LjU2MjUgKiAodCAtPSAxLjUgLyAyLjc1KSAqIHQgKyAuNzU6dCA8IDIuNSAvIDIuNzU/Ny41NjI1ICogKHQgLT0gMi4yNSAvIDIuNzUpICogdCArIC45Mzc1OjcuNTYyNSAqICh0IC09IDIuNjI1IC8gMi43NSkgKiB0ICsgLjk4NDM3NTt9ZDMuaW50ZXJwb2xhdGVIY2wgPSBkM19pbnRlcnBvbGF0ZUhjbDtmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZUhjbChhLGIpe2EgPSBkMy5oY2woYSk7YiA9IGQzLmhjbChiKTt2YXIgYWg9YS5oLGFjPWEuYyxhbD1hLmwsYmg9Yi5oIC0gYWgsYmM9Yi5jIC0gYWMsYmw9Yi5sIC0gYWw7aWYoaXNOYU4oYmMpKWJjID0gMCxhYyA9IGlzTmFOKGFjKT9iLmM6YWM7aWYoaXNOYU4oYmgpKWJoID0gMCxhaCA9IGlzTmFOKGFoKT9iLmg6YWg7ZWxzZSBpZihiaCA+IDE4MCliaCAtPSAzNjA7ZWxzZSBpZihiaCA8IC0xODApYmggKz0gMzYwO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZDNfaGNsX2xhYihhaCArIGJoICogdCxhYyArIGJjICogdCxhbCArIGJsICogdCkgKyBcIlwiO307fWQzLmludGVycG9sYXRlSHNsID0gZDNfaW50ZXJwb2xhdGVIc2w7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVIc2woYSxiKXthID0gZDMuaHNsKGEpO2IgPSBkMy5oc2woYik7dmFyIGFoPWEuaCxhcz1hLnMsYWw9YS5sLGJoPWIuaCAtIGFoLGJzPWIucyAtIGFzLGJsPWIubCAtIGFsO2lmKGlzTmFOKGJzKSlicyA9IDAsYXMgPSBpc05hTihhcyk/Yi5zOmFzO2lmKGlzTmFOKGJoKSliaCA9IDAsYWggPSBpc05hTihhaCk/Yi5oOmFoO2Vsc2UgaWYoYmggPiAxODApYmggLT0gMzYwO2Vsc2UgaWYoYmggPCAtMTgwKWJoICs9IDM2MDtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQzX2hzbF9yZ2IoYWggKyBiaCAqIHQsYXMgKyBicyAqIHQsYWwgKyBibCAqIHQpICsgXCJcIjt9O31kMy5pbnRlcnBvbGF0ZUxhYiA9IGQzX2ludGVycG9sYXRlTGFiO2Z1bmN0aW9uIGQzX2ludGVycG9sYXRlTGFiKGEsYil7YSA9IGQzLmxhYihhKTtiID0gZDMubGFiKGIpO3ZhciBhbD1hLmwsYWE9YS5hLGFiPWEuYixibD1iLmwgLSBhbCxiYT1iLmEgLSBhYSxiYj1iLmIgLSBhYjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQzX2xhYl9yZ2IoYWwgKyBibCAqIHQsYWEgKyBiYSAqIHQsYWIgKyBiYiAqIHQpICsgXCJcIjt9O31kMy5pbnRlcnBvbGF0ZVJvdW5kID0gZDNfaW50ZXJwb2xhdGVSb3VuZDtmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZVJvdW5kKGEsYil7YiAtPSBhO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChhICsgYiAqIHQpO307fWQzLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKHN0cmluZyl7dmFyIGc9ZDNfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQzLm5zLnByZWZpeC5zdmcsXCJnXCIpO3JldHVybiAoZDMudHJhbnNmb3JtID0gZnVuY3Rpb24oc3RyaW5nKXtpZihzdHJpbmcgIT0gbnVsbCl7Zy5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIixzdHJpbmcpO3ZhciB0PWcudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKTt9cmV0dXJuIG5ldyBkM190cmFuc2Zvcm0odD90Lm1hdHJpeDpkM190cmFuc2Zvcm1JZGVudGl0eSk7fSkoc3RyaW5nKTt9O2Z1bmN0aW9uIGQzX3RyYW5zZm9ybShtKXt2YXIgcjA9W20uYSxtLmJdLHIxPVttLmMsbS5kXSxreD1kM190cmFuc2Zvcm1Ob3JtYWxpemUocjApLGt6PWQzX3RyYW5zZm9ybURvdChyMCxyMSksa3k9ZDNfdHJhbnNmb3JtTm9ybWFsaXplKGQzX3RyYW5zZm9ybUNvbWJpbmUocjEscjAsLWt6KSkgfHwgMDtpZihyMFswXSAqIHIxWzFdIDwgcjFbMF0gKiByMFsxXSl7cjBbMF0gKj0gLTE7cjBbMV0gKj0gLTE7a3ggKj0gLTE7a3ogKj0gLTE7fXRoaXMucm90YXRlID0gKGt4P01hdGguYXRhbjIocjBbMV0scjBbMF0pOk1hdGguYXRhbjIoLXIxWzBdLHIxWzFdKSkgKiBkM19kZWdyZWVzO3RoaXMudHJhbnNsYXRlID0gW20uZSxtLmZdO3RoaXMuc2NhbGUgPSBba3gsa3ldO3RoaXMuc2tldyA9IGt5P01hdGguYXRhbjIoa3osa3kpICogZDNfZGVncmVlczowO31kM190cmFuc2Zvcm0ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnRyYW5zbGF0ZSArIFwiKXJvdGF0ZShcIiArIHRoaXMucm90YXRlICsgXCIpc2tld1goXCIgKyB0aGlzLnNrZXcgKyBcIilzY2FsZShcIiArIHRoaXMuc2NhbGUgKyBcIilcIjt9O2Z1bmN0aW9uIGQzX3RyYW5zZm9ybURvdChhLGIpe3JldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO31mdW5jdGlvbiBkM190cmFuc2Zvcm1Ob3JtYWxpemUoYSl7dmFyIGs9TWF0aC5zcXJ0KGQzX3RyYW5zZm9ybURvdChhLGEpKTtpZihrKXthWzBdIC89IGs7YVsxXSAvPSBrO31yZXR1cm4gazt9ZnVuY3Rpb24gZDNfdHJhbnNmb3JtQ29tYmluZShhLGIsayl7YVswXSArPSBrICogYlswXTthWzFdICs9IGsgKiBiWzFdO3JldHVybiBhO312YXIgZDNfdHJhbnNmb3JtSWRlbnRpdHk9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtkMy5pbnRlcnBvbGF0ZVRyYW5zZm9ybSA9IGQzX2ludGVycG9sYXRlVHJhbnNmb3JtO2Z1bmN0aW9uIGQzX2ludGVycG9sYXRlVHJhbnNmb3JtUG9wKHMpe3JldHVybiBzLmxlbmd0aD9zLnBvcCgpICsgXCIsXCI6XCJcIjt9ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVUcmFuc2xhdGUodGEsdGIscyxxKXtpZih0YVswXSAhPT0gdGJbMF0gfHwgdGFbMV0gIT09IHRiWzFdKXt2YXIgaT1zLnB1c2goXCJ0cmFuc2xhdGUoXCIsbnVsbCxcIixcIixudWxsLFwiKVwiKTtxLnB1c2goe2k6aSAtIDQseDpkM19pbnRlcnBvbGF0ZU51bWJlcih0YVswXSx0YlswXSl9LHtpOmkgLSAyLHg6ZDNfaW50ZXJwb2xhdGVOdW1iZXIodGFbMV0sdGJbMV0pfSk7fWVsc2UgaWYodGJbMF0gfHwgdGJbMV0pe3MucHVzaChcInRyYW5zbGF0ZShcIiArIHRiICsgXCIpXCIpO319ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVSb3RhdGUocmEscmIscyxxKXtpZihyYSAhPT0gcmIpe2lmKHJhIC0gcmIgPiAxODApcmIgKz0gMzYwO2Vsc2UgaWYocmIgLSByYSA+IDE4MClyYSArPSAzNjA7cS5wdXNoKHtpOnMucHVzaChkM19pbnRlcnBvbGF0ZVRyYW5zZm9ybVBvcChzKSArIFwicm90YXRlKFwiLG51bGwsXCIpXCIpIC0gMix4OmQzX2ludGVycG9sYXRlTnVtYmVyKHJhLHJiKX0pO31lbHNlIGlmKHJiKXtzLnB1c2goZDNfaW50ZXJwb2xhdGVUcmFuc2Zvcm1Qb3AocykgKyBcInJvdGF0ZShcIiArIHJiICsgXCIpXCIpO319ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVTa2V3KHdhLHdiLHMscSl7aWYod2EgIT09IHdiKXtxLnB1c2goe2k6cy5wdXNoKGQzX2ludGVycG9sYXRlVHJhbnNmb3JtUG9wKHMpICsgXCJza2V3WChcIixudWxsLFwiKVwiKSAtIDIseDpkM19pbnRlcnBvbGF0ZU51bWJlcih3YSx3Yil9KTt9ZWxzZSBpZih3Yil7cy5wdXNoKGQzX2ludGVycG9sYXRlVHJhbnNmb3JtUG9wKHMpICsgXCJza2V3WChcIiArIHdiICsgXCIpXCIpO319ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVTY2FsZShrYSxrYixzLHEpe2lmKGthWzBdICE9PSBrYlswXSB8fCBrYVsxXSAhPT0ga2JbMV0pe3ZhciBpPXMucHVzaChkM19pbnRlcnBvbGF0ZVRyYW5zZm9ybVBvcChzKSArIFwic2NhbGUoXCIsbnVsbCxcIixcIixudWxsLFwiKVwiKTtxLnB1c2goe2k6aSAtIDQseDpkM19pbnRlcnBvbGF0ZU51bWJlcihrYVswXSxrYlswXSl9LHtpOmkgLSAyLHg6ZDNfaW50ZXJwb2xhdGVOdW1iZXIoa2FbMV0sa2JbMV0pfSk7fWVsc2UgaWYoa2JbMF0gIT09IDEgfHwga2JbMV0gIT09IDEpe3MucHVzaChkM19pbnRlcnBvbGF0ZVRyYW5zZm9ybVBvcChzKSArIFwic2NhbGUoXCIgKyBrYiArIFwiKVwiKTt9fWZ1bmN0aW9uIGQzX2ludGVycG9sYXRlVHJhbnNmb3JtKGEsYil7dmFyIHM9W10scT1bXTthID0gZDMudHJhbnNmb3JtKGEpLGIgPSBkMy50cmFuc2Zvcm0oYik7ZDNfaW50ZXJwb2xhdGVUcmFuc2xhdGUoYS50cmFuc2xhdGUsYi50cmFuc2xhdGUscyxxKTtkM19pbnRlcnBvbGF0ZVJvdGF0ZShhLnJvdGF0ZSxiLnJvdGF0ZSxzLHEpO2QzX2ludGVycG9sYXRlU2tldyhhLnNrZXcsYi5za2V3LHMscSk7ZDNfaW50ZXJwb2xhdGVTY2FsZShhLnNjYWxlLGIuc2NhbGUscyxxKTthID0gYiA9IG51bGw7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPS0xLG49cS5sZW5ndGgsbzt3aGlsZSgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7cmV0dXJuIHMuam9pbihcIlwiKTt9O31mdW5jdGlvbiBkM191bmludGVycG9sYXRlTnVtYmVyKGEsYil7YiA9IChiIC09IGEgPSArYSkgfHwgMSAvIGI7cmV0dXJuIGZ1bmN0aW9uKHgpe3JldHVybiAoeCAtIGEpIC8gYjt9O31mdW5jdGlvbiBkM191bmludGVycG9sYXRlQ2xhbXAoYSxiKXtiID0gKGIgLT0gYSA9ICthKSB8fCAxIC8gYjtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoeCAtIGEpIC8gYikpO307fWQzLmxheW91dCA9IHt9O2QzLmxheW91dC5idW5kbGUgPSBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihsaW5rcyl7dmFyIHBhdGhzPVtdLGk9LTEsbj1saW5rcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgcGF0aHMucHVzaChkM19sYXlvdXRfYnVuZGxlUGF0aChsaW5rc1tpXSkpO3JldHVybiBwYXRoczt9O307ZnVuY3Rpb24gZDNfbGF5b3V0X2J1bmRsZVBhdGgobGluayl7dmFyIHN0YXJ0PWxpbmsuc291cmNlLGVuZD1saW5rLnRhcmdldCxsY2E9ZDNfbGF5b3V0X2J1bmRsZUxlYXN0Q29tbW9uQW5jZXN0b3Ioc3RhcnQsZW5kKSxwb2ludHM9W3N0YXJ0XTt3aGlsZShzdGFydCAhPT0gbGNhKSB7c3RhcnQgPSBzdGFydC5wYXJlbnQ7cG9pbnRzLnB1c2goc3RhcnQpO312YXIgaz1wb2ludHMubGVuZ3RoO3doaWxlKGVuZCAhPT0gbGNhKSB7cG9pbnRzLnNwbGljZShrLDAsZW5kKTtlbmQgPSBlbmQucGFyZW50O31yZXR1cm4gcG9pbnRzO31mdW5jdGlvbiBkM19sYXlvdXRfYnVuZGxlQW5jZXN0b3JzKG5vZGUpe3ZhciBhbmNlc3RvcnM9W10scGFyZW50PW5vZGUucGFyZW50O3doaWxlKHBhcmVudCAhPSBudWxsKSB7YW5jZXN0b3JzLnB1c2gobm9kZSk7bm9kZSA9IHBhcmVudDtwYXJlbnQgPSBwYXJlbnQucGFyZW50O31hbmNlc3RvcnMucHVzaChub2RlKTtyZXR1cm4gYW5jZXN0b3JzO31mdW5jdGlvbiBkM19sYXlvdXRfYnVuZGxlTGVhc3RDb21tb25BbmNlc3RvcihhLGIpe2lmKGEgPT09IGIpcmV0dXJuIGE7dmFyIGFOb2Rlcz1kM19sYXlvdXRfYnVuZGxlQW5jZXN0b3JzKGEpLGJOb2Rlcz1kM19sYXlvdXRfYnVuZGxlQW5jZXN0b3JzKGIpLGFOb2RlPWFOb2Rlcy5wb3AoKSxiTm9kZT1iTm9kZXMucG9wKCksc2hhcmVkTm9kZT1udWxsO3doaWxlKGFOb2RlID09PSBiTm9kZSkge3NoYXJlZE5vZGUgPSBhTm9kZTthTm9kZSA9IGFOb2Rlcy5wb3AoKTtiTm9kZSA9IGJOb2Rlcy5wb3AoKTt9cmV0dXJuIHNoYXJlZE5vZGU7fWQzLmxheW91dC5jaG9yZCA9IGZ1bmN0aW9uKCl7dmFyIGNob3JkPXt9LGNob3Jkcyxncm91cHMsbWF0cml4LG4scGFkZGluZz0wLHNvcnRHcm91cHMsc29ydFN1Ymdyb3Vwcyxzb3J0Q2hvcmRzO2Z1bmN0aW9uIHJlbGF5b3V0KCl7dmFyIHN1Ymdyb3Vwcz17fSxncm91cFN1bXM9W10sZ3JvdXBJbmRleD1kMy5yYW5nZShuKSxzdWJncm91cEluZGV4PVtdLGsseCx4MCxpLGo7Y2hvcmRzID0gW107Z3JvdXBzID0gW107ayA9IDAsaSA9IC0xO3doaWxlKCsraSA8IG4pIHt4ID0gMCxqID0gLTE7d2hpbGUoKytqIDwgbikge3ggKz0gbWF0cml4W2ldW2pdO31ncm91cFN1bXMucHVzaCh4KTtzdWJncm91cEluZGV4LnB1c2goZDMucmFuZ2UobikpO2sgKz0geDt9aWYoc29ydEdyb3Vwcyl7Z3JvdXBJbmRleC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIHNvcnRHcm91cHMoZ3JvdXBTdW1zW2FdLGdyb3VwU3Vtc1tiXSk7fSk7fWlmKHNvcnRTdWJncm91cHMpe3N1Ymdyb3VwSW5kZXguZm9yRWFjaChmdW5jdGlvbihkLGkpe2Quc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBzb3J0U3ViZ3JvdXBzKG1hdHJpeFtpXVthXSxtYXRyaXhbaV1bYl0pO30pO30pO31rID0gKM+EIC0gcGFkZGluZyAqIG4pIC8gazt4ID0gMCxpID0gLTE7d2hpbGUoKytpIDwgbikge3gwID0geCxqID0gLTE7d2hpbGUoKytqIDwgbikge3ZhciBkaT1ncm91cEluZGV4W2ldLGRqPXN1Ymdyb3VwSW5kZXhbZGldW2pdLHY9bWF0cml4W2RpXVtkal0sYTA9eCxhMT14ICs9IHYgKiBrO3N1Ymdyb3Vwc1tkaSArIFwiLVwiICsgZGpdID0ge2luZGV4OmRpLHN1YmluZGV4OmRqLHN0YXJ0QW5nbGU6YTAsZW5kQW5nbGU6YTEsdmFsdWU6dn07fWdyb3Vwc1tkaV0gPSB7aW5kZXg6ZGksc3RhcnRBbmdsZTp4MCxlbmRBbmdsZTp4LHZhbHVlOih4IC0geDApIC8ga307eCArPSBwYWRkaW5nO31pID0gLTE7d2hpbGUoKytpIDwgbikge2ogPSBpIC0gMTt3aGlsZSgrK2ogPCBuKSB7dmFyIHNvdXJjZT1zdWJncm91cHNbaSArIFwiLVwiICsgal0sdGFyZ2V0PXN1Ymdyb3Vwc1tqICsgXCItXCIgKyBpXTtpZihzb3VyY2UudmFsdWUgfHwgdGFyZ2V0LnZhbHVlKXtjaG9yZHMucHVzaChzb3VyY2UudmFsdWUgPCB0YXJnZXQudmFsdWU/e3NvdXJjZTp0YXJnZXQsdGFyZ2V0OnNvdXJjZX06e3NvdXJjZTpzb3VyY2UsdGFyZ2V0OnRhcmdldH0pO319fWlmKHNvcnRDaG9yZHMpcmVzb3J0KCk7fWZ1bmN0aW9uIHJlc29ydCgpe2Nob3Jkcy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIHNvcnRDaG9yZHMoKGEuc291cmNlLnZhbHVlICsgYS50YXJnZXQudmFsdWUpIC8gMiwoYi5zb3VyY2UudmFsdWUgKyBiLnRhcmdldC52YWx1ZSkgLyAyKTt9KTt9Y2hvcmQubWF0cml4ID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG1hdHJpeDtuID0gKG1hdHJpeCA9IHgpICYmIG1hdHJpeC5sZW5ndGg7Y2hvcmRzID0gZ3JvdXBzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5wYWRkaW5nID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZGRpbmc7cGFkZGluZyA9IHg7Y2hvcmRzID0gZ3JvdXBzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zb3J0R3JvdXBzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvcnRHcm91cHM7c29ydEdyb3VwcyA9IHg7Y2hvcmRzID0gZ3JvdXBzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zb3J0U3ViZ3JvdXBzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvcnRTdWJncm91cHM7c29ydFN1Ymdyb3VwcyA9IHg7Y2hvcmRzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zb3J0Q2hvcmRzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvcnRDaG9yZHM7c29ydENob3JkcyA9IHg7aWYoY2hvcmRzKXJlc29ydCgpO3JldHVybiBjaG9yZDt9O2Nob3JkLmNob3JkcyA9IGZ1bmN0aW9uKCl7aWYoIWNob3JkcylyZWxheW91dCgpO3JldHVybiBjaG9yZHM7fTtjaG9yZC5ncm91cHMgPSBmdW5jdGlvbigpe2lmKCFncm91cHMpcmVsYXlvdXQoKTtyZXR1cm4gZ3JvdXBzO307cmV0dXJuIGNob3JkO307ZDMubGF5b3V0LmZvcmNlID0gZnVuY3Rpb24oKXt2YXIgZm9yY2U9e30sZXZlbnQ9ZDMuZGlzcGF0Y2goXCJzdGFydFwiLFwidGlja1wiLFwiZW5kXCIpLHRpbWVyLHNpemU9WzEsMV0sZHJhZyxhbHBoYSxmcmljdGlvbj0uOSxsaW5rRGlzdGFuY2U9ZDNfbGF5b3V0X2ZvcmNlTGlua0Rpc3RhbmNlLGxpbmtTdHJlbmd0aD1kM19sYXlvdXRfZm9yY2VMaW5rU3RyZW5ndGgsY2hhcmdlPS0zMCxjaGFyZ2VEaXN0YW5jZTI9ZDNfbGF5b3V0X2ZvcmNlQ2hhcmdlRGlzdGFuY2UyLGdyYXZpdHk9LjEsdGhldGEyPS42NCxub2Rlcz1bXSxsaW5rcz1bXSxkaXN0YW5jZXMsc3RyZW5ndGhzLGNoYXJnZXM7ZnVuY3Rpb24gcmVwdWxzZShub2RlKXtyZXR1cm4gZnVuY3Rpb24ocXVhZCx4MSxfLHgyKXtpZihxdWFkLnBvaW50ICE9PSBub2RlKXt2YXIgZHg9cXVhZC5jeCAtIG5vZGUueCxkeT1xdWFkLmN5IC0gbm9kZS55LGR3PXgyIC0geDEsZG49ZHggKiBkeCArIGR5ICogZHk7aWYoZHcgKiBkdyAvIHRoZXRhMiA8IGRuKXtpZihkbiA8IGNoYXJnZURpc3RhbmNlMil7dmFyIGs9cXVhZC5jaGFyZ2UgLyBkbjtub2RlLnB4IC09IGR4ICogaztub2RlLnB5IC09IGR5ICogazt9cmV0dXJuIHRydWU7fWlmKHF1YWQucG9pbnQgJiYgZG4gJiYgZG4gPCBjaGFyZ2VEaXN0YW5jZTIpe3ZhciBrPXF1YWQucG9pbnRDaGFyZ2UgLyBkbjtub2RlLnB4IC09IGR4ICogaztub2RlLnB5IC09IGR5ICogazt9fXJldHVybiAhcXVhZC5jaGFyZ2U7fTt9Zm9yY2UudGljayA9IGZ1bmN0aW9uKCl7aWYoKGFscGhhICo9IC45OSkgPCAuMDA1KXt0aW1lciA9IG51bGw7ZXZlbnQuZW5kKHt0eXBlOlwiZW5kXCIsYWxwaGE6YWxwaGEgPSAwfSk7cmV0dXJuIHRydWU7fXZhciBuPW5vZGVzLmxlbmd0aCxtPWxpbmtzLmxlbmd0aCxxLGksbyxzLHQsbCxrLHgseTtmb3IoaSA9IDA7aSA8IG07KytpKSB7byA9IGxpbmtzW2ldO3MgPSBvLnNvdXJjZTt0ID0gby50YXJnZXQ7eCA9IHQueCAtIHMueDt5ID0gdC55IC0gcy55O2lmKGwgPSB4ICogeCArIHkgKiB5KXtsID0gYWxwaGEgKiBzdHJlbmd0aHNbaV0gKiAoKGwgPSBNYXRoLnNxcnQobCkpIC0gZGlzdGFuY2VzW2ldKSAvIGw7eCAqPSBsO3kgKj0gbDt0LnggLT0geCAqIChrID0gcy53ZWlnaHQgKyB0LndlaWdodD9zLndlaWdodCAvIChzLndlaWdodCArIHQud2VpZ2h0KTouNSk7dC55IC09IHkgKiBrO3MueCArPSB4ICogKGsgPSAxIC0gayk7cy55ICs9IHkgKiBrO319aWYoayA9IGFscGhhICogZ3Jhdml0eSl7eCA9IHNpemVbMF0gLyAyO3kgPSBzaXplWzFdIC8gMjtpID0gLTE7aWYoayl3aGlsZSgrK2kgPCBuKSB7byA9IG5vZGVzW2ldO28ueCArPSAoeCAtIG8ueCkgKiBrO28ueSArPSAoeSAtIG8ueSkgKiBrO319aWYoY2hhcmdlKXtkM19sYXlvdXRfZm9yY2VBY2N1bXVsYXRlKHEgPSBkMy5nZW9tLnF1YWR0cmVlKG5vZGVzKSxhbHBoYSxjaGFyZ2VzKTtpID0gLTE7d2hpbGUoKytpIDwgbikge2lmKCEobyA9IG5vZGVzW2ldKS5maXhlZCl7cS52aXNpdChyZXB1bHNlKG8pKTt9fX1pID0gLTE7d2hpbGUoKytpIDwgbikge28gPSBub2Rlc1tpXTtpZihvLmZpeGVkKXtvLnggPSBvLnB4O28ueSA9IG8ucHk7fWVsc2Uge28ueCAtPSAoby5weCAtIChvLnB4ID0gby54KSkgKiBmcmljdGlvbjtvLnkgLT0gKG8ucHkgLSAoby5weSA9IG8ueSkpICogZnJpY3Rpb247fX1ldmVudC50aWNrKHt0eXBlOlwidGlja1wiLGFscGhhOmFscGhhfSk7fTtmb3JjZS5ub2RlcyA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBub2Rlcztub2RlcyA9IHg7cmV0dXJuIGZvcmNlO307Zm9yY2UubGlua3MgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbGlua3M7bGlua3MgPSB4O3JldHVybiBmb3JjZTt9O2ZvcmNlLnNpemUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc2l6ZTtzaXplID0geDtyZXR1cm4gZm9yY2U7fTtmb3JjZS5saW5rRGlzdGFuY2UgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbGlua0Rpc3RhbmNlO2xpbmtEaXN0YW5jZSA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDoreDtyZXR1cm4gZm9yY2U7fTtmb3JjZS5kaXN0YW5jZSA9IGZvcmNlLmxpbmtEaXN0YW5jZTtmb3JjZS5saW5rU3RyZW5ndGggPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbGlua1N0cmVuZ3RoO2xpbmtTdHJlbmd0aCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDoreDtyZXR1cm4gZm9yY2U7fTtmb3JjZS5mcmljdGlvbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBmcmljdGlvbjtmcmljdGlvbiA9ICt4O3JldHVybiBmb3JjZTt9O2ZvcmNlLmNoYXJnZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjaGFyZ2U7Y2hhcmdlID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIj94Oit4O3JldHVybiBmb3JjZTt9O2ZvcmNlLmNoYXJnZURpc3RhbmNlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChjaGFyZ2VEaXN0YW5jZTIpO2NoYXJnZURpc3RhbmNlMiA9IHggKiB4O3JldHVybiBmb3JjZTt9O2ZvcmNlLmdyYXZpdHkgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZ3Jhdml0eTtncmF2aXR5ID0gK3g7cmV0dXJuIGZvcmNlO307Zm9yY2UudGhldGEgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KHRoZXRhMik7dGhldGEyID0geCAqIHg7cmV0dXJuIGZvcmNlO307Zm9yY2UuYWxwaGEgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYWxwaGE7eCA9ICt4O2lmKGFscGhhKXtpZih4ID4gMCl7YWxwaGEgPSB4O31lbHNlIHt0aW1lci5jID0gbnVsbCx0aW1lci50ID0gTmFOLHRpbWVyID0gbnVsbDtldmVudC5zdGFydCh7dHlwZTpcImVuZFwiLGFscGhhOmFscGhhID0gMH0pO319ZWxzZSBpZih4ID4gMCl7ZXZlbnQuc3RhcnQoe3R5cGU6XCJzdGFydFwiLGFscGhhOmFscGhhID0geH0pO3RpbWVyID0gZDNfdGltZXIoZm9yY2UudGljayk7fXJldHVybiBmb3JjZTt9O2ZvcmNlLnN0YXJ0ID0gZnVuY3Rpb24oKXt2YXIgaSxuPW5vZGVzLmxlbmd0aCxtPWxpbmtzLmxlbmd0aCx3PXNpemVbMF0saD1zaXplWzFdLG5laWdoYm9ycyxvO2ZvcihpID0gMDtpIDwgbjsrK2kpIHsobyA9IG5vZGVzW2ldKS5pbmRleCA9IGk7by53ZWlnaHQgPSAwO31mb3IoaSA9IDA7aSA8IG07KytpKSB7byA9IGxpbmtzW2ldO2lmKHR5cGVvZiBvLnNvdXJjZSA9PSBcIm51bWJlclwiKW8uc291cmNlID0gbm9kZXNbby5zb3VyY2VdO2lmKHR5cGVvZiBvLnRhcmdldCA9PSBcIm51bWJlclwiKW8udGFyZ2V0ID0gbm9kZXNbby50YXJnZXRdOysrby5zb3VyY2Uud2VpZ2h0Oysrby50YXJnZXQud2VpZ2h0O31mb3IoaSA9IDA7aSA8IG47KytpKSB7byA9IG5vZGVzW2ldO2lmKGlzTmFOKG8ueCkpby54ID0gcG9zaXRpb24oXCJ4XCIsdyk7aWYoaXNOYU4oby55KSlvLnkgPSBwb3NpdGlvbihcInlcIixoKTtpZihpc05hTihvLnB4KSlvLnB4ID0gby54O2lmKGlzTmFOKG8ucHkpKW8ucHkgPSBvLnk7fWRpc3RhbmNlcyA9IFtdO2lmKHR5cGVvZiBsaW5rRGlzdGFuY2UgPT09IFwiZnVuY3Rpb25cIilmb3IoaSA9IDA7aSA8IG07KytpKSBkaXN0YW5jZXNbaV0gPSArbGlua0Rpc3RhbmNlLmNhbGwodGhpcyxsaW5rc1tpXSxpKTtlbHNlIGZvcihpID0gMDtpIDwgbTsrK2kpIGRpc3RhbmNlc1tpXSA9IGxpbmtEaXN0YW5jZTtzdHJlbmd0aHMgPSBbXTtpZih0eXBlb2YgbGlua1N0cmVuZ3RoID09PSBcImZ1bmN0aW9uXCIpZm9yKGkgPSAwO2kgPCBtOysraSkgc3RyZW5ndGhzW2ldID0gK2xpbmtTdHJlbmd0aC5jYWxsKHRoaXMsbGlua3NbaV0saSk7ZWxzZSBmb3IoaSA9IDA7aSA8IG07KytpKSBzdHJlbmd0aHNbaV0gPSBsaW5rU3RyZW5ndGg7Y2hhcmdlcyA9IFtdO2lmKHR5cGVvZiBjaGFyZ2UgPT09IFwiZnVuY3Rpb25cIilmb3IoaSA9IDA7aSA8IG47KytpKSBjaGFyZ2VzW2ldID0gK2NoYXJnZS5jYWxsKHRoaXMsbm9kZXNbaV0saSk7ZWxzZSBmb3IoaSA9IDA7aSA8IG47KytpKSBjaGFyZ2VzW2ldID0gY2hhcmdlO2Z1bmN0aW9uIHBvc2l0aW9uKGRpbWVuc2lvbixzaXplKXtpZighbmVpZ2hib3JzKXtuZWlnaGJvcnMgPSBuZXcgQXJyYXkobik7Zm9yKGogPSAwO2ogPCBuOysraikge25laWdoYm9yc1tqXSA9IFtdO31mb3IoaiA9IDA7aiA8IG07KytqKSB7dmFyIG89bGlua3Nbal07bmVpZ2hib3JzW28uc291cmNlLmluZGV4XS5wdXNoKG8udGFyZ2V0KTtuZWlnaGJvcnNbby50YXJnZXQuaW5kZXhdLnB1c2goby5zb3VyY2UpO319dmFyIGNhbmRpZGF0ZXM9bmVpZ2hib3JzW2ldLGo9LTEsbD1jYW5kaWRhdGVzLmxlbmd0aCx4O3doaWxlKCsraiA8IGwpIGlmKCFpc05hTih4ID0gY2FuZGlkYXRlc1tqXVtkaW1lbnNpb25dKSlyZXR1cm4geDtyZXR1cm4gTWF0aC5yYW5kb20oKSAqIHNpemU7fXJldHVybiBmb3JjZS5yZXN1bWUoKTt9O2ZvcmNlLnJlc3VtZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGZvcmNlLmFscGhhKC4xKTt9O2ZvcmNlLnN0b3AgPSBmdW5jdGlvbigpe3JldHVybiBmb3JjZS5hbHBoYSgwKTt9O2ZvcmNlLmRyYWcgPSBmdW5jdGlvbigpe2lmKCFkcmFnKWRyYWcgPSBkMy5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGQzX2lkZW50aXR5KS5vbihcImRyYWdzdGFydC5mb3JjZVwiLGQzX2xheW91dF9mb3JjZURyYWdzdGFydCkub24oXCJkcmFnLmZvcmNlXCIsZHJhZ21vdmUpLm9uKFwiZHJhZ2VuZC5mb3JjZVwiLGQzX2xheW91dF9mb3JjZURyYWdlbmQpO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkcmFnO3RoaXMub24oXCJtb3VzZW92ZXIuZm9yY2VcIixkM19sYXlvdXRfZm9yY2VNb3VzZW92ZXIpLm9uKFwibW91c2VvdXQuZm9yY2VcIixkM19sYXlvdXRfZm9yY2VNb3VzZW91dCkuY2FsbChkcmFnKTt9O2Z1bmN0aW9uIGRyYWdtb3ZlKGQpe2QucHggPSBkMy5ldmVudC54LGQucHkgPSBkMy5ldmVudC55O2ZvcmNlLnJlc3VtZSgpO31yZXR1cm4gZDMucmViaW5kKGZvcmNlLGV2ZW50LFwib25cIik7fTtmdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VEcmFnc3RhcnQoZCl7ZC5maXhlZCB8PSAyO31mdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VEcmFnZW5kKGQpe2QuZml4ZWQgJj0gfjY7fWZ1bmN0aW9uIGQzX2xheW91dF9mb3JjZU1vdXNlb3ZlcihkKXtkLmZpeGVkIHw9IDQ7ZC5weCA9IGQueCxkLnB5ID0gZC55O31mdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VNb3VzZW91dChkKXtkLmZpeGVkICY9IH40O31mdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VBY2N1bXVsYXRlKHF1YWQsYWxwaGEsY2hhcmdlcyl7dmFyIGN4PTAsY3k9MDtxdWFkLmNoYXJnZSA9IDA7aWYoIXF1YWQubGVhZil7dmFyIG5vZGVzPXF1YWQubm9kZXMsbj1ub2Rlcy5sZW5ndGgsaT0tMSxjO3doaWxlKCsraSA8IG4pIHtjID0gbm9kZXNbaV07aWYoYyA9PSBudWxsKWNvbnRpbnVlO2QzX2xheW91dF9mb3JjZUFjY3VtdWxhdGUoYyxhbHBoYSxjaGFyZ2VzKTtxdWFkLmNoYXJnZSArPSBjLmNoYXJnZTtjeCArPSBjLmNoYXJnZSAqIGMuY3g7Y3kgKz0gYy5jaGFyZ2UgKiBjLmN5O319aWYocXVhZC5wb2ludCl7aWYoIXF1YWQubGVhZil7cXVhZC5wb2ludC54ICs9IE1hdGgucmFuZG9tKCkgLSAuNTtxdWFkLnBvaW50LnkgKz0gTWF0aC5yYW5kb20oKSAtIC41O312YXIgaz1hbHBoYSAqIGNoYXJnZXNbcXVhZC5wb2ludC5pbmRleF07cXVhZC5jaGFyZ2UgKz0gcXVhZC5wb2ludENoYXJnZSA9IGs7Y3ggKz0gayAqIHF1YWQucG9pbnQueDtjeSArPSBrICogcXVhZC5wb2ludC55O31xdWFkLmN4ID0gY3ggLyBxdWFkLmNoYXJnZTtxdWFkLmN5ID0gY3kgLyBxdWFkLmNoYXJnZTt9dmFyIGQzX2xheW91dF9mb3JjZUxpbmtEaXN0YW5jZT0yMCxkM19sYXlvdXRfZm9yY2VMaW5rU3RyZW5ndGg9MSxkM19sYXlvdXRfZm9yY2VDaGFyZ2VEaXN0YW5jZTI9SW5maW5pdHk7ZDMubGF5b3V0LmhpZXJhcmNoeSA9IGZ1bmN0aW9uKCl7dmFyIHNvcnQ9ZDNfbGF5b3V0X2hpZXJhcmNoeVNvcnQsY2hpbGRyZW49ZDNfbGF5b3V0X2hpZXJhcmNoeUNoaWxkcmVuLHZhbHVlPWQzX2xheW91dF9oaWVyYXJjaHlWYWx1ZTtmdW5jdGlvbiBoaWVyYXJjaHkocm9vdCl7dmFyIHN0YWNrPVtyb290XSxub2Rlcz1bXSxub2RlO3Jvb3QuZGVwdGggPSAwO3doaWxlKChub2RlID0gc3RhY2sucG9wKCkpICE9IG51bGwpIHtub2Rlcy5wdXNoKG5vZGUpO2lmKChjaGlsZHMgPSBjaGlsZHJlbi5jYWxsKGhpZXJhcmNoeSxub2RlLG5vZGUuZGVwdGgpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKXt2YXIgbixjaGlsZHMsY2hpbGQ7d2hpbGUoLS1uID49IDApIHtzdGFjay5wdXNoKGNoaWxkID0gY2hpbGRzW25dKTtjaGlsZC5wYXJlbnQgPSBub2RlO2NoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7fWlmKHZhbHVlKW5vZGUudmFsdWUgPSAwO25vZGUuY2hpbGRyZW4gPSBjaGlsZHM7fWVsc2Uge2lmKHZhbHVlKW5vZGUudmFsdWUgPSArdmFsdWUuY2FsbChoaWVyYXJjaHksbm9kZSxub2RlLmRlcHRoKSB8fCAwO2RlbGV0ZSBub2RlLmNoaWxkcmVuO319ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxmdW5jdGlvbihub2RlKXt2YXIgY2hpbGRzLHBhcmVudDtpZihzb3J0ICYmIChjaGlsZHMgPSBub2RlLmNoaWxkcmVuKSljaGlsZHMuc29ydChzb3J0KTtpZih2YWx1ZSAmJiAocGFyZW50ID0gbm9kZS5wYXJlbnQpKXBhcmVudC52YWx1ZSArPSBub2RlLnZhbHVlO30pO3JldHVybiBub2Rlczt9aGllcmFyY2h5LnNvcnQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc29ydDtzb3J0ID0geDtyZXR1cm4gaGllcmFyY2h5O307aGllcmFyY2h5LmNoaWxkcmVuID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGNoaWxkcmVuO2NoaWxkcmVuID0geDtyZXR1cm4gaGllcmFyY2h5O307aGllcmFyY2h5LnZhbHVlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZhbHVlO3ZhbHVlID0geDtyZXR1cm4gaGllcmFyY2h5O307aGllcmFyY2h5LnJldmFsdWUgPSBmdW5jdGlvbihyb290KXtpZih2YWx1ZSl7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKHJvb3QsZnVuY3Rpb24obm9kZSl7aWYobm9kZS5jaGlsZHJlbilub2RlLnZhbHVlID0gMDt9KTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290LGZ1bmN0aW9uKG5vZGUpe3ZhciBwYXJlbnQ7aWYoIW5vZGUuY2hpbGRyZW4pbm9kZS52YWx1ZSA9ICt2YWx1ZS5jYWxsKGhpZXJhcmNoeSxub2RlLG5vZGUuZGVwdGgpIHx8IDA7aWYocGFyZW50ID0gbm9kZS5wYXJlbnQpcGFyZW50LnZhbHVlICs9IG5vZGUudmFsdWU7fSk7fXJldHVybiByb290O307cmV0dXJuIGhpZXJhcmNoeTt9O2Z1bmN0aW9uIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQob2JqZWN0LGhpZXJhcmNoeSl7ZDMucmViaW5kKG9iamVjdCxoaWVyYXJjaHksXCJzb3J0XCIsXCJjaGlsZHJlblwiLFwidmFsdWVcIik7b2JqZWN0Lm5vZGVzID0gb2JqZWN0O29iamVjdC5saW5rcyA9IGQzX2xheW91dF9oaWVyYXJjaHlMaW5rcztyZXR1cm4gb2JqZWN0O31mdW5jdGlvbiBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRCZWZvcmUobm9kZSxjYWxsYmFjayl7dmFyIG5vZGVzPVtub2RlXTt3aGlsZSgobm9kZSA9IG5vZGVzLnBvcCgpKSAhPSBudWxsKSB7Y2FsbGJhY2sobm9kZSk7aWYoKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikgJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpKXt2YXIgbixjaGlsZHJlbjt3aGlsZSgtLW4gPj0gMCkgbm9kZXMucHVzaChjaGlsZHJlbltuXSk7fX19ZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIobm9kZSxjYWxsYmFjayl7dmFyIG5vZGVzPVtub2RlXSxub2RlczI9W107d2hpbGUoKG5vZGUgPSBub2Rlcy5wb3AoKSkgIT0gbnVsbCkge25vZGVzMi5wdXNoKG5vZGUpO2lmKChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pICYmIChuID0gY2hpbGRyZW4ubGVuZ3RoKSl7dmFyIGk9LTEsbixjaGlsZHJlbjt3aGlsZSgrK2kgPCBuKSBub2Rlcy5wdXNoKGNoaWxkcmVuW2ldKTt9fXdoaWxlKChub2RlID0gbm9kZXMyLnBvcCgpKSAhPSBudWxsKSB7Y2FsbGJhY2sobm9kZSk7fX1mdW5jdGlvbiBkM19sYXlvdXRfaGllcmFyY2h5Q2hpbGRyZW4oZCl7cmV0dXJuIGQuY2hpbGRyZW47fWZ1bmN0aW9uIGQzX2xheW91dF9oaWVyYXJjaHlWYWx1ZShkKXtyZXR1cm4gZC52YWx1ZTt9ZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVNvcnQoYSxiKXtyZXR1cm4gYi52YWx1ZSAtIGEudmFsdWU7fWZ1bmN0aW9uIGQzX2xheW91dF9oaWVyYXJjaHlMaW5rcyhub2Rlcyl7cmV0dXJuIGQzLm1lcmdlKG5vZGVzLm1hcChmdW5jdGlvbihwYXJlbnQpe3JldHVybiAocGFyZW50LmNoaWxkcmVuIHx8IFtdKS5tYXAoZnVuY3Rpb24oY2hpbGQpe3JldHVybiB7c291cmNlOnBhcmVudCx0YXJnZXQ6Y2hpbGR9O30pO30pKTt9ZDMubGF5b3V0LnBhcnRpdGlvbiA9IGZ1bmN0aW9uKCl7dmFyIGhpZXJhcmNoeT1kMy5sYXlvdXQuaGllcmFyY2h5KCksc2l6ZT1bMSwxXTtmdW5jdGlvbiBwb3NpdGlvbihub2RlLHgsZHgsZHkpe3ZhciBjaGlsZHJlbj1ub2RlLmNoaWxkcmVuO25vZGUueCA9IHg7bm9kZS55ID0gbm9kZS5kZXB0aCAqIGR5O25vZGUuZHggPSBkeDtub2RlLmR5ID0gZHk7aWYoY2hpbGRyZW4gJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpKXt2YXIgaT0tMSxuLGMsZDtkeCA9IG5vZGUudmFsdWU/ZHggLyBub2RlLnZhbHVlOjA7d2hpbGUoKytpIDwgbikge3Bvc2l0aW9uKGMgPSBjaGlsZHJlbltpXSx4LGQgPSBjLnZhbHVlICogZHgsZHkpO3ggKz0gZDt9fX1mdW5jdGlvbiBkZXB0aChub2RlKXt2YXIgY2hpbGRyZW49bm9kZS5jaGlsZHJlbixkPTA7aWYoY2hpbGRyZW4gJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpKXt2YXIgaT0tMSxuO3doaWxlKCsraSA8IG4pIGQgPSBNYXRoLm1heChkLGRlcHRoKGNoaWxkcmVuW2ldKSk7fXJldHVybiAxICsgZDt9ZnVuY3Rpb24gcGFydGl0aW9uKGQsaSl7dmFyIG5vZGVzPWhpZXJhcmNoeS5jYWxsKHRoaXMsZCxpKTtwb3NpdGlvbihub2Rlc1swXSwwLHNpemVbMF0sc2l6ZVsxXSAvIGRlcHRoKG5vZGVzWzBdKSk7cmV0dXJuIG5vZGVzO31wYXJ0aXRpb24uc2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzaXplO3NpemUgPSB4O3JldHVybiBwYXJ0aXRpb247fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZChwYXJ0aXRpb24saGllcmFyY2h5KTt9O2QzLmxheW91dC5waWUgPSBmdW5jdGlvbigpe3ZhciB2YWx1ZT1OdW1iZXIsc29ydD1kM19sYXlvdXRfcGllU29ydEJ5VmFsdWUsc3RhcnRBbmdsZT0wLGVuZEFuZ2xlPc+ELHBhZEFuZ2xlPTA7ZnVuY3Rpb24gcGllKGRhdGEpe3ZhciBuPWRhdGEubGVuZ3RoLHZhbHVlcz1kYXRhLm1hcChmdW5jdGlvbihkLGkpe3JldHVybiArdmFsdWUuY2FsbChwaWUsZCxpKTt9KSxhPSsodHlwZW9mIHN0YXJ0QW5nbGUgPT09IFwiZnVuY3Rpb25cIj9zdGFydEFuZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpzdGFydEFuZ2xlKSxkYT0odHlwZW9mIGVuZEFuZ2xlID09PSBcImZ1bmN0aW9uXCI/ZW5kQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmVuZEFuZ2xlKSAtIGEscD1NYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCsodHlwZW9mIHBhZEFuZ2xlID09PSBcImZ1bmN0aW9uXCI/cGFkQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOnBhZEFuZ2xlKSkscGE9cCAqIChkYSA8IDA/LTE6MSksc3VtPWQzLnN1bSh2YWx1ZXMpLGs9c3VtPyhkYSAtIG4gKiBwYSkgLyBzdW06MCxpbmRleD1kMy5yYW5nZShuKSxhcmNzPVtdLHY7aWYoc29ydCAhPSBudWxsKWluZGV4LnNvcnQoc29ydCA9PT0gZDNfbGF5b3V0X3BpZVNvcnRCeVZhbHVlP2Z1bmN0aW9uKGksail7cmV0dXJuIHZhbHVlc1tqXSAtIHZhbHVlc1tpXTt9OmZ1bmN0aW9uKGksail7cmV0dXJuIHNvcnQoZGF0YVtpXSxkYXRhW2pdKTt9KTtpbmRleC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2FyY3NbaV0gPSB7ZGF0YTpkYXRhW2ldLHZhbHVlOnYgPSB2YWx1ZXNbaV0sc3RhcnRBbmdsZTphLGVuZEFuZ2xlOmEgKz0gdiAqIGsgKyBwYSxwYWRBbmdsZTpwfTt9KTtyZXR1cm4gYXJjczt9cGllLnZhbHVlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZhbHVlO3ZhbHVlID0gXztyZXR1cm4gcGllO307cGllLnNvcnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc29ydDtzb3J0ID0gXztyZXR1cm4gcGllO307cGllLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc3RhcnRBbmdsZTtzdGFydEFuZ2xlID0gXztyZXR1cm4gcGllO307cGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGVuZEFuZ2xlO2VuZEFuZ2xlID0gXztyZXR1cm4gcGllO307cGllLnBhZEFuZ2xlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZEFuZ2xlO3BhZEFuZ2xlID0gXztyZXR1cm4gcGllO307cmV0dXJuIHBpZTt9O3ZhciBkM19sYXlvdXRfcGllU29ydEJ5VmFsdWU9e307ZDMubGF5b3V0LnN0YWNrID0gZnVuY3Rpb24oKXt2YXIgdmFsdWVzPWQzX2lkZW50aXR5LG9yZGVyPWQzX2xheW91dF9zdGFja09yZGVyRGVmYXVsdCxvZmZzZXQ9ZDNfbGF5b3V0X3N0YWNrT2Zmc2V0WmVybyxvdXQ9ZDNfbGF5b3V0X3N0YWNrT3V0LHg9ZDNfbGF5b3V0X3N0YWNrWCx5PWQzX2xheW91dF9zdGFja1k7ZnVuY3Rpb24gc3RhY2soZGF0YSxpbmRleCl7aWYoIShuID0gZGF0YS5sZW5ndGgpKXJldHVybiBkYXRhO3ZhciBzZXJpZXM9ZGF0YS5tYXAoZnVuY3Rpb24oZCxpKXtyZXR1cm4gdmFsdWVzLmNhbGwoc3RhY2ssZCxpKTt9KTt2YXIgcG9pbnRzPXNlcmllcy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGQubWFwKGZ1bmN0aW9uKHYsaSl7cmV0dXJuIFt4LmNhbGwoc3RhY2ssdixpKSx5LmNhbGwoc3RhY2ssdixpKV07fSk7fSk7dmFyIG9yZGVycz1vcmRlci5jYWxsKHN0YWNrLHBvaW50cyxpbmRleCk7c2VyaWVzID0gZDMucGVybXV0ZShzZXJpZXMsb3JkZXJzKTtwb2ludHMgPSBkMy5wZXJtdXRlKHBvaW50cyxvcmRlcnMpO3ZhciBvZmZzZXRzPW9mZnNldC5jYWxsKHN0YWNrLHBvaW50cyxpbmRleCk7dmFyIG09c2VyaWVzWzBdLmxlbmd0aCxuLGksaixvO2ZvcihqID0gMDtqIDwgbTsrK2opIHtvdXQuY2FsbChzdGFjayxzZXJpZXNbMF1bal0sbyA9IG9mZnNldHNbal0scG9pbnRzWzBdW2pdWzFdKTtmb3IoaSA9IDE7aSA8IG47KytpKSB7b3V0LmNhbGwoc3RhY2ssc2VyaWVzW2ldW2pdLG8gKz0gcG9pbnRzW2kgLSAxXVtqXVsxXSxwb2ludHNbaV1bal1bMV0pO319cmV0dXJuIGRhdGE7fXN0YWNrLnZhbHVlcyA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2YWx1ZXM7dmFsdWVzID0geDtyZXR1cm4gc3RhY2s7fTtzdGFjay5vcmRlciA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvcmRlcjtvcmRlciA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDpkM19sYXlvdXRfc3RhY2tPcmRlcnMuZ2V0KHgpIHx8IGQzX2xheW91dF9zdGFja09yZGVyRGVmYXVsdDtyZXR1cm4gc3RhY2s7fTtzdGFjay5vZmZzZXQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gb2Zmc2V0O29mZnNldCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDpkM19sYXlvdXRfc3RhY2tPZmZzZXRzLmdldCh4KSB8fCBkM19sYXlvdXRfc3RhY2tPZmZzZXRaZXJvO3JldHVybiBzdGFjazt9O3N0YWNrLnggPSBmdW5jdGlvbih6KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDt4ID0gejtyZXR1cm4gc3RhY2s7fTtzdGFjay55ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHk7eSA9IHo7cmV0dXJuIHN0YWNrO307c3RhY2sub3V0ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG91dDtvdXQgPSB6O3JldHVybiBzdGFjazt9O3JldHVybiBzdGFjazt9O2Z1bmN0aW9uIGQzX2xheW91dF9zdGFja1goZCl7cmV0dXJuIGQueDt9ZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrWShkKXtyZXR1cm4gZC55O31mdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tPdXQoZCx5MCx5KXtkLnkwID0geTA7ZC55ID0geTt9dmFyIGQzX2xheW91dF9zdGFja09yZGVycz1kMy5tYXAoe1wiaW5zaWRlLW91dFwiOmZ1bmN0aW9uIGluc2lkZU91dChkYXRhKXt2YXIgbj1kYXRhLmxlbmd0aCxpLGosbWF4PWRhdGEubWFwKGQzX2xheW91dF9zdGFja01heEluZGV4KSxzdW1zPWRhdGEubWFwKGQzX2xheW91dF9zdGFja1JlZHVjZVN1bSksaW5kZXg9ZDMucmFuZ2Uobikuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBtYXhbYV0gLSBtYXhbYl07fSksdG9wPTAsYm90dG9tPTAsdG9wcz1bXSxib3R0b21zPVtdO2ZvcihpID0gMDtpIDwgbjsrK2kpIHtqID0gaW5kZXhbaV07aWYodG9wIDwgYm90dG9tKXt0b3AgKz0gc3Vtc1tqXTt0b3BzLnB1c2goaik7fWVsc2Uge2JvdHRvbSArPSBzdW1zW2pdO2JvdHRvbXMucHVzaChqKTt9fXJldHVybiBib3R0b21zLnJldmVyc2UoKS5jb25jYXQodG9wcyk7fSxyZXZlcnNlOmZ1bmN0aW9uIHJldmVyc2UoZGF0YSl7cmV0dXJuIGQzLnJhbmdlKGRhdGEubGVuZ3RoKS5yZXZlcnNlKCk7fSxcImRlZmF1bHRcIjpkM19sYXlvdXRfc3RhY2tPcmRlckRlZmF1bHR9KTt2YXIgZDNfbGF5b3V0X3N0YWNrT2Zmc2V0cz1kMy5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24gc2lsaG91ZXR0ZShkYXRhKXt2YXIgbj1kYXRhLmxlbmd0aCxtPWRhdGFbMF0ubGVuZ3RoLHN1bXM9W10sbWF4PTAsaSxqLG8seTA9W107Zm9yKGogPSAwO2ogPCBtOysraikge2ZvcihpID0gMCxvID0gMDtpIDwgbjtpKyspIG8gKz0gZGF0YVtpXVtqXVsxXTtpZihvID4gbWF4KW1heCA9IG87c3Vtcy5wdXNoKG8pO31mb3IoaiA9IDA7aiA8IG07KytqKSB7eTBbal0gPSAobWF4IC0gc3Vtc1tqXSkgLyAyO31yZXR1cm4geTA7fSx3aWdnbGU6ZnVuY3Rpb24gd2lnZ2xlKGRhdGEpe3ZhciBuPWRhdGEubGVuZ3RoLHg9ZGF0YVswXSxtPXgubGVuZ3RoLGksaixrLHMxLHMyLHMzLGR4LG8sbzAseTA9W107eTBbMF0gPSBvID0gbzAgPSAwO2ZvcihqID0gMTtqIDwgbTsrK2opIHtmb3IoaSA9IDAsczEgPSAwO2kgPCBuOysraSkgczEgKz0gZGF0YVtpXVtqXVsxXTtmb3IoaSA9IDAsczIgPSAwLGR4ID0geFtqXVswXSAtIHhbaiAtIDFdWzBdO2kgPCBuOysraSkge2ZvcihrID0gMCxzMyA9IChkYXRhW2ldW2pdWzFdIC0gZGF0YVtpXVtqIC0gMV1bMV0pIC8gKDIgKiBkeCk7ayA8IGk7KytrKSB7czMgKz0gKGRhdGFba11bal1bMV0gLSBkYXRhW2tdW2ogLSAxXVsxXSkgLyBkeDt9czIgKz0gczMgKiBkYXRhW2ldW2pdWzFdO315MFtqXSA9IG8gLT0gczE/czIgLyBzMSAqIGR4OjA7aWYobyA8IG8wKW8wID0gbzt9Zm9yKGogPSAwO2ogPCBtOysraikgeTBbal0gLT0gbzA7cmV0dXJuIHkwO30sZXhwYW5kOmZ1bmN0aW9uIGV4cGFuZChkYXRhKXt2YXIgbj1kYXRhLmxlbmd0aCxtPWRhdGFbMF0ubGVuZ3RoLGs9MSAvIG4saSxqLG8seTA9W107Zm9yKGogPSAwO2ogPCBtOysraikge2ZvcihpID0gMCxvID0gMDtpIDwgbjtpKyspIG8gKz0gZGF0YVtpXVtqXVsxXTtpZihvKWZvcihpID0gMDtpIDwgbjtpKyspIGRhdGFbaV1bal1bMV0gLz0gbztlbHNlIGZvcihpID0gMDtpIDwgbjtpKyspIGRhdGFbaV1bal1bMV0gPSBrO31mb3IoaiA9IDA7aiA8IG07KytqKSB5MFtqXSA9IDA7cmV0dXJuIHkwO30semVybzpkM19sYXlvdXRfc3RhY2tPZmZzZXRaZXJvfSk7ZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrT3JkZXJEZWZhdWx0KGRhdGEpe3JldHVybiBkMy5yYW5nZShkYXRhLmxlbmd0aCk7fWZ1bmN0aW9uIGQzX2xheW91dF9zdGFja09mZnNldFplcm8oZGF0YSl7dmFyIGo9LTEsbT1kYXRhWzBdLmxlbmd0aCx5MD1bXTt3aGlsZSgrK2ogPCBtKSB5MFtqXSA9IDA7cmV0dXJuIHkwO31mdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tNYXhJbmRleChhcnJheSl7dmFyIGk9MSxqPTAsdj1hcnJheVswXVsxXSxrLG49YXJyYXkubGVuZ3RoO2Zvcig7aSA8IG47KytpKSB7aWYoKGsgPSBhcnJheVtpXVsxXSkgPiB2KXtqID0gaTt2ID0gazt9fXJldHVybiBqO31mdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tSZWR1Y2VTdW0oZCl7cmV0dXJuIGQucmVkdWNlKGQzX2xheW91dF9zdGFja1N1bSwwKTt9ZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrU3VtKHAsZCl7cmV0dXJuIHAgKyBkWzFdO31kMy5sYXlvdXQuaGlzdG9ncmFtID0gZnVuY3Rpb24oKXt2YXIgZnJlcXVlbmN5PXRydWUsdmFsdWVyPU51bWJlcixyYW5nZXI9ZDNfbGF5b3V0X2hpc3RvZ3JhbVJhbmdlLGJpbm5lcj1kM19sYXlvdXRfaGlzdG9ncmFtQmluU3R1cmdlcztmdW5jdGlvbiBoaXN0b2dyYW0oZGF0YSxpKXt2YXIgYmlucz1bXSx2YWx1ZXM9ZGF0YS5tYXAodmFsdWVyLHRoaXMpLHJhbmdlPXJhbmdlci5jYWxsKHRoaXMsdmFsdWVzLGkpLHRocmVzaG9sZHM9YmlubmVyLmNhbGwodGhpcyxyYW5nZSx2YWx1ZXMsaSksYmluLGk9LTEsbj12YWx1ZXMubGVuZ3RoLG09dGhyZXNob2xkcy5sZW5ndGggLSAxLGs9ZnJlcXVlbmN5PzE6MSAvIG4seDt3aGlsZSgrK2kgPCBtKSB7YmluID0gYmluc1tpXSA9IFtdO2Jpbi5keCA9IHRocmVzaG9sZHNbaSArIDFdIC0gKGJpbi54ID0gdGhyZXNob2xkc1tpXSk7YmluLnkgPSAwO31pZihtID4gMCl7aSA9IC0xO3doaWxlKCsraSA8IG4pIHt4ID0gdmFsdWVzW2ldO2lmKHggPj0gcmFuZ2VbMF0gJiYgeCA8PSByYW5nZVsxXSl7YmluID0gYmluc1tkMy5iaXNlY3QodGhyZXNob2xkcyx4LDEsbSkgLSAxXTtiaW4ueSArPSBrO2Jpbi5wdXNoKGRhdGFbaV0pO319fXJldHVybiBiaW5zO31oaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdmFsdWVyO3ZhbHVlciA9IHg7cmV0dXJuIGhpc3RvZ3JhbTt9O2hpc3RvZ3JhbS5yYW5nZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByYW5nZXI7cmFuZ2VyID0gZDNfZnVuY3Rvcih4KTtyZXR1cm4gaGlzdG9ncmFtO307aGlzdG9ncmFtLmJpbnMgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYmlubmVyO2Jpbm5lciA9IHR5cGVvZiB4ID09PSBcIm51bWJlclwiP2Z1bmN0aW9uKHJhbmdlKXtyZXR1cm4gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpbkZpeGVkKHJhbmdlLHgpO306ZDNfZnVuY3Rvcih4KTtyZXR1cm4gaGlzdG9ncmFtO307aGlzdG9ncmFtLmZyZXF1ZW5jeSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBmcmVxdWVuY3k7ZnJlcXVlbmN5ID0gISF4O3JldHVybiBoaXN0b2dyYW07fTtyZXR1cm4gaGlzdG9ncmFtO307ZnVuY3Rpb24gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpblN0dXJnZXMocmFuZ2UsdmFsdWVzKXtyZXR1cm4gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpbkZpeGVkKHJhbmdlLE1hdGguY2VpbChNYXRoLmxvZyh2YWx1ZXMubGVuZ3RoKSAvIE1hdGguTE4yICsgMSkpO31mdW5jdGlvbiBkM19sYXlvdXRfaGlzdG9ncmFtQmluRml4ZWQocmFuZ2Usbil7dmFyIHg9LTEsYj0rcmFuZ2VbMF0sbT0ocmFuZ2VbMV0gLSBiKSAvIG4sZj1bXTt3aGlsZSgrK3ggPD0gbikgZlt4XSA9IG0gKiB4ICsgYjtyZXR1cm4gZjt9ZnVuY3Rpb24gZDNfbGF5b3V0X2hpc3RvZ3JhbVJhbmdlKHZhbHVlcyl7cmV0dXJuIFtkMy5taW4odmFsdWVzKSxkMy5tYXgodmFsdWVzKV07fWQzLmxheW91dC5wYWNrID0gZnVuY3Rpb24oKXt2YXIgaGllcmFyY2h5PWQzLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KGQzX2xheW91dF9wYWNrU29ydCkscGFkZGluZz0wLHNpemU9WzEsMV0scmFkaXVzO2Z1bmN0aW9uIHBhY2soZCxpKXt2YXIgbm9kZXM9aGllcmFyY2h5LmNhbGwodGhpcyxkLGkpLHJvb3Q9bm9kZXNbMF0sdz1zaXplWzBdLGg9c2l6ZVsxXSxyPXJhZGl1cyA9PSBudWxsP01hdGguc3FydDp0eXBlb2YgcmFkaXVzID09PSBcImZ1bmN0aW9uXCI/cmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHJhZGl1czt9O3Jvb3QueCA9IHJvb3QueSA9IDA7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxmdW5jdGlvbihkKXtkLnIgPSArcihkLnZhbHVlKTt9KTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290LGQzX2xheW91dF9wYWNrU2libGluZ3MpO2lmKHBhZGRpbmcpe3ZhciBkcj1wYWRkaW5nICogKHJhZGl1cz8xOk1hdGgubWF4KDIgKiByb290LnIgLyB3LDIgKiByb290LnIgLyBoKSkgLyAyO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsZnVuY3Rpb24oZCl7ZC5yICs9IGRyO30pO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsZDNfbGF5b3V0X3BhY2tTaWJsaW5ncyk7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxmdW5jdGlvbihkKXtkLnIgLT0gZHI7fSk7fWQzX2xheW91dF9wYWNrVHJhbnNmb3JtKHJvb3QsdyAvIDIsaCAvIDIscmFkaXVzPzE6MSAvIE1hdGgubWF4KDIgKiByb290LnIgLyB3LDIgKiByb290LnIgLyBoKSk7cmV0dXJuIG5vZGVzO31wYWNrLnNpemUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc2l6ZTtzaXplID0gXztyZXR1cm4gcGFjazt9O3BhY2sucmFkaXVzID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhZGl1cztyYWRpdXMgPSBfID09IG51bGwgfHwgdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIj9fOitfO3JldHVybiBwYWNrO307cGFjay5wYWRkaW5nID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZGRpbmc7cGFkZGluZyA9ICtfO3JldHVybiBwYWNrO307cmV0dXJuIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQocGFjayxoaWVyYXJjaHkpO307ZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tTb3J0KGEsYil7cmV0dXJuIGEudmFsdWUgLSBiLnZhbHVlO31mdW5jdGlvbiBkM19sYXlvdXRfcGFja0luc2VydChhLGIpe3ZhciBjPWEuX3BhY2tfbmV4dDthLl9wYWNrX25leHQgPSBiO2IuX3BhY2tfcHJldiA9IGE7Yi5fcGFja19uZXh0ID0gYztjLl9wYWNrX3ByZXYgPSBiO31mdW5jdGlvbiBkM19sYXlvdXRfcGFja1NwbGljZShhLGIpe2EuX3BhY2tfbmV4dCA9IGI7Yi5fcGFja19wcmV2ID0gYTt9ZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tJbnRlcnNlY3RzKGEsYil7dmFyIGR4PWIueCAtIGEueCxkeT1iLnkgLSBhLnksZHI9YS5yICsgYi5yO3JldHVybiAuOTk5ICogZHIgKiBkciA+IGR4ICogZHggKyBkeSAqIGR5O31mdW5jdGlvbiBkM19sYXlvdXRfcGFja1NpYmxpbmdzKG5vZGUpe2lmKCEobm9kZXMgPSBub2RlLmNoaWxkcmVuKSB8fCAhKG4gPSBub2Rlcy5sZW5ndGgpKXJldHVybjt2YXIgbm9kZXMseE1pbj1JbmZpbml0eSx4TWF4PS1JbmZpbml0eSx5TWluPUluZmluaXR5LHlNYXg9LUluZmluaXR5LGEsYixjLGksaixrLG47ZnVuY3Rpb24gYm91bmQobm9kZSl7eE1pbiA9IE1hdGgubWluKG5vZGUueCAtIG5vZGUucix4TWluKTt4TWF4ID0gTWF0aC5tYXgobm9kZS54ICsgbm9kZS5yLHhNYXgpO3lNaW4gPSBNYXRoLm1pbihub2RlLnkgLSBub2RlLnIseU1pbik7eU1heCA9IE1hdGgubWF4KG5vZGUueSArIG5vZGUucix5TWF4KTt9bm9kZXMuZm9yRWFjaChkM19sYXlvdXRfcGFja0xpbmspO2EgPSBub2Rlc1swXTthLnggPSAtYS5yO2EueSA9IDA7Ym91bmQoYSk7aWYobiA+IDEpe2IgPSBub2Rlc1sxXTtiLnggPSBiLnI7Yi55ID0gMDtib3VuZChiKTtpZihuID4gMil7YyA9IG5vZGVzWzJdO2QzX2xheW91dF9wYWNrUGxhY2UoYSxiLGMpO2JvdW5kKGMpO2QzX2xheW91dF9wYWNrSW5zZXJ0KGEsYyk7YS5fcGFja19wcmV2ID0gYztkM19sYXlvdXRfcGFja0luc2VydChjLGIpO2IgPSBhLl9wYWNrX25leHQ7Zm9yKGkgPSAzO2kgPCBuO2krKykge2QzX2xheW91dF9wYWNrUGxhY2UoYSxiLGMgPSBub2Rlc1tpXSk7dmFyIGlzZWN0PTAsczE9MSxzMj0xO2ZvcihqID0gYi5fcGFja19uZXh0O2ogIT09IGI7aiA9IGouX3BhY2tfbmV4dCxzMSsrKSB7aWYoZDNfbGF5b3V0X3BhY2tJbnRlcnNlY3RzKGosYykpe2lzZWN0ID0gMTticmVhazt9fWlmKGlzZWN0ID09IDEpe2ZvcihrID0gYS5fcGFja19wcmV2O2sgIT09IGouX3BhY2tfcHJldjtrID0gay5fcGFja19wcmV2LHMyKyspIHtpZihkM19sYXlvdXRfcGFja0ludGVyc2VjdHMoayxjKSl7YnJlYWs7fX19aWYoaXNlY3Qpe2lmKHMxIDwgczIgfHwgczEgPT0gczIgJiYgYi5yIDwgYS5yKWQzX2xheW91dF9wYWNrU3BsaWNlKGEsYiA9IGopO2Vsc2UgZDNfbGF5b3V0X3BhY2tTcGxpY2UoYSA9IGssYik7aS0tO31lbHNlIHtkM19sYXlvdXRfcGFja0luc2VydChhLGMpO2IgPSBjO2JvdW5kKGMpO319fX12YXIgY3g9KHhNaW4gKyB4TWF4KSAvIDIsY3k9KHlNaW4gKyB5TWF4KSAvIDIsY3I9MDtmb3IoaSA9IDA7aSA8IG47aSsrKSB7YyA9IG5vZGVzW2ldO2MueCAtPSBjeDtjLnkgLT0gY3k7Y3IgPSBNYXRoLm1heChjcixjLnIgKyBNYXRoLnNxcnQoYy54ICogYy54ICsgYy55ICogYy55KSk7fW5vZGUuciA9IGNyO25vZGVzLmZvckVhY2goZDNfbGF5b3V0X3BhY2tVbmxpbmspO31mdW5jdGlvbiBkM19sYXlvdXRfcGFja0xpbmsobm9kZSl7bm9kZS5fcGFja19uZXh0ID0gbm9kZS5fcGFja19wcmV2ID0gbm9kZTt9ZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tVbmxpbmsobm9kZSl7ZGVsZXRlIG5vZGUuX3BhY2tfbmV4dDtkZWxldGUgbm9kZS5fcGFja19wcmV2O31mdW5jdGlvbiBkM19sYXlvdXRfcGFja1RyYW5zZm9ybShub2RlLHgseSxrKXt2YXIgY2hpbGRyZW49bm9kZS5jaGlsZHJlbjtub2RlLnggPSB4ICs9IGsgKiBub2RlLng7bm9kZS55ID0geSArPSBrICogbm9kZS55O25vZGUuciAqPSBrO2lmKGNoaWxkcmVuKXt2YXIgaT0tMSxuPWNoaWxkcmVuLmxlbmd0aDt3aGlsZSgrK2kgPCBuKSBkM19sYXlvdXRfcGFja1RyYW5zZm9ybShjaGlsZHJlbltpXSx4LHksayk7fX1mdW5jdGlvbiBkM19sYXlvdXRfcGFja1BsYWNlKGEsYixjKXt2YXIgZGI9YS5yICsgYy5yLGR4PWIueCAtIGEueCxkeT1iLnkgLSBhLnk7aWYoZGIgJiYgKGR4IHx8IGR5KSl7dmFyIGRhPWIuciArIGMucixkYz1keCAqIGR4ICsgZHkgKiBkeTtkYSAqPSBkYTtkYiAqPSBkYjt2YXIgeD0uNSArIChkYiAtIGRhKSAvICgyICogZGMpLHk9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMiAqIGRhICogKGRiICsgZGMpIC0gKGRiIC09IGRjKSAqIGRiIC0gZGEgKiBkYSkpIC8gKDIgKiBkYyk7Yy54ID0gYS54ICsgeCAqIGR4ICsgeSAqIGR5O2MueSA9IGEueSArIHggKiBkeSAtIHkgKiBkeDt9ZWxzZSB7Yy54ID0gYS54ICsgZGI7Yy55ID0gYS55O319ZDMubGF5b3V0LnRyZWUgPSBmdW5jdGlvbigpe3ZhciBoaWVyYXJjaHk9ZDMubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksc2VwYXJhdGlvbj1kM19sYXlvdXRfdHJlZVNlcGFyYXRpb24sc2l6ZT1bMSwxXSxub2RlU2l6ZT1udWxsO2Z1bmN0aW9uIHRyZWUoZCxpKXt2YXIgbm9kZXM9aGllcmFyY2h5LmNhbGwodGhpcyxkLGkpLHJvb3QwPW5vZGVzWzBdLHJvb3QxPXdyYXBUcmVlKHJvb3QwKTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290MSxmaXJzdFdhbGspLHJvb3QxLnBhcmVudC5tID0gLXJvb3QxLno7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKHJvb3QxLHNlY29uZFdhbGspO2lmKG5vZGVTaXplKWQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEJlZm9yZShyb290MCxzaXplTm9kZSk7ZWxzZSB7dmFyIGxlZnQ9cm9vdDAscmlnaHQ9cm9vdDAsYm90dG9tPXJvb3QwO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEJlZm9yZShyb290MCxmdW5jdGlvbihub2RlKXtpZihub2RlLnggPCBsZWZ0LngpbGVmdCA9IG5vZGU7aWYobm9kZS54ID4gcmlnaHQueClyaWdodCA9IG5vZGU7aWYobm9kZS5kZXB0aCA+IGJvdHRvbS5kZXB0aClib3R0b20gPSBub2RlO30pO3ZhciB0eD1zZXBhcmF0aW9uKGxlZnQscmlnaHQpIC8gMiAtIGxlZnQueCxreD1zaXplWzBdIC8gKHJpZ2h0LnggKyBzZXBhcmF0aW9uKHJpZ2h0LGxlZnQpIC8gMiArIHR4KSxreT1zaXplWzFdIC8gKGJvdHRvbS5kZXB0aCB8fCAxKTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRCZWZvcmUocm9vdDAsZnVuY3Rpb24obm9kZSl7bm9kZS54ID0gKG5vZGUueCArIHR4KSAqIGt4O25vZGUueSA9IG5vZGUuZGVwdGggKiBreTt9KTt9cmV0dXJuIG5vZGVzO31mdW5jdGlvbiB3cmFwVHJlZShyb290MCl7dmFyIHJvb3QxPXtBOm51bGwsY2hpbGRyZW46W3Jvb3QwXX0scXVldWU9W3Jvb3QxXSxub2RlMTt3aGlsZSgobm9kZTEgPSBxdWV1ZS5wb3AoKSkgIT0gbnVsbCkge2Zvcih2YXIgY2hpbGRyZW49bm9kZTEuY2hpbGRyZW4sY2hpbGQsaT0wLG49Y2hpbGRyZW4ubGVuZ3RoO2kgPCBuOysraSkge3F1ZXVlLnB1c2goKGNoaWxkcmVuW2ldID0gY2hpbGQgPSB7XzpjaGlsZHJlbltpXSxwYXJlbnQ6bm9kZTEsY2hpbGRyZW46KGNoaWxkID0gY2hpbGRyZW5baV0uY2hpbGRyZW4pICYmIGNoaWxkLnNsaWNlKCkgfHwgW10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6aX0pLmEgPSBjaGlsZCk7fX1yZXR1cm4gcm9vdDEuY2hpbGRyZW5bMF07fWZ1bmN0aW9uIGZpcnN0V2Fsayh2KXt2YXIgY2hpbGRyZW49di5jaGlsZHJlbixzaWJsaW5ncz12LnBhcmVudC5jaGlsZHJlbix3PXYuaT9zaWJsaW5nc1t2LmkgLSAxXTpudWxsO2lmKGNoaWxkcmVuLmxlbmd0aCl7ZDNfbGF5b3V0X3RyZWVTaGlmdCh2KTt2YXIgbWlkcG9pbnQ9KGNoaWxkcmVuWzBdLnogKyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS56KSAvIDI7aWYodyl7di56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sdy5fKTt2Lm0gPSB2LnogLSBtaWRwb2ludDt9ZWxzZSB7di56ID0gbWlkcG9pbnQ7fX1lbHNlIGlmKHcpe3YueiA9IHcueiArIHNlcGFyYXRpb24odi5fLHcuXyk7fXYucGFyZW50LkEgPSBhcHBvcnRpb24odix3LHYucGFyZW50LkEgfHwgc2libGluZ3NbMF0pO31mdW5jdGlvbiBzZWNvbmRXYWxrKHYpe3YuXy54ID0gdi56ICsgdi5wYXJlbnQubTt2Lm0gKz0gdi5wYXJlbnQubTt9ZnVuY3Rpb24gYXBwb3J0aW9uKHYsdyxhbmNlc3Rvcil7aWYodyl7dmFyIHZpcD12LHZvcD12LHZpbT13LHZvbT12aXAucGFyZW50LmNoaWxkcmVuWzBdLHNpcD12aXAubSxzb3A9dm9wLm0sc2ltPXZpbS5tLHNvbT12b20ubSxzaGlmdDt3aGlsZSgodmltID0gZDNfbGF5b3V0X3RyZWVSaWdodCh2aW0pLHZpcCA9IGQzX2xheW91dF90cmVlTGVmdCh2aXApLHZpbSAmJiB2aXApKSB7dm9tID0gZDNfbGF5b3V0X3RyZWVMZWZ0KHZvbSk7dm9wID0gZDNfbGF5b3V0X3RyZWVSaWdodCh2b3ApO3ZvcC5hID0gdjtzaGlmdCA9IHZpbS56ICsgc2ltIC0gdmlwLnogLSBzaXAgKyBzZXBhcmF0aW9uKHZpbS5fLHZpcC5fKTtpZihzaGlmdCA+IDApe2QzX2xheW91dF90cmVlTW92ZShkM19sYXlvdXRfdHJlZUFuY2VzdG9yKHZpbSx2LGFuY2VzdG9yKSx2LHNoaWZ0KTtzaXAgKz0gc2hpZnQ7c29wICs9IHNoaWZ0O31zaW0gKz0gdmltLm07c2lwICs9IHZpcC5tO3NvbSArPSB2b20ubTtzb3AgKz0gdm9wLm07fWlmKHZpbSAmJiAhZDNfbGF5b3V0X3RyZWVSaWdodCh2b3ApKXt2b3AudCA9IHZpbTt2b3AubSArPSBzaW0gLSBzb3A7fWlmKHZpcCAmJiAhZDNfbGF5b3V0X3RyZWVMZWZ0KHZvbSkpe3ZvbS50ID0gdmlwO3ZvbS5tICs9IHNpcCAtIHNvbTthbmNlc3RvciA9IHY7fX1yZXR1cm4gYW5jZXN0b3I7fWZ1bmN0aW9uIHNpemVOb2RlKG5vZGUpe25vZGUueCAqPSBzaXplWzBdO25vZGUueSA9IG5vZGUuZGVwdGggKiBzaXplWzFdO310cmVlLnNlcGFyYXRpb24gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc2VwYXJhdGlvbjtzZXBhcmF0aW9uID0geDtyZXR1cm4gdHJlZTt9O3RyZWUuc2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBub2RlU2l6ZT9udWxsOnNpemU7bm9kZVNpemUgPSAoc2l6ZSA9IHgpID09IG51bGw/c2l6ZU5vZGU6bnVsbDtyZXR1cm4gdHJlZTt9O3RyZWUubm9kZVNpemUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbm9kZVNpemU/c2l6ZTpudWxsO25vZGVTaXplID0gKHNpemUgPSB4KSA9PSBudWxsP251bGw6c2l6ZU5vZGU7cmV0dXJuIHRyZWU7fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZCh0cmVlLGhpZXJhcmNoeSk7fTtmdW5jdGlvbiBkM19sYXlvdXRfdHJlZVNlcGFyYXRpb24oYSxiKXtyZXR1cm4gYS5wYXJlbnQgPT0gYi5wYXJlbnQ/MToyO31mdW5jdGlvbiBkM19sYXlvdXRfdHJlZUxlZnQodil7dmFyIGNoaWxkcmVuPXYuY2hpbGRyZW47cmV0dXJuIGNoaWxkcmVuLmxlbmd0aD9jaGlsZHJlblswXTp2LnQ7fWZ1bmN0aW9uIGQzX2xheW91dF90cmVlUmlnaHQodil7dmFyIGNoaWxkcmVuPXYuY2hpbGRyZW4sbjtyZXR1cm4gKG4gPSBjaGlsZHJlbi5sZW5ndGgpP2NoaWxkcmVuW24gLSAxXTp2LnQ7fWZ1bmN0aW9uIGQzX2xheW91dF90cmVlTW92ZSh3bSx3cCxzaGlmdCl7dmFyIGNoYW5nZT1zaGlmdCAvICh3cC5pIC0gd20uaSk7d3AuYyAtPSBjaGFuZ2U7d3AucyArPSBzaGlmdDt3bS5jICs9IGNoYW5nZTt3cC56ICs9IHNoaWZ0O3dwLm0gKz0gc2hpZnQ7fWZ1bmN0aW9uIGQzX2xheW91dF90cmVlU2hpZnQodil7dmFyIHNoaWZ0PTAsY2hhbmdlPTAsY2hpbGRyZW49di5jaGlsZHJlbixpPWNoaWxkcmVuLmxlbmd0aCx3O3doaWxlKC0taSA+PSAwKSB7dyA9IGNoaWxkcmVuW2ldO3cueiArPSBzaGlmdDt3Lm0gKz0gc2hpZnQ7c2hpZnQgKz0gdy5zICsgKGNoYW5nZSArPSB3LmMpO319ZnVuY3Rpb24gZDNfbGF5b3V0X3RyZWVBbmNlc3Rvcih2aW0sdixhbmNlc3Rvcil7cmV0dXJuIHZpbS5hLnBhcmVudCA9PT0gdi5wYXJlbnQ/dmltLmE6YW5jZXN0b3I7fWQzLmxheW91dC5jbHVzdGVyID0gZnVuY3Rpb24oKXt2YXIgaGllcmFyY2h5PWQzLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHNlcGFyYXRpb249ZDNfbGF5b3V0X3RyZWVTZXBhcmF0aW9uLHNpemU9WzEsMV0sbm9kZVNpemU9ZmFsc2U7ZnVuY3Rpb24gY2x1c3RlcihkLGkpe3ZhciBub2Rlcz1oaWVyYXJjaHkuY2FsbCh0aGlzLGQsaSkscm9vdD1ub2Rlc1swXSxwcmV2aW91c05vZGUseD0wO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsZnVuY3Rpb24obm9kZSl7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW47aWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKXtub2RlLnggPSBkM19sYXlvdXRfY2x1c3RlclgoY2hpbGRyZW4pO25vZGUueSA9IGQzX2xheW91dF9jbHVzdGVyWShjaGlsZHJlbik7fWVsc2Uge25vZGUueCA9IHByZXZpb3VzTm9kZT94ICs9IHNlcGFyYXRpb24obm9kZSxwcmV2aW91c05vZGUpOjA7bm9kZS55ID0gMDtwcmV2aW91c05vZGUgPSBub2RlO319KTt2YXIgbGVmdD1kM19sYXlvdXRfY2x1c3RlckxlZnQocm9vdCkscmlnaHQ9ZDNfbGF5b3V0X2NsdXN0ZXJSaWdodChyb290KSx4MD1sZWZ0LnggLSBzZXBhcmF0aW9uKGxlZnQscmlnaHQpIC8gMix4MT1yaWdodC54ICsgc2VwYXJhdGlvbihyaWdodCxsZWZ0KSAvIDI7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxub2RlU2l6ZT9mdW5jdGlvbihub2RlKXtub2RlLnggPSAobm9kZS54IC0gcm9vdC54KSAqIHNpemVbMF07bm9kZS55ID0gKHJvb3QueSAtIG5vZGUueSkgKiBzaXplWzFdO306ZnVuY3Rpb24obm9kZSl7bm9kZS54ID0gKG5vZGUueCAtIHgwKSAvICh4MSAtIHgwKSAqIHNpemVbMF07bm9kZS55ID0gKDEgLSAocm9vdC55P25vZGUueSAvIHJvb3QueToxKSkgKiBzaXplWzFdO30pO3JldHVybiBub2Rlczt9Y2x1c3Rlci5zZXBhcmF0aW9uID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNlcGFyYXRpb247c2VwYXJhdGlvbiA9IHg7cmV0dXJuIGNsdXN0ZXI7fTtjbHVzdGVyLnNpemUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbm9kZVNpemU/bnVsbDpzaXplO25vZGVTaXplID0gKHNpemUgPSB4KSA9PSBudWxsO3JldHVybiBjbHVzdGVyO307Y2x1c3Rlci5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBub2RlU2l6ZT9zaXplOm51bGw7bm9kZVNpemUgPSAoc2l6ZSA9IHgpICE9IG51bGw7cmV0dXJuIGNsdXN0ZXI7fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZChjbHVzdGVyLGhpZXJhcmNoeSk7fTtmdW5jdGlvbiBkM19sYXlvdXRfY2x1c3RlclkoY2hpbGRyZW4pe3JldHVybiAxICsgZDMubWF4KGNoaWxkcmVuLGZ1bmN0aW9uKGNoaWxkKXtyZXR1cm4gY2hpbGQueTt9KTt9ZnVuY3Rpb24gZDNfbGF5b3V0X2NsdXN0ZXJYKGNoaWxkcmVuKXtyZXR1cm4gY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uKHgsY2hpbGQpe3JldHVybiB4ICsgY2hpbGQueDt9LDApIC8gY2hpbGRyZW4ubGVuZ3RoO31mdW5jdGlvbiBkM19sYXlvdXRfY2x1c3RlckxlZnQoX3gyKXt2YXIgX2FnYWluPXRydWU7X2Z1bmN0aW9uOiB3aGlsZShfYWdhaW4pIHt2YXIgbm9kZT1feDI7X2FnYWluID0gZmFsc2U7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW47aWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKXtfeDIgPSBjaGlsZHJlblswXTtfYWdhaW4gPSB0cnVlO2NoaWxkcmVuID0gdW5kZWZpbmVkO2NvbnRpbnVlIF9mdW5jdGlvbjt9ZWxzZSB7cmV0dXJuIG5vZGU7fX19ZnVuY3Rpb24gZDNfbGF5b3V0X2NsdXN0ZXJSaWdodChfeDMpe3ZhciBfYWdhaW4yPXRydWU7X2Z1bmN0aW9uMjogd2hpbGUoX2FnYWluMikge3ZhciBub2RlPV94MztfYWdhaW4yID0gZmFsc2U7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW4sbjtpZihjaGlsZHJlbiAmJiAobiA9IGNoaWxkcmVuLmxlbmd0aCkpe194MyA9IGNoaWxkcmVuW24gLSAxXTtfYWdhaW4yID0gdHJ1ZTtjaGlsZHJlbiA9IG4gPSB1bmRlZmluZWQ7Y29udGludWUgX2Z1bmN0aW9uMjt9ZWxzZSB7cmV0dXJuIG5vZGU7fX19ZDMubGF5b3V0LnRyZWVtYXAgPSBmdW5jdGlvbigpe3ZhciBoaWVyYXJjaHk9ZDMubGF5b3V0LmhpZXJhcmNoeSgpLHJvdW5kPU1hdGgucm91bmQsc2l6ZT1bMSwxXSxwYWRkaW5nPW51bGwscGFkPWQzX2xheW91dF90cmVlbWFwUGFkTnVsbCxzdGlja3k9ZmFsc2Usc3RpY2tpZXMsbW9kZT1cInNxdWFyaWZ5XCIscmF0aW89LjUgKiAoMSArIE1hdGguc3FydCg1KSk7ZnVuY3Rpb24gc2NhbGUoY2hpbGRyZW4sayl7dmFyIGk9LTEsbj1jaGlsZHJlbi5sZW5ndGgsY2hpbGQsYXJlYTt3aGlsZSgrK2kgPCBuKSB7YXJlYSA9IChjaGlsZCA9IGNoaWxkcmVuW2ldKS52YWx1ZSAqIChrIDwgMD8wOmspO2NoaWxkLmFyZWEgPSBpc05hTihhcmVhKSB8fCBhcmVhIDw9IDA/MDphcmVhO319ZnVuY3Rpb24gc3F1YXJpZnkobm9kZSl7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW47aWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKXt2YXIgcmVjdD1wYWQobm9kZSkscm93PVtdLHJlbWFpbmluZz1jaGlsZHJlbi5zbGljZSgpLGNoaWxkLGJlc3Q9SW5maW5pdHksc2NvcmUsdT1tb2RlID09PSBcInNsaWNlXCI/cmVjdC5keDptb2RlID09PSBcImRpY2VcIj9yZWN0LmR5Om1vZGUgPT09IFwic2xpY2UtZGljZVwiP25vZGUuZGVwdGggJiAxP3JlY3QuZHk6cmVjdC5keDpNYXRoLm1pbihyZWN0LmR4LHJlY3QuZHkpLG47c2NhbGUocmVtYWluaW5nLHJlY3QuZHggKiByZWN0LmR5IC8gbm9kZS52YWx1ZSk7cm93LmFyZWEgPSAwO3doaWxlKChuID0gcmVtYWluaW5nLmxlbmd0aCkgPiAwKSB7cm93LnB1c2goY2hpbGQgPSByZW1haW5pbmdbbiAtIDFdKTtyb3cuYXJlYSArPSBjaGlsZC5hcmVhO2lmKG1vZGUgIT09IFwic3F1YXJpZnlcIiB8fCAoc2NvcmUgPSB3b3JzdChyb3csdSkpIDw9IGJlc3Qpe3JlbWFpbmluZy5wb3AoKTtiZXN0ID0gc2NvcmU7fWVsc2Uge3Jvdy5hcmVhIC09IHJvdy5wb3AoKS5hcmVhO3Bvc2l0aW9uKHJvdyx1LHJlY3QsZmFsc2UpO3UgPSBNYXRoLm1pbihyZWN0LmR4LHJlY3QuZHkpO3Jvdy5sZW5ndGggPSByb3cuYXJlYSA9IDA7YmVzdCA9IEluZmluaXR5O319aWYocm93Lmxlbmd0aCl7cG9zaXRpb24ocm93LHUscmVjdCx0cnVlKTtyb3cubGVuZ3RoID0gcm93LmFyZWEgPSAwO31jaGlsZHJlbi5mb3JFYWNoKHNxdWFyaWZ5KTt9fWZ1bmN0aW9uIHN0aWNraWZ5KG5vZGUpe3ZhciBjaGlsZHJlbj1ub2RlLmNoaWxkcmVuO2lmKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCl7dmFyIHJlY3Q9cGFkKG5vZGUpLHJlbWFpbmluZz1jaGlsZHJlbi5zbGljZSgpLGNoaWxkLHJvdz1bXTtzY2FsZShyZW1haW5pbmcscmVjdC5keCAqIHJlY3QuZHkgLyBub2RlLnZhbHVlKTtyb3cuYXJlYSA9IDA7d2hpbGUoY2hpbGQgPSByZW1haW5pbmcucG9wKCkpIHtyb3cucHVzaChjaGlsZCk7cm93LmFyZWEgKz0gY2hpbGQuYXJlYTtpZihjaGlsZC56ICE9IG51bGwpe3Bvc2l0aW9uKHJvdyxjaGlsZC56P3JlY3QuZHg6cmVjdC5keSxyZWN0LCFyZW1haW5pbmcubGVuZ3RoKTtyb3cubGVuZ3RoID0gcm93LmFyZWEgPSAwO319Y2hpbGRyZW4uZm9yRWFjaChzdGlja2lmeSk7fX1mdW5jdGlvbiB3b3JzdChyb3csdSl7dmFyIHM9cm93LmFyZWEscixybWF4PTAscm1pbj1JbmZpbml0eSxpPS0xLG49cm93Lmxlbmd0aDt3aGlsZSgrK2kgPCBuKSB7aWYoIShyID0gcm93W2ldLmFyZWEpKWNvbnRpbnVlO2lmKHIgPCBybWluKXJtaW4gPSByO2lmKHIgPiBybWF4KXJtYXggPSByO31zICo9IHM7dSAqPSB1O3JldHVybiBzP01hdGgubWF4KHUgKiBybWF4ICogcmF0aW8gLyBzLHMgLyAodSAqIHJtaW4gKiByYXRpbykpOkluZmluaXR5O31mdW5jdGlvbiBwb3NpdGlvbihyb3csdSxyZWN0LGZsdXNoKXt2YXIgaT0tMSxuPXJvdy5sZW5ndGgseD1yZWN0LngseT1yZWN0Lnksdj11P3JvdW5kKHJvdy5hcmVhIC8gdSk6MCxvO2lmKHUgPT0gcmVjdC5keCl7aWYoZmx1c2ggfHwgdiA+IHJlY3QuZHkpdiA9IHJlY3QuZHk7d2hpbGUoKytpIDwgbikge28gPSByb3dbaV07by54ID0geDtvLnkgPSB5O28uZHkgPSB2O3ggKz0gby5keCA9IE1hdGgubWluKHJlY3QueCArIHJlY3QuZHggLSB4LHY/cm91bmQoby5hcmVhIC8gdik6MCk7fW8ueiA9IHRydWU7by5keCArPSByZWN0LnggKyByZWN0LmR4IC0geDtyZWN0LnkgKz0gdjtyZWN0LmR5IC09IHY7fWVsc2Uge2lmKGZsdXNoIHx8IHYgPiByZWN0LmR4KXYgPSByZWN0LmR4O3doaWxlKCsraSA8IG4pIHtvID0gcm93W2ldO28ueCA9IHg7by55ID0geTtvLmR4ID0gdjt5ICs9IG8uZHkgPSBNYXRoLm1pbihyZWN0LnkgKyByZWN0LmR5IC0geSx2P3JvdW5kKG8uYXJlYSAvIHYpOjApO31vLnogPSBmYWxzZTtvLmR5ICs9IHJlY3QueSArIHJlY3QuZHkgLSB5O3JlY3QueCArPSB2O3JlY3QuZHggLT0gdjt9fWZ1bmN0aW9uIHRyZWVtYXAoZCl7dmFyIG5vZGVzPXN0aWNraWVzIHx8IGhpZXJhcmNoeShkKSxyb290PW5vZGVzWzBdO3Jvb3QueCA9IHJvb3QueSA9IDA7aWYocm9vdC52YWx1ZSlyb290LmR4ID0gc2l6ZVswXSxyb290LmR5ID0gc2l6ZVsxXTtlbHNlIHJvb3QuZHggPSByb290LmR5ID0gMDtpZihzdGlja2llcyloaWVyYXJjaHkucmV2YWx1ZShyb290KTtzY2FsZShbcm9vdF0scm9vdC5keCAqIHJvb3QuZHkgLyByb290LnZhbHVlKTsoc3RpY2tpZXM/c3RpY2tpZnk6c3F1YXJpZnkpKHJvb3QpO2lmKHN0aWNreSlzdGlja2llcyA9IG5vZGVzO3JldHVybiBub2Rlczt9dHJlZW1hcC5zaXplID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNpemU7c2l6ZSA9IHg7cmV0dXJuIHRyZWVtYXA7fTt0cmVlbWFwLnBhZGRpbmcgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcGFkZGluZztmdW5jdGlvbiBwYWRGdW5jdGlvbihub2RlKXt2YXIgcD14LmNhbGwodHJlZW1hcCxub2RlLG5vZGUuZGVwdGgpO3JldHVybiBwID09IG51bGw/ZDNfbGF5b3V0X3RyZWVtYXBQYWROdWxsKG5vZGUpOmQzX2xheW91dF90cmVlbWFwUGFkKG5vZGUsdHlwZW9mIHAgPT09IFwibnVtYmVyXCI/W3AscCxwLHBdOnApO31mdW5jdGlvbiBwYWRDb25zdGFudChub2RlKXtyZXR1cm4gZDNfbGF5b3V0X3RyZWVtYXBQYWQobm9kZSx4KTt9dmFyIHR5cGU7cGFkID0gKHBhZGRpbmcgPSB4KSA9PSBudWxsP2QzX2xheW91dF90cmVlbWFwUGFkTnVsbDoodHlwZSA9IHR5cGVvZiB4KSA9PT0gXCJmdW5jdGlvblwiP3BhZEZ1bmN0aW9uOnR5cGUgPT09IFwibnVtYmVyXCI/KHggPSBbeCx4LHgseF0scGFkQ29uc3RhbnQpOnBhZENvbnN0YW50O3JldHVybiB0cmVlbWFwO307dHJlZW1hcC5yb3VuZCA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByb3VuZCAhPSBOdW1iZXI7cm91bmQgPSB4P01hdGgucm91bmQ6TnVtYmVyO3JldHVybiB0cmVlbWFwO307dHJlZW1hcC5zdGlja3kgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc3RpY2t5O3N0aWNreSA9IHg7c3RpY2tpZXMgPSBudWxsO3JldHVybiB0cmVlbWFwO307dHJlZW1hcC5yYXRpbyA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByYXRpbztyYXRpbyA9IHg7cmV0dXJuIHRyZWVtYXA7fTt0cmVlbWFwLm1vZGUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbW9kZTttb2RlID0geCArIFwiXCI7cmV0dXJuIHRyZWVtYXA7fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZCh0cmVlbWFwLGhpZXJhcmNoeSk7fTtmdW5jdGlvbiBkM19sYXlvdXRfdHJlZW1hcFBhZE51bGwobm9kZSl7cmV0dXJuIHt4Om5vZGUueCx5Om5vZGUueSxkeDpub2RlLmR4LGR5Om5vZGUuZHl9O31mdW5jdGlvbiBkM19sYXlvdXRfdHJlZW1hcFBhZChub2RlLHBhZGRpbmcpe3ZhciB4PW5vZGUueCArIHBhZGRpbmdbM10seT1ub2RlLnkgKyBwYWRkaW5nWzBdLGR4PW5vZGUuZHggLSBwYWRkaW5nWzFdIC0gcGFkZGluZ1szXSxkeT1ub2RlLmR5IC0gcGFkZGluZ1swXSAtIHBhZGRpbmdbMl07aWYoZHggPCAwKXt4ICs9IGR4IC8gMjtkeCA9IDA7fWlmKGR5IDwgMCl7eSArPSBkeSAvIDI7ZHkgPSAwO31yZXR1cm4ge3g6eCx5OnksZHg6ZHgsZHk6ZHl9O31kMy5yYW5kb20gPSB7bm9ybWFsOmZ1bmN0aW9uIG5vcm1hbCjCtSzPgyl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuIDwgMinPgyA9IDE7aWYobiA8IDEpwrUgPSAwO3JldHVybiBmdW5jdGlvbigpe3ZhciB4LHkscjtkbyB7eCA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTt5ID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO3IgPSB4ICogeCArIHkgKiB5O313aGlsZSghciB8fCByID4gMSk7cmV0dXJuIMK1ICsgz4MgKiB4ICogTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocikgLyByKTt9O30sbG9nTm9ybWFsOmZ1bmN0aW9uIGxvZ05vcm1hbCgpe3ZhciByYW5kb209ZDMucmFuZG9tLm5vcm1hbC5hcHBseShkMyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChyYW5kb20oKSk7fTt9LGJhdGVzOmZ1bmN0aW9uIGJhdGVzKG0pe3ZhciByYW5kb209ZDMucmFuZG9tLmlyd2luSGFsbChtKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmFuZG9tKCkgLyBtO307fSxpcndpbkhhbGw6ZnVuY3Rpb24gaXJ3aW5IYWxsKG0pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz0wLGo9MDtqIDwgbTtqKyspIHMgKz0gTWF0aC5yYW5kb20oKTtyZXR1cm4gczt9O319O2QzLnNjYWxlID0ge307ZnVuY3Rpb24gZDNfc2NhbGVFeHRlbnQoZG9tYWluKXt2YXIgc3RhcnQ9ZG9tYWluWzBdLHN0b3A9ZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXTtyZXR1cm4gc3RhcnQgPCBzdG9wP1tzdGFydCxzdG9wXTpbc3RvcCxzdGFydF07fWZ1bmN0aW9uIGQzX3NjYWxlUmFuZ2Uoc2NhbGUpe3JldHVybiBzY2FsZS5yYW5nZUV4dGVudD9zY2FsZS5yYW5nZUV4dGVudCgpOmQzX3NjYWxlRXh0ZW50KHNjYWxlLnJhbmdlKCkpO31mdW5jdGlvbiBkM19zY2FsZV9iaWxpbmVhcihkb21haW4scmFuZ2UsdW5pbnRlcnBvbGF0ZSxpbnRlcnBvbGF0ZSl7dmFyIHU9dW5pbnRlcnBvbGF0ZShkb21haW5bMF0sZG9tYWluWzFdKSxpPWludGVycG9sYXRlKHJhbmdlWzBdLHJhbmdlWzFdKTtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIGkodSh4KSk7fTt9ZnVuY3Rpb24gZDNfc2NhbGVfbmljZShkb21haW4sbmljZSl7dmFyIGkwPTAsaTE9ZG9tYWluLmxlbmd0aCAtIDEseDA9ZG9tYWluW2kwXSx4MT1kb21haW5baTFdLGR4O2lmKHgxIDwgeDApe2R4ID0gaTAsaTAgPSBpMSxpMSA9IGR4O2R4ID0geDAseDAgPSB4MSx4MSA9IGR4O31kb21haW5baTBdID0gbmljZS5mbG9vcih4MCk7ZG9tYWluW2kxXSA9IG5pY2UuY2VpbCh4MSk7cmV0dXJuIGRvbWFpbjt9ZnVuY3Rpb24gZDNfc2NhbGVfbmljZVN0ZXAoc3RlcCl7cmV0dXJuIHN0ZXA/e2Zsb29yOmZ1bmN0aW9uIGZsb29yKHgpe3JldHVybiBNYXRoLmZsb29yKHggLyBzdGVwKSAqIHN0ZXA7fSxjZWlsOmZ1bmN0aW9uIGNlaWwoeCl7cmV0dXJuIE1hdGguY2VpbCh4IC8gc3RlcCkgKiBzdGVwO319OmQzX3NjYWxlX25pY2VJZGVudGl0eTt9dmFyIGQzX3NjYWxlX25pY2VJZGVudGl0eT17Zmxvb3I6ZDNfaWRlbnRpdHksY2VpbDpkM19pZGVudGl0eX07ZnVuY3Rpb24gZDNfc2NhbGVfcG9seWxpbmVhcihkb21haW4scmFuZ2UsdW5pbnRlcnBvbGF0ZSxpbnRlcnBvbGF0ZSl7dmFyIHU9W10saT1bXSxqPTAsaz1NYXRoLm1pbihkb21haW4ubGVuZ3RoLHJhbmdlLmxlbmd0aCkgLSAxO2lmKGRvbWFpbltrXSA8IGRvbWFpblswXSl7ZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO3JhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7fXdoaWxlKCsraiA8PSBrKSB7dS5wdXNoKHVuaW50ZXJwb2xhdGUoZG9tYWluW2ogLSAxXSxkb21haW5bal0pKTtpLnB1c2goaW50ZXJwb2xhdGUocmFuZ2VbaiAtIDFdLHJhbmdlW2pdKSk7fXJldHVybiBmdW5jdGlvbih4KXt2YXIgaj1kMy5iaXNlY3QoZG9tYWluLHgsMSxrKSAtIDE7cmV0dXJuIGlbal0odVtqXSh4KSk7fTt9ZDMuc2NhbGUubGluZWFyID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyKFswLDFdLFswLDFdLGQzX2ludGVycG9sYXRlLGZhbHNlKTt9O2Z1bmN0aW9uIGQzX3NjYWxlX2xpbmVhcihkb21haW4scmFuZ2UsaW50ZXJwb2xhdGUsY2xhbXApe3ZhciBvdXRwdXQsaW5wdXQ7ZnVuY3Rpb24gcmVzY2FsZSgpe3ZhciBsaW5lYXI9TWF0aC5taW4oZG9tYWluLmxlbmd0aCxyYW5nZS5sZW5ndGgpID4gMj9kM19zY2FsZV9wb2x5bGluZWFyOmQzX3NjYWxlX2JpbGluZWFyLHVuaW50ZXJwb2xhdGU9Y2xhbXA/ZDNfdW5pbnRlcnBvbGF0ZUNsYW1wOmQzX3VuaW50ZXJwb2xhdGVOdW1iZXI7b3V0cHV0ID0gbGluZWFyKGRvbWFpbixyYW5nZSx1bmludGVycG9sYXRlLGludGVycG9sYXRlKTtpbnB1dCA9IGxpbmVhcihyYW5nZSxkb21haW4sdW5pbnRlcnBvbGF0ZSxkM19pbnRlcnBvbGF0ZSk7cmV0dXJuIHNjYWxlO31mdW5jdGlvbiBzY2FsZSh4KXtyZXR1cm4gb3V0cHV0KHgpO31zY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KXtyZXR1cm4gaW5wdXQoeSk7fTtzY2FsZS5kb21haW4gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZG9tYWluO2RvbWFpbiA9IHgubWFwKE51bWJlcik7cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKHgpe3JldHVybiBzY2FsZS5yYW5nZSh4KS5pbnRlcnBvbGF0ZShkM19pbnRlcnBvbGF0ZVJvdW5kKTt9O3NjYWxlLmNsYW1wID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGNsYW1wO2NsYW1wID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaW50ZXJwb2xhdGU7aW50ZXJwb2xhdGUgPSB4O3JldHVybiByZXNjYWxlKCk7fTtzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKG0pe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sbSk7fTtzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24obSxmb3JtYXQpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbixtLGZvcm1hdCk7fTtzY2FsZS5uaWNlID0gZnVuY3Rpb24obSl7ZDNfc2NhbGVfbGluZWFyTmljZShkb21haW4sbSk7cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9saW5lYXIoZG9tYWluLHJhbmdlLGludGVycG9sYXRlLGNsYW1wKTt9O3JldHVybiByZXNjYWxlKCk7fWZ1bmN0aW9uIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpe3JldHVybiBkMy5yZWJpbmQoc2NhbGUsbGluZWFyLFwicmFuZ2VcIixcInJhbmdlUm91bmRcIixcImludGVycG9sYXRlXCIsXCJjbGFtcFwiKTt9ZnVuY3Rpb24gZDNfc2NhbGVfbGluZWFyTmljZShkb21haW4sbSl7cmV0dXJuIGQzX3NjYWxlX25pY2UoZG9tYWluLGQzX3NjYWxlX25pY2VTdGVwKGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4sbSlbMl0pKTt9ZnVuY3Rpb24gZDNfc2NhbGVfbGluZWFyVGlja1JhbmdlKGRvbWFpbixtKXtpZihtID09IG51bGwpbSA9IDEwO3ZhciBleHRlbnQ9ZDNfc2NhbGVFeHRlbnQoZG9tYWluKSxzcGFuPWV4dGVudFsxXSAtIGV4dGVudFswXSxzdGVwPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coc3BhbiAvIG0pIC8gTWF0aC5MTjEwKSksZXJyPW0gLyBzcGFuICogc3RlcDtpZihlcnIgPD0gLjE1KXN0ZXAgKj0gMTA7ZWxzZSBpZihlcnIgPD0gLjM1KXN0ZXAgKj0gNTtlbHNlIGlmKGVyciA8PSAuNzUpc3RlcCAqPSAyO2V4dGVudFswXSA9IE1hdGguY2VpbChleHRlbnRbMF0gLyBzdGVwKSAqIHN0ZXA7ZXh0ZW50WzFdID0gTWF0aC5mbG9vcihleHRlbnRbMV0gLyBzdGVwKSAqIHN0ZXAgKyBzdGVwICogLjU7ZXh0ZW50WzJdID0gc3RlcDtyZXR1cm4gZXh0ZW50O31mdW5jdGlvbiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sbSl7cmV0dXJuIGQzLnJhbmdlLmFwcGx5KGQzLGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4sbSkpO31mdW5jdGlvbiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbixtLGZvcm1hdCl7dmFyIHJhbmdlPWQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4sbSk7aWYoZm9ybWF0KXt2YXIgbWF0Y2g9ZDNfZm9ybWF0X3JlLmV4ZWMoZm9ybWF0KTttYXRjaC5zaGlmdCgpO2lmKG1hdGNoWzhdID09PSBcInNcIil7dmFyIHByZWZpeD1kMy5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoYWJzKHJhbmdlWzBdKSxhYnMocmFuZ2VbMV0pKSk7aWYoIW1hdGNoWzddKW1hdGNoWzddID0gXCIuXCIgKyBkM19zY2FsZV9saW5lYXJQcmVjaXNpb24ocHJlZml4LnNjYWxlKHJhbmdlWzJdKSk7bWF0Y2hbOF0gPSBcImZcIjtmb3JtYXQgPSBkMy5mb3JtYXQobWF0Y2guam9pbihcIlwiKSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBmb3JtYXQocHJlZml4LnNjYWxlKGQpKSArIHByZWZpeC5zeW1ib2w7fTt9aWYoIW1hdGNoWzddKW1hdGNoWzddID0gXCIuXCIgKyBkM19zY2FsZV9saW5lYXJGb3JtYXRQcmVjaXNpb24obWF0Y2hbOF0scmFuZ2UpO2Zvcm1hdCA9IG1hdGNoLmpvaW4oXCJcIik7fWVsc2Uge2Zvcm1hdCA9IFwiLC5cIiArIGQzX3NjYWxlX2xpbmVhclByZWNpc2lvbihyYW5nZVsyXSkgKyBcImZcIjt9cmV0dXJuIGQzLmZvcm1hdChmb3JtYXQpO312YXIgZDNfc2NhbGVfbGluZWFyRm9ybWF0U2lnbmlmaWNhbnQ9e3M6MSxnOjEscDoxLHI6MSxlOjF9O2Z1bmN0aW9uIGQzX3NjYWxlX2xpbmVhclByZWNpc2lvbih2YWx1ZSl7cmV0dXJuIC1NYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4xMCArIC4wMSk7fWZ1bmN0aW9uIGQzX3NjYWxlX2xpbmVhckZvcm1hdFByZWNpc2lvbih0eXBlLHJhbmdlKXt2YXIgcD1kM19zY2FsZV9saW5lYXJQcmVjaXNpb24ocmFuZ2VbMl0pO3JldHVybiB0eXBlIGluIGQzX3NjYWxlX2xpbmVhckZvcm1hdFNpZ25pZmljYW50P01hdGguYWJzKHAgLSBkM19zY2FsZV9saW5lYXJQcmVjaXNpb24oTWF0aC5tYXgoYWJzKHJhbmdlWzBdKSxhYnMocmFuZ2VbMV0pKSkpICsgKyh0eXBlICE9PSBcImVcIik6cCAtICh0eXBlID09PSBcIiVcIikgKiAyO31kMy5zY2FsZS5sb2cgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9sb2coZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCx0cnVlLFsxLDEwXSk7fTtmdW5jdGlvbiBkM19zY2FsZV9sb2cobGluZWFyLGJhc2UscG9zaXRpdmUsZG9tYWluKXtmdW5jdGlvbiBsb2coeCl7cmV0dXJuIChwb3NpdGl2ZT9NYXRoLmxvZyh4IDwgMD8wOngpOi1NYXRoLmxvZyh4ID4gMD8wOi14KSkgLyBNYXRoLmxvZyhiYXNlKTt9ZnVuY3Rpb24gcG93KHgpe3JldHVybiBwb3NpdGl2ZT9NYXRoLnBvdyhiYXNlLHgpOi1NYXRoLnBvdyhiYXNlLC14KTt9ZnVuY3Rpb24gc2NhbGUoeCl7cmV0dXJuIGxpbmVhcihsb2coeCkpO31zY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih4KXtyZXR1cm4gcG93KGxpbmVhci5pbnZlcnQoeCkpO307c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRvbWFpbjtwb3NpdGl2ZSA9IHhbMF0gPj0gMDtsaW5lYXIuZG9tYWluKChkb21haW4gPSB4Lm1hcChOdW1iZXIpKS5tYXAobG9nKSk7cmV0dXJuIHNjYWxlO307c2NhbGUuYmFzZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBiYXNlO2Jhc2UgPSArXztsaW5lYXIuZG9tYWluKGRvbWFpbi5tYXAobG9nKSk7cmV0dXJuIHNjYWxlO307c2NhbGUubmljZSA9IGZ1bmN0aW9uKCl7dmFyIG5pY2VkPWQzX3NjYWxlX25pY2UoZG9tYWluLm1hcChsb2cpLHBvc2l0aXZlP01hdGg6ZDNfc2NhbGVfbG9nTmljZU5lZ2F0aXZlKTtsaW5lYXIuZG9tYWluKG5pY2VkKTtkb21haW4gPSBuaWNlZC5tYXAocG93KTtyZXR1cm4gc2NhbGU7fTtzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKCl7dmFyIGV4dGVudD1kM19zY2FsZUV4dGVudChkb21haW4pLHRpY2tzPVtdLHU9ZXh0ZW50WzBdLHY9ZXh0ZW50WzFdLGk9TWF0aC5mbG9vcihsb2codSkpLGo9TWF0aC5jZWlsKGxvZyh2KSksbj1iYXNlICUgMT8yOmJhc2U7aWYoaXNGaW5pdGUoaiAtIGkpKXtpZihwb3NpdGl2ZSl7Zm9yKDtpIDwgajtpKyspIGZvcih2YXIgaz0xO2sgPCBuO2srKykgdGlja3MucHVzaChwb3coaSkgKiBrKTt0aWNrcy5wdXNoKHBvdyhpKSk7fWVsc2Uge3RpY2tzLnB1c2gocG93KGkpKTtmb3IoO2krKyA8IGo7KSBmb3IodmFyIGs9biAtIDE7ayA+IDA7ay0tKSB0aWNrcy5wdXNoKHBvdyhpKSAqIGspO31mb3IoaSA9IDA7dGlja3NbaV0gPCB1O2krKykge31mb3IoaiA9IHRpY2tzLmxlbmd0aDt0aWNrc1tqIC0gMV0gPiB2O2otLSkge310aWNrcyA9IHRpY2tzLnNsaWNlKGksaik7fXJldHVybiB0aWNrczt9O3NjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihuLGZvcm1hdCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQzX3NjYWxlX2xvZ0Zvcm1hdDtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilmb3JtYXQgPSBkM19zY2FsZV9sb2dGb3JtYXQ7ZWxzZSBpZih0eXBlb2YgZm9ybWF0ICE9PSBcImZ1bmN0aW9uXCIpZm9ybWF0ID0gZDMuZm9ybWF0KGZvcm1hdCk7dmFyIGs9TWF0aC5tYXgoLjEsbiAvIHNjYWxlLnRpY2tzKCkubGVuZ3RoKSxmPXBvc2l0aXZlPyhlID0gMWUtMTIsTWF0aC5jZWlsKTooZSA9IC0xZS0xMixNYXRoLmZsb29yKSxlO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZCAvIHBvdyhmKGxvZyhkKSArIGUpKSA8PSBrP2Zvcm1hdChkKTpcIlwiO307fTtzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfbG9nKGxpbmVhci5jb3B5KCksYmFzZSxwb3NpdGl2ZSxkb21haW4pO307cmV0dXJuIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpO312YXIgZDNfc2NhbGVfbG9nRm9ybWF0PWQzLmZvcm1hdChcIi4wZVwiKSxkM19zY2FsZV9sb2dOaWNlTmVnYXRpdmU9e2Zsb29yOmZ1bmN0aW9uIGZsb29yKHgpe3JldHVybiAtTWF0aC5jZWlsKC14KTt9LGNlaWw6ZnVuY3Rpb24gY2VpbCh4KXtyZXR1cm4gLU1hdGguZmxvb3IoLXgpO319O2QzLnNjYWxlLnBvdyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NjYWxlX3BvdyhkMy5zY2FsZS5saW5lYXIoKSwxLFswLDFdKTt9O2Z1bmN0aW9uIGQzX3NjYWxlX3BvdyhsaW5lYXIsZXhwb25lbnQsZG9tYWluKXt2YXIgcG93cD1kM19zY2FsZV9wb3dQb3coZXhwb25lbnQpLHBvd2I9ZDNfc2NhbGVfcG93UG93KDEgLyBleHBvbmVudCk7ZnVuY3Rpb24gc2NhbGUoeCl7cmV0dXJuIGxpbmVhcihwb3dwKHgpKTt9c2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeCl7cmV0dXJuIHBvd2IobGluZWFyLmludmVydCh4KSk7fTtzY2FsZS5kb21haW4gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZG9tYWluO2xpbmVhci5kb21haW4oKGRvbWFpbiA9IHgubWFwKE51bWJlcikpLm1hcChwb3dwKSk7cmV0dXJuIHNjYWxlO307c2NhbGUudGlja3MgPSBmdW5jdGlvbihtKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja3MoZG9tYWluLG0pO307c2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKG0sZm9ybWF0KXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja0Zvcm1hdChkb21haW4sbSxmb3JtYXQpO307c2NhbGUubmljZSA9IGZ1bmN0aW9uKG0pe3JldHVybiBzY2FsZS5kb21haW4oZDNfc2NhbGVfbGluZWFyTmljZShkb21haW4sbSkpO307c2NhbGUuZXhwb25lbnQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZXhwb25lbnQ7cG93cCA9IGQzX3NjYWxlX3Bvd1BvdyhleHBvbmVudCA9IHgpO3Bvd2IgPSBkM19zY2FsZV9wb3dQb3coMSAvIGV4cG9uZW50KTtsaW5lYXIuZG9tYWluKGRvbWFpbi5tYXAocG93cCkpO3JldHVybiBzY2FsZTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9wb3cobGluZWFyLmNvcHkoKSxleHBvbmVudCxkb21haW4pO307cmV0dXJuIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpO31mdW5jdGlvbiBkM19zY2FsZV9wb3dQb3coZSl7cmV0dXJuIGZ1bmN0aW9uKHgpe3JldHVybiB4IDwgMD8tTWF0aC5wb3coLXgsZSk6TWF0aC5wb3coeCxlKTt9O31kMy5zY2FsZS5zcXJ0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDMuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpO307ZDMuc2NhbGUub3JkaW5hbCA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NjYWxlX29yZGluYWwoW10se3Q6XCJyYW5nZVwiLGE6W1tdXX0pO307ZnVuY3Rpb24gZDNfc2NhbGVfb3JkaW5hbChkb21haW4scmFuZ2VyKXt2YXIgaW5kZXgscmFuZ2UscmFuZ2VCYW5kO2Z1bmN0aW9uIHNjYWxlKHgpe3JldHVybiByYW5nZVsoKGluZGV4LmdldCh4KSB8fCAocmFuZ2VyLnQgPT09IFwicmFuZ2VcIj9pbmRleC5zZXQoeCxkb21haW4ucHVzaCh4KSk6TmFOKSkgLSAxKSAlIHJhbmdlLmxlbmd0aF07fWZ1bmN0aW9uIHN0ZXBzKHN0YXJ0LHN0ZXApe3JldHVybiBkMy5yYW5nZShkb21haW4ubGVuZ3RoKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7fSk7fXNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkb21haW47ZG9tYWluID0gW107aW5kZXggPSBuZXcgZDNfTWFwKCk7dmFyIGk9LTEsbj14Lmxlbmd0aCx4aTt3aGlsZSgrK2kgPCBuKSBpZighaW5kZXguaGFzKHhpID0geFtpXSkpaW5kZXguc2V0KHhpLGRvbWFpbi5wdXNoKHhpKSk7cmV0dXJuIHNjYWxlW3Jhbmdlci50XS5hcHBseShzY2FsZSxyYW5nZXIuYSk7fTtzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByYW5nZTtyYW5nZSA9IHg7cmFuZ2VCYW5kID0gMDtyYW5nZXIgPSB7dDpcInJhbmdlXCIsYTphcmd1bWVudHN9O3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlUG9pbnRzID0gZnVuY3Rpb24oeCxwYWRkaW5nKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilwYWRkaW5nID0gMDt2YXIgc3RhcnQ9eFswXSxzdG9wPXhbMV0sc3RlcD1kb21haW4ubGVuZ3RoIDwgMj8oc3RhcnQgPSAoc3RhcnQgKyBzdG9wKSAvIDIsMCk6KHN0b3AgLSBzdGFydCkgLyAoZG9tYWluLmxlbmd0aCAtIDEgKyBwYWRkaW5nKTtyYW5nZSA9IHN0ZXBzKHN0YXJ0ICsgc3RlcCAqIHBhZGRpbmcgLyAyLHN0ZXApO3JhbmdlQmFuZCA9IDA7cmFuZ2VyID0ge3Q6XCJyYW5nZVBvaW50c1wiLGE6YXJndW1lbnRzfTtyZXR1cm4gc2NhbGU7fTtzY2FsZS5yYW5nZVJvdW5kUG9pbnRzID0gZnVuY3Rpb24oeCxwYWRkaW5nKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilwYWRkaW5nID0gMDt2YXIgc3RhcnQ9eFswXSxzdG9wPXhbMV0sc3RlcD1kb21haW4ubGVuZ3RoIDwgMj8oc3RhcnQgPSBzdG9wID0gTWF0aC5yb3VuZCgoc3RhcnQgKyBzdG9wKSAvIDIpLDApOihzdG9wIC0gc3RhcnQpIC8gKGRvbWFpbi5sZW5ndGggLSAxICsgcGFkZGluZykgfCAwO3JhbmdlID0gc3RlcHMoc3RhcnQgKyBNYXRoLnJvdW5kKHN0ZXAgKiBwYWRkaW5nIC8gMiArIChzdG9wIC0gc3RhcnQgLSAoZG9tYWluLmxlbmd0aCAtIDEgKyBwYWRkaW5nKSAqIHN0ZXApIC8gMiksc3RlcCk7cmFuZ2VCYW5kID0gMDtyYW5nZXIgPSB7dDpcInJhbmdlUm91bmRQb2ludHNcIixhOmFyZ3VtZW50c307cmV0dXJuIHNjYWxlO307c2NhbGUucmFuZ2VCYW5kcyA9IGZ1bmN0aW9uKHgscGFkZGluZyxvdXRlclBhZGRpbmcpe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAyKXBhZGRpbmcgPSAwO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKW91dGVyUGFkZGluZyA9IHBhZGRpbmc7dmFyIHJldmVyc2U9eFsxXSA8IHhbMF0sc3RhcnQ9eFtyZXZlcnNlIC0gMF0sc3RvcD14WzEgLSByZXZlcnNlXSxzdGVwPShzdG9wIC0gc3RhcnQpIC8gKGRvbWFpbi5sZW5ndGggLSBwYWRkaW5nICsgMiAqIG91dGVyUGFkZGluZyk7cmFuZ2UgPSBzdGVwcyhzdGFydCArIHN0ZXAgKiBvdXRlclBhZGRpbmcsc3RlcCk7aWYocmV2ZXJzZSlyYW5nZS5yZXZlcnNlKCk7cmFuZ2VCYW5kID0gc3RlcCAqICgxIC0gcGFkZGluZyk7cmFuZ2VyID0ge3Q6XCJyYW5nZUJhbmRzXCIsYTphcmd1bWVudHN9O3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlUm91bmRCYW5kcyA9IGZ1bmN0aW9uKHgscGFkZGluZyxvdXRlclBhZGRpbmcpe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAyKXBhZGRpbmcgPSAwO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKW91dGVyUGFkZGluZyA9IHBhZGRpbmc7dmFyIHJldmVyc2U9eFsxXSA8IHhbMF0sc3RhcnQ9eFtyZXZlcnNlIC0gMF0sc3RvcD14WzEgLSByZXZlcnNlXSxzdGVwPU1hdGguZmxvb3IoKHN0b3AgLSBzdGFydCkgLyAoZG9tYWluLmxlbmd0aCAtIHBhZGRpbmcgKyAyICogb3V0ZXJQYWRkaW5nKSk7cmFuZ2UgPSBzdGVwcyhzdGFydCArIE1hdGgucm91bmQoKHN0b3AgLSBzdGFydCAtIChkb21haW4ubGVuZ3RoIC0gcGFkZGluZykgKiBzdGVwKSAvIDIpLHN0ZXApO2lmKHJldmVyc2UpcmFuZ2UucmV2ZXJzZSgpO3JhbmdlQmFuZCA9IE1hdGgucm91bmQoc3RlcCAqICgxIC0gcGFkZGluZykpO3JhbmdlciA9IHt0OlwicmFuZ2VSb3VuZEJhbmRzXCIsYTphcmd1bWVudHN9O3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlQmFuZCA9IGZ1bmN0aW9uKCl7cmV0dXJuIHJhbmdlQmFuZDt9O3NjYWxlLnJhbmdlRXh0ZW50ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVFeHRlbnQocmFuZ2VyLmFbMF0pO307c2NhbGUuY29weSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NjYWxlX29yZGluYWwoZG9tYWluLHJhbmdlcik7fTtyZXR1cm4gc2NhbGUuZG9tYWluKGRvbWFpbik7fWQzLnNjYWxlLmNhdGVnb3J5MTAgPSBmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkxMCk7fTtkMy5zY2FsZS5jYXRlZ29yeTIwID0gZnVuY3Rpb24oKXtyZXR1cm4gZDMuc2NhbGUub3JkaW5hbCgpLnJhbmdlKGQzX2NhdGVnb3J5MjApO307ZDMuc2NhbGUuY2F0ZWdvcnkyMGIgPSBmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkyMGIpO307ZDMuc2NhbGUuY2F0ZWdvcnkyMGMgPSBmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkyMGMpO307dmFyIGQzX2NhdGVnb3J5MTA9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoZDNfcmdiU3RyaW5nKTt2YXIgZDNfY2F0ZWdvcnkyMD1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChkM19yZ2JTdHJpbmcpO3ZhciBkM19jYXRlZ29yeTIwYj1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoZDNfcmdiU3RyaW5nKTt2YXIgZDNfY2F0ZWdvcnkyMGM9WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChkM19yZ2JTdHJpbmcpO2QzLnNjYWxlLnF1YW50aWxlID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfcXVhbnRpbGUoW10sW10pO307ZnVuY3Rpb24gZDNfc2NhbGVfcXVhbnRpbGUoZG9tYWluLHJhbmdlKXt2YXIgdGhyZXNob2xkcztmdW5jdGlvbiByZXNjYWxlKCl7dmFyIGs9MCxxPXJhbmdlLmxlbmd0aDt0aHJlc2hvbGRzID0gW107d2hpbGUoKytrIDwgcSkgdGhyZXNob2xkc1trIC0gMV0gPSBkMy5xdWFudGlsZShkb21haW4sayAvIHEpO3JldHVybiBzY2FsZTt9ZnVuY3Rpb24gc2NhbGUoeCl7aWYoIWlzTmFOKHggPSAreCkpcmV0dXJuIHJhbmdlW2QzLmJpc2VjdCh0aHJlc2hvbGRzLHgpXTt9c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRvbWFpbjtkb21haW4gPSB4Lm1hcChkM19udW1iZXIpLmZpbHRlcihkM19udW1lcmljKS5zb3J0KGQzX2FzY2VuZGluZyk7cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUucXVhbnRpbGVzID0gZnVuY3Rpb24oKXtyZXR1cm4gdGhyZXNob2xkczt9O3NjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9uKHkpe3kgPSByYW5nZS5pbmRleE9mKHkpO3JldHVybiB5IDwgMD9bTmFOLE5hTl06W3kgPiAwP3RocmVzaG9sZHNbeSAtIDFdOmRvbWFpblswXSx5IDwgdGhyZXNob2xkcy5sZW5ndGg/dGhyZXNob2xkc1t5XTpkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdXTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9xdWFudGlsZShkb21haW4scmFuZ2UpO307cmV0dXJuIHJlc2NhbGUoKTt9ZDMuc2NhbGUucXVhbnRpemUgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9xdWFudGl6ZSgwLDEsWzAsMV0pO307ZnVuY3Rpb24gZDNfc2NhbGVfcXVhbnRpemUoeDAseDEscmFuZ2Upe3ZhciBreCxpO2Z1bmN0aW9uIHNjYWxlKHgpe3JldHVybiByYW5nZVtNYXRoLm1heCgwLE1hdGgubWluKGksTWF0aC5mbG9vcihreCAqICh4IC0geDApKSkpXTt9ZnVuY3Rpb24gcmVzY2FsZSgpe2t4ID0gcmFuZ2UubGVuZ3RoIC8gKHgxIC0geDApO2kgPSByYW5nZS5sZW5ndGggLSAxO3JldHVybiBzY2FsZTt9c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFt4MCx4MV07eDAgPSAreFswXTt4MSA9ICt4W3gubGVuZ3RoIC0gMV07cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUuaW52ZXJ0RXh0ZW50ID0gZnVuY3Rpb24oeSl7eSA9IHJhbmdlLmluZGV4T2YoeSk7eSA9IHkgPCAwP05hTjp5IC8ga3ggKyB4MDtyZXR1cm4gW3kseSArIDEgLyBreF07fTtzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfcXVhbnRpemUoeDAseDEscmFuZ2UpO307cmV0dXJuIHJlc2NhbGUoKTt9ZDMuc2NhbGUudGhyZXNob2xkID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfdGhyZXNob2xkKFsuNV0sWzAsMV0pO307ZnVuY3Rpb24gZDNfc2NhbGVfdGhyZXNob2xkKGRvbWFpbixyYW5nZSl7ZnVuY3Rpb24gc2NhbGUoeCl7aWYoeCA8PSB4KXJldHVybiByYW5nZVtkMy5iaXNlY3QoZG9tYWluLHgpXTt9c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRvbWFpbjtkb21haW4gPSBfO3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0gXztyZXR1cm4gc2NhbGU7fTtzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KXt5ID0gcmFuZ2UuaW5kZXhPZih5KTtyZXR1cm4gW2RvbWFpblt5IC0gMV0sZG9tYWluW3ldXTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV90aHJlc2hvbGQoZG9tYWluLHJhbmdlKTt9O3JldHVybiBzY2FsZTt9ZDMuc2NhbGUuaWRlbnRpdHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9pZGVudGl0eShbMCwxXSk7fTtmdW5jdGlvbiBkM19zY2FsZV9pZGVudGl0eShkb21haW4pe2Z1bmN0aW9uIGlkZW50aXR5KHgpe3JldHVybiAreDt9aWRlbnRpdHkuaW52ZXJ0ID0gaWRlbnRpdHk7aWRlbnRpdHkuZG9tYWluID0gaWRlbnRpdHkucmFuZ2UgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZG9tYWluO2RvbWFpbiA9IHgubWFwKGlkZW50aXR5KTtyZXR1cm4gaWRlbnRpdHk7fTtpZGVudGl0eS50aWNrcyA9IGZ1bmN0aW9uKG0pe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sbSk7fTtpZGVudGl0eS50aWNrRm9ybWF0ID0gZnVuY3Rpb24obSxmb3JtYXQpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbixtLGZvcm1hdCk7fTtpZGVudGl0eS5jb3B5ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfaWRlbnRpdHkoZG9tYWluKTt9O3JldHVybiBpZGVudGl0eTt9ZDMuc3ZnID0ge307ZnVuY3Rpb24gZDNfemVybygpe3JldHVybiAwO31kMy5zdmcuYXJjID0gZnVuY3Rpb24oKXt2YXIgaW5uZXJSYWRpdXM9ZDNfc3ZnX2FyY0lubmVyUmFkaXVzLG91dGVyUmFkaXVzPWQzX3N2Z19hcmNPdXRlclJhZGl1cyxjb3JuZXJSYWRpdXM9ZDNfemVybyxwYWRSYWRpdXM9ZDNfc3ZnX2FyY0F1dG8sc3RhcnRBbmdsZT1kM19zdmdfYXJjU3RhcnRBbmdsZSxlbmRBbmdsZT1kM19zdmdfYXJjRW5kQW5nbGUscGFkQW5nbGU9ZDNfc3ZnX2FyY1BhZEFuZ2xlO2Z1bmN0aW9uIGFyYygpe3ZhciByMD1NYXRoLm1heCgwLCtpbm5lclJhZGl1cy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIxPU1hdGgubWF4KDAsK291dGVyUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYTA9c3RhcnRBbmdsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykgLSBoYWxmz4AsYTE9ZW5kQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpIC0gaGFsZs+ALGRhPU1hdGguYWJzKGExIC0gYTApLGN3PWEwID4gYTE/MDoxO2lmKHIxIDwgcjApcmMgPSByMSxyMSA9IHIwLHIwID0gcmM7aWYoZGEgPj0gz4TOtSlyZXR1cm4gY2lyY2xlU2VnbWVudChyMSxjdykgKyAocjA/Y2lyY2xlU2VnbWVudChyMCwxIC0gY3cpOlwiXCIpICsgXCJaXCI7dmFyIHJjLGNyLHJwLGFwLHAwPTAscDE9MCx4MCx5MCx4MSx5MSx4Mix5Mix4Myx5MyxwYXRoPVtdO2lmKGFwID0gKCtwYWRBbmdsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykgfHwgMCkgLyAyKXtycCA9IHBhZFJhZGl1cyA9PT0gZDNfc3ZnX2FyY0F1dG8/TWF0aC5zcXJ0KHIwICogcjAgKyByMSAqIHIxKTorcGFkUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighY3cpcDEgKj0gLTE7aWYocjEpcDEgPSBkM19hc2luKHJwIC8gcjEgKiBNYXRoLnNpbihhcCkpO2lmKHIwKXAwID0gZDNfYXNpbihycCAvIHIwICogTWF0aC5zaW4oYXApKTt9aWYocjEpe3gwID0gcjEgKiBNYXRoLmNvcyhhMCArIHAxKTt5MCA9IHIxICogTWF0aC5zaW4oYTAgKyBwMSk7eDEgPSByMSAqIE1hdGguY29zKGExIC0gcDEpO3kxID0gcjEgKiBNYXRoLnNpbihhMSAtIHAxKTt2YXIgbDE9TWF0aC5hYnMoYTEgLSBhMCAtIDIgKiBwMSkgPD0gz4A/MDoxO2lmKHAxICYmIGQzX3N2Z19hcmNTd2VlcCh4MCx5MCx4MSx5MSkgPT09IGN3IF4gbDEpe3ZhciBoMT0oYTAgKyBhMSkgLyAyO3gwID0gcjEgKiBNYXRoLmNvcyhoMSk7eTAgPSByMSAqIE1hdGguc2luKGgxKTt4MSA9IHkxID0gbnVsbDt9fWVsc2Uge3gwID0geTAgPSAwO31pZihyMCl7eDIgPSByMCAqIE1hdGguY29zKGExIC0gcDApO3kyID0gcjAgKiBNYXRoLnNpbihhMSAtIHAwKTt4MyA9IHIwICogTWF0aC5jb3MoYTAgKyBwMCk7eTMgPSByMCAqIE1hdGguc2luKGEwICsgcDApO3ZhciBsMD1NYXRoLmFicyhhMCAtIGExICsgMiAqIHAwKSA8PSDPgD8wOjE7aWYocDAgJiYgZDNfc3ZnX2FyY1N3ZWVwKHgyLHkyLHgzLHkzKSA9PT0gMSAtIGN3IF4gbDApe3ZhciBoMD0oYTAgKyBhMSkgLyAyO3gyID0gcjAgKiBNYXRoLmNvcyhoMCk7eTIgPSByMCAqIE1hdGguc2luKGgwKTt4MyA9IHkzID0gbnVsbDt9fWVsc2Uge3gyID0geTIgPSAwO31pZihkYSA+IM61ICYmIChyYyA9IE1hdGgubWluKE1hdGguYWJzKHIxIC0gcjApIC8gMiwrY29ybmVyUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpID4gLjAwMSl7Y3IgPSByMCA8IHIxIF4gY3c/MDoxO3ZhciByYzE9cmMscmMwPXJjO2lmKGRhIDwgz4Ape3ZhciBvYz14MyA9PSBudWxsP1t4Mix5Ml06eDEgPT0gbnVsbD9beDAseTBdOmQzX2dlb21fcG9seWdvbkludGVyc2VjdChbeDAseTBdLFt4Myx5M10sW3gxLHkxXSxbeDIseTJdKSxheD14MCAtIG9jWzBdLGF5PXkwIC0gb2NbMV0sYng9eDEgLSBvY1swXSxieT15MSAtIG9jWzFdLGtjPTEgLyBNYXRoLnNpbihNYXRoLmFjb3MoKGF4ICogYnggKyBheSAqIGJ5KSAvIChNYXRoLnNxcnQoYXggKiBheCArIGF5ICogYXkpICogTWF0aC5zcXJ0KGJ4ICogYnggKyBieSAqIGJ5KSkpIC8gMiksbGM9TWF0aC5zcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtyYzAgPSBNYXRoLm1pbihyYywocjAgLSBsYykgLyAoa2MgLSAxKSk7cmMxID0gTWF0aC5taW4ocmMsKHIxIC0gbGMpIC8gKGtjICsgMSkpO31pZih4MSAhPSBudWxsKXt2YXIgdDMwPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyh4MyA9PSBudWxsP1t4Mix5Ml06W3gzLHkzXSxbeDAseTBdLHIxLHJjMSxjdyksdDEyPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyhbeDEseTFdLFt4Mix5Ml0scjEscmMxLGN3KTtpZihyYyA9PT0gcmMxKXtwYXRoLnB1c2goXCJNXCIsdDMwWzBdLFwiQVwiLHJjMSxcIixcIixyYzEsXCIgMCAwLFwiLGNyLFwiIFwiLHQzMFsxXSxcIkFcIixyMSxcIixcIixyMSxcIiAwIFwiLDEgLSBjdyBeIGQzX3N2Z19hcmNTd2VlcCh0MzBbMV1bMF0sdDMwWzFdWzFdLHQxMlsxXVswXSx0MTJbMV1bMV0pLFwiLFwiLGN3LFwiIFwiLHQxMlsxXSxcIkFcIixyYzEsXCIsXCIscmMxLFwiIDAgMCxcIixjcixcIiBcIix0MTJbMF0pO31lbHNlIHtwYXRoLnB1c2goXCJNXCIsdDMwWzBdLFwiQVwiLHJjMSxcIixcIixyYzEsXCIgMCAxLFwiLGNyLFwiIFwiLHQxMlswXSk7fX1lbHNlIHtwYXRoLnB1c2goXCJNXCIseDAsXCIsXCIseTApO31pZih4MyAhPSBudWxsKXt2YXIgdDAzPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyhbeDAseTBdLFt4Myx5M10scjAsLXJjMCxjdyksdDIxPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyhbeDIseTJdLHgxID09IG51bGw/W3gwLHkwXTpbeDEseTFdLHIwLC1yYzAsY3cpO2lmKHJjID09PSByYzApe3BhdGgucHVzaChcIkxcIix0MjFbMF0sXCJBXCIscmMwLFwiLFwiLHJjMCxcIiAwIDAsXCIsY3IsXCIgXCIsdDIxWzFdLFwiQVwiLHIwLFwiLFwiLHIwLFwiIDAgXCIsY3cgXiBkM19zdmdfYXJjU3dlZXAodDIxWzFdWzBdLHQyMVsxXVsxXSx0MDNbMV1bMF0sdDAzWzFdWzFdKSxcIixcIiwxIC0gY3csXCIgXCIsdDAzWzFdLFwiQVwiLHJjMCxcIixcIixyYzAsXCIgMCAwLFwiLGNyLFwiIFwiLHQwM1swXSk7fWVsc2Uge3BhdGgucHVzaChcIkxcIix0MjFbMF0sXCJBXCIscmMwLFwiLFwiLHJjMCxcIiAwIDAsXCIsY3IsXCIgXCIsdDAzWzBdKTt9fWVsc2Uge3BhdGgucHVzaChcIkxcIix4MixcIixcIix5Mik7fX1lbHNlIHtwYXRoLnB1c2goXCJNXCIseDAsXCIsXCIseTApO2lmKHgxICE9IG51bGwpcGF0aC5wdXNoKFwiQVwiLHIxLFwiLFwiLHIxLFwiIDAgXCIsbDEsXCIsXCIsY3csXCIgXCIseDEsXCIsXCIseTEpO3BhdGgucHVzaChcIkxcIix4MixcIixcIix5Mik7aWYoeDMgIT0gbnVsbClwYXRoLnB1c2goXCJBXCIscjAsXCIsXCIscjAsXCIgMCBcIixsMCxcIixcIiwxIC0gY3csXCIgXCIseDMsXCIsXCIseTMpO31wYXRoLnB1c2goXCJaXCIpO3JldHVybiBwYXRoLmpvaW4oXCJcIik7fWZ1bmN0aW9uIGNpcmNsZVNlZ21lbnQocjEsY3cpe3JldHVybiBcIk0wLFwiICsgcjEgKyBcIkFcIiArIHIxICsgXCIsXCIgKyByMSArIFwiIDAgMSxcIiArIGN3ICsgXCIgMCxcIiArIC1yMSArIFwiQVwiICsgcjEgKyBcIixcIiArIHIxICsgXCIgMCAxLFwiICsgY3cgKyBcIiAwLFwiICsgcjE7fWFyYy5pbm5lclJhZGl1cyA9IGZ1bmN0aW9uKHYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpbm5lclJhZGl1cztpbm5lclJhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGFyYzt9O2FyYy5vdXRlclJhZGl1cyA9IGZ1bmN0aW9uKHYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvdXRlclJhZGl1cztvdXRlclJhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGFyYzt9O2FyYy5jb3JuZXJSYWRpdXMgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY29ybmVyUmFkaXVzO2Nvcm5lclJhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGFyYzt9O2FyYy5wYWRSYWRpdXMgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcGFkUmFkaXVzO3BhZFJhZGl1cyA9IHYgPT0gZDNfc3ZnX2FyY0F1dG8/ZDNfc3ZnX2FyY0F1dG86ZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc3RhcnRBbmdsZTtzdGFydEFuZ2xlID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLmVuZEFuZ2xlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGVuZEFuZ2xlO2VuZEFuZ2xlID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLnBhZEFuZ2xlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZEFuZ2xlO3BhZEFuZ2xlID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKXt2YXIgcj0oK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSArICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLGFyZ3VtZW50cykpIC8gMixhPSgrc3RhcnRBbmdsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykgKyArZW5kQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSAvIDIgLSBoYWxmz4A7cmV0dXJuIFtNYXRoLmNvcyhhKSAqIHIsTWF0aC5zaW4oYSkgKiByXTt9O3JldHVybiBhcmM7fTt2YXIgZDNfc3ZnX2FyY0F1dG89XCJhdXRvXCI7ZnVuY3Rpb24gZDNfc3ZnX2FyY0lubmVyUmFkaXVzKGQpe3JldHVybiBkLmlubmVyUmFkaXVzO31mdW5jdGlvbiBkM19zdmdfYXJjT3V0ZXJSYWRpdXMoZCl7cmV0dXJuIGQub3V0ZXJSYWRpdXM7fWZ1bmN0aW9uIGQzX3N2Z19hcmNTdGFydEFuZ2xlKGQpe3JldHVybiBkLnN0YXJ0QW5nbGU7fWZ1bmN0aW9uIGQzX3N2Z19hcmNFbmRBbmdsZShkKXtyZXR1cm4gZC5lbmRBbmdsZTt9ZnVuY3Rpb24gZDNfc3ZnX2FyY1BhZEFuZ2xlKGQpe3JldHVybiBkICYmIGQucGFkQW5nbGU7fWZ1bmN0aW9uIGQzX3N2Z19hcmNTd2VlcCh4MCx5MCx4MSx5MSl7cmV0dXJuICh4MCAtIHgxKSAqIHkwIC0gKHkwIC0geTEpICogeDAgPiAwPzA6MTt9ZnVuY3Rpb24gZDNfc3ZnX2FyY0Nvcm5lclRhbmdlbnRzKHAwLHAxLHIxLHJjLGN3KXt2YXIgeDAxPXAwWzBdIC0gcDFbMF0seTAxPXAwWzFdIC0gcDFbMV0sbG89KGN3P3JjOi1yYykgLyBNYXRoLnNxcnQoeDAxICogeDAxICsgeTAxICogeTAxKSxveD1sbyAqIHkwMSxveT0tbG8gKiB4MDEseDE9cDBbMF0gKyBveCx5MT1wMFsxXSArIG95LHgyPXAxWzBdICsgb3gseTI9cDFbMV0gKyBveSx4Mz0oeDEgKyB4MikgLyAyLHkzPSh5MSArIHkyKSAvIDIsZHg9eDIgLSB4MSxkeT15MiAtIHkxLGQyPWR4ICogZHggKyBkeSAqIGR5LHI9cjEgLSByYyxEPXgxICogeTIgLSB4MiAqIHkxLGQ9KGR5IDwgMD8tMToxKSAqIE1hdGguc3FydChNYXRoLm1heCgwLHIgKiByICogZDIgLSBEICogRCkpLGN4MD0oRCAqIGR5IC0gZHggKiBkKSAvIGQyLGN5MD0oLUQgKiBkeCAtIGR5ICogZCkgLyBkMixjeDE9KEQgKiBkeSArIGR4ICogZCkgLyBkMixjeTE9KC1EICogZHggKyBkeSAqIGQpIC8gZDIsZHgwPWN4MCAtIHgzLGR5MD1jeTAgLSB5MyxkeDE9Y3gxIC0geDMsZHkxPWN5MSAtIHkzO2lmKGR4MCAqIGR4MCArIGR5MCAqIGR5MCA+IGR4MSAqIGR4MSArIGR5MSAqIGR5MSljeDAgPSBjeDEsY3kwID0gY3kxO3JldHVybiBbW2N4MCAtIG94LGN5MCAtIG95XSxbY3gwICogcjEgLyByLGN5MCAqIHIxIC8gcl1dO31mdW5jdGlvbiBkM19zdmdfbGluZShwcm9qZWN0aW9uKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZLGRlZmluZWQ9ZDNfdHJ1ZSxpbnRlcnBvbGF0ZT1kM19zdmdfbGluZUxpbmVhcixpbnRlcnBvbGF0ZUtleT1pbnRlcnBvbGF0ZS5rZXksdGVuc2lvbj0uNztmdW5jdGlvbiBsaW5lKGRhdGEpe3ZhciBzZWdtZW50cz1bXSxwb2ludHM9W10saT0tMSxuPWRhdGEubGVuZ3RoLGQsZng9ZDNfZnVuY3Rvcih4KSxmeT1kM19mdW5jdG9yKHkpO2Z1bmN0aW9uIHNlZ21lbnQoKXtzZWdtZW50cy5wdXNoKFwiTVwiLGludGVycG9sYXRlKHByb2plY3Rpb24ocG9pbnRzKSx0ZW5zaW9uKSk7fXdoaWxlKCsraSA8IG4pIHtpZihkZWZpbmVkLmNhbGwodGhpcyxkID0gZGF0YVtpXSxpKSl7cG9pbnRzLnB1c2goWytmeC5jYWxsKHRoaXMsZCxpKSwrZnkuY2FsbCh0aGlzLGQsaSldKTt9ZWxzZSBpZihwb2ludHMubGVuZ3RoKXtzZWdtZW50KCk7cG9pbnRzID0gW107fX1pZihwb2ludHMubGVuZ3RoKXNlZ21lbnQoKTtyZXR1cm4gc2VnbWVudHMubGVuZ3RoP3NlZ21lbnRzLmpvaW4oXCJcIik6bnVsbDt9bGluZS54ID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHg7eCA9IF87cmV0dXJuIGxpbmU7fTtsaW5lLnkgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTt5ID0gXztyZXR1cm4gbGluZTt9O2xpbmUuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkZWZpbmVkO2RlZmluZWQgPSBfO3JldHVybiBsaW5lO307bGluZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpbnRlcnBvbGF0ZUtleTtpZih0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiKWludGVycG9sYXRlS2V5ID0gaW50ZXJwb2xhdGUgPSBfO2Vsc2UgaW50ZXJwb2xhdGVLZXkgPSAoaW50ZXJwb2xhdGUgPSBkM19zdmdfbGluZUludGVycG9sYXRvcnMuZ2V0KF8pIHx8IGQzX3N2Z19saW5lTGluZWFyKS5rZXk7cmV0dXJuIGxpbmU7fTtsaW5lLnRlbnNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGVuc2lvbjt0ZW5zaW9uID0gXztyZXR1cm4gbGluZTt9O3JldHVybiBsaW5lO31kMy5zdmcubGluZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3N2Z19saW5lKGQzX2lkZW50aXR5KTt9O3ZhciBkM19zdmdfbGluZUludGVycG9sYXRvcnM9ZDMubWFwKHtsaW5lYXI6ZDNfc3ZnX2xpbmVMaW5lYXIsXCJsaW5lYXItY2xvc2VkXCI6ZDNfc3ZnX2xpbmVMaW5lYXJDbG9zZWQsc3RlcDpkM19zdmdfbGluZVN0ZXAsXCJzdGVwLWJlZm9yZVwiOmQzX3N2Z19saW5lU3RlcEJlZm9yZSxcInN0ZXAtYWZ0ZXJcIjpkM19zdmdfbGluZVN0ZXBBZnRlcixiYXNpczpkM19zdmdfbGluZUJhc2lzLFwiYmFzaXMtb3BlblwiOmQzX3N2Z19saW5lQmFzaXNPcGVuLFwiYmFzaXMtY2xvc2VkXCI6ZDNfc3ZnX2xpbmVCYXNpc0Nsb3NlZCxidW5kbGU6ZDNfc3ZnX2xpbmVCdW5kbGUsY2FyZGluYWw6ZDNfc3ZnX2xpbmVDYXJkaW5hbCxcImNhcmRpbmFsLW9wZW5cIjpkM19zdmdfbGluZUNhcmRpbmFsT3BlbixcImNhcmRpbmFsLWNsb3NlZFwiOmQzX3N2Z19saW5lQ2FyZGluYWxDbG9zZWQsbW9ub3RvbmU6ZDNfc3ZnX2xpbmVNb25vdG9uZX0pO2QzX3N2Z19saW5lSW50ZXJwb2xhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGtleSx2YWx1ZSl7dmFsdWUua2V5ID0ga2V5O3ZhbHVlLmNsb3NlZCA9IC8tY2xvc2VkJC8udGVzdChrZXkpO30pO2Z1bmN0aW9uIGQzX3N2Z19saW5lTGluZWFyKHBvaW50cyl7cmV0dXJuIHBvaW50cy5sZW5ndGggPiAxP3BvaW50cy5qb2luKFwiTFwiKTpwb2ludHMgKyBcIlpcIjt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVMaW5lYXJDbG9zZWQocG9pbnRzKXtyZXR1cm4gcG9pbnRzLmpvaW4oXCJMXCIpICsgXCJaXCI7fWZ1bmN0aW9uIGQzX3N2Z19saW5lU3RlcChwb2ludHMpe3ZhciBpPTAsbj1wb2ludHMubGVuZ3RoLHA9cG9pbnRzWzBdLHBhdGg9W3BbMF0sXCIsXCIscFsxXV07d2hpbGUoKytpIDwgbikgcGF0aC5wdXNoKFwiSFwiLChwWzBdICsgKHAgPSBwb2ludHNbaV0pWzBdKSAvIDIsXCJWXCIscFsxXSk7aWYobiA+IDEpcGF0aC5wdXNoKFwiSFwiLHBbMF0pO3JldHVybiBwYXRoLmpvaW4oXCJcIik7fWZ1bmN0aW9uIGQzX3N2Z19saW5lU3RlcEJlZm9yZShwb2ludHMpe3ZhciBpPTAsbj1wb2ludHMubGVuZ3RoLHA9cG9pbnRzWzBdLHBhdGg9W3BbMF0sXCIsXCIscFsxXV07d2hpbGUoKytpIDwgbikgcGF0aC5wdXNoKFwiVlwiLChwID0gcG9pbnRzW2ldKVsxXSxcIkhcIixwWzBdKTtyZXR1cm4gcGF0aC5qb2luKFwiXCIpO31mdW5jdGlvbiBkM19zdmdfbGluZVN0ZXBBZnRlcihwb2ludHMpe3ZhciBpPTAsbj1wb2ludHMubGVuZ3RoLHA9cG9pbnRzWzBdLHBhdGg9W3BbMF0sXCIsXCIscFsxXV07d2hpbGUoKytpIDwgbikgcGF0aC5wdXNoKFwiSFwiLChwID0gcG9pbnRzW2ldKVswXSxcIlZcIixwWzFdKTtyZXR1cm4gcGF0aC5qb2luKFwiXCIpO31mdW5jdGlvbiBkM19zdmdfbGluZUNhcmRpbmFsT3Blbihwb2ludHMsdGVuc2lvbil7cmV0dXJuIHBvaW50cy5sZW5ndGggPCA0P2QzX3N2Z19saW5lTGluZWFyKHBvaW50cyk6cG9pbnRzWzFdICsgZDNfc3ZnX2xpbmVIZXJtaXRlKHBvaW50cy5zbGljZSgxLC0xKSxkM19zdmdfbGluZUNhcmRpbmFsVGFuZ2VudHMocG9pbnRzLHRlbnNpb24pKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVDYXJkaW5hbENsb3NlZChwb2ludHMsdGVuc2lvbil7cmV0dXJuIHBvaW50cy5sZW5ndGggPCAzP2QzX3N2Z19saW5lTGluZWFyQ2xvc2VkKHBvaW50cyk6cG9pbnRzWzBdICsgZDNfc3ZnX2xpbmVIZXJtaXRlKChwb2ludHMucHVzaChwb2ludHNbMF0pLHBvaW50cyksZDNfc3ZnX2xpbmVDYXJkaW5hbFRhbmdlbnRzKFtwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdXS5jb25jYXQocG9pbnRzLFtwb2ludHNbMV1dKSx0ZW5zaW9uKSk7fWZ1bmN0aW9uIGQzX3N2Z19saW5lQ2FyZGluYWwocG9pbnRzLHRlbnNpb24pe3JldHVybiBwb2ludHMubGVuZ3RoIDwgMz9kM19zdmdfbGluZUxpbmVhcihwb2ludHMpOnBvaW50c1swXSArIGQzX3N2Z19saW5lSGVybWl0ZShwb2ludHMsZDNfc3ZnX2xpbmVDYXJkaW5hbFRhbmdlbnRzKHBvaW50cyx0ZW5zaW9uKSk7fWZ1bmN0aW9uIGQzX3N2Z19saW5lSGVybWl0ZShwb2ludHMsdGFuZ2VudHMpe2lmKHRhbmdlbnRzLmxlbmd0aCA8IDEgfHwgcG9pbnRzLmxlbmd0aCAhPSB0YW5nZW50cy5sZW5ndGggJiYgcG9pbnRzLmxlbmd0aCAhPSB0YW5nZW50cy5sZW5ndGggKyAyKXtyZXR1cm4gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKTt9dmFyIHF1YWQ9cG9pbnRzLmxlbmd0aCAhPSB0YW5nZW50cy5sZW5ndGgscGF0aD1cIlwiLHAwPXBvaW50c1swXSxwPXBvaW50c1sxXSx0MD10YW5nZW50c1swXSx0PXQwLHBpPTE7aWYocXVhZCl7cGF0aCArPSBcIlFcIiArIChwWzBdIC0gdDBbMF0gKiAyIC8gMykgKyBcIixcIiArIChwWzFdIC0gdDBbMV0gKiAyIC8gMykgKyBcIixcIiArIHBbMF0gKyBcIixcIiArIHBbMV07cDAgPSBwb2ludHNbMV07cGkgPSAyO31pZih0YW5nZW50cy5sZW5ndGggPiAxKXt0ID0gdGFuZ2VudHNbMV07cCA9IHBvaW50c1twaV07cGkrKztwYXRoICs9IFwiQ1wiICsgKHAwWzBdICsgdDBbMF0pICsgXCIsXCIgKyAocDBbMV0gKyB0MFsxXSkgKyBcIixcIiArIChwWzBdIC0gdFswXSkgKyBcIixcIiArIChwWzFdIC0gdFsxXSkgKyBcIixcIiArIHBbMF0gKyBcIixcIiArIHBbMV07Zm9yKHZhciBpPTI7aSA8IHRhbmdlbnRzLmxlbmd0aDtpKysscGkrKykge3AgPSBwb2ludHNbcGldO3QgPSB0YW5nZW50c1tpXTtwYXRoICs9IFwiU1wiICsgKHBbMF0gLSB0WzBdKSArIFwiLFwiICsgKHBbMV0gLSB0WzFdKSArIFwiLFwiICsgcFswXSArIFwiLFwiICsgcFsxXTt9fWlmKHF1YWQpe3ZhciBscD1wb2ludHNbcGldO3BhdGggKz0gXCJRXCIgKyAocFswXSArIHRbMF0gKiAyIC8gMykgKyBcIixcIiArIChwWzFdICsgdFsxXSAqIDIgLyAzKSArIFwiLFwiICsgbHBbMF0gKyBcIixcIiArIGxwWzFdO31yZXR1cm4gcGF0aDt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVDYXJkaW5hbFRhbmdlbnRzKHBvaW50cyx0ZW5zaW9uKXt2YXIgdGFuZ2VudHM9W10sYT0oMSAtIHRlbnNpb24pIC8gMixwMCxwMT1wb2ludHNbMF0scDI9cG9pbnRzWzFdLGk9MSxuPXBvaW50cy5sZW5ndGg7d2hpbGUoKytpIDwgbikge3AwID0gcDE7cDEgPSBwMjtwMiA9IHBvaW50c1tpXTt0YW5nZW50cy5wdXNoKFthICogKHAyWzBdIC0gcDBbMF0pLGEgKiAocDJbMV0gLSBwMFsxXSldKTt9cmV0dXJuIHRhbmdlbnRzO31mdW5jdGlvbiBkM19zdmdfbGluZUJhc2lzKHBvaW50cyl7aWYocG9pbnRzLmxlbmd0aCA8IDMpcmV0dXJuIGQzX3N2Z19saW5lTGluZWFyKHBvaW50cyk7dmFyIGk9MSxuPXBvaW50cy5sZW5ndGgscGk9cG9pbnRzWzBdLHgwPXBpWzBdLHkwPXBpWzFdLHB4PVt4MCx4MCx4MCwocGkgPSBwb2ludHNbMV0pWzBdXSxweT1beTAseTAseTAscGlbMV1dLHBhdGg9W3gwLFwiLFwiLHkwLFwiTFwiLGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMyxweCksXCIsXCIsZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLHB5KV07cG9pbnRzLnB1c2gocG9pbnRzW24gLSAxXSk7d2hpbGUoKytpIDw9IG4pIHtwaSA9IHBvaW50c1tpXTtweC5zaGlmdCgpO3B4LnB1c2gocGlbMF0pO3B5LnNoaWZ0KCk7cHkucHVzaChwaVsxXSk7ZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLHB4LHB5KTt9cG9pbnRzLnBvcCgpO3BhdGgucHVzaChcIkxcIixwaSk7cmV0dXJuIHBhdGguam9pbihcIlwiKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVCYXNpc09wZW4ocG9pbnRzKXtpZihwb2ludHMubGVuZ3RoIDwgNClyZXR1cm4gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKTt2YXIgcGF0aD1bXSxpPS0xLG49cG9pbnRzLmxlbmd0aCxwaSxweD1bMF0scHk9WzBdO3doaWxlKCsraSA8IDMpIHtwaSA9IHBvaW50c1tpXTtweC5wdXNoKHBpWzBdKTtweS5wdXNoKHBpWzFdKTt9cGF0aC5wdXNoKGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMyxweCkgKyBcIixcIiArIGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMyxweSkpOy0taTt3aGlsZSgrK2kgPCBuKSB7cGkgPSBwb2ludHNbaV07cHguc2hpZnQoKTtweC5wdXNoKHBpWzBdKTtweS5zaGlmdCgpO3B5LnB1c2gocGlbMV0pO2QzX3N2Z19saW5lQmFzaXNCZXppZXIocGF0aCxweCxweSk7fXJldHVybiBwYXRoLmpvaW4oXCJcIik7fWZ1bmN0aW9uIGQzX3N2Z19saW5lQmFzaXNDbG9zZWQocG9pbnRzKXt2YXIgcGF0aCxpPS0xLG49cG9pbnRzLmxlbmd0aCxtPW4gKyA0LHBpLHB4PVtdLHB5PVtdO3doaWxlKCsraSA8IDQpIHtwaSA9IHBvaW50c1tpICUgbl07cHgucHVzaChwaVswXSk7cHkucHVzaChwaVsxXSk7fXBhdGggPSBbZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLHB4KSxcIixcIixkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjMscHkpXTstLWk7d2hpbGUoKytpIDwgbSkge3BpID0gcG9pbnRzW2kgJSBuXTtweC5zaGlmdCgpO3B4LnB1c2gocGlbMF0pO3B5LnNoaWZ0KCk7cHkucHVzaChwaVsxXSk7ZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLHB4LHB5KTt9cmV0dXJuIHBhdGguam9pbihcIlwiKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVCdW5kbGUocG9pbnRzLHRlbnNpb24pe3ZhciBuPXBvaW50cy5sZW5ndGggLSAxO2lmKG4pe3ZhciB4MD1wb2ludHNbMF1bMF0seTA9cG9pbnRzWzBdWzFdLGR4PXBvaW50c1tuXVswXSAtIHgwLGR5PXBvaW50c1tuXVsxXSAtIHkwLGk9LTEscCx0O3doaWxlKCsraSA8PSBuKSB7cCA9IHBvaW50c1tpXTt0ID0gaSAvIG47cFswXSA9IHRlbnNpb24gKiBwWzBdICsgKDEgLSB0ZW5zaW9uKSAqICh4MCArIHQgKiBkeCk7cFsxXSA9IHRlbnNpb24gKiBwWzFdICsgKDEgLSB0ZW5zaW9uKSAqICh5MCArIHQgKiBkeSk7fX1yZXR1cm4gZDNfc3ZnX2xpbmVCYXNpcyhwb2ludHMpO31mdW5jdGlvbiBkM19zdmdfbGluZURvdDQoYSxiKXtyZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107fXZhciBkM19zdmdfbGluZUJhc2lzQmV6aWVyMT1bMCwyIC8gMywxIC8gMywwXSxkM19zdmdfbGluZUJhc2lzQmV6aWVyMj1bMCwxIC8gMywyIC8gMywwXSxkM19zdmdfbGluZUJhc2lzQmV6aWVyMz1bMCwxIC8gNiwyIC8gMywxIC8gNl07ZnVuY3Rpb24gZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLHgseSl7cGF0aC5wdXNoKFwiQ1wiLGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMSx4KSxcIixcIixkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjEseSksXCIsXCIsZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIyLHgpLFwiLFwiLGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMix5KSxcIixcIixkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjMseCksXCIsXCIsZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLHkpKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVTbG9wZShwMCxwMSl7cmV0dXJuIChwMVsxXSAtIHAwWzFdKSAvIChwMVswXSAtIHAwWzBdKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVGaW5pdGVEaWZmZXJlbmNlcyhwb2ludHMpe3ZhciBpPTAsaj1wb2ludHMubGVuZ3RoIC0gMSxtPVtdLHAwPXBvaW50c1swXSxwMT1wb2ludHNbMV0sZD1tWzBdID0gZDNfc3ZnX2xpbmVTbG9wZShwMCxwMSk7d2hpbGUoKytpIDwgaikge21baV0gPSAoZCArIChkID0gZDNfc3ZnX2xpbmVTbG9wZShwMCA9IHAxLHAxID0gcG9pbnRzW2kgKyAxXSkpKSAvIDI7fW1baV0gPSBkO3JldHVybiBtO31mdW5jdGlvbiBkM19zdmdfbGluZU1vbm90b25lVGFuZ2VudHMocG9pbnRzKXt2YXIgdGFuZ2VudHM9W10sZCxhLGIscyxtPWQzX3N2Z19saW5lRmluaXRlRGlmZmVyZW5jZXMocG9pbnRzKSxpPS0xLGo9cG9pbnRzLmxlbmd0aCAtIDE7d2hpbGUoKytpIDwgaikge2QgPSBkM19zdmdfbGluZVNsb3BlKHBvaW50c1tpXSxwb2ludHNbaSArIDFdKTtpZihhYnMoZCkgPCDOtSl7bVtpXSA9IG1baSArIDFdID0gMDt9ZWxzZSB7YSA9IG1baV0gLyBkO2IgPSBtW2kgKyAxXSAvIGQ7cyA9IGEgKiBhICsgYiAqIGI7aWYocyA+IDkpe3MgPSBkICogMyAvIE1hdGguc3FydChzKTttW2ldID0gcyAqIGE7bVtpICsgMV0gPSBzICogYjt9fX1pID0gLTE7d2hpbGUoKytpIDw9IGopIHtzID0gKHBvaW50c1tNYXRoLm1pbihqLGkgKyAxKV1bMF0gLSBwb2ludHNbTWF0aC5tYXgoMCxpIC0gMSldWzBdKSAvICg2ICogKDEgKyBtW2ldICogbVtpXSkpO3RhbmdlbnRzLnB1c2goW3MgfHwgMCxtW2ldICogcyB8fCAwXSk7fXJldHVybiB0YW5nZW50czt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVNb25vdG9uZShwb2ludHMpe3JldHVybiBwb2ludHMubGVuZ3RoIDwgMz9kM19zdmdfbGluZUxpbmVhcihwb2ludHMpOnBvaW50c1swXSArIGQzX3N2Z19saW5lSGVybWl0ZShwb2ludHMsZDNfc3ZnX2xpbmVNb25vdG9uZVRhbmdlbnRzKHBvaW50cykpO31kMy5zdmcubGluZS5yYWRpYWwgPSBmdW5jdGlvbigpe3ZhciBsaW5lPWQzX3N2Z19saW5lKGQzX3N2Z19saW5lUmFkaWFsKTtsaW5lLnJhZGl1cyA9IGxpbmUueCxkZWxldGUgbGluZS54O2xpbmUuYW5nbGUgPSBsaW5lLnksZGVsZXRlIGxpbmUueTtyZXR1cm4gbGluZTt9O2Z1bmN0aW9uIGQzX3N2Z19saW5lUmFkaWFsKHBvaW50cyl7dmFyIHBvaW50LGk9LTEsbj1wb2ludHMubGVuZ3RoLHIsYTt3aGlsZSgrK2kgPCBuKSB7cG9pbnQgPSBwb2ludHNbaV07ciA9IHBvaW50WzBdO2EgPSBwb2ludFsxXSAtIGhhbGbPgDtwb2ludFswXSA9IHIgKiBNYXRoLmNvcyhhKTtwb2ludFsxXSA9IHIgKiBNYXRoLnNpbihhKTt9cmV0dXJuIHBvaW50czt9ZnVuY3Rpb24gZDNfc3ZnX2FyZWEocHJvamVjdGlvbil7dmFyIHgwPWQzX2dlb21fcG9pbnRYLHgxPWQzX2dlb21fcG9pbnRYLHkwPTAseTE9ZDNfZ2VvbV9wb2ludFksZGVmaW5lZD1kM190cnVlLGludGVycG9sYXRlPWQzX3N2Z19saW5lTGluZWFyLGludGVycG9sYXRlS2V5PWludGVycG9sYXRlLmtleSxpbnRlcnBvbGF0ZVJldmVyc2U9aW50ZXJwb2xhdGUsTD1cIkxcIix0ZW5zaW9uPS43O2Z1bmN0aW9uIGFyZWEoZGF0YSl7dmFyIHNlZ21lbnRzPVtdLHBvaW50czA9W10scG9pbnRzMT1bXSxpPS0xLG49ZGF0YS5sZW5ndGgsZCxmeDA9ZDNfZnVuY3Rvcih4MCksZnkwPWQzX2Z1bmN0b3IoeTApLGZ4MT14MCA9PT0geDE/ZnVuY3Rpb24oKXtyZXR1cm4geDt9OmQzX2Z1bmN0b3IoeDEpLGZ5MT15MCA9PT0geTE/ZnVuY3Rpb24oKXtyZXR1cm4geTt9OmQzX2Z1bmN0b3IoeTEpLHgseTtmdW5jdGlvbiBzZWdtZW50KCl7c2VnbWVudHMucHVzaChcIk1cIixpbnRlcnBvbGF0ZShwcm9qZWN0aW9uKHBvaW50czEpLHRlbnNpb24pLEwsaW50ZXJwb2xhdGVSZXZlcnNlKHByb2plY3Rpb24ocG9pbnRzMC5yZXZlcnNlKCkpLHRlbnNpb24pLFwiWlwiKTt9d2hpbGUoKytpIDwgbikge2lmKGRlZmluZWQuY2FsbCh0aGlzLGQgPSBkYXRhW2ldLGkpKXtwb2ludHMwLnB1c2goW3ggPSArZngwLmNhbGwodGhpcyxkLGkpLHkgPSArZnkwLmNhbGwodGhpcyxkLGkpXSk7cG9pbnRzMS5wdXNoKFsrZngxLmNhbGwodGhpcyxkLGkpLCtmeTEuY2FsbCh0aGlzLGQsaSldKTt9ZWxzZSBpZihwb2ludHMwLmxlbmd0aCl7c2VnbWVudCgpO3BvaW50czAgPSBbXTtwb2ludHMxID0gW107fX1pZihwb2ludHMwLmxlbmd0aClzZWdtZW50KCk7cmV0dXJuIHNlZ21lbnRzLmxlbmd0aD9zZWdtZW50cy5qb2luKFwiXCIpOm51bGw7fWFyZWEueCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB4MTt4MCA9IHgxID0gXztyZXR1cm4gYXJlYTt9O2FyZWEueDAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDA7eDAgPSBfO3JldHVybiBhcmVhO307YXJlYS54MSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB4MTt4MSA9IF87cmV0dXJuIGFyZWE7fTthcmVhLnkgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTE7eTAgPSB5MSA9IF87cmV0dXJuIGFyZWE7fTthcmVhLnkwID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHkwO3kwID0gXztyZXR1cm4gYXJlYTt9O2FyZWEueTEgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTE7eTEgPSBfO3JldHVybiBhcmVhO307YXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRlZmluZWQ7ZGVmaW5lZCA9IF87cmV0dXJuIGFyZWE7fTthcmVhLmludGVycG9sYXRlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGludGVycG9sYXRlS2V5O2lmKHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIpaW50ZXJwb2xhdGVLZXkgPSBpbnRlcnBvbGF0ZSA9IF87ZWxzZSBpbnRlcnBvbGF0ZUtleSA9IChpbnRlcnBvbGF0ZSA9IGQzX3N2Z19saW5lSW50ZXJwb2xhdG9ycy5nZXQoXykgfHwgZDNfc3ZnX2xpbmVMaW5lYXIpLmtleTtpbnRlcnBvbGF0ZVJldmVyc2UgPSBpbnRlcnBvbGF0ZS5yZXZlcnNlIHx8IGludGVycG9sYXRlO0wgPSBpbnRlcnBvbGF0ZS5jbG9zZWQ/XCJNXCI6XCJMXCI7cmV0dXJuIGFyZWE7fTthcmVhLnRlbnNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGVuc2lvbjt0ZW5zaW9uID0gXztyZXR1cm4gYXJlYTt9O3JldHVybiBhcmVhO31kM19zdmdfbGluZVN0ZXBCZWZvcmUucmV2ZXJzZSA9IGQzX3N2Z19saW5lU3RlcEFmdGVyO2QzX3N2Z19saW5lU3RlcEFmdGVyLnJldmVyc2UgPSBkM19zdmdfbGluZVN0ZXBCZWZvcmU7ZDMuc3ZnLmFyZWEgPSBmdW5jdGlvbigpe3JldHVybiBkM19zdmdfYXJlYShkM19pZGVudGl0eSk7fTtkMy5zdmcuYXJlYS5yYWRpYWwgPSBmdW5jdGlvbigpe3ZhciBhcmVhPWQzX3N2Z19hcmVhKGQzX3N2Z19saW5lUmFkaWFsKTthcmVhLnJhZGl1cyA9IGFyZWEueCxkZWxldGUgYXJlYS54O2FyZWEuaW5uZXJSYWRpdXMgPSBhcmVhLngwLGRlbGV0ZSBhcmVhLngwO2FyZWEub3V0ZXJSYWRpdXMgPSBhcmVhLngxLGRlbGV0ZSBhcmVhLngxO2FyZWEuYW5nbGUgPSBhcmVhLnksZGVsZXRlIGFyZWEueTthcmVhLnN0YXJ0QW5nbGUgPSBhcmVhLnkwLGRlbGV0ZSBhcmVhLnkwO2FyZWEuZW5kQW5nbGUgPSBhcmVhLnkxLGRlbGV0ZSBhcmVhLnkxO3JldHVybiBhcmVhO307ZDMuc3ZnLmNob3JkID0gZnVuY3Rpb24oKXt2YXIgc291cmNlPWQzX3NvdXJjZSx0YXJnZXQ9ZDNfdGFyZ2V0LHJhZGl1cz1kM19zdmdfY2hvcmRSYWRpdXMsc3RhcnRBbmdsZT1kM19zdmdfYXJjU3RhcnRBbmdsZSxlbmRBbmdsZT1kM19zdmdfYXJjRW5kQW5nbGU7ZnVuY3Rpb24gY2hvcmQoZCxpKXt2YXIgcz1zdWJncm91cCh0aGlzLHNvdXJjZSxkLGkpLHQ9c3ViZ3JvdXAodGhpcyx0YXJnZXQsZCxpKTtyZXR1cm4gXCJNXCIgKyBzLnAwICsgYXJjKHMucixzLnAxLHMuYTEgLSBzLmEwKSArIChlcXVhbHMocyx0KT9jdXJ2ZShzLnIscy5wMSxzLnIscy5wMCk6Y3VydmUocy5yLHMucDEsdC5yLHQucDApICsgYXJjKHQucix0LnAxLHQuYTEgLSB0LmEwKSArIGN1cnZlKHQucix0LnAxLHMucixzLnAwKSkgKyBcIlpcIjt9ZnVuY3Rpb24gc3ViZ3JvdXAoc2VsZixmLGQsaSl7dmFyIHN1Ymdyb3VwPWYuY2FsbChzZWxmLGQsaSkscj1yYWRpdXMuY2FsbChzZWxmLHN1Ymdyb3VwLGkpLGEwPXN0YXJ0QW5nbGUuY2FsbChzZWxmLHN1Ymdyb3VwLGkpIC0gaGFsZs+ALGExPWVuZEFuZ2xlLmNhbGwoc2VsZixzdWJncm91cCxpKSAtIGhhbGbPgDtyZXR1cm4ge3I6cixhMDphMCxhMTphMSxwMDpbciAqIE1hdGguY29zKGEwKSxyICogTWF0aC5zaW4oYTApXSxwMTpbciAqIE1hdGguY29zKGExKSxyICogTWF0aC5zaW4oYTEpXX07fWZ1bmN0aW9uIGVxdWFscyhhLGIpe3JldHVybiBhLmEwID09IGIuYTAgJiYgYS5hMSA9PSBiLmExO31mdW5jdGlvbiBhcmMocixwLGEpe3JldHVybiBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiAwIFwiICsgKyhhID4gz4ApICsgXCIsMSBcIiArIHA7fWZ1bmN0aW9uIGN1cnZlKHIwLHAwLHIxLHAxKXtyZXR1cm4gXCJRIDAsMCBcIiArIHAxO31jaG9yZC5yYWRpdXMgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcmFkaXVzO3JhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGNob3JkO307Y2hvcmQuc291cmNlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvdXJjZTtzb3VyY2UgPSBkM19mdW5jdG9yKHYpO3JldHVybiBjaG9yZDt9O2Nob3JkLnRhcmdldCA9IGZ1bmN0aW9uKHYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0YXJnZXQ7dGFyZ2V0ID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zdGFydEFuZ2xlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHN0YXJ0QW5nbGU7c3RhcnRBbmdsZSA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGNob3JkO307Y2hvcmQuZW5kQW5nbGUgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZW5kQW5nbGU7ZW5kQW5nbGUgPSBkM19mdW5jdG9yKHYpO3JldHVybiBjaG9yZDt9O3JldHVybiBjaG9yZDt9O2Z1bmN0aW9uIGQzX3N2Z19jaG9yZFJhZGl1cyhkKXtyZXR1cm4gZC5yYWRpdXM7fWQzLnN2Zy5kaWFnb25hbCA9IGZ1bmN0aW9uKCl7dmFyIHNvdXJjZT1kM19zb3VyY2UsdGFyZ2V0PWQzX3RhcmdldCxwcm9qZWN0aW9uPWQzX3N2Z19kaWFnb25hbFByb2plY3Rpb247ZnVuY3Rpb24gZGlhZ29uYWwoZCxpKXt2YXIgcDA9c291cmNlLmNhbGwodGhpcyxkLGkpLHAzPXRhcmdldC5jYWxsKHRoaXMsZCxpKSxtPShwMC55ICsgcDMueSkgLyAyLHA9W3AwLHt4OnAwLngseTptfSx7eDpwMy54LHk6bX0scDNdO3AgPSBwLm1hcChwcm9qZWN0aW9uKTtyZXR1cm4gXCJNXCIgKyBwWzBdICsgXCJDXCIgKyBwWzFdICsgXCIgXCIgKyBwWzJdICsgXCIgXCIgKyBwWzNdO31kaWFnb25hbC5zb3VyY2UgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc291cmNlO3NvdXJjZSA9IGQzX2Z1bmN0b3IoeCk7cmV0dXJuIGRpYWdvbmFsO307ZGlhZ29uYWwudGFyZ2V0ID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRhcmdldDt0YXJnZXQgPSBkM19mdW5jdG9yKHgpO3JldHVybiBkaWFnb25hbDt9O2RpYWdvbmFsLnByb2plY3Rpb24gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcHJvamVjdGlvbjtwcm9qZWN0aW9uID0geDtyZXR1cm4gZGlhZ29uYWw7fTtyZXR1cm4gZGlhZ29uYWw7fTtmdW5jdGlvbiBkM19zdmdfZGlhZ29uYWxQcm9qZWN0aW9uKGQpe3JldHVybiBbZC54LGQueV07fWQzLnN2Zy5kaWFnb25hbC5yYWRpYWwgPSBmdW5jdGlvbigpe3ZhciBkaWFnb25hbD1kMy5zdmcuZGlhZ29uYWwoKSxwcm9qZWN0aW9uPWQzX3N2Z19kaWFnb25hbFByb2plY3Rpb24scHJvamVjdGlvbl89ZGlhZ29uYWwucHJvamVjdGlvbjtkaWFnb25hbC5wcm9qZWN0aW9uID0gZnVuY3Rpb24oeCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cHJvamVjdGlvbl8oZDNfc3ZnX2RpYWdvbmFsUmFkaWFsUHJvamVjdGlvbihwcm9qZWN0aW9uID0geCkpOnByb2plY3Rpb247fTtyZXR1cm4gZGlhZ29uYWw7fTtmdW5jdGlvbiBkM19zdmdfZGlhZ29uYWxSYWRpYWxQcm9qZWN0aW9uKHByb2plY3Rpb24pe3JldHVybiBmdW5jdGlvbigpe3ZhciBkPXByb2plY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZFswXSxhPWRbMV0gLSBoYWxmz4A7cmV0dXJuIFtyICogTWF0aC5jb3MoYSksciAqIE1hdGguc2luKGEpXTt9O31kMy5zdmcuc3ltYm9sID0gZnVuY3Rpb24oKXt2YXIgdHlwZT1kM19zdmdfc3ltYm9sVHlwZSxzaXplPWQzX3N2Z19zeW1ib2xTaXplO2Z1bmN0aW9uIHN5bWJvbChkLGkpe3JldHVybiAoZDNfc3ZnX3N5bWJvbHMuZ2V0KHR5cGUuY2FsbCh0aGlzLGQsaSkpIHx8IGQzX3N2Z19zeW1ib2xDaXJjbGUpKHNpemUuY2FsbCh0aGlzLGQsaSkpO31zeW1ib2wudHlwZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0eXBlO3R5cGUgPSBkM19mdW5jdG9yKHgpO3JldHVybiBzeW1ib2w7fTtzeW1ib2wuc2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzaXplO3NpemUgPSBkM19mdW5jdG9yKHgpO3JldHVybiBzeW1ib2w7fTtyZXR1cm4gc3ltYm9sO307ZnVuY3Rpb24gZDNfc3ZnX3N5bWJvbFNpemUoKXtyZXR1cm4gNjQ7fWZ1bmN0aW9uIGQzX3N2Z19zeW1ib2xUeXBlKCl7cmV0dXJuIFwiY2lyY2xlXCI7fWZ1bmN0aW9uIGQzX3N2Z19zeW1ib2xDaXJjbGUoc2l6ZSl7dmFyIHI9TWF0aC5zcXJ0KHNpemUgLyDPgCk7cmV0dXJuIFwiTTAsXCIgKyByICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCAxLDEgMCxcIiArIC1yICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCAxLDEgMCxcIiArIHIgKyBcIlpcIjt9dmFyIGQzX3N2Z19zeW1ib2xzPWQzLm1hcCh7Y2lyY2xlOmQzX3N2Z19zeW1ib2xDaXJjbGUsY3Jvc3M6ZnVuY3Rpb24gY3Jvc3Moc2l6ZSl7dmFyIHI9TWF0aC5zcXJ0KHNpemUgLyA1KSAvIDI7cmV0dXJuIFwiTVwiICsgLTMgKiByICsgXCIsXCIgKyAtciArIFwiSFwiICsgLXIgKyBcIlZcIiArIC0zICogciArIFwiSFwiICsgciArIFwiVlwiICsgLXIgKyBcIkhcIiArIDMgKiByICsgXCJWXCIgKyByICsgXCJIXCIgKyByICsgXCJWXCIgKyAzICogciArIFwiSFwiICsgLXIgKyBcIlZcIiArIHIgKyBcIkhcIiArIC0zICogciArIFwiWlwiO30sZGlhbW9uZDpmdW5jdGlvbiBkaWFtb25kKHNpemUpe3ZhciByeT1NYXRoLnNxcnQoc2l6ZSAvICgyICogZDNfc3ZnX3N5bWJvbFRhbjMwKSkscng9cnkgKiBkM19zdmdfc3ltYm9sVGFuMzA7cmV0dXJuIFwiTTAsXCIgKyAtcnkgKyBcIkxcIiArIHJ4ICsgXCIsMFwiICsgXCIgMCxcIiArIHJ5ICsgXCIgXCIgKyAtcnggKyBcIiwwXCIgKyBcIlpcIjt9LHNxdWFyZTpmdW5jdGlvbiBzcXVhcmUoc2l6ZSl7dmFyIHI9TWF0aC5zcXJ0KHNpemUpIC8gMjtyZXR1cm4gXCJNXCIgKyAtciArIFwiLFwiICsgLXIgKyBcIkxcIiArIHIgKyBcIixcIiArIC1yICsgXCIgXCIgKyByICsgXCIsXCIgKyByICsgXCIgXCIgKyAtciArIFwiLFwiICsgciArIFwiWlwiO30sXCJ0cmlhbmdsZS1kb3duXCI6ZnVuY3Rpb24gdHJpYW5nbGVEb3duKHNpemUpe3ZhciByeD1NYXRoLnNxcnQoc2l6ZSAvIGQzX3N2Z19zeW1ib2xTcXJ0Mykscnk9cnggKiBkM19zdmdfc3ltYm9sU3FydDMgLyAyO3JldHVybiBcIk0wLFwiICsgcnkgKyBcIkxcIiArIHJ4ICsgXCIsXCIgKyAtcnkgKyBcIiBcIiArIC1yeCArIFwiLFwiICsgLXJ5ICsgXCJaXCI7fSxcInRyaWFuZ2xlLXVwXCI6ZnVuY3Rpb24gdHJpYW5nbGVVcChzaXplKXt2YXIgcng9TWF0aC5zcXJ0KHNpemUgLyBkM19zdmdfc3ltYm9sU3FydDMpLHJ5PXJ4ICogZDNfc3ZnX3N5bWJvbFNxcnQzIC8gMjtyZXR1cm4gXCJNMCxcIiArIC1yeSArIFwiTFwiICsgcnggKyBcIixcIiArIHJ5ICsgXCIgXCIgKyAtcnggKyBcIixcIiArIHJ5ICsgXCJaXCI7fX0pO2QzLnN2Zy5zeW1ib2xUeXBlcyA9IGQzX3N2Z19zeW1ib2xzLmtleXMoKTt2YXIgZDNfc3ZnX3N5bWJvbFNxcnQzPU1hdGguc3FydCgzKSxkM19zdmdfc3ltYm9sVGFuMzA9TWF0aC50YW4oMzAgKiBkM19yYWRpYW5zKTtkM19zZWxlY3Rpb25Qcm90b3R5cGUudHJhbnNpdGlvbiA9IGZ1bmN0aW9uKG5hbWUpe3ZhciBpZD1kM190cmFuc2l0aW9uSW5oZXJpdElkIHx8ICsrZDNfdHJhbnNpdGlvbklkLG5zPWQzX3RyYW5zaXRpb25OYW1lc3BhY2UobmFtZSksc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLG5vZGUsdHJhbnNpdGlvbj1kM190cmFuc2l0aW9uSW5oZXJpdCB8fCB7dGltZTpEYXRlLm5vdygpLGVhc2U6ZDNfZWFzZV9jdWJpY0luT3V0LGRlbGF5OjAsZHVyYXRpb246MjUwfTtmb3IodmFyIGo9LTEsbT10aGlzLmxlbmd0aDsrK2ogPCBtOykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgZ3JvdXA9dGhpc1tqXSxpPS0xLG49Z3JvdXAubGVuZ3RoOysraSA8IG47KSB7aWYobm9kZSA9IGdyb3VwW2ldKWQzX3RyYW5zaXRpb25Ob2RlKG5vZGUsaSxucyxpZCx0cmFuc2l0aW9uKTtzdWJncm91cC5wdXNoKG5vZGUpO319cmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLG5zLGlkKTt9O2QzX3NlbGVjdGlvblByb3RvdHlwZS5pbnRlcnJ1cHQgPSBmdW5jdGlvbihuYW1lKXtyZXR1cm4gdGhpcy5lYWNoKG5hbWUgPT0gbnVsbD9kM19zZWxlY3Rpb25faW50ZXJydXB0OmQzX3NlbGVjdGlvbl9pbnRlcnJ1cHROUyhkM190cmFuc2l0aW9uTmFtZXNwYWNlKG5hbWUpKSk7fTt2YXIgZDNfc2VsZWN0aW9uX2ludGVycnVwdD1kM19zZWxlY3Rpb25faW50ZXJydXB0TlMoZDNfdHJhbnNpdGlvbk5hbWVzcGFjZSgpKTtmdW5jdGlvbiBkM19zZWxlY3Rpb25faW50ZXJydXB0TlMobnMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsb2NrLGFjdGl2ZUlkLGFjdGl2ZTtpZigobG9jayA9IHRoaXNbbnNdKSAmJiAoYWN0aXZlID0gbG9ja1thY3RpdmVJZCA9IGxvY2suYWN0aXZlXSkpe2FjdGl2ZS50aW1lci5jID0gbnVsbDthY3RpdmUudGltZXIudCA9IE5hTjtpZigtLWxvY2suY291bnQpZGVsZXRlIGxvY2tbYWN0aXZlSWRdO2Vsc2UgZGVsZXRlIHRoaXNbbnNdO2xvY2suYWN0aXZlICs9IC41O2FjdGl2ZS5ldmVudCAmJiBhY3RpdmUuZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGFjdGl2ZS5pbmRleCk7fX07fWZ1bmN0aW9uIGQzX3RyYW5zaXRpb24oZ3JvdXBzLG5zLGlkKXtkM19zdWJjbGFzcyhncm91cHMsZDNfdHJhbnNpdGlvblByb3RvdHlwZSk7Z3JvdXBzLm5hbWVzcGFjZSA9IG5zO2dyb3Vwcy5pZCA9IGlkO3JldHVybiBncm91cHM7fXZhciBkM190cmFuc2l0aW9uUHJvdG90eXBlPVtdLGQzX3RyYW5zaXRpb25JZD0wLGQzX3RyYW5zaXRpb25Jbmhlcml0SWQsZDNfdHJhbnNpdGlvbkluaGVyaXQ7ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5jYWxsID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLmNhbGw7ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5lbXB0eSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5lbXB0eTtkM190cmFuc2l0aW9uUHJvdG90eXBlLm5vZGUgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUubm9kZTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnNpemUgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuc2l6ZTtkMy50cmFuc2l0aW9uID0gZnVuY3Rpb24oc2VsZWN0aW9uLG5hbWUpe3JldHVybiBzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnRyYW5zaXRpb24/ZDNfdHJhbnNpdGlvbkluaGVyaXRJZD9zZWxlY3Rpb24udHJhbnNpdGlvbihuYW1lKTpzZWxlY3Rpb246ZDMuc2VsZWN0aW9uKCkudHJhbnNpdGlvbihzZWxlY3Rpb24pO307ZDMudHJhbnNpdGlvbi5wcm90b3R5cGUgPSBkM190cmFuc2l0aW9uUHJvdG90eXBlO2QzX3RyYW5zaXRpb25Qcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlLHN1Ymdyb3Vwcz1bXSxzdWJncm91cCxzdWJub2RlLG5vZGU7c2VsZWN0b3IgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3Ioc2VsZWN0b3IpO2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7c3ViZ3JvdXBzLnB1c2goc3ViZ3JvdXAgPSBbXSk7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9LTEsbj1ncm91cC5sZW5ndGg7KytpIDwgbjspIHtpZigobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdG9yLmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGksaikpKXtpZihcIl9fZGF0YV9fXCIgaW4gbm9kZSlzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztkM190cmFuc2l0aW9uTm9kZShzdWJub2RlLGksbnMsaWQsbm9kZVtuc11baWRdKTtzdWJncm91cC5wdXNoKHN1Ym5vZGUpO31lbHNlIHtzdWJncm91cC5wdXNoKG51bGwpO319fXJldHVybiBkM190cmFuc2l0aW9uKHN1Ymdyb3VwcyxucyxpZCk7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKHNlbGVjdG9yKXt2YXIgaWQ9dGhpcy5pZCxucz10aGlzLm5hbWVzcGFjZSxzdWJncm91cHM9W10sc3ViZ3JvdXAsc3Vibm9kZXMsbm9kZSxzdWJub2RlLHRyYW5zaXRpb247c2VsZWN0b3IgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3JBbGwoc2VsZWN0b3IpO2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9LTEsbj1ncm91cC5sZW5ndGg7KytpIDwgbjspIHtpZihub2RlID0gZ3JvdXBbaV0pe3RyYW5zaXRpb24gPSBub2RlW25zXVtpZF07c3Vibm9kZXMgPSBzZWxlY3Rvci5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopO3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgaz0tMSxvPXN1Ym5vZGVzLmxlbmd0aDsrK2sgPCBvOykge2lmKHN1Ym5vZGUgPSBzdWJub2Rlc1trXSlkM190cmFuc2l0aW9uTm9kZShzdWJub2RlLGssbnMsaWQsdHJhbnNpdGlvbik7c3ViZ3JvdXAucHVzaChzdWJub2RlKTt9fX19cmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLG5zLGlkKTt9O2QzX3RyYW5zaXRpb25Qcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24oZmlsdGVyKXt2YXIgc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLGdyb3VwLG5vZGU7aWYodHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiKWZpbHRlciA9IGQzX3NlbGVjdGlvbl9maWx0ZXIoZmlsdGVyKTtmb3IodmFyIGo9MCxtPXRoaXMubGVuZ3RoO2ogPCBtO2orKykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgZ3JvdXA9dGhpc1tqXSxpPTAsbj1ncm91cC5sZW5ndGg7aSA8IG47aSsrKSB7aWYoKG5vZGUgPSBncm91cFtpXSkgJiYgZmlsdGVyLmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGksaikpe3N1Ymdyb3VwLnB1c2gobm9kZSk7fX19cmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLHRoaXMubmFtZXNwYWNlLHRoaXMuaWQpO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS50d2VlbiA9IGZ1bmN0aW9uKG5hbWUsdHdlZW4pe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAyKXJldHVybiB0aGlzLm5vZGUoKVtuc11baWRdLnR3ZWVuLmdldChuYW1lKTtyZXR1cm4gZDNfc2VsZWN0aW9uX2VhY2godGhpcyx0d2VlbiA9PSBudWxsP2Z1bmN0aW9uKG5vZGUpe25vZGVbbnNdW2lkXS50d2Vlbi5yZW1vdmUobmFtZSk7fTpmdW5jdGlvbihub2RlKXtub2RlW25zXVtpZF0udHdlZW4uc2V0KG5hbWUsdHdlZW4pO30pO307ZnVuY3Rpb24gZDNfdHJhbnNpdGlvbl90d2Vlbihncm91cHMsbmFtZSx2YWx1ZSx0d2Vlbil7dmFyIGlkPWdyb3Vwcy5pZCxucz1ncm91cHMubmFtZXNwYWNlO3JldHVybiBkM19zZWxlY3Rpb25fZWFjaChncm91cHMsdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI/ZnVuY3Rpb24obm9kZSxpLGope25vZGVbbnNdW2lkXS50d2Vlbi5zZXQobmFtZSx0d2Vlbih2YWx1ZS5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopKSk7fToodmFsdWUgPSB0d2Vlbih2YWx1ZSksZnVuY3Rpb24obm9kZSl7bm9kZVtuc11baWRdLnR3ZWVuLnNldChuYW1lLHZhbHVlKTt9KSk7fWQzX3RyYW5zaXRpb25Qcm90b3R5cGUuYXR0ciA9IGZ1bmN0aW9uKG5hbWVOUyx2YWx1ZSl7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpe2Zvcih2YWx1ZSBpbiBuYW1lTlMpIHRoaXMuYXR0cih2YWx1ZSxuYW1lTlNbdmFsdWVdKTtyZXR1cm4gdGhpczt9dmFyIGludGVycG9sYXRlPW5hbWVOUyA9PSBcInRyYW5zZm9ybVwiP2QzX2ludGVycG9sYXRlVHJhbnNmb3JtOmQzX2ludGVycG9sYXRlLG5hbWU9ZDMubnMucXVhbGlmeShuYW1lTlMpO2Z1bmN0aW9uIGF0dHJOdWxsKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fWZ1bmN0aW9uIGF0dHJOdWxsTlMoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7fWZ1bmN0aW9uIGF0dHJUd2VlbihiKXtyZXR1cm4gYiA9PSBudWxsP2F0dHJOdWxsOihiICs9IFwiXCIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZShuYW1lKSxpO3JldHVybiBhICE9PSBiICYmIChpID0gaW50ZXJwb2xhdGUoYSxiKSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuYW1lLGkodCkpO30pO30pO31mdW5jdGlvbiBhdHRyVHdlZW5OUyhiKXtyZXR1cm4gYiA9PSBudWxsP2F0dHJOdWxsTlM6KGIgKz0gXCJcIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsKSxpO3JldHVybiBhICE9PSBiICYmIChpID0gaW50ZXJwb2xhdGUoYSxiKSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCxpKHQpKTt9KTt9KTt9cmV0dXJuIGQzX3RyYW5zaXRpb25fdHdlZW4odGhpcyxcImF0dHIuXCIgKyBuYW1lTlMsdmFsdWUsbmFtZS5sb2NhbD9hdHRyVHdlZW5OUzphdHRyVHdlZW4pO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5hdHRyVHdlZW4gPSBmdW5jdGlvbihuYW1lTlMsdHdlZW4pe3ZhciBuYW1lPWQzLm5zLnF1YWxpZnkobmFtZU5TKTtmdW5jdGlvbiBhdHRyVHdlZW4oZCxpKXt2YXIgZj10d2Vlbi5jYWxsKHRoaXMsZCxpLHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpKTtyZXR1cm4gZiAmJiBmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuYW1lLGYodCkpO307fWZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGQsaSl7dmFyIGY9dHdlZW4uY2FsbCh0aGlzLGQsaSx0aGlzLmdldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCkpO3JldHVybiBmICYmIGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsLGYodCkpO307fXJldHVybiB0aGlzLnR3ZWVuKFwiYXR0ci5cIiArIG5hbWVOUyxuYW1lLmxvY2FsP2F0dHJUd2Vlbk5TOmF0dHJUd2Vlbik7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnN0eWxlID0gZnVuY3Rpb24obmFtZSx2YWx1ZSxwcmlvcml0eSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuIDwgMyl7aWYodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpe2lmKG4gPCAyKXZhbHVlID0gXCJcIjtmb3IocHJpb3JpdHkgaW4gbmFtZSkgdGhpcy5zdHlsZShwcmlvcml0eSxuYW1lW3ByaW9yaXR5XSx2YWx1ZSk7cmV0dXJuIHRoaXM7fXByaW9yaXR5ID0gXCJcIjt9ZnVuY3Rpb24gc3R5bGVOdWxsKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTt9ZnVuY3Rpb24gc3R5bGVTdHJpbmcoYil7cmV0dXJuIGIgPT0gbnVsbD9zdHlsZU51bGw6KGIgKz0gXCJcIixmdW5jdGlvbigpe3ZhciBhPWQzX3dpbmRvdyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSxpO3JldHVybiBhICE9PSBiICYmIChpID0gZDNfaW50ZXJwb2xhdGUoYSxiKSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsaSh0KSxwcmlvcml0eSk7fSk7fSk7fXJldHVybiBkM190cmFuc2l0aW9uX3R3ZWVuKHRoaXMsXCJzdHlsZS5cIiArIG5hbWUsdmFsdWUsc3R5bGVTdHJpbmcpO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5zdHlsZVR3ZWVuID0gZnVuY3Rpb24obmFtZSx0d2Vlbixwcmlvcml0eSl7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDMpcHJpb3JpdHkgPSBcIlwiO2Z1bmN0aW9uIHN0eWxlVHdlZW4oZCxpKXt2YXIgZj10d2Vlbi5jYWxsKHRoaXMsZCxpLGQzX3dpbmRvdyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSk7cmV0dXJuIGYgJiYgZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLGYodCkscHJpb3JpdHkpO307fXJldHVybiB0aGlzLnR3ZWVuKFwic3R5bGUuXCIgKyBuYW1lLHN0eWxlVHdlZW4pO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsdWUpe3JldHVybiBkM190cmFuc2l0aW9uX3R3ZWVuKHRoaXMsXCJ0ZXh0XCIsdmFsdWUsZDNfdHJhbnNpdGlvbl90ZXh0KTt9O2Z1bmN0aW9uIGQzX3RyYW5zaXRpb25fdGV4dChiKXtpZihiID09IG51bGwpYiA9IFwiXCI7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudCA9IGI7fTt9ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbigpe3ZhciBucz10aGlzLm5hbWVzcGFjZTtyZXR1cm4gdGhpcy5lYWNoKFwiZW5kLnRyYW5zaXRpb25cIixmdW5jdGlvbigpe3ZhciBwO2lmKHRoaXNbbnNdLmNvdW50IDwgMiAmJiAocCA9IHRoaXMucGFyZW50Tm9kZSkpcC5yZW1vdmVDaGlsZCh0aGlzKTt9KTt9O2QzX3RyYW5zaXRpb25Qcm90b3R5cGUuZWFzZSA9IGZ1bmN0aW9uKHZhbHVlKXt2YXIgaWQ9dGhpcy5pZCxucz10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoIDwgMSlyZXR1cm4gdGhpcy5ub2RlKClbbnNdW2lkXS5lYXNlO2lmKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKXZhbHVlID0gZDMuZWFzZS5hcHBseShkMyxhcmd1bWVudHMpO3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLGZ1bmN0aW9uKG5vZGUpe25vZGVbbnNdW2lkXS5lYXNlID0gdmFsdWU7fSk7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLmRlbGF5ID0gZnVuY3Rpb24odmFsdWUpe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAxKXJldHVybiB0aGlzLm5vZGUoKVtuc11baWRdLmRlbGF5O3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP2Z1bmN0aW9uKG5vZGUsaSxqKXtub2RlW25zXVtpZF0uZGVsYXkgPSArdmFsdWUuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSxqKTt9Oih2YWx1ZSA9ICt2YWx1ZSxmdW5jdGlvbihub2RlKXtub2RlW25zXVtpZF0uZGVsYXkgPSB2YWx1ZTt9KSk7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLmR1cmF0aW9uID0gZnVuY3Rpb24odmFsdWUpe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAxKXJldHVybiB0aGlzLm5vZGUoKVtuc11baWRdLmR1cmF0aW9uO3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP2Z1bmN0aW9uKG5vZGUsaSxqKXtub2RlW25zXVtpZF0uZHVyYXRpb24gPSBNYXRoLm1heCgxLHZhbHVlLmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGksaikpO306KHZhbHVlID0gTWF0aC5tYXgoMSx2YWx1ZSksZnVuY3Rpb24obm9kZSl7bm9kZVtuc11baWRdLmR1cmF0aW9uID0gdmFsdWU7fSkpO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7dmFyIGlkPXRoaXMuaWQsbnM9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpe3ZhciBpbmhlcml0PWQzX3RyYW5zaXRpb25Jbmhlcml0LGluaGVyaXRJZD1kM190cmFuc2l0aW9uSW5oZXJpdElkO3RyeXtkM190cmFuc2l0aW9uSW5oZXJpdElkID0gaWQ7ZDNfc2VsZWN0aW9uX2VhY2godGhpcyxmdW5jdGlvbihub2RlLGksail7ZDNfdHJhbnNpdGlvbkluaGVyaXQgPSBub2RlW25zXVtpZF07dHlwZS5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopO30pO31maW5hbGx5IHtkM190cmFuc2l0aW9uSW5oZXJpdCA9IGluaGVyaXQ7ZDNfdHJhbnNpdGlvbkluaGVyaXRJZCA9IGluaGVyaXRJZDt9fWVsc2Uge2QzX3NlbGVjdGlvbl9lYWNoKHRoaXMsZnVuY3Rpb24obm9kZSl7dmFyIHRyYW5zaXRpb249bm9kZVtuc11baWRdOyh0cmFuc2l0aW9uLmV2ZW50IHx8ICh0cmFuc2l0aW9uLmV2ZW50ID0gZDMuZGlzcGF0Y2goXCJzdGFydFwiLFwiZW5kXCIsXCJpbnRlcnJ1cHRcIikpKS5vbih0eXBlLGxpc3RlbmVyKTt9KTt9cmV0dXJuIHRoaXM7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnRyYW5zaXRpb24gPSBmdW5jdGlvbigpe3ZhciBpZDA9dGhpcy5pZCxpZDE9KytkM190cmFuc2l0aW9uSWQsbnM9dGhpcy5uYW1lc3BhY2Usc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLGdyb3VwLG5vZGUsdHJhbnNpdGlvbjtmb3IodmFyIGo9MCxtPXRoaXMubGVuZ3RoO2ogPCBtO2orKykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgZ3JvdXA9dGhpc1tqXSxpPTAsbj1ncm91cC5sZW5ndGg7aSA8IG47aSsrKSB7aWYobm9kZSA9IGdyb3VwW2ldKXt0cmFuc2l0aW9uID0gbm9kZVtuc11baWQwXTtkM190cmFuc2l0aW9uTm9kZShub2RlLGksbnMsaWQxLHt0aW1lOnRyYW5zaXRpb24udGltZSxlYXNlOnRyYW5zaXRpb24uZWFzZSxkZWxheTp0cmFuc2l0aW9uLmRlbGF5ICsgdHJhbnNpdGlvbi5kdXJhdGlvbixkdXJhdGlvbjp0cmFuc2l0aW9uLmR1cmF0aW9ufSk7fXN1Ymdyb3VwLnB1c2gobm9kZSk7fX1yZXR1cm4gZDNfdHJhbnNpdGlvbihzdWJncm91cHMsbnMsaWQxKTt9O2Z1bmN0aW9uIGQzX3RyYW5zaXRpb25OYW1lc3BhY2UobmFtZSl7cmV0dXJuIG5hbWUgPT0gbnVsbD9cIl9fdHJhbnNpdGlvbl9fXCI6XCJfX3RyYW5zaXRpb25fXCIgKyBuYW1lICsgXCJfX1wiO31mdW5jdGlvbiBkM190cmFuc2l0aW9uTm9kZShub2RlLGksbnMsaWQsaW5oZXJpdCl7dmFyIGxvY2s9bm9kZVtuc10gfHwgKG5vZGVbbnNdID0ge2FjdGl2ZTowLGNvdW50OjB9KSx0cmFuc2l0aW9uPWxvY2tbaWRdO2lmKCF0cmFuc2l0aW9uKXt2YXIgc2NoZWR1bGU9ZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCl7dmFyIGRlbGF5PXRyYW5zaXRpb24uZGVsYXksZHVyYXRpb24sZWFzZSx0d2VlbmVkPVtdO3RpbWVyLnQgPSBkZWxheSArIHRpbWU7aWYoZGVsYXkgPD0gZWxhcHNlZClyZXR1cm4gc3RhcnQoZWxhcHNlZCAtIGRlbGF5KTt0aW1lci5jID0gc3RhcnQ7ZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCl7dmFyIGFjdGl2ZUlkPWxvY2suYWN0aXZlLGFjdGl2ZT1sb2NrW2FjdGl2ZUlkXTtpZihhY3RpdmUpe2FjdGl2ZS50aW1lci5jID0gbnVsbDthY3RpdmUudGltZXIudCA9IE5hTjstLWxvY2suY291bnQ7ZGVsZXRlIGxvY2tbYWN0aXZlSWRdO2FjdGl2ZS5ldmVudCAmJiBhY3RpdmUuZXZlbnQuaW50ZXJydXB0LmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGFjdGl2ZS5pbmRleCk7fWZvcih2YXIgY2FuY2VsSWQgaW4gbG9jaykge2lmKCtjYW5jZWxJZCA8IGlkKXt2YXIgY2FuY2VsPWxvY2tbY2FuY2VsSWRdO2NhbmNlbC50aW1lci5jID0gbnVsbDtjYW5jZWwudGltZXIudCA9IE5hTjstLWxvY2suY291bnQ7ZGVsZXRlIGxvY2tbY2FuY2VsSWRdO319bG9jay5hY3RpdmUgPSBpZDt0cmFuc2l0aW9uLmV2ZW50ICYmIHRyYW5zaXRpb24uZXZlbnQuc3RhcnQuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSk7dHJhbnNpdGlvbi50d2Vlbi5mb3JFYWNoKGZ1bmN0aW9uKGtleSx2YWx1ZSl7aWYodmFsdWUgPSB2YWx1ZS5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpKSl7dHdlZW5lZC5wdXNoKHZhbHVlKTt9fSk7ZWFzZSA9IHRyYW5zaXRpb24uZWFzZTtkdXJhdGlvbiA9IHRyYW5zaXRpb24uZHVyYXRpb247dGltZXIuYyA9IHRpY2s7ZDNfdGltZXIoZnVuY3Rpb24oKXtpZih0aW1lci5jICYmIHRpY2soZWxhcHNlZCB8fCAxKSl7dGltZXIuYyA9IG51bGw7dGltZXIudCA9IE5hTjt9cmV0dXJuIDE7fSwwLHRpbWUpO31mdW5jdGlvbiB0aWNrKGVsYXBzZWQpe3ZhciB0PWVsYXBzZWQgLyBkdXJhdGlvbixlPWVhc2UodCksbj10d2VlbmVkLmxlbmd0aDt3aGlsZShuID4gMCkge3R3ZWVuZWRbLS1uXS5jYWxsKG5vZGUsZSk7fWlmKHQgPj0gMSl7dHJhbnNpdGlvbi5ldmVudCAmJiB0cmFuc2l0aW9uLmV2ZW50LmVuZC5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpKTtpZigtLWxvY2suY291bnQpZGVsZXRlIGxvY2tbaWRdO2Vsc2UgZGVsZXRlIG5vZGVbbnNdO3JldHVybiAxO319fTt2YXIgdGltZT1pbmhlcml0LnRpbWUsdGltZXI9ZDNfdGltZXIoc2NoZWR1bGUsMCx0aW1lKTt0cmFuc2l0aW9uID0gbG9ja1tpZF0gPSB7dHdlZW46bmV3IGQzX01hcCgpLHRpbWU6dGltZSx0aW1lcjp0aW1lcixkZWxheTppbmhlcml0LmRlbGF5LGR1cmF0aW9uOmluaGVyaXQuZHVyYXRpb24sZWFzZTppbmhlcml0LmVhc2UsaW5kZXg6aX07aW5oZXJpdCA9IG51bGw7Kytsb2NrLmNvdW50O319ZDMuc3ZnLmF4aXMgPSBmdW5jdGlvbigpe3ZhciBzY2FsZT1kMy5zY2FsZS5saW5lYXIoKSxvcmllbnQ9ZDNfc3ZnX2F4aXNEZWZhdWx0T3JpZW50LGlubmVyVGlja1NpemU9NixvdXRlclRpY2tTaXplPTYsdGlja1BhZGRpbmc9Myx0aWNrQXJndW1lbnRzXz1bMTBdLHRpY2tWYWx1ZXM9bnVsbCx0aWNrRm9ybWF0XztmdW5jdGlvbiBheGlzKGcpe2cuZWFjaChmdW5jdGlvbigpe3ZhciBnPWQzLnNlbGVjdCh0aGlzKTt2YXIgc2NhbGUwPXRoaXMuX19jaGFydF9fIHx8IHNjYWxlLHNjYWxlMT10aGlzLl9fY2hhcnRfXyA9IHNjYWxlLmNvcHkoKTt2YXIgdGlja3M9dGlja1ZhbHVlcyA9PSBudWxsP3NjYWxlMS50aWNrcz9zY2FsZTEudGlja3MuYXBwbHkoc2NhbGUxLHRpY2tBcmd1bWVudHNfKTpzY2FsZTEuZG9tYWluKCk6dGlja1ZhbHVlcyx0aWNrRm9ybWF0PXRpY2tGb3JtYXRfID09IG51bGw/c2NhbGUxLnRpY2tGb3JtYXQ/c2NhbGUxLnRpY2tGb3JtYXQuYXBwbHkoc2NhbGUxLHRpY2tBcmd1bWVudHNfKTpkM19pZGVudGl0eTp0aWNrRm9ybWF0Xyx0aWNrPWcuc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh0aWNrcyxzY2FsZTEpLHRpY2tFbnRlcj10aWNrLmVudGVyKCkuaW5zZXJ0KFwiZ1wiLFwiLmRvbWFpblwiKS5hdHRyKFwiY2xhc3NcIixcInRpY2tcIikuc3R5bGUoXCJvcGFjaXR5XCIszrUpLHRpY2tFeGl0PWQzLnRyYW5zaXRpb24odGljay5leGl0KCkpLnN0eWxlKFwib3BhY2l0eVwiLM61KS5yZW1vdmUoKSx0aWNrVXBkYXRlPWQzLnRyYW5zaXRpb24odGljay5vcmRlcigpKS5zdHlsZShcIm9wYWNpdHlcIiwxKSx0aWNrU3BhY2luZz1NYXRoLm1heChpbm5lclRpY2tTaXplLDApICsgdGlja1BhZGRpbmcsdGlja1RyYW5zZm9ybTt2YXIgcmFuZ2U9ZDNfc2NhbGVSYW5nZShzY2FsZTEpLHBhdGg9Zy5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoWzBdKSxwYXRoVXBkYXRlPShwYXRoLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcImRvbWFpblwiKSxkMy50cmFuc2l0aW9uKHBhdGgpKTt0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKTt0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKTt2YXIgbGluZUVudGVyPXRpY2tFbnRlci5zZWxlY3QoXCJsaW5lXCIpLGxpbmVVcGRhdGU9dGlja1VwZGF0ZS5zZWxlY3QoXCJsaW5lXCIpLHRleHQ9dGljay5zZWxlY3QoXCJ0ZXh0XCIpLnRleHQodGlja0Zvcm1hdCksdGV4dEVudGVyPXRpY2tFbnRlci5zZWxlY3QoXCJ0ZXh0XCIpLHRleHRVcGRhdGU9dGlja1VwZGF0ZS5zZWxlY3QoXCJ0ZXh0XCIpLHNpZ249b3JpZW50ID09PSBcInRvcFwiIHx8IG9yaWVudCA9PT0gXCJsZWZ0XCI/LTE6MSx4MSx4Mix5MSx5MjtpZihvcmllbnQgPT09IFwiYm90dG9tXCIgfHwgb3JpZW50ID09PSBcInRvcFwiKXt0aWNrVHJhbnNmb3JtID0gZDNfc3ZnX2F4aXNYLHgxID0gXCJ4XCIseTEgPSBcInlcIix4MiA9IFwieDJcIix5MiA9IFwieTJcIjt0ZXh0LmF0dHIoXCJkeVwiLHNpZ24gPCAwP1wiMGVtXCI6XCIuNzFlbVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIik7cGF0aFVwZGF0ZS5hdHRyKFwiZFwiLFwiTVwiICsgcmFuZ2VbMF0gKyBcIixcIiArIHNpZ24gKiBvdXRlclRpY2tTaXplICsgXCJWMEhcIiArIHJhbmdlWzFdICsgXCJWXCIgKyBzaWduICogb3V0ZXJUaWNrU2l6ZSk7fWVsc2Uge3RpY2tUcmFuc2Zvcm0gPSBkM19zdmdfYXhpc1kseDEgPSBcInlcIix5MSA9IFwieFwiLHgyID0gXCJ5MlwiLHkyID0gXCJ4MlwiO3RleHQuYXR0cihcImR5XCIsXCIuMzJlbVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsc2lnbiA8IDA/XCJlbmRcIjpcInN0YXJ0XCIpO3BhdGhVcGRhdGUuYXR0cihcImRcIixcIk1cIiArIHNpZ24gKiBvdXRlclRpY2tTaXplICsgXCIsXCIgKyByYW5nZVswXSArIFwiSDBWXCIgKyByYW5nZVsxXSArIFwiSFwiICsgc2lnbiAqIG91dGVyVGlja1NpemUpO31saW5lRW50ZXIuYXR0cih5MixzaWduICogaW5uZXJUaWNrU2l6ZSk7dGV4dEVudGVyLmF0dHIoeTEsc2lnbiAqIHRpY2tTcGFjaW5nKTtsaW5lVXBkYXRlLmF0dHIoeDIsMCkuYXR0cih5MixzaWduICogaW5uZXJUaWNrU2l6ZSk7dGV4dFVwZGF0ZS5hdHRyKHgxLDApLmF0dHIoeTEsc2lnbiAqIHRpY2tTcGFjaW5nKTtpZihzY2FsZTEucmFuZ2VCYW5kKXt2YXIgeD1zY2FsZTEsZHg9eC5yYW5nZUJhbmQoKSAvIDI7c2NhbGUwID0gc2NhbGUxID0gZnVuY3Rpb24oZCl7cmV0dXJuIHgoZCkgKyBkeDt9O31lbHNlIGlmKHNjYWxlMC5yYW5nZUJhbmQpe3NjYWxlMCA9IHNjYWxlMTt9ZWxzZSB7dGlja0V4aXQuY2FsbCh0aWNrVHJhbnNmb3JtLHNjYWxlMSxzY2FsZTApO310aWNrRW50ZXIuY2FsbCh0aWNrVHJhbnNmb3JtLHNjYWxlMCxzY2FsZTEpO3RpY2tVcGRhdGUuY2FsbCh0aWNrVHJhbnNmb3JtLHNjYWxlMSxzY2FsZTEpO30pO31heGlzLnNjYWxlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNjYWxlO3NjYWxlID0geDtyZXR1cm4gYXhpczt9O2F4aXMub3JpZW50ID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG9yaWVudDtvcmllbnQgPSB4IGluIGQzX3N2Z19heGlzT3JpZW50cz94ICsgXCJcIjpkM19zdmdfYXhpc0RlZmF1bHRPcmllbnQ7cmV0dXJuIGF4aXM7fTtheGlzLnRpY2tzID0gZnVuY3Rpb24oKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGlja0FyZ3VtZW50c187dGlja0FyZ3VtZW50c18gPSBkM19hcnJheShhcmd1bWVudHMpO3JldHVybiBheGlzO307YXhpcy50aWNrVmFsdWVzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRpY2tWYWx1ZXM7dGlja1ZhbHVlcyA9IHg7cmV0dXJuIGF4aXM7fTtheGlzLnRpY2tGb3JtYXQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGlja0Zvcm1hdF87dGlja0Zvcm1hdF8gPSB4O3JldHVybiBheGlzO307YXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKHgpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW4pcmV0dXJuIGlubmVyVGlja1NpemU7aW5uZXJUaWNrU2l6ZSA9ICt4O291dGVyVGlja1NpemUgPSArYXJndW1lbnRzW24gLSAxXTtyZXR1cm4gYXhpczt9O2F4aXMuaW5uZXJUaWNrU2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpbm5lclRpY2tTaXplO2lubmVyVGlja1NpemUgPSAreDtyZXR1cm4gYXhpczt9O2F4aXMub3V0ZXJUaWNrU2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvdXRlclRpY2tTaXplO291dGVyVGlja1NpemUgPSAreDtyZXR1cm4gYXhpczt9O2F4aXMudGlja1BhZGRpbmcgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGlja1BhZGRpbmc7dGlja1BhZGRpbmcgPSAreDtyZXR1cm4gYXhpczt9O2F4aXMudGlja1N1YmRpdmlkZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggJiYgYXhpczt9O3JldHVybiBheGlzO307dmFyIGQzX3N2Z19heGlzRGVmYXVsdE9yaWVudD1cImJvdHRvbVwiLGQzX3N2Z19heGlzT3JpZW50cz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIGQzX3N2Z19heGlzWChzZWxlY3Rpb24seDAseDEpe3NlbGVjdGlvbi5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24oZCl7dmFyIHYwPXgwKGQpO3JldHVybiBcInRyYW5zbGF0ZShcIiArIChpc0Zpbml0ZSh2MCk/djA6eDEoZCkpICsgXCIsMClcIjt9KTt9ZnVuY3Rpb24gZDNfc3ZnX2F4aXNZKHNlbGVjdGlvbix5MCx5MSl7c2VsZWN0aW9uLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbihkKXt2YXIgdjA9eTAoZCk7cmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoaXNGaW5pdGUodjApP3YwOnkxKGQpKSArIFwiKVwiO30pO31kMy5zdmcuYnJ1c2ggPSBmdW5jdGlvbigpe3ZhciBldmVudD1kM19ldmVudERpc3BhdGNoKGJydXNoLFwiYnJ1c2hzdGFydFwiLFwiYnJ1c2hcIixcImJydXNoZW5kXCIpLHg9bnVsbCx5PW51bGwseEV4dGVudD1bMCwwXSx5RXh0ZW50PVswLDBdLHhFeHRlbnREb21haW4seUV4dGVudERvbWFpbix4Q2xhbXA9dHJ1ZSx5Q2xhbXA9dHJ1ZSxyZXNpemVzPWQzX3N2Z19icnVzaFJlc2l6ZXNbMF07ZnVuY3Rpb24gYnJ1c2goZyl7Zy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9ZDMuc2VsZWN0KHRoaXMpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLFwicmdiYSgwLDAsMCwwKVwiKS5vbihcIm1vdXNlZG93bi5icnVzaFwiLGJydXNoc3RhcnQpLm9uKFwidG91Y2hzdGFydC5icnVzaFwiLGJydXNoc3RhcnQpO3ZhciBiYWNrZ3JvdW5kPWcuc2VsZWN0QWxsKFwiLmJhY2tncm91bmRcIikuZGF0YShbMF0pO2JhY2tncm91bmQuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiYmFja2dyb3VuZFwiKS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKS5zdHlsZShcImN1cnNvclwiLFwiY3Jvc3NoYWlyXCIpO2cuc2VsZWN0QWxsKFwiLmV4dGVudFwiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiZXh0ZW50XCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJtb3ZlXCIpO3ZhciByZXNpemU9Zy5zZWxlY3RBbGwoXCIucmVzaXplXCIpLmRhdGEocmVzaXplcyxkM19pZGVudGl0eSk7cmVzaXplLmV4aXQoKS5yZW1vdmUoKTtyZXNpemUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKGQpe3JldHVybiBcInJlc2l6ZSBcIiArIGQ7fSkuc3R5bGUoXCJjdXJzb3JcIixmdW5jdGlvbihkKXtyZXR1cm4gZDNfc3ZnX2JydXNoQ3Vyc29yW2RdO30pLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIixmdW5jdGlvbihkKXtyZXR1cm4gKC9bZXddJC8udGVzdChkKT8tMzpudWxsKTt9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKGQpe3JldHVybiAoL15bbnNdLy50ZXN0KGQpPy0zOm51bGwpO30pLmF0dHIoXCJ3aWR0aFwiLDYpLmF0dHIoXCJoZWlnaHRcIiw2KS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKTtyZXNpemUuc3R5bGUoXCJkaXNwbGF5XCIsYnJ1c2guZW1wdHkoKT9cIm5vbmVcIjpudWxsKTt2YXIgZ1VwZGF0ZT1kMy50cmFuc2l0aW9uKGcpLGJhY2tncm91bmRVcGRhdGU9ZDMudHJhbnNpdGlvbihiYWNrZ3JvdW5kKSxyYW5nZTtpZih4KXtyYW5nZSA9IGQzX3NjYWxlUmFuZ2UoeCk7YmFja2dyb3VuZFVwZGF0ZS5hdHRyKFwieFwiLHJhbmdlWzBdKS5hdHRyKFwid2lkdGhcIixyYW5nZVsxXSAtIHJhbmdlWzBdKTtyZWRyYXdYKGdVcGRhdGUpO31pZih5KXtyYW5nZSA9IGQzX3NjYWxlUmFuZ2UoeSk7YmFja2dyb3VuZFVwZGF0ZS5hdHRyKFwieVwiLHJhbmdlWzBdKS5hdHRyKFwiaGVpZ2h0XCIscmFuZ2VbMV0gLSByYW5nZVswXSk7cmVkcmF3WShnVXBkYXRlKTt9cmVkcmF3KGdVcGRhdGUpO30pO31icnVzaC5ldmVudCA9IGZ1bmN0aW9uKGcpe2cuZWFjaChmdW5jdGlvbigpe3ZhciBldmVudF89ZXZlbnQub2YodGhpcyxhcmd1bWVudHMpLGV4dGVudDE9e3g6eEV4dGVudCx5OnlFeHRlbnQsaTp4RXh0ZW50RG9tYWluLGo6eUV4dGVudERvbWFpbn0sZXh0ZW50MD10aGlzLl9fY2hhcnRfXyB8fCBleHRlbnQxO3RoaXMuX19jaGFydF9fID0gZXh0ZW50MTtpZihkM190cmFuc2l0aW9uSW5oZXJpdElkKXtkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goXCJzdGFydC5icnVzaFwiLGZ1bmN0aW9uKCl7eEV4dGVudERvbWFpbiA9IGV4dGVudDAuaTt5RXh0ZW50RG9tYWluID0gZXh0ZW50MC5qO3hFeHRlbnQgPSBleHRlbnQwLng7eUV4dGVudCA9IGV4dGVudDAueTtldmVudF8oe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KTt9KS50d2VlbihcImJydXNoOmJydXNoXCIsZnVuY3Rpb24oKXt2YXIgeGk9ZDNfaW50ZXJwb2xhdGVBcnJheSh4RXh0ZW50LGV4dGVudDEueCkseWk9ZDNfaW50ZXJwb2xhdGVBcnJheSh5RXh0ZW50LGV4dGVudDEueSk7eEV4dGVudERvbWFpbiA9IHlFeHRlbnREb21haW4gPSBudWxsO3JldHVybiBmdW5jdGlvbih0KXt4RXh0ZW50ID0gZXh0ZW50MS54ID0geGkodCk7eUV4dGVudCA9IGV4dGVudDEueSA9IHlpKHQpO2V2ZW50Xyh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSk7fTt9KS5lYWNoKFwiZW5kLmJydXNoXCIsZnVuY3Rpb24oKXt4RXh0ZW50RG9tYWluID0gZXh0ZW50MS5pO3lFeHRlbnREb21haW4gPSBleHRlbnQxLmo7ZXZlbnRfKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KTtldmVudF8oe3R5cGU6XCJicnVzaGVuZFwifSk7fSk7fWVsc2Uge2V2ZW50Xyh7dHlwZTpcImJydXNoc3RhcnRcIn0pO2V2ZW50Xyh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSk7ZXZlbnRfKHt0eXBlOlwiYnJ1c2hlbmRcIn0pO319KTt9O2Z1bmN0aW9uIHJlZHJhdyhnKXtnLnNlbGVjdEFsbChcIi5yZXNpemVcIikuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKGQpe3JldHVybiBcInRyYW5zbGF0ZShcIiArIHhFeHRlbnRbKy9lJC8udGVzdChkKV0gKyBcIixcIiArIHlFeHRlbnRbKy9ecy8udGVzdChkKV0gKyBcIilcIjt9KTt9ZnVuY3Rpb24gcmVkcmF3WChnKXtnLnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInhcIix4RXh0ZW50WzBdKTtnLnNlbGVjdEFsbChcIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0XCIpLmF0dHIoXCJ3aWR0aFwiLHhFeHRlbnRbMV0gLSB4RXh0ZW50WzBdKTt9ZnVuY3Rpb24gcmVkcmF3WShnKXtnLnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInlcIix5RXh0ZW50WzBdKTtnLnNlbGVjdEFsbChcIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0XCIpLmF0dHIoXCJoZWlnaHRcIix5RXh0ZW50WzFdIC0geUV4dGVudFswXSk7fWZ1bmN0aW9uIGJydXNoc3RhcnQoKXt2YXIgdGFyZ2V0PXRoaXMsZXZlbnRUYXJnZXQ9ZDMuc2VsZWN0KGQzLmV2ZW50LnRhcmdldCksZXZlbnRfPWV2ZW50Lm9mKHRhcmdldCxhcmd1bWVudHMpLGc9ZDMuc2VsZWN0KHRhcmdldCkscmVzaXppbmc9ZXZlbnRUYXJnZXQuZGF0dW0oKSxyZXNpemluZ1g9IS9eKG58cykkLy50ZXN0KHJlc2l6aW5nKSAmJiB4LHJlc2l6aW5nWT0hL14oZXx3KSQvLnRlc3QocmVzaXppbmcpICYmIHksZHJhZ2dpbmc9ZXZlbnRUYXJnZXQuY2xhc3NlZChcImV4dGVudFwiKSxkcmFnUmVzdG9yZT1kM19ldmVudF9kcmFnU3VwcHJlc3ModGFyZ2V0KSxjZW50ZXIsb3JpZ2luPWQzLm1vdXNlKHRhcmdldCksb2Zmc2V0O3ZhciB3PWQzLnNlbGVjdChkM193aW5kb3codGFyZ2V0KSkub24oXCJrZXlkb3duLmJydXNoXCIsa2V5ZG93bikub24oXCJrZXl1cC5icnVzaFwiLGtleXVwKTtpZihkMy5ldmVudC5jaGFuZ2VkVG91Y2hlcyl7dy5vbihcInRvdWNobW92ZS5icnVzaFwiLGJydXNobW92ZSkub24oXCJ0b3VjaGVuZC5icnVzaFwiLGJydXNoZW5kKTt9ZWxzZSB7dy5vbihcIm1vdXNlbW92ZS5icnVzaFwiLGJydXNobW92ZSkub24oXCJtb3VzZXVwLmJydXNoXCIsYnJ1c2hlbmQpO31nLmludGVycnVwdCgpLnNlbGVjdEFsbChcIipcIikuaW50ZXJydXB0KCk7aWYoZHJhZ2dpbmcpe29yaWdpblswXSA9IHhFeHRlbnRbMF0gLSBvcmlnaW5bMF07b3JpZ2luWzFdID0geUV4dGVudFswXSAtIG9yaWdpblsxXTt9ZWxzZSBpZihyZXNpemluZyl7dmFyIGV4PSsvdyQvLnRlc3QocmVzaXppbmcpLGV5PSsvXm4vLnRlc3QocmVzaXppbmcpO29mZnNldCA9IFt4RXh0ZW50WzEgLSBleF0gLSBvcmlnaW5bMF0seUV4dGVudFsxIC0gZXldIC0gb3JpZ2luWzFdXTtvcmlnaW5bMF0gPSB4RXh0ZW50W2V4XTtvcmlnaW5bMV0gPSB5RXh0ZW50W2V5XTt9ZWxzZSBpZihkMy5ldmVudC5hbHRLZXkpY2VudGVyID0gb3JpZ2luLnNsaWNlKCk7Zy5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLnNlbGVjdEFsbChcIi5yZXNpemVcIikuc3R5bGUoXCJkaXNwbGF5XCIsbnVsbCk7ZDMuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLGV2ZW50VGFyZ2V0LnN0eWxlKFwiY3Vyc29yXCIpKTtldmVudF8oe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KTticnVzaG1vdmUoKTtmdW5jdGlvbiBrZXlkb3duKCl7aWYoZDMuZXZlbnQua2V5Q29kZSA9PSAzMil7aWYoIWRyYWdnaW5nKXtjZW50ZXIgPSBudWxsO29yaWdpblswXSAtPSB4RXh0ZW50WzFdO29yaWdpblsxXSAtPSB5RXh0ZW50WzFdO2RyYWdnaW5nID0gMjt9ZDNfZXZlbnRQcmV2ZW50RGVmYXVsdCgpO319ZnVuY3Rpb24ga2V5dXAoKXtpZihkMy5ldmVudC5rZXlDb2RlID09IDMyICYmIGRyYWdnaW5nID09IDIpe29yaWdpblswXSArPSB4RXh0ZW50WzFdO29yaWdpblsxXSArPSB5RXh0ZW50WzFdO2RyYWdnaW5nID0gMDtkM19ldmVudFByZXZlbnREZWZhdWx0KCk7fX1mdW5jdGlvbiBicnVzaG1vdmUoKXt2YXIgcG9pbnQ9ZDMubW91c2UodGFyZ2V0KSxtb3ZlZD1mYWxzZTtpZihvZmZzZXQpe3BvaW50WzBdICs9IG9mZnNldFswXTtwb2ludFsxXSArPSBvZmZzZXRbMV07fWlmKCFkcmFnZ2luZyl7aWYoZDMuZXZlbnQuYWx0S2V5KXtpZighY2VudGVyKWNlbnRlciA9IFsoeEV4dGVudFswXSArIHhFeHRlbnRbMV0pIC8gMiwoeUV4dGVudFswXSArIHlFeHRlbnRbMV0pIC8gMl07b3JpZ2luWzBdID0geEV4dGVudFsrKHBvaW50WzBdIDwgY2VudGVyWzBdKV07b3JpZ2luWzFdID0geUV4dGVudFsrKHBvaW50WzFdIDwgY2VudGVyWzFdKV07fWVsc2UgY2VudGVyID0gbnVsbDt9aWYocmVzaXppbmdYICYmIG1vdmUxKHBvaW50LHgsMCkpe3JlZHJhd1goZyk7bW92ZWQgPSB0cnVlO31pZihyZXNpemluZ1kgJiYgbW92ZTEocG9pbnQseSwxKSl7cmVkcmF3WShnKTttb3ZlZCA9IHRydWU7fWlmKG1vdmVkKXtyZWRyYXcoZyk7ZXZlbnRfKHt0eXBlOlwiYnJ1c2hcIixtb2RlOmRyYWdnaW5nP1wibW92ZVwiOlwicmVzaXplXCJ9KTt9fWZ1bmN0aW9uIG1vdmUxKHBvaW50LHNjYWxlLGkpe3ZhciByYW5nZT1kM19zY2FsZVJhbmdlKHNjYWxlKSxyMD1yYW5nZVswXSxyMT1yYW5nZVsxXSxwb3NpdGlvbj1vcmlnaW5baV0sZXh0ZW50PWk/eUV4dGVudDp4RXh0ZW50LHNpemU9ZXh0ZW50WzFdIC0gZXh0ZW50WzBdLG1pbixtYXg7aWYoZHJhZ2dpbmcpe3IwIC09IHBvc2l0aW9uO3IxIC09IHNpemUgKyBwb3NpdGlvbjt9bWluID0gKGk/eUNsYW1wOnhDbGFtcCk/TWF0aC5tYXgocjAsTWF0aC5taW4ocjEscG9pbnRbaV0pKTpwb2ludFtpXTtpZihkcmFnZ2luZyl7bWF4ID0gKG1pbiArPSBwb3NpdGlvbikgKyBzaXplO31lbHNlIHtpZihjZW50ZXIpcG9zaXRpb24gPSBNYXRoLm1heChyMCxNYXRoLm1pbihyMSwyICogY2VudGVyW2ldIC0gbWluKSk7aWYocG9zaXRpb24gPCBtaW4pe21heCA9IG1pbjttaW4gPSBwb3NpdGlvbjt9ZWxzZSB7bWF4ID0gcG9zaXRpb247fX1pZihleHRlbnRbMF0gIT0gbWluIHx8IGV4dGVudFsxXSAhPSBtYXgpe2lmKGkpeUV4dGVudERvbWFpbiA9IG51bGw7ZWxzZSB4RXh0ZW50RG9tYWluID0gbnVsbDtleHRlbnRbMF0gPSBtaW47ZXh0ZW50WzFdID0gbWF4O3JldHVybiB0cnVlO319ZnVuY3Rpb24gYnJ1c2hlbmQoKXticnVzaG1vdmUoKTtnLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5zZWxlY3RBbGwoXCIucmVzaXplXCIpLnN0eWxlKFwiZGlzcGxheVwiLGJydXNoLmVtcHR5KCk/XCJub25lXCI6bnVsbCk7ZDMuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLG51bGwpO3cub24oXCJtb3VzZW1vdmUuYnJ1c2hcIixudWxsKS5vbihcIm1vdXNldXAuYnJ1c2hcIixudWxsKS5vbihcInRvdWNobW92ZS5icnVzaFwiLG51bGwpLm9uKFwidG91Y2hlbmQuYnJ1c2hcIixudWxsKS5vbihcImtleWRvd24uYnJ1c2hcIixudWxsKS5vbihcImtleXVwLmJydXNoXCIsbnVsbCk7ZHJhZ1Jlc3RvcmUoKTtldmVudF8oe3R5cGU6XCJicnVzaGVuZFwifSk7fX1icnVzaC54ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHg7eCA9IHo7cmVzaXplcyA9IGQzX3N2Z19icnVzaFJlc2l6ZXNbIXggPDwgMSB8ICF5XTtyZXR1cm4gYnJ1c2g7fTticnVzaC55ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHk7eSA9IHo7cmVzaXplcyA9IGQzX3N2Z19icnVzaFJlc2l6ZXNbIXggPDwgMSB8ICF5XTtyZXR1cm4gYnJ1c2g7fTticnVzaC5jbGFtcCA9IGZ1bmN0aW9uKHope2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB4ICYmIHk/W3hDbGFtcCx5Q2xhbXBdOng/eENsYW1wOnk/eUNsYW1wOm51bGw7aWYoeCAmJiB5KXhDbGFtcCA9ICEhelswXSx5Q2xhbXAgPSAhIXpbMV07ZWxzZSBpZih4KXhDbGFtcCA9ICEhejtlbHNlIGlmKHkpeUNsYW1wID0gISF6O3JldHVybiBicnVzaDt9O2JydXNoLmV4dGVudCA9IGZ1bmN0aW9uKHope3ZhciB4MCx4MSx5MCx5MSx0O2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZih4KXtpZih4RXh0ZW50RG9tYWluKXt4MCA9IHhFeHRlbnREb21haW5bMF0seDEgPSB4RXh0ZW50RG9tYWluWzFdO31lbHNlIHt4MCA9IHhFeHRlbnRbMF0seDEgPSB4RXh0ZW50WzFdO2lmKHguaW52ZXJ0KXgwID0geC5pbnZlcnQoeDApLHgxID0geC5pbnZlcnQoeDEpO2lmKHgxIDwgeDApdCA9IHgwLHgwID0geDEseDEgPSB0O319aWYoeSl7aWYoeUV4dGVudERvbWFpbil7eTAgPSB5RXh0ZW50RG9tYWluWzBdLHkxID0geUV4dGVudERvbWFpblsxXTt9ZWxzZSB7eTAgPSB5RXh0ZW50WzBdLHkxID0geUV4dGVudFsxXTtpZih5LmludmVydCl5MCA9IHkuaW52ZXJ0KHkwKSx5MSA9IHkuaW52ZXJ0KHkxKTtpZih5MSA8IHkwKXQgPSB5MCx5MCA9IHkxLHkxID0gdDt9fXJldHVybiB4ICYmIHk/W1t4MCx5MF0sW3gxLHkxXV06eD9beDAseDFdOnkgJiYgW3kwLHkxXTt9aWYoeCl7eDAgPSB6WzBdLHgxID0gelsxXTtpZih5KXgwID0geDBbMF0seDEgPSB4MVswXTt4RXh0ZW50RG9tYWluID0gW3gwLHgxXTtpZih4LmludmVydCl4MCA9IHgoeDApLHgxID0geCh4MSk7aWYoeDEgPCB4MCl0ID0geDAseDAgPSB4MSx4MSA9IHQ7aWYoeDAgIT0geEV4dGVudFswXSB8fCB4MSAhPSB4RXh0ZW50WzFdKXhFeHRlbnQgPSBbeDAseDFdO31pZih5KXt5MCA9IHpbMF0seTEgPSB6WzFdO2lmKHgpeTAgPSB5MFsxXSx5MSA9IHkxWzFdO3lFeHRlbnREb21haW4gPSBbeTAseTFdO2lmKHkuaW52ZXJ0KXkwID0geSh5MCkseTEgPSB5KHkxKTtpZih5MSA8IHkwKXQgPSB5MCx5MCA9IHkxLHkxID0gdDtpZih5MCAhPSB5RXh0ZW50WzBdIHx8IHkxICE9IHlFeHRlbnRbMV0peUV4dGVudCA9IFt5MCx5MV07fXJldHVybiBicnVzaDt9O2JydXNoLmNsZWFyID0gZnVuY3Rpb24oKXtpZighYnJ1c2guZW1wdHkoKSl7eEV4dGVudCA9IFswLDBdLHlFeHRlbnQgPSBbMCwwXTt4RXh0ZW50RG9tYWluID0geUV4dGVudERvbWFpbiA9IG51bGw7fXJldHVybiBicnVzaDt9O2JydXNoLmVtcHR5ID0gZnVuY3Rpb24oKXtyZXR1cm4gISF4ICYmIHhFeHRlbnRbMF0gPT0geEV4dGVudFsxXSB8fCAhIXkgJiYgeUV4dGVudFswXSA9PSB5RXh0ZW50WzFdO307cmV0dXJuIGQzLnJlYmluZChicnVzaCxldmVudCxcIm9uXCIpO307dmFyIGQzX3N2Z19icnVzaEN1cnNvcj17bjpcIm5zLXJlc2l6ZVwiLGU6XCJldy1yZXNpemVcIixzOlwibnMtcmVzaXplXCIsdzpcImV3LXJlc2l6ZVwiLG53OlwibndzZS1yZXNpemVcIixuZTpcIm5lc3ctcmVzaXplXCIsc2U6XCJud3NlLXJlc2l6ZVwiLHN3OlwibmVzdy1yZXNpemVcIn07dmFyIGQzX3N2Z19icnVzaFJlc2l6ZXM9W1tcIm5cIixcImVcIixcInNcIixcIndcIixcIm53XCIsXCJuZVwiLFwic2VcIixcInN3XCJdLFtcImVcIixcIndcIl0sW1wiblwiLFwic1wiXSxbXV07dmFyIGQzX3RpbWVfZm9ybWF0PWQzX3RpbWUuZm9ybWF0ID0gZDNfbG9jYWxlX2VuVVMudGltZUZvcm1hdDt2YXIgZDNfdGltZV9mb3JtYXRVdGM9ZDNfdGltZV9mb3JtYXQudXRjO3ZhciBkM190aW1lX2Zvcm1hdElzbz1kM190aW1lX2Zvcm1hdFV0YyhcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiKTtkM190aW1lX2Zvcm1hdC5pc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAmJiArbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIik/ZDNfdGltZV9mb3JtYXRJc29OYXRpdmU6ZDNfdGltZV9mb3JtYXRJc287ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXRJc29OYXRpdmUoZGF0ZSl7cmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTt9ZDNfdGltZV9mb3JtYXRJc29OYXRpdmUucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcpe3ZhciBkYXRlPW5ldyBEYXRlKHN0cmluZyk7cmV0dXJuIGlzTmFOKGRhdGUpP251bGw6ZGF0ZTt9O2QzX3RpbWVfZm9ybWF0SXNvTmF0aXZlLnRvU3RyaW5nID0gZDNfdGltZV9mb3JtYXRJc28udG9TdHJpbmc7ZDNfdGltZS5zZWNvbmQgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe3JldHVybiBuZXcgZDNfZGF0ZShNYXRoLmZsb29yKGRhdGUgLyAxZTMpICogMWUzKTt9LGZ1bmN0aW9uKGRhdGUsb2Zmc2V0KXtkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBNYXRoLmZsb29yKG9mZnNldCkgKiAxZTMpO30sZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUuZ2V0U2Vjb25kcygpO30pO2QzX3RpbWUuc2Vjb25kcyA9IGQzX3RpbWUuc2Vjb25kLnJhbmdlO2QzX3RpbWUuc2Vjb25kcy51dGMgPSBkM190aW1lLnNlY29uZC51dGMucmFuZ2U7ZDNfdGltZS5taW51dGUgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe3JldHVybiBuZXcgZDNfZGF0ZShNYXRoLmZsb29yKGRhdGUgLyA2ZTQpICogNmU0KTt9LGZ1bmN0aW9uKGRhdGUsb2Zmc2V0KXtkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBNYXRoLmZsb29yKG9mZnNldCkgKiA2ZTQpO30sZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO30pO2QzX3RpbWUubWludXRlcyA9IGQzX3RpbWUubWludXRlLnJhbmdlO2QzX3RpbWUubWludXRlcy51dGMgPSBkM190aW1lLm1pbnV0ZS51dGMucmFuZ2U7ZDNfdGltZS5ob3VyID0gZDNfdGltZV9pbnRlcnZhbChmdW5jdGlvbihkYXRlKXt2YXIgdGltZXpvbmU9ZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjA7cmV0dXJuIG5ldyBkM19kYXRlKChNYXRoLmZsb29yKGRhdGUgLyAzNmU1IC0gdGltZXpvbmUpICsgdGltZXpvbmUpICogMzZlNSk7fSxmdW5jdGlvbihkYXRlLG9mZnNldCl7ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogMzZlNSk7fSxmdW5jdGlvbihkYXRlKXtyZXR1cm4gZGF0ZS5nZXRIb3VycygpO30pO2QzX3RpbWUuaG91cnMgPSBkM190aW1lLmhvdXIucmFuZ2U7ZDNfdGltZS5ob3Vycy51dGMgPSBkM190aW1lLmhvdXIudXRjLnJhbmdlO2QzX3RpbWUubW9udGggPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe2RhdGUgPSBkM190aW1lLmRheShkYXRlKTtkYXRlLnNldERhdGUoMSk7cmV0dXJuIGRhdGU7fSxmdW5jdGlvbihkYXRlLG9mZnNldCl7ZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBvZmZzZXQpO30sZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUuZ2V0TW9udGgoKTt9KTtkM190aW1lLm1vbnRocyA9IGQzX3RpbWUubW9udGgucmFuZ2U7ZDNfdGltZS5tb250aHMudXRjID0gZDNfdGltZS5tb250aC51dGMucmFuZ2U7ZnVuY3Rpb24gZDNfdGltZV9zY2FsZShsaW5lYXIsbWV0aG9kcyxmb3JtYXQpe2Z1bmN0aW9uIHNjYWxlKHgpe3JldHVybiBsaW5lYXIoeCk7fXNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHgpe3JldHVybiBkM190aW1lX3NjYWxlRGF0ZShsaW5lYXIuaW52ZXJ0KHgpKTt9O3NjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBsaW5lYXIuZG9tYWluKCkubWFwKGQzX3RpbWVfc2NhbGVEYXRlKTtsaW5lYXIuZG9tYWluKHgpO3JldHVybiBzY2FsZTt9O2Z1bmN0aW9uIHRpY2tNZXRob2QoZXh0ZW50LGNvdW50KXt2YXIgc3Bhbj1leHRlbnRbMV0gLSBleHRlbnRbMF0sdGFyZ2V0PXNwYW4gLyBjb3VudCxpPWQzLmJpc2VjdChkM190aW1lX3NjYWxlU3RlcHMsdGFyZ2V0KTtyZXR1cm4gaSA9PSBkM190aW1lX3NjYWxlU3RlcHMubGVuZ3RoP1ttZXRob2RzLnllYXIsZDNfc2NhbGVfbGluZWFyVGlja1JhbmdlKGV4dGVudC5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGQgLyAzMTUzNmU2O30pLGNvdW50KVsyXV06IWk/W2QzX3RpbWVfc2NhbGVNaWxsaXNlY29uZHMsZDNfc2NhbGVfbGluZWFyVGlja1JhbmdlKGV4dGVudCxjb3VudClbMl1dOm1ldGhvZHNbdGFyZ2V0IC8gZDNfdGltZV9zY2FsZVN0ZXBzW2kgLSAxXSA8IGQzX3RpbWVfc2NhbGVTdGVwc1tpXSAvIHRhcmdldD9pIC0gMTppXTt9c2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLHNraXApe3ZhciBkb21haW49c2NhbGUuZG9tYWluKCksZXh0ZW50PWQzX3NjYWxlRXh0ZW50KGRvbWFpbiksbWV0aG9kPWludGVydmFsID09IG51bGw/dGlja01ldGhvZChleHRlbnQsMTApOnR5cGVvZiBpbnRlcnZhbCA9PT0gXCJudW1iZXJcIiAmJiB0aWNrTWV0aG9kKGV4dGVudCxpbnRlcnZhbCk7aWYobWV0aG9kKWludGVydmFsID0gbWV0aG9kWzBdLHNraXAgPSBtZXRob2RbMV07ZnVuY3Rpb24gc2tpcHBlZChkYXRlKXtyZXR1cm4gIWlzTmFOKGRhdGUpICYmICFpbnRlcnZhbC5yYW5nZShkYXRlLGQzX3RpbWVfc2NhbGVEYXRlKCtkYXRlICsgMSksc2tpcCkubGVuZ3RoO31yZXR1cm4gc2NhbGUuZG9tYWluKGQzX3NjYWxlX25pY2UoZG9tYWluLHNraXAgPiAxP3tmbG9vcjpmdW5jdGlvbiBmbG9vcihkYXRlKXt3aGlsZShza2lwcGVkKGRhdGUgPSBpbnRlcnZhbC5mbG9vcihkYXRlKSkpIGRhdGUgPSBkM190aW1lX3NjYWxlRGF0ZShkYXRlIC0gMSk7cmV0dXJuIGRhdGU7fSxjZWlsOmZ1bmN0aW9uIGNlaWwoZGF0ZSl7d2hpbGUoc2tpcHBlZChkYXRlID0gaW50ZXJ2YWwuY2VpbChkYXRlKSkpIGRhdGUgPSBkM190aW1lX3NjYWxlRGF0ZSgrZGF0ZSArIDEpO3JldHVybiBkYXRlO319OmludGVydmFsKSk7fTtzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLHNraXApe3ZhciBleHRlbnQ9ZDNfc2NhbGVFeHRlbnQoc2NhbGUuZG9tYWluKCkpLG1ldGhvZD1pbnRlcnZhbCA9PSBudWxsP3RpY2tNZXRob2QoZXh0ZW50LDEwKTp0eXBlb2YgaW50ZXJ2YWwgPT09IFwibnVtYmVyXCI/dGlja01ldGhvZChleHRlbnQsaW50ZXJ2YWwpOiFpbnRlcnZhbC5yYW5nZSAmJiBbe3JhbmdlOmludGVydmFsfSxza2lwXTtpZihtZXRob2QpaW50ZXJ2YWwgPSBtZXRob2RbMF0sc2tpcCA9IG1ldGhvZFsxXTtyZXR1cm4gaW50ZXJ2YWwucmFuZ2UoZXh0ZW50WzBdLGQzX3RpbWVfc2NhbGVEYXRlKCtleHRlbnRbMV0gKyAxKSxza2lwIDwgMT8xOnNraXApO307c2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKCl7cmV0dXJuIGZvcm1hdDt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM190aW1lX3NjYWxlKGxpbmVhci5jb3B5KCksbWV0aG9kcyxmb3JtYXQpO307cmV0dXJuIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpO31mdW5jdGlvbiBkM190aW1lX3NjYWxlRGF0ZSh0KXtyZXR1cm4gbmV3IERhdGUodCk7fXZhciBkM190aW1lX3NjYWxlU3RlcHM9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XTt2YXIgZDNfdGltZV9zY2FsZUxvY2FsTWV0aG9kcz1bW2QzX3RpbWUuc2Vjb25kLDFdLFtkM190aW1lLnNlY29uZCw1XSxbZDNfdGltZS5zZWNvbmQsMTVdLFtkM190aW1lLnNlY29uZCwzMF0sW2QzX3RpbWUubWludXRlLDFdLFtkM190aW1lLm1pbnV0ZSw1XSxbZDNfdGltZS5taW51dGUsMTVdLFtkM190aW1lLm1pbnV0ZSwzMF0sW2QzX3RpbWUuaG91ciwxXSxbZDNfdGltZS5ob3VyLDNdLFtkM190aW1lLmhvdXIsNl0sW2QzX3RpbWUuaG91ciwxMl0sW2QzX3RpbWUuZGF5LDFdLFtkM190aW1lLmRheSwyXSxbZDNfdGltZS53ZWVrLDFdLFtkM190aW1lLm1vbnRoLDFdLFtkM190aW1lLm1vbnRoLDNdLFtkM190aW1lLnllYXIsMV1dO3ZhciBkM190aW1lX3NjYWxlTG9jYWxGb3JtYXQ9ZDNfdGltZV9mb3JtYXQubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldE1pbGxpc2Vjb25kcygpO31dLFtcIjolU1wiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFNlY29uZHMoKTt9XSxbXCIlSTolTVwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldE1pbnV0ZXMoKTt9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldEhvdXJzKCk7fV0sW1wiJWEgJWRcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXREYXkoKSAmJiBkLmdldERhdGUoKSAhPSAxO31dLFtcIiViICVkXCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ2V0RGF0ZSgpICE9IDE7fV0sW1wiJUJcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXRNb250aCgpO31dLFtcIiVZXCIsZDNfdHJ1ZV1dKTt2YXIgZDNfdGltZV9zY2FsZU1pbGxpc2Vjb25kcz17cmFuZ2U6ZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsc3RvcCxzdGVwKXtyZXR1cm4gZDMucmFuZ2UoTWF0aC5jZWlsKHN0YXJ0IC8gc3RlcCkgKiBzdGVwLCtzdG9wLHN0ZXApLm1hcChkM190aW1lX3NjYWxlRGF0ZSk7fSxmbG9vcjpkM19pZGVudGl0eSxjZWlsOmQzX2lkZW50aXR5fTtkM190aW1lX3NjYWxlTG9jYWxNZXRob2RzLnllYXIgPSBkM190aW1lLnllYXI7ZDNfdGltZS5zY2FsZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3RpbWVfc2NhbGUoZDMuc2NhbGUubGluZWFyKCksZDNfdGltZV9zY2FsZUxvY2FsTWV0aG9kcyxkM190aW1lX3NjYWxlTG9jYWxGb3JtYXQpO307dmFyIGQzX3RpbWVfc2NhbGVVdGNNZXRob2RzPWQzX3RpbWVfc2NhbGVMb2NhbE1ldGhvZHMubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBbbVswXS51dGMsbVsxXV07fSk7dmFyIGQzX3RpbWVfc2NhbGVVdGNGb3JtYXQ9ZDNfdGltZV9mb3JtYXRVdGMubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ01pbGxpc2Vjb25kcygpO31dLFtcIjolU1wiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ1NlY29uZHMoKTt9XSxbXCIlSTolTVwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ01pbnV0ZXMoKTt9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ0hvdXJzKCk7fV0sW1wiJWEgJWRcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXRVVENEYXkoKSAmJiBkLmdldFVUQ0RhdGUoKSAhPSAxO31dLFtcIiViICVkXCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ2V0VVRDRGF0ZSgpICE9IDE7fV0sW1wiJUJcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXRVVENNb250aCgpO31dLFtcIiVZXCIsZDNfdHJ1ZV1dKTtkM190aW1lX3NjYWxlVXRjTWV0aG9kcy55ZWFyID0gZDNfdGltZS55ZWFyLnV0YztkM190aW1lLnNjYWxlLnV0YyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3RpbWVfc2NhbGUoZDMuc2NhbGUubGluZWFyKCksZDNfdGltZV9zY2FsZVV0Y01ldGhvZHMsZDNfdGltZV9zY2FsZVV0Y0Zvcm1hdCk7fTtkMy50ZXh0ID0gZDNfeGhyVHlwZShmdW5jdGlvbihyZXF1ZXN0KXtyZXR1cm4gcmVxdWVzdC5yZXNwb25zZVRleHQ7fSk7ZDMuanNvbiA9IGZ1bmN0aW9uKHVybCxjYWxsYmFjayl7cmV0dXJuIGQzX3hocih1cmwsXCJhcHBsaWNhdGlvbi9qc29uXCIsZDNfanNvbixjYWxsYmFjayk7fTtmdW5jdGlvbiBkM19qc29uKHJlcXVlc3Qpe3JldHVybiBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTt9ZDMuaHRtbCA9IGZ1bmN0aW9uKHVybCxjYWxsYmFjayl7cmV0dXJuIGQzX3hocih1cmwsXCJ0ZXh0L2h0bWxcIixkM19odG1sLGNhbGxiYWNrKTt9O2Z1bmN0aW9uIGQzX2h0bWwocmVxdWVzdCl7dmFyIHJhbmdlPWQzX2RvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cmFuZ2Uuc2VsZWN0Tm9kZShkM19kb2N1bWVudC5ib2R5KTtyZXR1cm4gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHJlcXVlc3QucmVzcG9uc2VUZXh0KTt9ZDMueG1sID0gZDNfeGhyVHlwZShmdW5jdGlvbihyZXF1ZXN0KXtyZXR1cm4gcmVxdWVzdC5yZXNwb25zZVhNTDt9KTtpZih0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZClkZWZpbmUodGhpcy5kMyA9IGQzKTtlbHNlIGlmKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgbW9kdWxlLmV4cG9ydHMpbW9kdWxlLmV4cG9ydHMgPSBkMztlbHNlIHRoaXMuZDMgPSBkMzt9KSgpO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2QzL2QzLmpzXG4gKiogbW9kdWxlIGlkID0gMjE0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _d3 = __webpack_require__(215);\n\nvar _d32 = _interopRequireDefault(_d3);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar LineChart = (function (_React$Component) {\n _inherits(LineChart, _React$Component);\n\n function LineChart() {\n _classCallCheck(this, LineChart);\n\n _get(Object.getPrototypeOf(LineChart.prototype), 'constructor', this).call(this);\n }\n\n _createClass(LineChart, [{\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n var graph = _d32['default'].select('#' + this.props.id);\n var lineData = this.props.data;\n var margin = {\n bottom: 10,\n top: 10\n };\n var width = this.props.width;\n var height = this.props.height;\n\n var xRange = _d32['default'].scale.linear().range([0, width]).domain([_d32['default'].min(lineData, function (d, i) {\n return i;\n }), _d32['default'].max(lineData, function (d, i) {\n return i;\n })]);\n\n var yRange = _d32['default'].scale.linear().range([height - margin.bottom - margin.top, 0]).domain([_d32['default'].min(lineData, function (d) {\n return d;\n }), _d32['default'].max(lineData, function (d) {\n return d;\n })]);\n\n var lineFunc = _d32['default'].svg.line().x(function (d, i) {\n return xRange(i);\n }).y(function (d) {\n return yRange(d);\n }).interpolate('basis');\n\n var areaFunc = _d32['default'].svg.area().x(function (d, i) {\n return xRange(i);\n }).y0(height).y1(function (d) {\n return yRange(d);\n }).interpolate('basis');\n\n var points = lineFunc(lineData);\n var area = areaFunc(lineData);\n\n graph.select('g').remove();\n\n graph.append('g').append('svg:path').attr('class', 'graph--area').attr('d', area).attr('transform', 'translate(0,' + margin.top + ')');;\n\n graph.select('g').append('svg:path').attr('class', 'graph--line').attr('d', points).attr('transform', 'translate(0,' + margin.top + ')');\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'svg',\n { className: 'graph', id: this.props.id },\n _react2['default'].createElement(\n 'defs',\n null,\n _react2['default'].createElement(\n 'linearGradient',\n {\n id: this.props.slug + '--gradient',\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%' },\n _react2['default'].createElement('stop', { className: this.props.slug + '--gradient--top', offset: '0%' }),\n _react2['default'].createElement('stop', { className: this.props.slug + '--gradient--bottom', offset: '100%' })\n )\n )\n );\n }\n }]);\n\n return LineChart;\n})(_react2['default'].Component);\n\nexports['default'] = LineChart;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL0xpbmVDaGFydC5qcz8yMDY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHdDQUF3QztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixzREFBc0QsK0RBQStEO0FBQ3JILHNEQUFzRCxvRUFBb0U7QUFDMUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9kMyA9IHJlcXVpcmUoJ2QzJyk7XG5cbnZhciBfZDMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZDMpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBMaW5lQ2hhcnQgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKExpbmVDaGFydCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTGluZUNoYXJ0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaW5lQ2hhcnQpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoTGluZUNoYXJ0LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGluZUNoYXJ0LCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBncmFwaCA9IF9kMzJbJ2RlZmF1bHQnXS5zZWxlY3QoJyMnICsgdGhpcy5wcm9wcy5pZCk7XG4gICAgICB2YXIgbGluZURhdGEgPSB0aGlzLnByb3BzLmRhdGE7XG4gICAgICB2YXIgbWFyZ2luID0ge1xuICAgICAgICBib3R0b206IDEwLFxuICAgICAgICB0b3A6IDEwXG4gICAgICB9O1xuICAgICAgdmFyIHdpZHRoID0gdGhpcy5wcm9wcy53aWR0aDtcbiAgICAgIHZhciBoZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodDtcblxuICAgICAgdmFyIHhSYW5nZSA9IF9kMzJbJ2RlZmF1bHQnXS5zY2FsZS5saW5lYXIoKS5yYW5nZShbMCwgd2lkdGhdKS5kb21haW4oW19kMzJbJ2RlZmF1bHQnXS5taW4obGluZURhdGEsIGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfSksIF9kMzJbJ2RlZmF1bHQnXS5tYXgobGluZURhdGEsIGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfSldKTtcblxuICAgICAgdmFyIHlSYW5nZSA9IF9kMzJbJ2RlZmF1bHQnXS5zY2FsZS5saW5lYXIoKS5yYW5nZShbaGVpZ2h0IC0gbWFyZ2luLmJvdHRvbSAtIG1hcmdpbi50b3AsIDBdKS5kb21haW4oW19kMzJbJ2RlZmF1bHQnXS5taW4obGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSksIF9kMzJbJ2RlZmF1bHQnXS5tYXgobGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSldKTtcblxuICAgICAgdmFyIGxpbmVGdW5jID0gX2QzMlsnZGVmYXVsdCddLnN2Zy5saW5lKCkueChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICByZXR1cm4geFJhbmdlKGkpO1xuICAgICAgfSkueShmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4geVJhbmdlKGQpO1xuICAgICAgfSkuaW50ZXJwb2xhdGUoJ2Jhc2lzJyk7XG5cbiAgICAgIHZhciBhcmVhRnVuYyA9IF9kMzJbJ2RlZmF1bHQnXS5zdmcuYXJlYSgpLngoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgcmV0dXJuIHhSYW5nZShpKTtcbiAgICAgIH0pLnkwKGhlaWdodCkueTEoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgcmV0dXJuIHlSYW5nZShkKTtcbiAgICAgIH0pLmludGVycG9sYXRlKCdiYXNpcycpO1xuXG4gICAgICB2YXIgcG9pbnRzID0gbGluZUZ1bmMobGluZURhdGEpO1xuICAgICAgdmFyIGFyZWEgPSBhcmVhRnVuYyhsaW5lRGF0YSk7XG5cbiAgICAgIGdyYXBoLnNlbGVjdCgnZycpLnJlbW92ZSgpO1xuXG4gICAgICBncmFwaC5hcHBlbmQoJ2cnKS5hcHBlbmQoJ3N2ZzpwYXRoJykuYXR0cignY2xhc3MnLCAnZ3JhcGgtLWFyZWEnKS5hdHRyKCdkJywgYXJlYSkuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBtYXJnaW4udG9wICsgJyknKTs7XG5cbiAgICAgIGdyYXBoLnNlbGVjdCgnZycpLmFwcGVuZCgnc3ZnOnBhdGgnKS5hdHRyKCdjbGFzcycsICdncmFwaC0tbGluZScpLmF0dHIoJ2QnLCBwb2ludHMpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgbWFyZ2luLnRvcCArICcpJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3ZnJyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdncmFwaCcsIGlkOiB0aGlzLnByb3BzLmlkIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkZWZzJyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpbmVhckdyYWRpZW50JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuc2x1ZyArICctLWdyYWRpZW50JyxcbiAgICAgICAgICAgICAgeDE6ICcwJScsXG4gICAgICAgICAgICAgIHkxOiAnMCUnLFxuICAgICAgICAgICAgICB4MjogJzAlJyxcbiAgICAgICAgICAgICAgeTI6ICcxMDAlJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoJ3N0b3AnLCB7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy5zbHVnICsgJy0tZ3JhZGllbnQtLXRvcCcsIG9mZnNldDogJzAlJyB9KSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdzdG9wJywgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMuc2x1ZyArICctLWdyYWRpZW50LS1ib3R0b20nLCBvZmZzZXQ6ICcxMDAlJyB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGluZUNoYXJ0O1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IExpbmVDaGFydDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL0xpbmVDaGFydC5qc1xuICoqIG1vZHVsZSBpZCA9IDIxNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ }, /* 215 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _iconsIconJs = __webpack_require__(161);\n\nvar _iconsIconJs2 = _interopRequireDefault(_iconsIconJs);\n\nvar _StatusFilter = __webpack_require__(216);\n\nvar _StatusFilter2 = _interopRequireDefault(_StatusFilter);\n\nvar _storesTorrentFilterStore = __webpack_require__(194);\n\nvar _storesTorrentFilterStore2 = _interopRequireDefault(_storesTorrentFilterStore);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['getFilters', 'handleClick', 'onStatusFilterChange'];\n\nvar StatusFilters = (function (_React$Component) {\n _inherits(StatusFilters, _React$Component);\n\n function StatusFilters() {\n var _this = this;\n\n _classCallCheck(this, StatusFilters);\n\n _get(Object.getPrototypeOf(StatusFilters.prototype), 'constructor', this).call(this);\n\n this.state = {\n statusFilter: _storesTorrentFilterStore2['default'].getStatusFilter()\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(StatusFilters, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesTorrentFilterStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesTorrentFilterStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n }\n }, {\n key: 'handleClick',\n value: function handleClick(filter) {\n _actionsUIActions2['default'].setTorrentStatusFilter(filter);\n }\n }, {\n key: 'onStatusFilterChange',\n value: function onStatusFilterChange() {\n this.setState({\n statusFilter: _storesTorrentFilterStore2['default'].getStatusFilter()\n });\n }\n }, {\n key: 'getFilters',\n value: function getFilters() {\n var _this2 = this;\n\n var filters = [{\n label: 'All',\n slug: 'all',\n icon: 'all'\n }, {\n label: 'Downloading',\n slug: 'downloading',\n icon: 'downloadSmall'\n }, {\n label: 'Completed',\n slug: 'completed',\n icon: 'completed'\n }, {\n label: 'Active',\n slug: 'active',\n icon: 'active'\n }, {\n label: 'Inactive',\n slug: 'inactive',\n icon: 'inactive'\n }, {\n label: 'Error',\n slug: 'error',\n icon: 'error'\n }];\n\n var filterElements = filters.map(function (filter) {\n return _react2['default'].createElement(_StatusFilter2['default'], { handleClick: _this2.handleClick,\n key: filter.slug,\n icon: filter.icon,\n isActive: filter.slug === _this2.state.statusFilter,\n name: filter.label,\n slug: filter.slug });\n });\n\n return filterElements;\n }\n }, {\n key: 'render',\n value: function render() {\n var filters = this.getFilters();\n\n return _react2['default'].createElement(\n 'ul',\n { className: 'status-filter sidebar__item' },\n _react2['default'].createElement(\n 'li',\n { className: 'status-filter__item status-filter__item--heading' },\n 'Filter by Status'\n ),\n filters\n );\n }\n }]);\n\n return StatusFilters;\n})(_react2['default'].Component);\n\nexports['default'] = StatusFilters;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1N0YXR1c0ZpbHRlcnMuanM/ZDEwNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QixPQUFPOztBQUVQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLDJDQUEyQztBQUNwRDtBQUNBO0FBQ0EsV0FBVyxnRUFBZ0U7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBfaWNvbnNJY29uSnMgPSByZXF1aXJlKCcuLi9pY29ucy9JY29uLmpzJyk7XG5cbnZhciBfaWNvbnNJY29uSnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uSnMpO1xuXG52YXIgX1N0YXR1c0ZpbHRlciA9IHJlcXVpcmUoJy4vU3RhdHVzRmlsdGVyJyk7XG5cbnZhciBfU3RhdHVzRmlsdGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1N0YXR1c0ZpbHRlcik7XG5cbnZhciBfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlID0gcmVxdWlyZSgnLi4vLi4vc3RvcmVzL1RvcnJlbnRGaWx0ZXJTdG9yZScpO1xuXG52YXIgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUpO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9hY3Rpb25zL1VJQWN0aW9ucycpO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc1VJQWN0aW9ucyk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydnZXRGaWx0ZXJzJywgJ2hhbmRsZUNsaWNrJywgJ29uU3RhdHVzRmlsdGVyQ2hhbmdlJ107XG5cbnZhciBTdGF0dXNGaWx0ZXJzID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdGF0dXNGaWx0ZXJzLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdGF0dXNGaWx0ZXJzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhdHVzRmlsdGVycyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTdGF0dXNGaWx0ZXJzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzRmlsdGVyOiBfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmdldFN0YXR1c0ZpbHRlcigpXG4gICAgfTtcblxuICAgIG1ldGhvZHNUb0JpbmQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdGF0dXNGaWx0ZXJzLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UU19GSUxURVJfU1RBVFVTX0NIQU5HRSwgdGhpcy5vblN0YXR1c0ZpbHRlckNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUyWydkZWZhdWx0J10udW5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfVE9SUkVOVFNfRklMVEVSX1NUQVRVU19DSEFOR0UsIHRoaXMub25TdGF0dXNGaWx0ZXJDaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZUNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZmlsdGVyKSB7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5zZXRUb3JyZW50U3RhdHVzRmlsdGVyKGZpbHRlcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25TdGF0dXNGaWx0ZXJDaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblN0YXR1c0ZpbHRlckNoYW5nZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXNGaWx0ZXI6IF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUyWydkZWZhdWx0J10uZ2V0U3RhdHVzRmlsdGVyKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldEZpbHRlcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWx0ZXJzKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBmaWx0ZXJzID0gW3tcbiAgICAgICAgbGFiZWw6ICdBbGwnLFxuICAgICAgICBzbHVnOiAnYWxsJyxcbiAgICAgICAgaWNvbjogJ2FsbCdcbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6ICdEb3dubG9hZGluZycsXG4gICAgICAgIHNsdWc6ICdkb3dubG9hZGluZycsXG4gICAgICAgIGljb246ICdkb3dubG9hZFNtYWxsJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0NvbXBsZXRlZCcsXG4gICAgICAgIHNsdWc6ICdjb21wbGV0ZWQnLFxuICAgICAgICBpY29uOiAnY29tcGxldGVkJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0FjdGl2ZScsXG4gICAgICAgIHNsdWc6ICdhY3RpdmUnLFxuICAgICAgICBpY29uOiAnYWN0aXZlJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0luYWN0aXZlJyxcbiAgICAgICAgc2x1ZzogJ2luYWN0aXZlJyxcbiAgICAgICAgaWNvbjogJ2luYWN0aXZlJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0Vycm9yJyxcbiAgICAgICAgc2x1ZzogJ2Vycm9yJyxcbiAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgICAgfV07XG5cbiAgICAgIHZhciBmaWx0ZXJFbGVtZW50cyA9IGZpbHRlcnMubWFwKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9TdGF0dXNGaWx0ZXIyWydkZWZhdWx0J10sIHsgaGFuZGxlQ2xpY2s6IF90aGlzMi5oYW5kbGVDbGljayxcbiAgICAgICAgICBrZXk6IGZpbHRlci5zbHVnLFxuICAgICAgICAgIGljb246IGZpbHRlci5pY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiBmaWx0ZXIuc2x1ZyA9PT0gX3RoaXMyLnN0YXRlLnN0YXR1c0ZpbHRlcixcbiAgICAgICAgICBuYW1lOiBmaWx0ZXIubGFiZWwsXG4gICAgICAgICAgc2x1ZzogZmlsdGVyLnNsdWcgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZpbHRlckVsZW1lbnRzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzKCk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ3VsJyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdzdGF0dXMtZmlsdGVyIHNpZGViYXJfX2l0ZW0nIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdsaScsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdzdGF0dXMtZmlsdGVyX19pdGVtIHN0YXR1cy1maWx0ZXJfX2l0ZW0tLWhlYWRpbmcnIH0sXG4gICAgICAgICAgJ0ZpbHRlciBieSBTdGF0dXMnXG4gICAgICAgICksXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YXR1c0ZpbHRlcnM7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gU3RhdHVzRmlsdGVycztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1N0YXR1c0ZpbHRlcnMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMTVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\"use strict\";!(function(){var d3={version:\"3.5.7\"};var d3_arraySlice=[].slice,d3_array=function d3_array(list){return d3_arraySlice.call(list);};var d3_document=this.document;function d3_documentElement(node){return node && (node.ownerDocument || node.document || node).documentElement;}function d3_window(node){return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);}if(d3_document){try{d3_array(d3_document.documentElement.childNodes)[0].nodeType;}catch(e) {d3_array = function(list){var i=list.length,array=new Array(i);while(i--) array[i] = list[i];return array;};}}if(!Date.now)Date.now = function(){return +new Date();};if(d3_document){try{d3_document.createElement(\"DIV\").style.setProperty(\"opacity\",0,\"\");}catch(error) {var d3_element_prototype=this.Element.prototype,d3_element_setAttribute=d3_element_prototype.setAttribute,d3_element_setAttributeNS=d3_element_prototype.setAttributeNS,d3_style_prototype=this.CSSStyleDeclaration.prototype,d3_style_setProperty=d3_style_prototype.setProperty;d3_element_prototype.setAttribute = function(name,value){d3_element_setAttribute.call(this,name,value + \"\");};d3_element_prototype.setAttributeNS = function(space,local,value){d3_element_setAttributeNS.call(this,space,local,value + \"\");};d3_style_prototype.setProperty = function(name,value,priority){d3_style_setProperty.call(this,name,value + \"\",priority);};}}d3.ascending = d3_ascending;function d3_ascending(a,b){return a < b?-1:a > b?1:a >= b?0:NaN;}d3.descending = function(a,b){return b < a?-1:b > a?1:b >= a?0:NaN;};d3.min = function(array,f){var i=-1,n=array.length,a,b;if(arguments.length === 1){while(++i < n) if((b = array[i]) != null && b >= b){a = b;break;}while(++i < n) if((b = array[i]) != null && a > b)a = b;}else {while(++i < n) if((b = f.call(array,array[i],i)) != null && b >= b){a = b;break;}while(++i < n) if((b = f.call(array,array[i],i)) != null && a > b)a = b;}return a;};d3.max = function(array,f){var i=-1,n=array.length,a,b;if(arguments.length === 1){while(++i < n) if((b = array[i]) != null && b >= b){a = b;break;}while(++i < n) if((b = array[i]) != null && b > a)a = b;}else {while(++i < n) if((b = f.call(array,array[i],i)) != null && b >= b){a = b;break;}while(++i < n) if((b = f.call(array,array[i],i)) != null && b > a)a = b;}return a;};d3.extent = function(array,f){var i=-1,n=array.length,a,b,c;if(arguments.length === 1){while(++i < n) if((b = array[i]) != null && b >= b){a = c = b;break;}while(++i < n) if((b = array[i]) != null){if(a > b)a = b;if(c < b)c = b;}}else {while(++i < n) if((b = f.call(array,array[i],i)) != null && b >= b){a = c = b;break;}while(++i < n) if((b = f.call(array,array[i],i)) != null){if(a > b)a = b;if(c < b)c = b;}}return [a,c];};function d3_number(x){return x === null?NaN:+x;}function d3_numeric(x){return !isNaN(x);}d3.sum = function(array,f){var s=0,n=array.length,a,i=-1;if(arguments.length === 1){while(++i < n) if(d3_numeric(a = +array[i]))s += a;}else {while(++i < n) if(d3_numeric(a = +f.call(array,array[i],i)))s += a;}return s;};d3.mean = function(array,f){var s=0,n=array.length,a,i=-1,j=n;if(arguments.length === 1){while(++i < n) if(d3_numeric(a = d3_number(array[i])))s += a;else --j;}else {while(++i < n) if(d3_numeric(a = d3_number(f.call(array,array[i],i))))s += a;else --j;}if(j)return s / j;};d3.quantile = function(values,p){var H=(values.length - 1) * p + 1,h=Math.floor(H),v=+values[h - 1],e=H - h;return e?v + e * (values[h] - v):v;};d3.median = function(array,f){var numbers=[],n=array.length,a,i=-1;if(arguments.length === 1){while(++i < n) if(d3_numeric(a = d3_number(array[i])))numbers.push(a);}else {while(++i < n) if(d3_numeric(a = d3_number(f.call(array,array[i],i))))numbers.push(a);}if(numbers.length)return d3.quantile(numbers.sort(d3_ascending),.5);};d3.variance = function(array,f){var n=array.length,m=0,a,d,s=0,i=-1,j=0;if(arguments.length === 1){while(++i < n) {if(d3_numeric(a = d3_number(array[i]))){d = a - m;m += d / ++j;s += d * (a - m);}}}else {while(++i < n) {if(d3_numeric(a = d3_number(f.call(array,array[i],i)))){d = a - m;m += d / ++j;s += d * (a - m);}}}if(j > 1)return s / (j - 1);};d3.deviation = function(){var v=d3.variance.apply(this,arguments);return v?Math.sqrt(v):v;};function d3_bisector(compare){return {left:function left(a,x,lo,hi){if(arguments.length < 3)lo = 0;if(arguments.length < 4)hi = a.length;while(lo < hi) {var mid=lo + hi >>> 1;if(compare(a[mid],x) < 0)lo = mid + 1;else hi = mid;}return lo;},right:function right(a,x,lo,hi){if(arguments.length < 3)lo = 0;if(arguments.length < 4)hi = a.length;while(lo < hi) {var mid=lo + hi >>> 1;if(compare(a[mid],x) > 0)hi = mid;else lo = mid + 1;}return lo;}};}var d3_bisect=d3_bisector(d3_ascending);d3.bisectLeft = d3_bisect.left;d3.bisect = d3.bisectRight = d3_bisect.right;d3.bisector = function(f){return d3_bisector(f.length === 1?function(d,x){return d3_ascending(f(d),x);}:f);};d3.shuffle = function(array,i0,i1){if((m = arguments.length) < 3){i1 = array.length;if(m < 2)i0 = 0;}var m=i1 - i0,t,i;while(m) {i = Math.random() * m-- | 0;t = array[m + i0],array[m + i0] = array[i + i0],array[i + i0] = t;}return array;};d3.permute = function(array,indexes){var i=indexes.length,permutes=new Array(i);while(i--) permutes[i] = array[indexes[i]];return permutes;};d3.pairs = function(array){var i=0,n=array.length - 1,p0,p1=array[0],pairs=new Array(n < 0?0:n);while(i < n) pairs[i] = [p0 = p1,p1 = array[++i]];return pairs;};d3.zip = function(){if(!(n = arguments.length))return [];for(var i=-1,m=d3.min(arguments,d3_zipLength),zips=new Array(m);++i < m;) {for(var j=-1,n,zip=zips[i] = new Array(n);++j < n;) {zip[j] = arguments[j][i];}}return zips;};function d3_zipLength(d){return d.length;}d3.transpose = function(matrix){return d3.zip.apply(d3,matrix);};d3.keys = function(map){var keys=[];for(var key in map) keys.push(key);return keys;};d3.values = function(map){var values=[];for(var key in map) values.push(map[key]);return values;};d3.entries = function(map){var entries=[];for(var key in map) entries.push({key:key,value:map[key]});return entries;};d3.merge = function(arrays){var n=arrays.length,m,i=-1,j=0,merged,array;while(++i < n) j += arrays[i].length;merged = new Array(j);while(--n >= 0) {array = arrays[n];m = array.length;while(--m >= 0) {merged[--j] = array[m];}}return merged;};var abs=Math.abs;d3.range = function(start,stop,step){if(arguments.length < 3){step = 1;if(arguments.length < 2){stop = start;start = 0;}}if((stop - start) / step === Infinity)throw new Error(\"infinite range\");var range=[],k=d3_range_integerScale(abs(step)),i=-1,j;start *= k,stop *= k,step *= k;if(step < 0)while((j = start + step * ++i) > stop) range.push(j / k);else while((j = start + step * ++i) < stop) range.push(j / k);return range;};function d3_range_integerScale(x){var k=1;while(x * k % 1) k *= 10;return k;}function d3_class(ctor,properties){for(var key in properties) {Object.defineProperty(ctor.prototype,key,{value:properties[key],enumerable:false});}}d3.map = function(object,f){var map=new d3_Map();if(object instanceof d3_Map){object.forEach(function(key,value){map.set(key,value);});}else if(Array.isArray(object)){var i=-1,n=object.length,o;if(arguments.length === 1)while(++i < n) map.set(i,object[i]);else while(++i < n) map.set(f.call(object,o = object[i],i),o);}else {for(var key in object) map.set(key,object[key]);}return map;};function d3_Map(){this._ = Object.create(null);}var d3_map_proto=\"__proto__\",d3_map_zero=\"\\x00\";d3_class(d3_Map,{has:d3_map_has,get:function get(key){return this._[d3_map_escape(key)];},set:function set(key,value){return this._[d3_map_escape(key)] = value;},remove:d3_map_remove,keys:d3_map_keys,values:function values(){var values=[];for(var key in this._) values.push(this._[key]);return values;},entries:function entries(){var entries=[];for(var key in this._) entries.push({key:d3_map_unescape(key),value:this._[key]});return entries;},size:d3_map_size,empty:d3_map_empty,forEach:function forEach(f){for(var key in this._) f.call(this,d3_map_unescape(key),this._[key]);}});function d3_map_escape(key){return (key += \"\") === d3_map_proto || key[0] === d3_map_zero?d3_map_zero + key:key;}function d3_map_unescape(key){return (key += \"\")[0] === d3_map_zero?key.slice(1):key;}function d3_map_has(key){return d3_map_escape(key) in this._;}function d3_map_remove(key){return (key = d3_map_escape(key)) in this._ && delete this._[key];}function d3_map_keys(){var keys=[];for(var key in this._) keys.push(d3_map_unescape(key));return keys;}function d3_map_size(){var size=0;for(var key in this._) ++size;return size;}function d3_map_empty(){for(var key in this._) return false;return true;}d3.nest = function(){var nest={},keys=[],sortKeys=[],sortValues,rollup;function map(mapType,array,depth){if(depth >= keys.length)return rollup?rollup.call(nest,array):sortValues?array.sort(sortValues):array;var i=-1,n=array.length,key=keys[depth++],keyValue,object,setter,valuesByKey=new d3_Map(),values;while(++i < n) {if(values = valuesByKey.get(keyValue = key(object = array[i]))){values.push(object);}else {valuesByKey.set(keyValue,[object]);}}if(mapType){object = mapType();setter = function(keyValue,values){object.set(keyValue,map(mapType,values,depth));};}else {object = {};setter = function(keyValue,values){object[keyValue] = map(mapType,values,depth);};}valuesByKey.forEach(setter);return object;}function entries(map,depth){if(depth >= keys.length)return map;var array=[],sortKey=sortKeys[depth++];map.forEach(function(key,keyMap){array.push({key:key,values:entries(keyMap,depth)});});return sortKey?array.sort(function(a,b){return sortKey(a.key,b.key);}):array;}nest.map = function(array,mapType){return map(mapType,array,0);};nest.entries = function(array){return entries(map(d3.map,array,0),0);};nest.key = function(d){keys.push(d);return nest;};nest.sortKeys = function(order){sortKeys[keys.length - 1] = order;return nest;};nest.sortValues = function(order){sortValues = order;return nest;};nest.rollup = function(f){rollup = f;return nest;};return nest;};d3.set = function(array){var set=new d3_Set();if(array)for(var i=0,n=array.length;i < n;++i) set.add(array[i]);return set;};function d3_Set(){this._ = Object.create(null);}d3_class(d3_Set,{has:d3_map_has,add:function add(key){this._[d3_map_escape(key += \"\")] = true;return key;},remove:d3_map_remove,values:d3_map_keys,size:d3_map_size,empty:d3_map_empty,forEach:function forEach(f){for(var key in this._) f.call(this,d3_map_unescape(key));}});d3.behavior = {};function d3_identity(d){return d;}d3.rebind = function(target,source){var i=1,n=arguments.length,method;while(++i < n) target[method = arguments[i]] = d3_rebind(target,source,source[method]);return target;};function d3_rebind(target,source,method){return function(){var value=method.apply(source,arguments);return value === source?target:value;};}function d3_vendorSymbol(object,name){if(name in object)return name;name = name.charAt(0).toUpperCase() + name.slice(1);for(var i=0,n=d3_vendorPrefixes.length;i < n;++i) {var prefixName=d3_vendorPrefixes[i] + name;if(prefixName in object)return prefixName;}}var d3_vendorPrefixes=[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];function d3_noop(){}d3.dispatch = function(){var dispatch=new d3_dispatch(),i=-1,n=arguments.length;while(++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);return dispatch;};function d3_dispatch(){}d3_dispatch.prototype.on = function(type,listener){var i=type.indexOf(\".\"),name=\"\";if(i >= 0){name = type.slice(i + 1);type = type.slice(0,i);}if(type)return arguments.length < 2?this[type].on(name):this[type].on(name,listener);if(arguments.length === 2){if(listener == null)for(type in this) {if(this.hasOwnProperty(type))this[type].on(name,null);}return this;}};function d3_dispatch_event(dispatch){var listeners=[],listenerByName=new d3_Map();function event(){var z=listeners,i=-1,n=z.length,l;while(++i < n) if(l = z[i].on)l.apply(this,arguments);return dispatch;}event.on = function(name,listener){var l=listenerByName.get(name),i;if(arguments.length < 2)return l && l.on;if(l){l.on = null;listeners = listeners.slice(0,i = listeners.indexOf(l)).concat(listeners.slice(i + 1));listenerByName.remove(name);}if(listener)listeners.push(listenerByName.set(name,{on:listener}));return dispatch;};return event;}d3.event = null;function d3_eventPreventDefault(){d3.event.preventDefault();}function d3_eventSource(){var e=d3.event,s;while(s = e.sourceEvent) e = s;return e;}function d3_eventDispatch(target){var dispatch=new d3_dispatch(),i=0,n=arguments.length;while(++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);dispatch.of = function(thiz,argumentz){return function(e1){try{var e0=e1.sourceEvent = d3.event;e1.target = target;d3.event = e1;dispatch[e1.type].apply(thiz,argumentz);}finally {d3.event = e0;}};};return dispatch;}d3.requote = function(s){return s.replace(d3_requote_re,\"\\\\$&\");};var d3_requote_re=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;var d3_subclass=({}).__proto__?function(object,prototype){object.__proto__ = prototype;}:function(object,prototype){for(var property in prototype) object[property] = prototype[property];};function d3_selection(groups){d3_subclass(groups,d3_selectionPrototype);return groups;}var d3_select=function d3_select(s,n){return n.querySelector(s);},d3_selectAll=function d3_selectAll(s,n){return n.querySelectorAll(s);},_d3_selectMatches=function d3_selectMatches(n,s){var d3_selectMatcher=n.matches || n[d3_vendorSymbol(n,\"matchesSelector\")];_d3_selectMatches = function(n,s){return d3_selectMatcher.call(n,s);};return _d3_selectMatches(n,s);};if(typeof Sizzle === \"function\"){d3_select = function(s,n){return Sizzle(s,n)[0] || null;};d3_selectAll = Sizzle;_d3_selectMatches = Sizzle.matchesSelector;}d3.selection = function(){return d3.select(d3_document.documentElement);};var d3_selectionPrototype=d3.selection.prototype = [];d3_selectionPrototype.select = function(selector){var subgroups=[],subgroup,subnode,group,node;selector = d3_selection_selector(selector);for(var j=-1,m=this.length;++j < m;) {subgroups.push(subgroup = []);subgroup.parentNode = (group = this[j]).parentNode;for(var i=-1,n=group.length;++i < n;) {if(node = group[i]){subgroup.push(subnode = selector.call(node,node.__data__,i,j));if(subnode && \"__data__\" in node)subnode.__data__ = node.__data__;}else {subgroup.push(null);}}}return d3_selection(subgroups);};function d3_selection_selector(selector){return typeof selector === \"function\"?selector:function(){return d3_select(selector,this);};}d3_selectionPrototype.selectAll = function(selector){var subgroups=[],subgroup,node;selector = d3_selection_selectorAll(selector);for(var j=-1,m=this.length;++j < m;) {for(var group=this[j],i=-1,n=group.length;++i < n;) {if(node = group[i]){subgroups.push(subgroup = d3_array(selector.call(node,node.__data__,i,j)));subgroup.parentNode = node;}}}return d3_selection(subgroups);};function d3_selection_selectorAll(selector){return typeof selector === \"function\"?selector:function(){return d3_selectAll(selector,this);};}var d3_nsPrefix={svg:\"http://www.w3.org/2000/svg\",xhtml:\"http://www.w3.org/1999/xhtml\",xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};d3.ns = {prefix:d3_nsPrefix,qualify:function qualify(name){var i=name.indexOf(\":\"),prefix=name;if(i >= 0 && (prefix = name.slice(0,i)) !== \"xmlns\")name = name.slice(i + 1);return d3_nsPrefix.hasOwnProperty(prefix)?{space:d3_nsPrefix[prefix],local:name}:name;}};d3_selectionPrototype.attr = function(name,value){if(arguments.length < 2){if(typeof name === \"string\"){var node=this.node();name = d3.ns.qualify(name);return name.local?node.getAttributeNS(name.space,name.local):node.getAttribute(name);}for(value in name) this.each(d3_selection_attr(value,name[value]));return this;}return this.each(d3_selection_attr(name,value));};function d3_selection_attr(name,value){name = d3.ns.qualify(name);function attrNull(){this.removeAttribute(name);}function attrNullNS(){this.removeAttributeNS(name.space,name.local);}function attrConstant(){this.setAttribute(name,value);}function attrConstantNS(){this.setAttributeNS(name.space,name.local,value);}function attrFunction(){var x=value.apply(this,arguments);if(x == null)this.removeAttribute(name);else this.setAttribute(name,x);}function attrFunctionNS(){var x=value.apply(this,arguments);if(x == null)this.removeAttributeNS(name.space,name.local);else this.setAttributeNS(name.space,name.local,x);}return value == null?name.local?attrNullNS:attrNull:typeof value === \"function\"?name.local?attrFunctionNS:attrFunction:name.local?attrConstantNS:attrConstant;}function d3_collapse(s){return s.trim().replace(/\\s+/g,\" \");}d3_selectionPrototype.classed = function(name,value){if(arguments.length < 2){if(typeof name === \"string\"){var node=this.node(),n=(name = d3_selection_classes(name)).length,i=-1;if(value = node.classList){while(++i < n) if(!value.contains(name[i]))return false;}else {value = node.getAttribute(\"class\");while(++i < n) if(!d3_selection_classedRe(name[i]).test(value))return false;}return true;}for(value in name) this.each(d3_selection_classed(value,name[value]));return this;}return this.each(d3_selection_classed(name,value));};function d3_selection_classedRe(name){return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\",\"g\");}function d3_selection_classes(name){return (name + \"\").trim().split(/^|\\s+/);}function d3_selection_classed(name,value){name = d3_selection_classes(name).map(d3_selection_classedName);var n=name.length;function classedConstant(){var i=-1;while(++i < n) name[i](this,value);}function classedFunction(){var i=-1,x=value.apply(this,arguments);while(++i < n) name[i](this,x);}return typeof value === \"function\"?classedFunction:classedConstant;}function d3_selection_classedName(name){var re=d3_selection_classedRe(name);return function(node,value){if(c = node.classList)return value?c.add(name):c.remove(name);var c=node.getAttribute(\"class\") || \"\";if(value){re.lastIndex = 0;if(!re.test(c))node.setAttribute(\"class\",d3_collapse(c + \" \" + name));}else {node.setAttribute(\"class\",d3_collapse(c.replace(re,\" \")));}};}d3_selectionPrototype.style = function(name,value,priority){var n=arguments.length;if(n < 3){if(typeof name !== \"string\"){if(n < 2)value = \"\";for(priority in name) this.each(d3_selection_style(priority,name[priority],value));return this;}if(n < 2){var node=this.node();return d3_window(node).getComputedStyle(node,null).getPropertyValue(name);}priority = \"\";}return this.each(d3_selection_style(name,value,priority));};function d3_selection_style(name,value,priority){function styleNull(){this.style.removeProperty(name);}function styleConstant(){this.style.setProperty(name,value,priority);}function styleFunction(){var x=value.apply(this,arguments);if(x == null)this.style.removeProperty(name);else this.style.setProperty(name,x,priority);}return value == null?styleNull:typeof value === \"function\"?styleFunction:styleConstant;}d3_selectionPrototype.property = function(name,value){if(arguments.length < 2){if(typeof name === \"string\")return this.node()[name];for(value in name) this.each(d3_selection_property(value,name[value]));return this;}return this.each(d3_selection_property(name,value));};function d3_selection_property(name,value){function propertyNull(){delete this[name];}function propertyConstant(){this[name] = value;}function propertyFunction(){var x=value.apply(this,arguments);if(x == null)delete this[name];else this[name] = x;}return value == null?propertyNull:typeof value === \"function\"?propertyFunction:propertyConstant;}d3_selectionPrototype.text = function(value){return arguments.length?this.each(typeof value === \"function\"?function(){var v=value.apply(this,arguments);this.textContent = v == null?\"\":v;}:value == null?function(){this.textContent = \"\";}:function(){this.textContent = value;}):this.node().textContent;};d3_selectionPrototype.html = function(value){return arguments.length?this.each(typeof value === \"function\"?function(){var v=value.apply(this,arguments);this.innerHTML = v == null?\"\":v;}:value == null?function(){this.innerHTML = \"\";}:function(){this.innerHTML = value;}):this.node().innerHTML;};d3_selectionPrototype.append = function(name){name = d3_selection_creator(name);return this.select(function(){return this.appendChild(name.apply(this,arguments));});};function d3_selection_creator(name){function create(){var document=this.ownerDocument,namespace=this.namespaceURI;return namespace?document.createElementNS(namespace,name):document.createElement(name);}function createNS(){return this.ownerDocument.createElementNS(name.space,name.local);}return typeof name === \"function\"?name:(name = d3.ns.qualify(name)).local?createNS:create;}d3_selectionPrototype.insert = function(name,before){name = d3_selection_creator(name);before = d3_selection_selector(before);return this.select(function(){return this.insertBefore(name.apply(this,arguments),before.apply(this,arguments) || null);});};d3_selectionPrototype.remove = function(){return this.each(d3_selectionRemove);};function d3_selectionRemove(){var parent=this.parentNode;if(parent)parent.removeChild(this);}d3_selectionPrototype.data = function(value,key){var i=-1,n=this.length,group,node;if(!arguments.length){value = new Array(n = (group = this[0]).length);while(++i < n) {if(node = group[i]){value[i] = node.__data__;}}return value;}function bind(group,groupData){var i,n=group.length,m=groupData.length,n0=Math.min(n,m),updateNodes=new Array(m),enterNodes=new Array(m),exitNodes=new Array(n),node,nodeData;if(key){var nodeByKeyValue=new d3_Map(),keyValues=new Array(n),keyValue;for(i = -1;++i < n;) {if(node = group[i]){if(nodeByKeyValue.has(keyValue = key.call(node,node.__data__,i))){exitNodes[i] = node;}else {nodeByKeyValue.set(keyValue,node);}keyValues[i] = keyValue;}}for(i = -1;++i < m;) {if(!(node = nodeByKeyValue.get(keyValue = key.call(groupData,nodeData = groupData[i],i)))){enterNodes[i] = d3_selection_dataNode(nodeData);}else if(node !== true){updateNodes[i] = node;node.__data__ = nodeData;}nodeByKeyValue.set(keyValue,true);}for(i = -1;++i < n;) {if(i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true){exitNodes[i] = group[i];}}}else {for(i = -1;++i < n0;) {node = group[i];nodeData = groupData[i];if(node){node.__data__ = nodeData;updateNodes[i] = node;}else {enterNodes[i] = d3_selection_dataNode(nodeData);}}for(;i < m;++i) {enterNodes[i] = d3_selection_dataNode(groupData[i]);}for(;i < n;++i) {exitNodes[i] = group[i];}}enterNodes.update = updateNodes;enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;enter.push(enterNodes);update.push(updateNodes);exit.push(exitNodes);}var enter=d3_selection_enter([]),update=d3_selection([]),exit=d3_selection([]);if(typeof value === \"function\"){while(++i < n) {bind(group = this[i],value.call(group,group.parentNode.__data__,i));}}else {while(++i < n) {bind(group = this[i],value);}}update.enter = function(){return enter;};update.exit = function(){return exit;};return update;};function d3_selection_dataNode(data){return {__data__:data};}d3_selectionPrototype.datum = function(value){return arguments.length?this.property(\"__data__\",value):this.property(\"__data__\");};d3_selectionPrototype.filter = function(filter){var subgroups=[],subgroup,group,node;if(typeof filter !== \"function\")filter = d3_selection_filter(filter);for(var j=0,m=this.length;j < m;j++) {subgroups.push(subgroup = []);subgroup.parentNode = (group = this[j]).parentNode;for(var i=0,n=group.length;i < n;i++) {if((node = group[i]) && filter.call(node,node.__data__,i,j)){subgroup.push(node);}}}return d3_selection(subgroups);};function d3_selection_filter(selector){return function(){return _d3_selectMatches(this,selector);};}d3_selectionPrototype.order = function(){for(var j=-1,m=this.length;++j < m;) {for(var group=this[j],i=group.length - 1,next=group[i],node;--i >= 0;) {if(node = group[i]){if(next && next !== node.nextSibling)next.parentNode.insertBefore(node,next);next = node;}}}return this;};d3_selectionPrototype.sort = function(comparator){comparator = d3_selection_sortComparator.apply(this,arguments);for(var j=-1,m=this.length;++j < m;) this[j].sort(comparator);return this.order();};function d3_selection_sortComparator(comparator){if(!arguments.length)comparator = d3_ascending;return function(a,b){return a && b?comparator(a.__data__,b.__data__):!a - !b;};}d3_selectionPrototype.each = function(callback){return d3_selection_each(this,function(node,i,j){callback.call(node,node.__data__,i,j);});};function d3_selection_each(groups,callback){for(var j=0,m=groups.length;j < m;j++) {for(var group=groups[j],i=0,n=group.length,node;i < n;i++) {if(node = group[i])callback(node,i,j);}}return groups;}d3_selectionPrototype.call = function(callback){var args=d3_array(arguments);callback.apply(args[0] = this,args);return this;};d3_selectionPrototype.empty = function(){return !this.node();};d3_selectionPrototype.node = function(){for(var j=0,m=this.length;j < m;j++) {for(var group=this[j],i=0,n=group.length;i < n;i++) {var node=group[i];if(node)return node;}}return null;};d3_selectionPrototype.size = function(){var n=0;d3_selection_each(this,function(){++n;});return n;};function d3_selection_enter(selection){d3_subclass(selection,d3_selection_enterPrototype);return selection;}var d3_selection_enterPrototype=[];d3.selection.enter = d3_selection_enter;d3.selection.enter.prototype = d3_selection_enterPrototype;d3_selection_enterPrototype.append = d3_selectionPrototype.append;d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;d3_selection_enterPrototype.node = d3_selectionPrototype.node;d3_selection_enterPrototype.call = d3_selectionPrototype.call;d3_selection_enterPrototype.size = d3_selectionPrototype.size;d3_selection_enterPrototype.select = function(selector){var subgroups=[],subgroup,subnode,upgroup,group,node;for(var j=-1,m=this.length;++j < m;) {upgroup = (group = this[j]).update;subgroups.push(subgroup = []);subgroup.parentNode = group.parentNode;for(var i=-1,n=group.length;++i < n;) {if(node = group[i]){subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode,node.__data__,i,j));subnode.__data__ = node.__data__;}else {subgroup.push(null);}}}return d3_selection(subgroups);};d3_selection_enterPrototype.insert = function(name,before){if(arguments.length < 2)before = d3_selection_enterInsertBefore(this);return d3_selectionPrototype.insert.call(this,name,before);};function d3_selection_enterInsertBefore(enter){var i0,j0;return function(d,i,j){var group=enter[j].update,n=group.length,node;if(j != j0)j0 = j,i0 = 0;if(i >= i0)i0 = i + 1;while(!(node = group[i0]) && ++i0 < n);return node;};}d3.select = function(node){var group;if(typeof node === \"string\"){group = [d3_select(node,d3_document)];group.parentNode = d3_document.documentElement;}else {group = [node];group.parentNode = d3_documentElement(node);}return d3_selection([group]);};d3.selectAll = function(nodes){var group;if(typeof nodes === \"string\"){group = d3_array(d3_selectAll(nodes,d3_document));group.parentNode = d3_document.documentElement;}else {group = d3_array(nodes);group.parentNode = null;}return d3_selection([group]);};d3_selectionPrototype.on = function(type,listener,capture){var n=arguments.length;if(n < 3){if(typeof type !== \"string\"){if(n < 2)listener = false;for(capture in type) this.each(d3_selection_on(capture,type[capture],listener));return this;}if(n < 2)return (n = this.node()[\"__on\" + type]) && n._;capture = false;}return this.each(d3_selection_on(type,listener,capture));};function d3_selection_on(type,listener,capture){var name=\"__on\" + type,i=type.indexOf(\".\"),wrap=d3_selection_onListener;if(i > 0)type = type.slice(0,i);var filter=d3_selection_onFilters.get(type);if(filter)type = filter,wrap = d3_selection_onFilter;function onRemove(){var l=this[name];if(l){this.removeEventListener(type,l,l.$);delete this[name];}}function onAdd(){var l=wrap(listener,d3_array(arguments));onRemove.call(this);this.addEventListener(type,this[name] = l,l.$ = capture);l._ = listener;}function removeAll(){var re=new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"),match;for(var name in this) {if(match = name.match(re)){var l=this[name];this.removeEventListener(match[1],l,l.$);delete this[name];}}}return i?listener?onAdd:onRemove:listener?d3_noop:removeAll;}var d3_selection_onFilters=d3.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});if(d3_document){d3_selection_onFilters.forEach(function(k){if(\"on\" + k in d3_document)d3_selection_onFilters.remove(k);});}function d3_selection_onListener(listener,argumentz){return function(e){var o=d3.event;d3.event = e;argumentz[0] = this.__data__;try{listener.apply(this,argumentz);}finally {d3.event = o;}};}function d3_selection_onFilter(listener,argumentz){var l=d3_selection_onListener(listener,argumentz);return function(e){var target=this,related=e.relatedTarget;if(!related || related !== target && !(related.compareDocumentPosition(target) & 8)){l.call(target,e);}};}var d3_event_dragSelect,d3_event_dragId=0;function d3_event_dragSuppress(node){var name=\".dragsuppress-\" + ++d3_event_dragId,click=\"click\" + name,w=d3.select(d3_window(node)).on(\"touchmove\" + name,d3_eventPreventDefault).on(\"dragstart\" + name,d3_eventPreventDefault).on(\"selectstart\" + name,d3_eventPreventDefault);if(d3_event_dragSelect == null){d3_event_dragSelect = \"onselectstart\" in node?false:d3_vendorSymbol(node.style,\"userSelect\");}if(d3_event_dragSelect){var style=d3_documentElement(node).style,select=style[d3_event_dragSelect];style[d3_event_dragSelect] = \"none\";}return function(suppressClick){w.on(name,null);if(d3_event_dragSelect)style[d3_event_dragSelect] = select;if(suppressClick){var off=function off(){w.on(click,null);};w.on(click,function(){d3_eventPreventDefault();off();},true);setTimeout(off,0);}};}d3.mouse = function(container){return d3_mousePoint(container,d3_eventSource());};var d3_mouse_bug44083=this.navigator && /WebKit/.test(this.navigator.userAgent)?-1:0;function d3_mousePoint(container,e){if(e.changedTouches)e = e.changedTouches[0];var svg=container.ownerSVGElement || container;if(svg.createSVGPoint){var point=svg.createSVGPoint();if(d3_mouse_bug44083 < 0){var window=d3_window(container);if(window.scrollX || window.scrollY){svg = d3.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\");var ctm=svg[0][0].getScreenCTM();d3_mouse_bug44083 = !(ctm.f || ctm.e);svg.remove();}}if(d3_mouse_bug44083)point.x = e.pageX,point.y = e.pageY;else point.x = e.clientX,point.y = e.clientY;point = point.matrixTransform(container.getScreenCTM().inverse());return [point.x,point.y];}var rect=container.getBoundingClientRect();return [e.clientX - rect.left - container.clientLeft,e.clientY - rect.top - container.clientTop];}d3.touch = function(container,touches,identifier){if(arguments.length < 3)identifier = touches,touches = d3_eventSource().changedTouches;if(touches)for(var i=0,n=touches.length,touch;i < n;++i) {if((touch = touches[i]).identifier === identifier){return d3_mousePoint(container,touch);}}};d3.behavior.drag = function(){var event=d3_eventDispatch(drag,\"drag\",\"dragstart\",\"dragend\"),origin=null,mousedown=dragstart(d3_noop,d3.mouse,d3_window,\"mousemove\",\"mouseup\"),touchstart=dragstart(d3_behavior_dragTouchId,d3.touch,d3_identity,\"touchmove\",\"touchend\");function drag(){this.on(\"mousedown.drag\",mousedown).on(\"touchstart.drag\",touchstart);}function dragstart(id,position,subject,move,end){return function(){var that=this,target=d3.event.target,parent=that.parentNode,dispatch=event.of(that,arguments),dragged=0,dragId=id(),dragName=\".drag\" + (dragId == null?\"\":\"-\" + dragId),dragOffset,dragSubject=d3.select(subject(target)).on(move + dragName,moved).on(end + dragName,ended),dragRestore=d3_event_dragSuppress(target),position0=position(parent,dragId);if(origin){dragOffset = origin.apply(that,arguments);dragOffset = [dragOffset.x - position0[0],dragOffset.y - position0[1]];}else {dragOffset = [0,0];}dispatch({type:\"dragstart\"});function moved(){var position1=position(parent,dragId),dx,dy;if(!position1)return;dx = position1[0] - position0[0];dy = position1[1] - position0[1];dragged |= dx | dy;position0 = position1;dispatch({type:\"drag\",x:position1[0] + dragOffset[0],y:position1[1] + dragOffset[1],dx:dx,dy:dy});}function ended(){if(!position(parent,dragId))return;dragSubject.on(move + dragName,null).on(end + dragName,null);dragRestore(dragged && d3.event.target === target);dispatch({type:\"dragend\"});}};}drag.origin = function(x){if(!arguments.length)return origin;origin = x;return drag;};return d3.rebind(drag,event,\"on\");};function d3_behavior_dragTouchId(){return d3.event.changedTouches[0].identifier;}d3.touches = function(container,touches){if(arguments.length < 2)touches = d3_eventSource().touches;return touches?d3_array(touches).map(function(touch){var point=d3_mousePoint(container,touch);point.identifier = touch.identifier;return point;}):[];};var ε=1e-6,ε2=ε * ε,π=Math.PI,τ=2 * π,τε=τ - ε,halfπ=π / 2,d3_radians=π / 180,d3_degrees=180 / π;function d3_sgn(x){return x > 0?1:x < 0?-1:0;}function d3_cross2d(a,b,c){return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);}function d3_acos(x){return x > 1?0:x < -1?π:Math.acos(x);}function d3_asin(x){return x > 1?halfπ:x < -1?-halfπ:Math.asin(x);}function d3_sinh(x){return ((x = Math.exp(x)) - 1 / x) / 2;}function d3_cosh(x){return ((x = Math.exp(x)) + 1 / x) / 2;}function d3_tanh(x){return ((x = Math.exp(2 * x)) - 1) / (x + 1);}function d3_haversin(x){return (x = Math.sin(x / 2)) * x;}var ρ=Math.SQRT2,ρ2=2,ρ4=4;d3.interpolateZoom = function(p0,p1){var ux0=p0[0],uy0=p0[1],w0=p0[2],ux1=p1[0],uy1=p1[1],w1=p1[2],dx=ux1 - ux0,dy=uy1 - uy0,d2=dx * dx + dy * dy,i,S;if(d2 < ε2){S = Math.log(w1 / w0) / ρ;i = function(t){return [ux0 + t * dx,uy0 + t * dy,w0 * Math.exp(ρ * t * S)];};}else {var d1=Math.sqrt(d2),b0=(w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1),b1=(w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1),r0=Math.log(Math.sqrt(b0 * b0 + 1) - b0),r1=Math.log(Math.sqrt(b1 * b1 + 1) - b1);S = (r1 - r0) / ρ;i = function(t){var s=t * S,coshr0=d3_cosh(r0),u=w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));return [ux0 + u * dx,uy0 + u * dy,w0 * coshr0 / d3_cosh(ρ * s + r0)];};}i.duration = S * 1e3;return i;};d3.behavior.zoom = function(){var view={x:0,y:0,k:1},translate0,center0,center,size=[960,500],scaleExtent=d3_behavior_zoomInfinity,duration=250,zooming=0,mousedown=\"mousedown.zoom\",mousemove=\"mousemove.zoom\",mouseup=\"mouseup.zoom\",mousewheelTimer,touchstart=\"touchstart.zoom\",touchtime,event=d3_eventDispatch(zoom,\"zoomstart\",\"zoom\",\"zoomend\"),x0,x1,y0,y1;if(!d3_behavior_zoomWheel){d3_behavior_zoomWheel = \"onwheel\" in d3_document?(d3_behavior_zoomDelta = function(){return -d3.event.deltaY * (d3.event.deltaMode?120:1);},\"wheel\"):\"onmousewheel\" in d3_document?(d3_behavior_zoomDelta = function(){return d3.event.wheelDelta;},\"mousewheel\"):(d3_behavior_zoomDelta = function(){return -d3.event.detail;},\"MozMousePixelScroll\");}function zoom(g){g.on(mousedown,mousedowned).on(d3_behavior_zoomWheel + \".zoom\",mousewheeled).on(\"dblclick.zoom\",dblclicked).on(touchstart,touchstarted);}zoom.event = function(g){g.each(function(){var dispatch=event.of(this,arguments),view1=view;if(d3_transitionInheritId){d3.select(this).transition().each(\"start.zoom\",function(){view = this.__chart__ || {x:0,y:0,k:1};zoomstarted(dispatch);}).tween(\"zoom:zoom\",function(){var dx=size[0],dy=size[1],cx=center0?center0[0]:dx / 2,cy=center0?center0[1]:dy / 2,i=d3.interpolateZoom([(cx - view.x) / view.k,(cy - view.y) / view.k,dx / view.k],[(cx - view1.x) / view1.k,(cy - view1.y) / view1.k,dx / view1.k]);return function(t){var l=i(t),k=dx / l[2];this.__chart__ = view = {x:cx - l[0] * k,y:cy - l[1] * k,k:k};zoomed(dispatch);};}).each(\"interrupt.zoom\",function(){zoomended(dispatch);}).each(\"end.zoom\",function(){zoomended(dispatch);});}else {this.__chart__ = view;zoomstarted(dispatch);zoomed(dispatch);zoomended(dispatch);}});};zoom.translate = function(_){if(!arguments.length)return [view.x,view.y];view = {x:+_[0],y:+_[1],k:view.k};rescale();return zoom;};zoom.scale = function(_){if(!arguments.length)return view.k;view = {x:view.x,y:view.y,k:null};scaleTo(+_);rescale();return zoom;};zoom.scaleExtent = function(_){if(!arguments.length)return scaleExtent;scaleExtent = _ == null?d3_behavior_zoomInfinity:[+_[0],+_[1]];return zoom;};zoom.center = function(_){if(!arguments.length)return center;center = _ && [+_[0],+_[1]];return zoom;};zoom.size = function(_){if(!arguments.length)return size;size = _ && [+_[0],+_[1]];return zoom;};zoom.duration = function(_){if(!arguments.length)return duration;duration = +_;return zoom;};zoom.x = function(z){if(!arguments.length)return x1;x1 = z;x0 = z.copy();view = {x:0,y:0,k:1};return zoom;};zoom.y = function(z){if(!arguments.length)return y1;y1 = z;y0 = z.copy();view = {x:0,y:0,k:1};return zoom;};function location(p){return [(p[0] - view.x) / view.k,(p[1] - view.y) / view.k];}function point(l){return [l[0] * view.k + view.x,l[1] * view.k + view.y];}function scaleTo(s){view.k = Math.max(scaleExtent[0],Math.min(scaleExtent[1],s));}function translateTo(p,l){l = point(l);view.x += p[0] - l[0];view.y += p[1] - l[1];}function zoomTo(that,p,l,k){that.__chart__ = {x:view.x,y:view.y,k:view.k};scaleTo(Math.pow(2,k));translateTo(center0 = p,l);that = d3.select(that);if(duration > 0)that = that.transition().duration(duration);that.call(zoom.event);}function rescale(){if(x1)x1.domain(x0.range().map(function(x){return (x - view.x) / view.k;}).map(x0.invert));if(y1)y1.domain(y0.range().map(function(y){return (y - view.y) / view.k;}).map(y0.invert));}function zoomstarted(dispatch){if(! zooming++)dispatch({type:\"zoomstart\"});}function zoomed(dispatch){rescale();dispatch({type:\"zoom\",scale:view.k,translate:[view.x,view.y]});}function zoomended(dispatch){if(! --zooming)dispatch({type:\"zoomend\"}),center0 = null;}function mousedowned(){var that=this,target=d3.event.target,dispatch=event.of(that,arguments),dragged=0,subject=d3.select(d3_window(that)).on(mousemove,moved).on(mouseup,ended),location0=location(d3.mouse(that)),dragRestore=d3_event_dragSuppress(that);d3_selection_interrupt.call(that);zoomstarted(dispatch);function moved(){dragged = 1;translateTo(d3.mouse(that),location0);zoomed(dispatch);}function ended(){subject.on(mousemove,null).on(mouseup,null);dragRestore(dragged && d3.event.target === target);zoomended(dispatch);}}function touchstarted(){var that=this,dispatch=event.of(that,arguments),locations0={},distance0=0,scale0,zoomName=\".zoom-\" + d3.event.changedTouches[0].identifier,touchmove=\"touchmove\" + zoomName,touchend=\"touchend\" + zoomName,targets=[],subject=d3.select(that),dragRestore=d3_event_dragSuppress(that);started();zoomstarted(dispatch);subject.on(mousedown,null).on(touchstart,started);function relocate(){var touches=d3.touches(that);scale0 = view.k;touches.forEach(function(t){if(t.identifier in locations0)locations0[t.identifier] = location(t);});return touches;}function started(){var target=d3.event.target;d3.select(target).on(touchmove,moved).on(touchend,ended);targets.push(target);var changed=d3.event.changedTouches;for(var i=0,n=changed.length;i < n;++i) {locations0[changed[i].identifier] = null;}var touches=relocate(),now=Date.now();if(touches.length === 1){if(now - touchtime < 500){var p=touches[0];zoomTo(that,p,locations0[p.identifier],Math.floor(Math.log(view.k) / Math.LN2) + 1);d3_eventPreventDefault();}touchtime = now;}else if(touches.length > 1){var p=touches[0],q=touches[1],dx=p[0] - q[0],dy=p[1] - q[1];distance0 = dx * dx + dy * dy;}}function moved(){var touches=d3.touches(that),p0,l0,p1,l1;d3_selection_interrupt.call(that);for(var i=0,n=touches.length;i < n;++i,l1 = null) {p1 = touches[i];if(l1 = locations0[p1.identifier]){if(l0)break;p0 = p1,l0 = l1;}}if(l1){var distance1=(distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1,scale1=distance0 && Math.sqrt(distance1 / distance0);p0 = [(p0[0] + p1[0]) / 2,(p0[1] + p1[1]) / 2];l0 = [(l0[0] + l1[0]) / 2,(l0[1] + l1[1]) / 2];scaleTo(scale1 * scale0);}touchtime = null;translateTo(p0,l0);zoomed(dispatch);}function ended(){if(d3.event.touches.length){var changed=d3.event.changedTouches;for(var i=0,n=changed.length;i < n;++i) {delete locations0[changed[i].identifier];}for(var identifier in locations0) {return void relocate();}}d3.selectAll(targets).on(zoomName,null);subject.on(mousedown,mousedowned).on(touchstart,touchstarted);dragRestore();zoomended(dispatch);}}function mousewheeled(){var dispatch=event.of(this,arguments);if(mousewheelTimer)clearTimeout(mousewheelTimer);else d3_selection_interrupt.call(this),translate0 = location(center0 = center || d3.mouse(this)),zoomstarted(dispatch);mousewheelTimer = setTimeout(function(){mousewheelTimer = null;zoomended(dispatch);},50);d3_eventPreventDefault();scaleTo(Math.pow(2,d3_behavior_zoomDelta() * .002) * view.k);translateTo(center0,translate0);zoomed(dispatch);}function dblclicked(){var p=d3.mouse(this),k=Math.log(view.k) / Math.LN2;zoomTo(this,p,location(p),d3.event.shiftKey?Math.ceil(k) - 1:Math.floor(k) + 1);}return d3.rebind(zoom,event,\"on\");};var d3_behavior_zoomInfinity=[0,Infinity],d3_behavior_zoomDelta,d3_behavior_zoomWheel;d3.color = d3_color;function d3_color(){}d3_color.prototype.toString = function(){return this.rgb() + \"\";};d3.hsl = d3_hsl;function d3_hsl(h,s,l){return this instanceof d3_hsl?void (this.h = +h,this.s = +s,this.l = +l):arguments.length < 2?h instanceof d3_hsl?new d3_hsl(h.h,h.s,h.l):d3_rgb_parse(\"\" + h,d3_rgb_hsl,d3_hsl):new d3_hsl(h,s,l);}var d3_hslPrototype=d3_hsl.prototype = new d3_color();d3_hslPrototype.brighter = function(k){k = Math.pow(.7,arguments.length?k:1);return new d3_hsl(this.h,this.s,this.l / k);};d3_hslPrototype.darker = function(k){k = Math.pow(.7,arguments.length?k:1);return new d3_hsl(this.h,this.s,k * this.l);};d3_hslPrototype.rgb = function(){return d3_hsl_rgb(this.h,this.s,this.l);};function d3_hsl_rgb(h,s,l){var m1,m2;h = isNaN(h)?0:(h %= 360) < 0?h + 360:h;s = isNaN(s)?0:s < 0?0:s > 1?1:s;l = l < 0?0:l > 1?1:l;m2 = l <= .5?l * (1 + s):l + s - l * s;m1 = 2 * l - m2;function v(h){if(h > 360)h -= 360;else if(h < 0)h += 360;if(h < 60)return m1 + (m2 - m1) * h / 60;if(h < 180)return m2;if(h < 240)return m1 + (m2 - m1) * (240 - h) / 60;return m1;}function vv(h){return Math.round(v(h) * 255);}return new d3_rgb(vv(h + 120),vv(h),vv(h - 120));}d3.hcl = d3_hcl;function d3_hcl(h,c,l){return this instanceof d3_hcl?void (this.h = +h,this.c = +c,this.l = +l):arguments.length < 2?h instanceof d3_hcl?new d3_hcl(h.h,h.c,h.l):h instanceof d3_lab?d3_lab_hcl(h.l,h.a,h.b):d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r,h.g,h.b)).l,h.a,h.b):new d3_hcl(h,c,l);}var d3_hclPrototype=d3_hcl.prototype = new d3_color();d3_hclPrototype.brighter = function(k){return new d3_hcl(this.h,this.c,Math.min(100,this.l + d3_lab_K * (arguments.length?k:1)));};d3_hclPrototype.darker = function(k){return new d3_hcl(this.h,this.c,Math.max(0,this.l - d3_lab_K * (arguments.length?k:1)));};d3_hclPrototype.rgb = function(){return d3_hcl_lab(this.h,this.c,this.l).rgb();};function d3_hcl_lab(h,c,l){if(isNaN(h))h = 0;if(isNaN(c))c = 0;return new d3_lab(l,Math.cos(h *= d3_radians) * c,Math.sin(h) * c);}d3.lab = d3_lab;function d3_lab(l,a,b){return this instanceof d3_lab?void (this.l = +l,this.a = +a,this.b = +b):arguments.length < 2?l instanceof d3_lab?new d3_lab(l.l,l.a,l.b):l instanceof d3_hcl?d3_hcl_lab(l.h,l.c,l.l):d3_rgb_lab((l = d3_rgb(l)).r,l.g,l.b):new d3_lab(l,a,b);}var d3_lab_K=18;var d3_lab_X=.95047,d3_lab_Y=1,d3_lab_Z=1.08883;var d3_labPrototype=d3_lab.prototype = new d3_color();d3_labPrototype.brighter = function(k){return new d3_lab(Math.min(100,this.l + d3_lab_K * (arguments.length?k:1)),this.a,this.b);};d3_labPrototype.darker = function(k){return new d3_lab(Math.max(0,this.l - d3_lab_K * (arguments.length?k:1)),this.a,this.b);};d3_labPrototype.rgb = function(){return d3_lab_rgb(this.l,this.a,this.b);};function d3_lab_rgb(l,a,b){var y=(l + 16) / 116,x=y + a / 500,z=y - b / 200;x = d3_lab_xyz(x) * d3_lab_X;y = d3_lab_xyz(y) * d3_lab_Y;z = d3_lab_xyz(z) * d3_lab_Z;return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z),d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z),d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));}function d3_lab_hcl(l,a,b){return l > 0?new d3_hcl(Math.atan2(b,a) * d3_degrees,Math.sqrt(a * a + b * b),l):new d3_hcl(NaN,NaN,l);}function d3_lab_xyz(x){return x > .206893034?x * x * x:(x - 4 / 29) / 7.787037;}function d3_xyz_lab(x){return x > .008856?Math.pow(x,1 / 3):7.787037 * x + 4 / 29;}function d3_xyz_rgb(r){return Math.round(255 * (r <= .00304?12.92 * r:1.055 * Math.pow(r,1 / 2.4) - .055));}d3.rgb = d3_rgb;function d3_rgb(r,g,b){return this instanceof d3_rgb?void (this.r = ~ ~r,this.g = ~ ~g,this.b = ~ ~b):arguments.length < 2?r instanceof d3_rgb?new d3_rgb(r.r,r.g,r.b):d3_rgb_parse(\"\" + r,d3_rgb,d3_hsl_rgb):new d3_rgb(r,g,b);}function d3_rgbNumber(value){return new d3_rgb(value >> 16,value >> 8 & 255,value & 255);}function d3_rgbString(value){return d3_rgbNumber(value) + \"\";}var d3_rgbPrototype=d3_rgb.prototype = new d3_color();d3_rgbPrototype.brighter = function(k){k = Math.pow(.7,arguments.length?k:1);var r=this.r,g=this.g,b=this.b,i=30;if(!r && !g && !b)return new d3_rgb(i,i,i);if(r && r < i)r = i;if(g && g < i)g = i;if(b && b < i)b = i;return new d3_rgb(Math.min(255,r / k),Math.min(255,g / k),Math.min(255,b / k));};d3_rgbPrototype.darker = function(k){k = Math.pow(.7,arguments.length?k:1);return new d3_rgb(k * this.r,k * this.g,k * this.b);};d3_rgbPrototype.hsl = function(){return d3_rgb_hsl(this.r,this.g,this.b);};d3_rgbPrototype.toString = function(){return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);};function d3_rgb_hex(v){return v < 16?\"0\" + Math.max(0,v).toString(16):Math.min(255,v).toString(16);}function d3_rgb_parse(format,rgb,hsl){var r=0,g=0,b=0,m1,m2,color;m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());if(m1){m2 = m1[2].split(\",\");switch(m1[1]){case \"hsl\":{return hsl(parseFloat(m2[0]),parseFloat(m2[1]) / 100,parseFloat(m2[2]) / 100);}case \"rgb\":{return rgb(d3_rgb_parseNumber(m2[0]),d3_rgb_parseNumber(m2[1]),d3_rgb_parseNumber(m2[2]));}}}if(color = d3_rgb_names.get(format)){return rgb(color.r,color.g,color.b);}if(format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1),16))){if(format.length === 4){r = (color & 3840) >> 4;r = r >> 4 | r;g = color & 240;g = g >> 4 | g;b = color & 15;b = b << 4 | b;}else if(format.length === 7){r = (color & 16711680) >> 16;g = (color & 65280) >> 8;b = color & 255;}}return rgb(r,g,b);}function d3_rgb_hsl(r,g,b){var min=Math.min(r /= 255,g /= 255,b /= 255),max=Math.max(r,g,b),d=max - min,h,s,l=(max + min) / 2;if(d){s = l < .5?d / (max + min):d / (2 - max - min);if(r == max)h = (g - b) / d + (g < b?6:0);else if(g == max)h = (b - r) / d + 2;else h = (r - g) / d + 4;h *= 60;}else {h = NaN;s = l > 0 && l < 1?0:h;}return new d3_hsl(h,s,l);}function d3_rgb_lab(r,g,b){r = d3_rgb_xyz(r);g = d3_rgb_xyz(g);b = d3_rgb_xyz(b);var x=d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X),y=d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y),z=d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);return d3_lab(116 * y - 16,500 * (x - y),200 * (y - z));}function d3_rgb_xyz(r){return (r /= 255) <= .04045?r / 12.92:Math.pow((r + .055) / 1.055,2.4);}function d3_rgb_parseNumber(c){var f=parseFloat(c);return c.charAt(c.length - 1) === \"%\"?Math.round(f * 2.55):f;}var d3_rgb_names=d3.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});d3_rgb_names.forEach(function(key,value){d3_rgb_names.set(key,d3_rgbNumber(value));});function d3_functor(v){return typeof v === \"function\"?v:function(){return v;};}d3.functor = d3_functor;d3.xhr = d3_xhrType(d3_identity);function d3_xhrType(response){return function(url,mimeType,callback){if(arguments.length === 2 && typeof mimeType === \"function\")callback = mimeType,mimeType = null;return d3_xhr(url,mimeType,response,callback);};}function d3_xhr(url,mimeType,response,callback){var xhr={},dispatch=d3.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),headers={},request=new XMLHttpRequest(),responseType=null;if(this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url))request = new XDomainRequest();\"onload\" in request?request.onload = request.onerror = respond:request.onreadystatechange = function(){request.readyState > 3 && respond();};function respond(){var status=request.status,result;if(!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304){try{result = response.call(xhr,request);}catch(e) {dispatch.error.call(xhr,e);return;}dispatch.load.call(xhr,result);}else {dispatch.error.call(xhr,request);}}request.onprogress = function(event){var o=d3.event;d3.event = event;try{dispatch.progress.call(xhr,request);}finally {d3.event = o;}};xhr.header = function(name,value){name = (name + \"\").toLowerCase();if(arguments.length < 2)return headers[name];if(value == null)delete headers[name];else headers[name] = value + \"\";return xhr;};xhr.mimeType = function(value){if(!arguments.length)return mimeType;mimeType = value == null?null:value + \"\";return xhr;};xhr.responseType = function(value){if(!arguments.length)return responseType;responseType = value;return xhr;};xhr.response = function(value){response = value;return xhr;};[\"get\",\"post\"].forEach(function(method){xhr[method] = function(){return xhr.send.apply(xhr,[method].concat(d3_array(arguments)));};});xhr.send = function(method,data,callback){if(arguments.length === 2 && typeof data === \"function\")callback = data,data = null;request.open(method,url,true);if(mimeType != null && !(\"accept\" in headers))headers[\"accept\"] = mimeType + \",*/*\";if(request.setRequestHeader)for(var name in headers) request.setRequestHeader(name,headers[name]);if(mimeType != null && request.overrideMimeType)request.overrideMimeType(mimeType);if(responseType != null)request.responseType = responseType;if(callback != null)xhr.on(\"error\",callback).on(\"load\",function(request){callback(null,request);});dispatch.beforesend.call(xhr,request);request.send(data == null?null:data);return xhr;};xhr.abort = function(){request.abort();return xhr;};d3.rebind(xhr,dispatch,\"on\");return callback == null?xhr:xhr.get(d3_xhr_fixCallback(callback));}function d3_xhr_fixCallback(callback){return callback.length === 1?function(error,request){callback(error == null?request:null);}:callback;}function d3_xhrHasResponse(request){var type=request.responseType;return type && type !== \"text\"?request.response:request.responseText;}d3.dsv = function(delimiter,mimeType){var reFormat=new RegExp('[\"' + delimiter + \"\\n]\"),delimiterCode=delimiter.charCodeAt(0);function dsv(url,row,callback){if(arguments.length < 3)callback = row,row = null;var xhr=d3_xhr(url,mimeType,row == null?response:typedResponse(row),callback);xhr.row = function(_){return arguments.length?xhr.response((row = _) == null?response:typedResponse(_)):row;};return xhr;}function response(request){return dsv.parse(request.responseText);}function typedResponse(f){return function(request){return dsv.parse(request.responseText,f);};}dsv.parse = function(text,f){var o;return dsv.parseRows(text,function(row,i){if(o)return o(row,i - 1);var a=new Function(\"d\",\"return {\" + row.map(function(name,i){return JSON.stringify(name) + \": d[\" + i + \"]\";}).join(\",\") + \"}\");o = f?function(row,i){return f(a(row),i);}:a;});};dsv.parseRows = function(text,f){var EOL={},EOF={},rows=[],N=text.length,I=0,n=0,t,eol;function token(){if(I >= N)return EOF;if(eol)return eol = false,EOL;var j=I;if(text.charCodeAt(j) === 34){var i=j;while(i++ < N) {if(text.charCodeAt(i) === 34){if(text.charCodeAt(i + 1) !== 34)break;++i;}}I = i + 2;var c=text.charCodeAt(i + 1);if(c === 13){eol = true;if(text.charCodeAt(i + 2) === 10)++I;}else if(c === 10){eol = true;}return text.slice(j + 1,i).replace(/\"\"/g,'\"');}while(I < N) {var c=text.charCodeAt(I++),k=1;if(c === 10)eol = true;else if(c === 13){eol = true;if(text.charCodeAt(I) === 10)++I,++k;}else if(c !== delimiterCode)continue;return text.slice(j,I - k);}return text.slice(j);}while((t = token()) !== EOF) {var a=[];while(t !== EOL && t !== EOF) {a.push(t);t = token();}if(f && (a = f(a,n++)) == null)continue;rows.push(a);}return rows;};dsv.format = function(rows){if(Array.isArray(rows[0]))return dsv.formatRows(rows);var fieldSet=new d3_Set(),fields=[];rows.forEach(function(row){for(var field in row) {if(!fieldSet.has(field)){fields.push(fieldSet.add(field));}}});return [fields.map(formatValue).join(delimiter)].concat(rows.map(function(row){return fields.map(function(field){return formatValue(row[field]);}).join(delimiter);})).join(\"\\n\");};dsv.formatRows = function(rows){return rows.map(formatRow).join(\"\\n\");};function formatRow(row){return row.map(formatValue).join(delimiter);}function formatValue(text){return reFormat.test(text)?'\"' + text.replace(/\\\"/g,'\"\"') + '\"':text;}return dsv;};d3.csv = d3.dsv(\",\",\"text/csv\");d3.tsv = d3.dsv(\"\t\",\"text/tab-separated-values\");var d3_timer_queueHead,d3_timer_queueTail,d3_timer_interval,d3_timer_timeout,d3_timer_frame=this[d3_vendorSymbol(this,\"requestAnimationFrame\")] || function(callback){setTimeout(callback,17);};d3.timer = function(){d3_timer.apply(this,arguments);};function d3_timer(callback,delay,then){var n=arguments.length;if(n < 2)delay = 0;if(n < 3)then = Date.now();var time=then + delay,timer={c:callback,t:time,n:null};if(d3_timer_queueTail)d3_timer_queueTail.n = timer;else d3_timer_queueHead = timer;d3_timer_queueTail = timer;if(!d3_timer_interval){d3_timer_timeout = clearTimeout(d3_timer_timeout);d3_timer_interval = 1;d3_timer_frame(d3_timer_step);}return timer;}function d3_timer_step(){var now=d3_timer_mark(),delay=d3_timer_sweep() - now;if(delay > 24){if(isFinite(delay)){clearTimeout(d3_timer_timeout);d3_timer_timeout = setTimeout(d3_timer_step,delay);}d3_timer_interval = 0;}else {d3_timer_interval = 1;d3_timer_frame(d3_timer_step);}}d3.timer.flush = function(){d3_timer_mark();d3_timer_sweep();};function d3_timer_mark(){var now=Date.now(),timer=d3_timer_queueHead;while(timer) {if(now >= timer.t && timer.c(now - timer.t))timer.c = null;timer = timer.n;}return now;}function d3_timer_sweep(){var t0,t1=d3_timer_queueHead,time=Infinity;while(t1) {if(t1.c){if(t1.t < time)time = t1.t;t1 = (t0 = t1).n;}else {t1 = t0?t0.n = t1.n:d3_timer_queueHead = t1.n;}}d3_timer_queueTail = t0;return time;}function d3_format_precision(x,p){return p - (x?Math.ceil(Math.log(x) / Math.LN10):1);}d3.round = function(x,n){return n?Math.round(x * (n = Math.pow(10,n))) / n:Math.round(x);};var d3_formatPrefixes=[\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"].map(d3_formatPrefix);d3.formatPrefix = function(value,precision){var i=0;if(value = +value){if(value < 0)value *= -1;if(precision)value = d3.round(value,d3_format_precision(value,precision));i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);i = Math.max(-24,Math.min(24,Math.floor((i - 1) / 3) * 3));}return d3_formatPrefixes[8 + i / 3];};function d3_formatPrefix(d,i){var k=Math.pow(10,abs(8 - i) * 3);return {scale:i > 8?function(d){return d / k;}:function(d){return d * k;},symbol:d};}function d3_locale_numberFormat(locale){var locale_decimal=locale.decimal,locale_thousands=locale.thousands,locale_grouping=locale.grouping,locale_currency=locale.currency,formatGroup=locale_grouping && locale_thousands?function(value,width){var i=value.length,t=[],j=0,g=locale_grouping[0],length=0;while(i > 0 && g > 0) {if(length + g + 1 > width)g = Math.max(1,width - length);t.push(value.substring(i -= g,i + g));if((length += g + 1) > width)break;g = locale_grouping[j = (j + 1) % locale_grouping.length];}return t.reverse().join(locale_thousands);}:d3_identity;return function(specifier){var match=d3_format_re.exec(specifier),fill=match[1] || \" \",align=match[2] || \">\",sign=match[3] || \"-\",symbol=match[4] || \"\",zfill=match[5],width=+match[6],comma=match[7],precision=match[8],type=match[9],scale=1,prefix=\"\",suffix=\"\",integer=false,exponent=true;if(precision)precision = +precision.substring(1);if(zfill || fill === \"0\" && align === \"=\"){zfill = fill = \"0\";align = \"=\";}switch(type){case \"n\":comma = true;type = \"g\";break;case \"%\":scale = 100;suffix = \"%\";type = \"f\";break;case \"p\":scale = 100;suffix = \"%\";type = \"r\";break;case \"b\":case \"o\":case \"x\":case \"X\":if(symbol === \"#\")prefix = \"0\" + type.toLowerCase();case \"c\":exponent = false;case \"d\":integer = true;precision = 0;break;case \"s\":scale = -1;type = \"r\";break;}if(symbol === \"$\")prefix = locale_currency[0],suffix = locale_currency[1];if(type == \"r\" && !precision)type = \"g\";if(precision != null){if(type == \"g\")precision = Math.max(1,Math.min(21,precision));else if(type == \"e\" || type == \"f\")precision = Math.max(0,Math.min(20,precision));}type = d3_format_types.get(type) || d3_format_typeDefault;var zcomma=zfill && comma;return function(value){var fullSuffix=suffix;if(integer && value % 1)return \"\";var negative=value < 0 || value === 0 && 1 / value < 0?(value = -value,\"-\"):sign === \"-\"?\"\":sign;if(scale < 0){var unit=d3.formatPrefix(value,precision);value = unit.scale(value);fullSuffix = unit.symbol + suffix;}else {value *= scale;}value = type(value,precision);var i=value.lastIndexOf(\".\"),before,after;if(i < 0){var j=exponent?value.lastIndexOf(\"e\"):-1;if(j < 0)before = value,after = \"\";else before = value.substring(0,j),after = value.substring(j);}else {before = value.substring(0,i);after = locale_decimal + value.substring(i + 1);}if(!zfill && comma)before = formatGroup(before,Infinity);var length=prefix.length + before.length + after.length + (zcomma?0:negative.length),padding=length < width?new Array(length = width - length + 1).join(fill):\"\";if(zcomma)before = formatGroup(padding + before,padding.length?width - after.length:Infinity);negative += prefix;value = before + after;return (align === \"<\"?negative + value + padding:align === \">\"?padding + negative + value:align === \"^\"?padding.substring(0,length >>= 1) + negative + value + padding.substring(length):negative + (zcomma?value:padding + value)) + fullSuffix;};};}var d3_format_re=/(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;var d3_format_types=d3.map({b:function b(x){return x.toString(2);},c:function c(x){return String.fromCharCode(x);},o:function o(x){return x.toString(8);},x:function x(_x){return _x.toString(16);},X:function X(x){return x.toString(16).toUpperCase();},g:function g(x,p){return x.toPrecision(p);},e:function e(x,p){return x.toExponential(p);},f:function f(x,p){return x.toFixed(p);},r:function r(x,p){return (x = d3.round(x,d3_format_precision(x,p))).toFixed(Math.max(0,Math.min(20,d3_format_precision(x * (1 + 1e-15),p))));}});function d3_format_typeDefault(x){return x + \"\";}var d3_time=d3.time = {},d3_date=Date;function d3_date_utc(){this._ = new Date(arguments.length > 1?Date.UTC.apply(this,arguments):arguments[0]);}d3_date_utc.prototype = {getDate:function getDate(){return this._.getUTCDate();},getDay:function getDay(){return this._.getUTCDay();},getFullYear:function getFullYear(){return this._.getUTCFullYear();},getHours:function getHours(){return this._.getUTCHours();},getMilliseconds:function getMilliseconds(){return this._.getUTCMilliseconds();},getMinutes:function getMinutes(){return this._.getUTCMinutes();},getMonth:function getMonth(){return this._.getUTCMonth();},getSeconds:function getSeconds(){return this._.getUTCSeconds();},getTime:function getTime(){return this._.getTime();},getTimezoneOffset:function getTimezoneOffset(){return 0;},valueOf:function valueOf(){return this._.valueOf();},setDate:function setDate(){d3_time_prototype.setUTCDate.apply(this._,arguments);},setDay:function setDay(){d3_time_prototype.setUTCDay.apply(this._,arguments);},setFullYear:function setFullYear(){d3_time_prototype.setUTCFullYear.apply(this._,arguments);},setHours:function setHours(){d3_time_prototype.setUTCHours.apply(this._,arguments);},setMilliseconds:function setMilliseconds(){d3_time_prototype.setUTCMilliseconds.apply(this._,arguments);},setMinutes:function setMinutes(){d3_time_prototype.setUTCMinutes.apply(this._,arguments);},setMonth:function setMonth(){d3_time_prototype.setUTCMonth.apply(this._,arguments);},setSeconds:function setSeconds(){d3_time_prototype.setUTCSeconds.apply(this._,arguments);},setTime:function setTime(){d3_time_prototype.setTime.apply(this._,arguments);}};var d3_time_prototype=Date.prototype;function d3_time_interval(local,step,number){function round(date){var d0=local(date),d1=offset(d0,1);return date - d0 < d1 - date?d0:d1;}function ceil(date){step(date = local(new d3_date(date - 1)),1);return date;}function offset(date,k){step(date = new d3_date(+date),k);return date;}function range(t0,t1,dt){var time=ceil(t0),times=[];if(dt > 1){while(time < t1) {if(!(number(time) % dt))times.push(new Date(+time));step(time,1);}}else {while(time < t1) times.push(new Date(+time)),step(time,1);}return times;}function range_utc(t0,t1,dt){try{d3_date = d3_date_utc;var utc=new d3_date_utc();utc._ = t0;return range(utc,t1,dt);}finally {d3_date = Date;}}local.floor = local;local.round = round;local.ceil = ceil;local.offset = offset;local.range = range;var utc=local.utc = d3_time_interval_utc(local);utc.floor = utc;utc.round = d3_time_interval_utc(round);utc.ceil = d3_time_interval_utc(ceil);utc.offset = d3_time_interval_utc(offset);utc.range = range_utc;return local;}function d3_time_interval_utc(method){return function(date,k){try{d3_date = d3_date_utc;var utc=new d3_date_utc();utc._ = date;return method(utc,k)._;}finally {d3_date = Date;}};}d3_time.year = d3_time_interval(function(date){date = d3_time.day(date);date.setMonth(0,1);return date;},function(date,offset){date.setFullYear(date.getFullYear() + offset);},function(date){return date.getFullYear();});d3_time.years = d3_time.year.range;d3_time.years.utc = d3_time.year.utc.range;d3_time.day = d3_time_interval(function(date){var day=new d3_date(2e3,0);day.setFullYear(date.getFullYear(),date.getMonth(),date.getDate());return day;},function(date,offset){date.setDate(date.getDate() + offset);},function(date){return date.getDate() - 1;});d3_time.days = d3_time.day.range;d3_time.days.utc = d3_time.day.utc.range;d3_time.dayOfYear = function(date){var year=d3_time.year(date);return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);};[\"sunday\",\"monday\",\"tuesday\",\"wednesday\",\"thursday\",\"friday\",\"saturday\"].forEach(function(day,i){i = 7 - i;var interval=d3_time[day] = d3_time_interval(function(date){(date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);return date;},function(date,offset){date.setDate(date.getDate() + Math.floor(offset) * 7);},function(date){var day=d3_time.year(date).getDay();return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);});d3_time[day + \"s\"] = interval.range;d3_time[day + \"s\"].utc = interval.utc.range;d3_time[day + \"OfYear\"] = function(date){var day=d3_time.year(date).getDay();return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);};});d3_time.week = d3_time.sunday;d3_time.weeks = d3_time.sunday.range;d3_time.weeks.utc = d3_time.sunday.utc.range;d3_time.weekOfYear = d3_time.sundayOfYear;function d3_locale_timeFormat(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_days=locale.days,locale_shortDays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths;function d3_time_format(template){var n=template.length;function format(date){var string=[],i=-1,j=0,c,p,f;while(++i < n) {if(template.charCodeAt(i) === 37){string.push(template.slice(j,i));if((p = d3_time_formatPads[c = template.charAt(++i)]) != null)c = template.charAt(++i);if(f = d3_time_formats[c])c = f(date,p == null?c === \"e\"?\" \":\"0\":p);string.push(c);j = i + 1;}}string.push(template.slice(j,i));return string.join(\"\");}format.parse = function(string){var d={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=d3_time_parse(d,template,string,0);if(i != string.length)return null;if(\"p\" in d)d.H = d.H % 12 + d.p * 12;var localZ=d.Z != null && d3_date !== d3_date_utc,date=new (localZ?d3_date_utc:d3_date)();if(\"j\" in d)date.setFullYear(d.y,0,d.j);else if(\"W\" in d || \"U\" in d){if(!(\"w\" in d))d.w = \"W\" in d?1:0;date.setFullYear(d.y,0,1);date.setFullYear(d.y,0,\"W\" in d?(d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7:d.w + d.U * 7 - (date.getDay() + 6) % 7);}else date.setFullYear(d.y,d.m,d.d);date.setHours(d.H + (d.Z / 100 | 0),d.M + d.Z % 100,d.S,d.L);return localZ?date._:date;};format.toString = function(){return template;};return format;}function d3_time_parse(date,template,string,j){var c,p,t,i=0,n=template.length,m=string.length;while(i < n) {if(j >= m)return -1;c = template.charCodeAt(i++);if(c === 37){t = template.charAt(i++);p = d3_time_parsers[t in d3_time_formatPads?template.charAt(i++):t];if(!p || (j = p(date,string,j)) < 0)return -1;}else if(c != string.charCodeAt(j++)){return -1;}}return j;}d3_time_format.utc = function(template){var local=d3_time_format(template);function format(date){try{d3_date = d3_date_utc;var utc=new d3_date();utc._ = date;return local(utc);}finally {d3_date = Date;}}format.parse = function(string){try{d3_date = d3_date_utc;var date=local.parse(string);return date && date._;}finally {d3_date = Date;}};format.toString = local.toString;return format;};d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;var d3_time_periodLookup=d3.map(),d3_time_dayRe=d3_time_formatRe(locale_days),d3_time_dayLookup=d3_time_formatLookup(locale_days),d3_time_dayAbbrevRe=d3_time_formatRe(locale_shortDays),d3_time_dayAbbrevLookup=d3_time_formatLookup(locale_shortDays),d3_time_monthRe=d3_time_formatRe(locale_months),d3_time_monthLookup=d3_time_formatLookup(locale_months),d3_time_monthAbbrevRe=d3_time_formatRe(locale_shortMonths),d3_time_monthAbbrevLookup=d3_time_formatLookup(locale_shortMonths);locale_periods.forEach(function(p,i){d3_time_periodLookup.set(p.toLowerCase(),i);});var d3_time_formats={a:function a(d){return locale_shortDays[d.getDay()];},A:function A(d){return locale_days[d.getDay()];},b:function b(d){return locale_shortMonths[d.getMonth()];},B:function B(d){return locale_months[d.getMonth()];},c:d3_time_format(locale_dateTime),d:function d(_d,p){return d3_time_formatPad(_d.getDate(),p,2);},e:function e(d,p){return d3_time_formatPad(d.getDate(),p,2);},H:function H(d,p){return d3_time_formatPad(d.getHours(),p,2);},I:function I(d,p){return d3_time_formatPad(d.getHours() % 12 || 12,p,2);},j:function j(d,p){return d3_time_formatPad(1 + d3_time.dayOfYear(d),p,3);},L:function L(d,p){return d3_time_formatPad(d.getMilliseconds(),p,3);},m:function m(d,p){return d3_time_formatPad(d.getMonth() + 1,p,2);},M:function M(d,p){return d3_time_formatPad(d.getMinutes(),p,2);},p:function p(d){return locale_periods[+(d.getHours() >= 12)];},S:function S(d,p){return d3_time_formatPad(d.getSeconds(),p,2);},U:function U(d,p){return d3_time_formatPad(d3_time.sundayOfYear(d),p,2);},w:function w(d){return d.getDay();},W:function W(d,p){return d3_time_formatPad(d3_time.mondayOfYear(d),p,2);},x:d3_time_format(locale_date),X:d3_time_format(locale_time),y:function y(d,p){return d3_time_formatPad(d.getFullYear() % 100,p,2);},Y:function Y(d,p){return d3_time_formatPad(d.getFullYear() % 1e4,p,4);},Z:d3_time_zone,\"%\":function _(){return \"%\";}};var d3_time_parsers={a:d3_time_parseWeekdayAbbrev,A:d3_time_parseWeekday,b:d3_time_parseMonthAbbrev,B:d3_time_parseMonth,c:d3_time_parseLocaleFull,d:d3_time_parseDay,e:d3_time_parseDay,H:d3_time_parseHour24,I:d3_time_parseHour24,j:d3_time_parseDayOfYear,L:d3_time_parseMilliseconds,m:d3_time_parseMonthNumber,M:d3_time_parseMinutes,p:d3_time_parseAmPm,S:d3_time_parseSeconds,U:d3_time_parseWeekNumberSunday,w:d3_time_parseWeekdayNumber,W:d3_time_parseWeekNumberMonday,x:d3_time_parseLocaleDate,X:d3_time_parseLocaleTime,y:d3_time_parseYear,Y:d3_time_parseFullYear,Z:d3_time_parseZone,\"%\":d3_time_parseLiteralPercent};function d3_time_parseWeekdayAbbrev(date,string,i){d3_time_dayAbbrevRe.lastIndex = 0;var n=d3_time_dayAbbrevRe.exec(string.slice(i));return n?(date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseWeekday(date,string,i){d3_time_dayRe.lastIndex = 0;var n=d3_time_dayRe.exec(string.slice(i));return n?(date.w = d3_time_dayLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseMonthAbbrev(date,string,i){d3_time_monthAbbrevRe.lastIndex = 0;var n=d3_time_monthAbbrevRe.exec(string.slice(i));return n?(date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseMonth(date,string,i){d3_time_monthRe.lastIndex = 0;var n=d3_time_monthRe.exec(string.slice(i));return n?(date.m = d3_time_monthLookup.get(n[0].toLowerCase()),i + n[0].length):-1;}function d3_time_parseLocaleFull(date,string,i){return d3_time_parse(date,d3_time_formats.c.toString(),string,i);}function d3_time_parseLocaleDate(date,string,i){return d3_time_parse(date,d3_time_formats.x.toString(),string,i);}function d3_time_parseLocaleTime(date,string,i){return d3_time_parse(date,d3_time_formats.X.toString(),string,i);}function d3_time_parseAmPm(date,string,i){var n=d3_time_periodLookup.get(string.slice(i,i += 2).toLowerCase());return n == null?-1:(date.p = n,i);}return d3_time_format;}var d3_time_formatPads={\"-\":\"\",_:\" \",\"0\":\"0\"},d3_time_numberRe=/^\\s*\\d+/,d3_time_percentRe=/^%/;function d3_time_formatPad(value,fill,width){var sign=value < 0?\"-\":\"\",string=(sign?-value:value) + \"\",length=string.length;return sign + (length < width?new Array(width - length + 1).join(fill) + string:string);}function d3_time_formatRe(names){return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\",\"i\");}function d3_time_formatLookup(names){var map=new d3_Map(),i=-1,n=names.length;while(++i < n) map.set(names[i].toLowerCase(),i);return map;}function d3_time_parseWeekdayNumber(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 1));return n?(date.w = +n[0],i + n[0].length):-1;}function d3_time_parseWeekNumberSunday(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i));return n?(date.U = +n[0],i + n[0].length):-1;}function d3_time_parseWeekNumberMonday(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i));return n?(date.W = +n[0],i + n[0].length):-1;}function d3_time_parseFullYear(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 4));return n?(date.y = +n[0],i + n[0].length):-1;}function d3_time_parseYear(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.y = d3_time_expandYear(+n[0]),i + n[0].length):-1;}function d3_time_parseZone(date,string,i){return (/^[+-]\\d{4}$/.test(string = string.slice(i,i + 5))?(date.Z = -string,i + 5):-1);}function d3_time_expandYear(d){return d + (d > 68?1900:2e3);}function d3_time_parseMonthNumber(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.m = n[0] - 1,i + n[0].length):-1;}function d3_time_parseDay(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.d = +n[0],i + n[0].length):-1;}function d3_time_parseDayOfYear(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 3));return n?(date.j = +n[0],i + n[0].length):-1;}function d3_time_parseHour24(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.H = +n[0],i + n[0].length):-1;}function d3_time_parseMinutes(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.M = +n[0],i + n[0].length):-1;}function d3_time_parseSeconds(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 2));return n?(date.S = +n[0],i + n[0].length):-1;}function d3_time_parseMilliseconds(date,string,i){d3_time_numberRe.lastIndex = 0;var n=d3_time_numberRe.exec(string.slice(i,i + 3));return n?(date.L = +n[0],i + n[0].length):-1;}function d3_time_zone(d){var z=d.getTimezoneOffset(),zs=z > 0?\"-\":\"+\",zh=abs(z) / 60 | 0,zm=abs(z) % 60;return zs + d3_time_formatPad(zh,\"0\",2) + d3_time_formatPad(zm,\"0\",2);}function d3_time_parseLiteralPercent(date,string,i){d3_time_percentRe.lastIndex = 0;var n=d3_time_percentRe.exec(string.slice(i,i + 1));return n?i + n[0].length:-1;}function d3_time_formatMulti(formats){var n=formats.length,i=-1;while(++i < n) formats[i][0] = this(formats[i][0]);return function(date){var i=0,f=formats[i];while(!f[1](date)) f = formats[++i];return f[0](date);};}d3.locale = function(locale){return {numberFormat:d3_locale_numberFormat(locale),timeFormat:d3_locale_timeFormat(locale)};};var d3_locale_enUS=d3.locale({decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],dateTime:\"%a %b %e %X %Y\",date:\"%m/%d/%Y\",time:\"%H:%M:%S\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]});d3.format = d3_locale_enUS.numberFormat;d3.geo = {};function d3_adder(){}d3_adder.prototype = {s:0,t:0,add:function add(y){d3_adderSum(y,this.t,d3_adderTemp);d3_adderSum(d3_adderTemp.s,this.s,this);if(this.s)this.t += d3_adderTemp.t;else this.s = d3_adderTemp.t;},reset:function reset(){this.s = this.t = 0;},valueOf:function valueOf(){return this.s;}};var d3_adderTemp=new d3_adder();function d3_adderSum(a,b,o){var x=o.s = a + b,bv=x - a,av=x - bv;o.t = a - av + (b - bv);}d3.geo.stream = function(object,listener){if(object && d3_geo_streamObjectType.hasOwnProperty(object.type)){d3_geo_streamObjectType[object.type](object,listener);}else {d3_geo_streamGeometry(object,listener);}};function d3_geo_streamGeometry(geometry,listener){if(geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)){d3_geo_streamGeometryType[geometry.type](geometry,listener);}}var d3_geo_streamObjectType={Feature:function Feature(feature,listener){d3_geo_streamGeometry(feature.geometry,listener);},FeatureCollection:function FeatureCollection(object,listener){var features=object.features,i=-1,n=features.length;while(++i < n) d3_geo_streamGeometry(features[i].geometry,listener);}};var d3_geo_streamGeometryType={Sphere:function Sphere(object,listener){listener.sphere();},Point:function Point(object,listener){object = object.coordinates;listener.point(object[0],object[1],object[2]);},MultiPoint:function MultiPoint(object,listener){var coordinates=object.coordinates,i=-1,n=coordinates.length;while(++i < n) object = coordinates[i],listener.point(object[0],object[1],object[2]);},LineString:function LineString(object,listener){d3_geo_streamLine(object.coordinates,listener,0);},MultiLineString:function MultiLineString(object,listener){var coordinates=object.coordinates,i=-1,n=coordinates.length;while(++i < n) d3_geo_streamLine(coordinates[i],listener,0);},Polygon:function Polygon(object,listener){d3_geo_streamPolygon(object.coordinates,listener);},MultiPolygon:function MultiPolygon(object,listener){var coordinates=object.coordinates,i=-1,n=coordinates.length;while(++i < n) d3_geo_streamPolygon(coordinates[i],listener);},GeometryCollection:function GeometryCollection(object,listener){var geometries=object.geometries,i=-1,n=geometries.length;while(++i < n) d3_geo_streamGeometry(geometries[i],listener);}};function d3_geo_streamLine(coordinates,listener,closed){var i=-1,n=coordinates.length - closed,coordinate;listener.lineStart();while(++i < n) coordinate = coordinates[i],listener.point(coordinate[0],coordinate[1],coordinate[2]);listener.lineEnd();}function d3_geo_streamPolygon(coordinates,listener){var i=-1,n=coordinates.length;listener.polygonStart();while(++i < n) d3_geo_streamLine(coordinates[i],listener,1);listener.polygonEnd();}d3.geo.area = function(object){d3_geo_areaSum = 0;d3.geo.stream(object,d3_geo_area);return d3_geo_areaSum;};var d3_geo_areaSum,d3_geo_areaRingSum=new d3_adder();var d3_geo_area={sphere:function sphere(){d3_geo_areaSum += 4 * π;},point:d3_noop,lineStart:d3_noop,lineEnd:d3_noop,polygonStart:function polygonStart(){d3_geo_areaRingSum.reset();d3_geo_area.lineStart = d3_geo_areaRingStart;},polygonEnd:function polygonEnd(){var area=2 * d3_geo_areaRingSum;d3_geo_areaSum += area < 0?4 * π + area:area;d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;}};function d3_geo_areaRingStart(){var λ00,φ00,λ0,cosφ0,sinφ0;d3_geo_area.point = function(λ,φ){d3_geo_area.point = nextPoint;λ0 = (λ00 = λ) * d3_radians,cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4),sinφ0 = Math.sin(φ);};function nextPoint(λ,φ){λ *= d3_radians;φ = φ * d3_radians / 2 + π / 4;var dλ=λ - λ0,sdλ=dλ >= 0?1:-1,adλ=sdλ * dλ,cosφ=Math.cos(φ),sinφ=Math.sin(φ),k=sinφ0 * sinφ,u=cosφ0 * cosφ + k * Math.cos(adλ),v=k * sdλ * Math.sin(adλ);d3_geo_areaRingSum.add(Math.atan2(v,u));λ0 = λ,cosφ0 = cosφ,sinφ0 = sinφ;}d3_geo_area.lineEnd = function(){nextPoint(λ00,φ00);};}function d3_geo_cartesian(spherical){var λ=spherical[0],φ=spherical[1],cosφ=Math.cos(φ);return [cosφ * Math.cos(λ),cosφ * Math.sin(λ),Math.sin(φ)];}function d3_geo_cartesianDot(a,b){return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];}function d3_geo_cartesianCross(a,b){return [a[1] * b[2] - a[2] * b[1],a[2] * b[0] - a[0] * b[2],a[0] * b[1] - a[1] * b[0]];}function d3_geo_cartesianAdd(a,b){a[0] += b[0];a[1] += b[1];a[2] += b[2];}function d3_geo_cartesianScale(vector,k){return [vector[0] * k,vector[1] * k,vector[2] * k];}function d3_geo_cartesianNormalize(d){var l=Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);d[0] /= l;d[1] /= l;d[2] /= l;}function d3_geo_spherical(cartesian){return [Math.atan2(cartesian[1],cartesian[0]),d3_asin(cartesian[2])];}function d3_geo_sphericalEqual(a,b){return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;}d3.geo.bounds = (function(){var λ0,φ0,λ1,φ1,λ_,λ__,φ__,p0,dλSum,ranges,range;var bound={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){bound.point = ringPoint;bound.lineStart = ringStart;bound.lineEnd = ringEnd;dλSum = 0;d3_geo_area.polygonStart();},polygonEnd:function polygonEnd(){d3_geo_area.polygonEnd();bound.point = point;bound.lineStart = lineStart;bound.lineEnd = lineEnd;if(d3_geo_areaRingSum < 0)λ0 = -(λ1 = 180),φ0 = -(φ1 = 90);else if(dλSum > ε)φ1 = 90;else if(dλSum < -ε)φ0 = -90;range[0] = λ0,range[1] = λ1;}};function point(λ,φ){ranges.push(range = [λ0 = λ,λ1 = λ]);if(φ < φ0)φ0 = φ;if(φ > φ1)φ1 = φ;}function linePoint(λ,φ){var p=d3_geo_cartesian([λ * d3_radians,φ * d3_radians]);if(p0){var normal=d3_geo_cartesianCross(p0,p),equatorial=[normal[1],-normal[0],0],inflection=d3_geo_cartesianCross(equatorial,normal);d3_geo_cartesianNormalize(inflection);inflection = d3_geo_spherical(inflection);var dλ=λ - λ_,s=dλ > 0?1:-1,λi=inflection[0] * d3_degrees * s,antimeridian=abs(dλ) > 180;if(antimeridian ^ (s * λ_ < λi && λi < s * λ)){var φi=inflection[1] * d3_degrees;if(φi > φ1)φ1 = φi;}else if((λi = (λi + 360) % 360 - 180,antimeridian ^ (s * λ_ < λi && λi < s * λ))){var φi=-inflection[1] * d3_degrees;if(φi < φ0)φ0 = φi;}else {if(φ < φ0)φ0 = φ;if(φ > φ1)φ1 = φ;}if(antimeridian){if(λ < λ_){if(angle(λ0,λ) > angle(λ0,λ1))λ1 = λ;}else {if(angle(λ,λ1) > angle(λ0,λ1))λ0 = λ;}}else {if(λ1 >= λ0){if(λ < λ0)λ0 = λ;if(λ > λ1)λ1 = λ;}else {if(λ > λ_){if(angle(λ0,λ) > angle(λ0,λ1))λ1 = λ;}else {if(angle(λ,λ1) > angle(λ0,λ1))λ0 = λ;}}}}else {point(λ,φ);}p0 = p,λ_ = λ;}function lineStart(){bound.point = linePoint;}function lineEnd(){range[0] = λ0,range[1] = λ1;bound.point = point;p0 = null;}function ringPoint(λ,φ){if(p0){var dλ=λ - λ_;dλSum += abs(dλ) > 180?dλ + (dλ > 0?360:-360):dλ;}else λ__ = λ,φ__ = φ;d3_geo_area.point(λ,φ);linePoint(λ,φ);}function ringStart(){d3_geo_area.lineStart();}function ringEnd(){ringPoint(λ__,φ__);d3_geo_area.lineEnd();if(abs(dλSum) > ε)λ0 = -(λ1 = 180);range[0] = λ0,range[1] = λ1;p0 = null;}function angle(λ0,λ1){return (λ1 -= λ0) < 0?λ1 + 360:λ1;}function compareRanges(a,b){return a[0] - b[0];}function withinRange(x,range){return range[0] <= range[1]?range[0] <= x && x <= range[1]:x < range[0] || range[1] < x;}return function(feature){φ1 = λ1 = -(λ0 = φ0 = Infinity);ranges = [];d3.geo.stream(feature,bound);var n=ranges.length;if(n){ranges.sort(compareRanges);for(var i=1,a=ranges[0],b,merged=[a];i < n;++i) {b = ranges[i];if(withinRange(b[0],a) || withinRange(b[1],a)){if(angle(a[0],b[1]) > angle(a[0],a[1]))a[1] = b[1];if(angle(b[0],a[1]) > angle(a[0],a[1]))a[0] = b[0];}else {merged.push(a = b);}}var best=-Infinity,dλ;for(var n=merged.length - 1,i=0,a=merged[n],b;i <= n;a = b,++i) {b = merged[i];if((dλ = angle(a[1],b[0])) > best)best = dλ,λ0 = b[0],λ1 = a[1];}}ranges = range = null;return λ0 === Infinity || φ0 === Infinity?[[NaN,NaN],[NaN,NaN]]:[[λ0,φ0],[λ1,φ1]];};})();d3.geo.centroid = function(object){d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;d3.geo.stream(object,d3_geo_centroid);var x=d3_geo_centroidX2,y=d3_geo_centroidY2,z=d3_geo_centroidZ2,m=x * x + y * y + z * z;if(m < ε2){x = d3_geo_centroidX1,y = d3_geo_centroidY1,z = d3_geo_centroidZ1;if(d3_geo_centroidW1 < ε)x = d3_geo_centroidX0,y = d3_geo_centroidY0,z = d3_geo_centroidZ0;m = x * x + y * y + z * z;if(m < ε2)return [NaN,NaN];}return [Math.atan2(y,x) * d3_degrees,d3_asin(z / Math.sqrt(m)) * d3_degrees];};var d3_geo_centroidW0,d3_geo_centroidW1,d3_geo_centroidX0,d3_geo_centroidY0,d3_geo_centroidZ0,d3_geo_centroidX1,d3_geo_centroidY1,d3_geo_centroidZ1,d3_geo_centroidX2,d3_geo_centroidY2,d3_geo_centroidZ2;var d3_geo_centroid={sphere:d3_noop,point:d3_geo_centroidPoint,lineStart:d3_geo_centroidLineStart,lineEnd:d3_geo_centroidLineEnd,polygonStart:function polygonStart(){d3_geo_centroid.lineStart = d3_geo_centroidRingStart;},polygonEnd:function polygonEnd(){d3_geo_centroid.lineStart = d3_geo_centroidLineStart;}};function d3_geo_centroidPoint(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians);d3_geo_centroidPointXYZ(cosφ * Math.cos(λ),cosφ * Math.sin(λ),Math.sin(φ));}function d3_geo_centroidPointXYZ(x,y,z){++d3_geo_centroidW0;d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;}function d3_geo_centroidLineStart(){var x0,y0,z0;d3_geo_centroid.point = function(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians);x0 = cosφ * Math.cos(λ);y0 = cosφ * Math.sin(λ);z0 = Math.sin(φ);d3_geo_centroid.point = nextPoint;d3_geo_centroidPointXYZ(x0,y0,z0);};function nextPoint(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians),x=cosφ * Math.cos(λ),y=cosφ * Math.sin(λ),z=Math.sin(φ),w=Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w),x0 * x + y0 * y + z0 * z);d3_geo_centroidW1 += w;d3_geo_centroidX1 += w * (x0 + (x0 = x));d3_geo_centroidY1 += w * (y0 + (y0 = y));d3_geo_centroidZ1 += w * (z0 + (z0 = z));d3_geo_centroidPointXYZ(x0,y0,z0);}}function d3_geo_centroidLineEnd(){d3_geo_centroid.point = d3_geo_centroidPoint;}function d3_geo_centroidRingStart(){var λ00,φ00,x0,y0,z0;d3_geo_centroid.point = function(λ,φ){λ00 = λ,φ00 = φ;d3_geo_centroid.point = nextPoint;λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians);x0 = cosφ * Math.cos(λ);y0 = cosφ * Math.sin(λ);z0 = Math.sin(φ);d3_geo_centroidPointXYZ(x0,y0,z0);};d3_geo_centroid.lineEnd = function(){nextPoint(λ00,φ00);d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;d3_geo_centroid.point = d3_geo_centroidPoint;};function nextPoint(λ,φ){λ *= d3_radians;var cosφ=Math.cos(φ *= d3_radians),x=cosφ * Math.cos(λ),y=cosφ * Math.sin(λ),z=Math.sin(φ),cx=y0 * z - z0 * y,cy=z0 * x - x0 * z,cz=x0 * y - y0 * x,m=Math.sqrt(cx * cx + cy * cy + cz * cz),u=x0 * x + y0 * y + z0 * z,v=m && -d3_acos(u) / m,w=Math.atan2(m,u);d3_geo_centroidX2 += v * cx;d3_geo_centroidY2 += v * cy;d3_geo_centroidZ2 += v * cz;d3_geo_centroidW1 += w;d3_geo_centroidX1 += w * (x0 + (x0 = x));d3_geo_centroidY1 += w * (y0 + (y0 = y));d3_geo_centroidZ1 += w * (z0 + (z0 = z));d3_geo_centroidPointXYZ(x0,y0,z0);}}function d3_geo_compose(a,b){function compose(x,y){return x = a(x,y),b(x[0],x[1]);}if(a.invert && b.invert)compose.invert = function(x,y){return x = b.invert(x,y),x && a.invert(x[0],x[1]);};return compose;}function d3_true(){return true;}function d3_geo_clipPolygon(segments,compare,clipStartInside,interpolate,listener){var subject=[],clip=[];segments.forEach(function(segment){if((n = segment.length - 1) <= 0)return;var n,p0=segment[0],p1=segment[n];if(d3_geo_sphericalEqual(p0,p1)){listener.lineStart();for(var i=0;i < n;++i) listener.point((p0 = segment[i])[0],p0[1]);listener.lineEnd();return;}var a=new d3_geo_clipPolygonIntersection(p0,segment,null,true),b=new d3_geo_clipPolygonIntersection(p0,null,a,false);a.o = b;subject.push(a);clip.push(b);a = new d3_geo_clipPolygonIntersection(p1,segment,null,false);b = new d3_geo_clipPolygonIntersection(p1,null,a,true);a.o = b;subject.push(a);clip.push(b);});clip.sort(compare);d3_geo_clipPolygonLinkCircular(subject);d3_geo_clipPolygonLinkCircular(clip);if(!subject.length)return;for(var i=0,entry=clipStartInside,n=clip.length;i < n;++i) {clip[i].e = entry = !entry;}var start=subject[0],points,point;while(1) {var current=start,isSubject=true;while(current.v) if((current = current.n) === start)return;points = current.z;listener.lineStart();do {current.v = current.o.v = true;if(current.e){if(isSubject){for(var i=0,n=points.length;i < n;++i) listener.point((point = points[i])[0],point[1]);}else {interpolate(current.x,current.n.x,1,listener);}current = current.n;}else {if(isSubject){points = current.p.z;for(var i=points.length - 1;i >= 0;--i) listener.point((point = points[i])[0],point[1]);}else {interpolate(current.x,current.p.x,-1,listener);}current = current.p;}current = current.o;points = current.z;isSubject = !isSubject;}while(!current.v);listener.lineEnd();}}function d3_geo_clipPolygonLinkCircular(array){if(!(n = array.length))return;var n,i=0,a=array[0],b;while(++i < n) {a.n = b = array[i];b.p = a;a = b;}a.n = b = array[0];b.p = a;}function d3_geo_clipPolygonIntersection(point,points,other,entry){this.x = point;this.z = points;this.o = other;this.e = entry;this.v = false;this.n = this.p = null;}function d3_geo_clip(pointVisible,clipLine,interpolate,clipStart){return function(rotate,listener){var line=clipLine(listener),rotatedClipStart=rotate.invert(clipStart[0],clipStart[1]);var clip={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){clip.point = pointRing;clip.lineStart = ringStart;clip.lineEnd = ringEnd;segments = [];polygon = [];},polygonEnd:function polygonEnd(){clip.point = point;clip.lineStart = lineStart;clip.lineEnd = lineEnd;segments = d3.merge(segments);var clipStartInside=d3_geo_pointInPolygon(rotatedClipStart,polygon);if(segments.length){if(!polygonStarted)listener.polygonStart(),polygonStarted = true;d3_geo_clipPolygon(segments,d3_geo_clipSort,clipStartInside,interpolate,listener);}else if(clipStartInside){if(!polygonStarted)listener.polygonStart(),polygonStarted = true;listener.lineStart();interpolate(null,null,1,listener);listener.lineEnd();}if(polygonStarted)listener.polygonEnd(),polygonStarted = false;segments = polygon = null;},sphere:function sphere(){listener.polygonStart();listener.lineStart();interpolate(null,null,1,listener);listener.lineEnd();listener.polygonEnd();}};function point(λ,φ){var point=rotate(λ,φ);if(pointVisible(λ = point[0],φ = point[1]))listener.point(λ,φ);}function pointLine(λ,φ){var point=rotate(λ,φ);line.point(point[0],point[1]);}function lineStart(){clip.point = pointLine;line.lineStart();}function lineEnd(){clip.point = point;line.lineEnd();}var segments;var buffer=d3_geo_clipBufferListener(),ringListener=clipLine(buffer),polygonStarted=false,polygon,ring;function pointRing(λ,φ){ring.push([λ,φ]);var point=rotate(λ,φ);ringListener.point(point[0],point[1]);}function ringStart(){ringListener.lineStart();ring = [];}function ringEnd(){pointRing(ring[0][0],ring[0][1]);ringListener.lineEnd();var clean=ringListener.clean(),ringSegments=buffer.buffer(),segment,n=ringSegments.length;ring.pop();polygon.push(ring);ring = null;if(!n)return;if(clean & 1){segment = ringSegments[0];var n=segment.length - 1,i=-1,point;if(n > 0){if(!polygonStarted)listener.polygonStart(),polygonStarted = true;listener.lineStart();while(++i < n) listener.point((point = segment[i])[0],point[1]);listener.lineEnd();}return;}if(n > 1 && clean & 2)ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));}return clip;};}function d3_geo_clipSegmentLength1(segment){return segment.length > 1;}function d3_geo_clipBufferListener(){var lines=[],line;return {lineStart:function lineStart(){lines.push(line = []);},point:function point(λ,φ){line.push([λ,φ]);},lineEnd:d3_noop,buffer:function buffer(){var buffer=lines;lines = [];line = null;return buffer;},rejoin:function rejoin(){if(lines.length > 1)lines.push(lines.pop().concat(lines.shift()));}};}function d3_geo_clipSort(a,b){return ((a = a.x)[0] < 0?a[1] - halfπ - ε:halfπ - a[1]) - ((b = b.x)[0] < 0?b[1] - halfπ - ε:halfπ - b[1]);}var d3_geo_clipAntimeridian=d3_geo_clip(d3_true,d3_geo_clipAntimeridianLine,d3_geo_clipAntimeridianInterpolate,[-π,-π / 2]);function d3_geo_clipAntimeridianLine(listener){var λ0=NaN,φ0=NaN,sλ0=NaN,_clean;return {lineStart:function lineStart(){listener.lineStart();_clean = 1;},point:function point(λ1,φ1){var sλ1=λ1 > 0?π:-π,dλ=abs(λ1 - λ0);if(abs(dλ - π) < ε){listener.point(λ0,φ0 = (φ0 + φ1) / 2 > 0?halfπ:-halfπ);listener.point(sλ0,φ0);listener.lineEnd();listener.lineStart();listener.point(sλ1,φ0);listener.point(λ1,φ0);_clean = 0;}else if(sλ0 !== sλ1 && dλ >= π){if(abs(λ0 - sλ0) < ε)λ0 -= sλ0 * ε;if(abs(λ1 - sλ1) < ε)λ1 -= sλ1 * ε;φ0 = d3_geo_clipAntimeridianIntersect(λ0,φ0,λ1,φ1);listener.point(sλ0,φ0);listener.lineEnd();listener.lineStart();listener.point(sλ1,φ0);_clean = 0;}listener.point(λ0 = λ1,φ0 = φ1);sλ0 = sλ1;},lineEnd:function lineEnd(){listener.lineEnd();λ0 = φ0 = NaN;},clean:function clean(){return 2 - _clean;}};}function d3_geo_clipAntimeridianIntersect(λ0,φ0,λ1,φ1){var cosφ0,cosφ1,sinλ0_λ1=Math.sin(λ0 - λ1);return abs(sinλ0_λ1) > ε?Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)):(φ0 + φ1) / 2;}function d3_geo_clipAntimeridianInterpolate(from,to,direction,listener){var φ;if(from == null){φ = direction * halfπ;listener.point(-π,φ);listener.point(0,φ);listener.point(π,φ);listener.point(π,0);listener.point(π,-φ);listener.point(0,-φ);listener.point(-π,-φ);listener.point(-π,0);listener.point(-π,φ);}else if(abs(from[0] - to[0]) > ε){var s=from[0] < to[0]?π:-π;φ = direction * s / 2;listener.point(-s,φ);listener.point(0,φ);listener.point(s,φ);}else {listener.point(to[0],to[1]);}}function d3_geo_pointInPolygon(point,polygon){var meridian=point[0],parallel=point[1],meridianNormal=[Math.sin(meridian),-Math.cos(meridian),0],polarAngle=0,winding=0;d3_geo_areaRingSum.reset();for(var i=0,n=polygon.length;i < n;++i) {var ring=polygon[i],m=ring.length;if(!m)continue;var point0=ring[0],λ0=point0[0],φ0=point0[1] / 2 + π / 4,sinφ0=Math.sin(φ0),cosφ0=Math.cos(φ0),j=1;while(true) {if(j === m)j = 0;point = ring[j];var λ=point[0],φ=point[1] / 2 + π / 4,sinφ=Math.sin(φ),cosφ=Math.cos(φ),dλ=λ - λ0,sdλ=dλ >= 0?1:-1,adλ=sdλ * dλ,antimeridian=adλ > π,k=sinφ0 * sinφ;d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ),cosφ0 * cosφ + k * Math.cos(adλ)));polarAngle += antimeridian?dλ + sdλ * τ:dλ;if(antimeridian ^ λ0 >= meridian ^ λ >= meridian){var arc=d3_geo_cartesianCross(d3_geo_cartesian(point0),d3_geo_cartesian(point));d3_geo_cartesianNormalize(arc);var intersection=d3_geo_cartesianCross(meridianNormal,arc);d3_geo_cartesianNormalize(intersection);var φarc=(antimeridian ^ dλ >= 0?-1:1) * d3_asin(intersection[2]);if(parallel > φarc || parallel === φarc && (arc[0] || arc[1])){winding += antimeridian ^ dλ >= 0?1:-1;}}if(! j++)break;λ0 = λ,sinφ0 = sinφ,cosφ0 = cosφ,point0 = point;}}return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;}function d3_geo_clipCircle(radius){var cr=Math.cos(radius),smallRadius=cr > 0,notHemisphere=abs(cr) > ε,interpolate=d3_geo_circleInterpolate(radius,6 * d3_radians);return d3_geo_clip(visible,clipLine,interpolate,smallRadius?[0,-radius]:[-π,radius - π]);function visible(λ,φ){return Math.cos(λ) * Math.cos(φ) > cr;}function clipLine(listener){var point0,c0,v0,v00,_clean2;return {lineStart:function lineStart(){v00 = v0 = false;_clean2 = 1;},point:function point(λ,φ){var point1=[λ,φ],point2,v=visible(λ,φ),c=smallRadius?v?0:code(λ,φ):v?code(λ + (λ < 0?π:-π),φ):0;if(!point0 && (v00 = v0 = v))listener.lineStart();if(v !== v0){point2 = intersect(point0,point1);if(d3_geo_sphericalEqual(point0,point2) || d3_geo_sphericalEqual(point1,point2)){point1[0] += ε;point1[1] += ε;v = visible(point1[0],point1[1]);}}if(v !== v0){_clean2 = 0;if(v){listener.lineStart();point2 = intersect(point1,point0);listener.point(point2[0],point2[1]);}else {point2 = intersect(point0,point1);listener.point(point2[0],point2[1]);listener.lineEnd();}point0 = point2;}else if(notHemisphere && point0 && smallRadius ^ v){var t;if(!(c & c0) && (t = intersect(point1,point0,true))){_clean2 = 0;if(smallRadius){listener.lineStart();listener.point(t[0][0],t[0][1]);listener.point(t[1][0],t[1][1]);listener.lineEnd();}else {listener.point(t[1][0],t[1][1]);listener.lineEnd();listener.lineStart();listener.point(t[0][0],t[0][1]);}}}if(v && (!point0 || !d3_geo_sphericalEqual(point0,point1))){listener.point(point1[0],point1[1]);}point0 = point1,v0 = v,c0 = c;},lineEnd:function lineEnd(){if(v0)listener.lineEnd();point0 = null;},clean:function clean(){return _clean2 | (v00 && v0) << 1;}};}function intersect(a,b,two){var pa=d3_geo_cartesian(a),pb=d3_geo_cartesian(b);var n1=[1,0,0],n2=d3_geo_cartesianCross(pa,pb),n2n2=d3_geo_cartesianDot(n2,n2),n1n2=n2[0],determinant=n2n2 - n1n2 * n1n2;if(!determinant)return !two && a;var c1=cr * n2n2 / determinant,c2=-cr * n1n2 / determinant,n1xn2=d3_geo_cartesianCross(n1,n2),A=d3_geo_cartesianScale(n1,c1),B=d3_geo_cartesianScale(n2,c2);d3_geo_cartesianAdd(A,B);var u=n1xn2,w=d3_geo_cartesianDot(A,u),uu=d3_geo_cartesianDot(u,u),t2=w * w - uu * (d3_geo_cartesianDot(A,A) - 1);if(t2 < 0)return;var t=Math.sqrt(t2),q=d3_geo_cartesianScale(u,(-w - t) / uu);d3_geo_cartesianAdd(q,A);q = d3_geo_spherical(q);if(!two)return q;var λ0=a[0],λ1=b[0],φ0=a[1],φ1=b[1],z;if(λ1 < λ0)z = λ0,λ0 = λ1,λ1 = z;var δλ=λ1 - λ0,polar=abs(δλ - π) < ε,meridian=polar || δλ < ε;if(!polar && φ1 < φ0)z = φ0,φ0 = φ1,φ1 = z;if(meridian?polar?φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε?φ0:φ1):φ0 <= q[1] && q[1] <= φ1:δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)){var q1=d3_geo_cartesianScale(u,(-w + t) / uu);d3_geo_cartesianAdd(q1,A);return [q,d3_geo_spherical(q1)];}}function code(λ,φ){var r=smallRadius?radius:π - radius,code=0;if(λ < -r)code |= 1;else if(λ > r)code |= 2;if(φ < -r)code |= 4;else if(φ > r)code |= 8;return code;}}function d3_geom_clipLine(x0,y0,x1,y1){return function(line){var a=line.a,b=line.b,ax=a.x,ay=a.y,bx=b.x,by=b.y,t0=0,t1=1,dx=bx - ax,dy=by - ay,r;r = x0 - ax;if(!dx && r > 0)return;r /= dx;if(dx < 0){if(r < t0)return;if(r < t1)t1 = r;}else if(dx > 0){if(r > t1)return;if(r > t0)t0 = r;}r = x1 - ax;if(!dx && r < 0)return;r /= dx;if(dx < 0){if(r > t1)return;if(r > t0)t0 = r;}else if(dx > 0){if(r < t0)return;if(r < t1)t1 = r;}r = y0 - ay;if(!dy && r > 0)return;r /= dy;if(dy < 0){if(r < t0)return;if(r < t1)t1 = r;}else if(dy > 0){if(r > t1)return;if(r > t0)t0 = r;}r = y1 - ay;if(!dy && r < 0)return;r /= dy;if(dy < 0){if(r > t1)return;if(r > t0)t0 = r;}else if(dy > 0){if(r < t0)return;if(r < t1)t1 = r;}if(t0 > 0)line.a = {x:ax + t0 * dx,y:ay + t0 * dy};if(t1 < 1)line.b = {x:ax + t1 * dx,y:ay + t1 * dy};return line;};}var d3_geo_clipExtentMAX=1e9;d3.geo.clipExtent = function(){var x0,y0,x1,y1,_stream,clip,clipExtent={stream:function stream(output){if(_stream)_stream.valid = false;_stream = clip(output);_stream.valid = true;return _stream;},extent:function extent(_){if(!arguments.length)return [[x0,y0],[x1,y1]];clip = d3_geo_clipExtent(x0 = +_[0][0],y0 = +_[0][1],x1 = +_[1][0],y1 = +_[1][1]);if(_stream)_stream.valid = false,_stream = null;return clipExtent;}};return clipExtent.extent([[0,0],[960,500]]);};function d3_geo_clipExtent(x0,y0,x1,y1){return function(listener){var listener_=listener,bufferListener=d3_geo_clipBufferListener(),clipLine=d3_geom_clipLine(x0,y0,x1,y1),segments,polygon,ring;var clip={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){listener = bufferListener;segments = [];polygon = [];clean = true;},polygonEnd:function polygonEnd(){listener = listener_;segments = d3.merge(segments);var clipStartInside=insidePolygon([x0,y1]),inside=clean && clipStartInside,visible=segments.length;if(inside || visible){listener.polygonStart();if(inside){listener.lineStart();interpolate(null,null,1,listener);listener.lineEnd();}if(visible){d3_geo_clipPolygon(segments,compare,clipStartInside,interpolate,listener);}listener.polygonEnd();}segments = polygon = ring = null;}};function insidePolygon(p){var wn=0,n=polygon.length,y=p[1];for(var i=0;i < n;++i) {for(var j=1,v=polygon[i],m=v.length,a=v[0],b;j < m;++j) {b = v[j];if(a[1] <= y){if(b[1] > y && d3_cross2d(a,b,p) > 0)++wn;}else {if(b[1] <= y && d3_cross2d(a,b,p) < 0)--wn;}a = b;}}return wn !== 0;}function interpolate(from,to,direction,listener){var a=0,a1=0;if(from == null || (a = corner(from,direction)) !== (a1 = corner(to,direction)) || comparePoints(from,to) < 0 ^ direction > 0){do {listener.point(a === 0 || a === 3?x0:x1,a > 1?y1:y0);}while((a = (a + direction + 4) % 4) !== a1);}else {listener.point(to[0],to[1]);}}function pointVisible(x,y){return x0 <= x && x <= x1 && y0 <= y && y <= y1;}function point(x,y){if(pointVisible(x,y))listener.point(x,y);}var x__,y__,v__,x_,y_,v_,first,clean;function lineStart(){clip.point = linePoint;if(polygon)polygon.push(ring = []);first = true;v_ = false;x_ = y_ = NaN;}function lineEnd(){if(segments){linePoint(x__,y__);if(v__ && v_)bufferListener.rejoin();segments.push(bufferListener.buffer());}clip.point = point;if(v_)listener.lineEnd();}function linePoint(x,y){x = Math.max(-d3_geo_clipExtentMAX,Math.min(d3_geo_clipExtentMAX,x));y = Math.max(-d3_geo_clipExtentMAX,Math.min(d3_geo_clipExtentMAX,y));var v=pointVisible(x,y);if(polygon)ring.push([x,y]);if(first){x__ = x,y__ = y,v__ = v;first = false;if(v){listener.lineStart();listener.point(x,y);}}else {if(v && v_)listener.point(x,y);else {var l={a:{x:x_,y:y_},b:{x:x,y:y}};if(clipLine(l)){if(!v_){listener.lineStart();listener.point(l.a.x,l.a.y);}listener.point(l.b.x,l.b.y);if(!v)listener.lineEnd();clean = false;}else if(v){listener.lineStart();listener.point(x,y);clean = false;}}}x_ = x,y_ = y,v_ = v;}return clip;};function corner(p,direction){return abs(p[0] - x0) < ε?direction > 0?0:3:abs(p[0] - x1) < ε?direction > 0?2:1:abs(p[1] - y0) < ε?direction > 0?1:0:direction > 0?3:2;}function compare(a,b){return comparePoints(a.x,b.x);}function comparePoints(a,b){var ca=corner(a,1),cb=corner(b,1);return ca !== cb?ca - cb:ca === 0?b[1] - a[1]:ca === 1?a[0] - b[0]:ca === 2?a[1] - b[1]:b[0] - a[0];}}function d3_geo_conic(projectAt){var φ0=0,φ1=π / 3,m=d3_geo_projectionMutator(projectAt),p=m(φ0,φ1);p.parallels = function(_){if(!arguments.length)return [φ0 / π * 180,φ1 / π * 180];return m(φ0 = _[0] * π / 180,φ1 = _[1] * π / 180);};return p;}function d3_geo_conicEqualArea(φ0,φ1){var sinφ0=Math.sin(φ0),n=(sinφ0 + Math.sin(φ1)) / 2,C=1 + sinφ0 * (2 * n - sinφ0),ρ0=Math.sqrt(C) / n;function forward(λ,φ){var ρ=Math.sqrt(C - 2 * n * Math.sin(φ)) / n;return [ρ * Math.sin(λ *= n),ρ0 - ρ * Math.cos(λ)];}forward.invert = function(x,y){var ρ0_y=ρ0 - y;return [Math.atan2(x,ρ0_y) / n,d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n))];};return forward;}(d3.geo.conicEqualArea = function(){return d3_geo_conic(d3_geo_conicEqualArea);}).raw = d3_geo_conicEqualArea;d3.geo.albers = function(){return d3.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070);};d3.geo.albersUsa = function(){var lower48=d3.geo.albers();var alaska=d3.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]);var hawaii=d3.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]);var _point,pointStream={point:function point(x,y){_point = [x,y];}},lower48Point,alaskaPoint,hawaiiPoint;function albersUsa(coordinates){var x=coordinates[0],y=coordinates[1];_point = null;(lower48Point(x,y),_point) || (alaskaPoint(x,y),_point) || hawaiiPoint(x,y);return _point;}albersUsa.invert = function(coordinates){var k=lower48.scale(),t=lower48.translate(),x=(coordinates[0] - t[0]) / k,y=(coordinates[1] - t[1]) / k;return (y >= .12 && y < .234 && x >= -.425 && x < -.214?alaska:y >= .166 && y < .234 && x >= -.214 && x < -.115?hawaii:lower48).invert(coordinates);};albersUsa.stream = function(stream){var lower48Stream=lower48.stream(stream),alaskaStream=alaska.stream(stream),hawaiiStream=hawaii.stream(stream);return {point:function point(x,y){lower48Stream.point(x,y);alaskaStream.point(x,y);hawaiiStream.point(x,y);},sphere:function sphere(){lower48Stream.sphere();alaskaStream.sphere();hawaiiStream.sphere();},lineStart:function lineStart(){lower48Stream.lineStart();alaskaStream.lineStart();hawaiiStream.lineStart();},lineEnd:function lineEnd(){lower48Stream.lineEnd();alaskaStream.lineEnd();hawaiiStream.lineEnd();},polygonStart:function polygonStart(){lower48Stream.polygonStart();alaskaStream.polygonStart();hawaiiStream.polygonStart();},polygonEnd:function polygonEnd(){lower48Stream.polygonEnd();alaskaStream.polygonEnd();hawaiiStream.polygonEnd();}};};albersUsa.precision = function(_){if(!arguments.length)return lower48.precision();lower48.precision(_);alaska.precision(_);hawaii.precision(_);return albersUsa;};albersUsa.scale = function(_){if(!arguments.length)return lower48.scale();lower48.scale(_);alaska.scale(_ * .35);hawaii.scale(_);return albersUsa.translate(lower48.translate());};albersUsa.translate = function(_){if(!arguments.length)return lower48.translate();var k=lower48.scale(),x=+_[0],y=+_[1];lower48Point = lower48.translate(_).clipExtent([[x - .455 * k,y - .238 * k],[x + .455 * k,y + .238 * k]]).stream(pointStream).point;alaskaPoint = alaska.translate([x - .307 * k,y + .201 * k]).clipExtent([[x - .425 * k + ε,y + .12 * k + ε],[x - .214 * k - ε,y + .234 * k - ε]]).stream(pointStream).point;hawaiiPoint = hawaii.translate([x - .205 * k,y + .212 * k]).clipExtent([[x - .214 * k + ε,y + .166 * k + ε],[x - .115 * k - ε,y + .234 * k - ε]]).stream(pointStream).point;return albersUsa;};return albersUsa.scale(1070);};var d3_geo_pathAreaSum,d3_geo_pathAreaPolygon,d3_geo_pathArea={point:d3_noop,lineStart:d3_noop,lineEnd:d3_noop,polygonStart:function polygonStart(){d3_geo_pathAreaPolygon = 0;d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;},polygonEnd:function polygonEnd(){d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);}};function d3_geo_pathAreaRingStart(){var x00,y00,x0,y0;d3_geo_pathArea.point = function(x,y){d3_geo_pathArea.point = nextPoint;x00 = x0 = x,y00 = y0 = y;};function nextPoint(x,y){d3_geo_pathAreaPolygon += y0 * x - x0 * y;x0 = x,y0 = y;}d3_geo_pathArea.lineEnd = function(){nextPoint(x00,y00);};}var d3_geo_pathBoundsX0,d3_geo_pathBoundsY0,d3_geo_pathBoundsX1,d3_geo_pathBoundsY1;var d3_geo_pathBounds={point:d3_geo_pathBoundsPoint,lineStart:d3_noop,lineEnd:d3_noop,polygonStart:d3_noop,polygonEnd:d3_noop};function d3_geo_pathBoundsPoint(x,y){if(x < d3_geo_pathBoundsX0)d3_geo_pathBoundsX0 = x;if(x > d3_geo_pathBoundsX1)d3_geo_pathBoundsX1 = x;if(y < d3_geo_pathBoundsY0)d3_geo_pathBoundsY0 = y;if(y > d3_geo_pathBoundsY1)d3_geo_pathBoundsY1 = y;}function d3_geo_pathBuffer(){var pointCircle=d3_geo_pathBufferCircle(4.5),buffer=[];var stream={point:point,lineStart:function lineStart(){stream.point = pointLineStart;},lineEnd:lineEnd,polygonStart:function polygonStart(){stream.lineEnd = lineEndPolygon;},polygonEnd:function polygonEnd(){stream.lineEnd = lineEnd;stream.point = point;},pointRadius:function pointRadius(_){pointCircle = d3_geo_pathBufferCircle(_);return stream;},result:function result(){if(buffer.length){var result=buffer.join(\"\");buffer = [];return result;}}};function point(x,y){buffer.push(\"M\",x,\",\",y,pointCircle);}function pointLineStart(x,y){buffer.push(\"M\",x,\",\",y);stream.point = pointLine;}function pointLine(x,y){buffer.push(\"L\",x,\",\",y);}function lineEnd(){stream.point = point;}function lineEndPolygon(){buffer.push(\"Z\");}return stream;}function d3_geo_pathBufferCircle(radius){return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";}var d3_geo_pathCentroid={point:d3_geo_pathCentroidPoint,lineStart:d3_geo_pathCentroidLineStart,lineEnd:d3_geo_pathCentroidLineEnd,polygonStart:function polygonStart(){d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;},polygonEnd:function polygonEnd(){d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;}};function d3_geo_pathCentroidPoint(x,y){d3_geo_centroidX0 += x;d3_geo_centroidY0 += y;++d3_geo_centroidZ0;}function d3_geo_pathCentroidLineStart(){var x0,y0;d3_geo_pathCentroid.point = function(x,y){d3_geo_pathCentroid.point = nextPoint;d3_geo_pathCentroidPoint(x0 = x,y0 = y);};function nextPoint(x,y){var dx=x - x0,dy=y - y0,z=Math.sqrt(dx * dx + dy * dy);d3_geo_centroidX1 += z * (x0 + x) / 2;d3_geo_centroidY1 += z * (y0 + y) / 2;d3_geo_centroidZ1 += z;d3_geo_pathCentroidPoint(x0 = x,y0 = y);}}function d3_geo_pathCentroidLineEnd(){d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;}function d3_geo_pathCentroidRingStart(){var x00,y00,x0,y0;d3_geo_pathCentroid.point = function(x,y){d3_geo_pathCentroid.point = nextPoint;d3_geo_pathCentroidPoint(x00 = x0 = x,y00 = y0 = y);};function nextPoint(x,y){var dx=x - x0,dy=y - y0,z=Math.sqrt(dx * dx + dy * dy);d3_geo_centroidX1 += z * (x0 + x) / 2;d3_geo_centroidY1 += z * (y0 + y) / 2;d3_geo_centroidZ1 += z;z = y0 * x - x0 * y;d3_geo_centroidX2 += z * (x0 + x);d3_geo_centroidY2 += z * (y0 + y);d3_geo_centroidZ2 += z * 3;d3_geo_pathCentroidPoint(x0 = x,y0 = y);}d3_geo_pathCentroid.lineEnd = function(){nextPoint(x00,y00);};}function d3_geo_pathContext(context){var _pointRadius=4.5;var stream={point:point,lineStart:function lineStart(){stream.point = pointLineStart;},lineEnd:lineEnd,polygonStart:function polygonStart(){stream.lineEnd = lineEndPolygon;},polygonEnd:function polygonEnd(){stream.lineEnd = lineEnd;stream.point = point;},pointRadius:function pointRadius(_){_pointRadius = _;return stream;},result:d3_noop};function point(x,y){context.moveTo(x + _pointRadius,y);context.arc(x,y,_pointRadius,0,τ);}function pointLineStart(x,y){context.moveTo(x,y);stream.point = pointLine;}function pointLine(x,y){context.lineTo(x,y);}function lineEnd(){stream.point = point;}function lineEndPolygon(){context.closePath();}return stream;}function d3_geo_resample(project){var δ2=.5,cosMinDistance=Math.cos(30 * d3_radians),maxDepth=16;function resample(stream){return (maxDepth?resampleRecursive:resampleNone)(stream);}function resampleNone(stream){return d3_geo_transformPoint(stream,function(x,y){x = project(x,y);stream.point(x[0],x[1]);});}function resampleRecursive(stream){var λ00,φ00,x00,y00,a00,b00,c00,λ0,x0,y0,a0,b0,c0;var resample={point:point,lineStart:lineStart,lineEnd:lineEnd,polygonStart:function polygonStart(){stream.polygonStart();resample.lineStart = ringStart;},polygonEnd:function polygonEnd(){stream.polygonEnd();resample.lineStart = lineStart;}};function point(x,y){x = project(x,y);stream.point(x[0],x[1]);}function lineStart(){x0 = NaN;resample.point = linePoint;stream.lineStart();}function linePoint(λ,φ){var c=d3_geo_cartesian([λ,φ]),p=project(λ,φ);resampleLineTo(x0,y0,λ0,a0,b0,c0,x0 = p[0],y0 = p[1],λ0 = λ,a0 = c[0],b0 = c[1],c0 = c[2],maxDepth,stream);stream.point(x0,y0);}function lineEnd(){resample.point = point;stream.lineEnd();}function ringStart(){lineStart();resample.point = ringPoint;resample.lineEnd = ringEnd;}function ringPoint(λ,φ){linePoint(λ00 = λ,φ00 = φ),x00 = x0,y00 = y0,a00 = a0,b00 = b0,c00 = c0;resample.point = linePoint;}function ringEnd(){resampleLineTo(x0,y0,λ0,a0,b0,c0,x00,y00,λ00,a00,b00,c00,maxDepth,stream);resample.lineEnd = lineEnd;lineEnd();}return resample;}function resampleLineTo(x0,y0,λ0,a0,b0,c0,x1,y1,λ1,a1,b1,c1,depth,stream){var dx=x1 - x0,dy=y1 - y0,d2=dx * dx + dy * dy;if(d2 > 4 * δ2 && depth--){var a=a0 + a1,b=b0 + b1,c=c0 + c1,m=Math.sqrt(a * a + b * b + c * c),φ2=Math.asin(c /= m),λ2=abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε?(λ0 + λ1) / 2:Math.atan2(b,a),p=project(λ2,φ2),x2=p[0],y2=p[1],dx2=x2 - x0,dy2=y2 - y0,dz=dy * dx2 - dx * dy2;if(dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance){resampleLineTo(x0,y0,λ0,a0,b0,c0,x2,y2,λ2,a /= m,b /= m,c,depth,stream);stream.point(x2,y2);resampleLineTo(x2,y2,λ2,a,b,c,x1,y1,λ1,a1,b1,c1,depth,stream);}}}resample.precision = function(_){if(!arguments.length)return Math.sqrt(δ2);maxDepth = (δ2 = _ * _) > 0 && 16;return resample;};return resample;}d3.geo.path = function(){var pointRadius=4.5,projection,context,projectStream,contextStream,cacheStream;function path(object){if(object){if(typeof pointRadius === \"function\")contextStream.pointRadius(+pointRadius.apply(this,arguments));if(!cacheStream || !cacheStream.valid)cacheStream = projectStream(contextStream);d3.geo.stream(object,cacheStream);}return contextStream.result();}path.area = function(object){d3_geo_pathAreaSum = 0;d3.geo.stream(object,projectStream(d3_geo_pathArea));return d3_geo_pathAreaSum;};path.centroid = function(object){d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;d3.geo.stream(object,projectStream(d3_geo_pathCentroid));return d3_geo_centroidZ2?[d3_geo_centroidX2 / d3_geo_centroidZ2,d3_geo_centroidY2 / d3_geo_centroidZ2]:d3_geo_centroidZ1?[d3_geo_centroidX1 / d3_geo_centroidZ1,d3_geo_centroidY1 / d3_geo_centroidZ1]:d3_geo_centroidZ0?[d3_geo_centroidX0 / d3_geo_centroidZ0,d3_geo_centroidY0 / d3_geo_centroidZ0]:[NaN,NaN];};path.bounds = function(object){d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);d3.geo.stream(object,projectStream(d3_geo_pathBounds));return [[d3_geo_pathBoundsX0,d3_geo_pathBoundsY0],[d3_geo_pathBoundsX1,d3_geo_pathBoundsY1]];};path.projection = function(_){if(!arguments.length)return projection;projectStream = (projection = _)?_.stream || d3_geo_pathProjectStream(_):d3_identity;return reset();};path.context = function(_){if(!arguments.length)return context;contextStream = (context = _) == null?new d3_geo_pathBuffer():new d3_geo_pathContext(_);if(typeof pointRadius !== \"function\")contextStream.pointRadius(pointRadius);return reset();};path.pointRadius = function(_){if(!arguments.length)return pointRadius;pointRadius = typeof _ === \"function\"?_:(contextStream.pointRadius(+_),+_);return path;};function reset(){cacheStream = null;return path;}return path.projection(d3.geo.albersUsa()).context(null);};function d3_geo_pathProjectStream(project){var resample=d3_geo_resample(function(x,y){return project([x * d3_degrees,y * d3_degrees]);});return function(stream){return d3_geo_projectionRadians(resample(stream));};}d3.geo.transform = function(methods){return {stream:function stream(_stream2){var transform=new d3_geo_transform(_stream2);for(var k in methods) transform[k] = methods[k];return transform;}};};function d3_geo_transform(stream){this.stream = stream;}d3_geo_transform.prototype = {point:function point(x,y){this.stream.point(x,y);},sphere:function sphere(){this.stream.sphere();},lineStart:function lineStart(){this.stream.lineStart();},lineEnd:function lineEnd(){this.stream.lineEnd();},polygonStart:function polygonStart(){this.stream.polygonStart();},polygonEnd:function polygonEnd(){this.stream.polygonEnd();}};function d3_geo_transformPoint(stream,point){return {point:point,sphere:function sphere(){stream.sphere();},lineStart:function lineStart(){stream.lineStart();},lineEnd:function lineEnd(){stream.lineEnd();},polygonStart:function polygonStart(){stream.polygonStart();},polygonEnd:function polygonEnd(){stream.polygonEnd();}};}d3.geo.projection = d3_geo_projection;d3.geo.projectionMutator = d3_geo_projectionMutator;function d3_geo_projection(project){return d3_geo_projectionMutator(function(){return project;})();}function d3_geo_projectionMutator(projectAt){var project,rotate,projectRotate,projectResample=d3_geo_resample(function(x,y){x = project(x,y);return [x[0] * k + δx,δy - x[1] * k];}),k=150,x=480,y=250,λ=0,φ=0,δλ=0,δφ=0,δγ=0,δx,δy,preclip=d3_geo_clipAntimeridian,postclip=d3_identity,clipAngle=null,clipExtent=null,stream;function projection(point){point = projectRotate(point[0] * d3_radians,point[1] * d3_radians);return [point[0] * k + δx,δy - point[1] * k];}function invert(point){point = projectRotate.invert((point[0] - δx) / k,(δy - point[1]) / k);return point && [point[0] * d3_degrees,point[1] * d3_degrees];}projection.stream = function(output){if(stream)stream.valid = false;stream = d3_geo_projectionRadians(preclip(rotate,projectResample(postclip(output))));stream.valid = true;return stream;};projection.clipAngle = function(_){if(!arguments.length)return clipAngle;preclip = _ == null?(clipAngle = _,d3_geo_clipAntimeridian):d3_geo_clipCircle((clipAngle = +_) * d3_radians);return invalidate();};projection.clipExtent = function(_){if(!arguments.length)return clipExtent;clipExtent = _;postclip = _?d3_geo_clipExtent(_[0][0],_[0][1],_[1][0],_[1][1]):d3_identity;return invalidate();};projection.scale = function(_){if(!arguments.length)return k;k = +_;return reset();};projection.translate = function(_){if(!arguments.length)return [x,y];x = +_[0];y = +_[1];return reset();};projection.center = function(_){if(!arguments.length)return [λ * d3_degrees,φ * d3_degrees];λ = _[0] % 360 * d3_radians;φ = _[1] % 360 * d3_radians;return reset();};projection.rotate = function(_){if(!arguments.length)return [δλ * d3_degrees,δφ * d3_degrees,δγ * d3_degrees];δλ = _[0] % 360 * d3_radians;δφ = _[1] % 360 * d3_radians;δγ = _.length > 2?_[2] % 360 * d3_radians:0;return reset();};d3.rebind(projection,projectResample,\"precision\");function reset(){projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ,δφ,δγ),project);var center=project(λ,φ);δx = x - center[0] * k;δy = y + center[1] * k;return invalidate();}function invalidate(){if(stream)stream.valid = false,stream = null;return projection;}return function(){project = projectAt.apply(this,arguments);projection.invert = project.invert && invert;return reset();};}function d3_geo_projectionRadians(stream){return d3_geo_transformPoint(stream,function(x,y){stream.point(x * d3_radians,y * d3_radians);});}function d3_geo_equirectangular(λ,φ){return [λ,φ];}(d3.geo.equirectangular = function(){return d3_geo_projection(d3_geo_equirectangular);}).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;d3.geo.rotation = function(rotate){rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians,rotate[1] * d3_radians,rotate.length > 2?rotate[2] * d3_radians:0);function forward(coordinates){coordinates = rotate(coordinates[0] * d3_radians,coordinates[1] * d3_radians);return coordinates[0] *= d3_degrees,coordinates[1] *= d3_degrees,coordinates;}forward.invert = function(coordinates){coordinates = rotate.invert(coordinates[0] * d3_radians,coordinates[1] * d3_radians);return coordinates[0] *= d3_degrees,coordinates[1] *= d3_degrees,coordinates;};return forward;};function d3_geo_identityRotation(λ,φ){return [λ > π?λ - τ:λ < -π?λ + τ:λ,φ];}d3_geo_identityRotation.invert = d3_geo_equirectangular;function d3_geo_rotation(δλ,δφ,δγ){return δλ?δφ || δγ?d3_geo_compose(d3_geo_rotationλ(δλ),d3_geo_rotationφγ(δφ,δγ)):d3_geo_rotationλ(δλ):δφ || δγ?d3_geo_rotationφγ(δφ,δγ):d3_geo_identityRotation;}function d3_geo_forwardRotationλ(δλ){return function(λ,φ){return λ += δλ,[λ > π?λ - τ:λ < -π?λ + τ:λ,φ];};}function d3_geo_rotationλ(δλ){var rotation=d3_geo_forwardRotationλ(δλ);rotation.invert = d3_geo_forwardRotationλ(-δλ);return rotation;}function d3_geo_rotationφγ(δφ,δγ){var cosδφ=Math.cos(δφ),sinδφ=Math.sin(δφ),cosδγ=Math.cos(δγ),sinδγ=Math.sin(δγ);function rotation(λ,φ){var cosφ=Math.cos(φ),x=Math.cos(λ) * cosφ,y=Math.sin(λ) * cosφ,z=Math.sin(φ),k=z * cosδφ + x * sinδφ;return [Math.atan2(y * cosδγ - k * sinδγ,x * cosδφ - z * sinδφ),d3_asin(k * cosδγ + y * sinδγ)];}rotation.invert = function(λ,φ){var cosφ=Math.cos(φ),x=Math.cos(λ) * cosφ,y=Math.sin(λ) * cosφ,z=Math.sin(φ),k=z * cosδγ - y * sinδγ;return [Math.atan2(y * cosδγ + z * sinδγ,x * cosδφ + k * sinδφ),d3_asin(k * cosδφ - x * sinδφ)];};return rotation;}d3.geo.circle = function(){var origin=[0,0],angle,precision=6,interpolate;function circle(){var center=typeof origin === \"function\"?origin.apply(this,arguments):origin,rotate=d3_geo_rotation(-center[0] * d3_radians,-center[1] * d3_radians,0).invert,ring=[];interpolate(null,null,1,{point:function point(x,y){ring.push(x = rotate(x,y));x[0] *= d3_degrees,x[1] *= d3_degrees;}});return {type:\"Polygon\",coordinates:[ring]};}circle.origin = function(x){if(!arguments.length)return origin;origin = x;return circle;};circle.angle = function(x){if(!arguments.length)return angle;interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians,precision * d3_radians);return circle;};circle.precision = function(_){if(!arguments.length)return precision;interpolate = d3_geo_circleInterpolate(angle * d3_radians,(precision = +_) * d3_radians);return circle;};return circle.angle(90);};function d3_geo_circleInterpolate(radius,precision){var cr=Math.cos(radius),sr=Math.sin(radius);return function(from,to,direction,listener){var step=direction * precision;if(from != null){from = d3_geo_circleAngle(cr,from);to = d3_geo_circleAngle(cr,to);if(direction > 0?from < to:from > to)from += direction * τ;}else {from = radius + direction * τ;to = radius - .5 * step;}for(var point,t=from;direction > 0?t > to:t < to;t -= step) {listener.point((point = d3_geo_spherical([cr,-sr * Math.cos(t),-sr * Math.sin(t)]))[0],point[1]);}};}function d3_geo_circleAngle(cr,point){var a=d3_geo_cartesian(point);a[0] -= cr;d3_geo_cartesianNormalize(a);var angle=d3_acos(-a[1]);return ((-a[2] < 0?-angle:angle) + 2 * Math.PI - ε) % (2 * Math.PI);}d3.geo.distance = function(a,b){var Δλ=(b[0] - a[0]) * d3_radians,φ0=a[1] * d3_radians,φ1=b[1] * d3_radians,sinΔλ=Math.sin(Δλ),cosΔλ=Math.cos(Δλ),sinφ0=Math.sin(φ0),cosφ0=Math.cos(φ0),sinφ1=Math.sin(φ1),cosφ1=Math.cos(φ1),t;return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t),sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);};d3.geo.graticule = function(){var x1,x0,X1,X0,y1,y0,Y1,Y0,dx=10,dy=dx,DX=90,DY=360,x,y,X,Y,precision=2.5;function graticule(){return {type:\"MultiLineString\",coordinates:lines()};}function lines(){return d3.range(Math.ceil(X0 / DX) * DX,X1,DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY,Y1,DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx,x1,dx).filter(function(x){return abs(x % DX) > ε;}).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy,y1,dy).filter(function(y){return abs(y % DY) > ε;}).map(y));}graticule.lines = function(){return lines().map(function(coordinates){return {type:\"LineString\",coordinates:coordinates};});};graticule.outline = function(){return {type:\"Polygon\",coordinates:[X(X0).concat(Y(Y1).slice(1),X(X1).reverse().slice(1),Y(Y0).reverse().slice(1))]};};graticule.extent = function(_){if(!arguments.length)return graticule.minorExtent();return graticule.majorExtent(_).minorExtent(_);};graticule.majorExtent = function(_){if(!arguments.length)return [[X0,Y0],[X1,Y1]];X0 = +_[0][0],X1 = +_[1][0];Y0 = +_[0][1],Y1 = +_[1][1];if(X0 > X1)_ = X0,X0 = X1,X1 = _;if(Y0 > Y1)_ = Y0,Y0 = Y1,Y1 = _;return graticule.precision(precision);};graticule.minorExtent = function(_){if(!arguments.length)return [[x0,y0],[x1,y1]];x0 = +_[0][0],x1 = +_[1][0];y0 = +_[0][1],y1 = +_[1][1];if(x0 > x1)_ = x0,x0 = x1,x1 = _;if(y0 > y1)_ = y0,y0 = y1,y1 = _;return graticule.precision(precision);};graticule.step = function(_){if(!arguments.length)return graticule.minorStep();return graticule.majorStep(_).minorStep(_);};graticule.majorStep = function(_){if(!arguments.length)return [DX,DY];DX = +_[0],DY = +_[1];return graticule;};graticule.minorStep = function(_){if(!arguments.length)return [dx,dy];dx = +_[0],dy = +_[1];return graticule;};graticule.precision = function(_){if(!arguments.length)return precision;precision = +_;x = d3_geo_graticuleX(y0,y1,90);y = d3_geo_graticuleY(x0,x1,precision);X = d3_geo_graticuleX(Y0,Y1,90);Y = d3_geo_graticuleY(X0,X1,precision);return graticule;};return graticule.majorExtent([[-180,-90 + ε],[180,90 - ε]]).minorExtent([[-180,-80 - ε],[180,80 + ε]]);};function d3_geo_graticuleX(y0,y1,dy){var y=d3.range(y0,y1 - ε,dy).concat(y1);return function(x){return y.map(function(y){return [x,y];});};}function d3_geo_graticuleY(x0,x1,dx){var x=d3.range(x0,x1 - ε,dx).concat(x1);return function(y){return x.map(function(x){return [x,y];});};}function d3_source(d){return d.source;}function d3_target(d){return d.target;}d3.geo.greatArc = function(){var source=d3_source,source_,target=d3_target,target_;function greatArc(){return {type:\"LineString\",coordinates:[source_ || source.apply(this,arguments),target_ || target.apply(this,arguments)]};}greatArc.distance = function(){return d3.geo.distance(source_ || source.apply(this,arguments),target_ || target.apply(this,arguments));};greatArc.source = function(_){if(!arguments.length)return source;source = _,source_ = typeof _ === \"function\"?null:_;return greatArc;};greatArc.target = function(_){if(!arguments.length)return target;target = _,target_ = typeof _ === \"function\"?null:_;return greatArc;};greatArc.precision = function(){return arguments.length?greatArc:0;};return greatArc;};d3.geo.interpolate = function(source,target){return d3_geo_interpolate(source[0] * d3_radians,source[1] * d3_radians,target[0] * d3_radians,target[1] * d3_radians);};function d3_geo_interpolate(x0,y0,x1,y1){var cy0=Math.cos(y0),sy0=Math.sin(y0),cy1=Math.cos(y1),sy1=Math.sin(y1),kx0=cy0 * Math.cos(x0),ky0=cy0 * Math.sin(x0),kx1=cy1 * Math.cos(x1),ky1=cy1 * Math.sin(x1),d=2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))),k=1 / Math.sin(d);var interpolate=d?function(t){var B=Math.sin(t *= d) * k,A=Math.sin(d - t) * k,x=A * kx0 + B * kx1,y=A * ky0 + B * ky1,z=A * sy0 + B * sy1;return [Math.atan2(y,x) * d3_degrees,Math.atan2(z,Math.sqrt(x * x + y * y)) * d3_degrees];}:function(){return [x0 * d3_degrees,y0 * d3_degrees];};interpolate.distance = d;return interpolate;}d3.geo.length = function(object){d3_geo_lengthSum = 0;d3.geo.stream(object,d3_geo_length);return d3_geo_lengthSum;};var d3_geo_lengthSum;var d3_geo_length={sphere:d3_noop,point:d3_noop,lineStart:d3_geo_lengthLineStart,lineEnd:d3_noop,polygonStart:d3_noop,polygonEnd:d3_noop};function d3_geo_lengthLineStart(){var λ0,sinφ0,cosφ0;d3_geo_length.point = function(λ,φ){λ0 = λ * d3_radians,sinφ0 = Math.sin(φ *= d3_radians),cosφ0 = Math.cos(φ);d3_geo_length.point = nextPoint;};d3_geo_length.lineEnd = function(){d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;};function nextPoint(λ,φ){var sinφ=Math.sin(φ *= d3_radians),cosφ=Math.cos(φ),t=abs((λ *= d3_radians) - λ0),cosΔλ=Math.cos(t);d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t),sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);λ0 = λ,sinφ0 = sinφ,cosφ0 = cosφ;}}function d3_geo_azimuthal(scale,angle){function azimuthal(λ,φ){var cosλ=Math.cos(λ),cosφ=Math.cos(φ),k=scale(cosλ * cosφ);return [k * cosφ * Math.sin(λ),k * Math.sin(φ)];}azimuthal.invert = function(x,y){var ρ=Math.sqrt(x * x + y * y),c=angle(ρ),sinc=Math.sin(c),cosc=Math.cos(c);return [Math.atan2(x * sinc,ρ * cosc),Math.asin(ρ && y * sinc / ρ)];};return azimuthal;}var d3_geo_azimuthalEqualArea=d3_geo_azimuthal(function(cosλcosφ){return Math.sqrt(2 / (1 + cosλcosφ));},function(ρ){return 2 * Math.asin(ρ / 2);});(d3.geo.azimuthalEqualArea = function(){return d3_geo_projection(d3_geo_azimuthalEqualArea);}).raw = d3_geo_azimuthalEqualArea;var d3_geo_azimuthalEquidistant=d3_geo_azimuthal(function(cosλcosφ){var c=Math.acos(cosλcosφ);return c && c / Math.sin(c);},d3_identity);(d3.geo.azimuthalEquidistant = function(){return d3_geo_projection(d3_geo_azimuthalEquidistant);}).raw = d3_geo_azimuthalEquidistant;function d3_geo_conicConformal(φ0,φ1){var cosφ0=Math.cos(φ0),t=function t(φ){return Math.tan(π / 4 + φ / 2);},n=φ0 === φ1?Math.sin(φ0):Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)),F=cosφ0 * Math.pow(t(φ0),n) / n;if(!n)return d3_geo_mercator;function forward(λ,φ){if(F > 0){if(φ < -halfπ + ε)φ = -halfπ + ε;}else {if(φ > halfπ - ε)φ = halfπ - ε;}var ρ=F / Math.pow(t(φ),n);return [ρ * Math.sin(n * λ),F - ρ * Math.cos(n * λ)];}forward.invert = function(x,y){var ρ0_y=F - y,ρ=d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);return [Math.atan2(x,ρ0_y) / n,2 * Math.atan(Math.pow(F / ρ,1 / n)) - halfπ];};return forward;}(d3.geo.conicConformal = function(){return d3_geo_conic(d3_geo_conicConformal);}).raw = d3_geo_conicConformal;function d3_geo_conicEquidistant(φ0,φ1){var cosφ0=Math.cos(φ0),n=φ0 === φ1?Math.sin(φ0):(cosφ0 - Math.cos(φ1)) / (φ1 - φ0),G=cosφ0 / n + φ0;if(abs(n) < ε)return d3_geo_equirectangular;function forward(λ,φ){var ρ=G - φ;return [ρ * Math.sin(n * λ),G - ρ * Math.cos(n * λ)];}forward.invert = function(x,y){var ρ0_y=G - y;return [Math.atan2(x,ρ0_y) / n,G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y)];};return forward;}(d3.geo.conicEquidistant = function(){return d3_geo_conic(d3_geo_conicEquidistant);}).raw = d3_geo_conicEquidistant;var d3_geo_gnomonic=d3_geo_azimuthal(function(cosλcosφ){return 1 / cosλcosφ;},Math.atan);(d3.geo.gnomonic = function(){return d3_geo_projection(d3_geo_gnomonic);}).raw = d3_geo_gnomonic;function d3_geo_mercator(λ,φ){return [λ,Math.log(Math.tan(π / 4 + φ / 2))];}d3_geo_mercator.invert = function(x,y){return [x,2 * Math.atan(Math.exp(y)) - halfπ];};function d3_geo_mercatorProjection(project){var m=d3_geo_projection(project),scale=m.scale,translate=m.translate,clipExtent=m.clipExtent,clipAuto;m.scale = function(){var v=scale.apply(m,arguments);return v === m?clipAuto?m.clipExtent(null):m:v;};m.translate = function(){var v=translate.apply(m,arguments);return v === m?clipAuto?m.clipExtent(null):m:v;};m.clipExtent = function(_){var v=clipExtent.apply(m,arguments);if(v === m){if(clipAuto = _ == null){var k=π * scale(),t=translate();clipExtent([[t[0] - k,t[1] - k],[t[0] + k,t[1] + k]]);}}else if(clipAuto){v = null;}return v;};return m.clipExtent(null);}(d3.geo.mercator = function(){return d3_geo_mercatorProjection(d3_geo_mercator);}).raw = d3_geo_mercator;var d3_geo_orthographic=d3_geo_azimuthal(function(){return 1;},Math.asin);(d3.geo.orthographic = function(){return d3_geo_projection(d3_geo_orthographic);}).raw = d3_geo_orthographic;var d3_geo_stereographic=d3_geo_azimuthal(function(cosλcosφ){return 1 / (1 + cosλcosφ);},function(ρ){return 2 * Math.atan(ρ);});(d3.geo.stereographic = function(){return d3_geo_projection(d3_geo_stereographic);}).raw = d3_geo_stereographic;function d3_geo_transverseMercator(λ,φ){return [Math.log(Math.tan(π / 4 + φ / 2)),-λ];}d3_geo_transverseMercator.invert = function(x,y){return [-y,2 * Math.atan(Math.exp(x)) - halfπ];};(d3.geo.transverseMercator = function(){var projection=d3_geo_mercatorProjection(d3_geo_transverseMercator),center=projection.center,rotate=projection.rotate;projection.center = function(_){return _?center([-_[1],_[0]]):(_ = center(),[_[1],-_[0]]);};projection.rotate = function(_){return _?rotate([_[0],_[1],_.length > 2?_[2] + 90:90]):(_ = rotate(),[_[0],_[1],_[2] - 90]);};return rotate([0,0,90]);}).raw = d3_geo_transverseMercator;d3.geom = {};function d3_geom_pointX(d){return d[0];}function d3_geom_pointY(d){return d[1];}d3.geom.hull = function(vertices){var x=d3_geom_pointX,y=d3_geom_pointY;if(arguments.length)return hull(vertices);function hull(data){if(data.length < 3)return [];var fx=d3_functor(x),fy=d3_functor(y),i,n=data.length,points=[],flippedPoints=[];for(i = 0;i < n;i++) {points.push([+fx.call(this,data[i],i),+fy.call(this,data[i],i),i]);}points.sort(d3_geom_hullOrder);for(i = 0;i < n;i++) flippedPoints.push([points[i][0],-points[i][1]]);var upper=d3_geom_hullUpper(points),lower=d3_geom_hullUpper(flippedPoints);var skipLeft=lower[0] === upper[0],skipRight=lower[lower.length - 1] === upper[upper.length - 1],polygon=[];for(i = upper.length - 1;i >= 0;--i) polygon.push(data[points[upper[i]][2]]);for(i = +skipLeft;i < lower.length - skipRight;++i) polygon.push(data[points[lower[i]][2]]);return polygon;}hull.x = function(_){return arguments.length?(x = _,hull):x;};hull.y = function(_){return arguments.length?(y = _,hull):y;};return hull;};function d3_geom_hullUpper(points){var n=points.length,hull=[0,1],hs=2;for(var i=2;i < n;i++) {while(hs > 1 && d3_cross2d(points[hull[hs - 2]],points[hull[hs - 1]],points[i]) <= 0) --hs;hull[hs++] = i;}return hull.slice(0,hs);}function d3_geom_hullOrder(a,b){return a[0] - b[0] || a[1] - b[1];}d3.geom.polygon = function(coordinates){d3_subclass(coordinates,d3_geom_polygonPrototype);return coordinates;};var d3_geom_polygonPrototype=d3.geom.polygon.prototype = [];d3_geom_polygonPrototype.area = function(){var i=-1,n=this.length,a,b=this[n - 1],area=0;while(++i < n) {a = b;b = this[i];area += a[1] * b[0] - a[0] * b[1];}return area * .5;};d3_geom_polygonPrototype.centroid = function(k){var i=-1,n=this.length,x=0,y=0,a,b=this[n - 1],c;if(!arguments.length)k = -1 / (6 * this.area());while(++i < n) {a = b;b = this[i];c = a[0] * b[1] - b[0] * a[1];x += (a[0] + b[0]) * c;y += (a[1] + b[1]) * c;}return [x * k,y * k];};d3_geom_polygonPrototype.clip = function(subject){var input,closed=d3_geom_polygonClosed(subject),i=-1,n=this.length - d3_geom_polygonClosed(this),j,m,a=this[n - 1],b,c,d;while(++i < n) {input = subject.slice();subject.length = 0;b = this[i];c = input[(m = input.length - closed) - 1];j = -1;while(++j < m) {d = input[j];if(d3_geom_polygonInside(d,a,b)){if(!d3_geom_polygonInside(c,a,b)){subject.push(d3_geom_polygonIntersect(c,d,a,b));}subject.push(d);}else if(d3_geom_polygonInside(c,a,b)){subject.push(d3_geom_polygonIntersect(c,d,a,b));}c = d;}if(closed)subject.push(subject[0]);a = b;}return subject;};function d3_geom_polygonInside(p,a,b){return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);}function d3_geom_polygonIntersect(c,d,a,b){var x1=c[0],x3=a[0],x21=d[0] - x1,x43=b[0] - x3,y1=c[1],y3=a[1],y21=d[1] - y1,y43=b[1] - y3,ua=(x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);return [x1 + ua * x21,y1 + ua * y21];}function d3_geom_polygonClosed(coordinates){var a=coordinates[0],b=coordinates[coordinates.length - 1];return !(a[0] - b[0] || a[1] - b[1]);}var d3_geom_voronoiEdges,d3_geom_voronoiCells,d3_geom_voronoiBeaches,d3_geom_voronoiBeachPool=[],d3_geom_voronoiFirstCircle,d3_geom_voronoiCircles,d3_geom_voronoiCirclePool=[];function d3_geom_voronoiBeach(){d3_geom_voronoiRedBlackNode(this);this.edge = this.site = this.circle = null;}function d3_geom_voronoiCreateBeach(site){var beach=d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();beach.site = site;return beach;}function d3_geom_voronoiDetachBeach(beach){d3_geom_voronoiDetachCircle(beach);d3_geom_voronoiBeaches.remove(beach);d3_geom_voronoiBeachPool.push(beach);d3_geom_voronoiRedBlackNode(beach);}function d3_geom_voronoiRemoveBeach(beach){var circle=beach.circle,x=circle.x,y=circle.cy,vertex={x:x,y:y},previous=beach.P,next=beach.N,disappearing=[beach];d3_geom_voronoiDetachBeach(beach);var lArc=previous;while(lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {previous = lArc.P;disappearing.unshift(lArc);d3_geom_voronoiDetachBeach(lArc);lArc = previous;}disappearing.unshift(lArc);d3_geom_voronoiDetachCircle(lArc);var rArc=next;while(rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {next = rArc.N;disappearing.push(rArc);d3_geom_voronoiDetachBeach(rArc);rArc = next;}disappearing.push(rArc);d3_geom_voronoiDetachCircle(rArc);var nArcs=disappearing.length,iArc;for(iArc = 1;iArc < nArcs;++iArc) {rArc = disappearing[iArc];lArc = disappearing[iArc - 1];d3_geom_voronoiSetEdgeEnd(rArc.edge,lArc.site,rArc.site,vertex);}lArc = disappearing[0];rArc = disappearing[nArcs - 1];rArc.edge = d3_geom_voronoiCreateEdge(lArc.site,rArc.site,null,vertex);d3_geom_voronoiAttachCircle(lArc);d3_geom_voronoiAttachCircle(rArc);}function d3_geom_voronoiAddBeach(site){var x=site.x,directrix=site.y,lArc,rArc,dxl,dxr,node=d3_geom_voronoiBeaches._;while(node) {dxl = d3_geom_voronoiLeftBreakPoint(node,directrix) - x;if(dxl > ε)node = node.L;else {dxr = x - d3_geom_voronoiRightBreakPoint(node,directrix);if(dxr > ε){if(!node.R){lArc = node;break;}node = node.R;}else {if(dxl > -ε){lArc = node.P;rArc = node;}else if(dxr > -ε){lArc = node;rArc = node.N;}else {lArc = rArc = node;}break;}}}var newArc=d3_geom_voronoiCreateBeach(site);d3_geom_voronoiBeaches.insert(lArc,newArc);if(!lArc && !rArc)return;if(lArc === rArc){d3_geom_voronoiDetachCircle(lArc);rArc = d3_geom_voronoiCreateBeach(lArc.site);d3_geom_voronoiBeaches.insert(newArc,rArc);newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site,newArc.site);d3_geom_voronoiAttachCircle(lArc);d3_geom_voronoiAttachCircle(rArc);return;}if(!rArc){newArc.edge = d3_geom_voronoiCreateEdge(lArc.site,newArc.site);return;}d3_geom_voronoiDetachCircle(lArc);d3_geom_voronoiDetachCircle(rArc);var lSite=lArc.site,ax=lSite.x,ay=lSite.y,bx=site.x - ax,by=site.y - ay,rSite=rArc.site,cx=rSite.x - ax,cy=rSite.y - ay,d=2 * (bx * cy - by * cx),hb=bx * bx + by * by,hc=cx * cx + cy * cy,vertex={x:(cy * hb - by * hc) / d + ax,y:(bx * hc - cx * hb) / d + ay};d3_geom_voronoiSetEdgeEnd(rArc.edge,lSite,rSite,vertex);newArc.edge = d3_geom_voronoiCreateEdge(lSite,site,null,vertex);rArc.edge = d3_geom_voronoiCreateEdge(site,rSite,null,vertex);d3_geom_voronoiAttachCircle(lArc);d3_geom_voronoiAttachCircle(rArc);}function d3_geom_voronoiLeftBreakPoint(arc,directrix){var site=arc.site,rfocx=site.x,rfocy=site.y,pby2=rfocy - directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return -Infinity;site = lArc.site;var lfocx=site.x,lfocy=site.y,plby2=lfocy - directrix;if(!plby2)return lfocx;var hl=lfocx - rfocx,aby2=1 / pby2 - 1 / plby2,b=hl / plby2;if(aby2)return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;return (rfocx + lfocx) / 2;}function d3_geom_voronoiRightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return d3_geom_voronoiLeftBreakPoint(rArc,directrix);var site=arc.site;return site.y === directrix?site.x:Infinity;}function d3_geom_voronoiCell(site){this.site = site;this.edges = [];}d3_geom_voronoiCell.prototype.prepare = function(){var halfEdges=this.edges,iHalfEdge=halfEdges.length,edge;while(iHalfEdge--) {edge = halfEdges[iHalfEdge].edge;if(!edge.b || !edge.a)halfEdges.splice(iHalfEdge,1);}halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);return halfEdges.length;};function d3_geom_voronoiCloseCells(extent){var x0=extent[0][0],x1=extent[1][0],y0=extent[0][1],y1=extent[1][1],x2,y2,x3,y3,cells=d3_geom_voronoiCells,iCell=cells.length,cell,iHalfEdge,halfEdges,nHalfEdges,start,end;while(iCell--) {cell = cells[iCell];if(!cell || !cell.prepare())continue;halfEdges = cell.edges;nHalfEdges = halfEdges.length;iHalfEdge = 0;while(iHalfEdge < nHalfEdges) {end = halfEdges[iHalfEdge].end(),x3 = end.x,y3 = end.y;start = halfEdges[++iHalfEdge % nHalfEdges].start(),x2 = start.x,y2 = start.y;if(abs(x3 - x2) > ε || abs(y3 - y2) > ε){halfEdges.splice(iHalfEdge,0,new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site,end,abs(x3 - x0) < ε && y1 - y3 > ε?{x:x0,y:abs(x2 - x0) < ε?y2:y1}:abs(y3 - y1) < ε && x1 - x3 > ε?{x:abs(y2 - y1) < ε?x2:x1,y:y1}:abs(x3 - x1) < ε && y3 - y0 > ε?{x:x1,y:abs(x2 - x1) < ε?y2:y0}:abs(y3 - y0) < ε && x3 - x0 > ε?{x:abs(y2 - y0) < ε?x2:x0,y:y0}:null),cell.site,null));++nHalfEdges;}}}}function d3_geom_voronoiHalfEdgeOrder(a,b){return b.angle - a.angle;}function d3_geom_voronoiCircle(){d3_geom_voronoiRedBlackNode(this);this.x = this.y = this.arc = this.site = this.cy = null;}function d3_geom_voronoiAttachCircle(arc){var lArc=arc.P,rArc=arc.N;if(!lArc || !rArc)return;var lSite=lArc.site,cSite=arc.site,rSite=rArc.site;if(lSite === rSite)return;var bx=cSite.x,by=cSite.y,ax=lSite.x - bx,ay=lSite.y - by,cx=rSite.x - bx,cy=rSite.y - by;var d=2 * (ax * cy - ay * cx);if(d >= -ε2)return;var ha=ax * ax + ay * ay,hc=cx * cx + cy * cy,x=(cy * ha - ay * hc) / d,y=(ax * hc - cx * ha) / d,cy=y + by;var circle=d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();circle.arc = arc;circle.site = cSite;circle.x = x + bx;circle.y = cy + Math.sqrt(x * x + y * y);circle.cy = cy;arc.circle = circle;var before=null,node=d3_geom_voronoiCircles._;while(node) {if(circle.y < node.y || circle.y === node.y && circle.x <= node.x){if(node.L)node = node.L;else {before = node.P;break;}}else {if(node.R)node = node.R;else {before = node;break;}}}d3_geom_voronoiCircles.insert(before,circle);if(!before)d3_geom_voronoiFirstCircle = circle;}function d3_geom_voronoiDetachCircle(arc){var circle=arc.circle;if(circle){if(!circle.P)d3_geom_voronoiFirstCircle = circle.N;d3_geom_voronoiCircles.remove(circle);d3_geom_voronoiCirclePool.push(circle);d3_geom_voronoiRedBlackNode(circle);arc.circle = null;}}function d3_geom_voronoiClipEdges(extent){var edges=d3_geom_voronoiEdges,clip=d3_geom_clipLine(extent[0][0],extent[0][1],extent[1][0],extent[1][1]),i=edges.length,e;while(i--) {e = edges[i];if(!d3_geom_voronoiConnectEdge(e,extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε){e.a = e.b = null;edges.splice(i,1);}}}function d3_geom_voronoiConnectEdge(edge,extent){var vb=edge.b;if(vb)return true;var va=edge.a,x0=extent[0][0],x1=extent[1][0],y0=extent[0][1],y1=extent[1][1],lSite=edge.l,rSite=edge.r,lx=lSite.x,ly=lSite.y,rx=rSite.x,ry=rSite.y,fx=(lx + rx) / 2,fy=(ly + ry) / 2,fm,fb;if(ry === ly){if(fx < x0 || fx >= x1)return;if(lx > rx){if(!va)va = {x:fx,y:y0};else if(va.y >= y1)return;vb = {x:fx,y:y1};}else {if(!va)va = {x:fx,y:y1};else if(va.y < y0)return;vb = {x:fx,y:y0};}}else {fm = (lx - rx) / (ry - ly);fb = fy - fm * fx;if(fm < -1 || fm > 1){if(lx > rx){if(!va)va = {x:(y0 - fb) / fm,y:y0};else if(va.y >= y1)return;vb = {x:(y1 - fb) / fm,y:y1};}else {if(!va)va = {x:(y1 - fb) / fm,y:y1};else if(va.y < y0)return;vb = {x:(y0 - fb) / fm,y:y0};}}else {if(ly < ry){if(!va)va = {x:x0,y:fm * x0 + fb};else if(va.x >= x1)return;vb = {x:x1,y:fm * x1 + fb};}else {if(!va)va = {x:x1,y:fm * x1 + fb};else if(va.x < x0)return;vb = {x:x0,y:fm * x0 + fb};}}}edge.a = va;edge.b = vb;return true;}function d3_geom_voronoiEdge(lSite,rSite){this.l = lSite;this.r = rSite;this.a = this.b = null;}function d3_geom_voronoiCreateEdge(lSite,rSite,va,vb){var edge=new d3_geom_voronoiEdge(lSite,rSite);d3_geom_voronoiEdges.push(edge);if(va)d3_geom_voronoiSetEdgeEnd(edge,lSite,rSite,va);if(vb)d3_geom_voronoiSetEdgeEnd(edge,rSite,lSite,vb);d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge,lSite,rSite));d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge,rSite,lSite));return edge;}function d3_geom_voronoiCreateBorderEdge(lSite,va,vb){var edge=new d3_geom_voronoiEdge(lSite,null);edge.a = va;edge.b = vb;d3_geom_voronoiEdges.push(edge);return edge;}function d3_geom_voronoiSetEdgeEnd(edge,lSite,rSite,vertex){if(!edge.a && !edge.b){edge.a = vertex;edge.l = lSite;edge.r = rSite;}else if(edge.l === rSite){edge.b = vertex;}else {edge.a = vertex;}}function d3_geom_voronoiHalfEdge(edge,lSite,rSite){var va=edge.a,vb=edge.b;this.edge = edge;this.site = lSite;this.angle = rSite?Math.atan2(rSite.y - lSite.y,rSite.x - lSite.x):edge.l === lSite?Math.atan2(vb.x - va.x,va.y - vb.y):Math.atan2(va.x - vb.x,vb.y - va.y);}d3_geom_voronoiHalfEdge.prototype = {start:function start(){return this.edge.l === this.site?this.edge.a:this.edge.b;},end:function end(){return this.edge.l === this.site?this.edge.b:this.edge.a;}};function d3_geom_voronoiRedBlackTree(){this._ = null;}function d3_geom_voronoiRedBlackNode(node){node.U = node.C = node.L = node.R = node.P = node.N = null;}d3_geom_voronoiRedBlackTree.prototype = {insert:function insert(after,node){var parent,grandpa,uncle;if(after){node.P = after;node.N = after.N;if(after.N)after.N.P = node;after.N = node;if(after.R){after = after.R;while(after.L) after = after.L;after.L = node;}else {after.R = node;}parent = after;}else if(this._){after = d3_geom_voronoiRedBlackFirst(this._);node.P = null;node.N = after;after.P = after.L = node;parent = after;}else {node.P = node.N = null;this._ = node;parent = null;}node.L = node.R = null;node.U = parent;node.C = true;after = node;while(parent && parent.C) {grandpa = parent.U;if(parent === grandpa.L){uncle = grandpa.R;if(uncle && uncle.C){parent.C = uncle.C = false;grandpa.C = true;after = grandpa;}else {if(after === parent.R){d3_geom_voronoiRedBlackRotateLeft(this,parent);after = parent;parent = after.U;}parent.C = false;grandpa.C = true;d3_geom_voronoiRedBlackRotateRight(this,grandpa);}}else {uncle = grandpa.L;if(uncle && uncle.C){parent.C = uncle.C = false;grandpa.C = true;after = grandpa;}else {if(after === parent.L){d3_geom_voronoiRedBlackRotateRight(this,parent);after = parent;parent = after.U;}parent.C = false;grandpa.C = true;d3_geom_voronoiRedBlackRotateLeft(this,grandpa);}}parent = after.U;}this._.C = false;},remove:function remove(node){if(node.N)node.N.P = node.P;if(node.P)node.P.N = node.N;node.N = node.P = null;var parent=node.U,sibling,left=node.L,right=node.R,next,red;if(!left)next = right;else if(!right)next = left;else next = d3_geom_voronoiRedBlackFirst(right);if(parent){if(parent.L === node)parent.L = next;else parent.R = next;}else {this._ = next;}if(left && right){red = next.C;next.C = node.C;next.L = left;left.U = next;if(next !== right){parent = next.U;next.U = node.U;node = next.R;parent.L = node;next.R = right;right.U = next;}else {next.U = parent;parent = next;node = next.R;}}else {red = node.C;node = next;}if(node)node.U = parent;if(red)return;if(node && node.C){node.C = false;return;}do {if(node === this._)break;if(node === parent.L){sibling = parent.R;if(sibling.C){sibling.C = false;parent.C = true;d3_geom_voronoiRedBlackRotateLeft(this,parent);sibling = parent.R;}if(sibling.L && sibling.L.C || sibling.R && sibling.R.C){if(!sibling.R || !sibling.R.C){sibling.L.C = false;sibling.C = true;d3_geom_voronoiRedBlackRotateRight(this,sibling);sibling = parent.R;}sibling.C = parent.C;parent.C = sibling.R.C = false;d3_geom_voronoiRedBlackRotateLeft(this,parent);node = this._;break;}}else {sibling = parent.L;if(sibling.C){sibling.C = false;parent.C = true;d3_geom_voronoiRedBlackRotateRight(this,parent);sibling = parent.L;}if(sibling.L && sibling.L.C || sibling.R && sibling.R.C){if(!sibling.L || !sibling.L.C){sibling.R.C = false;sibling.C = true;d3_geom_voronoiRedBlackRotateLeft(this,sibling);sibling = parent.L;}sibling.C = parent.C;parent.C = sibling.L.C = false;d3_geom_voronoiRedBlackRotateRight(this,parent);node = this._;break;}}sibling.C = true;node = parent;parent = parent.U;}while(!node.C);if(node)node.C = false;}};function d3_geom_voronoiRedBlackRotateLeft(tree,node){var p=node,q=node.R,parent=p.U;if(parent){if(parent.L === p)parent.L = q;else parent.R = q;}else {tree._ = q;}q.U = parent;p.U = q;p.R = q.L;if(p.R)p.R.U = p;q.L = p;}function d3_geom_voronoiRedBlackRotateRight(tree,node){var p=node,q=node.L,parent=p.U;if(parent){if(parent.L === p)parent.L = q;else parent.R = q;}else {tree._ = q;}q.U = parent;p.U = q;p.L = q.R;if(p.L)p.L.U = p;q.R = p;}function d3_geom_voronoiRedBlackFirst(node){while(node.L) node = node.L;return node;}function d3_geom_voronoi(sites,bbox){var site=sites.sort(d3_geom_voronoiVertexOrder).pop(),x0,y0,circle;d3_geom_voronoiEdges = [];d3_geom_voronoiCells = new Array(sites.length);d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();while(true) {circle = d3_geom_voronoiFirstCircle;if(site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)){if(site.x !== x0 || site.y !== y0){d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);d3_geom_voronoiAddBeach(site);x0 = site.x,y0 = site.y;}site = sites.pop();}else if(circle){d3_geom_voronoiRemoveBeach(circle.arc);}else {break;}}if(bbox)d3_geom_voronoiClipEdges(bbox),d3_geom_voronoiCloseCells(bbox);var diagram={cells:d3_geom_voronoiCells,edges:d3_geom_voronoiEdges};d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;return diagram;}function d3_geom_voronoiVertexOrder(a,b){return b.y - a.y || b.x - a.x;}d3.geom.voronoi = function(points){var x=d3_geom_pointX,y=d3_geom_pointY,fx=x,fy=y,clipExtent=d3_geom_voronoiClipExtent;if(points)return voronoi(points);function voronoi(data){var polygons=new Array(data.length),x0=clipExtent[0][0],y0=clipExtent[0][1],x1=clipExtent[1][0],y1=clipExtent[1][1];d3_geom_voronoi(sites(data),clipExtent).cells.forEach(function(cell,i){var edges=cell.edges,site=cell.site,polygon=polygons[i] = edges.length?edges.map(function(e){var s=e.start();return [s.x,s.y];}):site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1?[[x0,y1],[x1,y1],[x1,y0],[x0,y0]]:[];polygon.point = data[i];});return polygons;}function sites(data){return data.map(function(d,i){return {x:Math.round(fx(d,i) / ε) * ε,y:Math.round(fy(d,i) / ε) * ε,i:i};});}voronoi.links = function(data){return d3_geom_voronoi(sites(data)).edges.filter(function(edge){return edge.l && edge.r;}).map(function(edge){return {source:data[edge.l.i],target:data[edge.r.i]};});};voronoi.triangles = function(data){var triangles=[];d3_geom_voronoi(sites(data)).cells.forEach(function(cell,i){var site=cell.site,edges=cell.edges.sort(d3_geom_voronoiHalfEdgeOrder),j=-1,m=edges.length,e0,s0,e1=edges[m - 1].edge,s1=e1.l === site?e1.r:e1.l;while(++j < m) {e0 = e1;s0 = s1;e1 = edges[j].edge;s1 = e1.l === site?e1.r:e1.l;if(i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site,s0,s1) < 0){triangles.push([data[i],data[s0.i],data[s1.i]]);}}});return triangles;};voronoi.x = function(_){return arguments.length?(fx = d3_functor(x = _),voronoi):x;};voronoi.y = function(_){return arguments.length?(fy = d3_functor(y = _),voronoi):y;};voronoi.clipExtent = function(_){if(!arguments.length)return clipExtent === d3_geom_voronoiClipExtent?null:clipExtent;clipExtent = _ == null?d3_geom_voronoiClipExtent:_;return voronoi;};voronoi.size = function(_){if(!arguments.length)return clipExtent === d3_geom_voronoiClipExtent?null:clipExtent && clipExtent[1];return voronoi.clipExtent(_ && [[0,0],_]);};return voronoi;};var d3_geom_voronoiClipExtent=[[-1e6,-1e6],[1e6,1e6]];function d3_geom_voronoiTriangleArea(a,b,c){return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);}d3.geom.delaunay = function(vertices){return d3.geom.voronoi().triangles(vertices);};d3.geom.quadtree = function(points,x1,y1,x2,y2){var x=d3_geom_pointX,y=d3_geom_pointY,compat;if(compat = arguments.length){x = d3_geom_quadtreeCompatX;y = d3_geom_quadtreeCompatY;if(compat === 3){y2 = y1;x2 = x1;y1 = x1 = 0;}return quadtree(points);}function quadtree(data){var d,fx=d3_functor(x),fy=d3_functor(y),xs,ys,i,n,x1_,y1_,x2_,y2_;if(x1 != null){x1_ = x1,y1_ = y1,x2_ = x2,y2_ = y2;}else {x2_ = y2_ = -(x1_ = y1_ = Infinity);xs = [],ys = [];n = data.length;if(compat)for(i = 0;i < n;++i) {d = data[i];if(d.x < x1_)x1_ = d.x;if(d.y < y1_)y1_ = d.y;if(d.x > x2_)x2_ = d.x;if(d.y > y2_)y2_ = d.y;xs.push(d.x);ys.push(d.y);}else for(i = 0;i < n;++i) {var x_=+fx(d = data[i],i),y_=+fy(d,i);if(x_ < x1_)x1_ = x_;if(y_ < y1_)y1_ = y_;if(x_ > x2_)x2_ = x_;if(y_ > y2_)y2_ = y_;xs.push(x_);ys.push(y_);}}var dx=x2_ - x1_,dy=y2_ - y1_;if(dx > dy)y2_ = y1_ + dx;else x2_ = x1_ + dy;function insert(n,d,x,y,x1,y1,x2,y2){if(isNaN(x) || isNaN(y))return;if(n.leaf){var nx=n.x,ny=n.y;if(nx != null){if(abs(nx - x) + abs(ny - y) < .01){insertChild(n,d,x,y,x1,y1,x2,y2);}else {var nPoint=n.point;n.x = n.y = n.point = null;insertChild(n,nPoint,nx,ny,x1,y1,x2,y2);insertChild(n,d,x,y,x1,y1,x2,y2);}}else {n.x = x,n.y = y,n.point = d;}}else {insertChild(n,d,x,y,x1,y1,x2,y2);}}function insertChild(n,d,x,y,x1,y1,x2,y2){var xm=(x1 + x2) * .5,ym=(y1 + y2) * .5,right=x >= xm,below=y >= ym,i=below << 1 | right;n.leaf = false;n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());if(right)x1 = xm;else x2 = xm;if(below)y1 = ym;else y2 = ym;insert(n,d,x,y,x1,y1,x2,y2);}var root=d3_geom_quadtreeNode();root.add = function(d){insert(root,d,+fx(d,++i),+fy(d,i),x1_,y1_,x2_,y2_);};root.visit = function(f){d3_geom_quadtreeVisit(f,root,x1_,y1_,x2_,y2_);};root.find = function(point){return d3_geom_quadtreeFind(root,point[0],point[1],x1_,y1_,x2_,y2_);};i = -1;if(x1 == null){while(++i < n) {insert(root,data[i],xs[i],ys[i],x1_,y1_,x2_,y2_);}--i;}else data.forEach(root.add);xs = ys = data = d = null;return root;}quadtree.x = function(_){return arguments.length?(x = _,quadtree):x;};quadtree.y = function(_){return arguments.length?(y = _,quadtree):y;};quadtree.extent = function(_){if(!arguments.length)return x1 == null?null:[[x1,y1],[x2,y2]];if(_ == null)x1 = y1 = x2 = y2 = null;else x1 = +_[0][0],y1 = +_[0][1],x2 = +_[1][0],y2 = +_[1][1];return quadtree;};quadtree.size = function(_){if(!arguments.length)return x1 == null?null:[x2 - x1,y2 - y1];if(_ == null)x1 = y1 = x2 = y2 = null;else x1 = y1 = 0,x2 = +_[0],y2 = +_[1];return quadtree;};return quadtree;};function d3_geom_quadtreeCompatX(d){return d.x;}function d3_geom_quadtreeCompatY(d){return d.y;}function d3_geom_quadtreeNode(){return {leaf:true,nodes:[],point:null,x:null,y:null};}function d3_geom_quadtreeVisit(f,node,x1,y1,x2,y2){if(!f(node,x1,y1,x2,y2)){var sx=(x1 + x2) * .5,sy=(y1 + y2) * .5,children=node.nodes;if(children[0])d3_geom_quadtreeVisit(f,children[0],x1,y1,sx,sy);if(children[1])d3_geom_quadtreeVisit(f,children[1],sx,y1,x2,sy);if(children[2])d3_geom_quadtreeVisit(f,children[2],x1,sy,sx,y2);if(children[3])d3_geom_quadtreeVisit(f,children[3],sx,sy,x2,y2);}}function d3_geom_quadtreeFind(root,x,y,x0,y0,x3,y3){var minDistance2=Infinity,closestPoint;(function find(node,x1,y1,x2,y2){if(x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0)return;if(point = node.point){var point,dx=x - node.x,dy=y - node.y,distance2=dx * dx + dy * dy;if(distance2 < minDistance2){var distance=Math.sqrt(minDistance2 = distance2);x0 = x - distance,y0 = y - distance;x3 = x + distance,y3 = y + distance;closestPoint = point;}}var children=node.nodes,xm=(x1 + x2) * .5,ym=(y1 + y2) * .5,right=x >= xm,below=y >= ym;for(var i=below << 1 | right,j=i + 4;i < j;++i) {if(node = children[i & 3])switch(i & 3){case 0:find(node,x1,y1,xm,ym);break;case 1:find(node,xm,y1,x2,ym);break;case 2:find(node,x1,ym,xm,y2);break;case 3:find(node,xm,ym,x2,y2);break;}}})(root,x0,y0,x3,y3);return closestPoint;}d3.interpolateRgb = d3_interpolateRgb;function d3_interpolateRgb(a,b){a = d3.rgb(a);b = d3.rgb(b);var ar=a.r,ag=a.g,ab=a.b,br=b.r - ar,bg=b.g - ag,bb=b.b - ab;return function(t){return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));};}d3.interpolateObject = d3_interpolateObject;function d3_interpolateObject(a,b){var i={},c={},k;for(k in a) {if(k in b){i[k] = d3_interpolate(a[k],b[k]);}else {c[k] = a[k];}}for(k in b) {if(!(k in a)){c[k] = b[k];}}return function(t){for(k in i) c[k] = i[k](t);return c;};}d3.interpolateNumber = d3_interpolateNumber;function d3_interpolateNumber(a,b){a = +a,b = +b;return function(t){return a * (1 - t) + b * t;};}d3.interpolateString = d3_interpolateString;function d3_interpolateString(a,b){var bi=d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0,am,bm,bs,i=-1,s=[],q=[];a = a + \"\",b = b + \"\";while((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {if((bs = bm.index) > bi){bs = b.slice(bi,bs);if(s[i])s[i] += bs;else s[++i] = bs;}if((am = am[0]) === (bm = bm[0])){if(s[i])s[i] += bm;else s[++i] = bm;}else {s[++i] = null;q.push({i:i,x:d3_interpolateNumber(am,bm)});}bi = d3_interpolate_numberB.lastIndex;}if(bi < b.length){bs = b.slice(bi);if(s[i])s[i] += bs;else s[++i] = bs;}return s.length < 2?q[0]?(b = q[0].x,function(t){return b(t) + \"\";}):function(){return b;}:(b = q.length,function(t){for(var i=0,o;i < b;++i) s[(o = q[i]).i] = o.x(t);return s.join(\"\");});}var d3_interpolate_numberA=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,d3_interpolate_numberB=new RegExp(d3_interpolate_numberA.source,\"g\");d3.interpolate = d3_interpolate;function d3_interpolate(a,b){var i=d3.interpolators.length,f;while(--i >= 0 && !(f = d3.interpolators[i](a,b)));return f;}d3.interpolators = [function(a,b){var t=typeof b;return (t === \"string\"?d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b)?d3_interpolateRgb:d3_interpolateString:b instanceof d3_color?d3_interpolateRgb:Array.isArray(b)?d3_interpolateArray:t === \"object\" && isNaN(b)?d3_interpolateObject:d3_interpolateNumber)(a,b);}];d3.interpolateArray = d3_interpolateArray;function d3_interpolateArray(a,b){var x=[],c=[],na=a.length,nb=b.length,n0=Math.min(a.length,b.length),i;for(i = 0;i < n0;++i) x.push(d3_interpolate(a[i],b[i]));for(;i < na;++i) c[i] = a[i];for(;i < nb;++i) c[i] = b[i];return function(t){for(i = 0;i < n0;++i) c[i] = x[i](t);return c;};}var d3_ease_default=function d3_ease_default(){return d3_identity;};var d3_ease=d3.map({linear:d3_ease_default,poly:d3_ease_poly,quad:function quad(){return d3_ease_quad;},cubic:function cubic(){return d3_ease_cubic;},sin:function sin(){return d3_ease_sin;},exp:function exp(){return d3_ease_exp;},circle:function circle(){return d3_ease_circle;},elastic:d3_ease_elastic,back:d3_ease_back,bounce:function bounce(){return d3_ease_bounce;}});var d3_ease_mode=d3.map({\"in\":d3_identity,out:d3_ease_reverse,\"in-out\":d3_ease_reflect,\"out-in\":function outIn(f){return d3_ease_reflect(d3_ease_reverse(f));}});d3.ease = function(name){var i=name.indexOf(\"-\"),t=i >= 0?name.slice(0,i):name,m=i >= 0?name.slice(i + 1):\"in\";t = d3_ease.get(t) || d3_ease_default;m = d3_ease_mode.get(m) || d3_identity;return d3_ease_clamp(m(t.apply(null,d3_arraySlice.call(arguments,1))));};function d3_ease_clamp(f){return function(t){return t <= 0?0:t >= 1?1:f(t);};}function d3_ease_reverse(f){return function(t){return 1 - f(1 - t);};}function d3_ease_reflect(f){return function(t){return .5 * (t < .5?f(2 * t):2 - f(2 - 2 * t));};}function d3_ease_quad(t){return t * t;}function d3_ease_cubic(t){return t * t * t;}function d3_ease_cubicInOut(t){if(t <= 0)return 0;if(t >= 1)return 1;var t2=t * t,t3=t2 * t;return 4 * (t < .5?t3:3 * (t - t2) + t3 - .75);}function d3_ease_poly(e){return function(t){return Math.pow(t,e);};}function d3_ease_sin(t){return 1 - Math.cos(t * halfπ);}function d3_ease_exp(t){return Math.pow(2,10 * (t - 1));}function d3_ease_circle(t){return 1 - Math.sqrt(1 - t * t);}function d3_ease_elastic(a,p){var s;if(arguments.length < 2)p = .45;if(arguments.length)s = p / τ * Math.asin(1 / a);else a = 1,s = p / 4;return function(t){return 1 + a * Math.pow(2,-10 * t) * Math.sin((t - s) * τ / p);};}function d3_ease_back(s){if(!s)s = 1.70158;return function(t){return t * t * ((s + 1) * t - s);};}function d3_ease_bounce(t){return t < 1 / 2.75?7.5625 * t * t:t < 2 / 2.75?7.5625 * (t -= 1.5 / 2.75) * t + .75:t < 2.5 / 2.75?7.5625 * (t -= 2.25 / 2.75) * t + .9375:7.5625 * (t -= 2.625 / 2.75) * t + .984375;}d3.interpolateHcl = d3_interpolateHcl;function d3_interpolateHcl(a,b){a = d3.hcl(a);b = d3.hcl(b);var ah=a.h,ac=a.c,al=a.l,bh=b.h - ah,bc=b.c - ac,bl=b.l - al;if(isNaN(bc))bc = 0,ac = isNaN(ac)?b.c:ac;if(isNaN(bh))bh = 0,ah = isNaN(ah)?b.h:ah;else if(bh > 180)bh -= 360;else if(bh < -180)bh += 360;return function(t){return d3_hcl_lab(ah + bh * t,ac + bc * t,al + bl * t) + \"\";};}d3.interpolateHsl = d3_interpolateHsl;function d3_interpolateHsl(a,b){a = d3.hsl(a);b = d3.hsl(b);var ah=a.h,as=a.s,al=a.l,bh=b.h - ah,bs=b.s - as,bl=b.l - al;if(isNaN(bs))bs = 0,as = isNaN(as)?b.s:as;if(isNaN(bh))bh = 0,ah = isNaN(ah)?b.h:ah;else if(bh > 180)bh -= 360;else if(bh < -180)bh += 360;return function(t){return d3_hsl_rgb(ah + bh * t,as + bs * t,al + bl * t) + \"\";};}d3.interpolateLab = d3_interpolateLab;function d3_interpolateLab(a,b){a = d3.lab(a);b = d3.lab(b);var al=a.l,aa=a.a,ab=a.b,bl=b.l - al,ba=b.a - aa,bb=b.b - ab;return function(t){return d3_lab_rgb(al + bl * t,aa + ba * t,ab + bb * t) + \"\";};}d3.interpolateRound = d3_interpolateRound;function d3_interpolateRound(a,b){b -= a;return function(t){return Math.round(a + b * t);};}d3.transform = function(string){var g=d3_document.createElementNS(d3.ns.prefix.svg,\"g\");return (d3.transform = function(string){if(string != null){g.setAttribute(\"transform\",string);var t=g.transform.baseVal.consolidate();}return new d3_transform(t?t.matrix:d3_transformIdentity);})(string);};function d3_transform(m){var r0=[m.a,m.b],r1=[m.c,m.d],kx=d3_transformNormalize(r0),kz=d3_transformDot(r0,r1),ky=d3_transformNormalize(d3_transformCombine(r1,r0,-kz)) || 0;if(r0[0] * r1[1] < r1[0] * r0[1]){r0[0] *= -1;r0[1] *= -1;kx *= -1;kz *= -1;}this.rotate = (kx?Math.atan2(r0[1],r0[0]):Math.atan2(-r1[0],r1[1])) * d3_degrees;this.translate = [m.e,m.f];this.scale = [kx,ky];this.skew = ky?Math.atan2(kz,ky) * d3_degrees:0;}d3_transform.prototype.toString = function(){return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";};function d3_transformDot(a,b){return a[0] * b[0] + a[1] * b[1];}function d3_transformNormalize(a){var k=Math.sqrt(d3_transformDot(a,a));if(k){a[0] /= k;a[1] /= k;}return k;}function d3_transformCombine(a,b,k){a[0] += k * b[0];a[1] += k * b[1];return a;}var d3_transformIdentity={a:1,b:0,c:0,d:1,e:0,f:0};d3.interpolateTransform = d3_interpolateTransform;function d3_interpolateTransformPop(s){return s.length?s.pop() + \",\":\"\";}function d3_interpolateTranslate(ta,tb,s,q){if(ta[0] !== tb[0] || ta[1] !== tb[1]){var i=s.push(\"translate(\",null,\",\",null,\")\");q.push({i:i - 4,x:d3_interpolateNumber(ta[0],tb[0])},{i:i - 2,x:d3_interpolateNumber(ta[1],tb[1])});}else if(tb[0] || tb[1]){s.push(\"translate(\" + tb + \")\");}}function d3_interpolateRotate(ra,rb,s,q){if(ra !== rb){if(ra - rb > 180)rb += 360;else if(rb - ra > 180)ra += 360;q.push({i:s.push(d3_interpolateTransformPop(s) + \"rotate(\",null,\")\") - 2,x:d3_interpolateNumber(ra,rb)});}else if(rb){s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");}}function d3_interpolateSkew(wa,wb,s,q){if(wa !== wb){q.push({i:s.push(d3_interpolateTransformPop(s) + \"skewX(\",null,\")\") - 2,x:d3_interpolateNumber(wa,wb)});}else if(wb){s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");}}function d3_interpolateScale(ka,kb,s,q){if(ka[0] !== kb[0] || ka[1] !== kb[1]){var i=s.push(d3_interpolateTransformPop(s) + \"scale(\",null,\",\",null,\")\");q.push({i:i - 4,x:d3_interpolateNumber(ka[0],kb[0])},{i:i - 2,x:d3_interpolateNumber(ka[1],kb[1])});}else if(kb[0] !== 1 || kb[1] !== 1){s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");}}function d3_interpolateTransform(a,b){var s=[],q=[];a = d3.transform(a),b = d3.transform(b);d3_interpolateTranslate(a.translate,b.translate,s,q);d3_interpolateRotate(a.rotate,b.rotate,s,q);d3_interpolateSkew(a.skew,b.skew,s,q);d3_interpolateScale(a.scale,b.scale,s,q);a = b = null;return function(t){var i=-1,n=q.length,o;while(++i < n) s[(o = q[i]).i] = o.x(t);return s.join(\"\");};}function d3_uninterpolateNumber(a,b){b = (b -= a = +a) || 1 / b;return function(x){return (x - a) / b;};}function d3_uninterpolateClamp(a,b){b = (b -= a = +a) || 1 / b;return function(x){return Math.max(0,Math.min(1,(x - a) / b));};}d3.layout = {};d3.layout.bundle = function(){return function(links){var paths=[],i=-1,n=links.length;while(++i < n) paths.push(d3_layout_bundlePath(links[i]));return paths;};};function d3_layout_bundlePath(link){var start=link.source,end=link.target,lca=d3_layout_bundleLeastCommonAncestor(start,end),points=[start];while(start !== lca) {start = start.parent;points.push(start);}var k=points.length;while(end !== lca) {points.splice(k,0,end);end = end.parent;}return points;}function d3_layout_bundleAncestors(node){var ancestors=[],parent=node.parent;while(parent != null) {ancestors.push(node);node = parent;parent = parent.parent;}ancestors.push(node);return ancestors;}function d3_layout_bundleLeastCommonAncestor(a,b){if(a === b)return a;var aNodes=d3_layout_bundleAncestors(a),bNodes=d3_layout_bundleAncestors(b),aNode=aNodes.pop(),bNode=bNodes.pop(),sharedNode=null;while(aNode === bNode) {sharedNode = aNode;aNode = aNodes.pop();bNode = bNodes.pop();}return sharedNode;}d3.layout.chord = function(){var chord={},chords,groups,matrix,n,padding=0,sortGroups,sortSubgroups,sortChords;function relayout(){var subgroups={},groupSums=[],groupIndex=d3.range(n),subgroupIndex=[],k,x,x0,i,j;chords = [];groups = [];k = 0,i = -1;while(++i < n) {x = 0,j = -1;while(++j < n) {x += matrix[i][j];}groupSums.push(x);subgroupIndex.push(d3.range(n));k += x;}if(sortGroups){groupIndex.sort(function(a,b){return sortGroups(groupSums[a],groupSums[b]);});}if(sortSubgroups){subgroupIndex.forEach(function(d,i){d.sort(function(a,b){return sortSubgroups(matrix[i][a],matrix[i][b]);});});}k = (τ - padding * n) / k;x = 0,i = -1;while(++i < n) {x0 = x,j = -1;while(++j < n) {var di=groupIndex[i],dj=subgroupIndex[di][j],v=matrix[di][dj],a0=x,a1=x += v * k;subgroups[di + \"-\" + dj] = {index:di,subindex:dj,startAngle:a0,endAngle:a1,value:v};}groups[di] = {index:di,startAngle:x0,endAngle:x,value:(x - x0) / k};x += padding;}i = -1;while(++i < n) {j = i - 1;while(++j < n) {var source=subgroups[i + \"-\" + j],target=subgroups[j + \"-\" + i];if(source.value || target.value){chords.push(source.value < target.value?{source:target,target:source}:{source:source,target:target});}}}if(sortChords)resort();}function resort(){chords.sort(function(a,b){return sortChords((a.source.value + a.target.value) / 2,(b.source.value + b.target.value) / 2);});}chord.matrix = function(x){if(!arguments.length)return matrix;n = (matrix = x) && matrix.length;chords = groups = null;return chord;};chord.padding = function(x){if(!arguments.length)return padding;padding = x;chords = groups = null;return chord;};chord.sortGroups = function(x){if(!arguments.length)return sortGroups;sortGroups = x;chords = groups = null;return chord;};chord.sortSubgroups = function(x){if(!arguments.length)return sortSubgroups;sortSubgroups = x;chords = null;return chord;};chord.sortChords = function(x){if(!arguments.length)return sortChords;sortChords = x;if(chords)resort();return chord;};chord.chords = function(){if(!chords)relayout();return chords;};chord.groups = function(){if(!groups)relayout();return groups;};return chord;};d3.layout.force = function(){var force={},event=d3.dispatch(\"start\",\"tick\",\"end\"),timer,size=[1,1],drag,alpha,friction=.9,linkDistance=d3_layout_forceLinkDistance,linkStrength=d3_layout_forceLinkStrength,charge=-30,chargeDistance2=d3_layout_forceChargeDistance2,gravity=.1,theta2=.64,nodes=[],links=[],distances,strengths,charges;function repulse(node){return function(quad,x1,_,x2){if(quad.point !== node){var dx=quad.cx - node.x,dy=quad.cy - node.y,dw=x2 - x1,dn=dx * dx + dy * dy;if(dw * dw / theta2 < dn){if(dn < chargeDistance2){var k=quad.charge / dn;node.px -= dx * k;node.py -= dy * k;}return true;}if(quad.point && dn && dn < chargeDistance2){var k=quad.pointCharge / dn;node.px -= dx * k;node.py -= dy * k;}}return !quad.charge;};}force.tick = function(){if((alpha *= .99) < .005){timer = null;event.end({type:\"end\",alpha:alpha = 0});return true;}var n=nodes.length,m=links.length,q,i,o,s,t,l,k,x,y;for(i = 0;i < m;++i) {o = links[i];s = o.source;t = o.target;x = t.x - s.x;y = t.y - s.y;if(l = x * x + y * y){l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;x *= l;y *= l;t.x -= x * (k = s.weight + t.weight?s.weight / (s.weight + t.weight):.5);t.y -= y * k;s.x += x * (k = 1 - k);s.y += y * k;}}if(k = alpha * gravity){x = size[0] / 2;y = size[1] / 2;i = -1;if(k)while(++i < n) {o = nodes[i];o.x += (x - o.x) * k;o.y += (y - o.y) * k;}}if(charge){d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes),alpha,charges);i = -1;while(++i < n) {if(!(o = nodes[i]).fixed){q.visit(repulse(o));}}}i = -1;while(++i < n) {o = nodes[i];if(o.fixed){o.x = o.px;o.y = o.py;}else {o.x -= (o.px - (o.px = o.x)) * friction;o.y -= (o.py - (o.py = o.y)) * friction;}}event.tick({type:\"tick\",alpha:alpha});};force.nodes = function(x){if(!arguments.length)return nodes;nodes = x;return force;};force.links = function(x){if(!arguments.length)return links;links = x;return force;};force.size = function(x){if(!arguments.length)return size;size = x;return force;};force.linkDistance = function(x){if(!arguments.length)return linkDistance;linkDistance = typeof x === \"function\"?x:+x;return force;};force.distance = force.linkDistance;force.linkStrength = function(x){if(!arguments.length)return linkStrength;linkStrength = typeof x === \"function\"?x:+x;return force;};force.friction = function(x){if(!arguments.length)return friction;friction = +x;return force;};force.charge = function(x){if(!arguments.length)return charge;charge = typeof x === \"function\"?x:+x;return force;};force.chargeDistance = function(x){if(!arguments.length)return Math.sqrt(chargeDistance2);chargeDistance2 = x * x;return force;};force.gravity = function(x){if(!arguments.length)return gravity;gravity = +x;return force;};force.theta = function(x){if(!arguments.length)return Math.sqrt(theta2);theta2 = x * x;return force;};force.alpha = function(x){if(!arguments.length)return alpha;x = +x;if(alpha){if(x > 0){alpha = x;}else {timer.c = null,timer.t = NaN,timer = null;event.start({type:\"end\",alpha:alpha = 0});}}else if(x > 0){event.start({type:\"start\",alpha:alpha = x});timer = d3_timer(force.tick);}return force;};force.start = function(){var i,n=nodes.length,m=links.length,w=size[0],h=size[1],neighbors,o;for(i = 0;i < n;++i) {(o = nodes[i]).index = i;o.weight = 0;}for(i = 0;i < m;++i) {o = links[i];if(typeof o.source == \"number\")o.source = nodes[o.source];if(typeof o.target == \"number\")o.target = nodes[o.target];++o.source.weight;++o.target.weight;}for(i = 0;i < n;++i) {o = nodes[i];if(isNaN(o.x))o.x = position(\"x\",w);if(isNaN(o.y))o.y = position(\"y\",h);if(isNaN(o.px))o.px = o.x;if(isNaN(o.py))o.py = o.y;}distances = [];if(typeof linkDistance === \"function\")for(i = 0;i < m;++i) distances[i] = +linkDistance.call(this,links[i],i);else for(i = 0;i < m;++i) distances[i] = linkDistance;strengths = [];if(typeof linkStrength === \"function\")for(i = 0;i < m;++i) strengths[i] = +linkStrength.call(this,links[i],i);else for(i = 0;i < m;++i) strengths[i] = linkStrength;charges = [];if(typeof charge === \"function\")for(i = 0;i < n;++i) charges[i] = +charge.call(this,nodes[i],i);else for(i = 0;i < n;++i) charges[i] = charge;function position(dimension,size){if(!neighbors){neighbors = new Array(n);for(j = 0;j < n;++j) {neighbors[j] = [];}for(j = 0;j < m;++j) {var o=links[j];neighbors[o.source.index].push(o.target);neighbors[o.target.index].push(o.source);}}var candidates=neighbors[i],j=-1,l=candidates.length,x;while(++j < l) if(!isNaN(x = candidates[j][dimension]))return x;return Math.random() * size;}return force.resume();};force.resume = function(){return force.alpha(.1);};force.stop = function(){return force.alpha(0);};force.drag = function(){if(!drag)drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\",d3_layout_forceDragstart).on(\"drag.force\",dragmove).on(\"dragend.force\",d3_layout_forceDragend);if(!arguments.length)return drag;this.on(\"mouseover.force\",d3_layout_forceMouseover).on(\"mouseout.force\",d3_layout_forceMouseout).call(drag);};function dragmove(d){d.px = d3.event.x,d.py = d3.event.y;force.resume();}return d3.rebind(force,event,\"on\");};function d3_layout_forceDragstart(d){d.fixed |= 2;}function d3_layout_forceDragend(d){d.fixed &= ~6;}function d3_layout_forceMouseover(d){d.fixed |= 4;d.px = d.x,d.py = d.y;}function d3_layout_forceMouseout(d){d.fixed &= ~4;}function d3_layout_forceAccumulate(quad,alpha,charges){var cx=0,cy=0;quad.charge = 0;if(!quad.leaf){var nodes=quad.nodes,n=nodes.length,i=-1,c;while(++i < n) {c = nodes[i];if(c == null)continue;d3_layout_forceAccumulate(c,alpha,charges);quad.charge += c.charge;cx += c.charge * c.cx;cy += c.charge * c.cy;}}if(quad.point){if(!quad.leaf){quad.point.x += Math.random() - .5;quad.point.y += Math.random() - .5;}var k=alpha * charges[quad.point.index];quad.charge += quad.pointCharge = k;cx += k * quad.point.x;cy += k * quad.point.y;}quad.cx = cx / quad.charge;quad.cy = cy / quad.charge;}var d3_layout_forceLinkDistance=20,d3_layout_forceLinkStrength=1,d3_layout_forceChargeDistance2=Infinity;d3.layout.hierarchy = function(){var sort=d3_layout_hierarchySort,children=d3_layout_hierarchyChildren,value=d3_layout_hierarchyValue;function hierarchy(root){var stack=[root],nodes=[],node;root.depth = 0;while((node = stack.pop()) != null) {nodes.push(node);if((childs = children.call(hierarchy,node,node.depth)) && (n = childs.length)){var n,childs,child;while(--n >= 0) {stack.push(child = childs[n]);child.parent = node;child.depth = node.depth + 1;}if(value)node.value = 0;node.children = childs;}else {if(value)node.value = +value.call(hierarchy,node,node.depth) || 0;delete node.children;}}d3_layout_hierarchyVisitAfter(root,function(node){var childs,parent;if(sort && (childs = node.children))childs.sort(sort);if(value && (parent = node.parent))parent.value += node.value;});return nodes;}hierarchy.sort = function(x){if(!arguments.length)return sort;sort = x;return hierarchy;};hierarchy.children = function(x){if(!arguments.length)return children;children = x;return hierarchy;};hierarchy.value = function(x){if(!arguments.length)return value;value = x;return hierarchy;};hierarchy.revalue = function(root){if(value){d3_layout_hierarchyVisitBefore(root,function(node){if(node.children)node.value = 0;});d3_layout_hierarchyVisitAfter(root,function(node){var parent;if(!node.children)node.value = +value.call(hierarchy,node,node.depth) || 0;if(parent = node.parent)parent.value += node.value;});}return root;};return hierarchy;};function d3_layout_hierarchyRebind(object,hierarchy){d3.rebind(object,hierarchy,\"sort\",\"children\",\"value\");object.nodes = object;object.links = d3_layout_hierarchyLinks;return object;}function d3_layout_hierarchyVisitBefore(node,callback){var nodes=[node];while((node = nodes.pop()) != null) {callback(node);if((children = node.children) && (n = children.length)){var n,children;while(--n >= 0) nodes.push(children[n]);}}}function d3_layout_hierarchyVisitAfter(node,callback){var nodes=[node],nodes2=[];while((node = nodes.pop()) != null) {nodes2.push(node);if((children = node.children) && (n = children.length)){var i=-1,n,children;while(++i < n) nodes.push(children[i]);}}while((node = nodes2.pop()) != null) {callback(node);}}function d3_layout_hierarchyChildren(d){return d.children;}function d3_layout_hierarchyValue(d){return d.value;}function d3_layout_hierarchySort(a,b){return b.value - a.value;}function d3_layout_hierarchyLinks(nodes){return d3.merge(nodes.map(function(parent){return (parent.children || []).map(function(child){return {source:parent,target:child};});}));}d3.layout.partition = function(){var hierarchy=d3.layout.hierarchy(),size=[1,1];function position(node,x,dx,dy){var children=node.children;node.x = x;node.y = node.depth * dy;node.dx = dx;node.dy = dy;if(children && (n = children.length)){var i=-1,n,c,d;dx = node.value?dx / node.value:0;while(++i < n) {position(c = children[i],x,d = c.value * dx,dy);x += d;}}}function depth(node){var children=node.children,d=0;if(children && (n = children.length)){var i=-1,n;while(++i < n) d = Math.max(d,depth(children[i]));}return 1 + d;}function partition(d,i){var nodes=hierarchy.call(this,d,i);position(nodes[0],0,size[0],size[1] / depth(nodes[0]));return nodes;}partition.size = function(x){if(!arguments.length)return size;size = x;return partition;};return d3_layout_hierarchyRebind(partition,hierarchy);};d3.layout.pie = function(){var value=Number,sort=d3_layout_pieSortByValue,startAngle=0,endAngle=τ,padAngle=0;function pie(data){var n=data.length,values=data.map(function(d,i){return +value.call(pie,d,i);}),a=+(typeof startAngle === \"function\"?startAngle.apply(this,arguments):startAngle),da=(typeof endAngle === \"function\"?endAngle.apply(this,arguments):endAngle) - a,p=Math.min(Math.abs(da) / n,+(typeof padAngle === \"function\"?padAngle.apply(this,arguments):padAngle)),pa=p * (da < 0?-1:1),sum=d3.sum(values),k=sum?(da - n * pa) / sum:0,index=d3.range(n),arcs=[],v;if(sort != null)index.sort(sort === d3_layout_pieSortByValue?function(i,j){return values[j] - values[i];}:function(i,j){return sort(data[i],data[j]);});index.forEach(function(i){arcs[i] = {data:data[i],value:v = values[i],startAngle:a,endAngle:a += v * k + pa,padAngle:p};});return arcs;}pie.value = function(_){if(!arguments.length)return value;value = _;return pie;};pie.sort = function(_){if(!arguments.length)return sort;sort = _;return pie;};pie.startAngle = function(_){if(!arguments.length)return startAngle;startAngle = _;return pie;};pie.endAngle = function(_){if(!arguments.length)return endAngle;endAngle = _;return pie;};pie.padAngle = function(_){if(!arguments.length)return padAngle;padAngle = _;return pie;};return pie;};var d3_layout_pieSortByValue={};d3.layout.stack = function(){var values=d3_identity,order=d3_layout_stackOrderDefault,offset=d3_layout_stackOffsetZero,out=d3_layout_stackOut,x=d3_layout_stackX,y=d3_layout_stackY;function stack(data,index){if(!(n = data.length))return data;var series=data.map(function(d,i){return values.call(stack,d,i);});var points=series.map(function(d){return d.map(function(v,i){return [x.call(stack,v,i),y.call(stack,v,i)];});});var orders=order.call(stack,points,index);series = d3.permute(series,orders);points = d3.permute(points,orders);var offsets=offset.call(stack,points,index);var m=series[0].length,n,i,j,o;for(j = 0;j < m;++j) {out.call(stack,series[0][j],o = offsets[j],points[0][j][1]);for(i = 1;i < n;++i) {out.call(stack,series[i][j],o += points[i - 1][j][1],points[i][j][1]);}}return data;}stack.values = function(x){if(!arguments.length)return values;values = x;return stack;};stack.order = function(x){if(!arguments.length)return order;order = typeof x === \"function\"?x:d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;return stack;};stack.offset = function(x){if(!arguments.length)return offset;offset = typeof x === \"function\"?x:d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;return stack;};stack.x = function(z){if(!arguments.length)return x;x = z;return stack;};stack.y = function(z){if(!arguments.length)return y;y = z;return stack;};stack.out = function(z){if(!arguments.length)return out;out = z;return stack;};return stack;};function d3_layout_stackX(d){return d.x;}function d3_layout_stackY(d){return d.y;}function d3_layout_stackOut(d,y0,y){d.y0 = y0;d.y = y;}var d3_layout_stackOrders=d3.map({\"inside-out\":function insideOut(data){var n=data.length,i,j,max=data.map(d3_layout_stackMaxIndex),sums=data.map(d3_layout_stackReduceSum),index=d3.range(n).sort(function(a,b){return max[a] - max[b];}),top=0,bottom=0,tops=[],bottoms=[];for(i = 0;i < n;++i) {j = index[i];if(top < bottom){top += sums[j];tops.push(j);}else {bottom += sums[j];bottoms.push(j);}}return bottoms.reverse().concat(tops);},reverse:function reverse(data){return d3.range(data.length).reverse();},\"default\":d3_layout_stackOrderDefault});var d3_layout_stackOffsets=d3.map({silhouette:function silhouette(data){var n=data.length,m=data[0].length,sums=[],max=0,i,j,o,y0=[];for(j = 0;j < m;++j) {for(i = 0,o = 0;i < n;i++) o += data[i][j][1];if(o > max)max = o;sums.push(o);}for(j = 0;j < m;++j) {y0[j] = (max - sums[j]) / 2;}return y0;},wiggle:function wiggle(data){var n=data.length,x=data[0],m=x.length,i,j,k,s1,s2,s3,dx,o,o0,y0=[];y0[0] = o = o0 = 0;for(j = 1;j < m;++j) {for(i = 0,s1 = 0;i < n;++i) s1 += data[i][j][1];for(i = 0,s2 = 0,dx = x[j][0] - x[j - 1][0];i < n;++i) {for(k = 0,s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx);k < i;++k) {s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;}s2 += s3 * data[i][j][1];}y0[j] = o -= s1?s2 / s1 * dx:0;if(o < o0)o0 = o;}for(j = 0;j < m;++j) y0[j] -= o0;return y0;},expand:function expand(data){var n=data.length,m=data[0].length,k=1 / n,i,j,o,y0=[];for(j = 0;j < m;++j) {for(i = 0,o = 0;i < n;i++) o += data[i][j][1];if(o)for(i = 0;i < n;i++) data[i][j][1] /= o;else for(i = 0;i < n;i++) data[i][j][1] = k;}for(j = 0;j < m;++j) y0[j] = 0;return y0;},zero:d3_layout_stackOffsetZero});function d3_layout_stackOrderDefault(data){return d3.range(data.length);}function d3_layout_stackOffsetZero(data){var j=-1,m=data[0].length,y0=[];while(++j < m) y0[j] = 0;return y0;}function d3_layout_stackMaxIndex(array){var i=1,j=0,v=array[0][1],k,n=array.length;for(;i < n;++i) {if((k = array[i][1]) > v){j = i;v = k;}}return j;}function d3_layout_stackReduceSum(d){return d.reduce(d3_layout_stackSum,0);}function d3_layout_stackSum(p,d){return p + d[1];}d3.layout.histogram = function(){var frequency=true,valuer=Number,ranger=d3_layout_histogramRange,binner=d3_layout_histogramBinSturges;function histogram(data,i){var bins=[],values=data.map(valuer,this),range=ranger.call(this,values,i),thresholds=binner.call(this,range,values,i),bin,i=-1,n=values.length,m=thresholds.length - 1,k=frequency?1:1 / n,x;while(++i < m) {bin = bins[i] = [];bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);bin.y = 0;}if(m > 0){i = -1;while(++i < n) {x = values[i];if(x >= range[0] && x <= range[1]){bin = bins[d3.bisect(thresholds,x,1,m) - 1];bin.y += k;bin.push(data[i]);}}}return bins;}histogram.value = function(x){if(!arguments.length)return valuer;valuer = x;return histogram;};histogram.range = function(x){if(!arguments.length)return ranger;ranger = d3_functor(x);return histogram;};histogram.bins = function(x){if(!arguments.length)return binner;binner = typeof x === \"number\"?function(range){return d3_layout_histogramBinFixed(range,x);}:d3_functor(x);return histogram;};histogram.frequency = function(x){if(!arguments.length)return frequency;frequency = !!x;return histogram;};return histogram;};function d3_layout_histogramBinSturges(range,values){return d3_layout_histogramBinFixed(range,Math.ceil(Math.log(values.length) / Math.LN2 + 1));}function d3_layout_histogramBinFixed(range,n){var x=-1,b=+range[0],m=(range[1] - b) / n,f=[];while(++x <= n) f[x] = m * x + b;return f;}function d3_layout_histogramRange(values){return [d3.min(values),d3.max(values)];}d3.layout.pack = function(){var hierarchy=d3.layout.hierarchy().sort(d3_layout_packSort),padding=0,size=[1,1],radius;function pack(d,i){var nodes=hierarchy.call(this,d,i),root=nodes[0],w=size[0],h=size[1],r=radius == null?Math.sqrt:typeof radius === \"function\"?radius:function(){return radius;};root.x = root.y = 0;d3_layout_hierarchyVisitAfter(root,function(d){d.r = +r(d.value);});d3_layout_hierarchyVisitAfter(root,d3_layout_packSiblings);if(padding){var dr=padding * (radius?1:Math.max(2 * root.r / w,2 * root.r / h)) / 2;d3_layout_hierarchyVisitAfter(root,function(d){d.r += dr;});d3_layout_hierarchyVisitAfter(root,d3_layout_packSiblings);d3_layout_hierarchyVisitAfter(root,function(d){d.r -= dr;});}d3_layout_packTransform(root,w / 2,h / 2,radius?1:1 / Math.max(2 * root.r / w,2 * root.r / h));return nodes;}pack.size = function(_){if(!arguments.length)return size;size = _;return pack;};pack.radius = function(_){if(!arguments.length)return radius;radius = _ == null || typeof _ === \"function\"?_:+_;return pack;};pack.padding = function(_){if(!arguments.length)return padding;padding = +_;return pack;};return d3_layout_hierarchyRebind(pack,hierarchy);};function d3_layout_packSort(a,b){return a.value - b.value;}function d3_layout_packInsert(a,b){var c=a._pack_next;a._pack_next = b;b._pack_prev = a;b._pack_next = c;c._pack_prev = b;}function d3_layout_packSplice(a,b){a._pack_next = b;b._pack_prev = a;}function d3_layout_packIntersects(a,b){var dx=b.x - a.x,dy=b.y - a.y,dr=a.r + b.r;return .999 * dr * dr > dx * dx + dy * dy;}function d3_layout_packSiblings(node){if(!(nodes = node.children) || !(n = nodes.length))return;var nodes,xMin=Infinity,xMax=-Infinity,yMin=Infinity,yMax=-Infinity,a,b,c,i,j,k,n;function bound(node){xMin = Math.min(node.x - node.r,xMin);xMax = Math.max(node.x + node.r,xMax);yMin = Math.min(node.y - node.r,yMin);yMax = Math.max(node.y + node.r,yMax);}nodes.forEach(d3_layout_packLink);a = nodes[0];a.x = -a.r;a.y = 0;bound(a);if(n > 1){b = nodes[1];b.x = b.r;b.y = 0;bound(b);if(n > 2){c = nodes[2];d3_layout_packPlace(a,b,c);bound(c);d3_layout_packInsert(a,c);a._pack_prev = c;d3_layout_packInsert(c,b);b = a._pack_next;for(i = 3;i < n;i++) {d3_layout_packPlace(a,b,c = nodes[i]);var isect=0,s1=1,s2=1;for(j = b._pack_next;j !== b;j = j._pack_next,s1++) {if(d3_layout_packIntersects(j,c)){isect = 1;break;}}if(isect == 1){for(k = a._pack_prev;k !== j._pack_prev;k = k._pack_prev,s2++) {if(d3_layout_packIntersects(k,c)){break;}}}if(isect){if(s1 < s2 || s1 == s2 && b.r < a.r)d3_layout_packSplice(a,b = j);else d3_layout_packSplice(a = k,b);i--;}else {d3_layout_packInsert(a,c);b = c;bound(c);}}}}var cx=(xMin + xMax) / 2,cy=(yMin + yMax) / 2,cr=0;for(i = 0;i < n;i++) {c = nodes[i];c.x -= cx;c.y -= cy;cr = Math.max(cr,c.r + Math.sqrt(c.x * c.x + c.y * c.y));}node.r = cr;nodes.forEach(d3_layout_packUnlink);}function d3_layout_packLink(node){node._pack_next = node._pack_prev = node;}function d3_layout_packUnlink(node){delete node._pack_next;delete node._pack_prev;}function d3_layout_packTransform(node,x,y,k){var children=node.children;node.x = x += k * node.x;node.y = y += k * node.y;node.r *= k;if(children){var i=-1,n=children.length;while(++i < n) d3_layout_packTransform(children[i],x,y,k);}}function d3_layout_packPlace(a,b,c){var db=a.r + c.r,dx=b.x - a.x,dy=b.y - a.y;if(db && (dx || dy)){var da=b.r + c.r,dc=dx * dx + dy * dy;da *= da;db *= db;var x=.5 + (db - da) / (2 * dc),y=Math.sqrt(Math.max(0,2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);c.x = a.x + x * dx + y * dy;c.y = a.y + x * dy - y * dx;}else {c.x = a.x + db;c.y = a.y;}}d3.layout.tree = function(){var hierarchy=d3.layout.hierarchy().sort(null).value(null),separation=d3_layout_treeSeparation,size=[1,1],nodeSize=null;function tree(d,i){var nodes=hierarchy.call(this,d,i),root0=nodes[0],root1=wrapTree(root0);d3_layout_hierarchyVisitAfter(root1,firstWalk),root1.parent.m = -root1.z;d3_layout_hierarchyVisitBefore(root1,secondWalk);if(nodeSize)d3_layout_hierarchyVisitBefore(root0,sizeNode);else {var left=root0,right=root0,bottom=root0;d3_layout_hierarchyVisitBefore(root0,function(node){if(node.x < left.x)left = node;if(node.x > right.x)right = node;if(node.depth > bottom.depth)bottom = node;});var tx=separation(left,right) / 2 - left.x,kx=size[0] / (right.x + separation(right,left) / 2 + tx),ky=size[1] / (bottom.depth || 1);d3_layout_hierarchyVisitBefore(root0,function(node){node.x = (node.x + tx) * kx;node.y = node.depth * ky;});}return nodes;}function wrapTree(root0){var root1={A:null,children:[root0]},queue=[root1],node1;while((node1 = queue.pop()) != null) {for(var children=node1.children,child,i=0,n=children.length;i < n;++i) {queue.push((children[i] = child = {_:children[i],parent:node1,children:(child = children[i].children) && child.slice() || [],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:i}).a = child);}}return root1.children[0];}function firstWalk(v){var children=v.children,siblings=v.parent.children,w=v.i?siblings[v.i - 1]:null;if(children.length){d3_layout_treeShift(v);var midpoint=(children[0].z + children[children.length - 1].z) / 2;if(w){v.z = w.z + separation(v._,w._);v.m = v.z - midpoint;}else {v.z = midpoint;}}else if(w){v.z = w.z + separation(v._,w._);}v.parent.A = apportion(v,w,v.parent.A || siblings[0]);}function secondWalk(v){v._.x = v.z + v.parent.m;v.m += v.parent.m;}function apportion(v,w,ancestor){if(w){var vip=v,vop=v,vim=w,vom=vip.parent.children[0],sip=vip.m,sop=vop.m,sim=vim.m,som=vom.m,shift;while((vim = d3_layout_treeRight(vim),vip = d3_layout_treeLeft(vip),vim && vip)) {vom = d3_layout_treeLeft(vom);vop = d3_layout_treeRight(vop);vop.a = v;shift = vim.z + sim - vip.z - sip + separation(vim._,vip._);if(shift > 0){d3_layout_treeMove(d3_layout_treeAncestor(vim,v,ancestor),v,shift);sip += shift;sop += shift;}sim += vim.m;sip += vip.m;som += vom.m;sop += vop.m;}if(vim && !d3_layout_treeRight(vop)){vop.t = vim;vop.m += sim - sop;}if(vip && !d3_layout_treeLeft(vom)){vom.t = vip;vom.m += sip - som;ancestor = v;}}return ancestor;}function sizeNode(node){node.x *= size[0];node.y = node.depth * size[1];}tree.separation = function(x){if(!arguments.length)return separation;separation = x;return tree;};tree.size = function(x){if(!arguments.length)return nodeSize?null:size;nodeSize = (size = x) == null?sizeNode:null;return tree;};tree.nodeSize = function(x){if(!arguments.length)return nodeSize?size:null;nodeSize = (size = x) == null?null:sizeNode;return tree;};return d3_layout_hierarchyRebind(tree,hierarchy);};function d3_layout_treeSeparation(a,b){return a.parent == b.parent?1:2;}function d3_layout_treeLeft(v){var children=v.children;return children.length?children[0]:v.t;}function d3_layout_treeRight(v){var children=v.children,n;return (n = children.length)?children[n - 1]:v.t;}function d3_layout_treeMove(wm,wp,shift){var change=shift / (wp.i - wm.i);wp.c -= change;wp.s += shift;wm.c += change;wp.z += shift;wp.m += shift;}function d3_layout_treeShift(v){var shift=0,change=0,children=v.children,i=children.length,w;while(--i >= 0) {w = children[i];w.z += shift;w.m += shift;shift += w.s + (change += w.c);}}function d3_layout_treeAncestor(vim,v,ancestor){return vim.a.parent === v.parent?vim.a:ancestor;}d3.layout.cluster = function(){var hierarchy=d3.layout.hierarchy().sort(null).value(null),separation=d3_layout_treeSeparation,size=[1,1],nodeSize=false;function cluster(d,i){var nodes=hierarchy.call(this,d,i),root=nodes[0],previousNode,x=0;d3_layout_hierarchyVisitAfter(root,function(node){var children=node.children;if(children && children.length){node.x = d3_layout_clusterX(children);node.y = d3_layout_clusterY(children);}else {node.x = previousNode?x += separation(node,previousNode):0;node.y = 0;previousNode = node;}});var left=d3_layout_clusterLeft(root),right=d3_layout_clusterRight(root),x0=left.x - separation(left,right) / 2,x1=right.x + separation(right,left) / 2;d3_layout_hierarchyVisitAfter(root,nodeSize?function(node){node.x = (node.x - root.x) * size[0];node.y = (root.y - node.y) * size[1];}:function(node){node.x = (node.x - x0) / (x1 - x0) * size[0];node.y = (1 - (root.y?node.y / root.y:1)) * size[1];});return nodes;}cluster.separation = function(x){if(!arguments.length)return separation;separation = x;return cluster;};cluster.size = function(x){if(!arguments.length)return nodeSize?null:size;nodeSize = (size = x) == null;return cluster;};cluster.nodeSize = function(x){if(!arguments.length)return nodeSize?size:null;nodeSize = (size = x) != null;return cluster;};return d3_layout_hierarchyRebind(cluster,hierarchy);};function d3_layout_clusterY(children){return 1 + d3.max(children,function(child){return child.y;});}function d3_layout_clusterX(children){return children.reduce(function(x,child){return x + child.x;},0) / children.length;}function d3_layout_clusterLeft(_x2){var _again=true;_function: while(_again) {var node=_x2;_again = false;var children=node.children;if(children && children.length){_x2 = children[0];_again = true;children = undefined;continue _function;}else {return node;}}}function d3_layout_clusterRight(_x3){var _again2=true;_function2: while(_again2) {var node=_x3;_again2 = false;var children=node.children,n;if(children && (n = children.length)){_x3 = children[n - 1];_again2 = true;children = n = undefined;continue _function2;}else {return node;}}}d3.layout.treemap = function(){var hierarchy=d3.layout.hierarchy(),round=Math.round,size=[1,1],padding=null,pad=d3_layout_treemapPadNull,sticky=false,stickies,mode=\"squarify\",ratio=.5 * (1 + Math.sqrt(5));function scale(children,k){var i=-1,n=children.length,child,area;while(++i < n) {area = (child = children[i]).value * (k < 0?0:k);child.area = isNaN(area) || area <= 0?0:area;}}function squarify(node){var children=node.children;if(children && children.length){var rect=pad(node),row=[],remaining=children.slice(),child,best=Infinity,score,u=mode === \"slice\"?rect.dx:mode === \"dice\"?rect.dy:mode === \"slice-dice\"?node.depth & 1?rect.dy:rect.dx:Math.min(rect.dx,rect.dy),n;scale(remaining,rect.dx * rect.dy / node.value);row.area = 0;while((n = remaining.length) > 0) {row.push(child = remaining[n - 1]);row.area += child.area;if(mode !== \"squarify\" || (score = worst(row,u)) <= best){remaining.pop();best = score;}else {row.area -= row.pop().area;position(row,u,rect,false);u = Math.min(rect.dx,rect.dy);row.length = row.area = 0;best = Infinity;}}if(row.length){position(row,u,rect,true);row.length = row.area = 0;}children.forEach(squarify);}}function stickify(node){var children=node.children;if(children && children.length){var rect=pad(node),remaining=children.slice(),child,row=[];scale(remaining,rect.dx * rect.dy / node.value);row.area = 0;while(child = remaining.pop()) {row.push(child);row.area += child.area;if(child.z != null){position(row,child.z?rect.dx:rect.dy,rect,!remaining.length);row.length = row.area = 0;}}children.forEach(stickify);}}function worst(row,u){var s=row.area,r,rmax=0,rmin=Infinity,i=-1,n=row.length;while(++i < n) {if(!(r = row[i].area))continue;if(r < rmin)rmin = r;if(r > rmax)rmax = r;}s *= s;u *= u;return s?Math.max(u * rmax * ratio / s,s / (u * rmin * ratio)):Infinity;}function position(row,u,rect,flush){var i=-1,n=row.length,x=rect.x,y=rect.y,v=u?round(row.area / u):0,o;if(u == rect.dx){if(flush || v > rect.dy)v = rect.dy;while(++i < n) {o = row[i];o.x = x;o.y = y;o.dy = v;x += o.dx = Math.min(rect.x + rect.dx - x,v?round(o.area / v):0);}o.z = true;o.dx += rect.x + rect.dx - x;rect.y += v;rect.dy -= v;}else {if(flush || v > rect.dx)v = rect.dx;while(++i < n) {o = row[i];o.x = x;o.y = y;o.dx = v;y += o.dy = Math.min(rect.y + rect.dy - y,v?round(o.area / v):0);}o.z = false;o.dy += rect.y + rect.dy - y;rect.x += v;rect.dx -= v;}}function treemap(d){var nodes=stickies || hierarchy(d),root=nodes[0];root.x = root.y = 0;if(root.value)root.dx = size[0],root.dy = size[1];else root.dx = root.dy = 0;if(stickies)hierarchy.revalue(root);scale([root],root.dx * root.dy / root.value);(stickies?stickify:squarify)(root);if(sticky)stickies = nodes;return nodes;}treemap.size = function(x){if(!arguments.length)return size;size = x;return treemap;};treemap.padding = function(x){if(!arguments.length)return padding;function padFunction(node){var p=x.call(treemap,node,node.depth);return p == null?d3_layout_treemapPadNull(node):d3_layout_treemapPad(node,typeof p === \"number\"?[p,p,p,p]:p);}function padConstant(node){return d3_layout_treemapPad(node,x);}var type;pad = (padding = x) == null?d3_layout_treemapPadNull:(type = typeof x) === \"function\"?padFunction:type === \"number\"?(x = [x,x,x,x],padConstant):padConstant;return treemap;};treemap.round = function(x){if(!arguments.length)return round != Number;round = x?Math.round:Number;return treemap;};treemap.sticky = function(x){if(!arguments.length)return sticky;sticky = x;stickies = null;return treemap;};treemap.ratio = function(x){if(!arguments.length)return ratio;ratio = x;return treemap;};treemap.mode = function(x){if(!arguments.length)return mode;mode = x + \"\";return treemap;};return d3_layout_hierarchyRebind(treemap,hierarchy);};function d3_layout_treemapPadNull(node){return {x:node.x,y:node.y,dx:node.dx,dy:node.dy};}function d3_layout_treemapPad(node,padding){var x=node.x + padding[3],y=node.y + padding[0],dx=node.dx - padding[1] - padding[3],dy=node.dy - padding[0] - padding[2];if(dx < 0){x += dx / 2;dx = 0;}if(dy < 0){y += dy / 2;dy = 0;}return {x:x,y:y,dx:dx,dy:dy};}d3.random = {normal:function normal(µ,σ){var n=arguments.length;if(n < 2)σ = 1;if(n < 1)µ = 0;return function(){var x,y,r;do {x = Math.random() * 2 - 1;y = Math.random() * 2 - 1;r = x * x + y * y;}while(!r || r > 1);return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);};},logNormal:function logNormal(){var random=d3.random.normal.apply(d3,arguments);return function(){return Math.exp(random());};},bates:function bates(m){var random=d3.random.irwinHall(m);return function(){return random() / m;};},irwinHall:function irwinHall(m){return function(){for(var s=0,j=0;j < m;j++) s += Math.random();return s;};}};d3.scale = {};function d3_scaleExtent(domain){var start=domain[0],stop=domain[domain.length - 1];return start < stop?[start,stop]:[stop,start];}function d3_scaleRange(scale){return scale.rangeExtent?scale.rangeExtent():d3_scaleExtent(scale.range());}function d3_scale_bilinear(domain,range,uninterpolate,interpolate){var u=uninterpolate(domain[0],domain[1]),i=interpolate(range[0],range[1]);return function(x){return i(u(x));};}function d3_scale_nice(domain,nice){var i0=0,i1=domain.length - 1,x0=domain[i0],x1=domain[i1],dx;if(x1 < x0){dx = i0,i0 = i1,i1 = dx;dx = x0,x0 = x1,x1 = dx;}domain[i0] = nice.floor(x0);domain[i1] = nice.ceil(x1);return domain;}function d3_scale_niceStep(step){return step?{floor:function floor(x){return Math.floor(x / step) * step;},ceil:function ceil(x){return Math.ceil(x / step) * step;}}:d3_scale_niceIdentity;}var d3_scale_niceIdentity={floor:d3_identity,ceil:d3_identity};function d3_scale_polylinear(domain,range,uninterpolate,interpolate){var u=[],i=[],j=0,k=Math.min(domain.length,range.length) - 1;if(domain[k] < domain[0]){domain = domain.slice().reverse();range = range.slice().reverse();}while(++j <= k) {u.push(uninterpolate(domain[j - 1],domain[j]));i.push(interpolate(range[j - 1],range[j]));}return function(x){var j=d3.bisect(domain,x,1,k) - 1;return i[j](u[j](x));};}d3.scale.linear = function(){return d3_scale_linear([0,1],[0,1],d3_interpolate,false);};function d3_scale_linear(domain,range,interpolate,clamp){var output,input;function rescale(){var linear=Math.min(domain.length,range.length) > 2?d3_scale_polylinear:d3_scale_bilinear,uninterpolate=clamp?d3_uninterpolateClamp:d3_uninterpolateNumber;output = linear(domain,range,uninterpolate,interpolate);input = linear(range,domain,uninterpolate,d3_interpolate);return scale;}function scale(x){return output(x);}scale.invert = function(y){return input(y);};scale.domain = function(x){if(!arguments.length)return domain;domain = x.map(Number);return rescale();};scale.range = function(x){if(!arguments.length)return range;range = x;return rescale();};scale.rangeRound = function(x){return scale.range(x).interpolate(d3_interpolateRound);};scale.clamp = function(x){if(!arguments.length)return clamp;clamp = x;return rescale();};scale.interpolate = function(x){if(!arguments.length)return interpolate;interpolate = x;return rescale();};scale.ticks = function(m){return d3_scale_linearTicks(domain,m);};scale.tickFormat = function(m,format){return d3_scale_linearTickFormat(domain,m,format);};scale.nice = function(m){d3_scale_linearNice(domain,m);return rescale();};scale.copy = function(){return d3_scale_linear(domain,range,interpolate,clamp);};return rescale();}function d3_scale_linearRebind(scale,linear){return d3.rebind(scale,linear,\"range\",\"rangeRound\",\"interpolate\",\"clamp\");}function d3_scale_linearNice(domain,m){return d3_scale_nice(domain,d3_scale_niceStep(d3_scale_linearTickRange(domain,m)[2]));}function d3_scale_linearTickRange(domain,m){if(m == null)m = 10;var extent=d3_scaleExtent(domain),span=extent[1] - extent[0],step=Math.pow(10,Math.floor(Math.log(span / m) / Math.LN10)),err=m / span * step;if(err <= .15)step *= 10;else if(err <= .35)step *= 5;else if(err <= .75)step *= 2;extent[0] = Math.ceil(extent[0] / step) * step;extent[1] = Math.floor(extent[1] / step) * step + step * .5;extent[2] = step;return extent;}function d3_scale_linearTicks(domain,m){return d3.range.apply(d3,d3_scale_linearTickRange(domain,m));}function d3_scale_linearTickFormat(domain,m,format){var range=d3_scale_linearTickRange(domain,m);if(format){var match=d3_format_re.exec(format);match.shift();if(match[8] === \"s\"){var prefix=d3.formatPrefix(Math.max(abs(range[0]),abs(range[1])));if(!match[7])match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));match[8] = \"f\";format = d3.format(match.join(\"\"));return function(d){return format(prefix.scale(d)) + prefix.symbol;};}if(!match[7])match[7] = \".\" + d3_scale_linearFormatPrecision(match[8],range);format = match.join(\"\");}else {format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";}return d3.format(format);}var d3_scale_linearFormatSignificant={s:1,g:1,p:1,r:1,e:1};function d3_scale_linearPrecision(value){return -Math.floor(Math.log(value) / Math.LN10 + .01);}function d3_scale_linearFormatPrecision(type,range){var p=d3_scale_linearPrecision(range[2]);return type in d3_scale_linearFormatSignificant?Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]),abs(range[1])))) + +(type !== \"e\"):p - (type === \"%\") * 2;}d3.scale.log = function(){return d3_scale_log(d3.scale.linear().domain([0,1]),10,true,[1,10]);};function d3_scale_log(linear,base,positive,domain){function log(x){return (positive?Math.log(x < 0?0:x):-Math.log(x > 0?0:-x)) / Math.log(base);}function pow(x){return positive?Math.pow(base,x):-Math.pow(base,-x);}function scale(x){return linear(log(x));}scale.invert = function(x){return pow(linear.invert(x));};scale.domain = function(x){if(!arguments.length)return domain;positive = x[0] >= 0;linear.domain((domain = x.map(Number)).map(log));return scale;};scale.base = function(_){if(!arguments.length)return base;base = +_;linear.domain(domain.map(log));return scale;};scale.nice = function(){var niced=d3_scale_nice(domain.map(log),positive?Math:d3_scale_logNiceNegative);linear.domain(niced);domain = niced.map(pow);return scale;};scale.ticks = function(){var extent=d3_scaleExtent(domain),ticks=[],u=extent[0],v=extent[1],i=Math.floor(log(u)),j=Math.ceil(log(v)),n=base % 1?2:base;if(isFinite(j - i)){if(positive){for(;i < j;i++) for(var k=1;k < n;k++) ticks.push(pow(i) * k);ticks.push(pow(i));}else {ticks.push(pow(i));for(;i++ < j;) for(var k=n - 1;k > 0;k--) ticks.push(pow(i) * k);}for(i = 0;ticks[i] < u;i++) {}for(j = ticks.length;ticks[j - 1] > v;j--) {}ticks = ticks.slice(i,j);}return ticks;};scale.tickFormat = function(n,format){if(!arguments.length)return d3_scale_logFormat;if(arguments.length < 2)format = d3_scale_logFormat;else if(typeof format !== \"function\")format = d3.format(format);var k=Math.max(.1,n / scale.ticks().length),f=positive?(e = 1e-12,Math.ceil):(e = -1e-12,Math.floor),e;return function(d){return d / pow(f(log(d) + e)) <= k?format(d):\"\";};};scale.copy = function(){return d3_scale_log(linear.copy(),base,positive,domain);};return d3_scale_linearRebind(scale,linear);}var d3_scale_logFormat=d3.format(\".0e\"),d3_scale_logNiceNegative={floor:function floor(x){return -Math.ceil(-x);},ceil:function ceil(x){return -Math.floor(-x);}};d3.scale.pow = function(){return d3_scale_pow(d3.scale.linear(),1,[0,1]);};function d3_scale_pow(linear,exponent,domain){var powp=d3_scale_powPow(exponent),powb=d3_scale_powPow(1 / exponent);function scale(x){return linear(powp(x));}scale.invert = function(x){return powb(linear.invert(x));};scale.domain = function(x){if(!arguments.length)return domain;linear.domain((domain = x.map(Number)).map(powp));return scale;};scale.ticks = function(m){return d3_scale_linearTicks(domain,m);};scale.tickFormat = function(m,format){return d3_scale_linearTickFormat(domain,m,format);};scale.nice = function(m){return scale.domain(d3_scale_linearNice(domain,m));};scale.exponent = function(x){if(!arguments.length)return exponent;powp = d3_scale_powPow(exponent = x);powb = d3_scale_powPow(1 / exponent);linear.domain(domain.map(powp));return scale;};scale.copy = function(){return d3_scale_pow(linear.copy(),exponent,domain);};return d3_scale_linearRebind(scale,linear);}function d3_scale_powPow(e){return function(x){return x < 0?-Math.pow(-x,e):Math.pow(x,e);};}d3.scale.sqrt = function(){return d3.scale.pow().exponent(.5);};d3.scale.ordinal = function(){return d3_scale_ordinal([],{t:\"range\",a:[[]]});};function d3_scale_ordinal(domain,ranger){var index,range,rangeBand;function scale(x){return range[((index.get(x) || (ranger.t === \"range\"?index.set(x,domain.push(x)):NaN)) - 1) % range.length];}function steps(start,step){return d3.range(domain.length).map(function(i){return start + step * i;});}scale.domain = function(x){if(!arguments.length)return domain;domain = [];index = new d3_Map();var i=-1,n=x.length,xi;while(++i < n) if(!index.has(xi = x[i]))index.set(xi,domain.push(xi));return scale[ranger.t].apply(scale,ranger.a);};scale.range = function(x){if(!arguments.length)return range;range = x;rangeBand = 0;ranger = {t:\"range\",a:arguments};return scale;};scale.rangePoints = function(x,padding){if(arguments.length < 2)padding = 0;var start=x[0],stop=x[1],step=domain.length < 2?(start = (start + stop) / 2,0):(stop - start) / (domain.length - 1 + padding);range = steps(start + step * padding / 2,step);rangeBand = 0;ranger = {t:\"rangePoints\",a:arguments};return scale;};scale.rangeRoundPoints = function(x,padding){if(arguments.length < 2)padding = 0;var start=x[0],stop=x[1],step=domain.length < 2?(start = stop = Math.round((start + stop) / 2),0):(stop - start) / (domain.length - 1 + padding) | 0;range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2),step);rangeBand = 0;ranger = {t:\"rangeRoundPoints\",a:arguments};return scale;};scale.rangeBands = function(x,padding,outerPadding){if(arguments.length < 2)padding = 0;if(arguments.length < 3)outerPadding = padding;var reverse=x[1] < x[0],start=x[reverse - 0],stop=x[1 - reverse],step=(stop - start) / (domain.length - padding + 2 * outerPadding);range = steps(start + step * outerPadding,step);if(reverse)range.reverse();rangeBand = step * (1 - padding);ranger = {t:\"rangeBands\",a:arguments};return scale;};scale.rangeRoundBands = function(x,padding,outerPadding){if(arguments.length < 2)padding = 0;if(arguments.length < 3)outerPadding = padding;var reverse=x[1] < x[0],start=x[reverse - 0],stop=x[1 - reverse],step=Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2),step);if(reverse)range.reverse();rangeBand = Math.round(step * (1 - padding));ranger = {t:\"rangeRoundBands\",a:arguments};return scale;};scale.rangeBand = function(){return rangeBand;};scale.rangeExtent = function(){return d3_scaleExtent(ranger.a[0]);};scale.copy = function(){return d3_scale_ordinal(domain,ranger);};return scale.domain(domain);}d3.scale.category10 = function(){return d3.scale.ordinal().range(d3_category10);};d3.scale.category20 = function(){return d3.scale.ordinal().range(d3_category20);};d3.scale.category20b = function(){return d3.scale.ordinal().range(d3_category20b);};d3.scale.category20c = function(){return d3.scale.ordinal().range(d3_category20c);};var d3_category10=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(d3_rgbString);var d3_category20=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(d3_rgbString);var d3_category20b=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(d3_rgbString);var d3_category20c=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(d3_rgbString);d3.scale.quantile = function(){return d3_scale_quantile([],[]);};function d3_scale_quantile(domain,range){var thresholds;function rescale(){var k=0,q=range.length;thresholds = [];while(++k < q) thresholds[k - 1] = d3.quantile(domain,k / q);return scale;}function scale(x){if(!isNaN(x = +x))return range[d3.bisect(thresholds,x)];}scale.domain = function(x){if(!arguments.length)return domain;domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);return rescale();};scale.range = function(x){if(!arguments.length)return range;range = x;return rescale();};scale.quantiles = function(){return thresholds;};scale.invertExtent = function(y){y = range.indexOf(y);return y < 0?[NaN,NaN]:[y > 0?thresholds[y - 1]:domain[0],y < thresholds.length?thresholds[y]:domain[domain.length - 1]];};scale.copy = function(){return d3_scale_quantile(domain,range);};return rescale();}d3.scale.quantize = function(){return d3_scale_quantize(0,1,[0,1]);};function d3_scale_quantize(x0,x1,range){var kx,i;function scale(x){return range[Math.max(0,Math.min(i,Math.floor(kx * (x - x0))))];}function rescale(){kx = range.length / (x1 - x0);i = range.length - 1;return scale;}scale.domain = function(x){if(!arguments.length)return [x0,x1];x0 = +x[0];x1 = +x[x.length - 1];return rescale();};scale.range = function(x){if(!arguments.length)return range;range = x;return rescale();};scale.invertExtent = function(y){y = range.indexOf(y);y = y < 0?NaN:y / kx + x0;return [y,y + 1 / kx];};scale.copy = function(){return d3_scale_quantize(x0,x1,range);};return rescale();}d3.scale.threshold = function(){return d3_scale_threshold([.5],[0,1]);};function d3_scale_threshold(domain,range){function scale(x){if(x <= x)return range[d3.bisect(domain,x)];}scale.domain = function(_){if(!arguments.length)return domain;domain = _;return scale;};scale.range = function(_){if(!arguments.length)return range;range = _;return scale;};scale.invertExtent = function(y){y = range.indexOf(y);return [domain[y - 1],domain[y]];};scale.copy = function(){return d3_scale_threshold(domain,range);};return scale;}d3.scale.identity = function(){return d3_scale_identity([0,1]);};function d3_scale_identity(domain){function identity(x){return +x;}identity.invert = identity;identity.domain = identity.range = function(x){if(!arguments.length)return domain;domain = x.map(identity);return identity;};identity.ticks = function(m){return d3_scale_linearTicks(domain,m);};identity.tickFormat = function(m,format){return d3_scale_linearTickFormat(domain,m,format);};identity.copy = function(){return d3_scale_identity(domain);};return identity;}d3.svg = {};function d3_zero(){return 0;}d3.svg.arc = function(){var innerRadius=d3_svg_arcInnerRadius,outerRadius=d3_svg_arcOuterRadius,cornerRadius=d3_zero,padRadius=d3_svg_arcAuto,startAngle=d3_svg_arcStartAngle,endAngle=d3_svg_arcEndAngle,padAngle=d3_svg_arcPadAngle;function arc(){var r0=Math.max(0,+innerRadius.apply(this,arguments)),r1=Math.max(0,+outerRadius.apply(this,arguments)),a0=startAngle.apply(this,arguments) - halfπ,a1=endAngle.apply(this,arguments) - halfπ,da=Math.abs(a1 - a0),cw=a0 > a1?0:1;if(r1 < r0)rc = r1,r1 = r0,r0 = rc;if(da >= τε)return circleSegment(r1,cw) + (r0?circleSegment(r0,1 - cw):\"\") + \"Z\";var rc,cr,rp,ap,p0=0,p1=0,x0,y0,x1,y1,x2,y2,x3,y3,path=[];if(ap = (+padAngle.apply(this,arguments) || 0) / 2){rp = padRadius === d3_svg_arcAuto?Math.sqrt(r0 * r0 + r1 * r1):+padRadius.apply(this,arguments);if(!cw)p1 *= -1;if(r1)p1 = d3_asin(rp / r1 * Math.sin(ap));if(r0)p0 = d3_asin(rp / r0 * Math.sin(ap));}if(r1){x0 = r1 * Math.cos(a0 + p1);y0 = r1 * Math.sin(a0 + p1);x1 = r1 * Math.cos(a1 - p1);y1 = r1 * Math.sin(a1 - p1);var l1=Math.abs(a1 - a0 - 2 * p1) <= π?0:1;if(p1 && d3_svg_arcSweep(x0,y0,x1,y1) === cw ^ l1){var h1=(a0 + a1) / 2;x0 = r1 * Math.cos(h1);y0 = r1 * Math.sin(h1);x1 = y1 = null;}}else {x0 = y0 = 0;}if(r0){x2 = r0 * Math.cos(a1 - p0);y2 = r0 * Math.sin(a1 - p0);x3 = r0 * Math.cos(a0 + p0);y3 = r0 * Math.sin(a0 + p0);var l0=Math.abs(a0 - a1 + 2 * p0) <= π?0:1;if(p0 && d3_svg_arcSweep(x2,y2,x3,y3) === 1 - cw ^ l0){var h0=(a0 + a1) / 2;x2 = r0 * Math.cos(h0);y2 = r0 * Math.sin(h0);x3 = y3 = null;}}else {x2 = y2 = 0;}if(da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2,+cornerRadius.apply(this,arguments))) > .001){cr = r0 < r1 ^ cw?0:1;var rc1=rc,rc0=rc;if(da < π){var oc=x3 == null?[x2,y2]:x1 == null?[x0,y0]:d3_geom_polygonIntersect([x0,y0],[x3,y3],[x1,y1],[x2,y2]),ax=x0 - oc[0],ay=y0 - oc[1],bx=x1 - oc[0],by=y1 - oc[1],kc=1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),lc=Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);rc0 = Math.min(rc,(r0 - lc) / (kc - 1));rc1 = Math.min(rc,(r1 - lc) / (kc + 1));}if(x1 != null){var t30=d3_svg_arcCornerTangents(x3 == null?[x2,y2]:[x3,y3],[x0,y0],r1,rc1,cw),t12=d3_svg_arcCornerTangents([x1,y1],[x2,y2],r1,rc1,cw);if(rc === rc1){path.push(\"M\",t30[0],\"A\",rc1,\",\",rc1,\" 0 0,\",cr,\" \",t30[1],\"A\",r1,\",\",r1,\" 0 \",1 - cw ^ d3_svg_arcSweep(t30[1][0],t30[1][1],t12[1][0],t12[1][1]),\",\",cw,\" \",t12[1],\"A\",rc1,\",\",rc1,\" 0 0,\",cr,\" \",t12[0]);}else {path.push(\"M\",t30[0],\"A\",rc1,\",\",rc1,\" 0 1,\",cr,\" \",t12[0]);}}else {path.push(\"M\",x0,\",\",y0);}if(x3 != null){var t03=d3_svg_arcCornerTangents([x0,y0],[x3,y3],r0,-rc0,cw),t21=d3_svg_arcCornerTangents([x2,y2],x1 == null?[x0,y0]:[x1,y1],r0,-rc0,cw);if(rc === rc0){path.push(\"L\",t21[0],\"A\",rc0,\",\",rc0,\" 0 0,\",cr,\" \",t21[1],\"A\",r0,\",\",r0,\" 0 \",cw ^ d3_svg_arcSweep(t21[1][0],t21[1][1],t03[1][0],t03[1][1]),\",\",1 - cw,\" \",t03[1],\"A\",rc0,\",\",rc0,\" 0 0,\",cr,\" \",t03[0]);}else {path.push(\"L\",t21[0],\"A\",rc0,\",\",rc0,\" 0 0,\",cr,\" \",t03[0]);}}else {path.push(\"L\",x2,\",\",y2);}}else {path.push(\"M\",x0,\",\",y0);if(x1 != null)path.push(\"A\",r1,\",\",r1,\" 0 \",l1,\",\",cw,\" \",x1,\",\",y1);path.push(\"L\",x2,\",\",y2);if(x3 != null)path.push(\"A\",r0,\",\",r0,\" 0 \",l0,\",\",1 - cw,\" \",x3,\",\",y3);}path.push(\"Z\");return path.join(\"\");}function circleSegment(r1,cw){return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;}arc.innerRadius = function(v){if(!arguments.length)return innerRadius;innerRadius = d3_functor(v);return arc;};arc.outerRadius = function(v){if(!arguments.length)return outerRadius;outerRadius = d3_functor(v);return arc;};arc.cornerRadius = function(v){if(!arguments.length)return cornerRadius;cornerRadius = d3_functor(v);return arc;};arc.padRadius = function(v){if(!arguments.length)return padRadius;padRadius = v == d3_svg_arcAuto?d3_svg_arcAuto:d3_functor(v);return arc;};arc.startAngle = function(v){if(!arguments.length)return startAngle;startAngle = d3_functor(v);return arc;};arc.endAngle = function(v){if(!arguments.length)return endAngle;endAngle = d3_functor(v);return arc;};arc.padAngle = function(v){if(!arguments.length)return padAngle;padAngle = d3_functor(v);return arc;};arc.centroid = function(){var r=(+innerRadius.apply(this,arguments) + +outerRadius.apply(this,arguments)) / 2,a=(+startAngle.apply(this,arguments) + +endAngle.apply(this,arguments)) / 2 - halfπ;return [Math.cos(a) * r,Math.sin(a) * r];};return arc;};var d3_svg_arcAuto=\"auto\";function d3_svg_arcInnerRadius(d){return d.innerRadius;}function d3_svg_arcOuterRadius(d){return d.outerRadius;}function d3_svg_arcStartAngle(d){return d.startAngle;}function d3_svg_arcEndAngle(d){return d.endAngle;}function d3_svg_arcPadAngle(d){return d && d.padAngle;}function d3_svg_arcSweep(x0,y0,x1,y1){return (x0 - x1) * y0 - (y0 - y1) * x0 > 0?0:1;}function d3_svg_arcCornerTangents(p0,p1,r1,rc,cw){var x01=p0[0] - p1[0],y01=p0[1] - p1[1],lo=(cw?rc:-rc) / Math.sqrt(x01 * x01 + y01 * y01),ox=lo * y01,oy=-lo * x01,x1=p0[0] + ox,y1=p0[1] + oy,x2=p1[0] + ox,y2=p1[1] + oy,x3=(x1 + x2) / 2,y3=(y1 + y2) / 2,dx=x2 - x1,dy=y2 - y1,d2=dx * dx + dy * dy,r=r1 - rc,D=x1 * y2 - x2 * y1,d=(dy < 0?-1:1) * Math.sqrt(Math.max(0,r * r * d2 - D * D)),cx0=(D * dy - dx * d) / d2,cy0=(-D * dx - dy * d) / d2,cx1=(D * dy + dx * d) / d2,cy1=(-D * dx + dy * d) / d2,dx0=cx0 - x3,dy0=cy0 - y3,dx1=cx1 - x3,dy1=cy1 - y3;if(dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1)cx0 = cx1,cy0 = cy1;return [[cx0 - ox,cy0 - oy],[cx0 * r1 / r,cy0 * r1 / r]];}function d3_svg_line(projection){var x=d3_geom_pointX,y=d3_geom_pointY,defined=d3_true,interpolate=d3_svg_lineLinear,interpolateKey=interpolate.key,tension=.7;function line(data){var segments=[],points=[],i=-1,n=data.length,d,fx=d3_functor(x),fy=d3_functor(y);function segment(){segments.push(\"M\",interpolate(projection(points),tension));}while(++i < n) {if(defined.call(this,d = data[i],i)){points.push([+fx.call(this,d,i),+fy.call(this,d,i)]);}else if(points.length){segment();points = [];}}if(points.length)segment();return segments.length?segments.join(\"\"):null;}line.x = function(_){if(!arguments.length)return x;x = _;return line;};line.y = function(_){if(!arguments.length)return y;y = _;return line;};line.defined = function(_){if(!arguments.length)return defined;defined = _;return line;};line.interpolate = function(_){if(!arguments.length)return interpolateKey;if(typeof _ === \"function\")interpolateKey = interpolate = _;else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;return line;};line.tension = function(_){if(!arguments.length)return tension;tension = _;return line;};return line;}d3.svg.line = function(){return d3_svg_line(d3_identity);};var d3_svg_lineInterpolators=d3.map({linear:d3_svg_lineLinear,\"linear-closed\":d3_svg_lineLinearClosed,step:d3_svg_lineStep,\"step-before\":d3_svg_lineStepBefore,\"step-after\":d3_svg_lineStepAfter,basis:d3_svg_lineBasis,\"basis-open\":d3_svg_lineBasisOpen,\"basis-closed\":d3_svg_lineBasisClosed,bundle:d3_svg_lineBundle,cardinal:d3_svg_lineCardinal,\"cardinal-open\":d3_svg_lineCardinalOpen,\"cardinal-closed\":d3_svg_lineCardinalClosed,monotone:d3_svg_lineMonotone});d3_svg_lineInterpolators.forEach(function(key,value){value.key = key;value.closed = /-closed$/.test(key);});function d3_svg_lineLinear(points){return points.length > 1?points.join(\"L\"):points + \"Z\";}function d3_svg_lineLinearClosed(points){return points.join(\"L\") + \"Z\";}function d3_svg_lineStep(points){var i=0,n=points.length,p=points[0],path=[p[0],\",\",p[1]];while(++i < n) path.push(\"H\",(p[0] + (p = points[i])[0]) / 2,\"V\",p[1]);if(n > 1)path.push(\"H\",p[0]);return path.join(\"\");}function d3_svg_lineStepBefore(points){var i=0,n=points.length,p=points[0],path=[p[0],\",\",p[1]];while(++i < n) path.push(\"V\",(p = points[i])[1],\"H\",p[0]);return path.join(\"\");}function d3_svg_lineStepAfter(points){var i=0,n=points.length,p=points[0],path=[p[0],\",\",p[1]];while(++i < n) path.push(\"H\",(p = points[i])[0],\"V\",p[1]);return path.join(\"\");}function d3_svg_lineCardinalOpen(points,tension){return points.length < 4?d3_svg_lineLinear(points):points[1] + d3_svg_lineHermite(points.slice(1,-1),d3_svg_lineCardinalTangents(points,tension));}function d3_svg_lineCardinalClosed(points,tension){return points.length < 3?d3_svg_lineLinearClosed(points):points[0] + d3_svg_lineHermite((points.push(points[0]),points),d3_svg_lineCardinalTangents([points[points.length - 2]].concat(points,[points[1]]),tension));}function d3_svg_lineCardinal(points,tension){return points.length < 3?d3_svg_lineLinear(points):points[0] + d3_svg_lineHermite(points,d3_svg_lineCardinalTangents(points,tension));}function d3_svg_lineHermite(points,tangents){if(tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2){return d3_svg_lineLinear(points);}var quad=points.length != tangents.length,path=\"\",p0=points[0],p=points[1],t0=tangents[0],t=t0,pi=1;if(quad){path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];p0 = points[1];pi = 2;}if(tangents.length > 1){t = tangents[1];p = points[pi];pi++;path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];for(var i=2;i < tangents.length;i++,pi++) {p = points[pi];t = tangents[i];path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];}}if(quad){var lp=points[pi];path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];}return path;}function d3_svg_lineCardinalTangents(points,tension){var tangents=[],a=(1 - tension) / 2,p0,p1=points[0],p2=points[1],i=1,n=points.length;while(++i < n) {p0 = p1;p1 = p2;p2 = points[i];tangents.push([a * (p2[0] - p0[0]),a * (p2[1] - p0[1])]);}return tangents;}function d3_svg_lineBasis(points){if(points.length < 3)return d3_svg_lineLinear(points);var i=1,n=points.length,pi=points[0],x0=pi[0],y0=pi[1],px=[x0,x0,x0,(pi = points[1])[0]],py=[y0,y0,y0,pi[1]],path=[x0,\",\",y0,\"L\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,px),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,py)];points.push(points[n - 1]);while(++i <= n) {pi = points[i];px.shift();px.push(pi[0]);py.shift();py.push(pi[1]);d3_svg_lineBasisBezier(path,px,py);}points.pop();path.push(\"L\",pi);return path.join(\"\");}function d3_svg_lineBasisOpen(points){if(points.length < 4)return d3_svg_lineLinear(points);var path=[],i=-1,n=points.length,pi,px=[0],py=[0];while(++i < 3) {pi = points[i];px.push(pi[0]);py.push(pi[1]);}path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3,px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3,py));--i;while(++i < n) {pi = points[i];px.shift();px.push(pi[0]);py.shift();py.push(pi[1]);d3_svg_lineBasisBezier(path,px,py);}return path.join(\"\");}function d3_svg_lineBasisClosed(points){var path,i=-1,n=points.length,m=n + 4,pi,px=[],py=[];while(++i < 4) {pi = points[i % n];px.push(pi[0]);py.push(pi[1]);}path = [d3_svg_lineDot4(d3_svg_lineBasisBezier3,px),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,py)];--i;while(++i < m) {pi = points[i % n];px.shift();px.push(pi[0]);py.shift();py.push(pi[1]);d3_svg_lineBasisBezier(path,px,py);}return path.join(\"\");}function d3_svg_lineBundle(points,tension){var n=points.length - 1;if(n){var x0=points[0][0],y0=points[0][1],dx=points[n][0] - x0,dy=points[n][1] - y0,i=-1,p,t;while(++i <= n) {p = points[i];t = i / n;p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);}}return d3_svg_lineBasis(points);}function d3_svg_lineDot4(a,b){return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];}var d3_svg_lineBasisBezier1=[0,2 / 3,1 / 3,0],d3_svg_lineBasisBezier2=[0,1 / 3,2 / 3,0],d3_svg_lineBasisBezier3=[0,1 / 6,2 / 3,1 / 6];function d3_svg_lineBasisBezier(path,x,y){path.push(\"C\",d3_svg_lineDot4(d3_svg_lineBasisBezier1,x),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier1,y),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier2,x),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier2,y),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,x),\",\",d3_svg_lineDot4(d3_svg_lineBasisBezier3,y));}function d3_svg_lineSlope(p0,p1){return (p1[1] - p0[1]) / (p1[0] - p0[0]);}function d3_svg_lineFiniteDifferences(points){var i=0,j=points.length - 1,m=[],p0=points[0],p1=points[1],d=m[0] = d3_svg_lineSlope(p0,p1);while(++i < j) {m[i] = (d + (d = d3_svg_lineSlope(p0 = p1,p1 = points[i + 1]))) / 2;}m[i] = d;return m;}function d3_svg_lineMonotoneTangents(points){var tangents=[],d,a,b,s,m=d3_svg_lineFiniteDifferences(points),i=-1,j=points.length - 1;while(++i < j) {d = d3_svg_lineSlope(points[i],points[i + 1]);if(abs(d) < ε){m[i] = m[i + 1] = 0;}else {a = m[i] / d;b = m[i + 1] / d;s = a * a + b * b;if(s > 9){s = d * 3 / Math.sqrt(s);m[i] = s * a;m[i + 1] = s * b;}}}i = -1;while(++i <= j) {s = (points[Math.min(j,i + 1)][0] - points[Math.max(0,i - 1)][0]) / (6 * (1 + m[i] * m[i]));tangents.push([s || 0,m[i] * s || 0]);}return tangents;}function d3_svg_lineMonotone(points){return points.length < 3?d3_svg_lineLinear(points):points[0] + d3_svg_lineHermite(points,d3_svg_lineMonotoneTangents(points));}d3.svg.line.radial = function(){var line=d3_svg_line(d3_svg_lineRadial);line.radius = line.x,delete line.x;line.angle = line.y,delete line.y;return line;};function d3_svg_lineRadial(points){var point,i=-1,n=points.length,r,a;while(++i < n) {point = points[i];r = point[0];a = point[1] - halfπ;point[0] = r * Math.cos(a);point[1] = r * Math.sin(a);}return points;}function d3_svg_area(projection){var x0=d3_geom_pointX,x1=d3_geom_pointX,y0=0,y1=d3_geom_pointY,defined=d3_true,interpolate=d3_svg_lineLinear,interpolateKey=interpolate.key,interpolateReverse=interpolate,L=\"L\",tension=.7;function area(data){var segments=[],points0=[],points1=[],i=-1,n=data.length,d,fx0=d3_functor(x0),fy0=d3_functor(y0),fx1=x0 === x1?function(){return x;}:d3_functor(x1),fy1=y0 === y1?function(){return y;}:d3_functor(y1),x,y;function segment(){segments.push(\"M\",interpolate(projection(points1),tension),L,interpolateReverse(projection(points0.reverse()),tension),\"Z\");}while(++i < n) {if(defined.call(this,d = data[i],i)){points0.push([x = +fx0.call(this,d,i),y = +fy0.call(this,d,i)]);points1.push([+fx1.call(this,d,i),+fy1.call(this,d,i)]);}else if(points0.length){segment();points0 = [];points1 = [];}}if(points0.length)segment();return segments.length?segments.join(\"\"):null;}area.x = function(_){if(!arguments.length)return x1;x0 = x1 = _;return area;};area.x0 = function(_){if(!arguments.length)return x0;x0 = _;return area;};area.x1 = function(_){if(!arguments.length)return x1;x1 = _;return area;};area.y = function(_){if(!arguments.length)return y1;y0 = y1 = _;return area;};area.y0 = function(_){if(!arguments.length)return y0;y0 = _;return area;};area.y1 = function(_){if(!arguments.length)return y1;y1 = _;return area;};area.defined = function(_){if(!arguments.length)return defined;defined = _;return area;};area.interpolate = function(_){if(!arguments.length)return interpolateKey;if(typeof _ === \"function\")interpolateKey = interpolate = _;else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;interpolateReverse = interpolate.reverse || interpolate;L = interpolate.closed?\"M\":\"L\";return area;};area.tension = function(_){if(!arguments.length)return tension;tension = _;return area;};return area;}d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;d3.svg.area = function(){return d3_svg_area(d3_identity);};d3.svg.area.radial = function(){var area=d3_svg_area(d3_svg_lineRadial);area.radius = area.x,delete area.x;area.innerRadius = area.x0,delete area.x0;area.outerRadius = area.x1,delete area.x1;area.angle = area.y,delete area.y;area.startAngle = area.y0,delete area.y0;area.endAngle = area.y1,delete area.y1;return area;};d3.svg.chord = function(){var source=d3_source,target=d3_target,radius=d3_svg_chordRadius,startAngle=d3_svg_arcStartAngle,endAngle=d3_svg_arcEndAngle;function chord(d,i){var s=subgroup(this,source,d,i),t=subgroup(this,target,d,i);return \"M\" + s.p0 + arc(s.r,s.p1,s.a1 - s.a0) + (equals(s,t)?curve(s.r,s.p1,s.r,s.p0):curve(s.r,s.p1,t.r,t.p0) + arc(t.r,t.p1,t.a1 - t.a0) + curve(t.r,t.p1,s.r,s.p0)) + \"Z\";}function subgroup(self,f,d,i){var subgroup=f.call(self,d,i),r=radius.call(self,subgroup,i),a0=startAngle.call(self,subgroup,i) - halfπ,a1=endAngle.call(self,subgroup,i) - halfπ;return {r:r,a0:a0,a1:a1,p0:[r * Math.cos(a0),r * Math.sin(a0)],p1:[r * Math.cos(a1),r * Math.sin(a1)]};}function equals(a,b){return a.a0 == b.a0 && a.a1 == b.a1;}function arc(r,p,a){return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;}function curve(r0,p0,r1,p1){return \"Q 0,0 \" + p1;}chord.radius = function(v){if(!arguments.length)return radius;radius = d3_functor(v);return chord;};chord.source = function(v){if(!arguments.length)return source;source = d3_functor(v);return chord;};chord.target = function(v){if(!arguments.length)return target;target = d3_functor(v);return chord;};chord.startAngle = function(v){if(!arguments.length)return startAngle;startAngle = d3_functor(v);return chord;};chord.endAngle = function(v){if(!arguments.length)return endAngle;endAngle = d3_functor(v);return chord;};return chord;};function d3_svg_chordRadius(d){return d.radius;}d3.svg.diagonal = function(){var source=d3_source,target=d3_target,projection=d3_svg_diagonalProjection;function diagonal(d,i){var p0=source.call(this,d,i),p3=target.call(this,d,i),m=(p0.y + p3.y) / 2,p=[p0,{x:p0.x,y:m},{x:p3.x,y:m},p3];p = p.map(projection);return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];}diagonal.source = function(x){if(!arguments.length)return source;source = d3_functor(x);return diagonal;};diagonal.target = function(x){if(!arguments.length)return target;target = d3_functor(x);return diagonal;};diagonal.projection = function(x){if(!arguments.length)return projection;projection = x;return diagonal;};return diagonal;};function d3_svg_diagonalProjection(d){return [d.x,d.y];}d3.svg.diagonal.radial = function(){var diagonal=d3.svg.diagonal(),projection=d3_svg_diagonalProjection,projection_=diagonal.projection;diagonal.projection = function(x){return arguments.length?projection_(d3_svg_diagonalRadialProjection(projection = x)):projection;};return diagonal;};function d3_svg_diagonalRadialProjection(projection){return function(){var d=projection.apply(this,arguments),r=d[0],a=d[1] - halfπ;return [r * Math.cos(a),r * Math.sin(a)];};}d3.svg.symbol = function(){var type=d3_svg_symbolType,size=d3_svg_symbolSize;function symbol(d,i){return (d3_svg_symbols.get(type.call(this,d,i)) || d3_svg_symbolCircle)(size.call(this,d,i));}symbol.type = function(x){if(!arguments.length)return type;type = d3_functor(x);return symbol;};symbol.size = function(x){if(!arguments.length)return size;size = d3_functor(x);return symbol;};return symbol;};function d3_svg_symbolSize(){return 64;}function d3_svg_symbolType(){return \"circle\";}function d3_svg_symbolCircle(size){var r=Math.sqrt(size / π);return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";}var d3_svg_symbols=d3.map({circle:d3_svg_symbolCircle,cross:function cross(size){var r=Math.sqrt(size / 5) / 2;return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";},diamond:function diamond(size){var ry=Math.sqrt(size / (2 * d3_svg_symbolTan30)),rx=ry * d3_svg_symbolTan30;return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";},square:function square(size){var r=Math.sqrt(size) / 2;return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";},\"triangle-down\":function triangleDown(size){var rx=Math.sqrt(size / d3_svg_symbolSqrt3),ry=rx * d3_svg_symbolSqrt3 / 2;return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";},\"triangle-up\":function triangleUp(size){var rx=Math.sqrt(size / d3_svg_symbolSqrt3),ry=rx * d3_svg_symbolSqrt3 / 2;return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";}});d3.svg.symbolTypes = d3_svg_symbols.keys();var d3_svg_symbolSqrt3=Math.sqrt(3),d3_svg_symbolTan30=Math.tan(30 * d3_radians);d3_selectionPrototype.transition = function(name){var id=d3_transitionInheritId || ++d3_transitionId,ns=d3_transitionNamespace(name),subgroups=[],subgroup,node,transition=d3_transitionInherit || {time:Date.now(),ease:d3_ease_cubicInOut,delay:0,duration:250};for(var j=-1,m=this.length;++j < m;) {subgroups.push(subgroup = []);for(var group=this[j],i=-1,n=group.length;++i < n;) {if(node = group[i])d3_transitionNode(node,i,ns,id,transition);subgroup.push(node);}}return d3_transition(subgroups,ns,id);};d3_selectionPrototype.interrupt = function(name){return this.each(name == null?d3_selection_interrupt:d3_selection_interruptNS(d3_transitionNamespace(name)));};var d3_selection_interrupt=d3_selection_interruptNS(d3_transitionNamespace());function d3_selection_interruptNS(ns){return function(){var lock,activeId,active;if((lock = this[ns]) && (active = lock[activeId = lock.active])){active.timer.c = null;active.timer.t = NaN;if(--lock.count)delete lock[activeId];else delete this[ns];lock.active += .5;active.event && active.event.interrupt.call(this,this.__data__,active.index);}};}function d3_transition(groups,ns,id){d3_subclass(groups,d3_transitionPrototype);groups.namespace = ns;groups.id = id;return groups;}var d3_transitionPrototype=[],d3_transitionId=0,d3_transitionInheritId,d3_transitionInherit;d3_transitionPrototype.call = d3_selectionPrototype.call;d3_transitionPrototype.empty = d3_selectionPrototype.empty;d3_transitionPrototype.node = d3_selectionPrototype.node;d3_transitionPrototype.size = d3_selectionPrototype.size;d3.transition = function(selection,name){return selection && selection.transition?d3_transitionInheritId?selection.transition(name):selection:d3.selection().transition(selection);};d3.transition.prototype = d3_transitionPrototype;d3_transitionPrototype.select = function(selector){var id=this.id,ns=this.namespace,subgroups=[],subgroup,subnode,node;selector = d3_selection_selector(selector);for(var j=-1,m=this.length;++j < m;) {subgroups.push(subgroup = []);for(var group=this[j],i=-1,n=group.length;++i < n;) {if((node = group[i]) && (subnode = selector.call(node,node.__data__,i,j))){if(\"__data__\" in node)subnode.__data__ = node.__data__;d3_transitionNode(subnode,i,ns,id,node[ns][id]);subgroup.push(subnode);}else {subgroup.push(null);}}}return d3_transition(subgroups,ns,id);};d3_transitionPrototype.selectAll = function(selector){var id=this.id,ns=this.namespace,subgroups=[],subgroup,subnodes,node,subnode,transition;selector = d3_selection_selectorAll(selector);for(var j=-1,m=this.length;++j < m;) {for(var group=this[j],i=-1,n=group.length;++i < n;) {if(node = group[i]){transition = node[ns][id];subnodes = selector.call(node,node.__data__,i,j);subgroups.push(subgroup = []);for(var k=-1,o=subnodes.length;++k < o;) {if(subnode = subnodes[k])d3_transitionNode(subnode,k,ns,id,transition);subgroup.push(subnode);}}}}return d3_transition(subgroups,ns,id);};d3_transitionPrototype.filter = function(filter){var subgroups=[],subgroup,group,node;if(typeof filter !== \"function\")filter = d3_selection_filter(filter);for(var j=0,m=this.length;j < m;j++) {subgroups.push(subgroup = []);for(var group=this[j],i=0,n=group.length;i < n;i++) {if((node = group[i]) && filter.call(node,node.__data__,i,j)){subgroup.push(node);}}}return d3_transition(subgroups,this.namespace,this.id);};d3_transitionPrototype.tween = function(name,tween){var id=this.id,ns=this.namespace;if(arguments.length < 2)return this.node()[ns][id].tween.get(name);return d3_selection_each(this,tween == null?function(node){node[ns][id].tween.remove(name);}:function(node){node[ns][id].tween.set(name,tween);});};function d3_transition_tween(groups,name,value,tween){var id=groups.id,ns=groups.namespace;return d3_selection_each(groups,typeof value === \"function\"?function(node,i,j){node[ns][id].tween.set(name,tween(value.call(node,node.__data__,i,j)));}:(value = tween(value),function(node){node[ns][id].tween.set(name,value);}));}d3_transitionPrototype.attr = function(nameNS,value){if(arguments.length < 2){for(value in nameNS) this.attr(value,nameNS[value]);return this;}var interpolate=nameNS == \"transform\"?d3_interpolateTransform:d3_interpolate,name=d3.ns.qualify(nameNS);function attrNull(){this.removeAttribute(name);}function attrNullNS(){this.removeAttributeNS(name.space,name.local);}function attrTween(b){return b == null?attrNull:(b += \"\",function(){var a=this.getAttribute(name),i;return a !== b && (i = interpolate(a,b),function(t){this.setAttribute(name,i(t));});});}function attrTweenNS(b){return b == null?attrNullNS:(b += \"\",function(){var a=this.getAttributeNS(name.space,name.local),i;return a !== b && (i = interpolate(a,b),function(t){this.setAttributeNS(name.space,name.local,i(t));});});}return d3_transition_tween(this,\"attr.\" + nameNS,value,name.local?attrTweenNS:attrTween);};d3_transitionPrototype.attrTween = function(nameNS,tween){var name=d3.ns.qualify(nameNS);function attrTween(d,i){var f=tween.call(this,d,i,this.getAttribute(name));return f && function(t){this.setAttribute(name,f(t));};}function attrTweenNS(d,i){var f=tween.call(this,d,i,this.getAttributeNS(name.space,name.local));return f && function(t){this.setAttributeNS(name.space,name.local,f(t));};}return this.tween(\"attr.\" + nameNS,name.local?attrTweenNS:attrTween);};d3_transitionPrototype.style = function(name,value,priority){var n=arguments.length;if(n < 3){if(typeof name !== \"string\"){if(n < 2)value = \"\";for(priority in name) this.style(priority,name[priority],value);return this;}priority = \"\";}function styleNull(){this.style.removeProperty(name);}function styleString(b){return b == null?styleNull:(b += \"\",function(){var a=d3_window(this).getComputedStyle(this,null).getPropertyValue(name),i;return a !== b && (i = d3_interpolate(a,b),function(t){this.style.setProperty(name,i(t),priority);});});}return d3_transition_tween(this,\"style.\" + name,value,styleString);};d3_transitionPrototype.styleTween = function(name,tween,priority){if(arguments.length < 3)priority = \"\";function styleTween(d,i){var f=tween.call(this,d,i,d3_window(this).getComputedStyle(this,null).getPropertyValue(name));return f && function(t){this.style.setProperty(name,f(t),priority);};}return this.tween(\"style.\" + name,styleTween);};d3_transitionPrototype.text = function(value){return d3_transition_tween(this,\"text\",value,d3_transition_text);};function d3_transition_text(b){if(b == null)b = \"\";return function(){this.textContent = b;};}d3_transitionPrototype.remove = function(){var ns=this.namespace;return this.each(\"end.transition\",function(){var p;if(this[ns].count < 2 && (p = this.parentNode))p.removeChild(this);});};d3_transitionPrototype.ease = function(value){var id=this.id,ns=this.namespace;if(arguments.length < 1)return this.node()[ns][id].ease;if(typeof value !== \"function\")value = d3.ease.apply(d3,arguments);return d3_selection_each(this,function(node){node[ns][id].ease = value;});};d3_transitionPrototype.delay = function(value){var id=this.id,ns=this.namespace;if(arguments.length < 1)return this.node()[ns][id].delay;return d3_selection_each(this,typeof value === \"function\"?function(node,i,j){node[ns][id].delay = +value.call(node,node.__data__,i,j);}:(value = +value,function(node){node[ns][id].delay = value;}));};d3_transitionPrototype.duration = function(value){var id=this.id,ns=this.namespace;if(arguments.length < 1)return this.node()[ns][id].duration;return d3_selection_each(this,typeof value === \"function\"?function(node,i,j){node[ns][id].duration = Math.max(1,value.call(node,node.__data__,i,j));}:(value = Math.max(1,value),function(node){node[ns][id].duration = value;}));};d3_transitionPrototype.each = function(type,listener){var id=this.id,ns=this.namespace;if(arguments.length < 2){var inherit=d3_transitionInherit,inheritId=d3_transitionInheritId;try{d3_transitionInheritId = id;d3_selection_each(this,function(node,i,j){d3_transitionInherit = node[ns][id];type.call(node,node.__data__,i,j);});}finally {d3_transitionInherit = inherit;d3_transitionInheritId = inheritId;}}else {d3_selection_each(this,function(node){var transition=node[ns][id];(transition.event || (transition.event = d3.dispatch(\"start\",\"end\",\"interrupt\"))).on(type,listener);});}return this;};d3_transitionPrototype.transition = function(){var id0=this.id,id1=++d3_transitionId,ns=this.namespace,subgroups=[],subgroup,group,node,transition;for(var j=0,m=this.length;j < m;j++) {subgroups.push(subgroup = []);for(var group=this[j],i=0,n=group.length;i < n;i++) {if(node = group[i]){transition = node[ns][id0];d3_transitionNode(node,i,ns,id1,{time:transition.time,ease:transition.ease,delay:transition.delay + transition.duration,duration:transition.duration});}subgroup.push(node);}}return d3_transition(subgroups,ns,id1);};function d3_transitionNamespace(name){return name == null?\"__transition__\":\"__transition_\" + name + \"__\";}function d3_transitionNode(node,i,ns,id,inherit){var lock=node[ns] || (node[ns] = {active:0,count:0}),transition=lock[id];if(!transition){var schedule=function schedule(elapsed){var delay=transition.delay,duration,ease,tweened=[];timer.t = delay + time;if(delay <= elapsed)return start(elapsed - delay);timer.c = start;function start(elapsed){var activeId=lock.active,active=lock[activeId];if(active){active.timer.c = null;active.timer.t = NaN;--lock.count;delete lock[activeId];active.event && active.event.interrupt.call(node,node.__data__,active.index);}for(var cancelId in lock) {if(+cancelId < id){var cancel=lock[cancelId];cancel.timer.c = null;cancel.timer.t = NaN;--lock.count;delete lock[cancelId];}}lock.active = id;transition.event && transition.event.start.call(node,node.__data__,i);transition.tween.forEach(function(key,value){if(value = value.call(node,node.__data__,i)){tweened.push(value);}});ease = transition.ease;duration = transition.duration;timer.c = tick;d3_timer(function(){if(timer.c && tick(elapsed || 1)){timer.c = null;timer.t = NaN;}return 1;},0,time);}function tick(elapsed){var t=elapsed / duration,e=ease(t),n=tweened.length;while(n > 0) {tweened[--n].call(node,e);}if(t >= 1){transition.event && transition.event.end.call(node,node.__data__,i);if(--lock.count)delete lock[id];else delete node[ns];return 1;}}};var time=inherit.time,timer=d3_timer(schedule,0,time);transition = lock[id] = {tween:new d3_Map(),time:time,timer:timer,delay:inherit.delay,duration:inherit.duration,ease:inherit.ease,index:i};inherit = null;++lock.count;}}d3.svg.axis = function(){var scale=d3.scale.linear(),orient=d3_svg_axisDefaultOrient,innerTickSize=6,outerTickSize=6,tickPadding=3,tickArguments_=[10],tickValues=null,tickFormat_;function axis(g){g.each(function(){var g=d3.select(this);var scale0=this.__chart__ || scale,scale1=this.__chart__ = scale.copy();var ticks=tickValues == null?scale1.ticks?scale1.ticks.apply(scale1,tickArguments_):scale1.domain():tickValues,tickFormat=tickFormat_ == null?scale1.tickFormat?scale1.tickFormat.apply(scale1,tickArguments_):d3_identity:tickFormat_,tick=g.selectAll(\".tick\").data(ticks,scale1),tickEnter=tick.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",ε),tickExit=d3.transition(tick.exit()).style(\"opacity\",ε).remove(),tickUpdate=d3.transition(tick.order()).style(\"opacity\",1),tickSpacing=Math.max(innerTickSize,0) + tickPadding,tickTransform;var range=d3_scaleRange(scale1),path=g.selectAll(\".domain\").data([0]),pathUpdate=(path.enter().append(\"path\").attr(\"class\",\"domain\"),d3.transition(path));tickEnter.append(\"line\");tickEnter.append(\"text\");var lineEnter=tickEnter.select(\"line\"),lineUpdate=tickUpdate.select(\"line\"),text=tick.select(\"text\").text(tickFormat),textEnter=tickEnter.select(\"text\"),textUpdate=tickUpdate.select(\"text\"),sign=orient === \"top\" || orient === \"left\"?-1:1,x1,x2,y1,y2;if(orient === \"bottom\" || orient === \"top\"){tickTransform = d3_svg_axisX,x1 = \"x\",y1 = \"y\",x2 = \"x2\",y2 = \"y2\";text.attr(\"dy\",sign < 0?\"0em\":\".71em\").style(\"text-anchor\",\"middle\");pathUpdate.attr(\"d\",\"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);}else {tickTransform = d3_svg_axisY,x1 = \"y\",y1 = \"x\",x2 = \"y2\",y2 = \"x2\";text.attr(\"dy\",\".32em\").style(\"text-anchor\",sign < 0?\"end\":\"start\");pathUpdate.attr(\"d\",\"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);}lineEnter.attr(y2,sign * innerTickSize);textEnter.attr(y1,sign * tickSpacing);lineUpdate.attr(x2,0).attr(y2,sign * innerTickSize);textUpdate.attr(x1,0).attr(y1,sign * tickSpacing);if(scale1.rangeBand){var x=scale1,dx=x.rangeBand() / 2;scale0 = scale1 = function(d){return x(d) + dx;};}else if(scale0.rangeBand){scale0 = scale1;}else {tickExit.call(tickTransform,scale1,scale0);}tickEnter.call(tickTransform,scale0,scale1);tickUpdate.call(tickTransform,scale1,scale1);});}axis.scale = function(x){if(!arguments.length)return scale;scale = x;return axis;};axis.orient = function(x){if(!arguments.length)return orient;orient = x in d3_svg_axisOrients?x + \"\":d3_svg_axisDefaultOrient;return axis;};axis.ticks = function(){if(!arguments.length)return tickArguments_;tickArguments_ = d3_array(arguments);return axis;};axis.tickValues = function(x){if(!arguments.length)return tickValues;tickValues = x;return axis;};axis.tickFormat = function(x){if(!arguments.length)return tickFormat_;tickFormat_ = x;return axis;};axis.tickSize = function(x){var n=arguments.length;if(!n)return innerTickSize;innerTickSize = +x;outerTickSize = +arguments[n - 1];return axis;};axis.innerTickSize = function(x){if(!arguments.length)return innerTickSize;innerTickSize = +x;return axis;};axis.outerTickSize = function(x){if(!arguments.length)return outerTickSize;outerTickSize = +x;return axis;};axis.tickPadding = function(x){if(!arguments.length)return tickPadding;tickPadding = +x;return axis;};axis.tickSubdivide = function(){return arguments.length && axis;};return axis;};var d3_svg_axisDefaultOrient=\"bottom\",d3_svg_axisOrients={top:1,right:1,bottom:1,left:1};function d3_svg_axisX(selection,x0,x1){selection.attr(\"transform\",function(d){var v0=x0(d);return \"translate(\" + (isFinite(v0)?v0:x1(d)) + \",0)\";});}function d3_svg_axisY(selection,y0,y1){selection.attr(\"transform\",function(d){var v0=y0(d);return \"translate(0,\" + (isFinite(v0)?v0:y1(d)) + \")\";});}d3.svg.brush = function(){var event=d3_eventDispatch(brush,\"brushstart\",\"brush\",\"brushend\"),x=null,y=null,xExtent=[0,0],yExtent=[0,0],xExtentDomain,yExtentDomain,xClamp=true,yClamp=true,resizes=d3_svg_brushResizes[0];function brush(g){g.each(function(){var g=d3.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",brushstart).on(\"touchstart.brush\",brushstart);var background=g.selectAll(\".background\").data([0]);background.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\");g.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var resize=g.selectAll(\".resize\").data(resizes,d3_identity);resize.exit().remove();resize.enter().append(\"g\").attr(\"class\",function(d){return \"resize \" + d;}).style(\"cursor\",function(d){return d3_svg_brushCursor[d];}).append(\"rect\").attr(\"x\",function(d){return (/[ew]$/.test(d)?-3:null);}).attr(\"y\",function(d){return (/^[ns]/.test(d)?-3:null);}).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\");resize.style(\"display\",brush.empty()?\"none\":null);var gUpdate=d3.transition(g),backgroundUpdate=d3.transition(background),range;if(x){range = d3_scaleRange(x);backgroundUpdate.attr(\"x\",range[0]).attr(\"width\",range[1] - range[0]);redrawX(gUpdate);}if(y){range = d3_scaleRange(y);backgroundUpdate.attr(\"y\",range[0]).attr(\"height\",range[1] - range[0]);redrawY(gUpdate);}redraw(gUpdate);});}brush.event = function(g){g.each(function(){var event_=event.of(this,arguments),extent1={x:xExtent,y:yExtent,i:xExtentDomain,j:yExtentDomain},extent0=this.__chart__ || extent1;this.__chart__ = extent1;if(d3_transitionInheritId){d3.select(this).transition().each(\"start.brush\",function(){xExtentDomain = extent0.i;yExtentDomain = extent0.j;xExtent = extent0.x;yExtent = extent0.y;event_({type:\"brushstart\"});}).tween(\"brush:brush\",function(){var xi=d3_interpolateArray(xExtent,extent1.x),yi=d3_interpolateArray(yExtent,extent1.y);xExtentDomain = yExtentDomain = null;return function(t){xExtent = extent1.x = xi(t);yExtent = extent1.y = yi(t);event_({type:\"brush\",mode:\"resize\"});};}).each(\"end.brush\",function(){xExtentDomain = extent1.i;yExtentDomain = extent1.j;event_({type:\"brush\",mode:\"resize\"});event_({type:\"brushend\"});});}else {event_({type:\"brushstart\"});event_({type:\"brush\",mode:\"resize\"});event_({type:\"brushend\"});}});};function redraw(g){g.selectAll(\".resize\").attr(\"transform\",function(d){return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";});}function redrawX(g){g.select(\".extent\").attr(\"x\",xExtent[0]);g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\",xExtent[1] - xExtent[0]);}function redrawY(g){g.select(\".extent\").attr(\"y\",yExtent[0]);g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\",yExtent[1] - yExtent[0]);}function brushstart(){var target=this,eventTarget=d3.select(d3.event.target),event_=event.of(target,arguments),g=d3.select(target),resizing=eventTarget.datum(),resizingX=!/^(n|s)$/.test(resizing) && x,resizingY=!/^(e|w)$/.test(resizing) && y,dragging=eventTarget.classed(\"extent\"),dragRestore=d3_event_dragSuppress(target),center,origin=d3.mouse(target),offset;var w=d3.select(d3_window(target)).on(\"keydown.brush\",keydown).on(\"keyup.brush\",keyup);if(d3.event.changedTouches){w.on(\"touchmove.brush\",brushmove).on(\"touchend.brush\",brushend);}else {w.on(\"mousemove.brush\",brushmove).on(\"mouseup.brush\",brushend);}g.interrupt().selectAll(\"*\").interrupt();if(dragging){origin[0] = xExtent[0] - origin[0];origin[1] = yExtent[0] - origin[1];}else if(resizing){var ex=+/w$/.test(resizing),ey=+/^n/.test(resizing);offset = [xExtent[1 - ex] - origin[0],yExtent[1 - ey] - origin[1]];origin[0] = xExtent[ex];origin[1] = yExtent[ey];}else if(d3.event.altKey)center = origin.slice();g.style(\"pointer-events\",\"none\").selectAll(\".resize\").style(\"display\",null);d3.select(\"body\").style(\"cursor\",eventTarget.style(\"cursor\"));event_({type:\"brushstart\"});brushmove();function keydown(){if(d3.event.keyCode == 32){if(!dragging){center = null;origin[0] -= xExtent[1];origin[1] -= yExtent[1];dragging = 2;}d3_eventPreventDefault();}}function keyup(){if(d3.event.keyCode == 32 && dragging == 2){origin[0] += xExtent[1];origin[1] += yExtent[1];dragging = 0;d3_eventPreventDefault();}}function brushmove(){var point=d3.mouse(target),moved=false;if(offset){point[0] += offset[0];point[1] += offset[1];}if(!dragging){if(d3.event.altKey){if(!center)center = [(xExtent[0] + xExtent[1]) / 2,(yExtent[0] + yExtent[1]) / 2];origin[0] = xExtent[+(point[0] < center[0])];origin[1] = yExtent[+(point[1] < center[1])];}else center = null;}if(resizingX && move1(point,x,0)){redrawX(g);moved = true;}if(resizingY && move1(point,y,1)){redrawY(g);moved = true;}if(moved){redraw(g);event_({type:\"brush\",mode:dragging?\"move\":\"resize\"});}}function move1(point,scale,i){var range=d3_scaleRange(scale),r0=range[0],r1=range[1],position=origin[i],extent=i?yExtent:xExtent,size=extent[1] - extent[0],min,max;if(dragging){r0 -= position;r1 -= size + position;}min = (i?yClamp:xClamp)?Math.max(r0,Math.min(r1,point[i])):point[i];if(dragging){max = (min += position) + size;}else {if(center)position = Math.max(r0,Math.min(r1,2 * center[i] - min));if(position < min){max = min;min = position;}else {max = position;}}if(extent[0] != min || extent[1] != max){if(i)yExtentDomain = null;else xExtentDomain = null;extent[0] = min;extent[1] = max;return true;}}function brushend(){brushmove();g.style(\"pointer-events\",\"all\").selectAll(\".resize\").style(\"display\",brush.empty()?\"none\":null);d3.select(\"body\").style(\"cursor\",null);w.on(\"mousemove.brush\",null).on(\"mouseup.brush\",null).on(\"touchmove.brush\",null).on(\"touchend.brush\",null).on(\"keydown.brush\",null).on(\"keyup.brush\",null);dragRestore();event_({type:\"brushend\"});}}brush.x = function(z){if(!arguments.length)return x;x = z;resizes = d3_svg_brushResizes[!x << 1 | !y];return brush;};brush.y = function(z){if(!arguments.length)return y;y = z;resizes = d3_svg_brushResizes[!x << 1 | !y];return brush;};brush.clamp = function(z){if(!arguments.length)return x && y?[xClamp,yClamp]:x?xClamp:y?yClamp:null;if(x && y)xClamp = !!z[0],yClamp = !!z[1];else if(x)xClamp = !!z;else if(y)yClamp = !!z;return brush;};brush.extent = function(z){var x0,x1,y0,y1,t;if(!arguments.length){if(x){if(xExtentDomain){x0 = xExtentDomain[0],x1 = xExtentDomain[1];}else {x0 = xExtent[0],x1 = xExtent[1];if(x.invert)x0 = x.invert(x0),x1 = x.invert(x1);if(x1 < x0)t = x0,x0 = x1,x1 = t;}}if(y){if(yExtentDomain){y0 = yExtentDomain[0],y1 = yExtentDomain[1];}else {y0 = yExtent[0],y1 = yExtent[1];if(y.invert)y0 = y.invert(y0),y1 = y.invert(y1);if(y1 < y0)t = y0,y0 = y1,y1 = t;}}return x && y?[[x0,y0],[x1,y1]]:x?[x0,x1]:y && [y0,y1];}if(x){x0 = z[0],x1 = z[1];if(y)x0 = x0[0],x1 = x1[0];xExtentDomain = [x0,x1];if(x.invert)x0 = x(x0),x1 = x(x1);if(x1 < x0)t = x0,x0 = x1,x1 = t;if(x0 != xExtent[0] || x1 != xExtent[1])xExtent = [x0,x1];}if(y){y0 = z[0],y1 = z[1];if(x)y0 = y0[1],y1 = y1[1];yExtentDomain = [y0,y1];if(y.invert)y0 = y(y0),y1 = y(y1);if(y1 < y0)t = y0,y0 = y1,y1 = t;if(y0 != yExtent[0] || y1 != yExtent[1])yExtent = [y0,y1];}return brush;};brush.clear = function(){if(!brush.empty()){xExtent = [0,0],yExtent = [0,0];xExtentDomain = yExtentDomain = null;}return brush;};brush.empty = function(){return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];};return d3.rebind(brush,event,\"on\");};var d3_svg_brushCursor={n:\"ns-resize\",e:\"ew-resize\",s:\"ns-resize\",w:\"ew-resize\",nw:\"nwse-resize\",ne:\"nesw-resize\",se:\"nwse-resize\",sw:\"nesw-resize\"};var d3_svg_brushResizes=[[\"n\",\"e\",\"s\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],[\"e\",\"w\"],[\"n\",\"s\"],[]];var d3_time_format=d3_time.format = d3_locale_enUS.timeFormat;var d3_time_formatUtc=d3_time_format.utc;var d3_time_formatIso=d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\")?d3_time_formatIsoNative:d3_time_formatIso;function d3_time_formatIsoNative(date){return date.toISOString();}d3_time_formatIsoNative.parse = function(string){var date=new Date(string);return isNaN(date)?null:date;};d3_time_formatIsoNative.toString = d3_time_formatIso.toString;d3_time.second = d3_time_interval(function(date){return new d3_date(Math.floor(date / 1e3) * 1e3);},function(date,offset){date.setTime(date.getTime() + Math.floor(offset) * 1e3);},function(date){return date.getSeconds();});d3_time.seconds = d3_time.second.range;d3_time.seconds.utc = d3_time.second.utc.range;d3_time.minute = d3_time_interval(function(date){return new d3_date(Math.floor(date / 6e4) * 6e4);},function(date,offset){date.setTime(date.getTime() + Math.floor(offset) * 6e4);},function(date){return date.getMinutes();});d3_time.minutes = d3_time.minute.range;d3_time.minutes.utc = d3_time.minute.utc.range;d3_time.hour = d3_time_interval(function(date){var timezone=date.getTimezoneOffset() / 60;return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);},function(date,offset){date.setTime(date.getTime() + Math.floor(offset) * 36e5);},function(date){return date.getHours();});d3_time.hours = d3_time.hour.range;d3_time.hours.utc = d3_time.hour.utc.range;d3_time.month = d3_time_interval(function(date){date = d3_time.day(date);date.setDate(1);return date;},function(date,offset){date.setMonth(date.getMonth() + offset);},function(date){return date.getMonth();});d3_time.months = d3_time.month.range;d3_time.months.utc = d3_time.month.utc.range;function d3_time_scale(linear,methods,format){function scale(x){return linear(x);}scale.invert = function(x){return d3_time_scaleDate(linear.invert(x));};scale.domain = function(x){if(!arguments.length)return linear.domain().map(d3_time_scaleDate);linear.domain(x);return scale;};function tickMethod(extent,count){var span=extent[1] - extent[0],target=span / count,i=d3.bisect(d3_time_scaleSteps,target);return i == d3_time_scaleSteps.length?[methods.year,d3_scale_linearTickRange(extent.map(function(d){return d / 31536e6;}),count)[2]]:!i?[d3_time_scaleMilliseconds,d3_scale_linearTickRange(extent,count)[2]]:methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target?i - 1:i];}scale.nice = function(interval,skip){var domain=scale.domain(),extent=d3_scaleExtent(domain),method=interval == null?tickMethod(extent,10):typeof interval === \"number\" && tickMethod(extent,interval);if(method)interval = method[0],skip = method[1];function skipped(date){return !isNaN(date) && !interval.range(date,d3_time_scaleDate(+date + 1),skip).length;}return scale.domain(d3_scale_nice(domain,skip > 1?{floor:function floor(date){while(skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);return date;},ceil:function ceil(date){while(skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);return date;}}:interval));};scale.ticks = function(interval,skip){var extent=d3_scaleExtent(scale.domain()),method=interval == null?tickMethod(extent,10):typeof interval === \"number\"?tickMethod(extent,interval):!interval.range && [{range:interval},skip];if(method)interval = method[0],skip = method[1];return interval.range(extent[0],d3_time_scaleDate(+extent[1] + 1),skip < 1?1:skip);};scale.tickFormat = function(){return format;};scale.copy = function(){return d3_time_scale(linear.copy(),methods,format);};return d3_scale_linearRebind(scale,linear);}function d3_time_scaleDate(t){return new Date(t);}var d3_time_scaleSteps=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6];var d3_time_scaleLocalMethods=[[d3_time.second,1],[d3_time.second,5],[d3_time.second,15],[d3_time.second,30],[d3_time.minute,1],[d3_time.minute,5],[d3_time.minute,15],[d3_time.minute,30],[d3_time.hour,1],[d3_time.hour,3],[d3_time.hour,6],[d3_time.hour,12],[d3_time.day,1],[d3_time.day,2],[d3_time.week,1],[d3_time.month,1],[d3_time.month,3],[d3_time.year,1]];var d3_time_scaleLocalFormat=d3_time_format.multi([[\".%L\",function(d){return d.getMilliseconds();}],[\":%S\",function(d){return d.getSeconds();}],[\"%I:%M\",function(d){return d.getMinutes();}],[\"%I %p\",function(d){return d.getHours();}],[\"%a %d\",function(d){return d.getDay() && d.getDate() != 1;}],[\"%b %d\",function(d){return d.getDate() != 1;}],[\"%B\",function(d){return d.getMonth();}],[\"%Y\",d3_true]]);var d3_time_scaleMilliseconds={range:function range(start,stop,step){return d3.range(Math.ceil(start / step) * step,+stop,step).map(d3_time_scaleDate);},floor:d3_identity,ceil:d3_identity};d3_time_scaleLocalMethods.year = d3_time.year;d3_time.scale = function(){return d3_time_scale(d3.scale.linear(),d3_time_scaleLocalMethods,d3_time_scaleLocalFormat);};var d3_time_scaleUtcMethods=d3_time_scaleLocalMethods.map(function(m){return [m[0].utc,m[1]];});var d3_time_scaleUtcFormat=d3_time_formatUtc.multi([[\".%L\",function(d){return d.getUTCMilliseconds();}],[\":%S\",function(d){return d.getUTCSeconds();}],[\"%I:%M\",function(d){return d.getUTCMinutes();}],[\"%I %p\",function(d){return d.getUTCHours();}],[\"%a %d\",function(d){return d.getUTCDay() && d.getUTCDate() != 1;}],[\"%b %d\",function(d){return d.getUTCDate() != 1;}],[\"%B\",function(d){return d.getUTCMonth();}],[\"%Y\",d3_true]]);d3_time_scaleUtcMethods.year = d3_time.year.utc;d3_time.scale.utc = function(){return d3_time_scale(d3.scale.linear(),d3_time_scaleUtcMethods,d3_time_scaleUtcFormat);};d3.text = d3_xhrType(function(request){return request.responseText;});d3.json = function(url,callback){return d3_xhr(url,\"application/json\",d3_json,callback);};function d3_json(request){return JSON.parse(request.responseText);}d3.html = function(url,callback){return d3_xhr(url,\"text/html\",d3_html,callback);};function d3_html(request){var range=d3_document.createRange();range.selectNode(d3_document.body);return range.createContextualFragment(request.responseText);}d3.xml = d3_xhrType(function(request){return request.responseXML;});if(true)!(__WEBPACK_AMD_DEFINE_FACTORY__ = (this.d3 = d3), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else if(typeof module === \"object\" && module.exports)module.exports = d3;else this.d3 = d3;})();//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2QzL2QzLmpzP2NjMGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0VBQWEsYUFBYSxRQUFRLGlCQUFpQiw0REFBNEQsa0NBQWtDLDhCQUE4QixrQ0FBa0MsOEVBQThFLHlCQUF5QixvSEFBb0gsZ0JBQWdCLElBQUksOERBQThELFVBQVUsMEJBQTBCLHFDQUFxQyw4QkFBOEIsaUJBQWlCLG1DQUFtQyxxQkFBcUIsZ0JBQWdCLElBQUksb0VBQW9FLGNBQWMsa1JBQWtSLHlEQUF5RCxxREFBcUQsa0VBQWtFLDhEQUE4RCwrREFBK0QsNkRBQTZELDRCQUE0QiwyQkFBMkIsc0NBQXNDLDhCQUE4Qix1Q0FBdUMsMkJBQTJCLDRCQUE0QiwyQkFBMkIsb0RBQW9ELE1BQU0sT0FBTyx5REFBeUQsTUFBTSxvRUFBb0UsTUFBTSxPQUFPLHlFQUF5RSxXQUFXLDJCQUEyQiw0QkFBNEIsMkJBQTJCLG9EQUFvRCxNQUFNLE9BQU8seURBQXlELE1BQU0sb0VBQW9FLE1BQU0sT0FBTyx5RUFBeUUsV0FBVyw4QkFBOEIsOEJBQThCLDJCQUEyQixvREFBb0QsVUFBVSxPQUFPLDBDQUEwQyxlQUFlLGlCQUFpQixNQUFNLG9FQUFvRSxVQUFVLE9BQU8sMERBQTBELGVBQWUsaUJBQWlCLGVBQWUsc0JBQXNCLDBCQUEwQix1QkFBdUIsa0JBQWtCLDJCQUEyQiw4QkFBOEIsMkJBQTJCLG9EQUFvRCxNQUFNLG9FQUFvRSxXQUFXLDRCQUE0QixrQ0FBa0MsMkJBQTJCLDZEQUE2RCxVQUFVLE1BQU0sNkVBQTZFLFVBQVUsb0JBQW9CLGlDQUFpQywyRUFBMkUscUNBQXFDLDhCQUE4QixxQ0FBcUMsMkJBQTJCLHVFQUF1RSxNQUFNLHVGQUF1RixzRUFBc0UsZ0NBQWdDLHdDQUF3QywyQkFBMkIsZ0JBQWdCLHdDQUF3QyxVQUFVLGFBQWEsb0JBQW9CLE1BQU0sZ0JBQWdCLHdEQUF3RCxVQUFVLGFBQWEsb0JBQW9CLDhCQUE4QiwwQkFBMEIsd0NBQXdDLDBC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NEgsdVdBQXVXLHNFQUFzRSw0QkFBNEIscUJBQXFCLHVCQUF1Qix1QkFBdUIsdUJBQXVCLHVCQUF1QixxQkFBcUIsdUJBQXVCLHVDQUF1Qyx1QkFBdUIseUJBQXlCLG9CQUFvQixxQkFBcUIsbUJBQW1CLCtCQUErQixzQ0FBc0MsbUZBQW1GLHFDQUFxQyw4Q0FBOEMsMkJBQTJCLDZGQUE2RixzRUFBc0Usd0JBQXdCLEVBQUUsdUVBQXVFLCtCQUErQixxQkFBcUIsMEJBQTBCLHVCQUF1QiwwQkFBMEIsdUJBQXVCLHdCQUF3Qix1QkFBdUIsNkNBQTZDLHVCQUF1Qiw0QkFBNEIsb0JBQW9CLHdCQUF3QixtQkFBbUIsZ0RBQWdELCtCQUErQix5RkFBeUYsdUNBQXVDLDZCQUE2QixFQUFFLGlDQUFpQyx5REFBeUQsMEJBQTBCLHlDQUF5QyxpQ0FBaUMsa0RBQWtELDBCQUEwQixvQ0FBb0MsbUNBQW1DLDZEQUE2RCxzQ0FBc0MsNEJBQTRCLEVBQUUsNFdBQW1FLHlFQUF5RSxtQkFBbUIiLCJmaWxlIjoiMjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7IShmdW5jdGlvbigpe3ZhciBkMz17dmVyc2lvbjpcIjMuNS43XCJ9O3ZhciBkM19hcnJheVNsaWNlPVtdLnNsaWNlLGQzX2FycmF5PWZ1bmN0aW9uIGQzX2FycmF5KGxpc3Qpe3JldHVybiBkM19hcnJheVNsaWNlLmNhbGwobGlzdCk7fTt2YXIgZDNfZG9jdW1lbnQ9dGhpcy5kb2N1bWVudDtmdW5jdGlvbiBkM19kb2N1bWVudEVsZW1lbnQobm9kZSl7cmV0dXJuIG5vZGUgJiYgKG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlLmRvY3VtZW50IHx8IG5vZGUpLmRvY3VtZW50RWxlbWVudDt9ZnVuY3Rpb24gZDNfd2luZG93KG5vZGUpe3JldHVybiBub2RlICYmIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IG5vZGUuZG9jdW1lbnQgJiYgbm9kZSB8fCBub2RlLmRlZmF1bHRWaWV3KTt9aWYoZDNfZG9jdW1lbnQpe3RyeXtkM19hcnJheShkM19kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGU7fWNhdGNoKGUpIHtkM19hcnJheSA9IGZ1bmN0aW9uKGxpc3Qpe3ZhciBpPWxpc3QubGVuZ3RoLGFycmF5PW5ldyBBcnJheShpKTt3aGlsZShpLS0pIGFycmF5W2ldID0gbGlzdFtpXTtyZXR1cm4gYXJyYXk7fTt9fWlmKCFEYXRlLm5vdylEYXRlLm5vdyA9IGZ1bmN0aW9uKCl7cmV0dXJuICtuZXcgRGF0ZSgpO307aWYoZDNfZG9jdW1lbnQpe3RyeXtkM19kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpLnN0eWxlLnNldFByb3BlcnR5KFwib3BhY2l0eVwiLDAsXCJcIik7fWNhdGNoKGVycm9yKSB7dmFyIGQzX2VsZW1lbnRfcHJvdG90eXBlPXRoaXMuRWxlbWVudC5wcm90b3R5cGUsZDNfZWxlbWVudF9zZXRBdHRyaWJ1dGU9ZDNfZWxlbWVudF9wcm90b3R5cGUuc2V0QXR0cmlidXRlLGQzX2VsZW1lbnRfc2V0QXR0cmlidXRlTlM9ZDNfZWxlbWVudF9wcm90b3R5cGUuc2V0QXR0cmlidXRlTlMsZDNfc3R5bGVfcHJvdG90eXBlPXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsZDNfc3R5bGVfc2V0UHJvcGVydHk9ZDNfc3R5bGVfcHJvdG90eXBlLnNldFByb3BlcnR5O2QzX2VsZW1lbnRfcHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsdmFsdWUpe2QzX2VsZW1lbnRfc2V0QXR0cmlidXRlLmNhbGwodGhpcyxuYW1lLHZhbHVlICsgXCJcIik7fTtkM19lbGVtZW50X3Byb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uKHNwYWNlLGxvY2FsLHZhbHVlKXtkM19lbGVtZW50X3NldEF0dHJpYnV0ZU5TLmNhbGwodGhpcyxzcGFjZSxsb2NhbCx2YWx1ZSArIFwiXCIpO307ZDNfc3R5bGVfcHJvdG90eXBlLnNldFByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSx2YWx1ZSxwcmlvcml0eSl7ZDNfc3R5bGVfc2V0UHJvcGVydHkuY2FsbCh0aGlzLG5hbWUsdmFsdWUgKyBcIlwiLHByaW9yaXR5KTt9O319ZDMuYXNjZW5kaW5nID0gZDNfYXNjZW5kaW5nO2Z1bmN0aW9uIGQzX2FzY2VuZGluZyhhLGIpe3JldHVybiBhIDwgYj8tMTphID4gYj8xOmEgPj0gYj8wOk5hTjt9ZDMuZGVzY2VuZGluZyA9IGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIgPCBhPy0xOmIgPiBhPzE6YiA+PSBhPzA6TmFOO307ZDMubWluID0gZnVuY3Rpb24oYXJyYXksZil7dmFyIGk9LTEsbj1hcnJheS5sZW5ndGgsYSxiO2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpe3doaWxlKCsraSA8IG4pIGlmKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBhID4gYilhID0gYjt9ZWxzZSB7d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYSA+IGIpYSA9IGI7fXJldHVybiBhO307ZDMubWF4ID0gZnVuY3Rpb24oYXJyYXksZil7dmFyIGk9LTEsbj1hcnJheS5sZW5ndGgsYSxiO2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpe3doaWxlKCsraSA8IG4pIGlmKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID4gYSlhID0gYjt9ZWxzZSB7d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYiA+PSBiKXthID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwgJiYgYiA+IGEpYSA9IGI7fXJldHVybiBhO307ZDMuZXh0ZW50ID0gZnVuY3Rpb24oYXJyYXksZil7dmFyIGk9LTEsbj1hcnJheS5sZW5ndGgsYSxiLGM7aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID49IGIpe2EgPSBjID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCl7aWYoYSA+IGIpYSA9IGI7aWYoYyA8IGIpYyA9IGI7fX1lbHNlIHt3aGlsZSgrK2kgPCBuKSBpZigoYiA9IGYuY2FsbChhcnJheSxhcnJheVtpXSxpKSkgIT0gbnVsbCAmJiBiID49IGIpe2EgPSBjID0gYjticmVhazt9d2hpbGUoKytpIDwgbikgaWYoKGIgPSBmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpICE9IG51bGwpe2lmKGEgPiBiKWEgPSBiO2lmKGMgPCBiKWMgPSBiO319cmV0dXJuIFthLGNdO307ZnVuY3Rpb24gZDNfbnVtYmVyKHgpe3JldHVybiB4ID09PSBudWxsP05hTjoreDt9ZnVuY3Rpb24gZDNfbnVtZXJpYyh4KXtyZXR1cm4gIWlzTmFOKHgpO31kMy5zdW0gPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgcz0wLG49YXJyYXkubGVuZ3RoLGEsaT0tMTtpZihhcmd1bWVudHMubGVuZ3RoID09PSAxKXt3aGlsZSgrK2kgPCBuKSBpZihkM19udW1lcmljKGEgPSArYXJyYXlbaV0pKXMgKz0gYTt9ZWxzZSB7d2hpbGUoKytpIDwgbikgaWYoZDNfbnVtZXJpYyhhID0gK2YuY2FsbChhcnJheSxhcnJheVtpXSxpKSkpcyArPSBhO31yZXR1cm4gczt9O2QzLm1lYW4gPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgcz0wLG49YXJyYXkubGVuZ3RoLGEsaT0tMSxqPW47aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikgaWYoZDNfbnVtZXJpYyhhID0gZDNfbnVtYmVyKGFycmF5W2ldKSkpcyArPSBhO2Vsc2UgLS1qO31lbHNlIHt3aGlsZSgrK2kgPCBuKSBpZihkM19udW1lcmljKGEgPSBkM19udW1iZXIoZi5jYWxsKGFycmF5LGFycmF5W2ldLGkpKSkpcyArPSBhO2Vsc2UgLS1qO31pZihqKXJldHVybiBzIC8gajt9O2QzLnF1YW50aWxlID0gZnVuY3Rpb24odmFsdWVzLHApe3ZhciBIPSh2YWx1ZXMubGVuZ3RoIC0gMSkgKiBwICsgMSxoPU1hdGguZmxvb3IoSCksdj0rdmFsdWVzW2ggLSAxXSxlPUggLSBoO3JldHVybiBlP3YgKyBlICogKHZhbHVlc1toXSAtIHYpOnY7fTtkMy5tZWRpYW4gPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgbnVtYmVycz1bXSxuPWFycmF5Lmxlbmd0aCxhLGk9LTE7aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikgaWYoZDNfbnVtZXJpYyhhID0gZDNfbnVtYmVyKGFycmF5W2ldKSkpbnVtYmVycy5wdXNoKGEpO31lbHNlIHt3aGlsZSgrK2kgPCBuKSBpZihkM19udW1lcmljKGEgPSBkM19udW1iZXIoZi5jYWxsKGFycmF5LGFycmF5W2ldLGkpKSkpbnVtYmVycy5wdXNoKGEpO31pZihudW1iZXJzLmxlbmd0aClyZXR1cm4gZDMucXVhbnRpbGUobnVtYmVycy5zb3J0KGQzX2FzY2VuZGluZyksLjUpO307ZDMudmFyaWFuY2UgPSBmdW5jdGlvbihhcnJheSxmKXt2YXIgbj1hcnJheS5sZW5ndGgsbT0wLGEsZCxzPTAsaT0tMSxqPTA7aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7d2hpbGUoKytpIDwgbikge2lmKGQzX251bWVyaWMoYSA9IGQzX251bWJlcihhcnJheVtpXSkpKXtkID0gYSAtIG07bSArPSBkIC8gKytqO3MgKz0gZCAqIChhIC0gbSk7fX19ZWxzZSB7d2hpbGUoKytpIDwgbikge2lmKGQzX251bWVyaWMoYSA9IGQzX251bWJlcihmLmNhbGwoYXJyYXksYXJyYXlbaV0saSkpKSl7ZCA9IGEgLSBtO20gKz0gZCAvICsrajtzICs9IGQgKiAoYSAtIG0pO319fWlmKGogPiAxKXJldHVybiBzIC8gKGogLSAxKTt9O2QzLmRldmlhdGlvbiA9IGZ1bmN0aW9uKCl7dmFyIHY9ZDMudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2P01hdGguc3FydCh2KTp2O307ZnVuY3Rpb24gZDNfYmlzZWN0b3IoY29tcGFyZSl7cmV0dXJuIHtsZWZ0OmZ1bmN0aW9uIGxlZnQoYSx4LGxvLGhpKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMylsbyA9IDA7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDQpaGkgPSBhLmxlbmd0aDt3aGlsZShsbyA8IGhpKSB7dmFyIG1pZD1sbyArIGhpID4+PiAxO2lmKGNvbXBhcmUoYVttaWRdLHgpIDwgMClsbyA9IG1pZCArIDE7ZWxzZSBoaSA9IG1pZDt9cmV0dXJuIGxvO30scmlnaHQ6ZnVuY3Rpb24gcmlnaHQoYSx4LGxvLGhpKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMylsbyA9IDA7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDQpaGkgPSBhLmxlbmd0aDt3aGlsZShsbyA8IGhpKSB7dmFyIG1pZD1sbyArIGhpID4+PiAxO2lmKGNvbXBhcmUoYVttaWRdLHgpID4gMCloaSA9IG1pZDtlbHNlIGxvID0gbWlkICsgMTt9cmV0dXJuIGxvO319O312YXIgZDNfYmlzZWN0PWQzX2Jpc2VjdG9yKGQzX2FzY2VuZGluZyk7ZDMuYmlzZWN0TGVmdCA9IGQzX2Jpc2VjdC5sZWZ0O2QzLmJpc2VjdCA9IGQzLmJpc2VjdFJpZ2h0ID0gZDNfYmlzZWN0LnJpZ2h0O2QzLmJpc2VjdG9yID0gZnVuY3Rpb24oZil7cmV0dXJuIGQzX2Jpc2VjdG9yKGYubGVuZ3RoID09PSAxP2Z1bmN0aW9uKGQseCl7cmV0dXJuIGQzX2FzY2VuZGluZyhmKGQpLHgpO306Zik7fTtkMy5zaHVmZmxlID0gZnVuY3Rpb24oYXJyYXksaTAsaTEpe2lmKChtID0gYXJndW1lbnRzLmxlbmd0aCkgPCAzKXtpMSA9IGFycmF5Lmxlbmd0aDtpZihtIDwgMilpMCA9IDA7fXZhciBtPWkxIC0gaTAsdCxpO3doaWxlKG0pIHtpID0gTWF0aC5yYW5kb20oKSAqIG0tLSB8IDA7dCA9IGFycmF5W20gKyBpMF0sYXJyYXlbbSArIGkwXSA9IGFycmF5W2kgKyBpMF0sYXJyYXlbaSArIGkwXSA9IHQ7fXJldHVybiBhcnJheTt9O2QzLnBlcm11dGUgPSBmdW5jdGlvbihhcnJheSxpbmRleGVzKXt2YXIgaT1pbmRleGVzLmxlbmd0aCxwZXJtdXRlcz1uZXcgQXJyYXkoaSk7d2hpbGUoaS0tKSBwZXJtdXRlc1tpXSA9IGFycmF5W2luZGV4ZXNbaV1dO3JldHVybiBwZXJtdXRlczt9O2QzLnBhaXJzID0gZnVuY3Rpb24oYXJyYXkpe3ZhciBpPTAsbj1hcnJheS5sZW5ndGggLSAxLHAwLHAxPWFycmF5WzBdLHBhaXJzPW5ldyBBcnJheShuIDwgMD8wOm4pO3doaWxlKGkgPCBuKSBwYWlyc1tpXSA9IFtwMCA9IHAxLHAxID0gYXJyYXlbKytpXV07cmV0dXJuIHBhaXJzO307ZDMuemlwID0gZnVuY3Rpb24oKXtpZighKG4gPSBhcmd1bWVudHMubGVuZ3RoKSlyZXR1cm4gW107Zm9yKHZhciBpPS0xLG09ZDMubWluKGFyZ3VtZW50cyxkM196aXBMZW5ndGgpLHppcHM9bmV3IEFycmF5KG0pOysraSA8IG07KSB7Zm9yKHZhciBqPS0xLG4semlwPXppcHNbaV0gPSBuZXcgQXJyYXkobik7KytqIDwgbjspIHt6aXBbal0gPSBhcmd1bWVudHNbal1baV07fX1yZXR1cm4gemlwczt9O2Z1bmN0aW9uIGQzX3ppcExlbmd0aChkKXtyZXR1cm4gZC5sZW5ndGg7fWQzLnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG1hdHJpeCl7cmV0dXJuIGQzLnppcC5hcHBseShkMyxtYXRyaXgpO307ZDMua2V5cyA9IGZ1bmN0aW9uKG1hcCl7dmFyIGtleXM9W107Zm9yKHZhciBrZXkgaW4gbWFwKSBrZXlzLnB1c2goa2V5KTtyZXR1cm4ga2V5czt9O2QzLnZhbHVlcyA9IGZ1bmN0aW9uKG1hcCl7dmFyIHZhbHVlcz1bXTtmb3IodmFyIGtleSBpbiBtYXApIHZhbHVlcy5wdXNoKG1hcFtrZXldKTtyZXR1cm4gdmFsdWVzO307ZDMuZW50cmllcyA9IGZ1bmN0aW9uKG1hcCl7dmFyIGVudHJpZXM9W107Zm9yKHZhciBrZXkgaW4gbWFwKSBlbnRyaWVzLnB1c2goe2tleTprZXksdmFsdWU6bWFwW2tleV19KTtyZXR1cm4gZW50cmllczt9O2QzLm1lcmdlID0gZnVuY3Rpb24oYXJyYXlzKXt2YXIgbj1hcnJheXMubGVuZ3RoLG0saT0tMSxqPTAsbWVyZ2VkLGFycmF5O3doaWxlKCsraSA8IG4pIGogKz0gYXJyYXlzW2ldLmxlbmd0aDttZXJnZWQgPSBuZXcgQXJyYXkoaik7d2hpbGUoLS1uID49IDApIHthcnJheSA9IGFycmF5c1tuXTttID0gYXJyYXkubGVuZ3RoO3doaWxlKC0tbSA+PSAwKSB7bWVyZ2VkWy0tal0gPSBhcnJheVttXTt9fXJldHVybiBtZXJnZWQ7fTt2YXIgYWJzPU1hdGguYWJzO2QzLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsc3RvcCxzdGVwKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMyl7c3RlcCA9IDE7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpe3N0b3AgPSBzdGFydDtzdGFydCA9IDA7fX1pZigoc3RvcCAtIHN0YXJ0KSAvIHN0ZXAgPT09IEluZmluaXR5KXRocm93IG5ldyBFcnJvcihcImluZmluaXRlIHJhbmdlXCIpO3ZhciByYW5nZT1bXSxrPWQzX3JhbmdlX2ludGVnZXJTY2FsZShhYnMoc3RlcCkpLGk9LTEsajtzdGFydCAqPSBrLHN0b3AgKj0gayxzdGVwICo9IGs7aWYoc3RlcCA8IDApd2hpbGUoKGogPSBzdGFydCArIHN0ZXAgKiArK2kpID4gc3RvcCkgcmFuZ2UucHVzaChqIC8gayk7ZWxzZSB3aGlsZSgoaiA9IHN0YXJ0ICsgc3RlcCAqICsraSkgPCBzdG9wKSByYW5nZS5wdXNoKGogLyBrKTtyZXR1cm4gcmFuZ2U7fTtmdW5jdGlvbiBkM19yYW5nZV9pbnRlZ2VyU2NhbGUoeCl7dmFyIGs9MTt3aGlsZSh4ICogayAlIDEpIGsgKj0gMTA7cmV0dXJuIGs7fWZ1bmN0aW9uIGQzX2NsYXNzKGN0b3IscHJvcGVydGllcyl7Zm9yKHZhciBrZXkgaW4gcHJvcGVydGllcykge09iamVjdC5kZWZpbmVQcm9wZXJ0eShjdG9yLnByb3RvdHlwZSxrZXkse3ZhbHVlOnByb3BlcnRpZXNba2V5XSxlbnVtZXJhYmxlOmZhbHNlfSk7fX1kMy5tYXAgPSBmdW5jdGlvbihvYmplY3QsZil7dmFyIG1hcD1uZXcgZDNfTWFwKCk7aWYob2JqZWN0IGluc3RhbmNlb2YgZDNfTWFwKXtvYmplY3QuZm9yRWFjaChmdW5jdGlvbihrZXksdmFsdWUpe21hcC5zZXQoa2V5LHZhbHVlKTt9KTt9ZWxzZSBpZihBcnJheS5pc0FycmF5KG9iamVjdCkpe3ZhciBpPS0xLG49b2JqZWN0Lmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpd2hpbGUoKytpIDwgbikgbWFwLnNldChpLG9iamVjdFtpXSk7ZWxzZSB3aGlsZSgrK2kgPCBuKSBtYXAuc2V0KGYuY2FsbChvYmplY3QsbyA9IG9iamVjdFtpXSxpKSxvKTt9ZWxzZSB7Zm9yKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSxvYmplY3Rba2V5XSk7fXJldHVybiBtYXA7fTtmdW5jdGlvbiBkM19NYXAoKXt0aGlzLl8gPSBPYmplY3QuY3JlYXRlKG51bGwpO312YXIgZDNfbWFwX3Byb3RvPVwiX19wcm90b19fXCIsZDNfbWFwX3plcm89XCJcXHgwMFwiO2QzX2NsYXNzKGQzX01hcCx7aGFzOmQzX21hcF9oYXMsZ2V0OmZ1bmN0aW9uIGdldChrZXkpe3JldHVybiB0aGlzLl9bZDNfbWFwX2VzY2FwZShrZXkpXTt9LHNldDpmdW5jdGlvbiBzZXQoa2V5LHZhbHVlKXtyZXR1cm4gdGhpcy5fW2QzX21hcF9lc2NhcGUoa2V5KV0gPSB2YWx1ZTt9LHJlbW92ZTpkM19tYXBfcmVtb3ZlLGtleXM6ZDNfbWFwX2tleXMsdmFsdWVzOmZ1bmN0aW9uIHZhbHVlcygpe3ZhciB2YWx1ZXM9W107Zm9yKHZhciBrZXkgaW4gdGhpcy5fKSB2YWx1ZXMucHVzaCh0aGlzLl9ba2V5XSk7cmV0dXJuIHZhbHVlczt9LGVudHJpZXM6ZnVuY3Rpb24gZW50cmllcygpe3ZhciBlbnRyaWVzPVtdO2Zvcih2YXIga2V5IGluIHRoaXMuXykgZW50cmllcy5wdXNoKHtrZXk6ZDNfbWFwX3VuZXNjYXBlKGtleSksdmFsdWU6dGhpcy5fW2tleV19KTtyZXR1cm4gZW50cmllczt9LHNpemU6ZDNfbWFwX3NpemUsZW1wdHk6ZDNfbWFwX2VtcHR5LGZvckVhY2g6ZnVuY3Rpb24gZm9yRWFjaChmKXtmb3IodmFyIGtleSBpbiB0aGlzLl8pIGYuY2FsbCh0aGlzLGQzX21hcF91bmVzY2FwZShrZXkpLHRoaXMuX1trZXldKTt9fSk7ZnVuY3Rpb24gZDNfbWFwX2VzY2FwZShrZXkpe3JldHVybiAoa2V5ICs9IFwiXCIpID09PSBkM19tYXBfcHJvdG8gfHwga2V5WzBdID09PSBkM19tYXBfemVybz9kM19tYXBfemVybyArIGtleTprZXk7fWZ1bmN0aW9uIGQzX21hcF91bmVzY2FwZShrZXkpe3JldHVybiAoa2V5ICs9IFwiXCIpWzBdID09PSBkM19tYXBfemVybz9rZXkuc2xpY2UoMSk6a2V5O31mdW5jdGlvbiBkM19tYXBfaGFzKGtleSl7cmV0dXJuIGQzX21hcF9lc2NhcGUoa2V5KSBpbiB0aGlzLl87fWZ1bmN0aW9uIGQzX21hcF9yZW1vdmUoa2V5KXtyZXR1cm4gKGtleSA9IGQzX21hcF9lc2NhcGUoa2V5KSkgaW4gdGhpcy5fICYmIGRlbGV0ZSB0aGlzLl9ba2V5XTt9ZnVuY3Rpb24gZDNfbWFwX2tleXMoKXt2YXIga2V5cz1bXTtmb3IodmFyIGtleSBpbiB0aGlzLl8pIGtleXMucHVzaChkM19tYXBfdW5lc2NhcGUoa2V5KSk7cmV0dXJuIGtleXM7fWZ1bmN0aW9uIGQzX21hcF9zaXplKCl7dmFyIHNpemU9MDtmb3IodmFyIGtleSBpbiB0aGlzLl8pICsrc2l6ZTtyZXR1cm4gc2l6ZTt9ZnVuY3Rpb24gZDNfbWFwX2VtcHR5KCl7Zm9yKHZhciBrZXkgaW4gdGhpcy5fKSByZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fWQzLm5lc3QgPSBmdW5jdGlvbigpe3ZhciBuZXN0PXt9LGtleXM9W10sc29ydEtleXM9W10sc29ydFZhbHVlcyxyb2xsdXA7ZnVuY3Rpb24gbWFwKG1hcFR5cGUsYXJyYXksZGVwdGgpe2lmKGRlcHRoID49IGtleXMubGVuZ3RoKXJldHVybiByb2xsdXA/cm9sbHVwLmNhbGwobmVzdCxhcnJheSk6c29ydFZhbHVlcz9hcnJheS5zb3J0KHNvcnRWYWx1ZXMpOmFycmF5O3ZhciBpPS0xLG49YXJyYXkubGVuZ3RoLGtleT1rZXlzW2RlcHRoKytdLGtleVZhbHVlLG9iamVjdCxzZXR0ZXIsdmFsdWVzQnlLZXk9bmV3IGQzX01hcCgpLHZhbHVlczt3aGlsZSgrK2kgPCBuKSB7aWYodmFsdWVzID0gdmFsdWVzQnlLZXkuZ2V0KGtleVZhbHVlID0ga2V5KG9iamVjdCA9IGFycmF5W2ldKSkpe3ZhbHVlcy5wdXNoKG9iamVjdCk7fWVsc2Uge3ZhbHVlc0J5S2V5LnNldChrZXlWYWx1ZSxbb2JqZWN0XSk7fX1pZihtYXBUeXBlKXtvYmplY3QgPSBtYXBUeXBlKCk7c2V0dGVyID0gZnVuY3Rpb24oa2V5VmFsdWUsdmFsdWVzKXtvYmplY3Quc2V0KGtleVZhbHVlLG1hcChtYXBUeXBlLHZhbHVlcyxkZXB0aCkpO307fWVsc2Uge29iamVjdCA9IHt9O3NldHRlciA9IGZ1bmN0aW9uKGtleVZhbHVlLHZhbHVlcyl7b2JqZWN0W2tleVZhbHVlXSA9IG1hcChtYXBUeXBlLHZhbHVlcyxkZXB0aCk7fTt9dmFsdWVzQnlLZXkuZm9yRWFjaChzZXR0ZXIpO3JldHVybiBvYmplY3Q7fWZ1bmN0aW9uIGVudHJpZXMobWFwLGRlcHRoKXtpZihkZXB0aCA+PSBrZXlzLmxlbmd0aClyZXR1cm4gbWFwO3ZhciBhcnJheT1bXSxzb3J0S2V5PXNvcnRLZXlzW2RlcHRoKytdO21hcC5mb3JFYWNoKGZ1bmN0aW9uKGtleSxrZXlNYXApe2FycmF5LnB1c2goe2tleTprZXksdmFsdWVzOmVudHJpZXMoa2V5TWFwLGRlcHRoKX0pO30pO3JldHVybiBzb3J0S2V5P2FycmF5LnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gc29ydEtleShhLmtleSxiLmtleSk7fSk6YXJyYXk7fW5lc3QubWFwID0gZnVuY3Rpb24oYXJyYXksbWFwVHlwZSl7cmV0dXJuIG1hcChtYXBUeXBlLGFycmF5LDApO307bmVzdC5lbnRyaWVzID0gZnVuY3Rpb24oYXJyYXkpe3JldHVybiBlbnRyaWVzKG1hcChkMy5tYXAsYXJyYXksMCksMCk7fTtuZXN0LmtleSA9IGZ1bmN0aW9uKGQpe2tleXMucHVzaChkKTtyZXR1cm4gbmVzdDt9O25lc3Quc29ydEtleXMgPSBmdW5jdGlvbihvcmRlcil7c29ydEtleXNba2V5cy5sZW5ndGggLSAxXSA9IG9yZGVyO3JldHVybiBuZXN0O307bmVzdC5zb3J0VmFsdWVzID0gZnVuY3Rpb24ob3JkZXIpe3NvcnRWYWx1ZXMgPSBvcmRlcjtyZXR1cm4gbmVzdDt9O25lc3Qucm9sbHVwID0gZnVuY3Rpb24oZil7cm9sbHVwID0gZjtyZXR1cm4gbmVzdDt9O3JldHVybiBuZXN0O307ZDMuc2V0ID0gZnVuY3Rpb24oYXJyYXkpe3ZhciBzZXQ9bmV3IGQzX1NldCgpO2lmKGFycmF5KWZvcih2YXIgaT0wLG49YXJyYXkubGVuZ3RoO2kgPCBuOysraSkgc2V0LmFkZChhcnJheVtpXSk7cmV0dXJuIHNldDt9O2Z1bmN0aW9uIGQzX1NldCgpe3RoaXMuXyA9IE9iamVjdC5jcmVhdGUobnVsbCk7fWQzX2NsYXNzKGQzX1NldCx7aGFzOmQzX21hcF9oYXMsYWRkOmZ1bmN0aW9uIGFkZChrZXkpe3RoaXMuX1tkM19tYXBfZXNjYXBlKGtleSArPSBcIlwiKV0gPSB0cnVlO3JldHVybiBrZXk7fSxyZW1vdmU6ZDNfbWFwX3JlbW92ZSx2YWx1ZXM6ZDNfbWFwX2tleXMsc2l6ZTpkM19tYXBfc2l6ZSxlbXB0eTpkM19tYXBfZW1wdHksZm9yRWFjaDpmdW5jdGlvbiBmb3JFYWNoKGYpe2Zvcih2YXIga2V5IGluIHRoaXMuXykgZi5jYWxsKHRoaXMsZDNfbWFwX3VuZXNjYXBlKGtleSkpO319KTtkMy5iZWhhdmlvciA9IHt9O2Z1bmN0aW9uIGQzX2lkZW50aXR5KGQpe3JldHVybiBkO31kMy5yZWJpbmQgPSBmdW5jdGlvbih0YXJnZXQsc291cmNlKXt2YXIgaT0xLG49YXJndW1lbnRzLmxlbmd0aCxtZXRob2Q7d2hpbGUoKytpIDwgbikgdGFyZ2V0W21ldGhvZCA9IGFyZ3VtZW50c1tpXV0gPSBkM19yZWJpbmQodGFyZ2V0LHNvdXJjZSxzb3VyY2VbbWV0aG9kXSk7cmV0dXJuIHRhcmdldDt9O2Z1bmN0aW9uIGQzX3JlYmluZCh0YXJnZXQsc291cmNlLG1ldGhvZCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHZhbHVlPW1ldGhvZC5hcHBseShzb3VyY2UsYXJndW1lbnRzKTtyZXR1cm4gdmFsdWUgPT09IHNvdXJjZT90YXJnZXQ6dmFsdWU7fTt9ZnVuY3Rpb24gZDNfdmVuZG9yU3ltYm9sKG9iamVjdCxuYW1lKXtpZihuYW1lIGluIG9iamVjdClyZXR1cm4gbmFtZTtuYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7Zm9yKHZhciBpPTAsbj1kM192ZW5kb3JQcmVmaXhlcy5sZW5ndGg7aSA8IG47KytpKSB7dmFyIHByZWZpeE5hbWU9ZDNfdmVuZG9yUHJlZml4ZXNbaV0gKyBuYW1lO2lmKHByZWZpeE5hbWUgaW4gb2JqZWN0KXJldHVybiBwcmVmaXhOYW1lO319dmFyIGQzX3ZlbmRvclByZWZpeGVzPVtcIndlYmtpdFwiLFwibXNcIixcIm1velwiLFwiTW96XCIsXCJvXCIsXCJPXCJdO2Z1bmN0aW9uIGQzX25vb3AoKXt9ZDMuZGlzcGF0Y2ggPSBmdW5jdGlvbigpe3ZhciBkaXNwYXRjaD1uZXcgZDNfZGlzcGF0Y2goKSxpPS0xLG49YXJndW1lbnRzLmxlbmd0aDt3aGlsZSgrK2kgPCBuKSBkaXNwYXRjaFthcmd1bWVudHNbaV1dID0gZDNfZGlzcGF0Y2hfZXZlbnQoZGlzcGF0Y2gpO3JldHVybiBkaXNwYXRjaDt9O2Z1bmN0aW9uIGQzX2Rpc3BhdGNoKCl7fWQzX2Rpc3BhdGNoLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsbGlzdGVuZXIpe3ZhciBpPXR5cGUuaW5kZXhPZihcIi5cIiksbmFtZT1cIlwiO2lmKGkgPj0gMCl7bmFtZSA9IHR5cGUuc2xpY2UoaSArIDEpO3R5cGUgPSB0eXBlLnNsaWNlKDAsaSk7fWlmKHR5cGUpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyP3RoaXNbdHlwZV0ub24obmFtZSk6dGhpc1t0eXBlXS5vbihuYW1lLGxpc3RlbmVyKTtpZihhcmd1bWVudHMubGVuZ3RoID09PSAyKXtpZihsaXN0ZW5lciA9PSBudWxsKWZvcih0eXBlIGluIHRoaXMpIHtpZih0aGlzLmhhc093blByb3BlcnR5KHR5cGUpKXRoaXNbdHlwZV0ub24obmFtZSxudWxsKTt9cmV0dXJuIHRoaXM7fX07ZnVuY3Rpb24gZDNfZGlzcGF0Y2hfZXZlbnQoZGlzcGF0Y2gpe3ZhciBsaXN0ZW5lcnM9W10sbGlzdGVuZXJCeU5hbWU9bmV3IGQzX01hcCgpO2Z1bmN0aW9uIGV2ZW50KCl7dmFyIHo9bGlzdGVuZXJzLGk9LTEsbj16Lmxlbmd0aCxsO3doaWxlKCsraSA8IG4pIGlmKGwgPSB6W2ldLm9uKWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBkaXNwYXRjaDt9ZXZlbnQub24gPSBmdW5jdGlvbihuYW1lLGxpc3RlbmVyKXt2YXIgbD1saXN0ZW5lckJ5TmFtZS5nZXQobmFtZSksaTtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilyZXR1cm4gbCAmJiBsLm9uO2lmKGwpe2wub24gPSBudWxsO2xpc3RlbmVycyA9IGxpc3RlbmVycy5zbGljZSgwLGkgPSBsaXN0ZW5lcnMuaW5kZXhPZihsKSkuY29uY2F0KGxpc3RlbmVycy5zbGljZShpICsgMSkpO2xpc3RlbmVyQnlOYW1lLnJlbW92ZShuYW1lKTt9aWYobGlzdGVuZXIpbGlzdGVuZXJzLnB1c2gobGlzdGVuZXJCeU5hbWUuc2V0KG5hbWUse29uOmxpc3RlbmVyfSkpO3JldHVybiBkaXNwYXRjaDt9O3JldHVybiBldmVudDt9ZDMuZXZlbnQgPSBudWxsO2Z1bmN0aW9uIGQzX2V2ZW50UHJldmVudERlZmF1bHQoKXtkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO31mdW5jdGlvbiBkM19ldmVudFNvdXJjZSgpe3ZhciBlPWQzLmV2ZW50LHM7d2hpbGUocyA9IGUuc291cmNlRXZlbnQpIGUgPSBzO3JldHVybiBlO31mdW5jdGlvbiBkM19ldmVudERpc3BhdGNoKHRhcmdldCl7dmFyIGRpc3BhdGNoPW5ldyBkM19kaXNwYXRjaCgpLGk9MCxuPWFyZ3VtZW50cy5sZW5ndGg7d2hpbGUoKytpIDwgbikgZGlzcGF0Y2hbYXJndW1lbnRzW2ldXSA9IGQzX2Rpc3BhdGNoX2V2ZW50KGRpc3BhdGNoKTtkaXNwYXRjaC5vZiA9IGZ1bmN0aW9uKHRoaXosYXJndW1lbnR6KXtyZXR1cm4gZnVuY3Rpb24oZTEpe3RyeXt2YXIgZTA9ZTEuc291cmNlRXZlbnQgPSBkMy5ldmVudDtlMS50YXJnZXQgPSB0YXJnZXQ7ZDMuZXZlbnQgPSBlMTtkaXNwYXRjaFtlMS50eXBlXS5hcHBseSh0aGl6LGFyZ3VtZW50eik7fWZpbmFsbHkge2QzLmV2ZW50ID0gZTA7fX07fTtyZXR1cm4gZGlzcGF0Y2g7fWQzLnJlcXVvdGUgPSBmdW5jdGlvbihzKXtyZXR1cm4gcy5yZXBsYWNlKGQzX3JlcXVvdGVfcmUsXCJcXFxcJCZcIik7fTt2YXIgZDNfcmVxdW90ZV9yZT0vW1xcXFxcXF5cXCRcXCpcXCtcXD9cXHxcXFtcXF1cXChcXClcXC5cXHtcXH1dL2c7dmFyIGQzX3N1YmNsYXNzPSh7fSkuX19wcm90b19fP2Z1bmN0aW9uKG9iamVjdCxwcm90b3R5cGUpe29iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7fTpmdW5jdGlvbihvYmplY3QscHJvdG90eXBlKXtmb3IodmFyIHByb3BlcnR5IGluIHByb3RvdHlwZSkgb2JqZWN0W3Byb3BlcnR5XSA9IHByb3RvdHlwZVtwcm9wZXJ0eV07fTtmdW5jdGlvbiBkM19zZWxlY3Rpb24oZ3JvdXBzKXtkM19zdWJjbGFzcyhncm91cHMsZDNfc2VsZWN0aW9uUHJvdG90eXBlKTtyZXR1cm4gZ3JvdXBzO312YXIgZDNfc2VsZWN0PWZ1bmN0aW9uIGQzX3NlbGVjdChzLG4pe3JldHVybiBuLnF1ZXJ5U2VsZWN0b3Iocyk7fSxkM19zZWxlY3RBbGw9ZnVuY3Rpb24gZDNfc2VsZWN0QWxsKHMsbil7cmV0dXJuIG4ucXVlcnlTZWxlY3RvckFsbChzKTt9LF9kM19zZWxlY3RNYXRjaGVzPWZ1bmN0aW9uIGQzX3NlbGVjdE1hdGNoZXMobixzKXt2YXIgZDNfc2VsZWN0TWF0Y2hlcj1uLm1hdGNoZXMgfHwgbltkM192ZW5kb3JTeW1ib2wobixcIm1hdGNoZXNTZWxlY3RvclwiKV07X2QzX3NlbGVjdE1hdGNoZXMgPSBmdW5jdGlvbihuLHMpe3JldHVybiBkM19zZWxlY3RNYXRjaGVyLmNhbGwobixzKTt9O3JldHVybiBfZDNfc2VsZWN0TWF0Y2hlcyhuLHMpO307aWYodHlwZW9mIFNpenpsZSA9PT0gXCJmdW5jdGlvblwiKXtkM19zZWxlY3QgPSBmdW5jdGlvbihzLG4pe3JldHVybiBTaXp6bGUocyxuKVswXSB8fCBudWxsO307ZDNfc2VsZWN0QWxsID0gU2l6emxlO19kM19zZWxlY3RNYXRjaGVzID0gU2l6emxlLm1hdGNoZXNTZWxlY3Rvcjt9ZDMuc2VsZWN0aW9uID0gZnVuY3Rpb24oKXtyZXR1cm4gZDMuc2VsZWN0KGQzX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7fTt2YXIgZDNfc2VsZWN0aW9uUHJvdG90eXBlPWQzLnNlbGVjdGlvbi5wcm90b3R5cGUgPSBbXTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBzdWJncm91cHM9W10sc3ViZ3JvdXAsc3Vibm9kZSxncm91cCxub2RlO3NlbGVjdG9yID0gZDNfc2VsZWN0aW9uX3NlbGVjdG9yKHNlbGVjdG9yKTtmb3IodmFyIGo9LTEsbT10aGlzLmxlbmd0aDsrK2ogPCBtOykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSAoZ3JvdXAgPSB0aGlzW2pdKS5wYXJlbnROb2RlO2Zvcih2YXIgaT0tMSxuPWdyb3VwLmxlbmd0aDsrK2kgPCBuOykge2lmKG5vZGUgPSBncm91cFtpXSl7c3ViZ3JvdXAucHVzaChzdWJub2RlID0gc2VsZWN0b3IuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSxqKSk7aWYoc3Vibm9kZSAmJiBcIl9fZGF0YV9fXCIgaW4gbm9kZSlzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXzt9ZWxzZSB7c3ViZ3JvdXAucHVzaChudWxsKTt9fX1yZXR1cm4gZDNfc2VsZWN0aW9uKHN1Ymdyb3Vwcyk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fc2VsZWN0b3Ioc2VsZWN0b3Ipe3JldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIj9zZWxlY3RvcjpmdW5jdGlvbigpe3JldHVybiBkM19zZWxlY3Qoc2VsZWN0b3IsdGhpcyk7fTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKHNlbGVjdG9yKXt2YXIgc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLG5vZGU7c2VsZWN0b3IgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3JBbGwoc2VsZWN0b3IpO2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9LTEsbj1ncm91cC5sZW5ndGg7KytpIDwgbjspIHtpZihub2RlID0gZ3JvdXBbaV0pe3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gZDNfYXJyYXkoc2VsZWN0b3IuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSxqKSkpO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSBub2RlO319fXJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9zZWxlY3RvckFsbChzZWxlY3Rvcil7cmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiP3NlbGVjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NlbGVjdEFsbChzZWxlY3Rvcix0aGlzKTt9O312YXIgZDNfbnNQcmVmaXg9e3N2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseGh0bWw6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIseGxpbms6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIseG1sOlwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wifTtkMy5ucyA9IHtwcmVmaXg6ZDNfbnNQcmVmaXgscXVhbGlmeTpmdW5jdGlvbiBxdWFsaWZ5KG5hbWUpe3ZhciBpPW5hbWUuaW5kZXhPZihcIjpcIikscHJlZml4PW5hbWU7aWYoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsaSkpICE9PSBcInhtbG5zXCIpbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO3JldHVybiBkM19uc1ByZWZpeC5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpP3tzcGFjZTpkM19uc1ByZWZpeFtwcmVmaXhdLGxvY2FsOm5hbWV9Om5hbWU7fX07ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmF0dHIgPSBmdW5jdGlvbihuYW1lLHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil7aWYodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpe3ZhciBub2RlPXRoaXMubm9kZSgpO25hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpO3JldHVybiBuYW1lLmxvY2FsP25vZGUuZ2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsKTpub2RlLmdldEF0dHJpYnV0ZShuYW1lKTt9Zm9yKHZhbHVlIGluIG5hbWUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fYXR0cih2YWx1ZSxuYW1lW3ZhbHVlXSkpO3JldHVybiB0aGlzO31yZXR1cm4gdGhpcy5lYWNoKGQzX3NlbGVjdGlvbl9hdHRyKG5hbWUsdmFsdWUpKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9hdHRyKG5hbWUsdmFsdWUpe25hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpO2Z1bmN0aW9uIGF0dHJOdWxsKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fWZ1bmN0aW9uIGF0dHJOdWxsTlMoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7fWZ1bmN0aW9uIGF0dHJDb25zdGFudCgpe3RoaXMuc2V0QXR0cmlidXRlKG5hbWUsdmFsdWUpO31mdW5jdGlvbiBhdHRyQ29uc3RhbnROUygpe3RoaXMuc2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsLHZhbHVlKTt9ZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKCl7dmFyIHg9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHggPT0gbnVsbCl0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUseCk7fWZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKCl7dmFyIHg9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHggPT0gbnVsbCl0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7ZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCx4KTt9cmV0dXJuIHZhbHVlID09IG51bGw/bmFtZS5sb2NhbD9hdHRyTnVsbE5TOmF0dHJOdWxsOnR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP25hbWUubG9jYWw/YXR0ckZ1bmN0aW9uTlM6YXR0ckZ1bmN0aW9uOm5hbWUubG9jYWw/YXR0ckNvbnN0YW50TlM6YXR0ckNvbnN0YW50O31mdW5jdGlvbiBkM19jb2xsYXBzZShzKXtyZXR1cm4gcy50cmltKCkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmNsYXNzZWQgPSBmdW5jdGlvbihuYW1lLHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil7aWYodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpe3ZhciBub2RlPXRoaXMubm9kZSgpLG49KG5hbWUgPSBkM19zZWxlY3Rpb25fY2xhc3NlcyhuYW1lKSkubGVuZ3RoLGk9LTE7aWYodmFsdWUgPSBub2RlLmNsYXNzTGlzdCl7d2hpbGUoKytpIDwgbikgaWYoIXZhbHVlLmNvbnRhaW5zKG5hbWVbaV0pKXJldHVybiBmYWxzZTt9ZWxzZSB7dmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO3doaWxlKCsraSA8IG4pIGlmKCFkM19zZWxlY3Rpb25fY2xhc3NlZFJlKG5hbWVbaV0pLnRlc3QodmFsdWUpKXJldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fWZvcih2YWx1ZSBpbiBuYW1lKSB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX2NsYXNzZWQodmFsdWUsbmFtZVt2YWx1ZV0pKTtyZXR1cm4gdGhpczt9cmV0dXJuIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fY2xhc3NlZChuYW1lLHZhbHVlKSk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fY2xhc3NlZFJlKG5hbWUpe3JldHVybiBuZXcgUmVnRXhwKFwiKD86XnxcXFxccyspXCIgKyBkMy5yZXF1b3RlKG5hbWUpICsgXCIoPzpcXFxccyt8JClcIixcImdcIik7fWZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9jbGFzc2VzKG5hbWUpe3JldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7fWZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9jbGFzc2VkKG5hbWUsdmFsdWUpe25hbWUgPSBkM19zZWxlY3Rpb25fY2xhc3NlcyhuYW1lKS5tYXAoZDNfc2VsZWN0aW9uX2NsYXNzZWROYW1lKTt2YXIgbj1uYW1lLmxlbmd0aDtmdW5jdGlvbiBjbGFzc2VkQ29uc3RhbnQoKXt2YXIgaT0tMTt3aGlsZSgrK2kgPCBuKSBuYW1lW2ldKHRoaXMsdmFsdWUpO31mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24oKXt2YXIgaT0tMSx4PXZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt3aGlsZSgrK2kgPCBuKSBuYW1lW2ldKHRoaXMseCk7fXJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIj9jbGFzc2VkRnVuY3Rpb246Y2xhc3NlZENvbnN0YW50O31mdW5jdGlvbiBkM19zZWxlY3Rpb25fY2xhc3NlZE5hbWUobmFtZSl7dmFyIHJlPWQzX3NlbGVjdGlvbl9jbGFzc2VkUmUobmFtZSk7cmV0dXJuIGZ1bmN0aW9uKG5vZGUsdmFsdWUpe2lmKGMgPSBub2RlLmNsYXNzTGlzdClyZXR1cm4gdmFsdWU/Yy5hZGQobmFtZSk6Yy5yZW1vdmUobmFtZSk7dmFyIGM9bm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiO2lmKHZhbHVlKXtyZS5sYXN0SW5kZXggPSAwO2lmKCFyZS50ZXN0KGMpKW5vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixkM19jb2xsYXBzZShjICsgXCIgXCIgKyBuYW1lKSk7fWVsc2Uge25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixkM19jb2xsYXBzZShjLnJlcGxhY2UocmUsXCIgXCIpKSk7fX07fWQzX3NlbGVjdGlvblByb3RvdHlwZS5zdHlsZSA9IGZ1bmN0aW9uKG5hbWUsdmFsdWUscHJpb3JpdHkpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobiA8IDMpe2lmKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKXtpZihuIDwgMil2YWx1ZSA9IFwiXCI7Zm9yKHByaW9yaXR5IGluIG5hbWUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fc3R5bGUocHJpb3JpdHksbmFtZVtwcmlvcml0eV0sdmFsdWUpKTtyZXR1cm4gdGhpczt9aWYobiA8IDIpe3ZhciBub2RlPXRoaXMubm9kZSgpO3JldHVybiBkM193aW5kb3cobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7fXByaW9yaXR5ID0gXCJcIjt9cmV0dXJuIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fc3R5bGUobmFtZSx2YWx1ZSxwcmlvcml0eSkpO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uX3N0eWxlKG5hbWUsdmFsdWUscHJpb3JpdHkpe2Z1bmN0aW9uIHN0eWxlTnVsbCgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7fWZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQoKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsdmFsdWUscHJpb3JpdHkpO31mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKCl7dmFyIHg9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHggPT0gbnVsbCl0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO2Vsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLHgscHJpb3JpdHkpO31yZXR1cm4gdmFsdWUgPT0gbnVsbD9zdHlsZU51bGw6dHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI/c3R5bGVGdW5jdGlvbjpzdHlsZUNvbnN0YW50O31kM19zZWxlY3Rpb25Qcm90b3R5cGUucHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil7aWYodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpcmV0dXJuIHRoaXMubm9kZSgpW25hbWVdO2Zvcih2YWx1ZSBpbiBuYW1lKSB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX3Byb3BlcnR5KHZhbHVlLG5hbWVbdmFsdWVdKSk7cmV0dXJuIHRoaXM7fXJldHVybiB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX3Byb3BlcnR5KG5hbWUsdmFsdWUpKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9wcm9wZXJ0eShuYW1lLHZhbHVlKXtmdW5jdGlvbiBwcm9wZXJ0eU51bGwoKXtkZWxldGUgdGhpc1tuYW1lXTt9ZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudCgpe3RoaXNbbmFtZV0gPSB2YWx1ZTt9ZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbigpe3ZhciB4PXZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih4ID09IG51bGwpZGVsZXRlIHRoaXNbbmFtZV07ZWxzZSB0aGlzW25hbWVdID0geDt9cmV0dXJuIHZhbHVlID09IG51bGw/cHJvcGVydHlOdWxsOnR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP3Byb3BlcnR5RnVuY3Rpb246cHJvcGVydHlDb25zdGFudDt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP2Z1bmN0aW9uKCl7dmFyIHY9dmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGw/XCJcIjp2O306dmFsdWUgPT0gbnVsbD9mdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQgPSBcIlwiO306ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7fSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuaHRtbCA9IGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2godHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI/ZnVuY3Rpb24oKXt2YXIgdj12YWx1ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGw/XCJcIjp2O306dmFsdWUgPT0gbnVsbD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MID0gXCJcIjt9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUwgPSB2YWx1ZTt9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUw7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSl7bmFtZSA9IGQzX3NlbGVjdGlvbl9jcmVhdG9yKG5hbWUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG5hbWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKTt9KTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9jcmVhdG9yKG5hbWUpe2Z1bmN0aW9uIGNyZWF0ZSgpe3ZhciBkb2N1bWVudD10aGlzLm93bmVyRG9jdW1lbnQsbmFtZXNwYWNlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuYW1lc3BhY2U/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZSxuYW1lKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO31mdW5jdGlvbiBjcmVhdGVOUygpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7fXJldHVybiB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiP25hbWU6KG5hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpKS5sb2NhbD9jcmVhdGVOUzpjcmVhdGU7fWQzX3NlbGVjdGlvblByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihuYW1lLGJlZm9yZSl7bmFtZSA9IGQzX3NlbGVjdGlvbl9jcmVhdG9yKG5hbWUpO2JlZm9yZSA9IGQzX3NlbGVjdGlvbl9zZWxlY3RvcihiZWZvcmUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuYW1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxiZWZvcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpIHx8IG51bGwpO30pO307ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChkM19zZWxlY3Rpb25SZW1vdmUpO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uUmVtb3ZlKCl7dmFyIHBhcmVudD10aGlzLnBhcmVudE5vZGU7aWYocGFyZW50KXBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbih2YWx1ZSxrZXkpe3ZhciBpPS0xLG49dGhpcy5sZW5ndGgsZ3JvdXAsbm9kZTtpZighYXJndW1lbnRzLmxlbmd0aCl7dmFsdWUgPSBuZXcgQXJyYXkobiA9IChncm91cCA9IHRoaXNbMF0pLmxlbmd0aCk7d2hpbGUoKytpIDwgbikge2lmKG5vZGUgPSBncm91cFtpXSl7dmFsdWVbaV0gPSBub2RlLl9fZGF0YV9fO319cmV0dXJuIHZhbHVlO31mdW5jdGlvbiBiaW5kKGdyb3VwLGdyb3VwRGF0YSl7dmFyIGksbj1ncm91cC5sZW5ndGgsbT1ncm91cERhdGEubGVuZ3RoLG4wPU1hdGgubWluKG4sbSksdXBkYXRlTm9kZXM9bmV3IEFycmF5KG0pLGVudGVyTm9kZXM9bmV3IEFycmF5KG0pLGV4aXROb2Rlcz1uZXcgQXJyYXkobiksbm9kZSxub2RlRGF0YTtpZihrZXkpe3ZhciBub2RlQnlLZXlWYWx1ZT1uZXcgZDNfTWFwKCksa2V5VmFsdWVzPW5ldyBBcnJheShuKSxrZXlWYWx1ZTtmb3IoaSA9IC0xOysraSA8IG47KSB7aWYobm9kZSA9IGdyb3VwW2ldKXtpZihub2RlQnlLZXlWYWx1ZS5oYXMoa2V5VmFsdWUgPSBrZXkuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSkpKXtleGl0Tm9kZXNbaV0gPSBub2RlO31lbHNlIHtub2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsbm9kZSk7fWtleVZhbHVlc1tpXSA9IGtleVZhbHVlO319Zm9yKGkgPSAtMTsrK2kgPCBtOykge2lmKCEobm9kZSA9IG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZSA9IGtleS5jYWxsKGdyb3VwRGF0YSxub2RlRGF0YSA9IGdyb3VwRGF0YVtpXSxpKSkpKXtlbnRlck5vZGVzW2ldID0gZDNfc2VsZWN0aW9uX2RhdGFOb2RlKG5vZGVEYXRhKTt9ZWxzZSBpZihub2RlICE9PSB0cnVlKXt1cGRhdGVOb2Rlc1tpXSA9IG5vZGU7bm9kZS5fX2RhdGFfXyA9IG5vZGVEYXRhO31ub2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsdHJ1ZSk7fWZvcihpID0gLTE7KytpIDwgbjspIHtpZihpIGluIGtleVZhbHVlcyAmJiBub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSAhPT0gdHJ1ZSl7ZXhpdE5vZGVzW2ldID0gZ3JvdXBbaV07fX19ZWxzZSB7Zm9yKGkgPSAtMTsrK2kgPCBuMDspIHtub2RlID0gZ3JvdXBbaV07bm9kZURhdGEgPSBncm91cERhdGFbaV07aWYobm9kZSl7bm9kZS5fX2RhdGFfXyA9IG5vZGVEYXRhO3VwZGF0ZU5vZGVzW2ldID0gbm9kZTt9ZWxzZSB7ZW50ZXJOb2Rlc1tpXSA9IGQzX3NlbGVjdGlvbl9kYXRhTm9kZShub2RlRGF0YSk7fX1mb3IoO2kgPCBtOysraSkge2VudGVyTm9kZXNbaV0gPSBkM19zZWxlY3Rpb25fZGF0YU5vZGUoZ3JvdXBEYXRhW2ldKTt9Zm9yKDtpIDwgbjsrK2kpIHtleGl0Tm9kZXNbaV0gPSBncm91cFtpXTt9fWVudGVyTm9kZXMudXBkYXRlID0gdXBkYXRlTm9kZXM7ZW50ZXJOb2Rlcy5wYXJlbnROb2RlID0gdXBkYXRlTm9kZXMucGFyZW50Tm9kZSA9IGV4aXROb2Rlcy5wYXJlbnROb2RlID0gZ3JvdXAucGFyZW50Tm9kZTtlbnRlci5wdXNoKGVudGVyTm9kZXMpO3VwZGF0ZS5wdXNoKHVwZGF0ZU5vZGVzKTtleGl0LnB1c2goZXhpdE5vZGVzKTt9dmFyIGVudGVyPWQzX3NlbGVjdGlvbl9lbnRlcihbXSksdXBkYXRlPWQzX3NlbGVjdGlvbihbXSksZXhpdD1kM19zZWxlY3Rpb24oW10pO2lmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXt3aGlsZSgrK2kgPCBuKSB7YmluZChncm91cCA9IHRoaXNbaV0sdmFsdWUuY2FsbChncm91cCxncm91cC5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTt9fWVsc2Uge3doaWxlKCsraSA8IG4pIHtiaW5kKGdyb3VwID0gdGhpc1tpXSx2YWx1ZSk7fX11cGRhdGUuZW50ZXIgPSBmdW5jdGlvbigpe3JldHVybiBlbnRlcjt9O3VwZGF0ZS5leGl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZXhpdDt9O3JldHVybiB1cGRhdGU7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fZGF0YU5vZGUoZGF0YSl7cmV0dXJuIHtfX2RhdGFfXzpkYXRhfTt9ZDNfc2VsZWN0aW9uUHJvdG90eXBlLmRhdHVtID0gZnVuY3Rpb24odmFsdWUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLHZhbHVlKTp0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIik7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24oZmlsdGVyKXt2YXIgc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLGdyb3VwLG5vZGU7aWYodHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiKWZpbHRlciA9IGQzX3NlbGVjdGlvbl9maWx0ZXIoZmlsdGVyKTtmb3IodmFyIGo9MCxtPXRoaXMubGVuZ3RoO2ogPCBtO2orKykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSAoZ3JvdXAgPSB0aGlzW2pdKS5wYXJlbnROb2RlO2Zvcih2YXIgaT0wLG49Z3JvdXAubGVuZ3RoO2kgPCBuO2krKykge2lmKChub2RlID0gZ3JvdXBbaV0pICYmIGZpbHRlci5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopKXtzdWJncm91cC5wdXNoKG5vZGUpO319fXJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTt9O2Z1bmN0aW9uIGQzX3NlbGVjdGlvbl9maWx0ZXIoc2VsZWN0b3Ipe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBfZDNfc2VsZWN0TWF0Y2hlcyh0aGlzLHNlbGVjdG9yKTt9O31kM19zZWxlY3Rpb25Qcm90b3R5cGUub3JkZXIgPSBmdW5jdGlvbigpe2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9Z3JvdXAubGVuZ3RoIC0gMSxuZXh0PWdyb3VwW2ldLG5vZGU7LS1pID49IDA7KSB7aWYobm9kZSA9IGdyb3VwW2ldKXtpZihuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLG5leHQpO25leHQgPSBub2RlO319fXJldHVybiB0aGlzO307ZDNfc2VsZWN0aW9uUHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbihjb21wYXJhdG9yKXtjb21wYXJhdG9yID0gZDNfc2VsZWN0aW9uX3NvcnRDb21wYXJhdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGo9LTEsbT10aGlzLmxlbmd0aDsrK2ogPCBtOykgdGhpc1tqXS5zb3J0KGNvbXBhcmF0b3IpO3JldHVybiB0aGlzLm9yZGVyKCk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fc29ydENvbXBhcmF0b3IoY29tcGFyYXRvcil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpY29tcGFyYXRvciA9IGQzX2FzY2VuZGluZztyZXR1cm4gZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSAmJiBiP2NvbXBhcmF0b3IoYS5fX2RhdGFfXyxiLl9fZGF0YV9fKTohYSAtICFiO307fWQzX3NlbGVjdGlvblByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24oY2FsbGJhY2spe3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLGZ1bmN0aW9uKG5vZGUsaSxqKXtjYWxsYmFjay5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopO30pO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uX2VhY2goZ3JvdXBzLGNhbGxiYWNrKXtmb3IodmFyIGo9MCxtPWdyb3Vwcy5sZW5ndGg7aiA8IG07aisrKSB7Zm9yKHZhciBncm91cD1ncm91cHNbal0saT0wLG49Z3JvdXAubGVuZ3RoLG5vZGU7aSA8IG47aSsrKSB7aWYobm9kZSA9IGdyb3VwW2ldKWNhbGxiYWNrKG5vZGUsaSxqKTt9fXJldHVybiBncm91cHM7fWQzX3NlbGVjdGlvblByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24oY2FsbGJhY2spe3ZhciBhcmdzPWQzX2FycmF5KGFyZ3VtZW50cyk7Y2FsbGJhY2suYXBwbHkoYXJnc1swXSA9IHRoaXMsYXJncyk7cmV0dXJuIHRoaXM7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbigpe3JldHVybiAhdGhpcy5ub2RlKCk7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUubm9kZSA9IGZ1bmN0aW9uKCl7Zm9yKHZhciBqPTAsbT10aGlzLmxlbmd0aDtqIDwgbTtqKyspIHtmb3IodmFyIGdyb3VwPXRoaXNbal0saT0wLG49Z3JvdXAubGVuZ3RoO2kgPCBuO2krKykge3ZhciBub2RlPWdyb3VwW2ldO2lmKG5vZGUpcmV0dXJuIG5vZGU7fX1yZXR1cm4gbnVsbDt9O2QzX3NlbGVjdGlvblByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24oKXt2YXIgbj0wO2QzX3NlbGVjdGlvbl9lYWNoKHRoaXMsZnVuY3Rpb24oKXsrK247fSk7cmV0dXJuIG47fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fZW50ZXIoc2VsZWN0aW9uKXtkM19zdWJjbGFzcyhzZWxlY3Rpb24sZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlKTtyZXR1cm4gc2VsZWN0aW9uO312YXIgZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlPVtdO2QzLnNlbGVjdGlvbi5lbnRlciA9IGQzX3NlbGVjdGlvbl9lbnRlcjtkMy5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlID0gZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlO2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5hcHBlbmQgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuYXBwZW5kO2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5lbXB0eSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5lbXB0eTtkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUubm9kZSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5ub2RlO2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5jYWxsID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLmNhbGw7ZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlLnNpemUgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuc2l6ZTtkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBzdWJncm91cHM9W10sc3ViZ3JvdXAsc3Vibm9kZSx1cGdyb3VwLGdyb3VwLG5vZGU7Zm9yKHZhciBqPS0xLG09dGhpcy5sZW5ndGg7KytqIDwgbTspIHt1cGdyb3VwID0gKGdyb3VwID0gdGhpc1tqXSkudXBkYXRlO3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO3N1Ymdyb3VwLnBhcmVudE5vZGUgPSBncm91cC5wYXJlbnROb2RlO2Zvcih2YXIgaT0tMSxuPWdyb3VwLmxlbmd0aDsrK2kgPCBuOykge2lmKG5vZGUgPSBncm91cFtpXSl7c3ViZ3JvdXAucHVzaCh1cGdyb3VwW2ldID0gc3Vibm9kZSA9IHNlbGVjdG9yLmNhbGwoZ3JvdXAucGFyZW50Tm9kZSxub2RlLl9fZGF0YV9fLGksaikpO3N1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO31lbHNlIHtzdWJncm91cC5wdXNoKG51bGwpO319fXJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTt9O2QzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihuYW1lLGJlZm9yZSl7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpYmVmb3JlID0gZDNfc2VsZWN0aW9uX2VudGVySW5zZXJ0QmVmb3JlKHRoaXMpO3JldHVybiBkM19zZWxlY3Rpb25Qcm90b3R5cGUuaW5zZXJ0LmNhbGwodGhpcyxuYW1lLGJlZm9yZSk7fTtmdW5jdGlvbiBkM19zZWxlY3Rpb25fZW50ZXJJbnNlcnRCZWZvcmUoZW50ZXIpe3ZhciBpMCxqMDtyZXR1cm4gZnVuY3Rpb24oZCxpLGope3ZhciBncm91cD1lbnRlcltqXS51cGRhdGUsbj1ncm91cC5sZW5ndGgsbm9kZTtpZihqICE9IGowKWowID0gaixpMCA9IDA7aWYoaSA+PSBpMClpMCA9IGkgKyAxO3doaWxlKCEobm9kZSA9IGdyb3VwW2kwXSkgJiYgKytpMCA8IG4pO3JldHVybiBub2RlO307fWQzLnNlbGVjdCA9IGZ1bmN0aW9uKG5vZGUpe3ZhciBncm91cDtpZih0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIil7Z3JvdXAgPSBbZDNfc2VsZWN0KG5vZGUsZDNfZG9jdW1lbnQpXTtncm91cC5wYXJlbnROb2RlID0gZDNfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O31lbHNlIHtncm91cCA9IFtub2RlXTtncm91cC5wYXJlbnROb2RlID0gZDNfZG9jdW1lbnRFbGVtZW50KG5vZGUpO31yZXR1cm4gZDNfc2VsZWN0aW9uKFtncm91cF0pO307ZDMuc2VsZWN0QWxsID0gZnVuY3Rpb24obm9kZXMpe3ZhciBncm91cDtpZih0eXBlb2Ygbm9kZXMgPT09IFwic3RyaW5nXCIpe2dyb3VwID0gZDNfYXJyYXkoZDNfc2VsZWN0QWxsKG5vZGVzLGQzX2RvY3VtZW50KSk7Z3JvdXAucGFyZW50Tm9kZSA9IGQzX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDt9ZWxzZSB7Z3JvdXAgPSBkM19hcnJheShub2Rlcyk7Z3JvdXAucGFyZW50Tm9kZSA9IG51bGw7fXJldHVybiBkM19zZWxlY3Rpb24oW2dyb3VwXSk7fTtkM19zZWxlY3Rpb25Qcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLGxpc3RlbmVyLGNhcHR1cmUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobiA8IDMpe2lmKHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiKXtpZihuIDwgMilsaXN0ZW5lciA9IGZhbHNlO2ZvcihjYXB0dXJlIGluIHR5cGUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fb24oY2FwdHVyZSx0eXBlW2NhcHR1cmVdLGxpc3RlbmVyKSk7cmV0dXJuIHRoaXM7fWlmKG4gPCAyKXJldHVybiAobiA9IHRoaXMubm9kZSgpW1wiX19vblwiICsgdHlwZV0pICYmIG4uXztjYXB0dXJlID0gZmFsc2U7fXJldHVybiB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX29uKHR5cGUsbGlzdGVuZXIsY2FwdHVyZSkpO307ZnVuY3Rpb24gZDNfc2VsZWN0aW9uX29uKHR5cGUsbGlzdGVuZXIsY2FwdHVyZSl7dmFyIG5hbWU9XCJfX29uXCIgKyB0eXBlLGk9dHlwZS5pbmRleE9mKFwiLlwiKSx3cmFwPWQzX3NlbGVjdGlvbl9vbkxpc3RlbmVyO2lmKGkgPiAwKXR5cGUgPSB0eXBlLnNsaWNlKDAsaSk7dmFyIGZpbHRlcj1kM19zZWxlY3Rpb25fb25GaWx0ZXJzLmdldCh0eXBlKTtpZihmaWx0ZXIpdHlwZSA9IGZpbHRlcix3cmFwID0gZDNfc2VsZWN0aW9uX29uRmlsdGVyO2Z1bmN0aW9uIG9uUmVtb3ZlKCl7dmFyIGw9dGhpc1tuYW1lXTtpZihsKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSxsLGwuJCk7ZGVsZXRlIHRoaXNbbmFtZV07fX1mdW5jdGlvbiBvbkFkZCgpe3ZhciBsPXdyYXAobGlzdGVuZXIsZDNfYXJyYXkoYXJndW1lbnRzKSk7b25SZW1vdmUuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZSx0aGlzW25hbWVdID0gbCxsLiQgPSBjYXB0dXJlKTtsLl8gPSBsaXN0ZW5lcjt9ZnVuY3Rpb24gcmVtb3ZlQWxsKCl7dmFyIHJlPW5ldyBSZWdFeHAoXCJeX19vbihbXi5dKylcIiArIGQzLnJlcXVvdGUodHlwZSkgKyBcIiRcIiksbWF0Y2g7Zm9yKHZhciBuYW1lIGluIHRoaXMpIHtpZihtYXRjaCA9IG5hbWUubWF0Y2gocmUpKXt2YXIgbD10aGlzW25hbWVdO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihtYXRjaFsxXSxsLGwuJCk7ZGVsZXRlIHRoaXNbbmFtZV07fX19cmV0dXJuIGk/bGlzdGVuZXI/b25BZGQ6b25SZW1vdmU6bGlzdGVuZXI/ZDNfbm9vcDpyZW1vdmVBbGw7fXZhciBkM19zZWxlY3Rpb25fb25GaWx0ZXJzPWQzLm1hcCh7bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwifSk7aWYoZDNfZG9jdW1lbnQpe2QzX3NlbGVjdGlvbl9vbkZpbHRlcnMuZm9yRWFjaChmdW5jdGlvbihrKXtpZihcIm9uXCIgKyBrIGluIGQzX2RvY3VtZW50KWQzX3NlbGVjdGlvbl9vbkZpbHRlcnMucmVtb3ZlKGspO30pO31mdW5jdGlvbiBkM19zZWxlY3Rpb25fb25MaXN0ZW5lcihsaXN0ZW5lcixhcmd1bWVudHope3JldHVybiBmdW5jdGlvbihlKXt2YXIgbz1kMy5ldmVudDtkMy5ldmVudCA9IGU7YXJndW1lbnR6WzBdID0gdGhpcy5fX2RhdGFfXzt0cnl7bGlzdGVuZXIuYXBwbHkodGhpcyxhcmd1bWVudHopO31maW5hbGx5IHtkMy5ldmVudCA9IG87fX07fWZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9vbkZpbHRlcihsaXN0ZW5lcixhcmd1bWVudHope3ZhciBsPWQzX3NlbGVjdGlvbl9vbkxpc3RlbmVyKGxpc3RlbmVyLGFyZ3VtZW50eik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0YXJnZXQ9dGhpcyxyZWxhdGVkPWUucmVsYXRlZFRhcmdldDtpZighcmVsYXRlZCB8fCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIShyZWxhdGVkLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRhcmdldCkgJiA4KSl7bC5jYWxsKHRhcmdldCxlKTt9fTt9dmFyIGQzX2V2ZW50X2RyYWdTZWxlY3QsZDNfZXZlbnRfZHJhZ0lkPTA7ZnVuY3Rpb24gZDNfZXZlbnRfZHJhZ1N1cHByZXNzKG5vZGUpe3ZhciBuYW1lPVwiLmRyYWdzdXBwcmVzcy1cIiArICsrZDNfZXZlbnRfZHJhZ0lkLGNsaWNrPVwiY2xpY2tcIiArIG5hbWUsdz1kMy5zZWxlY3QoZDNfd2luZG93KG5vZGUpKS5vbihcInRvdWNobW92ZVwiICsgbmFtZSxkM19ldmVudFByZXZlbnREZWZhdWx0KS5vbihcImRyYWdzdGFydFwiICsgbmFtZSxkM19ldmVudFByZXZlbnREZWZhdWx0KS5vbihcInNlbGVjdHN0YXJ0XCIgKyBuYW1lLGQzX2V2ZW50UHJldmVudERlZmF1bHQpO2lmKGQzX2V2ZW50X2RyYWdTZWxlY3QgPT0gbnVsbCl7ZDNfZXZlbnRfZHJhZ1NlbGVjdCA9IFwib25zZWxlY3RzdGFydFwiIGluIG5vZGU/ZmFsc2U6ZDNfdmVuZG9yU3ltYm9sKG5vZGUuc3R5bGUsXCJ1c2VyU2VsZWN0XCIpO31pZihkM19ldmVudF9kcmFnU2VsZWN0KXt2YXIgc3R5bGU9ZDNfZG9jdW1lbnRFbGVtZW50KG5vZGUpLnN0eWxlLHNlbGVjdD1zdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XTtzdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XSA9IFwibm9uZVwiO31yZXR1cm4gZnVuY3Rpb24oc3VwcHJlc3NDbGljayl7dy5vbihuYW1lLG51bGwpO2lmKGQzX2V2ZW50X2RyYWdTZWxlY3Qpc3R5bGVbZDNfZXZlbnRfZHJhZ1NlbGVjdF0gPSBzZWxlY3Q7aWYoc3VwcHJlc3NDbGljayl7dmFyIG9mZj1mdW5jdGlvbiBvZmYoKXt3Lm9uKGNsaWNrLG51bGwpO307dy5vbihjbGljayxmdW5jdGlvbigpe2QzX2V2ZW50UHJldmVudERlZmF1bHQoKTtvZmYoKTt9LHRydWUpO3NldFRpbWVvdXQob2ZmLDApO319O31kMy5tb3VzZSA9IGZ1bmN0aW9uKGNvbnRhaW5lcil7cmV0dXJuIGQzX21vdXNlUG9pbnQoY29udGFpbmVyLGQzX2V2ZW50U291cmNlKCkpO307dmFyIGQzX21vdXNlX2J1ZzQ0MDgzPXRoaXMubmF2aWdhdG9yICYmIC9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO2Z1bmN0aW9uIGQzX21vdXNlUG9pbnQoY29udGFpbmVyLGUpe2lmKGUuY2hhbmdlZFRvdWNoZXMpZSA9IGUuY2hhbmdlZFRvdWNoZXNbMF07dmFyIHN2Zz1jb250YWluZXIub3duZXJTVkdFbGVtZW50IHx8IGNvbnRhaW5lcjtpZihzdmcuY3JlYXRlU1ZHUG9pbnQpe3ZhciBwb2ludD1zdmcuY3JlYXRlU1ZHUG9pbnQoKTtpZihkM19tb3VzZV9idWc0NDA4MyA8IDApe3ZhciB3aW5kb3c9ZDNfd2luZG93KGNvbnRhaW5lcik7aWYod2luZG93LnNjcm9sbFggfHwgd2luZG93LnNjcm9sbFkpe3N2ZyA9IGQzLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6XCJub25lXCJ9LFwiaW1wb3J0YW50XCIpO3ZhciBjdG09c3ZnWzBdWzBdLmdldFNjcmVlbkNUTSgpO2QzX21vdXNlX2J1ZzQ0MDgzID0gIShjdG0uZiB8fCBjdG0uZSk7c3ZnLnJlbW92ZSgpO319aWYoZDNfbW91c2VfYnVnNDQwODMpcG9pbnQueCA9IGUucGFnZVgscG9pbnQueSA9IGUucGFnZVk7ZWxzZSBwb2ludC54ID0gZS5jbGllbnRYLHBvaW50LnkgPSBlLmNsaWVudFk7cG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0oY29udGFpbmVyLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7cmV0dXJuIFtwb2ludC54LHBvaW50LnldO312YXIgcmVjdD1jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIFtlLmNsaWVudFggLSByZWN0LmxlZnQgLSBjb250YWluZXIuY2xpZW50TGVmdCxlLmNsaWVudFkgLSByZWN0LnRvcCAtIGNvbnRhaW5lci5jbGllbnRUb3BdO31kMy50b3VjaCA9IGZ1bmN0aW9uKGNvbnRhaW5lcix0b3VjaGVzLGlkZW50aWZpZXIpe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKWlkZW50aWZpZXIgPSB0b3VjaGVzLHRvdWNoZXMgPSBkM19ldmVudFNvdXJjZSgpLmNoYW5nZWRUb3VjaGVzO2lmKHRvdWNoZXMpZm9yKHZhciBpPTAsbj10b3VjaGVzLmxlbmd0aCx0b3VjaDtpIDwgbjsrK2kpIHtpZigodG91Y2ggPSB0b3VjaGVzW2ldKS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKXtyZXR1cm4gZDNfbW91c2VQb2ludChjb250YWluZXIsdG91Y2gpO319fTtkMy5iZWhhdmlvci5kcmFnID0gZnVuY3Rpb24oKXt2YXIgZXZlbnQ9ZDNfZXZlbnREaXNwYXRjaChkcmFnLFwiZHJhZ1wiLFwiZHJhZ3N0YXJ0XCIsXCJkcmFnZW5kXCIpLG9yaWdpbj1udWxsLG1vdXNlZG93bj1kcmFnc3RhcnQoZDNfbm9vcCxkMy5tb3VzZSxkM193aW5kb3csXCJtb3VzZW1vdmVcIixcIm1vdXNldXBcIiksdG91Y2hzdGFydD1kcmFnc3RhcnQoZDNfYmVoYXZpb3JfZHJhZ1RvdWNoSWQsZDMudG91Y2gsZDNfaWRlbnRpdHksXCJ0b3VjaG1vdmVcIixcInRvdWNoZW5kXCIpO2Z1bmN0aW9uIGRyYWcoKXt0aGlzLm9uKFwibW91c2Vkb3duLmRyYWdcIixtb3VzZWRvd24pLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsdG91Y2hzdGFydCk7fWZ1bmN0aW9uIGRyYWdzdGFydChpZCxwb3NpdGlvbixzdWJqZWN0LG1vdmUsZW5kKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdGhhdD10aGlzLHRhcmdldD1kMy5ldmVudC50YXJnZXQscGFyZW50PXRoYXQucGFyZW50Tm9kZSxkaXNwYXRjaD1ldmVudC5vZih0aGF0LGFyZ3VtZW50cyksZHJhZ2dlZD0wLGRyYWdJZD1pZCgpLGRyYWdOYW1lPVwiLmRyYWdcIiArIChkcmFnSWQgPT0gbnVsbD9cIlwiOlwiLVwiICsgZHJhZ0lkKSxkcmFnT2Zmc2V0LGRyYWdTdWJqZWN0PWQzLnNlbGVjdChzdWJqZWN0KHRhcmdldCkpLm9uKG1vdmUgKyBkcmFnTmFtZSxtb3ZlZCkub24oZW5kICsgZHJhZ05hbWUsZW5kZWQpLGRyYWdSZXN0b3JlPWQzX2V2ZW50X2RyYWdTdXBwcmVzcyh0YXJnZXQpLHBvc2l0aW9uMD1wb3NpdGlvbihwYXJlbnQsZHJhZ0lkKTtpZihvcmlnaW4pe2RyYWdPZmZzZXQgPSBvcmlnaW4uYXBwbHkodGhhdCxhcmd1bWVudHMpO2RyYWdPZmZzZXQgPSBbZHJhZ09mZnNldC54IC0gcG9zaXRpb24wWzBdLGRyYWdPZmZzZXQueSAtIHBvc2l0aW9uMFsxXV07fWVsc2Uge2RyYWdPZmZzZXQgPSBbMCwwXTt9ZGlzcGF0Y2goe3R5cGU6XCJkcmFnc3RhcnRcIn0pO2Z1bmN0aW9uIG1vdmVkKCl7dmFyIHBvc2l0aW9uMT1wb3NpdGlvbihwYXJlbnQsZHJhZ0lkKSxkeCxkeTtpZighcG9zaXRpb24xKXJldHVybjtkeCA9IHBvc2l0aW9uMVswXSAtIHBvc2l0aW9uMFswXTtkeSA9IHBvc2l0aW9uMVsxXSAtIHBvc2l0aW9uMFsxXTtkcmFnZ2VkIHw9IGR4IHwgZHk7cG9zaXRpb24wID0gcG9zaXRpb24xO2Rpc3BhdGNoKHt0eXBlOlwiZHJhZ1wiLHg6cG9zaXRpb24xWzBdICsgZHJhZ09mZnNldFswXSx5OnBvc2l0aW9uMVsxXSArIGRyYWdPZmZzZXRbMV0sZHg6ZHgsZHk6ZHl9KTt9ZnVuY3Rpb24gZW5kZWQoKXtpZighcG9zaXRpb24ocGFyZW50LGRyYWdJZCkpcmV0dXJuO2RyYWdTdWJqZWN0Lm9uKG1vdmUgKyBkcmFnTmFtZSxudWxsKS5vbihlbmQgKyBkcmFnTmFtZSxudWxsKTtkcmFnUmVzdG9yZShkcmFnZ2VkICYmIGQzLmV2ZW50LnRhcmdldCA9PT0gdGFyZ2V0KTtkaXNwYXRjaCh7dHlwZTpcImRyYWdlbmRcIn0pO319O31kcmFnLm9yaWdpbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvcmlnaW47b3JpZ2luID0geDtyZXR1cm4gZHJhZzt9O3JldHVybiBkMy5yZWJpbmQoZHJhZyxldmVudCxcIm9uXCIpO307ZnVuY3Rpb24gZDNfYmVoYXZpb3JfZHJhZ1RvdWNoSWQoKXtyZXR1cm4gZDMuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcjt9ZDMudG91Y2hlcyA9IGZ1bmN0aW9uKGNvbnRhaW5lcix0b3VjaGVzKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMil0b3VjaGVzID0gZDNfZXZlbnRTb3VyY2UoKS50b3VjaGVzO3JldHVybiB0b3VjaGVzP2QzX2FycmF5KHRvdWNoZXMpLm1hcChmdW5jdGlvbih0b3VjaCl7dmFyIHBvaW50PWQzX21vdXNlUG9pbnQoY29udGFpbmVyLHRvdWNoKTtwb2ludC5pZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjtyZXR1cm4gcG9pbnQ7fSk6W107fTt2YXIgzrU9MWUtNizOtTI9zrUgKiDOtSzPgD1NYXRoLlBJLM+EPTIgKiDPgCzPhM61Pc+EIC0gzrUsaGFsZs+APc+AIC8gMixkM19yYWRpYW5zPc+AIC8gMTgwLGQzX2RlZ3JlZXM9MTgwIC8gz4A7ZnVuY3Rpb24gZDNfc2duKHgpe3JldHVybiB4ID4gMD8xOnggPCAwPy0xOjA7fWZ1bmN0aW9uIGQzX2Nyb3NzMmQoYSxiLGMpe3JldHVybiAoYlswXSAtIGFbMF0pICogKGNbMV0gLSBhWzFdKSAtIChiWzFdIC0gYVsxXSkgKiAoY1swXSAtIGFbMF0pO31mdW5jdGlvbiBkM19hY29zKHgpe3JldHVybiB4ID4gMT8wOnggPCAtMT/PgDpNYXRoLmFjb3MoeCk7fWZ1bmN0aW9uIGQzX2FzaW4oeCl7cmV0dXJuIHggPiAxP2hhbGbPgDp4IDwgLTE/LWhhbGbPgDpNYXRoLmFzaW4oeCk7fWZ1bmN0aW9uIGQzX3NpbmgoeCl7cmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSAtIDEgLyB4KSAvIDI7fWZ1bmN0aW9uIGQzX2Nvc2goeCl7cmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSArIDEgLyB4KSAvIDI7fWZ1bmN0aW9uIGQzX3RhbmgoeCl7cmV0dXJuICgoeCA9IE1hdGguZXhwKDIgKiB4KSkgLSAxKSAvICh4ICsgMSk7fWZ1bmN0aW9uIGQzX2hhdmVyc2luKHgpe3JldHVybiAoeCA9IE1hdGguc2luKHggLyAyKSkgKiB4O312YXIgz4E9TWF0aC5TUVJUMizPgTI9MizPgTQ9NDtkMy5pbnRlcnBvbGF0ZVpvb20gPSBmdW5jdGlvbihwMCxwMSl7dmFyIHV4MD1wMFswXSx1eTA9cDBbMV0sdzA9cDBbMl0sdXgxPXAxWzBdLHV5MT1wMVsxXSx3MT1wMVsyXSxkeD11eDEgLSB1eDAsZHk9dXkxIC0gdXkwLGQyPWR4ICogZHggKyBkeSAqIGR5LGksUztpZihkMiA8IM61Mil7UyA9IE1hdGgubG9nKHcxIC8gdzApIC8gz4E7aSA9IGZ1bmN0aW9uKHQpe3JldHVybiBbdXgwICsgdCAqIGR4LHV5MCArIHQgKiBkeSx3MCAqIE1hdGguZXhwKM+BICogdCAqIFMpXTt9O31lbHNlIHt2YXIgZDE9TWF0aC5zcXJ0KGQyKSxiMD0odzEgKiB3MSAtIHcwICogdzAgKyDPgTQgKiBkMikgLyAoMiAqIHcwICogz4EyICogZDEpLGIxPSh3MSAqIHcxIC0gdzAgKiB3MCAtIM+BNCAqIGQyKSAvICgyICogdzEgKiDPgTIgKiBkMSkscjA9TWF0aC5sb2coTWF0aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKSxyMT1NYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBiMSArIDEpIC0gYjEpO1MgPSAocjEgLSByMCkgLyDPgTtpID0gZnVuY3Rpb24odCl7dmFyIHM9dCAqIFMsY29zaHIwPWQzX2Nvc2gocjApLHU9dzAgLyAoz4EyICogZDEpICogKGNvc2hyMCAqIGQzX3Rhbmgoz4EgKiBzICsgcjApIC0gZDNfc2luaChyMCkpO3JldHVybiBbdXgwICsgdSAqIGR4LHV5MCArIHUgKiBkeSx3MCAqIGNvc2hyMCAvIGQzX2Nvc2goz4EgKiBzICsgcjApXTt9O31pLmR1cmF0aW9uID0gUyAqIDFlMztyZXR1cm4gaTt9O2QzLmJlaGF2aW9yLnpvb20gPSBmdW5jdGlvbigpe3ZhciB2aWV3PXt4OjAseTowLGs6MX0sdHJhbnNsYXRlMCxjZW50ZXIwLGNlbnRlcixzaXplPVs5NjAsNTAwXSxzY2FsZUV4dGVudD1kM19iZWhhdmlvcl96b29tSW5maW5pdHksZHVyYXRpb249MjUwLHpvb21pbmc9MCxtb3VzZWRvd249XCJtb3VzZWRvd24uem9vbVwiLG1vdXNlbW92ZT1cIm1vdXNlbW92ZS56b29tXCIsbW91c2V1cD1cIm1vdXNldXAuem9vbVwiLG1vdXNld2hlZWxUaW1lcix0b3VjaHN0YXJ0PVwidG91Y2hzdGFydC56b29tXCIsdG91Y2h0aW1lLGV2ZW50PWQzX2V2ZW50RGlzcGF0Y2goem9vbSxcInpvb21zdGFydFwiLFwiem9vbVwiLFwiem9vbWVuZFwiKSx4MCx4MSx5MCx5MTtpZighZDNfYmVoYXZpb3Jfem9vbVdoZWVsKXtkM19iZWhhdmlvcl96b29tV2hlZWwgPSBcIm9ud2hlZWxcIiBpbiBkM19kb2N1bWVudD8oZDNfYmVoYXZpb3Jfem9vbURlbHRhID0gZnVuY3Rpb24oKXtyZXR1cm4gLWQzLmV2ZW50LmRlbHRhWSAqIChkMy5ldmVudC5kZWx0YU1vZGU/MTIwOjEpO30sXCJ3aGVlbFwiKTpcIm9ubW91c2V3aGVlbFwiIGluIGQzX2RvY3VtZW50PyhkM19iZWhhdmlvcl96b29tRGVsdGEgPSBmdW5jdGlvbigpe3JldHVybiBkMy5ldmVudC53aGVlbERlbHRhO30sXCJtb3VzZXdoZWVsXCIpOihkM19iZWhhdmlvcl96b29tRGVsdGEgPSBmdW5jdGlvbigpe3JldHVybiAtZDMuZXZlbnQuZGV0YWlsO30sXCJNb3pNb3VzZVBpeGVsU2Nyb2xsXCIpO31mdW5jdGlvbiB6b29tKGcpe2cub24obW91c2Vkb3duLG1vdXNlZG93bmVkKS5vbihkM19iZWhhdmlvcl96b29tV2hlZWwgKyBcIi56b29tXCIsbW91c2V3aGVlbGVkKS5vbihcImRibGNsaWNrLnpvb21cIixkYmxjbGlja2VkKS5vbih0b3VjaHN0YXJ0LHRvdWNoc3RhcnRlZCk7fXpvb20uZXZlbnQgPSBmdW5jdGlvbihnKXtnLmVhY2goZnVuY3Rpb24oKXt2YXIgZGlzcGF0Y2g9ZXZlbnQub2YodGhpcyxhcmd1bWVudHMpLHZpZXcxPXZpZXc7aWYoZDNfdHJhbnNpdGlvbkluaGVyaXRJZCl7ZDMuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKFwic3RhcnQuem9vbVwiLGZ1bmN0aW9uKCl7dmlldyA9IHRoaXMuX19jaGFydF9fIHx8IHt4OjAseTowLGs6MX07em9vbXN0YXJ0ZWQoZGlzcGF0Y2gpO30pLnR3ZWVuKFwiem9vbTp6b29tXCIsZnVuY3Rpb24oKXt2YXIgZHg9c2l6ZVswXSxkeT1zaXplWzFdLGN4PWNlbnRlcjA/Y2VudGVyMFswXTpkeCAvIDIsY3k9Y2VudGVyMD9jZW50ZXIwWzFdOmR5IC8gMixpPWQzLmludGVycG9sYXRlWm9vbShbKGN4IC0gdmlldy54KSAvIHZpZXcuaywoY3kgLSB2aWV3LnkpIC8gdmlldy5rLGR4IC8gdmlldy5rXSxbKGN4IC0gdmlldzEueCkgLyB2aWV3MS5rLChjeSAtIHZpZXcxLnkpIC8gdmlldzEuayxkeCAvIHZpZXcxLmtdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGw9aSh0KSxrPWR4IC8gbFsyXTt0aGlzLl9fY2hhcnRfXyA9IHZpZXcgPSB7eDpjeCAtIGxbMF0gKiBrLHk6Y3kgLSBsWzFdICogayxrOmt9O3pvb21lZChkaXNwYXRjaCk7fTt9KS5lYWNoKFwiaW50ZXJydXB0Lnpvb21cIixmdW5jdGlvbigpe3pvb21lbmRlZChkaXNwYXRjaCk7fSkuZWFjaChcImVuZC56b29tXCIsZnVuY3Rpb24oKXt6b29tZW5kZWQoZGlzcGF0Y2gpO30pO31lbHNlIHt0aGlzLl9fY2hhcnRfXyA9IHZpZXc7em9vbXN0YXJ0ZWQoZGlzcGF0Y2gpO3pvb21lZChkaXNwYXRjaCk7em9vbWVuZGVkKGRpc3BhdGNoKTt9fSk7fTt6b29tLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBbdmlldy54LHZpZXcueV07dmlldyA9IHt4OitfWzBdLHk6K19bMV0sazp2aWV3Lmt9O3Jlc2NhbGUoKTtyZXR1cm4gem9vbTt9O3pvb20uc2NhbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdmlldy5rO3ZpZXcgPSB7eDp2aWV3LngseTp2aWV3LnksazpudWxsfTtzY2FsZVRvKCtfKTtyZXNjYWxlKCk7cmV0dXJuIHpvb207fTt6b29tLnNjYWxlRXh0ZW50ID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNjYWxlRXh0ZW50O3NjYWxlRXh0ZW50ID0gXyA9PSBudWxsP2QzX2JlaGF2aW9yX3pvb21JbmZpbml0eTpbK19bMF0sK19bMV1dO3JldHVybiB6b29tO307em9vbS5jZW50ZXIgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2VudGVyO2NlbnRlciA9IF8gJiYgWytfWzBdLCtfWzFdXTtyZXR1cm4gem9vbTt9O3pvb20uc2l6ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzaXplO3NpemUgPSBfICYmIFsrX1swXSwrX1sxXV07cmV0dXJuIHpvb207fTt6b29tLmR1cmF0aW9uID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGR1cmF0aW9uO2R1cmF0aW9uID0gK187cmV0dXJuIHpvb207fTt6b29tLnggPSBmdW5jdGlvbih6KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDE7eDEgPSB6O3gwID0gei5jb3B5KCk7dmlldyA9IHt4OjAseTowLGs6MX07cmV0dXJuIHpvb207fTt6b29tLnkgPSBmdW5jdGlvbih6KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTE7eTEgPSB6O3kwID0gei5jb3B5KCk7dmlldyA9IHt4OjAseTowLGs6MX07cmV0dXJuIHpvb207fTtmdW5jdGlvbiBsb2NhdGlvbihwKXtyZXR1cm4gWyhwWzBdIC0gdmlldy54KSAvIHZpZXcuaywocFsxXSAtIHZpZXcueSkgLyB2aWV3LmtdO31mdW5jdGlvbiBwb2ludChsKXtyZXR1cm4gW2xbMF0gKiB2aWV3LmsgKyB2aWV3LngsbFsxXSAqIHZpZXcuayArIHZpZXcueV07fWZ1bmN0aW9uIHNjYWxlVG8ocyl7dmlldy5rID0gTWF0aC5tYXgoc2NhbGVFeHRlbnRbMF0sTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0scykpO31mdW5jdGlvbiB0cmFuc2xhdGVUbyhwLGwpe2wgPSBwb2ludChsKTt2aWV3LnggKz0gcFswXSAtIGxbMF07dmlldy55ICs9IHBbMV0gLSBsWzFdO31mdW5jdGlvbiB6b29tVG8odGhhdCxwLGwsayl7dGhhdC5fX2NoYXJ0X18gPSB7eDp2aWV3LngseTp2aWV3Lnksazp2aWV3Lmt9O3NjYWxlVG8oTWF0aC5wb3coMixrKSk7dHJhbnNsYXRlVG8oY2VudGVyMCA9IHAsbCk7dGhhdCA9IGQzLnNlbGVjdCh0aGF0KTtpZihkdXJhdGlvbiA+IDApdGhhdCA9IHRoYXQudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKTt0aGF0LmNhbGwoem9vbS5ldmVudCk7fWZ1bmN0aW9uIHJlc2NhbGUoKXtpZih4MSl4MS5kb21haW4oeDAucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuICh4IC0gdmlldy54KSAvIHZpZXcuazt9KS5tYXAoeDAuaW52ZXJ0KSk7aWYoeTEpeTEuZG9tYWluKHkwLnJhbmdlKCkubWFwKGZ1bmN0aW9uKHkpe3JldHVybiAoeSAtIHZpZXcueSkgLyB2aWV3Lms7fSkubWFwKHkwLmludmVydCkpO31mdW5jdGlvbiB6b29tc3RhcnRlZChkaXNwYXRjaCl7aWYoISB6b29taW5nKyspZGlzcGF0Y2goe3R5cGU6XCJ6b29tc3RhcnRcIn0pO31mdW5jdGlvbiB6b29tZWQoZGlzcGF0Y2gpe3Jlc2NhbGUoKTtkaXNwYXRjaCh7dHlwZTpcInpvb21cIixzY2FsZTp2aWV3LmssdHJhbnNsYXRlOlt2aWV3Lngsdmlldy55XX0pO31mdW5jdGlvbiB6b29tZW5kZWQoZGlzcGF0Y2gpe2lmKCEgLS16b29taW5nKWRpc3BhdGNoKHt0eXBlOlwiem9vbWVuZFwifSksY2VudGVyMCA9IG51bGw7fWZ1bmN0aW9uIG1vdXNlZG93bmVkKCl7dmFyIHRoYXQ9dGhpcyx0YXJnZXQ9ZDMuZXZlbnQudGFyZ2V0LGRpc3BhdGNoPWV2ZW50Lm9mKHRoYXQsYXJndW1lbnRzKSxkcmFnZ2VkPTAsc3ViamVjdD1kMy5zZWxlY3QoZDNfd2luZG93KHRoYXQpKS5vbihtb3VzZW1vdmUsbW92ZWQpLm9uKG1vdXNldXAsZW5kZWQpLGxvY2F0aW9uMD1sb2NhdGlvbihkMy5tb3VzZSh0aGF0KSksZHJhZ1Jlc3RvcmU9ZDNfZXZlbnRfZHJhZ1N1cHByZXNzKHRoYXQpO2QzX3NlbGVjdGlvbl9pbnRlcnJ1cHQuY2FsbCh0aGF0KTt6b29tc3RhcnRlZChkaXNwYXRjaCk7ZnVuY3Rpb24gbW92ZWQoKXtkcmFnZ2VkID0gMTt0cmFuc2xhdGVUbyhkMy5tb3VzZSh0aGF0KSxsb2NhdGlvbjApO3pvb21lZChkaXNwYXRjaCk7fWZ1bmN0aW9uIGVuZGVkKCl7c3ViamVjdC5vbihtb3VzZW1vdmUsbnVsbCkub24obW91c2V1cCxudWxsKTtkcmFnUmVzdG9yZShkcmFnZ2VkICYmIGQzLmV2ZW50LnRhcmdldCA9PT0gdGFyZ2V0KTt6b29tZW5kZWQoZGlzcGF0Y2gpO319ZnVuY3Rpb24gdG91Y2hzdGFydGVkKCl7dmFyIHRoYXQ9dGhpcyxkaXNwYXRjaD1ldmVudC5vZih0aGF0LGFyZ3VtZW50cyksbG9jYXRpb25zMD17fSxkaXN0YW5jZTA9MCxzY2FsZTAsem9vbU5hbWU9XCIuem9vbS1cIiArIGQzLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsdG91Y2htb3ZlPVwidG91Y2htb3ZlXCIgKyB6b29tTmFtZSx0b3VjaGVuZD1cInRvdWNoZW5kXCIgKyB6b29tTmFtZSx0YXJnZXRzPVtdLHN1YmplY3Q9ZDMuc2VsZWN0KHRoYXQpLGRyYWdSZXN0b3JlPWQzX2V2ZW50X2RyYWdTdXBwcmVzcyh0aGF0KTtzdGFydGVkKCk7em9vbXN0YXJ0ZWQoZGlzcGF0Y2gpO3N1YmplY3Qub24obW91c2Vkb3duLG51bGwpLm9uKHRvdWNoc3RhcnQsc3RhcnRlZCk7ZnVuY3Rpb24gcmVsb2NhdGUoKXt2YXIgdG91Y2hlcz1kMy50b3VjaGVzKHRoYXQpO3NjYWxlMCA9IHZpZXcuazt0b3VjaGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYodC5pZGVudGlmaWVyIGluIGxvY2F0aW9uczApbG9jYXRpb25zMFt0LmlkZW50aWZpZXJdID0gbG9jYXRpb24odCk7fSk7cmV0dXJuIHRvdWNoZXM7fWZ1bmN0aW9uIHN0YXJ0ZWQoKXt2YXIgdGFyZ2V0PWQzLmV2ZW50LnRhcmdldDtkMy5zZWxlY3QodGFyZ2V0KS5vbih0b3VjaG1vdmUsbW92ZWQpLm9uKHRvdWNoZW5kLGVuZGVkKTt0YXJnZXRzLnB1c2godGFyZ2V0KTt2YXIgY2hhbmdlZD1kMy5ldmVudC5jaGFuZ2VkVG91Y2hlcztmb3IodmFyIGk9MCxuPWNoYW5nZWQubGVuZ3RoO2kgPCBuOysraSkge2xvY2F0aW9uczBbY2hhbmdlZFtpXS5pZGVudGlmaWVyXSA9IG51bGw7fXZhciB0b3VjaGVzPXJlbG9jYXRlKCksbm93PURhdGUubm93KCk7aWYodG91Y2hlcy5sZW5ndGggPT09IDEpe2lmKG5vdyAtIHRvdWNodGltZSA8IDUwMCl7dmFyIHA9dG91Y2hlc1swXTt6b29tVG8odGhhdCxwLGxvY2F0aW9uczBbcC5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKHZpZXcuaykgLyBNYXRoLkxOMikgKyAxKTtkM19ldmVudFByZXZlbnREZWZhdWx0KCk7fXRvdWNodGltZSA9IG5vdzt9ZWxzZSBpZih0b3VjaGVzLmxlbmd0aCA+IDEpe3ZhciBwPXRvdWNoZXNbMF0scT10b3VjaGVzWzFdLGR4PXBbMF0gLSBxWzBdLGR5PXBbMV0gLSBxWzFdO2Rpc3RhbmNlMCA9IGR4ICogZHggKyBkeSAqIGR5O319ZnVuY3Rpb24gbW92ZWQoKXt2YXIgdG91Y2hlcz1kMy50b3VjaGVzKHRoYXQpLHAwLGwwLHAxLGwxO2QzX3NlbGVjdGlvbl9pbnRlcnJ1cHQuY2FsbCh0aGF0KTtmb3IodmFyIGk9MCxuPXRvdWNoZXMubGVuZ3RoO2kgPCBuOysraSxsMSA9IG51bGwpIHtwMSA9IHRvdWNoZXNbaV07aWYobDEgPSBsb2NhdGlvbnMwW3AxLmlkZW50aWZpZXJdKXtpZihsMClicmVhaztwMCA9IHAxLGwwID0gbDE7fX1pZihsMSl7dmFyIGRpc3RhbmNlMT0oZGlzdGFuY2UxID0gcDFbMF0gLSBwMFswXSkgKiBkaXN0YW5jZTEgKyAoZGlzdGFuY2UxID0gcDFbMV0gLSBwMFsxXSkgKiBkaXN0YW5jZTEsc2NhbGUxPWRpc3RhbmNlMCAmJiBNYXRoLnNxcnQoZGlzdGFuY2UxIC8gZGlzdGFuY2UwKTtwMCA9IFsocDBbMF0gKyBwMVswXSkgLyAyLChwMFsxXSArIHAxWzFdKSAvIDJdO2wwID0gWyhsMFswXSArIGwxWzBdKSAvIDIsKGwwWzFdICsgbDFbMV0pIC8gMl07c2NhbGVUbyhzY2FsZTEgKiBzY2FsZTApO310b3VjaHRpbWUgPSBudWxsO3RyYW5zbGF0ZVRvKHAwLGwwKTt6b29tZWQoZGlzcGF0Y2gpO31mdW5jdGlvbiBlbmRlZCgpe2lmKGQzLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXt2YXIgY2hhbmdlZD1kMy5ldmVudC5jaGFuZ2VkVG91Y2hlcztmb3IodmFyIGk9MCxuPWNoYW5nZWQubGVuZ3RoO2kgPCBuOysraSkge2RlbGV0ZSBsb2NhdGlvbnMwW2NoYW5nZWRbaV0uaWRlbnRpZmllcl07fWZvcih2YXIgaWRlbnRpZmllciBpbiBsb2NhdGlvbnMwKSB7cmV0dXJuIHZvaWQgcmVsb2NhdGUoKTt9fWQzLnNlbGVjdEFsbCh0YXJnZXRzKS5vbih6b29tTmFtZSxudWxsKTtzdWJqZWN0Lm9uKG1vdXNlZG93bixtb3VzZWRvd25lZCkub24odG91Y2hzdGFydCx0b3VjaHN0YXJ0ZWQpO2RyYWdSZXN0b3JlKCk7em9vbWVuZGVkKGRpc3BhdGNoKTt9fWZ1bmN0aW9uIG1vdXNld2hlZWxlZCgpe3ZhciBkaXNwYXRjaD1ldmVudC5vZih0aGlzLGFyZ3VtZW50cyk7aWYobW91c2V3aGVlbFRpbWVyKWNsZWFyVGltZW91dChtb3VzZXdoZWVsVGltZXIpO2Vsc2UgZDNfc2VsZWN0aW9uX2ludGVycnVwdC5jYWxsKHRoaXMpLHRyYW5zbGF0ZTAgPSBsb2NhdGlvbihjZW50ZXIwID0gY2VudGVyIHx8IGQzLm1vdXNlKHRoaXMpKSx6b29tc3RhcnRlZChkaXNwYXRjaCk7bW91c2V3aGVlbFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe21vdXNld2hlZWxUaW1lciA9IG51bGw7em9vbWVuZGVkKGRpc3BhdGNoKTt9LDUwKTtkM19ldmVudFByZXZlbnREZWZhdWx0KCk7c2NhbGVUbyhNYXRoLnBvdygyLGQzX2JlaGF2aW9yX3pvb21EZWx0YSgpICogLjAwMikgKiB2aWV3LmspO3RyYW5zbGF0ZVRvKGNlbnRlcjAsdHJhbnNsYXRlMCk7em9vbWVkKGRpc3BhdGNoKTt9ZnVuY3Rpb24gZGJsY2xpY2tlZCgpe3ZhciBwPWQzLm1vdXNlKHRoaXMpLGs9TWF0aC5sb2codmlldy5rKSAvIE1hdGguTE4yO3pvb21Ubyh0aGlzLHAsbG9jYXRpb24ocCksZDMuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKGspIC0gMTpNYXRoLmZsb29yKGspICsgMSk7fXJldHVybiBkMy5yZWJpbmQoem9vbSxldmVudCxcIm9uXCIpO307dmFyIGQzX2JlaGF2aW9yX3pvb21JbmZpbml0eT1bMCxJbmZpbml0eV0sZDNfYmVoYXZpb3Jfem9vbURlbHRhLGQzX2JlaGF2aW9yX3pvb21XaGVlbDtkMy5jb2xvciA9IGQzX2NvbG9yO2Z1bmN0aW9uIGQzX2NvbG9yKCl7fWQzX2NvbG9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkgKyBcIlwiO307ZDMuaHNsID0gZDNfaHNsO2Z1bmN0aW9uIGQzX2hzbChoLHMsbCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkM19oc2w/dm9pZCAodGhpcy5oID0gK2gsdGhpcy5zID0gK3MsdGhpcy5sID0gK2wpOmFyZ3VtZW50cy5sZW5ndGggPCAyP2ggaW5zdGFuY2VvZiBkM19oc2w/bmV3IGQzX2hzbChoLmgsaC5zLGgubCk6ZDNfcmdiX3BhcnNlKFwiXCIgKyBoLGQzX3JnYl9oc2wsZDNfaHNsKTpuZXcgZDNfaHNsKGgscyxsKTt9dmFyIGQzX2hzbFByb3RvdHlwZT1kM19oc2wucHJvdG90eXBlID0gbmV3IGQzX2NvbG9yKCk7ZDNfaHNsUHJvdG90eXBlLmJyaWdodGVyID0gZnVuY3Rpb24oayl7ayA9IE1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/azoxKTtyZXR1cm4gbmV3IGQzX2hzbCh0aGlzLmgsdGhpcy5zLHRoaXMubCAvIGspO307ZDNfaHNsUHJvdG90eXBlLmRhcmtlciA9IGZ1bmN0aW9uKGspe2sgPSBNYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP2s6MSk7cmV0dXJuIG5ldyBkM19oc2wodGhpcy5oLHRoaXMucyxrICogdGhpcy5sKTt9O2QzX2hzbFByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbigpe3JldHVybiBkM19oc2xfcmdiKHRoaXMuaCx0aGlzLnMsdGhpcy5sKTt9O2Z1bmN0aW9uIGQzX2hzbF9yZ2IoaCxzLGwpe3ZhciBtMSxtMjtoID0gaXNOYU4oaCk/MDooaCAlPSAzNjApIDwgMD9oICsgMzYwOmg7cyA9IGlzTmFOKHMpPzA6cyA8IDA/MDpzID4gMT8xOnM7bCA9IGwgPCAwPzA6bCA+IDE/MTpsO20yID0gbCA8PSAuNT9sICogKDEgKyBzKTpsICsgcyAtIGwgKiBzO20xID0gMiAqIGwgLSBtMjtmdW5jdGlvbiB2KGgpe2lmKGggPiAzNjApaCAtPSAzNjA7ZWxzZSBpZihoIDwgMCloICs9IDM2MDtpZihoIDwgNjApcmV0dXJuIG0xICsgKG0yIC0gbTEpICogaCAvIDYwO2lmKGggPCAxODApcmV0dXJuIG0yO2lmKGggPCAyNDApcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjA7cmV0dXJuIG0xO31mdW5jdGlvbiB2dihoKXtyZXR1cm4gTWF0aC5yb3VuZCh2KGgpICogMjU1KTt9cmV0dXJuIG5ldyBkM19yZ2IodnYoaCArIDEyMCksdnYoaCksdnYoaCAtIDEyMCkpO31kMy5oY2wgPSBkM19oY2w7ZnVuY3Rpb24gZDNfaGNsKGgsYyxsKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGQzX2hjbD92b2lkICh0aGlzLmggPSAraCx0aGlzLmMgPSArYyx0aGlzLmwgPSArbCk6YXJndW1lbnRzLmxlbmd0aCA8IDI/aCBpbnN0YW5jZW9mIGQzX2hjbD9uZXcgZDNfaGNsKGguaCxoLmMsaC5sKTpoIGluc3RhbmNlb2YgZDNfbGFiP2QzX2xhYl9oY2woaC5sLGguYSxoLmIpOmQzX2xhYl9oY2woKGggPSBkM19yZ2JfbGFiKChoID0gZDMucmdiKGgpKS5yLGguZyxoLmIpKS5sLGguYSxoLmIpOm5ldyBkM19oY2woaCxjLGwpO312YXIgZDNfaGNsUHJvdG90eXBlPWQzX2hjbC5wcm90b3R5cGUgPSBuZXcgZDNfY29sb3IoKTtkM19oY2xQcm90b3R5cGUuYnJpZ2h0ZXIgPSBmdW5jdGlvbihrKXtyZXR1cm4gbmV3IGQzX2hjbCh0aGlzLmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwgKyBkM19sYWJfSyAqIChhcmd1bWVudHMubGVuZ3RoP2s6MSkpKTt9O2QzX2hjbFByb3RvdHlwZS5kYXJrZXIgPSBmdW5jdGlvbihrKXtyZXR1cm4gbmV3IGQzX2hjbCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sIC0gZDNfbGFiX0sgKiAoYXJndW1lbnRzLmxlbmd0aD9rOjEpKSk7fTtkM19oY2xQcm90b3R5cGUucmdiID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfaGNsX2xhYih0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCk7fTtmdW5jdGlvbiBkM19oY2xfbGFiKGgsYyxsKXtpZihpc05hTihoKSloID0gMDtpZihpc05hTihjKSljID0gMDtyZXR1cm4gbmV3IGQzX2xhYihsLE1hdGguY29zKGggKj0gZDNfcmFkaWFucykgKiBjLE1hdGguc2luKGgpICogYyk7fWQzLmxhYiA9IGQzX2xhYjtmdW5jdGlvbiBkM19sYWIobCxhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZDNfbGFiP3ZvaWQgKHRoaXMubCA9ICtsLHRoaXMuYSA9ICthLHRoaXMuYiA9ICtiKTphcmd1bWVudHMubGVuZ3RoIDwgMj9sIGluc3RhbmNlb2YgZDNfbGFiP25ldyBkM19sYWIobC5sLGwuYSxsLmIpOmwgaW5zdGFuY2VvZiBkM19oY2w/ZDNfaGNsX2xhYihsLmgsbC5jLGwubCk6ZDNfcmdiX2xhYigobCA9IGQzX3JnYihsKSkucixsLmcsbC5iKTpuZXcgZDNfbGFiKGwsYSxiKTt9dmFyIGQzX2xhYl9LPTE4O3ZhciBkM19sYWJfWD0uOTUwNDcsZDNfbGFiX1k9MSxkM19sYWJfWj0xLjA4ODgzO3ZhciBkM19sYWJQcm90b3R5cGU9ZDNfbGFiLnByb3RvdHlwZSA9IG5ldyBkM19jb2xvcigpO2QzX2xhYlByb3RvdHlwZS5icmlnaHRlciA9IGZ1bmN0aW9uKGspe3JldHVybiBuZXcgZDNfbGFiKE1hdGgubWluKDEwMCx0aGlzLmwgKyBkM19sYWJfSyAqIChhcmd1bWVudHMubGVuZ3RoP2s6MSkpLHRoaXMuYSx0aGlzLmIpO307ZDNfbGFiUHJvdG90eXBlLmRhcmtlciA9IGZ1bmN0aW9uKGspe3JldHVybiBuZXcgZDNfbGFiKE1hdGgubWF4KDAsdGhpcy5sIC0gZDNfbGFiX0sgKiAoYXJndW1lbnRzLmxlbmd0aD9rOjEpKSx0aGlzLmEsdGhpcy5iKTt9O2QzX2xhYlByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbigpe3JldHVybiBkM19sYWJfcmdiKHRoaXMubCx0aGlzLmEsdGhpcy5iKTt9O2Z1bmN0aW9uIGQzX2xhYl9yZ2IobCxhLGIpe3ZhciB5PShsICsgMTYpIC8gMTE2LHg9eSArIGEgLyA1MDAsej15IC0gYiAvIDIwMDt4ID0gZDNfbGFiX3h5eih4KSAqIGQzX2xhYl9YO3kgPSBkM19sYWJfeHl6KHkpICogZDNfbGFiX1k7eiA9IGQzX2xhYl94eXooeikgKiBkM19sYWJfWjtyZXR1cm4gbmV3IGQzX3JnYihkM194eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gLjQ5ODUzMTQgKiB6KSxkM194eXpfcmdiKC0uOTY5MjY2ICogeCArIDEuODc2MDEwOCAqIHkgKyAuMDQxNTU2ICogeiksZDNfeHl6X3JnYiguMDU1NjQzNCAqIHggLSAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSk7fWZ1bmN0aW9uIGQzX2xhYl9oY2wobCxhLGIpe3JldHVybiBsID4gMD9uZXcgZDNfaGNsKE1hdGguYXRhbjIoYixhKSAqIGQzX2RlZ3JlZXMsTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpLGwpOm5ldyBkM19oY2woTmFOLE5hTixsKTt9ZnVuY3Rpb24gZDNfbGFiX3h5eih4KXtyZXR1cm4geCA+IC4yMDY4OTMwMzQ/eCAqIHggKiB4Oih4IC0gNCAvIDI5KSAvIDcuNzg3MDM3O31mdW5jdGlvbiBkM194eXpfbGFiKHgpe3JldHVybiB4ID4gLjAwODg1Nj9NYXRoLnBvdyh4LDEgLyAzKTo3Ljc4NzAzNyAqIHggKyA0IC8gMjk7fWZ1bmN0aW9uIGQzX3h5el9yZ2Iocil7cmV0dXJuIE1hdGgucm91bmQoMjU1ICogKHIgPD0gLjAwMzA0PzEyLjkyICogcjoxLjA1NSAqIE1hdGgucG93KHIsMSAvIDIuNCkgLSAuMDU1KSk7fWQzLnJnYiA9IGQzX3JnYjtmdW5jdGlvbiBkM19yZ2IocixnLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZDNfcmdiP3ZvaWQgKHRoaXMuciA9IH4gfnIsdGhpcy5nID0gfiB+Zyx0aGlzLmIgPSB+IH5iKTphcmd1bWVudHMubGVuZ3RoIDwgMj9yIGluc3RhbmNlb2YgZDNfcmdiP25ldyBkM19yZ2Ioci5yLHIuZyxyLmIpOmQzX3JnYl9wYXJzZShcIlwiICsgcixkM19yZ2IsZDNfaHNsX3JnYik6bmV3IGQzX3JnYihyLGcsYik7fWZ1bmN0aW9uIGQzX3JnYk51bWJlcih2YWx1ZSl7cmV0dXJuIG5ldyBkM19yZ2IodmFsdWUgPj4gMTYsdmFsdWUgPj4gOCAmIDI1NSx2YWx1ZSAmIDI1NSk7fWZ1bmN0aW9uIGQzX3JnYlN0cmluZyh2YWx1ZSl7cmV0dXJuIGQzX3JnYk51bWJlcih2YWx1ZSkgKyBcIlwiO312YXIgZDNfcmdiUHJvdG90eXBlPWQzX3JnYi5wcm90b3R5cGUgPSBuZXcgZDNfY29sb3IoKTtkM19yZ2JQcm90b3R5cGUuYnJpZ2h0ZXIgPSBmdW5jdGlvbihrKXtrID0gTWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9rOjEpO3ZhciByPXRoaXMucixnPXRoaXMuZyxiPXRoaXMuYixpPTMwO2lmKCFyICYmICFnICYmICFiKXJldHVybiBuZXcgZDNfcmdiKGksaSxpKTtpZihyICYmIHIgPCBpKXIgPSBpO2lmKGcgJiYgZyA8IGkpZyA9IGk7aWYoYiAmJiBiIDwgaSliID0gaTtyZXR1cm4gbmV3IGQzX3JnYihNYXRoLm1pbigyNTUsciAvIGspLE1hdGgubWluKDI1NSxnIC8gayksTWF0aC5taW4oMjU1LGIgLyBrKSk7fTtkM19yZ2JQcm90b3R5cGUuZGFya2VyID0gZnVuY3Rpb24oayl7ayA9IE1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/azoxKTtyZXR1cm4gbmV3IGQzX3JnYihrICogdGhpcy5yLGsgKiB0aGlzLmcsayAqIHRoaXMuYik7fTtkM19yZ2JQcm90b3R5cGUuaHNsID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfcmdiX2hzbCh0aGlzLnIsdGhpcy5nLHRoaXMuYik7fTtkM19yZ2JQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiBcIiNcIiArIGQzX3JnYl9oZXgodGhpcy5yKSArIGQzX3JnYl9oZXgodGhpcy5nKSArIGQzX3JnYl9oZXgodGhpcy5iKTt9O2Z1bmN0aW9uIGQzX3JnYl9oZXgodil7cmV0dXJuIHYgPCAxNj9cIjBcIiArIE1hdGgubWF4KDAsdikudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx2KS50b1N0cmluZygxNik7fWZ1bmN0aW9uIGQzX3JnYl9wYXJzZShmb3JtYXQscmdiLGhzbCl7dmFyIHI9MCxnPTAsYj0wLG0xLG0yLGNvbG9yO20xID0gLyhbYS16XSspXFwoKC4qKVxcKS8uZXhlYyhmb3JtYXQgPSBmb3JtYXQudG9Mb3dlckNhc2UoKSk7aWYobTEpe20yID0gbTFbMl0uc3BsaXQoXCIsXCIpO3N3aXRjaChtMVsxXSl7Y2FzZSBcImhzbFwiOntyZXR1cm4gaHNsKHBhcnNlRmxvYXQobTJbMF0pLHBhcnNlRmxvYXQobTJbMV0pIC8gMTAwLHBhcnNlRmxvYXQobTJbMl0pIC8gMTAwKTt9Y2FzZSBcInJnYlwiOntyZXR1cm4gcmdiKGQzX3JnYl9wYXJzZU51bWJlcihtMlswXSksZDNfcmdiX3BhcnNlTnVtYmVyKG0yWzFdKSxkM19yZ2JfcGFyc2VOdW1iZXIobTJbMl0pKTt9fX1pZihjb2xvciA9IGQzX3JnYl9uYW1lcy5nZXQoZm9ybWF0KSl7cmV0dXJuIHJnYihjb2xvci5yLGNvbG9yLmcsY29sb3IuYik7fWlmKGZvcm1hdCAhPSBudWxsICYmIGZvcm1hdC5jaGFyQXQoMCkgPT09IFwiI1wiICYmICFpc05hTihjb2xvciA9IHBhcnNlSW50KGZvcm1hdC5zbGljZSgxKSwxNikpKXtpZihmb3JtYXQubGVuZ3RoID09PSA0KXtyID0gKGNvbG9yICYgMzg0MCkgPj4gNDtyID0gciA+PiA0IHwgcjtnID0gY29sb3IgJiAyNDA7ZyA9IGcgPj4gNCB8IGc7YiA9IGNvbG9yICYgMTU7YiA9IGIgPDwgNCB8IGI7fWVsc2UgaWYoZm9ybWF0Lmxlbmd0aCA9PT0gNyl7ciA9IChjb2xvciAmIDE2NzExNjgwKSA+PiAxNjtnID0gKGNvbG9yICYgNjUyODApID4+IDg7YiA9IGNvbG9yICYgMjU1O319cmV0dXJuIHJnYihyLGcsYik7fWZ1bmN0aW9uIGQzX3JnYl9oc2wocixnLGIpe3ZhciBtaW49TWF0aC5taW4ociAvPSAyNTUsZyAvPSAyNTUsYiAvPSAyNTUpLG1heD1NYXRoLm1heChyLGcsYiksZD1tYXggLSBtaW4saCxzLGw9KG1heCArIG1pbikgLyAyO2lmKGQpe3MgPSBsIDwgLjU/ZCAvIChtYXggKyBtaW4pOmQgLyAoMiAtIG1heCAtIG1pbik7aWYociA9PSBtYXgpaCA9IChnIC0gYikgLyBkICsgKGcgPCBiPzY6MCk7ZWxzZSBpZihnID09IG1heCloID0gKGIgLSByKSAvIGQgKyAyO2Vsc2UgaCA9IChyIC0gZykgLyBkICsgNDtoICo9IDYwO31lbHNlIHtoID0gTmFOO3MgPSBsID4gMCAmJiBsIDwgMT8wOmg7fXJldHVybiBuZXcgZDNfaHNsKGgscyxsKTt9ZnVuY3Rpb24gZDNfcmdiX2xhYihyLGcsYil7ciA9IGQzX3JnYl94eXoocik7ZyA9IGQzX3JnYl94eXooZyk7YiA9IGQzX3JnYl94eXooYik7dmFyIHg9ZDNfeHl6X2xhYigoLjQxMjQ1NjQgKiByICsgLjM1NzU3NjEgKiBnICsgLjE4MDQzNzUgKiBiKSAvIGQzX2xhYl9YKSx5PWQzX3h5el9sYWIoKC4yMTI2NzI5ICogciArIC43MTUxNTIyICogZyArIC4wNzIxNzUgKiBiKSAvIGQzX2xhYl9ZKSx6PWQzX3h5el9sYWIoKC4wMTkzMzM5ICogciArIC4xMTkxOTIgKiBnICsgLjk1MDMwNDEgKiBiKSAvIGQzX2xhYl9aKTtyZXR1cm4gZDNfbGFiKDExNiAqIHkgLSAxNiw1MDAgKiAoeCAtIHkpLDIwMCAqICh5IC0geikpO31mdW5jdGlvbiBkM19yZ2JfeHl6KHIpe3JldHVybiAociAvPSAyNTUpIDw9IC4wNDA0NT9yIC8gMTIuOTI6TWF0aC5wb3coKHIgKyAuMDU1KSAvIDEuMDU1LDIuNCk7fWZ1bmN0aW9uIGQzX3JnYl9wYXJzZU51bWJlcihjKXt2YXIgZj1wYXJzZUZsb2F0KGMpO3JldHVybiBjLmNoYXJBdChjLmxlbmd0aCAtIDEpID09PSBcIiVcIj9NYXRoLnJvdW5kKGYgKiAyLjU1KTpmO312YXIgZDNfcmdiX25hbWVzPWQzLm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7ZDNfcmdiX25hbWVzLmZvckVhY2goZnVuY3Rpb24oa2V5LHZhbHVlKXtkM19yZ2JfbmFtZXMuc2V0KGtleSxkM19yZ2JOdW1iZXIodmFsdWUpKTt9KTtmdW5jdGlvbiBkM19mdW5jdG9yKHYpe3JldHVybiB0eXBlb2YgdiA9PT0gXCJmdW5jdGlvblwiP3Y6ZnVuY3Rpb24oKXtyZXR1cm4gdjt9O31kMy5mdW5jdG9yID0gZDNfZnVuY3RvcjtkMy54aHIgPSBkM194aHJUeXBlKGQzX2lkZW50aXR5KTtmdW5jdGlvbiBkM194aHJUeXBlKHJlc3BvbnNlKXtyZXR1cm4gZnVuY3Rpb24odXJsLG1pbWVUeXBlLGNhbGxiYWNrKXtpZihhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBtaW1lVHlwZSA9PT0gXCJmdW5jdGlvblwiKWNhbGxiYWNrID0gbWltZVR5cGUsbWltZVR5cGUgPSBudWxsO3JldHVybiBkM194aHIodXJsLG1pbWVUeXBlLHJlc3BvbnNlLGNhbGxiYWNrKTt9O31mdW5jdGlvbiBkM194aHIodXJsLG1pbWVUeXBlLHJlc3BvbnNlLGNhbGxiYWNrKXt2YXIgeGhyPXt9LGRpc3BhdGNoPWQzLmRpc3BhdGNoKFwiYmVmb3Jlc2VuZFwiLFwicHJvZ3Jlc3NcIixcImxvYWRcIixcImVycm9yXCIpLGhlYWRlcnM9e30scmVxdWVzdD1uZXcgWE1MSHR0cFJlcXVlc3QoKSxyZXNwb25zZVR5cGU9bnVsbDtpZih0aGlzLlhEb21haW5SZXF1ZXN0ICYmICEoXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiByZXF1ZXN0KSAmJiAvXihodHRwKHMpPzopP1xcL1xcLy8udGVzdCh1cmwpKXJlcXVlc3QgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcIm9ubG9hZFwiIGluIHJlcXVlc3Q/cmVxdWVzdC5vbmxvYWQgPSByZXF1ZXN0Lm9uZXJyb3IgPSByZXNwb25kOnJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtyZXF1ZXN0LnJlYWR5U3RhdGUgPiAzICYmIHJlc3BvbmQoKTt9O2Z1bmN0aW9uIHJlc3BvbmQoKXt2YXIgc3RhdHVzPXJlcXVlc3Quc3RhdHVzLHJlc3VsdDtpZighc3RhdHVzICYmIGQzX3hockhhc1Jlc3BvbnNlKHJlcXVlc3QpIHx8IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0KXt0cnl7cmVzdWx0ID0gcmVzcG9uc2UuY2FsbCh4aHIscmVxdWVzdCk7fWNhdGNoKGUpIHtkaXNwYXRjaC5lcnJvci5jYWxsKHhocixlKTtyZXR1cm47fWRpc3BhdGNoLmxvYWQuY2FsbCh4aHIscmVzdWx0KTt9ZWxzZSB7ZGlzcGF0Y2guZXJyb3IuY2FsbCh4aHIscmVxdWVzdCk7fX1yZXF1ZXN0Lm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihldmVudCl7dmFyIG89ZDMuZXZlbnQ7ZDMuZXZlbnQgPSBldmVudDt0cnl7ZGlzcGF0Y2gucHJvZ3Jlc3MuY2FsbCh4aHIscmVxdWVzdCk7fWZpbmFsbHkge2QzLmV2ZW50ID0gbzt9fTt4aHIuaGVhZGVyID0gZnVuY3Rpb24obmFtZSx2YWx1ZSl7bmFtZSA9IChuYW1lICsgXCJcIikudG9Mb3dlckNhc2UoKTtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilyZXR1cm4gaGVhZGVyc1tuYW1lXTtpZih2YWx1ZSA9PSBudWxsKWRlbGV0ZSBoZWFkZXJzW25hbWVdO2Vsc2UgaGVhZGVyc1tuYW1lXSA9IHZhbHVlICsgXCJcIjtyZXR1cm4geGhyO307eGhyLm1pbWVUeXBlID0gZnVuY3Rpb24odmFsdWUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBtaW1lVHlwZTttaW1lVHlwZSA9IHZhbHVlID09IG51bGw/bnVsbDp2YWx1ZSArIFwiXCI7cmV0dXJuIHhocjt9O3hoci5yZXNwb25zZVR5cGUgPSBmdW5jdGlvbih2YWx1ZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJlc3BvbnNlVHlwZTtyZXNwb25zZVR5cGUgPSB2YWx1ZTtyZXR1cm4geGhyO307eGhyLnJlc3BvbnNlID0gZnVuY3Rpb24odmFsdWUpe3Jlc3BvbnNlID0gdmFsdWU7cmV0dXJuIHhocjt9O1tcImdldFwiLFwicG9zdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCl7eGhyW21ldGhvZF0gPSBmdW5jdGlvbigpe3JldHVybiB4aHIuc2VuZC5hcHBseSh4aHIsW21ldGhvZF0uY29uY2F0KGQzX2FycmF5KGFyZ3VtZW50cykpKTt9O30pO3hoci5zZW5kID0gZnVuY3Rpb24obWV0aG9kLGRhdGEsY2FsbGJhY2spe2lmKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIiljYWxsYmFjayA9IGRhdGEsZGF0YSA9IG51bGw7cmVxdWVzdC5vcGVuKG1ldGhvZCx1cmwsdHJ1ZSk7aWYobWltZVR5cGUgIT0gbnVsbCAmJiAhKFwiYWNjZXB0XCIgaW4gaGVhZGVycykpaGVhZGVyc1tcImFjY2VwdFwiXSA9IG1pbWVUeXBlICsgXCIsKi8qXCI7aWYocmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgbmFtZSBpbiBoZWFkZXJzKSByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIobmFtZSxoZWFkZXJzW25hbWVdKTtpZihtaW1lVHlwZSAhPSBudWxsICYmIHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSlyZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUobWltZVR5cGUpO2lmKHJlc3BvbnNlVHlwZSAhPSBudWxsKXJlcXVlc3QucmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlO2lmKGNhbGxiYWNrICE9IG51bGwpeGhyLm9uKFwiZXJyb3JcIixjYWxsYmFjaykub24oXCJsb2FkXCIsZnVuY3Rpb24ocmVxdWVzdCl7Y2FsbGJhY2sobnVsbCxyZXF1ZXN0KTt9KTtkaXNwYXRjaC5iZWZvcmVzZW5kLmNhbGwoeGhyLHJlcXVlc3QpO3JlcXVlc3Quc2VuZChkYXRhID09IG51bGw/bnVsbDpkYXRhKTtyZXR1cm4geGhyO307eGhyLmFib3J0ID0gZnVuY3Rpb24oKXtyZXF1ZXN0LmFib3J0KCk7cmV0dXJuIHhocjt9O2QzLnJlYmluZCh4aHIsZGlzcGF0Y2gsXCJvblwiKTtyZXR1cm4gY2FsbGJhY2sgPT0gbnVsbD94aHI6eGhyLmdldChkM194aHJfZml4Q2FsbGJhY2soY2FsbGJhY2spKTt9ZnVuY3Rpb24gZDNfeGhyX2ZpeENhbGxiYWNrKGNhbGxiYWNrKXtyZXR1cm4gY2FsbGJhY2subGVuZ3RoID09PSAxP2Z1bmN0aW9uKGVycm9yLHJlcXVlc3Qpe2NhbGxiYWNrKGVycm9yID09IG51bGw/cmVxdWVzdDpudWxsKTt9OmNhbGxiYWNrO31mdW5jdGlvbiBkM194aHJIYXNSZXNwb25zZShyZXF1ZXN0KXt2YXIgdHlwZT1yZXF1ZXN0LnJlc3BvbnNlVHlwZTtyZXR1cm4gdHlwZSAmJiB0eXBlICE9PSBcInRleHRcIj9yZXF1ZXN0LnJlc3BvbnNlOnJlcXVlc3QucmVzcG9uc2VUZXh0O31kMy5kc3YgPSBmdW5jdGlvbihkZWxpbWl0ZXIsbWltZVR5cGUpe3ZhciByZUZvcm1hdD1uZXcgUmVnRXhwKCdbXCInICsgZGVsaW1pdGVyICsgXCJcXG5dXCIpLGRlbGltaXRlckNvZGU9ZGVsaW1pdGVyLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gZHN2KHVybCxyb3csY2FsbGJhY2spe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKWNhbGxiYWNrID0gcm93LHJvdyA9IG51bGw7dmFyIHhocj1kM194aHIodXJsLG1pbWVUeXBlLHJvdyA9PSBudWxsP3Jlc3BvbnNlOnR5cGVkUmVzcG9uc2Uocm93KSxjYWxsYmFjayk7eGhyLnJvdyA9IGZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3hoci5yZXNwb25zZSgocm93ID0gXykgPT0gbnVsbD9yZXNwb25zZTp0eXBlZFJlc3BvbnNlKF8pKTpyb3c7fTtyZXR1cm4geGhyO31mdW5jdGlvbiByZXNwb25zZShyZXF1ZXN0KXtyZXR1cm4gZHN2LnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTt9ZnVuY3Rpb24gdHlwZWRSZXNwb25zZShmKXtyZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCl7cmV0dXJuIGRzdi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCxmKTt9O31kc3YucGFyc2UgPSBmdW5jdGlvbih0ZXh0LGYpe3ZhciBvO3JldHVybiBkc3YucGFyc2VSb3dzKHRleHQsZnVuY3Rpb24ocm93LGkpe2lmKG8pcmV0dXJuIG8ocm93LGkgLSAxKTt2YXIgYT1uZXcgRnVuY3Rpb24oXCJkXCIsXCJyZXR1cm4ge1wiICsgcm93Lm1hcChmdW5jdGlvbihuYW1lLGkpe3JldHVybiBKU09OLnN0cmluZ2lmeShuYW1lKSArIFwiOiBkW1wiICsgaSArIFwiXVwiO30pLmpvaW4oXCIsXCIpICsgXCJ9XCIpO28gPSBmP2Z1bmN0aW9uKHJvdyxpKXtyZXR1cm4gZihhKHJvdyksaSk7fTphO30pO307ZHN2LnBhcnNlUm93cyA9IGZ1bmN0aW9uKHRleHQsZil7dmFyIEVPTD17fSxFT0Y9e30scm93cz1bXSxOPXRleHQubGVuZ3RoLEk9MCxuPTAsdCxlb2w7ZnVuY3Rpb24gdG9rZW4oKXtpZihJID49IE4pcmV0dXJuIEVPRjtpZihlb2wpcmV0dXJuIGVvbCA9IGZhbHNlLEVPTDt2YXIgaj1JO2lmKHRleHQuY2hhckNvZGVBdChqKSA9PT0gMzQpe3ZhciBpPWo7d2hpbGUoaSsrIDwgTikge2lmKHRleHQuY2hhckNvZGVBdChpKSA9PT0gMzQpe2lmKHRleHQuY2hhckNvZGVBdChpICsgMSkgIT09IDM0KWJyZWFrOysraTt9fUkgPSBpICsgMjt2YXIgYz10ZXh0LmNoYXJDb2RlQXQoaSArIDEpO2lmKGMgPT09IDEzKXtlb2wgPSB0cnVlO2lmKHRleHQuY2hhckNvZGVBdChpICsgMikgPT09IDEwKSsrSTt9ZWxzZSBpZihjID09PSAxMCl7ZW9sID0gdHJ1ZTt9cmV0dXJuIHRleHQuc2xpY2UoaiArIDEsaSkucmVwbGFjZSgvXCJcIi9nLCdcIicpO313aGlsZShJIDwgTikge3ZhciBjPXRleHQuY2hhckNvZGVBdChJKyspLGs9MTtpZihjID09PSAxMCllb2wgPSB0cnVlO2Vsc2UgaWYoYyA9PT0gMTMpe2VvbCA9IHRydWU7aWYodGV4dC5jaGFyQ29kZUF0KEkpID09PSAxMCkrK0ksKytrO31lbHNlIGlmKGMgIT09IGRlbGltaXRlckNvZGUpY29udGludWU7cmV0dXJuIHRleHQuc2xpY2UoaixJIC0gayk7fXJldHVybiB0ZXh0LnNsaWNlKGopO313aGlsZSgodCA9IHRva2VuKCkpICE9PSBFT0YpIHt2YXIgYT1bXTt3aGlsZSh0ICE9PSBFT0wgJiYgdCAhPT0gRU9GKSB7YS5wdXNoKHQpO3QgPSB0b2tlbigpO31pZihmICYmIChhID0gZihhLG4rKykpID09IG51bGwpY29udGludWU7cm93cy5wdXNoKGEpO31yZXR1cm4gcm93czt9O2Rzdi5mb3JtYXQgPSBmdW5jdGlvbihyb3dzKXtpZihBcnJheS5pc0FycmF5KHJvd3NbMF0pKXJldHVybiBkc3YuZm9ybWF0Um93cyhyb3dzKTt2YXIgZmllbGRTZXQ9bmV3IGQzX1NldCgpLGZpZWxkcz1bXTtyb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KXtmb3IodmFyIGZpZWxkIGluIHJvdykge2lmKCFmaWVsZFNldC5oYXMoZmllbGQpKXtmaWVsZHMucHVzaChmaWVsZFNldC5hZGQoZmllbGQpKTt9fX0pO3JldHVybiBbZmllbGRzLm1hcChmb3JtYXRWYWx1ZSkuam9pbihkZWxpbWl0ZXIpXS5jb25jYXQocm93cy5tYXAoZnVuY3Rpb24ocm93KXtyZXR1cm4gZmllbGRzLm1hcChmdW5jdGlvbihmaWVsZCl7cmV0dXJuIGZvcm1hdFZhbHVlKHJvd1tmaWVsZF0pO30pLmpvaW4oZGVsaW1pdGVyKTt9KSkuam9pbihcIlxcblwiKTt9O2Rzdi5mb3JtYXRSb3dzID0gZnVuY3Rpb24ocm93cyl7cmV0dXJuIHJvd3MubWFwKGZvcm1hdFJvdykuam9pbihcIlxcblwiKTt9O2Z1bmN0aW9uIGZvcm1hdFJvdyhyb3cpe3JldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcik7fWZ1bmN0aW9uIGZvcm1hdFZhbHVlKHRleHQpe3JldHVybiByZUZvcm1hdC50ZXN0KHRleHQpPydcIicgKyB0ZXh0LnJlcGxhY2UoL1xcXCIvZywnXCJcIicpICsgJ1wiJzp0ZXh0O31yZXR1cm4gZHN2O307ZDMuY3N2ID0gZDMuZHN2KFwiLFwiLFwidGV4dC9jc3ZcIik7ZDMudHN2ID0gZDMuZHN2KFwiXHRcIixcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIik7dmFyIGQzX3RpbWVyX3F1ZXVlSGVhZCxkM190aW1lcl9xdWV1ZVRhaWwsZDNfdGltZXJfaW50ZXJ2YWwsZDNfdGltZXJfdGltZW91dCxkM190aW1lcl9mcmFtZT10aGlzW2QzX3ZlbmRvclN5bWJvbCh0aGlzLFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIpXSB8fCBmdW5jdGlvbihjYWxsYmFjayl7c2V0VGltZW91dChjYWxsYmFjaywxNyk7fTtkMy50aW1lciA9IGZ1bmN0aW9uKCl7ZDNfdGltZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO307ZnVuY3Rpb24gZDNfdGltZXIoY2FsbGJhY2ssZGVsYXksdGhlbil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuIDwgMilkZWxheSA9IDA7aWYobiA8IDMpdGhlbiA9IERhdGUubm93KCk7dmFyIHRpbWU9dGhlbiArIGRlbGF5LHRpbWVyPXtjOmNhbGxiYWNrLHQ6dGltZSxuOm51bGx9O2lmKGQzX3RpbWVyX3F1ZXVlVGFpbClkM190aW1lcl9xdWV1ZVRhaWwubiA9IHRpbWVyO2Vsc2UgZDNfdGltZXJfcXVldWVIZWFkID0gdGltZXI7ZDNfdGltZXJfcXVldWVUYWlsID0gdGltZXI7aWYoIWQzX3RpbWVyX2ludGVydmFsKXtkM190aW1lcl90aW1lb3V0ID0gY2xlYXJUaW1lb3V0KGQzX3RpbWVyX3RpbWVvdXQpO2QzX3RpbWVyX2ludGVydmFsID0gMTtkM190aW1lcl9mcmFtZShkM190aW1lcl9zdGVwKTt9cmV0dXJuIHRpbWVyO31mdW5jdGlvbiBkM190aW1lcl9zdGVwKCl7dmFyIG5vdz1kM190aW1lcl9tYXJrKCksZGVsYXk9ZDNfdGltZXJfc3dlZXAoKSAtIG5vdztpZihkZWxheSA+IDI0KXtpZihpc0Zpbml0ZShkZWxheSkpe2NsZWFyVGltZW91dChkM190aW1lcl90aW1lb3V0KTtkM190aW1lcl90aW1lb3V0ID0gc2V0VGltZW91dChkM190aW1lcl9zdGVwLGRlbGF5KTt9ZDNfdGltZXJfaW50ZXJ2YWwgPSAwO31lbHNlIHtkM190aW1lcl9pbnRlcnZhbCA9IDE7ZDNfdGltZXJfZnJhbWUoZDNfdGltZXJfc3RlcCk7fX1kMy50aW1lci5mbHVzaCA9IGZ1bmN0aW9uKCl7ZDNfdGltZXJfbWFyaygpO2QzX3RpbWVyX3N3ZWVwKCk7fTtmdW5jdGlvbiBkM190aW1lcl9tYXJrKCl7dmFyIG5vdz1EYXRlLm5vdygpLHRpbWVyPWQzX3RpbWVyX3F1ZXVlSGVhZDt3aGlsZSh0aW1lcikge2lmKG5vdyA+PSB0aW1lci50ICYmIHRpbWVyLmMobm93IC0gdGltZXIudCkpdGltZXIuYyA9IG51bGw7dGltZXIgPSB0aW1lci5uO31yZXR1cm4gbm93O31mdW5jdGlvbiBkM190aW1lcl9zd2VlcCgpe3ZhciB0MCx0MT1kM190aW1lcl9xdWV1ZUhlYWQsdGltZT1JbmZpbml0eTt3aGlsZSh0MSkge2lmKHQxLmMpe2lmKHQxLnQgPCB0aW1lKXRpbWUgPSB0MS50O3QxID0gKHQwID0gdDEpLm47fWVsc2Uge3QxID0gdDA/dDAubiA9IHQxLm46ZDNfdGltZXJfcXVldWVIZWFkID0gdDEubjt9fWQzX3RpbWVyX3F1ZXVlVGFpbCA9IHQwO3JldHVybiB0aW1lO31mdW5jdGlvbiBkM19mb3JtYXRfcHJlY2lzaW9uKHgscCl7cmV0dXJuIHAgLSAoeD9NYXRoLmNlaWwoTWF0aC5sb2coeCkgLyBNYXRoLkxOMTApOjEpO31kMy5yb3VuZCA9IGZ1bmN0aW9uKHgsbil7cmV0dXJuIG4/TWF0aC5yb3VuZCh4ICogKG4gPSBNYXRoLnBvdygxMCxuKSkpIC8gbjpNYXRoLnJvdW5kKHgpO307dmFyIGQzX2Zvcm1hdFByZWZpeGVzPVtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl0ubWFwKGQzX2Zvcm1hdFByZWZpeCk7ZDMuZm9ybWF0UHJlZml4ID0gZnVuY3Rpb24odmFsdWUscHJlY2lzaW9uKXt2YXIgaT0wO2lmKHZhbHVlID0gK3ZhbHVlKXtpZih2YWx1ZSA8IDApdmFsdWUgKj0gLTE7aWYocHJlY2lzaW9uKXZhbHVlID0gZDMucm91bmQodmFsdWUsZDNfZm9ybWF0X3ByZWNpc2lvbih2YWx1ZSxwcmVjaXNpb24pKTtpID0gMSArIE1hdGguZmxvb3IoMWUtMTIgKyBNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMTApO2kgPSBNYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsTWF0aC5mbG9vcigoaSAtIDEpIC8gMykgKiAzKSk7fXJldHVybiBkM19mb3JtYXRQcmVmaXhlc1s4ICsgaSAvIDNdO307ZnVuY3Rpb24gZDNfZm9ybWF0UHJlZml4KGQsaSl7dmFyIGs9TWF0aC5wb3coMTAsYWJzKDggLSBpKSAqIDMpO3JldHVybiB7c2NhbGU6aSA+IDg/ZnVuY3Rpb24oZCl7cmV0dXJuIGQgLyBrO306ZnVuY3Rpb24oZCl7cmV0dXJuIGQgKiBrO30sc3ltYm9sOmR9O31mdW5jdGlvbiBkM19sb2NhbGVfbnVtYmVyRm9ybWF0KGxvY2FsZSl7dmFyIGxvY2FsZV9kZWNpbWFsPWxvY2FsZS5kZWNpbWFsLGxvY2FsZV90aG91c2FuZHM9bG9jYWxlLnRob3VzYW5kcyxsb2NhbGVfZ3JvdXBpbmc9bG9jYWxlLmdyb3VwaW5nLGxvY2FsZV9jdXJyZW5jeT1sb2NhbGUuY3VycmVuY3ksZm9ybWF0R3JvdXA9bG9jYWxlX2dyb3VwaW5nICYmIGxvY2FsZV90aG91c2FuZHM/ZnVuY3Rpb24odmFsdWUsd2lkdGgpe3ZhciBpPXZhbHVlLmxlbmd0aCx0PVtdLGo9MCxnPWxvY2FsZV9ncm91cGluZ1swXSxsZW5ndGg9MDt3aGlsZShpID4gMCAmJiBnID4gMCkge2lmKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpZyA9IE1hdGgubWF4KDEsd2lkdGggLSBsZW5ndGgpO3QucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLGkgKyBnKSk7aWYoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aClicmVhaztnID0gbG9jYWxlX2dyb3VwaW5nW2ogPSAoaiArIDEpICUgbG9jYWxlX2dyb3VwaW5nLmxlbmd0aF07fXJldHVybiB0LnJldmVyc2UoKS5qb2luKGxvY2FsZV90aG91c2FuZHMpO306ZDNfaWRlbnRpdHk7cmV0dXJuIGZ1bmN0aW9uKHNwZWNpZmllcil7dmFyIG1hdGNoPWQzX2Zvcm1hdF9yZS5leGVjKHNwZWNpZmllciksZmlsbD1tYXRjaFsxXSB8fCBcIiBcIixhbGlnbj1tYXRjaFsyXSB8fCBcIj5cIixzaWduPW1hdGNoWzNdIHx8IFwiLVwiLHN5bWJvbD1tYXRjaFs0XSB8fCBcIlwiLHpmaWxsPW1hdGNoWzVdLHdpZHRoPSttYXRjaFs2XSxjb21tYT1tYXRjaFs3XSxwcmVjaXNpb249bWF0Y2hbOF0sdHlwZT1tYXRjaFs5XSxzY2FsZT0xLHByZWZpeD1cIlwiLHN1ZmZpeD1cIlwiLGludGVnZXI9ZmFsc2UsZXhwb25lbnQ9dHJ1ZTtpZihwcmVjaXNpb24pcHJlY2lzaW9uID0gK3ByZWNpc2lvbi5zdWJzdHJpbmcoMSk7aWYoemZpbGwgfHwgZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKXt6ZmlsbCA9IGZpbGwgPSBcIjBcIjthbGlnbiA9IFwiPVwiO31zd2l0Y2godHlwZSl7Y2FzZSBcIm5cIjpjb21tYSA9IHRydWU7dHlwZSA9IFwiZ1wiO2JyZWFrO2Nhc2UgXCIlXCI6c2NhbGUgPSAxMDA7c3VmZml4ID0gXCIlXCI7dHlwZSA9IFwiZlwiO2JyZWFrO2Nhc2UgXCJwXCI6c2NhbGUgPSAxMDA7c3VmZml4ID0gXCIlXCI7dHlwZSA9IFwiclwiO2JyZWFrO2Nhc2UgXCJiXCI6Y2FzZSBcIm9cIjpjYXNlIFwieFwiOmNhc2UgXCJYXCI6aWYoc3ltYm9sID09PSBcIiNcIilwcmVmaXggPSBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKTtjYXNlIFwiY1wiOmV4cG9uZW50ID0gZmFsc2U7Y2FzZSBcImRcIjppbnRlZ2VyID0gdHJ1ZTtwcmVjaXNpb24gPSAwO2JyZWFrO2Nhc2UgXCJzXCI6c2NhbGUgPSAtMTt0eXBlID0gXCJyXCI7YnJlYWs7fWlmKHN5bWJvbCA9PT0gXCIkXCIpcHJlZml4ID0gbG9jYWxlX2N1cnJlbmN5WzBdLHN1ZmZpeCA9IGxvY2FsZV9jdXJyZW5jeVsxXTtpZih0eXBlID09IFwiclwiICYmICFwcmVjaXNpb24pdHlwZSA9IFwiZ1wiO2lmKHByZWNpc2lvbiAhPSBudWxsKXtpZih0eXBlID09IFwiZ1wiKXByZWNpc2lvbiA9IE1hdGgubWF4KDEsTWF0aC5taW4oMjEscHJlY2lzaW9uKSk7ZWxzZSBpZih0eXBlID09IFwiZVwiIHx8IHR5cGUgPT0gXCJmXCIpcHJlY2lzaW9uID0gTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwcmVjaXNpb24pKTt9dHlwZSA9IGQzX2Zvcm1hdF90eXBlcy5nZXQodHlwZSkgfHwgZDNfZm9ybWF0X3R5cGVEZWZhdWx0O3ZhciB6Y29tbWE9emZpbGwgJiYgY29tbWE7cmV0dXJuIGZ1bmN0aW9uKHZhbHVlKXt2YXIgZnVsbFN1ZmZpeD1zdWZmaXg7aWYoaW50ZWdlciAmJiB2YWx1ZSAlIDEpcmV0dXJuIFwiXCI7dmFyIG5lZ2F0aXZlPXZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwPyh2YWx1ZSA9IC12YWx1ZSxcIi1cIik6c2lnbiA9PT0gXCItXCI/XCJcIjpzaWduO2lmKHNjYWxlIDwgMCl7dmFyIHVuaXQ9ZDMuZm9ybWF0UHJlZml4KHZhbHVlLHByZWNpc2lvbik7dmFsdWUgPSB1bml0LnNjYWxlKHZhbHVlKTtmdWxsU3VmZml4ID0gdW5pdC5zeW1ib2wgKyBzdWZmaXg7fWVsc2Uge3ZhbHVlICo9IHNjYWxlO312YWx1ZSA9IHR5cGUodmFsdWUscHJlY2lzaW9uKTt2YXIgaT12YWx1ZS5sYXN0SW5kZXhPZihcIi5cIiksYmVmb3JlLGFmdGVyO2lmKGkgPCAwKXt2YXIgaj1leHBvbmVudD92YWx1ZS5sYXN0SW5kZXhPZihcImVcIik6LTE7aWYoaiA8IDApYmVmb3JlID0gdmFsdWUsYWZ0ZXIgPSBcIlwiO2Vsc2UgYmVmb3JlID0gdmFsdWUuc3Vic3RyaW5nKDAsaiksYWZ0ZXIgPSB2YWx1ZS5zdWJzdHJpbmcoaik7fWVsc2Uge2JlZm9yZSA9IHZhbHVlLnN1YnN0cmluZygwLGkpO2FmdGVyID0gbG9jYWxlX2RlY2ltYWwgKyB2YWx1ZS5zdWJzdHJpbmcoaSArIDEpO31pZighemZpbGwgJiYgY29tbWEpYmVmb3JlID0gZm9ybWF0R3JvdXAoYmVmb3JlLEluZmluaXR5KTt2YXIgbGVuZ3RoPXByZWZpeC5sZW5ndGggKyBiZWZvcmUubGVuZ3RoICsgYWZ0ZXIubGVuZ3RoICsgKHpjb21tYT8wOm5lZ2F0aXZlLmxlbmd0aCkscGFkZGluZz1sZW5ndGggPCB3aWR0aD9uZXcgQXJyYXkobGVuZ3RoID0gd2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpOlwiXCI7aWYoemNvbW1hKWJlZm9yZSA9IGZvcm1hdEdyb3VwKHBhZGRpbmcgKyBiZWZvcmUscGFkZGluZy5sZW5ndGg/d2lkdGggLSBhZnRlci5sZW5ndGg6SW5maW5pdHkpO25lZ2F0aXZlICs9IHByZWZpeDt2YWx1ZSA9IGJlZm9yZSArIGFmdGVyO3JldHVybiAoYWxpZ24gPT09IFwiPFwiP25lZ2F0aXZlICsgdmFsdWUgKyBwYWRkaW5nOmFsaWduID09PSBcIj5cIj9wYWRkaW5nICsgbmVnYXRpdmUgKyB2YWx1ZTphbGlnbiA9PT0gXCJeXCI/cGFkZGluZy5zdWJzdHJpbmcoMCxsZW5ndGggPj49IDEpICsgbmVnYXRpdmUgKyB2YWx1ZSArIHBhZGRpbmcuc3Vic3RyaW5nKGxlbmd0aCk6bmVnYXRpdmUgKyAoemNvbW1hP3ZhbHVlOnBhZGRpbmcgKyB2YWx1ZSkpICsgZnVsbFN1ZmZpeDt9O307fXZhciBkM19mb3JtYXRfcmU9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXFwtIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuLT9cXGQrKT8oW2EteiVdKT8vaTt2YXIgZDNfZm9ybWF0X3R5cGVzPWQzLm1hcCh7YjpmdW5jdGlvbiBiKHgpe3JldHVybiB4LnRvU3RyaW5nKDIpO30sYzpmdW5jdGlvbiBjKHgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHgpO30sbzpmdW5jdGlvbiBvKHgpe3JldHVybiB4LnRvU3RyaW5nKDgpO30seDpmdW5jdGlvbiB4KF94KXtyZXR1cm4gX3gudG9TdHJpbmcoMTYpO30sWDpmdW5jdGlvbiBYKHgpe3JldHVybiB4LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO30sZzpmdW5jdGlvbiBnKHgscCl7cmV0dXJuIHgudG9QcmVjaXNpb24ocCk7fSxlOmZ1bmN0aW9uIGUoeCxwKXtyZXR1cm4geC50b0V4cG9uZW50aWFsKHApO30sZjpmdW5jdGlvbiBmKHgscCl7cmV0dXJuIHgudG9GaXhlZChwKTt9LHI6ZnVuY3Rpb24gcih4LHApe3JldHVybiAoeCA9IGQzLnJvdW5kKHgsZDNfZm9ybWF0X3ByZWNpc2lvbih4LHApKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLGQzX2Zvcm1hdF9wcmVjaXNpb24oeCAqICgxICsgMWUtMTUpLHApKSkpO319KTtmdW5jdGlvbiBkM19mb3JtYXRfdHlwZURlZmF1bHQoeCl7cmV0dXJuIHggKyBcIlwiO312YXIgZDNfdGltZT1kMy50aW1lID0ge30sZDNfZGF0ZT1EYXRlO2Z1bmN0aW9uIGQzX2RhdGVfdXRjKCl7dGhpcy5fID0gbmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aCA+IDE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSk7fWQzX2RhdGVfdXRjLnByb3RvdHlwZSA9IHtnZXREYXRlOmZ1bmN0aW9uIGdldERhdGUoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKTt9LGdldERheTpmdW5jdGlvbiBnZXREYXkoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RheSgpO30sZ2V0RnVsbFllYXI6ZnVuY3Rpb24gZ2V0RnVsbFllYXIoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCk7fSxnZXRIb3VyczpmdW5jdGlvbiBnZXRIb3Vycygpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKTt9LGdldE1pbGxpc2Vjb25kczpmdW5jdGlvbiBnZXRNaWxsaXNlY29uZHMoKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpO30sZ2V0TWludXRlczpmdW5jdGlvbiBnZXRNaW51dGVzKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCk7fSxnZXRNb250aDpmdW5jdGlvbiBnZXRNb250aCgpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKTt9LGdldFNlY29uZHM6ZnVuY3Rpb24gZ2V0U2Vjb25kcygpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpO30sZ2V0VGltZTpmdW5jdGlvbiBnZXRUaW1lKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCk7fSxnZXRUaW1lem9uZU9mZnNldDpmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldCgpe3JldHVybiAwO30sdmFsdWVPZjpmdW5jdGlvbiB2YWx1ZU9mKCl7cmV0dXJuIHRoaXMuXy52YWx1ZU9mKCk7fSxzZXREYXRlOmZ1bmN0aW9uIHNldERhdGUoKXtkM190aW1lX3Byb3RvdHlwZS5zZXRVVENEYXRlLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO30sc2V0RGF5OmZ1bmN0aW9uIHNldERheSgpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTt9LHNldEZ1bGxZZWFyOmZ1bmN0aW9uIHNldEZ1bGxZZWFyKCl7ZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDRnVsbFllYXIuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7fSxzZXRIb3VyczpmdW5jdGlvbiBzZXRIb3Vycygpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO30sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uIHNldE1pbGxpc2Vjb25kcygpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ01pbGxpc2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTt9LHNldE1pbnV0ZXM6ZnVuY3Rpb24gc2V0TWludXRlcygpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ01pbnV0ZXMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7fSxzZXRNb250aDpmdW5jdGlvbiBzZXRNb250aCgpe2QzX3RpbWVfcHJvdG90eXBlLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO30sc2V0U2Vjb25kczpmdW5jdGlvbiBzZXRTZWNvbmRzKCl7ZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTt9LHNldFRpbWU6ZnVuY3Rpb24gc2V0VGltZSgpe2QzX3RpbWVfcHJvdG90eXBlLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7fX07dmFyIGQzX3RpbWVfcHJvdG90eXBlPURhdGUucHJvdG90eXBlO2Z1bmN0aW9uIGQzX3RpbWVfaW50ZXJ2YWwobG9jYWwsc3RlcCxudW1iZXIpe2Z1bmN0aW9uIHJvdW5kKGRhdGUpe3ZhciBkMD1sb2NhbChkYXRlKSxkMT1vZmZzZXQoZDAsMSk7cmV0dXJuIGRhdGUgLSBkMCA8IGQxIC0gZGF0ZT9kMDpkMTt9ZnVuY3Rpb24gY2VpbChkYXRlKXtzdGVwKGRhdGUgPSBsb2NhbChuZXcgZDNfZGF0ZShkYXRlIC0gMSkpLDEpO3JldHVybiBkYXRlO31mdW5jdGlvbiBvZmZzZXQoZGF0ZSxrKXtzdGVwKGRhdGUgPSBuZXcgZDNfZGF0ZSgrZGF0ZSksayk7cmV0dXJuIGRhdGU7fWZ1bmN0aW9uIHJhbmdlKHQwLHQxLGR0KXt2YXIgdGltZT1jZWlsKHQwKSx0aW1lcz1bXTtpZihkdCA+IDEpe3doaWxlKHRpbWUgPCB0MSkge2lmKCEobnVtYmVyKHRpbWUpICUgZHQpKXRpbWVzLnB1c2gobmV3IERhdGUoK3RpbWUpKTtzdGVwKHRpbWUsMSk7fX1lbHNlIHt3aGlsZSh0aW1lIDwgdDEpIHRpbWVzLnB1c2gobmV3IERhdGUoK3RpbWUpKSxzdGVwKHRpbWUsMSk7fXJldHVybiB0aW1lczt9ZnVuY3Rpb24gcmFuZ2VfdXRjKHQwLHQxLGR0KXt0cnl7ZDNfZGF0ZSA9IGQzX2RhdGVfdXRjO3ZhciB1dGM9bmV3IGQzX2RhdGVfdXRjKCk7dXRjLl8gPSB0MDtyZXR1cm4gcmFuZ2UodXRjLHQxLGR0KTt9ZmluYWxseSB7ZDNfZGF0ZSA9IERhdGU7fX1sb2NhbC5mbG9vciA9IGxvY2FsO2xvY2FsLnJvdW5kID0gcm91bmQ7bG9jYWwuY2VpbCA9IGNlaWw7bG9jYWwub2Zmc2V0ID0gb2Zmc2V0O2xvY2FsLnJhbmdlID0gcmFuZ2U7dmFyIHV0Yz1sb2NhbC51dGMgPSBkM190aW1lX2ludGVydmFsX3V0Yyhsb2NhbCk7dXRjLmZsb29yID0gdXRjO3V0Yy5yb3VuZCA9IGQzX3RpbWVfaW50ZXJ2YWxfdXRjKHJvdW5kKTt1dGMuY2VpbCA9IGQzX3RpbWVfaW50ZXJ2YWxfdXRjKGNlaWwpO3V0Yy5vZmZzZXQgPSBkM190aW1lX2ludGVydmFsX3V0YyhvZmZzZXQpO3V0Yy5yYW5nZSA9IHJhbmdlX3V0YztyZXR1cm4gbG9jYWw7fWZ1bmN0aW9uIGQzX3RpbWVfaW50ZXJ2YWxfdXRjKG1ldGhvZCl7cmV0dXJuIGZ1bmN0aW9uKGRhdGUsayl7dHJ5e2QzX2RhdGUgPSBkM19kYXRlX3V0Yzt2YXIgdXRjPW5ldyBkM19kYXRlX3V0YygpO3V0Yy5fID0gZGF0ZTtyZXR1cm4gbWV0aG9kKHV0YyxrKS5fO31maW5hbGx5IHtkM19kYXRlID0gRGF0ZTt9fTt9ZDNfdGltZS55ZWFyID0gZDNfdGltZV9pbnRlcnZhbChmdW5jdGlvbihkYXRlKXtkYXRlID0gZDNfdGltZS5kYXkoZGF0ZSk7ZGF0ZS5zZXRNb250aCgwLDEpO3JldHVybiBkYXRlO30sZnVuY3Rpb24oZGF0ZSxvZmZzZXQpe2RhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgb2Zmc2V0KTt9LGZ1bmN0aW9uKGRhdGUpe3JldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7fSk7ZDNfdGltZS55ZWFycyA9IGQzX3RpbWUueWVhci5yYW5nZTtkM190aW1lLnllYXJzLnV0YyA9IGQzX3RpbWUueWVhci51dGMucmFuZ2U7ZDNfdGltZS5kYXkgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe3ZhciBkYXk9bmV3IGQzX2RhdGUoMmUzLDApO2RheS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksZGF0ZS5nZXRNb250aCgpLGRhdGUuZ2V0RGF0ZSgpKTtyZXR1cm4gZGF5O30sZnVuY3Rpb24oZGF0ZSxvZmZzZXQpe2RhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIG9mZnNldCk7fSxmdW5jdGlvbihkYXRlKXtyZXR1cm4gZGF0ZS5nZXREYXRlKCkgLSAxO30pO2QzX3RpbWUuZGF5cyA9IGQzX3RpbWUuZGF5LnJhbmdlO2QzX3RpbWUuZGF5cy51dGMgPSBkM190aW1lLmRheS51dGMucmFuZ2U7ZDNfdGltZS5kYXlPZlllYXIgPSBmdW5jdGlvbihkYXRlKXt2YXIgeWVhcj1kM190aW1lLnllYXIoZGF0ZSk7cmV0dXJuIE1hdGguZmxvb3IoKGRhdGUgLSB5ZWFyIC0gKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHllYXIuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2ZTQpIC8gODY0ZTUpO307W1wic3VuZGF5XCIsXCJtb25kYXlcIixcInR1ZXNkYXlcIixcIndlZG5lc2RheVwiLFwidGh1cnNkYXlcIixcImZyaWRheVwiLFwic2F0dXJkYXlcIl0uZm9yRWFjaChmdW5jdGlvbihkYXksaSl7aSA9IDcgLSBpO3ZhciBpbnRlcnZhbD1kM190aW1lW2RheV0gPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpeyhkYXRlID0gZDNfdGltZS5kYXkoZGF0ZSkpLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIGkpICUgNyk7cmV0dXJuIGRhdGU7fSxmdW5jdGlvbihkYXRlLG9mZnNldCl7ZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogNyk7fSxmdW5jdGlvbihkYXRlKXt2YXIgZGF5PWQzX3RpbWUueWVhcihkYXRlKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoZDNfdGltZS5kYXlPZlllYXIoZGF0ZSkgKyAoZGF5ICsgaSkgJSA3KSAvIDcpIC0gKGRheSAhPT0gaSk7fSk7ZDNfdGltZVtkYXkgKyBcInNcIl0gPSBpbnRlcnZhbC5yYW5nZTtkM190aW1lW2RheSArIFwic1wiXS51dGMgPSBpbnRlcnZhbC51dGMucmFuZ2U7ZDNfdGltZVtkYXkgKyBcIk9mWWVhclwiXSA9IGZ1bmN0aW9uKGRhdGUpe3ZhciBkYXk9ZDNfdGltZS55ZWFyKGRhdGUpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChkM190aW1lLmRheU9mWWVhcihkYXRlKSArIChkYXkgKyBpKSAlIDcpIC8gNyk7fTt9KTtkM190aW1lLndlZWsgPSBkM190aW1lLnN1bmRheTtkM190aW1lLndlZWtzID0gZDNfdGltZS5zdW5kYXkucmFuZ2U7ZDNfdGltZS53ZWVrcy51dGMgPSBkM190aW1lLnN1bmRheS51dGMucmFuZ2U7ZDNfdGltZS53ZWVrT2ZZZWFyID0gZDNfdGltZS5zdW5kYXlPZlllYXI7ZnVuY3Rpb24gZDNfbG9jYWxlX3RpbWVGb3JtYXQobG9jYWxlKXt2YXIgbG9jYWxlX2RhdGVUaW1lPWxvY2FsZS5kYXRlVGltZSxsb2NhbGVfZGF0ZT1sb2NhbGUuZGF0ZSxsb2NhbGVfdGltZT1sb2NhbGUudGltZSxsb2NhbGVfcGVyaW9kcz1sb2NhbGUucGVyaW9kcyxsb2NhbGVfZGF5cz1sb2NhbGUuZGF5cyxsb2NhbGVfc2hvcnREYXlzPWxvY2FsZS5zaG9ydERheXMsbG9jYWxlX21vbnRocz1sb2NhbGUubW9udGhzLGxvY2FsZV9zaG9ydE1vbnRocz1sb2NhbGUuc2hvcnRNb250aHM7ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXQodGVtcGxhdGUpe3ZhciBuPXRlbXBsYXRlLmxlbmd0aDtmdW5jdGlvbiBmb3JtYXQoZGF0ZSl7dmFyIHN0cmluZz1bXSxpPS0xLGo9MCxjLHAsZjt3aGlsZSgrK2kgPCBuKSB7aWYodGVtcGxhdGUuY2hhckNvZGVBdChpKSA9PT0gMzcpe3N0cmluZy5wdXNoKHRlbXBsYXRlLnNsaWNlKGosaSkpO2lmKChwID0gZDNfdGltZV9mb3JtYXRQYWRzW2MgPSB0ZW1wbGF0ZS5jaGFyQXQoKytpKV0pICE9IG51bGwpYyA9IHRlbXBsYXRlLmNoYXJBdCgrK2kpO2lmKGYgPSBkM190aW1lX2Zvcm1hdHNbY10pYyA9IGYoZGF0ZSxwID09IG51bGw/YyA9PT0gXCJlXCI/XCIgXCI6XCIwXCI6cCk7c3RyaW5nLnB1c2goYyk7aiA9IGkgKyAxO319c3RyaW5nLnB1c2godGVtcGxhdGUuc2xpY2UoaixpKSk7cmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO31mb3JtYXQucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcpe3ZhciBkPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfSxpPWQzX3RpbWVfcGFyc2UoZCx0ZW1wbGF0ZSxzdHJpbmcsMCk7aWYoaSAhPSBzdHJpbmcubGVuZ3RoKXJldHVybiBudWxsO2lmKFwicFwiIGluIGQpZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjt2YXIgbG9jYWxaPWQuWiAhPSBudWxsICYmIGQzX2RhdGUgIT09IGQzX2RhdGVfdXRjLGRhdGU9bmV3IChsb2NhbFo/ZDNfZGF0ZV91dGM6ZDNfZGF0ZSkoKTtpZihcImpcIiBpbiBkKWRhdGUuc2V0RnVsbFllYXIoZC55LDAsZC5qKTtlbHNlIGlmKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCl7aWYoIShcIndcIiBpbiBkKSlkLncgPSBcIldcIiBpbiBkPzE6MDtkYXRlLnNldEZ1bGxZZWFyKGQueSwwLDEpO2RhdGUuc2V0RnVsbFllYXIoZC55LDAsXCJXXCIgaW4gZD8oZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXRlLmdldERheSgpICsgNSkgJSA3OmQudyArIGQuVSAqIDcgLSAoZGF0ZS5nZXREYXkoKSArIDYpICUgNyk7fWVsc2UgZGF0ZS5zZXRGdWxsWWVhcihkLnksZC5tLGQuZCk7ZGF0ZS5zZXRIb3VycyhkLkggKyAoZC5aIC8gMTAwIHwgMCksZC5NICsgZC5aICUgMTAwLGQuUyxkLkwpO3JldHVybiBsb2NhbFo/ZGF0ZS5fOmRhdGU7fTtmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpe3JldHVybiB0ZW1wbGF0ZTt9O3JldHVybiBmb3JtYXQ7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2UoZGF0ZSx0ZW1wbGF0ZSxzdHJpbmcsail7dmFyIGMscCx0LGk9MCxuPXRlbXBsYXRlLmxlbmd0aCxtPXN0cmluZy5sZW5ndGg7d2hpbGUoaSA8IG4pIHtpZihqID49IG0pcmV0dXJuIC0xO2MgPSB0ZW1wbGF0ZS5jaGFyQ29kZUF0KGkrKyk7aWYoYyA9PT0gMzcpe3QgPSB0ZW1wbGF0ZS5jaGFyQXQoaSsrKTtwID0gZDNfdGltZV9wYXJzZXJzW3QgaW4gZDNfdGltZV9mb3JtYXRQYWRzP3RlbXBsYXRlLmNoYXJBdChpKyspOnRdO2lmKCFwIHx8IChqID0gcChkYXRlLHN0cmluZyxqKSkgPCAwKXJldHVybiAtMTt9ZWxzZSBpZihjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpe3JldHVybiAtMTt9fXJldHVybiBqO31kM190aW1lX2Zvcm1hdC51dGMgPSBmdW5jdGlvbih0ZW1wbGF0ZSl7dmFyIGxvY2FsPWQzX3RpbWVfZm9ybWF0KHRlbXBsYXRlKTtmdW5jdGlvbiBmb3JtYXQoZGF0ZSl7dHJ5e2QzX2RhdGUgPSBkM19kYXRlX3V0Yzt2YXIgdXRjPW5ldyBkM19kYXRlKCk7dXRjLl8gPSBkYXRlO3JldHVybiBsb2NhbCh1dGMpO31maW5hbGx5IHtkM19kYXRlID0gRGF0ZTt9fWZvcm1hdC5wYXJzZSA9IGZ1bmN0aW9uKHN0cmluZyl7dHJ5e2QzX2RhdGUgPSBkM19kYXRlX3V0Yzt2YXIgZGF0ZT1sb2NhbC5wYXJzZShzdHJpbmcpO3JldHVybiBkYXRlICYmIGRhdGUuXzt9ZmluYWxseSB7ZDNfZGF0ZSA9IERhdGU7fX07Zm9ybWF0LnRvU3RyaW5nID0gbG9jYWwudG9TdHJpbmc7cmV0dXJuIGZvcm1hdDt9O2QzX3RpbWVfZm9ybWF0Lm11bHRpID0gZDNfdGltZV9mb3JtYXQudXRjLm11bHRpID0gZDNfdGltZV9mb3JtYXRNdWx0aTt2YXIgZDNfdGltZV9wZXJpb2RMb29rdXA9ZDMubWFwKCksZDNfdGltZV9kYXlSZT1kM190aW1lX2Zvcm1hdFJlKGxvY2FsZV9kYXlzKSxkM190aW1lX2RheUxvb2t1cD1kM190aW1lX2Zvcm1hdExvb2t1cChsb2NhbGVfZGF5cyksZDNfdGltZV9kYXlBYmJyZXZSZT1kM190aW1lX2Zvcm1hdFJlKGxvY2FsZV9zaG9ydERheXMpLGQzX3RpbWVfZGF5QWJicmV2TG9va3VwPWQzX3RpbWVfZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydERheXMpLGQzX3RpbWVfbW9udGhSZT1kM190aW1lX2Zvcm1hdFJlKGxvY2FsZV9tb250aHMpLGQzX3RpbWVfbW9udGhMb29rdXA9ZDNfdGltZV9mb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksZDNfdGltZV9tb250aEFiYnJldlJlPWQzX3RpbWVfZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxkM190aW1lX21vbnRoQWJicmV2TG9va3VwPWQzX3RpbWVfZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7bG9jYWxlX3BlcmlvZHMuZm9yRWFjaChmdW5jdGlvbihwLGkpe2QzX3RpbWVfcGVyaW9kTG9va3VwLnNldChwLnRvTG93ZXJDYXNlKCksaSk7fSk7dmFyIGQzX3RpbWVfZm9ybWF0cz17YTpmdW5jdGlvbiBhKGQpe3JldHVybiBsb2NhbGVfc2hvcnREYXlzW2QuZ2V0RGF5KCldO30sQTpmdW5jdGlvbiBBKGQpe3JldHVybiBsb2NhbGVfZGF5c1tkLmdldERheSgpXTt9LGI6ZnVuY3Rpb24gYihkKXtyZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07fSxCOmZ1bmN0aW9uIEIoZCl7cmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRNb250aCgpXTt9LGM6ZDNfdGltZV9mb3JtYXQobG9jYWxlX2RhdGVUaW1lKSxkOmZ1bmN0aW9uIGQoX2QscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKF9kLmdldERhdGUoKSxwLDIpO30sZTpmdW5jdGlvbiBlKGQscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0RGF0ZSgpLHAsMik7fSxIOmZ1bmN0aW9uIEgoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRIb3VycygpLHAsMik7fSxJOmZ1bmN0aW9uIEkoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIscCwyKTt9LGo6ZnVuY3Rpb24gaihkLHApe3JldHVybiBkM190aW1lX2Zvcm1hdFBhZCgxICsgZDNfdGltZS5kYXlPZlllYXIoZCkscCwzKTt9LEw6ZnVuY3Rpb24gTChkLHApe3JldHVybiBkM190aW1lX2Zvcm1hdFBhZChkLmdldE1pbGxpc2Vjb25kcygpLHAsMyk7fSxtOmZ1bmN0aW9uIG0oZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRNb250aCgpICsgMSxwLDIpO30sTTpmdW5jdGlvbiBNKGQscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0TWludXRlcygpLHAsMik7fSxwOmZ1bmN0aW9uIHAoZCl7cmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07fSxTOmZ1bmN0aW9uIFMoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRTZWNvbmRzKCkscCwyKTt9LFU6ZnVuY3Rpb24gVShkLHApe3JldHVybiBkM190aW1lX2Zvcm1hdFBhZChkM190aW1lLnN1bmRheU9mWWVhcihkKSxwLDIpO30sdzpmdW5jdGlvbiB3KGQpe3JldHVybiBkLmdldERheSgpO30sVzpmdW5jdGlvbiBXKGQscCl7cmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQzX3RpbWUubW9uZGF5T2ZZZWFyKGQpLHAsMik7fSx4OmQzX3RpbWVfZm9ybWF0KGxvY2FsZV9kYXRlKSxYOmQzX3RpbWVfZm9ybWF0KGxvY2FsZV90aW1lKSx5OmZ1bmN0aW9uIHkoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLHAsMik7fSxZOmZ1bmN0aW9uIFkoZCxwKXtyZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRGdWxsWWVhcigpICUgMWU0LHAsNCk7fSxaOmQzX3RpbWVfem9uZSxcIiVcIjpmdW5jdGlvbiBfKCl7cmV0dXJuIFwiJVwiO319O3ZhciBkM190aW1lX3BhcnNlcnM9e2E6ZDNfdGltZV9wYXJzZVdlZWtkYXlBYmJyZXYsQTpkM190aW1lX3BhcnNlV2Vla2RheSxiOmQzX3RpbWVfcGFyc2VNb250aEFiYnJldixCOmQzX3RpbWVfcGFyc2VNb250aCxjOmQzX3RpbWVfcGFyc2VMb2NhbGVGdWxsLGQ6ZDNfdGltZV9wYXJzZURheSxlOmQzX3RpbWVfcGFyc2VEYXksSDpkM190aW1lX3BhcnNlSG91cjI0LEk6ZDNfdGltZV9wYXJzZUhvdXIyNCxqOmQzX3RpbWVfcGFyc2VEYXlPZlllYXIsTDpkM190aW1lX3BhcnNlTWlsbGlzZWNvbmRzLG06ZDNfdGltZV9wYXJzZU1vbnRoTnVtYmVyLE06ZDNfdGltZV9wYXJzZU1pbnV0ZXMscDpkM190aW1lX3BhcnNlQW1QbSxTOmQzX3RpbWVfcGFyc2VTZWNvbmRzLFU6ZDNfdGltZV9wYXJzZVdlZWtOdW1iZXJTdW5kYXksdzpkM190aW1lX3BhcnNlV2Vla2RheU51bWJlcixXOmQzX3RpbWVfcGFyc2VXZWVrTnVtYmVyTW9uZGF5LHg6ZDNfdGltZV9wYXJzZUxvY2FsZURhdGUsWDpkM190aW1lX3BhcnNlTG9jYWxlVGltZSx5OmQzX3RpbWVfcGFyc2VZZWFyLFk6ZDNfdGltZV9wYXJzZUZ1bGxZZWFyLFo6ZDNfdGltZV9wYXJzZVpvbmUsXCIlXCI6ZDNfdGltZV9wYXJzZUxpdGVyYWxQZXJjZW50fTtmdW5jdGlvbiBkM190aW1lX3BhcnNlV2Vla2RheUFiYnJldihkYXRlLHN0cmluZyxpKXtkM190aW1lX2RheUFiYnJldlJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9kYXlBYmJyZXZSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUudyA9IGQzX3RpbWVfZGF5QWJicmV2TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VXZWVrZGF5KGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfZGF5UmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtyZXR1cm4gbj8oZGF0ZS53ID0gZDNfdGltZV9kYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1vbnRoQWJicmV2KGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbW9udGhBYmJyZXZSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbW9udGhBYmJyZXZSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUubSA9IGQzX3RpbWVfbW9udGhBYmJyZXZMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1vbnRoKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbW9udGhSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUubSA9IGQzX3RpbWVfbW9udGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUxvY2FsZUZ1bGwoZGF0ZSxzdHJpbmcsaSl7cmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSxkM190aW1lX2Zvcm1hdHMuYy50b1N0cmluZygpLHN0cmluZyxpKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUxvY2FsZURhdGUoZGF0ZSxzdHJpbmcsaSl7cmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSxkM190aW1lX2Zvcm1hdHMueC50b1N0cmluZygpLHN0cmluZyxpKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUxvY2FsZVRpbWUoZGF0ZSxzdHJpbmcsaSl7cmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSxkM190aW1lX2Zvcm1hdHMuWC50b1N0cmluZygpLHN0cmluZyxpKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZUFtUG0oZGF0ZSxzdHJpbmcsaSl7dmFyIG49ZDNfdGltZV9wZXJpb2RMb29rdXAuZ2V0KHN0cmluZy5zbGljZShpLGkgKz0gMikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG4gPT0gbnVsbD8tMTooZGF0ZS5wID0gbixpKTt9cmV0dXJuIGQzX3RpbWVfZm9ybWF0O312YXIgZDNfdGltZV9mb3JtYXRQYWRzPXtcIi1cIjpcIlwiLF86XCIgXCIsXCIwXCI6XCIwXCJ9LGQzX3RpbWVfbnVtYmVyUmU9L15cXHMqXFxkKy8sZDNfdGltZV9wZXJjZW50UmU9L14lLztmdW5jdGlvbiBkM190aW1lX2Zvcm1hdFBhZCh2YWx1ZSxmaWxsLHdpZHRoKXt2YXIgc2lnbj12YWx1ZSA8IDA/XCItXCI6XCJcIixzdHJpbmc9KHNpZ24/LXZhbHVlOnZhbHVlKSArIFwiXCIsbGVuZ3RoPXN0cmluZy5sZW5ndGg7cmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGg/bmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZzpzdHJpbmcpO31mdW5jdGlvbiBkM190aW1lX2Zvcm1hdFJlKG5hbWVzKXtyZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChkMy5yZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLFwiaVwiKTt9ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXRMb29rdXAobmFtZXMpe3ZhciBtYXA9bmV3IGQzX01hcCgpLGk9LTEsbj1uYW1lcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgbWFwLnNldChuYW1lc1tpXS50b0xvd2VyQ2FzZSgpLGkpO3JldHVybiBtYXA7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VXZWVrZGF5TnVtYmVyKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDEpKTtyZXR1cm4gbj8oZGF0ZS53ID0gK25bMF0saSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZVdlZWtOdW1iZXJTdW5kYXkoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO3JldHVybiBuPyhkYXRlLlUgPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlV2Vla051bWJlck1vbmRheShkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7cmV0dXJuIG4/KGRhdGUuVyA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VGdWxsWWVhcihkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyA0KSk7cmV0dXJuIG4/KGRhdGUueSA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VZZWFyKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDIpKTtyZXR1cm4gbj8oZGF0ZS55ID0gZDNfdGltZV9leHBhbmRZZWFyKCtuWzBdKSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlWm9uZShkYXRlLHN0cmluZyxpKXtyZXR1cm4gKC9eWystXVxcZHs0fSQvLnRlc3Qoc3RyaW5nID0gc3RyaW5nLnNsaWNlKGksaSArIDUpKT8oZGF0ZS5aID0gLXN0cmluZyxpICsgNSk6LTEpO31mdW5jdGlvbiBkM190aW1lX2V4cGFuZFllYXIoZCl7cmV0dXJuIGQgKyAoZCA+IDY4PzE5MDA6MmUzKTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1vbnRoTnVtYmVyKGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDIpKTtyZXR1cm4gbj8oZGF0ZS5tID0gblswXSAtIDEsaSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZURheShkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyAyKSk7cmV0dXJuIG4/KGRhdGUuZCA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VEYXlPZlllYXIoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSxpICsgMykpO3JldHVybiBuPyhkYXRlLmogPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlSG91cjI0KGRhdGUsc3RyaW5nLGkpe2QzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksaSArIDIpKTtyZXR1cm4gbj8oZGF0ZS5IID0gK25bMF0saSArIG5bMF0ubGVuZ3RoKTotMTt9ZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1pbnV0ZXMoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSxpICsgMikpO3JldHVybiBuPyhkYXRlLk0gPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3BhcnNlU2Vjb25kcyhkYXRlLHN0cmluZyxpKXtkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7dmFyIG49ZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyAyKSk7cmV0dXJuIG4/KGRhdGUuUyA9ICtuWzBdLGkgKyBuWzBdLmxlbmd0aCk6LTE7fWZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VNaWxsaXNlY29uZHMoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwO3ZhciBuPWQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSxpICsgMykpO3JldHVybiBuPyhkYXRlLkwgPSArblswXSxpICsgblswXS5sZW5ndGgpOi0xO31mdW5jdGlvbiBkM190aW1lX3pvbmUoZCl7dmFyIHo9ZC5nZXRUaW1lem9uZU9mZnNldCgpLHpzPXogPiAwP1wiLVwiOlwiK1wiLHpoPWFicyh6KSAvIDYwIHwgMCx6bT1hYnMoeikgJSA2MDtyZXR1cm4genMgKyBkM190aW1lX2Zvcm1hdFBhZCh6aCxcIjBcIiwyKSArIGQzX3RpbWVfZm9ybWF0UGFkKHptLFwiMFwiLDIpO31mdW5jdGlvbiBkM190aW1lX3BhcnNlTGl0ZXJhbFBlcmNlbnQoZGF0ZSxzdHJpbmcsaSl7ZDNfdGltZV9wZXJjZW50UmUubGFzdEluZGV4ID0gMDt2YXIgbj1kM190aW1lX3BlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLGkgKyAxKSk7cmV0dXJuIG4/aSArIG5bMF0ubGVuZ3RoOi0xO31mdW5jdGlvbiBkM190aW1lX2Zvcm1hdE11bHRpKGZvcm1hdHMpe3ZhciBuPWZvcm1hdHMubGVuZ3RoLGk9LTE7d2hpbGUoKytpIDwgbikgZm9ybWF0c1tpXVswXSA9IHRoaXMoZm9ybWF0c1tpXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGRhdGUpe3ZhciBpPTAsZj1mb3JtYXRzW2ldO3doaWxlKCFmWzFdKGRhdGUpKSBmID0gZm9ybWF0c1srK2ldO3JldHVybiBmWzBdKGRhdGUpO307fWQzLmxvY2FsZSA9IGZ1bmN0aW9uKGxvY2FsZSl7cmV0dXJuIHtudW1iZXJGb3JtYXQ6ZDNfbG9jYWxlX251bWJlckZvcm1hdChsb2NhbGUpLHRpbWVGb3JtYXQ6ZDNfbG9jYWxlX3RpbWVGb3JtYXQobG9jYWxlKX07fTt2YXIgZDNfbG9jYWxlX2VuVVM9ZDMubG9jYWxlKHtkZWNpbWFsOlwiLlwiLHRob3VzYW5kczpcIixcIixncm91cGluZzpbM10sY3VycmVuY3k6W1wiJFwiLFwiXCJdLGRhdGVUaW1lOlwiJWEgJWIgJWUgJVggJVlcIixkYXRlOlwiJW0vJWQvJVlcIix0aW1lOlwiJUg6JU06JVNcIixwZXJpb2RzOltcIkFNXCIsXCJQTVwiXSxkYXlzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLHNob3J0RGF5czpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sbW9udGhzOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxzaG9ydE1vbnRoczpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdfSk7ZDMuZm9ybWF0ID0gZDNfbG9jYWxlX2VuVVMubnVtYmVyRm9ybWF0O2QzLmdlbyA9IHt9O2Z1bmN0aW9uIGQzX2FkZGVyKCl7fWQzX2FkZGVyLnByb3RvdHlwZSA9IHtzOjAsdDowLGFkZDpmdW5jdGlvbiBhZGQoeSl7ZDNfYWRkZXJTdW0oeSx0aGlzLnQsZDNfYWRkZXJUZW1wKTtkM19hZGRlclN1bShkM19hZGRlclRlbXAucyx0aGlzLnMsdGhpcyk7aWYodGhpcy5zKXRoaXMudCArPSBkM19hZGRlclRlbXAudDtlbHNlIHRoaXMucyA9IGQzX2FkZGVyVGVtcC50O30scmVzZXQ6ZnVuY3Rpb24gcmVzZXQoKXt0aGlzLnMgPSB0aGlzLnQgPSAwO30sdmFsdWVPZjpmdW5jdGlvbiB2YWx1ZU9mKCl7cmV0dXJuIHRoaXMuczt9fTt2YXIgZDNfYWRkZXJUZW1wPW5ldyBkM19hZGRlcigpO2Z1bmN0aW9uIGQzX2FkZGVyU3VtKGEsYixvKXt2YXIgeD1vLnMgPSBhICsgYixidj14IC0gYSxhdj14IC0gYnY7by50ID0gYSAtIGF2ICsgKGIgLSBidik7fWQzLmdlby5zdHJlYW0gPSBmdW5jdGlvbihvYmplY3QsbGlzdGVuZXIpe2lmKG9iamVjdCAmJiBkM19nZW9fc3RyZWFtT2JqZWN0VHlwZS5oYXNPd25Qcm9wZXJ0eShvYmplY3QudHlwZSkpe2QzX2dlb19zdHJlYW1PYmplY3RUeXBlW29iamVjdC50eXBlXShvYmplY3QsbGlzdGVuZXIpO31lbHNlIHtkM19nZW9fc3RyZWFtR2VvbWV0cnkob2JqZWN0LGxpc3RlbmVyKTt9fTtmdW5jdGlvbiBkM19nZW9fc3RyZWFtR2VvbWV0cnkoZ2VvbWV0cnksbGlzdGVuZXIpe2lmKGdlb21ldHJ5ICYmIGQzX2dlb19zdHJlYW1HZW9tZXRyeVR5cGUuaGFzT3duUHJvcGVydHkoZ2VvbWV0cnkudHlwZSkpe2QzX2dlb19zdHJlYW1HZW9tZXRyeVR5cGVbZ2VvbWV0cnkudHlwZV0oZ2VvbWV0cnksbGlzdGVuZXIpO319dmFyIGQzX2dlb19zdHJlYW1PYmplY3RUeXBlPXtGZWF0dXJlOmZ1bmN0aW9uIEZlYXR1cmUoZmVhdHVyZSxsaXN0ZW5lcil7ZDNfZ2VvX3N0cmVhbUdlb21ldHJ5KGZlYXR1cmUuZ2VvbWV0cnksbGlzdGVuZXIpO30sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24gRmVhdHVyZUNvbGxlY3Rpb24ob2JqZWN0LGxpc3RlbmVyKXt2YXIgZmVhdHVyZXM9b2JqZWN0LmZlYXR1cmVzLGk9LTEsbj1mZWF0dXJlcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgZDNfZ2VvX3N0cmVhbUdlb21ldHJ5KGZlYXR1cmVzW2ldLmdlb21ldHJ5LGxpc3RlbmVyKTt9fTt2YXIgZDNfZ2VvX3N0cmVhbUdlb21ldHJ5VHlwZT17U3BoZXJlOmZ1bmN0aW9uIFNwaGVyZShvYmplY3QsbGlzdGVuZXIpe2xpc3RlbmVyLnNwaGVyZSgpO30sUG9pbnQ6ZnVuY3Rpb24gUG9pbnQob2JqZWN0LGxpc3RlbmVyKXtvYmplY3QgPSBvYmplY3QuY29vcmRpbmF0ZXM7bGlzdGVuZXIucG9pbnQob2JqZWN0WzBdLG9iamVjdFsxXSxvYmplY3RbMl0pO30sTXVsdGlQb2ludDpmdW5jdGlvbiBNdWx0aVBvaW50KG9iamVjdCxsaXN0ZW5lcil7dmFyIGNvb3JkaW5hdGVzPW9iamVjdC5jb29yZGluYXRlcyxpPS0xLG49Y29vcmRpbmF0ZXMubGVuZ3RoO3doaWxlKCsraSA8IG4pIG9iamVjdCA9IGNvb3JkaW5hdGVzW2ldLGxpc3RlbmVyLnBvaW50KG9iamVjdFswXSxvYmplY3RbMV0sb2JqZWN0WzJdKTt9LExpbmVTdHJpbmc6ZnVuY3Rpb24gTGluZVN0cmluZyhvYmplY3QsbGlzdGVuZXIpe2QzX2dlb19zdHJlYW1MaW5lKG9iamVjdC5jb29yZGluYXRlcyxsaXN0ZW5lciwwKTt9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbiBNdWx0aUxpbmVTdHJpbmcob2JqZWN0LGxpc3RlbmVyKXt2YXIgY29vcmRpbmF0ZXM9b2JqZWN0LmNvb3JkaW5hdGVzLGk9LTEsbj1jb29yZGluYXRlcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgZDNfZ2VvX3N0cmVhbUxpbmUoY29vcmRpbmF0ZXNbaV0sbGlzdGVuZXIsMCk7fSxQb2x5Z29uOmZ1bmN0aW9uIFBvbHlnb24ob2JqZWN0LGxpc3RlbmVyKXtkM19nZW9fc3RyZWFtUG9seWdvbihvYmplY3QuY29vcmRpbmF0ZXMsbGlzdGVuZXIpO30sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uIE11bHRpUG9seWdvbihvYmplY3QsbGlzdGVuZXIpe3ZhciBjb29yZGluYXRlcz1vYmplY3QuY29vcmRpbmF0ZXMsaT0tMSxuPWNvb3JkaW5hdGVzLmxlbmd0aDt3aGlsZSgrK2kgPCBuKSBkM19nZW9fc3RyZWFtUG9seWdvbihjb29yZGluYXRlc1tpXSxsaXN0ZW5lcik7fSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24gR2VvbWV0cnlDb2xsZWN0aW9uKG9iamVjdCxsaXN0ZW5lcil7dmFyIGdlb21ldHJpZXM9b2JqZWN0Lmdlb21ldHJpZXMsaT0tMSxuPWdlb21ldHJpZXMubGVuZ3RoO3doaWxlKCsraSA8IG4pIGQzX2dlb19zdHJlYW1HZW9tZXRyeShnZW9tZXRyaWVzW2ldLGxpc3RlbmVyKTt9fTtmdW5jdGlvbiBkM19nZW9fc3RyZWFtTGluZShjb29yZGluYXRlcyxsaXN0ZW5lcixjbG9zZWQpe3ZhciBpPS0xLG49Y29vcmRpbmF0ZXMubGVuZ3RoIC0gY2xvc2VkLGNvb3JkaW5hdGU7bGlzdGVuZXIubGluZVN0YXJ0KCk7d2hpbGUoKytpIDwgbikgY29vcmRpbmF0ZSA9IGNvb3JkaW5hdGVzW2ldLGxpc3RlbmVyLnBvaW50KGNvb3JkaW5hdGVbMF0sY29vcmRpbmF0ZVsxXSxjb29yZGluYXRlWzJdKTtsaXN0ZW5lci5saW5lRW5kKCk7fWZ1bmN0aW9uIGQzX2dlb19zdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzLGxpc3RlbmVyKXt2YXIgaT0tMSxuPWNvb3JkaW5hdGVzLmxlbmd0aDtsaXN0ZW5lci5wb2x5Z29uU3RhcnQoKTt3aGlsZSgrK2kgPCBuKSBkM19nZW9fc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSxsaXN0ZW5lciwxKTtsaXN0ZW5lci5wb2x5Z29uRW5kKCk7fWQzLmdlby5hcmVhID0gZnVuY3Rpb24ob2JqZWN0KXtkM19nZW9fYXJlYVN1bSA9IDA7ZDMuZ2VvLnN0cmVhbShvYmplY3QsZDNfZ2VvX2FyZWEpO3JldHVybiBkM19nZW9fYXJlYVN1bTt9O3ZhciBkM19nZW9fYXJlYVN1bSxkM19nZW9fYXJlYVJpbmdTdW09bmV3IGQzX2FkZGVyKCk7dmFyIGQzX2dlb19hcmVhPXtzcGhlcmU6ZnVuY3Rpb24gc3BoZXJlKCl7ZDNfZ2VvX2FyZWFTdW0gKz0gNCAqIM+AO30scG9pbnQ6ZDNfbm9vcCxsaW5lU3RhcnQ6ZDNfbm9vcCxsaW5lRW5kOmQzX25vb3AscG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe2QzX2dlb19hcmVhUmluZ1N1bS5yZXNldCgpO2QzX2dlb19hcmVhLmxpbmVTdGFydCA9IGQzX2dlb19hcmVhUmluZ1N0YXJ0O30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7dmFyIGFyZWE9MiAqIGQzX2dlb19hcmVhUmluZ1N1bTtkM19nZW9fYXJlYVN1bSArPSBhcmVhIDwgMD80ICogz4AgKyBhcmVhOmFyZWE7ZDNfZ2VvX2FyZWEubGluZVN0YXJ0ID0gZDNfZ2VvX2FyZWEubGluZUVuZCA9IGQzX2dlb19hcmVhLnBvaW50ID0gZDNfbm9vcDt9fTtmdW5jdGlvbiBkM19nZW9fYXJlYVJpbmdTdGFydCgpe3ZhciDOuzAwLM+GMDAszrswLGNvc8+GMCxzaW7PhjA7ZDNfZ2VvX2FyZWEucG9pbnQgPSBmdW5jdGlvbijOuyzPhil7ZDNfZ2VvX2FyZWEucG9pbnQgPSBuZXh0UG9pbnQ7zrswID0gKM67MDAgPSDOuykgKiBkM19yYWRpYW5zLGNvc8+GMCA9IE1hdGguY29zKM+GID0gKM+GMDAgPSDPhikgKiBkM19yYWRpYW5zIC8gMiArIM+AIC8gNCksc2luz4YwID0gTWF0aC5zaW4oz4YpO307ZnVuY3Rpb24gbmV4dFBvaW50KM67LM+GKXvOuyAqPSBkM19yYWRpYW5zO8+GID0gz4YgKiBkM19yYWRpYW5zIC8gMiArIM+AIC8gNDt2YXIgZM67Pc67IC0gzrswLHNkzrs9ZM67ID49IDA/MTotMSxhZM67PXNkzrsgKiBkzrssY29zz4Y9TWF0aC5jb3Moz4YpLHNpbs+GPU1hdGguc2luKM+GKSxrPXNpbs+GMCAqIHNpbs+GLHU9Y29zz4YwICogY29zz4YgKyBrICogTWF0aC5jb3MoYWTOuyksdj1rICogc2TOuyAqIE1hdGguc2luKGFkzrspO2QzX2dlb19hcmVhUmluZ1N1bS5hZGQoTWF0aC5hdGFuMih2LHUpKTvOuzAgPSDOuyxjb3PPhjAgPSBjb3PPhixzaW7PhjAgPSBzaW7Phjt9ZDNfZ2VvX2FyZWEubGluZUVuZCA9IGZ1bmN0aW9uKCl7bmV4dFBvaW50KM67MDAsz4YwMCk7fTt9ZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbihzcGhlcmljYWwpe3ZhciDOuz1zcGhlcmljYWxbMF0sz4Y9c3BoZXJpY2FsWzFdLGNvc8+GPU1hdGguY29zKM+GKTtyZXR1cm4gW2Nvc8+GICogTWF0aC5jb3MozrspLGNvc8+GICogTWF0aC5zaW4ozrspLE1hdGguc2luKM+GKV07fWZ1bmN0aW9uIGQzX2dlb19jYXJ0ZXNpYW5Eb3QoYSxiKXtyZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO31mdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuQ3Jvc3MoYSxiKXtyZXR1cm4gW2FbMV0gKiBiWzJdIC0gYVsyXSAqIGJbMV0sYVsyXSAqIGJbMF0gLSBhWzBdICogYlsyXSxhWzBdICogYlsxXSAtIGFbMV0gKiBiWzBdXTt9ZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbkFkZChhLGIpe2FbMF0gKz0gYlswXTthWzFdICs9IGJbMV07YVsyXSArPSBiWzJdO31mdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuU2NhbGUodmVjdG9yLGspe3JldHVybiBbdmVjdG9yWzBdICogayx2ZWN0b3JbMV0gKiBrLHZlY3RvclsyXSAqIGtdO31mdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGQpe3ZhciBsPU1hdGguc3FydChkWzBdICogZFswXSArIGRbMV0gKiBkWzFdICsgZFsyXSAqIGRbMl0pO2RbMF0gLz0gbDtkWzFdIC89IGw7ZFsyXSAvPSBsO31mdW5jdGlvbiBkM19nZW9fc3BoZXJpY2FsKGNhcnRlc2lhbil7cmV0dXJuIFtNYXRoLmF0YW4yKGNhcnRlc2lhblsxXSxjYXJ0ZXNpYW5bMF0pLGQzX2FzaW4oY2FydGVzaWFuWzJdKV07fWZ1bmN0aW9uIGQzX2dlb19zcGhlcmljYWxFcXVhbChhLGIpe3JldHVybiBhYnMoYVswXSAtIGJbMF0pIDwgzrUgJiYgYWJzKGFbMV0gLSBiWzFdKSA8IM61O31kMy5nZW8uYm91bmRzID0gKGZ1bmN0aW9uKCl7dmFyIM67MCzPhjAszrsxLM+GMSzOu18szrtfXyzPhl9fLHAwLGTOu1N1bSxyYW5nZXMscmFuZ2U7dmFyIGJvdW5kPXtwb2ludDpwb2ludCxsaW5lU3RhcnQ6bGluZVN0YXJ0LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7Ym91bmQucG9pbnQgPSByaW5nUG9pbnQ7Ym91bmQubGluZVN0YXJ0ID0gcmluZ1N0YXJ0O2JvdW5kLmxpbmVFbmQgPSByaW5nRW5kO2TOu1N1bSA9IDA7ZDNfZ2VvX2FyZWEucG9seWdvblN0YXJ0KCk7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fYXJlYS5wb2x5Z29uRW5kKCk7Ym91bmQucG9pbnQgPSBwb2ludDtib3VuZC5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7Ym91bmQubGluZUVuZCA9IGxpbmVFbmQ7aWYoZDNfZ2VvX2FyZWFSaW5nU3VtIDwgMCnOuzAgPSAtKM67MSA9IDE4MCksz4YwID0gLSjPhjEgPSA5MCk7ZWxzZSBpZihkzrtTdW0gPiDOtSnPhjEgPSA5MDtlbHNlIGlmKGTOu1N1bSA8IC3OtSnPhjAgPSAtOTA7cmFuZ2VbMF0gPSDOuzAscmFuZ2VbMV0gPSDOuzE7fX07ZnVuY3Rpb24gcG9pbnQozrssz4Ype3Jhbmdlcy5wdXNoKHJhbmdlID0gW867MCA9IM67LM67MSA9IM67XSk7aWYoz4YgPCDPhjApz4YwID0gz4Y7aWYoz4YgPiDPhjEpz4YxID0gz4Y7fWZ1bmN0aW9uIGxpbmVQb2ludCjOuyzPhil7dmFyIHA9ZDNfZ2VvX2NhcnRlc2lhbihbzrsgKiBkM19yYWRpYW5zLM+GICogZDNfcmFkaWFuc10pO2lmKHAwKXt2YXIgbm9ybWFsPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhwMCxwKSxlcXVhdG9yaWFsPVtub3JtYWxbMV0sLW5vcm1hbFswXSwwXSxpbmZsZWN0aW9uPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhlcXVhdG9yaWFsLG5vcm1hbCk7ZDNfZ2VvX2NhcnRlc2lhbk5vcm1hbGl6ZShpbmZsZWN0aW9uKTtpbmZsZWN0aW9uID0gZDNfZ2VvX3NwaGVyaWNhbChpbmZsZWN0aW9uKTt2YXIgZM67Pc67IC0gzrtfLHM9ZM67ID4gMD8xOi0xLM67aT1pbmZsZWN0aW9uWzBdICogZDNfZGVncmVlcyAqIHMsYW50aW1lcmlkaWFuPWFicyhkzrspID4gMTgwO2lmKGFudGltZXJpZGlhbiBeIChzICogzrtfIDwgzrtpICYmIM67aSA8IHMgKiDOuykpe3ZhciDPhmk9aW5mbGVjdGlvblsxXSAqIGQzX2RlZ3JlZXM7aWYoz4ZpID4gz4YxKc+GMSA9IM+GaTt9ZWxzZSBpZigozrtpID0gKM67aSArIDM2MCkgJSAzNjAgLSAxODAsYW50aW1lcmlkaWFuIF4gKHMgKiDOu18gPCDOu2kgJiYgzrtpIDwgcyAqIM67KSkpe3ZhciDPhmk9LWluZmxlY3Rpb25bMV0gKiBkM19kZWdyZWVzO2lmKM+GaSA8IM+GMCnPhjAgPSDPhmk7fWVsc2Uge2lmKM+GIDwgz4YwKc+GMCA9IM+GO2lmKM+GID4gz4YxKc+GMSA9IM+GO31pZihhbnRpbWVyaWRpYW4pe2lmKM67IDwgzrtfKXtpZihhbmdsZSjOuzAszrspID4gYW5nbGUozrswLM67MSkpzrsxID0gzrs7fWVsc2Uge2lmKGFuZ2xlKM67LM67MSkgPiBhbmdsZSjOuzAszrsxKSnOuzAgPSDOuzt9fWVsc2Uge2lmKM67MSA+PSDOuzApe2lmKM67IDwgzrswKc67MCA9IM67O2lmKM67ID4gzrsxKc67MSA9IM67O31lbHNlIHtpZijOuyA+IM67Xyl7aWYoYW5nbGUozrswLM67KSA+IGFuZ2xlKM67MCzOuzEpKc67MSA9IM67O31lbHNlIHtpZihhbmdsZSjOuyzOuzEpID4gYW5nbGUozrswLM67MSkpzrswID0gzrs7fX19fWVsc2Uge3BvaW50KM67LM+GKTt9cDAgPSBwLM67XyA9IM67O31mdW5jdGlvbiBsaW5lU3RhcnQoKXtib3VuZC5wb2ludCA9IGxpbmVQb2ludDt9ZnVuY3Rpb24gbGluZUVuZCgpe3JhbmdlWzBdID0gzrswLHJhbmdlWzFdID0gzrsxO2JvdW5kLnBvaW50ID0gcG9pbnQ7cDAgPSBudWxsO31mdW5jdGlvbiByaW5nUG9pbnQozrssz4Ype2lmKHAwKXt2YXIgZM67Pc67IC0gzrtfO2TOu1N1bSArPSBhYnMoZM67KSA+IDE4MD9kzrsgKyAoZM67ID4gMD8zNjA6LTM2MCk6ZM67O31lbHNlIM67X18gPSDOuyzPhl9fID0gz4Y7ZDNfZ2VvX2FyZWEucG9pbnQozrssz4YpO2xpbmVQb2ludCjOuyzPhik7fWZ1bmN0aW9uIHJpbmdTdGFydCgpe2QzX2dlb19hcmVhLmxpbmVTdGFydCgpO31mdW5jdGlvbiByaW5nRW5kKCl7cmluZ1BvaW50KM67X18sz4ZfXyk7ZDNfZ2VvX2FyZWEubGluZUVuZCgpO2lmKGFicyhkzrtTdW0pID4gzrUpzrswID0gLSjOuzEgPSAxODApO3JhbmdlWzBdID0gzrswLHJhbmdlWzFdID0gzrsxO3AwID0gbnVsbDt9ZnVuY3Rpb24gYW5nbGUozrswLM67MSl7cmV0dXJuICjOuzEgLT0gzrswKSA8IDA/zrsxICsgMzYwOs67MTt9ZnVuY3Rpb24gY29tcGFyZVJhbmdlcyhhLGIpe3JldHVybiBhWzBdIC0gYlswXTt9ZnVuY3Rpb24gd2l0aGluUmFuZ2UoeCxyYW5nZSl7cmV0dXJuIHJhbmdlWzBdIDw9IHJhbmdlWzFdP3JhbmdlWzBdIDw9IHggJiYgeCA8PSByYW5nZVsxXTp4IDwgcmFuZ2VbMF0gfHwgcmFuZ2VbMV0gPCB4O31yZXR1cm4gZnVuY3Rpb24oZmVhdHVyZSl7z4YxID0gzrsxID0gLSjOuzAgPSDPhjAgPSBJbmZpbml0eSk7cmFuZ2VzID0gW107ZDMuZ2VvLnN0cmVhbShmZWF0dXJlLGJvdW5kKTt2YXIgbj1yYW5nZXMubGVuZ3RoO2lmKG4pe3Jhbmdlcy5zb3J0KGNvbXBhcmVSYW5nZXMpO2Zvcih2YXIgaT0xLGE9cmFuZ2VzWzBdLGIsbWVyZ2VkPVthXTtpIDwgbjsrK2kpIHtiID0gcmFuZ2VzW2ldO2lmKHdpdGhpblJhbmdlKGJbMF0sYSkgfHwgd2l0aGluUmFuZ2UoYlsxXSxhKSl7aWYoYW5nbGUoYVswXSxiWzFdKSA+IGFuZ2xlKGFbMF0sYVsxXSkpYVsxXSA9IGJbMV07aWYoYW5nbGUoYlswXSxhWzFdKSA+IGFuZ2xlKGFbMF0sYVsxXSkpYVswXSA9IGJbMF07fWVsc2Uge21lcmdlZC5wdXNoKGEgPSBiKTt9fXZhciBiZXN0PS1JbmZpbml0eSxkzrs7Zm9yKHZhciBuPW1lcmdlZC5sZW5ndGggLSAxLGk9MCxhPW1lcmdlZFtuXSxiO2kgPD0gbjthID0gYiwrK2kpIHtiID0gbWVyZ2VkW2ldO2lmKChkzrsgPSBhbmdsZShhWzFdLGJbMF0pKSA+IGJlc3QpYmVzdCA9IGTOuyzOuzAgPSBiWzBdLM67MSA9IGFbMV07fX1yYW5nZXMgPSByYW5nZSA9IG51bGw7cmV0dXJuIM67MCA9PT0gSW5maW5pdHkgfHwgz4YwID09PSBJbmZpbml0eT9bW05hTixOYU5dLFtOYU4sTmFOXV06W1vOuzAsz4YwXSxbzrsxLM+GMV1dO307fSkoKTtkMy5nZW8uY2VudHJvaWQgPSBmdW5jdGlvbihvYmplY3Qpe2QzX2dlb19jZW50cm9pZFcwID0gZDNfZ2VvX2NlbnRyb2lkVzEgPSBkM19nZW9fY2VudHJvaWRYMCA9IGQzX2dlb19jZW50cm9pZFkwID0gZDNfZ2VvX2NlbnRyb2lkWjAgPSBkM19nZW9fY2VudHJvaWRYMSA9IGQzX2dlb19jZW50cm9pZFkxID0gZDNfZ2VvX2NlbnRyb2lkWjEgPSBkM19nZW9fY2VudHJvaWRYMiA9IGQzX2dlb19jZW50cm9pZFkyID0gZDNfZ2VvX2NlbnRyb2lkWjIgPSAwO2QzLmdlby5zdHJlYW0ob2JqZWN0LGQzX2dlb19jZW50cm9pZCk7dmFyIHg9ZDNfZ2VvX2NlbnRyb2lkWDIseT1kM19nZW9fY2VudHJvaWRZMix6PWQzX2dlb19jZW50cm9pZFoyLG09eCAqIHggKyB5ICogeSArIHogKiB6O2lmKG0gPCDOtTIpe3ggPSBkM19nZW9fY2VudHJvaWRYMSx5ID0gZDNfZ2VvX2NlbnRyb2lkWTEseiA9IGQzX2dlb19jZW50cm9pZFoxO2lmKGQzX2dlb19jZW50cm9pZFcxIDwgzrUpeCA9IGQzX2dlb19jZW50cm9pZFgwLHkgPSBkM19nZW9fY2VudHJvaWRZMCx6ID0gZDNfZ2VvX2NlbnRyb2lkWjA7bSA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtpZihtIDwgzrUyKXJldHVybiBbTmFOLE5hTl07fXJldHVybiBbTWF0aC5hdGFuMih5LHgpICogZDNfZGVncmVlcyxkM19hc2luKHogLyBNYXRoLnNxcnQobSkpICogZDNfZGVncmVlc107fTt2YXIgZDNfZ2VvX2NlbnRyb2lkVzAsZDNfZ2VvX2NlbnRyb2lkVzEsZDNfZ2VvX2NlbnRyb2lkWDAsZDNfZ2VvX2NlbnRyb2lkWTAsZDNfZ2VvX2NlbnRyb2lkWjAsZDNfZ2VvX2NlbnRyb2lkWDEsZDNfZ2VvX2NlbnRyb2lkWTEsZDNfZ2VvX2NlbnRyb2lkWjEsZDNfZ2VvX2NlbnRyb2lkWDIsZDNfZ2VvX2NlbnRyb2lkWTIsZDNfZ2VvX2NlbnRyb2lkWjI7dmFyIGQzX2dlb19jZW50cm9pZD17c3BoZXJlOmQzX25vb3AscG9pbnQ6ZDNfZ2VvX2NlbnRyb2lkUG9pbnQsbGluZVN0YXJ0OmQzX2dlb19jZW50cm9pZExpbmVTdGFydCxsaW5lRW5kOmQzX2dlb19jZW50cm9pZExpbmVFbmQscG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe2QzX2dlb19jZW50cm9pZC5saW5lU3RhcnQgPSBkM19nZW9fY2VudHJvaWRSaW5nU3RhcnQ7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fY2VudHJvaWQubGluZVN0YXJ0ID0gZDNfZ2VvX2NlbnRyb2lkTGluZVN0YXJ0O319O2Z1bmN0aW9uIGQzX2dlb19jZW50cm9pZFBvaW50KM67LM+GKXvOuyAqPSBkM19yYWRpYW5zO3ZhciBjb3PPhj1NYXRoLmNvcyjPhiAqPSBkM19yYWRpYW5zKTtkM19nZW9fY2VudHJvaWRQb2ludFhZWihjb3PPhiAqIE1hdGguY29zKM67KSxjb3PPhiAqIE1hdGguc2luKM67KSxNYXRoLnNpbijPhikpO31mdW5jdGlvbiBkM19nZW9fY2VudHJvaWRQb2ludFhZWih4LHkseil7KytkM19nZW9fY2VudHJvaWRXMDtkM19nZW9fY2VudHJvaWRYMCArPSAoeCAtIGQzX2dlb19jZW50cm9pZFgwKSAvIGQzX2dlb19jZW50cm9pZFcwO2QzX2dlb19jZW50cm9pZFkwICs9ICh5IC0gZDNfZ2VvX2NlbnRyb2lkWTApIC8gZDNfZ2VvX2NlbnRyb2lkVzA7ZDNfZ2VvX2NlbnRyb2lkWjAgKz0gKHogLSBkM19nZW9fY2VudHJvaWRaMCkgLyBkM19nZW9fY2VudHJvaWRXMDt9ZnVuY3Rpb24gZDNfZ2VvX2NlbnRyb2lkTGluZVN0YXJ0KCl7dmFyIHgwLHkwLHowO2QzX2dlb19jZW50cm9pZC5wb2ludCA9IGZ1bmN0aW9uKM67LM+GKXvOuyAqPSBkM19yYWRpYW5zO3ZhciBjb3PPhj1NYXRoLmNvcyjPhiAqPSBkM19yYWRpYW5zKTt4MCA9IGNvc8+GICogTWF0aC5jb3MozrspO3kwID0gY29zz4YgKiBNYXRoLnNpbijOuyk7ejAgPSBNYXRoLnNpbijPhik7ZDNfZ2VvX2NlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50O2QzX2dlb19jZW50cm9pZFBvaW50WFlaKHgwLHkwLHowKTt9O2Z1bmN0aW9uIG5leHRQb2ludCjOuyzPhil7zrsgKj0gZDNfcmFkaWFuczt2YXIgY29zz4Y9TWF0aC5jb3Moz4YgKj0gZDNfcmFkaWFucykseD1jb3PPhiAqIE1hdGguY29zKM67KSx5PWNvc8+GICogTWF0aC5zaW4ozrspLHo9TWF0aC5zaW4oz4YpLHc9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHcgPSB5MCAqIHogLSB6MCAqIHkpICogdyArICh3ID0gejAgKiB4IC0geDAgKiB6KSAqIHcgKyAodyA9IHgwICogeSAtIHkwICogeCkgKiB3KSx4MCAqIHggKyB5MCAqIHkgKyB6MCAqIHopO2QzX2dlb19jZW50cm9pZFcxICs9IHc7ZDNfZ2VvX2NlbnRyb2lkWDEgKz0gdyAqICh4MCArICh4MCA9IHgpKTtkM19nZW9fY2VudHJvaWRZMSArPSB3ICogKHkwICsgKHkwID0geSkpO2QzX2dlb19jZW50cm9pZFoxICs9IHcgKiAoejAgKyAoejAgPSB6KSk7ZDNfZ2VvX2NlbnRyb2lkUG9pbnRYWVooeDAseTAsejApO319ZnVuY3Rpb24gZDNfZ2VvX2NlbnRyb2lkTGluZUVuZCgpe2QzX2dlb19jZW50cm9pZC5wb2ludCA9IGQzX2dlb19jZW50cm9pZFBvaW50O31mdW5jdGlvbiBkM19nZW9fY2VudHJvaWRSaW5nU3RhcnQoKXt2YXIgzrswMCzPhjAwLHgwLHkwLHowO2QzX2dlb19jZW50cm9pZC5wb2ludCA9IGZ1bmN0aW9uKM67LM+GKXvOuzAwID0gzrssz4YwMCA9IM+GO2QzX2dlb19jZW50cm9pZC5wb2ludCA9IG5leHRQb2ludDvOuyAqPSBkM19yYWRpYW5zO3ZhciBjb3PPhj1NYXRoLmNvcyjPhiAqPSBkM19yYWRpYW5zKTt4MCA9IGNvc8+GICogTWF0aC5jb3MozrspO3kwID0gY29zz4YgKiBNYXRoLnNpbijOuyk7ejAgPSBNYXRoLnNpbijPhik7ZDNfZ2VvX2NlbnRyb2lkUG9pbnRYWVooeDAseTAsejApO307ZDNfZ2VvX2NlbnRyb2lkLmxpbmVFbmQgPSBmdW5jdGlvbigpe25leHRQb2ludCjOuzAwLM+GMDApO2QzX2dlb19jZW50cm9pZC5saW5lRW5kID0gZDNfZ2VvX2NlbnRyb2lkTGluZUVuZDtkM19nZW9fY2VudHJvaWQucG9pbnQgPSBkM19nZW9fY2VudHJvaWRQb2ludDt9O2Z1bmN0aW9uIG5leHRQb2ludCjOuyzPhil7zrsgKj0gZDNfcmFkaWFuczt2YXIgY29zz4Y9TWF0aC5jb3Moz4YgKj0gZDNfcmFkaWFucykseD1jb3PPhiAqIE1hdGguY29zKM67KSx5PWNvc8+GICogTWF0aC5zaW4ozrspLHo9TWF0aC5zaW4oz4YpLGN4PXkwICogeiAtIHowICogeSxjeT16MCAqIHggLSB4MCAqIHosY3o9eDAgKiB5IC0geTAgKiB4LG09TWF0aC5zcXJ0KGN4ICogY3ggKyBjeSAqIGN5ICsgY3ogKiBjeiksdT14MCAqIHggKyB5MCAqIHkgKyB6MCAqIHosdj1tICYmIC1kM19hY29zKHUpIC8gbSx3PU1hdGguYXRhbjIobSx1KTtkM19nZW9fY2VudHJvaWRYMiArPSB2ICogY3g7ZDNfZ2VvX2NlbnRyb2lkWTIgKz0gdiAqIGN5O2QzX2dlb19jZW50cm9pZFoyICs9IHYgKiBjejtkM19nZW9fY2VudHJvaWRXMSArPSB3O2QzX2dlb19jZW50cm9pZFgxICs9IHcgKiAoeDAgKyAoeDAgPSB4KSk7ZDNfZ2VvX2NlbnRyb2lkWTEgKz0gdyAqICh5MCArICh5MCA9IHkpKTtkM19nZW9fY2VudHJvaWRaMSArPSB3ICogKHowICsgKHowID0geikpO2QzX2dlb19jZW50cm9pZFBvaW50WFlaKHgwLHkwLHowKTt9fWZ1bmN0aW9uIGQzX2dlb19jb21wb3NlKGEsYil7ZnVuY3Rpb24gY29tcG9zZSh4LHkpe3JldHVybiB4ID0gYSh4LHkpLGIoeFswXSx4WzFdKTt9aWYoYS5pbnZlcnQgJiYgYi5pbnZlcnQpY29tcG9zZS5pbnZlcnQgPSBmdW5jdGlvbih4LHkpe3JldHVybiB4ID0gYi5pbnZlcnQoeCx5KSx4ICYmIGEuaW52ZXJ0KHhbMF0seFsxXSk7fTtyZXR1cm4gY29tcG9zZTt9ZnVuY3Rpb24gZDNfdHJ1ZSgpe3JldHVybiB0cnVlO31mdW5jdGlvbiBkM19nZW9fY2xpcFBvbHlnb24oc2VnbWVudHMsY29tcGFyZSxjbGlwU3RhcnRJbnNpZGUsaW50ZXJwb2xhdGUsbGlzdGVuZXIpe3ZhciBzdWJqZWN0PVtdLGNsaXA9W107c2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50KXtpZigobiA9IHNlZ21lbnQubGVuZ3RoIC0gMSkgPD0gMClyZXR1cm47dmFyIG4scDA9c2VnbWVudFswXSxwMT1zZWdtZW50W25dO2lmKGQzX2dlb19zcGhlcmljYWxFcXVhbChwMCxwMSkpe2xpc3RlbmVyLmxpbmVTdGFydCgpO2Zvcih2YXIgaT0wO2kgPCBuOysraSkgbGlzdGVuZXIucG9pbnQoKHAwID0gc2VnbWVudFtpXSlbMF0scDBbMV0pO2xpc3RlbmVyLmxpbmVFbmQoKTtyZXR1cm47fXZhciBhPW5ldyBkM19nZW9fY2xpcFBvbHlnb25JbnRlcnNlY3Rpb24ocDAsc2VnbWVudCxudWxsLHRydWUpLGI9bmV3IGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwMCxudWxsLGEsZmFsc2UpO2EubyA9IGI7c3ViamVjdC5wdXNoKGEpO2NsaXAucHVzaChiKTthID0gbmV3IGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwMSxzZWdtZW50LG51bGwsZmFsc2UpO2IgPSBuZXcgZDNfZ2VvX2NsaXBQb2x5Z29uSW50ZXJzZWN0aW9uKHAxLG51bGwsYSx0cnVlKTthLm8gPSBiO3N1YmplY3QucHVzaChhKTtjbGlwLnB1c2goYik7fSk7Y2xpcC5zb3J0KGNvbXBhcmUpO2QzX2dlb19jbGlwUG9seWdvbkxpbmtDaXJjdWxhcihzdWJqZWN0KTtkM19nZW9fY2xpcFBvbHlnb25MaW5rQ2lyY3VsYXIoY2xpcCk7aWYoIXN1YmplY3QubGVuZ3RoKXJldHVybjtmb3IodmFyIGk9MCxlbnRyeT1jbGlwU3RhcnRJbnNpZGUsbj1jbGlwLmxlbmd0aDtpIDwgbjsrK2kpIHtjbGlwW2ldLmUgPSBlbnRyeSA9ICFlbnRyeTt9dmFyIHN0YXJ0PXN1YmplY3RbMF0scG9pbnRzLHBvaW50O3doaWxlKDEpIHt2YXIgY3VycmVudD1zdGFydCxpc1N1YmplY3Q9dHJ1ZTt3aGlsZShjdXJyZW50LnYpIGlmKChjdXJyZW50ID0gY3VycmVudC5uKSA9PT0gc3RhcnQpcmV0dXJuO3BvaW50cyA9IGN1cnJlbnQuejtsaXN0ZW5lci5saW5lU3RhcnQoKTtkbyB7Y3VycmVudC52ID0gY3VycmVudC5vLnYgPSB0cnVlO2lmKGN1cnJlbnQuZSl7aWYoaXNTdWJqZWN0KXtmb3IodmFyIGk9MCxuPXBvaW50cy5sZW5ndGg7aSA8IG47KytpKSBsaXN0ZW5lci5wb2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLHBvaW50WzFdKTt9ZWxzZSB7aW50ZXJwb2xhdGUoY3VycmVudC54LGN1cnJlbnQubi54LDEsbGlzdGVuZXIpO31jdXJyZW50ID0gY3VycmVudC5uO31lbHNlIHtpZihpc1N1YmplY3Qpe3BvaW50cyA9IGN1cnJlbnQucC56O2Zvcih2YXIgaT1wb2ludHMubGVuZ3RoIC0gMTtpID49IDA7LS1pKSBsaXN0ZW5lci5wb2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLHBvaW50WzFdKTt9ZWxzZSB7aW50ZXJwb2xhdGUoY3VycmVudC54LGN1cnJlbnQucC54LC0xLGxpc3RlbmVyKTt9Y3VycmVudCA9IGN1cnJlbnQucDt9Y3VycmVudCA9IGN1cnJlbnQubztwb2ludHMgPSBjdXJyZW50Lno7aXNTdWJqZWN0ID0gIWlzU3ViamVjdDt9d2hpbGUoIWN1cnJlbnQudik7bGlzdGVuZXIubGluZUVuZCgpO319ZnVuY3Rpb24gZDNfZ2VvX2NsaXBQb2x5Z29uTGlua0NpcmN1bGFyKGFycmF5KXtpZighKG4gPSBhcnJheS5sZW5ndGgpKXJldHVybjt2YXIgbixpPTAsYT1hcnJheVswXSxiO3doaWxlKCsraSA8IG4pIHthLm4gPSBiID0gYXJyYXlbaV07Yi5wID0gYTthID0gYjt9YS5uID0gYiA9IGFycmF5WzBdO2IucCA9IGE7fWZ1bmN0aW9uIGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwb2ludCxwb2ludHMsb3RoZXIsZW50cnkpe3RoaXMueCA9IHBvaW50O3RoaXMueiA9IHBvaW50czt0aGlzLm8gPSBvdGhlcjt0aGlzLmUgPSBlbnRyeTt0aGlzLnYgPSBmYWxzZTt0aGlzLm4gPSB0aGlzLnAgPSBudWxsO31mdW5jdGlvbiBkM19nZW9fY2xpcChwb2ludFZpc2libGUsY2xpcExpbmUsaW50ZXJwb2xhdGUsY2xpcFN0YXJ0KXtyZXR1cm4gZnVuY3Rpb24ocm90YXRlLGxpc3RlbmVyKXt2YXIgbGluZT1jbGlwTGluZShsaXN0ZW5lcikscm90YXRlZENsaXBTdGFydD1yb3RhdGUuaW52ZXJ0KGNsaXBTdGFydFswXSxjbGlwU3RhcnRbMV0pO3ZhciBjbGlwPXtwb2ludDpwb2ludCxsaW5lU3RhcnQ6bGluZVN0YXJ0LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7Y2xpcC5wb2ludCA9IHBvaW50UmluZztjbGlwLmxpbmVTdGFydCA9IHJpbmdTdGFydDtjbGlwLmxpbmVFbmQgPSByaW5nRW5kO3NlZ21lbnRzID0gW107cG9seWdvbiA9IFtdO30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7Y2xpcC5wb2ludCA9IHBvaW50O2NsaXAubGluZVN0YXJ0ID0gbGluZVN0YXJ0O2NsaXAubGluZUVuZCA9IGxpbmVFbmQ7c2VnbWVudHMgPSBkMy5tZXJnZShzZWdtZW50cyk7dmFyIGNsaXBTdGFydEluc2lkZT1kM19nZW9fcG9pbnRJblBvbHlnb24ocm90YXRlZENsaXBTdGFydCxwb2x5Z29uKTtpZihzZWdtZW50cy5sZW5ndGgpe2lmKCFwb2x5Z29uU3RhcnRlZClsaXN0ZW5lci5wb2x5Z29uU3RhcnQoKSxwb2x5Z29uU3RhcnRlZCA9IHRydWU7ZDNfZ2VvX2NsaXBQb2x5Z29uKHNlZ21lbnRzLGQzX2dlb19jbGlwU29ydCxjbGlwU3RhcnRJbnNpZGUsaW50ZXJwb2xhdGUsbGlzdGVuZXIpO31lbHNlIGlmKGNsaXBTdGFydEluc2lkZSl7aWYoIXBvbHlnb25TdGFydGVkKWxpc3RlbmVyLnBvbHlnb25TdGFydCgpLHBvbHlnb25TdGFydGVkID0gdHJ1ZTtsaXN0ZW5lci5saW5lU3RhcnQoKTtpbnRlcnBvbGF0ZShudWxsLG51bGwsMSxsaXN0ZW5lcik7bGlzdGVuZXIubGluZUVuZCgpO31pZihwb2x5Z29uU3RhcnRlZClsaXN0ZW5lci5wb2x5Z29uRW5kKCkscG9seWdvblN0YXJ0ZWQgPSBmYWxzZTtzZWdtZW50cyA9IHBvbHlnb24gPSBudWxsO30sc3BoZXJlOmZ1bmN0aW9uIHNwaGVyZSgpe2xpc3RlbmVyLnBvbHlnb25TdGFydCgpO2xpc3RlbmVyLmxpbmVTdGFydCgpO2ludGVycG9sYXRlKG51bGwsbnVsbCwxLGxpc3RlbmVyKTtsaXN0ZW5lci5saW5lRW5kKCk7bGlzdGVuZXIucG9seWdvbkVuZCgpO319O2Z1bmN0aW9uIHBvaW50KM67LM+GKXt2YXIgcG9pbnQ9cm90YXRlKM67LM+GKTtpZihwb2ludFZpc2libGUozrsgPSBwb2ludFswXSzPhiA9IHBvaW50WzFdKSlsaXN0ZW5lci5wb2ludCjOuyzPhik7fWZ1bmN0aW9uIHBvaW50TGluZSjOuyzPhil7dmFyIHBvaW50PXJvdGF0ZSjOuyzPhik7bGluZS5wb2ludChwb2ludFswXSxwb2ludFsxXSk7fWZ1bmN0aW9uIGxpbmVTdGFydCgpe2NsaXAucG9pbnQgPSBwb2ludExpbmU7bGluZS5saW5lU3RhcnQoKTt9ZnVuY3Rpb24gbGluZUVuZCgpe2NsaXAucG9pbnQgPSBwb2ludDtsaW5lLmxpbmVFbmQoKTt9dmFyIHNlZ21lbnRzO3ZhciBidWZmZXI9ZDNfZ2VvX2NsaXBCdWZmZXJMaXN0ZW5lcigpLHJpbmdMaXN0ZW5lcj1jbGlwTGluZShidWZmZXIpLHBvbHlnb25TdGFydGVkPWZhbHNlLHBvbHlnb24scmluZztmdW5jdGlvbiBwb2ludFJpbmcozrssz4Ype3JpbmcucHVzaChbzrssz4ZdKTt2YXIgcG9pbnQ9cm90YXRlKM67LM+GKTtyaW5nTGlzdGVuZXIucG9pbnQocG9pbnRbMF0scG9pbnRbMV0pO31mdW5jdGlvbiByaW5nU3RhcnQoKXtyaW5nTGlzdGVuZXIubGluZVN0YXJ0KCk7cmluZyA9IFtdO31mdW5jdGlvbiByaW5nRW5kKCl7cG9pbnRSaW5nKHJpbmdbMF1bMF0scmluZ1swXVsxXSk7cmluZ0xpc3RlbmVyLmxpbmVFbmQoKTt2YXIgY2xlYW49cmluZ0xpc3RlbmVyLmNsZWFuKCkscmluZ1NlZ21lbnRzPWJ1ZmZlci5idWZmZXIoKSxzZWdtZW50LG49cmluZ1NlZ21lbnRzLmxlbmd0aDtyaW5nLnBvcCgpO3BvbHlnb24ucHVzaChyaW5nKTtyaW5nID0gbnVsbDtpZighbilyZXR1cm47aWYoY2xlYW4gJiAxKXtzZWdtZW50ID0gcmluZ1NlZ21lbnRzWzBdO3ZhciBuPXNlZ21lbnQubGVuZ3RoIC0gMSxpPS0xLHBvaW50O2lmKG4gPiAwKXtpZighcG9seWdvblN0YXJ0ZWQpbGlzdGVuZXIucG9seWdvblN0YXJ0KCkscG9seWdvblN0YXJ0ZWQgPSB0cnVlO2xpc3RlbmVyLmxpbmVTdGFydCgpO3doaWxlKCsraSA8IG4pIGxpc3RlbmVyLnBvaW50KChwb2ludCA9IHNlZ21lbnRbaV0pWzBdLHBvaW50WzFdKTtsaXN0ZW5lci5saW5lRW5kKCk7fXJldHVybjt9aWYobiA+IDEgJiYgY2xlYW4gJiAyKXJpbmdTZWdtZW50cy5wdXNoKHJpbmdTZWdtZW50cy5wb3AoKS5jb25jYXQocmluZ1NlZ21lbnRzLnNoaWZ0KCkpKTtzZWdtZW50cy5wdXNoKHJpbmdTZWdtZW50cy5maWx0ZXIoZDNfZ2VvX2NsaXBTZWdtZW50TGVuZ3RoMSkpO31yZXR1cm4gY2xpcDt9O31mdW5jdGlvbiBkM19nZW9fY2xpcFNlZ21lbnRMZW5ndGgxKHNlZ21lbnQpe3JldHVybiBzZWdtZW50Lmxlbmd0aCA+IDE7fWZ1bmN0aW9uIGQzX2dlb19jbGlwQnVmZmVyTGlzdGVuZXIoKXt2YXIgbGluZXM9W10sbGluZTtyZXR1cm4ge2xpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtsaW5lcy5wdXNoKGxpbmUgPSBbXSk7fSxwb2ludDpmdW5jdGlvbiBwb2ludCjOuyzPhil7bGluZS5wdXNoKFvOuyzPhl0pO30sbGluZUVuZDpkM19ub29wLGJ1ZmZlcjpmdW5jdGlvbiBidWZmZXIoKXt2YXIgYnVmZmVyPWxpbmVzO2xpbmVzID0gW107bGluZSA9IG51bGw7cmV0dXJuIGJ1ZmZlcjt9LHJlam9pbjpmdW5jdGlvbiByZWpvaW4oKXtpZihsaW5lcy5sZW5ndGggPiAxKWxpbmVzLnB1c2gobGluZXMucG9wKCkuY29uY2F0KGxpbmVzLnNoaWZ0KCkpKTt9fTt9ZnVuY3Rpb24gZDNfZ2VvX2NsaXBTb3J0KGEsYil7cmV0dXJuICgoYSA9IGEueClbMF0gPCAwP2FbMV0gLSBoYWxmz4AgLSDOtTpoYWxmz4AgLSBhWzFdKSAtICgoYiA9IGIueClbMF0gPCAwP2JbMV0gLSBoYWxmz4AgLSDOtTpoYWxmz4AgLSBiWzFdKTt9dmFyIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuPWQzX2dlb19jbGlwKGQzX3RydWUsZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW5MaW5lLGQzX2dlb19jbGlwQW50aW1lcmlkaWFuSW50ZXJwb2xhdGUsWy3PgCwtz4AgLyAyXSk7ZnVuY3Rpb24gZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW5MaW5lKGxpc3RlbmVyKXt2YXIgzrswPU5hTizPhjA9TmFOLHPOuzA9TmFOLF9jbGVhbjtyZXR1cm4ge2xpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtsaXN0ZW5lci5saW5lU3RhcnQoKTtfY2xlYW4gPSAxO30scG9pbnQ6ZnVuY3Rpb24gcG9pbnQozrsxLM+GMSl7dmFyIHPOuzE9zrsxID4gMD/PgDotz4AsZM67PWFicyjOuzEgLSDOuzApO2lmKGFicyhkzrsgLSDPgCkgPCDOtSl7bGlzdGVuZXIucG9pbnQozrswLM+GMCA9ICjPhjAgKyDPhjEpIC8gMiA+IDA/aGFsZs+AOi1oYWxmz4ApO2xpc3RlbmVyLnBvaW50KHPOuzAsz4YwKTtsaXN0ZW5lci5saW5lRW5kKCk7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoc867MSzPhjApO2xpc3RlbmVyLnBvaW50KM67MSzPhjApO19jbGVhbiA9IDA7fWVsc2UgaWYoc867MCAhPT0gc867MSAmJiBkzrsgPj0gz4Ape2lmKGFicyjOuzAgLSBzzrswKSA8IM61Kc67MCAtPSBzzrswICogzrU7aWYoYWJzKM67MSAtIHPOuzEpIDwgzrUpzrsxIC09IHPOuzEgKiDOtTvPhjAgPSBkM19nZW9fY2xpcEFudGltZXJpZGlhbkludGVyc2VjdCjOuzAsz4YwLM67MSzPhjEpO2xpc3RlbmVyLnBvaW50KHPOuzAsz4YwKTtsaXN0ZW5lci5saW5lRW5kKCk7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoc867MSzPhjApO19jbGVhbiA9IDA7fWxpc3RlbmVyLnBvaW50KM67MCA9IM67MSzPhjAgPSDPhjEpO3POuzAgPSBzzrsxO30sbGluZUVuZDpmdW5jdGlvbiBsaW5lRW5kKCl7bGlzdGVuZXIubGluZUVuZCgpO867MCA9IM+GMCA9IE5hTjt9LGNsZWFuOmZ1bmN0aW9uIGNsZWFuKCl7cmV0dXJuIDIgLSBfY2xlYW47fX07fWZ1bmN0aW9uIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuSW50ZXJzZWN0KM67MCzPhjAszrsxLM+GMSl7dmFyIGNvc8+GMCxjb3PPhjEsc2luzrswX867MT1NYXRoLnNpbijOuzAgLSDOuzEpO3JldHVybiBhYnMoc2luzrswX867MSkgPiDOtT9NYXRoLmF0YW4oKE1hdGguc2luKM+GMCkgKiAoY29zz4YxID0gTWF0aC5jb3Moz4YxKSkgKiBNYXRoLnNpbijOuzEpIC0gTWF0aC5zaW4oz4YxKSAqIChjb3PPhjAgPSBNYXRoLmNvcyjPhjApKSAqIE1hdGguc2luKM67MCkpIC8gKGNvc8+GMCAqIGNvc8+GMSAqIHNpbs67MF/OuzEpKTooz4YwICsgz4YxKSAvIDI7fWZ1bmN0aW9uIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuSW50ZXJwb2xhdGUoZnJvbSx0byxkaXJlY3Rpb24sbGlzdGVuZXIpe3ZhciDPhjtpZihmcm9tID09IG51bGwpe8+GID0gZGlyZWN0aW9uICogaGFsZs+AO2xpc3RlbmVyLnBvaW50KC3PgCzPhik7bGlzdGVuZXIucG9pbnQoMCzPhik7bGlzdGVuZXIucG9pbnQoz4Asz4YpO2xpc3RlbmVyLnBvaW50KM+ALDApO2xpc3RlbmVyLnBvaW50KM+ALC3Phik7bGlzdGVuZXIucG9pbnQoMCwtz4YpO2xpc3RlbmVyLnBvaW50KC3PgCwtz4YpO2xpc3RlbmVyLnBvaW50KC3PgCwwKTtsaXN0ZW5lci5wb2ludCgtz4Asz4YpO31lbHNlIGlmKGFicyhmcm9tWzBdIC0gdG9bMF0pID4gzrUpe3ZhciBzPWZyb21bMF0gPCB0b1swXT/PgDotz4A7z4YgPSBkaXJlY3Rpb24gKiBzIC8gMjtsaXN0ZW5lci5wb2ludCgtcyzPhik7bGlzdGVuZXIucG9pbnQoMCzPhik7bGlzdGVuZXIucG9pbnQocyzPhik7fWVsc2Uge2xpc3RlbmVyLnBvaW50KHRvWzBdLHRvWzFdKTt9fWZ1bmN0aW9uIGQzX2dlb19wb2ludEluUG9seWdvbihwb2ludCxwb2x5Z29uKXt2YXIgbWVyaWRpYW49cG9pbnRbMF0scGFyYWxsZWw9cG9pbnRbMV0sbWVyaWRpYW5Ob3JtYWw9W01hdGguc2luKG1lcmlkaWFuKSwtTWF0aC5jb3MobWVyaWRpYW4pLDBdLHBvbGFyQW5nbGU9MCx3aW5kaW5nPTA7ZDNfZ2VvX2FyZWFSaW5nU3VtLnJlc2V0KCk7Zm9yKHZhciBpPTAsbj1wb2x5Z29uLmxlbmd0aDtpIDwgbjsrK2kpIHt2YXIgcmluZz1wb2x5Z29uW2ldLG09cmluZy5sZW5ndGg7aWYoIW0pY29udGludWU7dmFyIHBvaW50MD1yaW5nWzBdLM67MD1wb2ludDBbMF0sz4YwPXBvaW50MFsxXSAvIDIgKyDPgCAvIDQsc2luz4YwPU1hdGguc2luKM+GMCksY29zz4YwPU1hdGguY29zKM+GMCksaj0xO3doaWxlKHRydWUpIHtpZihqID09PSBtKWogPSAwO3BvaW50ID0gcmluZ1tqXTt2YXIgzrs9cG9pbnRbMF0sz4Y9cG9pbnRbMV0gLyAyICsgz4AgLyA0LHNpbs+GPU1hdGguc2luKM+GKSxjb3PPhj1NYXRoLmNvcyjPhiksZM67Pc67IC0gzrswLHNkzrs9ZM67ID49IDA/MTotMSxhZM67PXNkzrsgKiBkzrssYW50aW1lcmlkaWFuPWFkzrsgPiDPgCxrPXNpbs+GMCAqIHNpbs+GO2QzX2dlb19hcmVhUmluZ1N1bS5hZGQoTWF0aC5hdGFuMihrICogc2TOuyAqIE1hdGguc2luKGFkzrspLGNvc8+GMCAqIGNvc8+GICsgayAqIE1hdGguY29zKGFkzrspKSk7cG9sYXJBbmdsZSArPSBhbnRpbWVyaWRpYW4/ZM67ICsgc2TOuyAqIM+EOmTOuztpZihhbnRpbWVyaWRpYW4gXiDOuzAgPj0gbWVyaWRpYW4gXiDOuyA+PSBtZXJpZGlhbil7dmFyIGFyYz1kM19nZW9fY2FydGVzaWFuQ3Jvc3MoZDNfZ2VvX2NhcnRlc2lhbihwb2ludDApLGQzX2dlb19jYXJ0ZXNpYW4ocG9pbnQpKTtkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGFyYyk7dmFyIGludGVyc2VjdGlvbj1kM19nZW9fY2FydGVzaWFuQ3Jvc3MobWVyaWRpYW5Ob3JtYWwsYXJjKTtkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGludGVyc2VjdGlvbik7dmFyIM+GYXJjPShhbnRpbWVyaWRpYW4gXiBkzrsgPj0gMD8tMToxKSAqIGQzX2FzaW4oaW50ZXJzZWN0aW9uWzJdKTtpZihwYXJhbGxlbCA+IM+GYXJjIHx8IHBhcmFsbGVsID09PSDPhmFyYyAmJiAoYXJjWzBdIHx8IGFyY1sxXSkpe3dpbmRpbmcgKz0gYW50aW1lcmlkaWFuIF4gZM67ID49IDA/MTotMTt9fWlmKCEgaisrKWJyZWFrO867MCA9IM67LHNpbs+GMCA9IHNpbs+GLGNvc8+GMCA9IGNvc8+GLHBvaW50MCA9IHBvaW50O319cmV0dXJuIChwb2xhckFuZ2xlIDwgLc61IHx8IHBvbGFyQW5nbGUgPCDOtSAmJiBkM19nZW9fYXJlYVJpbmdTdW0gPCAwKSBeIHdpbmRpbmcgJiAxO31mdW5jdGlvbiBkM19nZW9fY2xpcENpcmNsZShyYWRpdXMpe3ZhciBjcj1NYXRoLmNvcyhyYWRpdXMpLHNtYWxsUmFkaXVzPWNyID4gMCxub3RIZW1pc3BoZXJlPWFicyhjcikgPiDOtSxpbnRlcnBvbGF0ZT1kM19nZW9fY2lyY2xlSW50ZXJwb2xhdGUocmFkaXVzLDYgKiBkM19yYWRpYW5zKTtyZXR1cm4gZDNfZ2VvX2NsaXAodmlzaWJsZSxjbGlwTGluZSxpbnRlcnBvbGF0ZSxzbWFsbFJhZGl1cz9bMCwtcmFkaXVzXTpbLc+ALHJhZGl1cyAtIM+AXSk7ZnVuY3Rpb24gdmlzaWJsZSjOuyzPhil7cmV0dXJuIE1hdGguY29zKM67KSAqIE1hdGguY29zKM+GKSA+IGNyO31mdW5jdGlvbiBjbGlwTGluZShsaXN0ZW5lcil7dmFyIHBvaW50MCxjMCx2MCx2MDAsX2NsZWFuMjtyZXR1cm4ge2xpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXt2MDAgPSB2MCA9IGZhbHNlO19jbGVhbjIgPSAxO30scG9pbnQ6ZnVuY3Rpb24gcG9pbnQozrssz4Ype3ZhciBwb2ludDE9W867LM+GXSxwb2ludDIsdj12aXNpYmxlKM67LM+GKSxjPXNtYWxsUmFkaXVzP3Y/MDpjb2RlKM67LM+GKTp2P2NvZGUozrsgKyAozrsgPCAwP8+AOi3PgCksz4YpOjA7aWYoIXBvaW50MCAmJiAodjAwID0gdjAgPSB2KSlsaXN0ZW5lci5saW5lU3RhcnQoKTtpZih2ICE9PSB2MCl7cG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MCxwb2ludDEpO2lmKGQzX2dlb19zcGhlcmljYWxFcXVhbChwb2ludDAscG9pbnQyKSB8fCBkM19nZW9fc3BoZXJpY2FsRXF1YWwocG9pbnQxLHBvaW50Mikpe3BvaW50MVswXSArPSDOtTtwb2ludDFbMV0gKz0gzrU7diA9IHZpc2libGUocG9pbnQxWzBdLHBvaW50MVsxXSk7fX1pZih2ICE9PSB2MCl7X2NsZWFuMiA9IDA7aWYodil7bGlzdGVuZXIubGluZVN0YXJ0KCk7cG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MSxwb2ludDApO2xpc3RlbmVyLnBvaW50KHBvaW50MlswXSxwb2ludDJbMV0pO31lbHNlIHtwb2ludDIgPSBpbnRlcnNlY3QocG9pbnQwLHBvaW50MSk7bGlzdGVuZXIucG9pbnQocG9pbnQyWzBdLHBvaW50MlsxXSk7bGlzdGVuZXIubGluZUVuZCgpO31wb2ludDAgPSBwb2ludDI7fWVsc2UgaWYobm90SGVtaXNwaGVyZSAmJiBwb2ludDAgJiYgc21hbGxSYWRpdXMgXiB2KXt2YXIgdDtpZighKGMgJiBjMCkgJiYgKHQgPSBpbnRlcnNlY3QocG9pbnQxLHBvaW50MCx0cnVlKSkpe19jbGVhbjIgPSAwO2lmKHNtYWxsUmFkaXVzKXtsaXN0ZW5lci5saW5lU3RhcnQoKTtsaXN0ZW5lci5wb2ludCh0WzBdWzBdLHRbMF1bMV0pO2xpc3RlbmVyLnBvaW50KHRbMV1bMF0sdFsxXVsxXSk7bGlzdGVuZXIubGluZUVuZCgpO31lbHNlIHtsaXN0ZW5lci5wb2ludCh0WzFdWzBdLHRbMV1bMV0pO2xpc3RlbmVyLmxpbmVFbmQoKTtsaXN0ZW5lci5saW5lU3RhcnQoKTtsaXN0ZW5lci5wb2ludCh0WzBdWzBdLHRbMF1bMV0pO319fWlmKHYgJiYgKCFwb2ludDAgfHwgIWQzX2dlb19zcGhlcmljYWxFcXVhbChwb2ludDAscG9pbnQxKSkpe2xpc3RlbmVyLnBvaW50KHBvaW50MVswXSxwb2ludDFbMV0pO31wb2ludDAgPSBwb2ludDEsdjAgPSB2LGMwID0gYzt9LGxpbmVFbmQ6ZnVuY3Rpb24gbGluZUVuZCgpe2lmKHYwKWxpc3RlbmVyLmxpbmVFbmQoKTtwb2ludDAgPSBudWxsO30sY2xlYW46ZnVuY3Rpb24gY2xlYW4oKXtyZXR1cm4gX2NsZWFuMiB8ICh2MDAgJiYgdjApIDw8IDE7fX07fWZ1bmN0aW9uIGludGVyc2VjdChhLGIsdHdvKXt2YXIgcGE9ZDNfZ2VvX2NhcnRlc2lhbihhKSxwYj1kM19nZW9fY2FydGVzaWFuKGIpO3ZhciBuMT1bMSwwLDBdLG4yPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhwYSxwYiksbjJuMj1kM19nZW9fY2FydGVzaWFuRG90KG4yLG4yKSxuMW4yPW4yWzBdLGRldGVybWluYW50PW4ybjIgLSBuMW4yICogbjFuMjtpZighZGV0ZXJtaW5hbnQpcmV0dXJuICF0d28gJiYgYTt2YXIgYzE9Y3IgKiBuMm4yIC8gZGV0ZXJtaW5hbnQsYzI9LWNyICogbjFuMiAvIGRldGVybWluYW50LG4xeG4yPWQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhuMSxuMiksQT1kM19nZW9fY2FydGVzaWFuU2NhbGUobjEsYzEpLEI9ZDNfZ2VvX2NhcnRlc2lhblNjYWxlKG4yLGMyKTtkM19nZW9fY2FydGVzaWFuQWRkKEEsQik7dmFyIHU9bjF4bjIsdz1kM19nZW9fY2FydGVzaWFuRG90KEEsdSksdXU9ZDNfZ2VvX2NhcnRlc2lhbkRvdCh1LHUpLHQyPXcgKiB3IC0gdXUgKiAoZDNfZ2VvX2NhcnRlc2lhbkRvdChBLEEpIC0gMSk7aWYodDIgPCAwKXJldHVybjt2YXIgdD1NYXRoLnNxcnQodDIpLHE9ZDNfZ2VvX2NhcnRlc2lhblNjYWxlKHUsKC13IC0gdCkgLyB1dSk7ZDNfZ2VvX2NhcnRlc2lhbkFkZChxLEEpO3EgPSBkM19nZW9fc3BoZXJpY2FsKHEpO2lmKCF0d28pcmV0dXJuIHE7dmFyIM67MD1hWzBdLM67MT1iWzBdLM+GMD1hWzFdLM+GMT1iWzFdLHo7aWYozrsxIDwgzrswKXogPSDOuzAszrswID0gzrsxLM67MSA9IHo7dmFyIM60zrs9zrsxIC0gzrswLHBvbGFyPWFicyjOtM67IC0gz4ApIDwgzrUsbWVyaWRpYW49cG9sYXIgfHwgzrTOuyA8IM61O2lmKCFwb2xhciAmJiDPhjEgPCDPhjApeiA9IM+GMCzPhjAgPSDPhjEsz4YxID0gejtpZihtZXJpZGlhbj9wb2xhcj/PhjAgKyDPhjEgPiAwIF4gcVsxXSA8IChhYnMocVswXSAtIM67MCkgPCDOtT/PhjA6z4YxKTrPhjAgPD0gcVsxXSAmJiBxWzFdIDw9IM+GMTrOtM67ID4gz4AgXiAozrswIDw9IHFbMF0gJiYgcVswXSA8PSDOuzEpKXt2YXIgcTE9ZDNfZ2VvX2NhcnRlc2lhblNjYWxlKHUsKC13ICsgdCkgLyB1dSk7ZDNfZ2VvX2NhcnRlc2lhbkFkZChxMSxBKTtyZXR1cm4gW3EsZDNfZ2VvX3NwaGVyaWNhbChxMSldO319ZnVuY3Rpb24gY29kZSjOuyzPhil7dmFyIHI9c21hbGxSYWRpdXM/cmFkaXVzOs+AIC0gcmFkaXVzLGNvZGU9MDtpZijOuyA8IC1yKWNvZGUgfD0gMTtlbHNlIGlmKM67ID4gciljb2RlIHw9IDI7aWYoz4YgPCAtciljb2RlIHw9IDQ7ZWxzZSBpZijPhiA+IHIpY29kZSB8PSA4O3JldHVybiBjb2RlO319ZnVuY3Rpb24gZDNfZ2VvbV9jbGlwTGluZSh4MCx5MCx4MSx5MSl7cmV0dXJuIGZ1bmN0aW9uKGxpbmUpe3ZhciBhPWxpbmUuYSxiPWxpbmUuYixheD1hLngsYXk9YS55LGJ4PWIueCxieT1iLnksdDA9MCx0MT0xLGR4PWJ4IC0gYXgsZHk9YnkgLSBheSxyO3IgPSB4MCAtIGF4O2lmKCFkeCAmJiByID4gMClyZXR1cm47ciAvPSBkeDtpZihkeCA8IDApe2lmKHIgPCB0MClyZXR1cm47aWYociA8IHQxKXQxID0gcjt9ZWxzZSBpZihkeCA+IDApe2lmKHIgPiB0MSlyZXR1cm47aWYociA+IHQwKXQwID0gcjt9ciA9IHgxIC0gYXg7aWYoIWR4ICYmIHIgPCAwKXJldHVybjtyIC89IGR4O2lmKGR4IDwgMCl7aWYociA+IHQxKXJldHVybjtpZihyID4gdDApdDAgPSByO31lbHNlIGlmKGR4ID4gMCl7aWYociA8IHQwKXJldHVybjtpZihyIDwgdDEpdDEgPSByO31yID0geTAgLSBheTtpZighZHkgJiYgciA+IDApcmV0dXJuO3IgLz0gZHk7aWYoZHkgPCAwKXtpZihyIDwgdDApcmV0dXJuO2lmKHIgPCB0MSl0MSA9IHI7fWVsc2UgaWYoZHkgPiAwKXtpZihyID4gdDEpcmV0dXJuO2lmKHIgPiB0MCl0MCA9IHI7fXIgPSB5MSAtIGF5O2lmKCFkeSAmJiByIDwgMClyZXR1cm47ciAvPSBkeTtpZihkeSA8IDApe2lmKHIgPiB0MSlyZXR1cm47aWYociA+IHQwKXQwID0gcjt9ZWxzZSBpZihkeSA+IDApe2lmKHIgPCB0MClyZXR1cm47aWYociA8IHQxKXQxID0gcjt9aWYodDAgPiAwKWxpbmUuYSA9IHt4OmF4ICsgdDAgKiBkeCx5OmF5ICsgdDAgKiBkeX07aWYodDEgPCAxKWxpbmUuYiA9IHt4OmF4ICsgdDEgKiBkeCx5OmF5ICsgdDEgKiBkeX07cmV0dXJuIGxpbmU7fTt9dmFyIGQzX2dlb19jbGlwRXh0ZW50TUFYPTFlOTtkMy5nZW8uY2xpcEV4dGVudCA9IGZ1bmN0aW9uKCl7dmFyIHgwLHkwLHgxLHkxLF9zdHJlYW0sY2xpcCxjbGlwRXh0ZW50PXtzdHJlYW06ZnVuY3Rpb24gc3RyZWFtKG91dHB1dCl7aWYoX3N0cmVhbSlfc3RyZWFtLnZhbGlkID0gZmFsc2U7X3N0cmVhbSA9IGNsaXAob3V0cHV0KTtfc3RyZWFtLnZhbGlkID0gdHJ1ZTtyZXR1cm4gX3N0cmVhbTt9LGV4dGVudDpmdW5jdGlvbiBleHRlbnQoXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFtbeDAseTBdLFt4MSx5MV1dO2NsaXAgPSBkM19nZW9fY2xpcEV4dGVudCh4MCA9ICtfWzBdWzBdLHkwID0gK19bMF1bMV0seDEgPSArX1sxXVswXSx5MSA9ICtfWzFdWzFdKTtpZihfc3RyZWFtKV9zdHJlYW0udmFsaWQgPSBmYWxzZSxfc3RyZWFtID0gbnVsbDtyZXR1cm4gY2xpcEV4dGVudDt9fTtyZXR1cm4gY2xpcEV4dGVudC5leHRlbnQoW1swLDBdLFs5NjAsNTAwXV0pO307ZnVuY3Rpb24gZDNfZ2VvX2NsaXBFeHRlbnQoeDAseTAseDEseTEpe3JldHVybiBmdW5jdGlvbihsaXN0ZW5lcil7dmFyIGxpc3RlbmVyXz1saXN0ZW5lcixidWZmZXJMaXN0ZW5lcj1kM19nZW9fY2xpcEJ1ZmZlckxpc3RlbmVyKCksY2xpcExpbmU9ZDNfZ2VvbV9jbGlwTGluZSh4MCx5MCx4MSx5MSksc2VnbWVudHMscG9seWdvbixyaW5nO3ZhciBjbGlwPXtwb2ludDpwb2ludCxsaW5lU3RhcnQ6bGluZVN0YXJ0LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7bGlzdGVuZXIgPSBidWZmZXJMaXN0ZW5lcjtzZWdtZW50cyA9IFtdO3BvbHlnb24gPSBbXTtjbGVhbiA9IHRydWU7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtsaXN0ZW5lciA9IGxpc3RlbmVyXztzZWdtZW50cyA9IGQzLm1lcmdlKHNlZ21lbnRzKTt2YXIgY2xpcFN0YXJ0SW5zaWRlPWluc2lkZVBvbHlnb24oW3gwLHkxXSksaW5zaWRlPWNsZWFuICYmIGNsaXBTdGFydEluc2lkZSx2aXNpYmxlPXNlZ21lbnRzLmxlbmd0aDtpZihpbnNpZGUgfHwgdmlzaWJsZSl7bGlzdGVuZXIucG9seWdvblN0YXJ0KCk7aWYoaW5zaWRlKXtsaXN0ZW5lci5saW5lU3RhcnQoKTtpbnRlcnBvbGF0ZShudWxsLG51bGwsMSxsaXN0ZW5lcik7bGlzdGVuZXIubGluZUVuZCgpO31pZih2aXNpYmxlKXtkM19nZW9fY2xpcFBvbHlnb24oc2VnbWVudHMsY29tcGFyZSxjbGlwU3RhcnRJbnNpZGUsaW50ZXJwb2xhdGUsbGlzdGVuZXIpO31saXN0ZW5lci5wb2x5Z29uRW5kKCk7fXNlZ21lbnRzID0gcG9seWdvbiA9IHJpbmcgPSBudWxsO319O2Z1bmN0aW9uIGluc2lkZVBvbHlnb24ocCl7dmFyIHduPTAsbj1wb2x5Z29uLmxlbmd0aCx5PXBbMV07Zm9yKHZhciBpPTA7aSA8IG47KytpKSB7Zm9yKHZhciBqPTEsdj1wb2x5Z29uW2ldLG09di5sZW5ndGgsYT12WzBdLGI7aiA8IG07KytqKSB7YiA9IHZbal07aWYoYVsxXSA8PSB5KXtpZihiWzFdID4geSAmJiBkM19jcm9zczJkKGEsYixwKSA+IDApKyt3bjt9ZWxzZSB7aWYoYlsxXSA8PSB5ICYmIGQzX2Nyb3NzMmQoYSxiLHApIDwgMCktLXduO31hID0gYjt9fXJldHVybiB3biAhPT0gMDt9ZnVuY3Rpb24gaW50ZXJwb2xhdGUoZnJvbSx0byxkaXJlY3Rpb24sbGlzdGVuZXIpe3ZhciBhPTAsYTE9MDtpZihmcm9tID09IG51bGwgfHwgKGEgPSBjb3JuZXIoZnJvbSxkaXJlY3Rpb24pKSAhPT0gKGExID0gY29ybmVyKHRvLGRpcmVjdGlvbikpIHx8IGNvbXBhcmVQb2ludHMoZnJvbSx0bykgPCAwIF4gZGlyZWN0aW9uID4gMCl7ZG8ge2xpc3RlbmVyLnBvaW50KGEgPT09IDAgfHwgYSA9PT0gMz94MDp4MSxhID4gMT95MTp5MCk7fXdoaWxlKChhID0gKGEgKyBkaXJlY3Rpb24gKyA0KSAlIDQpICE9PSBhMSk7fWVsc2Uge2xpc3RlbmVyLnBvaW50KHRvWzBdLHRvWzFdKTt9fWZ1bmN0aW9uIHBvaW50VmlzaWJsZSh4LHkpe3JldHVybiB4MCA8PSB4ICYmIHggPD0geDEgJiYgeTAgPD0geSAmJiB5IDw9IHkxO31mdW5jdGlvbiBwb2ludCh4LHkpe2lmKHBvaW50VmlzaWJsZSh4LHkpKWxpc3RlbmVyLnBvaW50KHgseSk7fXZhciB4X18seV9fLHZfXyx4Xyx5Xyx2XyxmaXJzdCxjbGVhbjtmdW5jdGlvbiBsaW5lU3RhcnQoKXtjbGlwLnBvaW50ID0gbGluZVBvaW50O2lmKHBvbHlnb24pcG9seWdvbi5wdXNoKHJpbmcgPSBbXSk7Zmlyc3QgPSB0cnVlO3ZfID0gZmFsc2U7eF8gPSB5XyA9IE5hTjt9ZnVuY3Rpb24gbGluZUVuZCgpe2lmKHNlZ21lbnRzKXtsaW5lUG9pbnQoeF9fLHlfXyk7aWYodl9fICYmIHZfKWJ1ZmZlckxpc3RlbmVyLnJlam9pbigpO3NlZ21lbnRzLnB1c2goYnVmZmVyTGlzdGVuZXIuYnVmZmVyKCkpO31jbGlwLnBvaW50ID0gcG9pbnQ7aWYodl8pbGlzdGVuZXIubGluZUVuZCgpO31mdW5jdGlvbiBsaW5lUG9pbnQoeCx5KXt4ID0gTWF0aC5tYXgoLWQzX2dlb19jbGlwRXh0ZW50TUFYLE1hdGgubWluKGQzX2dlb19jbGlwRXh0ZW50TUFYLHgpKTt5ID0gTWF0aC5tYXgoLWQzX2dlb19jbGlwRXh0ZW50TUFYLE1hdGgubWluKGQzX2dlb19jbGlwRXh0ZW50TUFYLHkpKTt2YXIgdj1wb2ludFZpc2libGUoeCx5KTtpZihwb2x5Z29uKXJpbmcucHVzaChbeCx5XSk7aWYoZmlyc3Qpe3hfXyA9IHgseV9fID0geSx2X18gPSB2O2ZpcnN0ID0gZmFsc2U7aWYodil7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoeCx5KTt9fWVsc2Uge2lmKHYgJiYgdl8pbGlzdGVuZXIucG9pbnQoeCx5KTtlbHNlIHt2YXIgbD17YTp7eDp4Xyx5OnlffSxiOnt4OngseTp5fX07aWYoY2xpcExpbmUobCkpe2lmKCF2Xyl7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQobC5hLngsbC5hLnkpO31saXN0ZW5lci5wb2ludChsLmIueCxsLmIueSk7aWYoIXYpbGlzdGVuZXIubGluZUVuZCgpO2NsZWFuID0gZmFsc2U7fWVsc2UgaWYodil7bGlzdGVuZXIubGluZVN0YXJ0KCk7bGlzdGVuZXIucG9pbnQoeCx5KTtjbGVhbiA9IGZhbHNlO319fXhfID0geCx5XyA9IHksdl8gPSB2O31yZXR1cm4gY2xpcDt9O2Z1bmN0aW9uIGNvcm5lcihwLGRpcmVjdGlvbil7cmV0dXJuIGFicyhwWzBdIC0geDApIDwgzrU/ZGlyZWN0aW9uID4gMD8wOjM6YWJzKHBbMF0gLSB4MSkgPCDOtT9kaXJlY3Rpb24gPiAwPzI6MTphYnMocFsxXSAtIHkwKSA8IM61P2RpcmVjdGlvbiA+IDA/MTowOmRpcmVjdGlvbiA+IDA/MzoyO31mdW5jdGlvbiBjb21wYXJlKGEsYil7cmV0dXJuIGNvbXBhcmVQb2ludHMoYS54LGIueCk7fWZ1bmN0aW9uIGNvbXBhcmVQb2ludHMoYSxiKXt2YXIgY2E9Y29ybmVyKGEsMSksY2I9Y29ybmVyKGIsMSk7cmV0dXJuIGNhICE9PSBjYj9jYSAtIGNiOmNhID09PSAwP2JbMV0gLSBhWzFdOmNhID09PSAxP2FbMF0gLSBiWzBdOmNhID09PSAyP2FbMV0gLSBiWzFdOmJbMF0gLSBhWzBdO319ZnVuY3Rpb24gZDNfZ2VvX2NvbmljKHByb2plY3RBdCl7dmFyIM+GMD0wLM+GMT3PgCAvIDMsbT1kM19nZW9fcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KSxwPW0oz4YwLM+GMSk7cC5wYXJhbGxlbHMgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW8+GMCAvIM+AICogMTgwLM+GMSAvIM+AICogMTgwXTtyZXR1cm4gbSjPhjAgPSBfWzBdICogz4AgLyAxODAsz4YxID0gX1sxXSAqIM+AIC8gMTgwKTt9O3JldHVybiBwO31mdW5jdGlvbiBkM19nZW9fY29uaWNFcXVhbEFyZWEoz4YwLM+GMSl7dmFyIHNpbs+GMD1NYXRoLnNpbijPhjApLG49KHNpbs+GMCArIE1hdGguc2luKM+GMSkpIC8gMixDPTEgKyBzaW7PhjAgKiAoMiAqIG4gLSBzaW7PhjApLM+BMD1NYXRoLnNxcnQoQykgLyBuO2Z1bmN0aW9uIGZvcndhcmQozrssz4Ype3ZhciDPgT1NYXRoLnNxcnQoQyAtIDIgKiBuICogTWF0aC5zaW4oz4YpKSAvIG47cmV0dXJuIFvPgSAqIE1hdGguc2luKM67ICo9IG4pLM+BMCAtIM+BICogTWF0aC5jb3MozrspXTt9Zm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbih4LHkpe3ZhciDPgTBfeT3PgTAgLSB5O3JldHVybiBbTWF0aC5hdGFuMih4LM+BMF95KSAvIG4sZDNfYXNpbigoQyAtICh4ICogeCArIM+BMF95ICogz4EwX3kpICogbiAqIG4pIC8gKDIgKiBuKSldO307cmV0dXJuIGZvcndhcmQ7fShkMy5nZW8uY29uaWNFcXVhbEFyZWEgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fY29uaWMoZDNfZ2VvX2NvbmljRXF1YWxBcmVhKTt9KS5yYXcgPSBkM19nZW9fY29uaWNFcXVhbEFyZWE7ZDMuZ2VvLmFsYmVycyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApO307ZDMuZ2VvLmFsYmVyc1VzYSA9IGZ1bmN0aW9uKCl7dmFyIGxvd2VyNDg9ZDMuZ2VvLmFsYmVycygpO3ZhciBhbGFza2E9ZDMuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKTt2YXIgaGF3YWlpPWQzLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKTt2YXIgX3BvaW50LHBvaW50U3RyZWFtPXtwb2ludDpmdW5jdGlvbiBwb2ludCh4LHkpe19wb2ludCA9IFt4LHldO319LGxvd2VyNDhQb2ludCxhbGFza2FQb2ludCxoYXdhaWlQb2ludDtmdW5jdGlvbiBhbGJlcnNVc2EoY29vcmRpbmF0ZXMpe3ZhciB4PWNvb3JkaW5hdGVzWzBdLHk9Y29vcmRpbmF0ZXNbMV07X3BvaW50ID0gbnVsbDsobG93ZXI0OFBvaW50KHgseSksX3BvaW50KSB8fCAoYWxhc2thUG9pbnQoeCx5KSxfcG9pbnQpIHx8IGhhd2FpaVBvaW50KHgseSk7cmV0dXJuIF9wb2ludDt9YWxiZXJzVXNhLmludmVydCA9IGZ1bmN0aW9uKGNvb3JkaW5hdGVzKXt2YXIgaz1sb3dlcjQ4LnNjYWxlKCksdD1sb3dlcjQ4LnRyYW5zbGF0ZSgpLHg9KGNvb3JkaW5hdGVzWzBdIC0gdFswXSkgLyBrLHk9KGNvb3JkaW5hdGVzWzFdIC0gdFsxXSkgLyBrO3JldHVybiAoeSA+PSAuMTIgJiYgeSA8IC4yMzQgJiYgeCA+PSAtLjQyNSAmJiB4IDwgLS4yMTQ/YWxhc2thOnkgPj0gLjE2NiAmJiB5IDwgLjIzNCAmJiB4ID49IC0uMjE0ICYmIHggPCAtLjExNT9oYXdhaWk6bG93ZXI0OCkuaW52ZXJ0KGNvb3JkaW5hdGVzKTt9O2FsYmVyc1VzYS5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pe3ZhciBsb3dlcjQ4U3RyZWFtPWxvd2VyNDguc3RyZWFtKHN0cmVhbSksYWxhc2thU3RyZWFtPWFsYXNrYS5zdHJlYW0oc3RyZWFtKSxoYXdhaWlTdHJlYW09aGF3YWlpLnN0cmVhbShzdHJlYW0pO3JldHVybiB7cG9pbnQ6ZnVuY3Rpb24gcG9pbnQoeCx5KXtsb3dlcjQ4U3RyZWFtLnBvaW50KHgseSk7YWxhc2thU3RyZWFtLnBvaW50KHgseSk7aGF3YWlpU3RyZWFtLnBvaW50KHgseSk7fSxzcGhlcmU6ZnVuY3Rpb24gc3BoZXJlKCl7bG93ZXI0OFN0cmVhbS5zcGhlcmUoKTthbGFza2FTdHJlYW0uc3BoZXJlKCk7aGF3YWlpU3RyZWFtLnNwaGVyZSgpO30sbGluZVN0YXJ0OmZ1bmN0aW9uIGxpbmVTdGFydCgpe2xvd2VyNDhTdHJlYW0ubGluZVN0YXJ0KCk7YWxhc2thU3RyZWFtLmxpbmVTdGFydCgpO2hhd2FpaVN0cmVhbS5saW5lU3RhcnQoKTt9LGxpbmVFbmQ6ZnVuY3Rpb24gbGluZUVuZCgpe2xvd2VyNDhTdHJlYW0ubGluZUVuZCgpO2FsYXNrYVN0cmVhbS5saW5lRW5kKCk7aGF3YWlpU3RyZWFtLmxpbmVFbmQoKTt9LHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtsb3dlcjQ4U3RyZWFtLnBvbHlnb25TdGFydCgpO2FsYXNrYVN0cmVhbS5wb2x5Z29uU3RhcnQoKTtoYXdhaWlTdHJlYW0ucG9seWdvblN0YXJ0KCk7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtsb3dlcjQ4U3RyZWFtLnBvbHlnb25FbmQoKTthbGFza2FTdHJlYW0ucG9seWdvbkVuZCgpO2hhd2FpaVN0cmVhbS5wb2x5Z29uRW5kKCk7fX07fTthbGJlcnNVc2EucHJlY2lzaW9uID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGxvd2VyNDgucHJlY2lzaW9uKCk7bG93ZXI0OC5wcmVjaXNpb24oXyk7YWxhc2thLnByZWNpc2lvbihfKTtoYXdhaWkucHJlY2lzaW9uKF8pO3JldHVybiBhbGJlcnNVc2E7fTthbGJlcnNVc2Euc2NhbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbG93ZXI0OC5zY2FsZSgpO2xvd2VyNDguc2NhbGUoXyk7YWxhc2thLnNjYWxlKF8gKiAuMzUpO2hhd2FpaS5zY2FsZShfKTtyZXR1cm4gYWxiZXJzVXNhLnRyYW5zbGF0ZShsb3dlcjQ4LnRyYW5zbGF0ZSgpKTt9O2FsYmVyc1VzYS50cmFuc2xhdGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbG93ZXI0OC50cmFuc2xhdGUoKTt2YXIgaz1sb3dlcjQ4LnNjYWxlKCkseD0rX1swXSx5PStfWzFdO2xvd2VyNDhQb2ludCA9IGxvd2VyNDgudHJhbnNsYXRlKF8pLmNsaXBFeHRlbnQoW1t4IC0gLjQ1NSAqIGsseSAtIC4yMzggKiBrXSxbeCArIC40NTUgKiBrLHkgKyAuMjM4ICoga11dKS5zdHJlYW0ocG9pbnRTdHJlYW0pLnBvaW50O2FsYXNrYVBvaW50ID0gYWxhc2thLnRyYW5zbGF0ZShbeCAtIC4zMDcgKiBrLHkgKyAuMjAxICoga10pLmNsaXBFeHRlbnQoW1t4IC0gLjQyNSAqIGsgKyDOtSx5ICsgLjEyICogayArIM61XSxbeCAtIC4yMTQgKiBrIC0gzrUseSArIC4yMzQgKiBrIC0gzrVdXSkuc3RyZWFtKHBvaW50U3RyZWFtKS5wb2ludDtoYXdhaWlQb2ludCA9IGhhd2FpaS50cmFuc2xhdGUoW3ggLSAuMjA1ICogayx5ICsgLjIxMiAqIGtdKS5jbGlwRXh0ZW50KFtbeCAtIC4yMTQgKiBrICsgzrUseSArIC4xNjYgKiBrICsgzrVdLFt4IC0gLjExNSAqIGsgLSDOtSx5ICsgLjIzNCAqIGsgLSDOtV1dKS5zdHJlYW0ocG9pbnRTdHJlYW0pLnBvaW50O3JldHVybiBhbGJlcnNVc2E7fTtyZXR1cm4gYWxiZXJzVXNhLnNjYWxlKDEwNzApO307dmFyIGQzX2dlb19wYXRoQXJlYVN1bSxkM19nZW9fcGF0aEFyZWFQb2x5Z29uLGQzX2dlb19wYXRoQXJlYT17cG9pbnQ6ZDNfbm9vcCxsaW5lU3RhcnQ6ZDNfbm9vcCxsaW5lRW5kOmQzX25vb3AscG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe2QzX2dlb19wYXRoQXJlYVBvbHlnb24gPSAwO2QzX2dlb19wYXRoQXJlYS5saW5lU3RhcnQgPSBkM19nZW9fcGF0aEFyZWFSaW5nU3RhcnQ7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fcGF0aEFyZWEubGluZVN0YXJ0ID0gZDNfZ2VvX3BhdGhBcmVhLmxpbmVFbmQgPSBkM19nZW9fcGF0aEFyZWEucG9pbnQgPSBkM19ub29wO2QzX2dlb19wYXRoQXJlYVN1bSArPSBhYnMoZDNfZ2VvX3BhdGhBcmVhUG9seWdvbiAvIDIpO319O2Z1bmN0aW9uIGQzX2dlb19wYXRoQXJlYVJpbmdTdGFydCgpe3ZhciB4MDAseTAwLHgwLHkwO2QzX2dlb19wYXRoQXJlYS5wb2ludCA9IGZ1bmN0aW9uKHgseSl7ZDNfZ2VvX3BhdGhBcmVhLnBvaW50ID0gbmV4dFBvaW50O3gwMCA9IHgwID0geCx5MDAgPSB5MCA9IHk7fTtmdW5jdGlvbiBuZXh0UG9pbnQoeCx5KXtkM19nZW9fcGF0aEFyZWFQb2x5Z29uICs9IHkwICogeCAtIHgwICogeTt4MCA9IHgseTAgPSB5O31kM19nZW9fcGF0aEFyZWEubGluZUVuZCA9IGZ1bmN0aW9uKCl7bmV4dFBvaW50KHgwMCx5MDApO307fXZhciBkM19nZW9fcGF0aEJvdW5kc1gwLGQzX2dlb19wYXRoQm91bmRzWTAsZDNfZ2VvX3BhdGhCb3VuZHNYMSxkM19nZW9fcGF0aEJvdW5kc1kxO3ZhciBkM19nZW9fcGF0aEJvdW5kcz17cG9pbnQ6ZDNfZ2VvX3BhdGhCb3VuZHNQb2ludCxsaW5lU3RhcnQ6ZDNfbm9vcCxsaW5lRW5kOmQzX25vb3AscG9seWdvblN0YXJ0OmQzX25vb3AscG9seWdvbkVuZDpkM19ub29wfTtmdW5jdGlvbiBkM19nZW9fcGF0aEJvdW5kc1BvaW50KHgseSl7aWYoeCA8IGQzX2dlb19wYXRoQm91bmRzWDApZDNfZ2VvX3BhdGhCb3VuZHNYMCA9IHg7aWYoeCA+IGQzX2dlb19wYXRoQm91bmRzWDEpZDNfZ2VvX3BhdGhCb3VuZHNYMSA9IHg7aWYoeSA8IGQzX2dlb19wYXRoQm91bmRzWTApZDNfZ2VvX3BhdGhCb3VuZHNZMCA9IHk7aWYoeSA+IGQzX2dlb19wYXRoQm91bmRzWTEpZDNfZ2VvX3BhdGhCb3VuZHNZMSA9IHk7fWZ1bmN0aW9uIGQzX2dlb19wYXRoQnVmZmVyKCl7dmFyIHBvaW50Q2lyY2xlPWQzX2dlb19wYXRoQnVmZmVyQ2lyY2xlKDQuNSksYnVmZmVyPVtdO3ZhciBzdHJlYW09e3BvaW50OnBvaW50LGxpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtzdHJlYW0ucG9pbnQgPSBwb2ludExpbmVTdGFydDt9LGxpbmVFbmQ6bGluZUVuZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gcG9seWdvblN0YXJ0KCl7c3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kUG9seWdvbjt9LHBvbHlnb25FbmQ6ZnVuY3Rpb24gcG9seWdvbkVuZCgpe3N0cmVhbS5saW5lRW5kID0gbGluZUVuZDtzdHJlYW0ucG9pbnQgPSBwb2ludDt9LHBvaW50UmFkaXVzOmZ1bmN0aW9uIHBvaW50UmFkaXVzKF8pe3BvaW50Q2lyY2xlID0gZDNfZ2VvX3BhdGhCdWZmZXJDaXJjbGUoXyk7cmV0dXJuIHN0cmVhbTt9LHJlc3VsdDpmdW5jdGlvbiByZXN1bHQoKXtpZihidWZmZXIubGVuZ3RoKXt2YXIgcmVzdWx0PWJ1ZmZlci5qb2luKFwiXCIpO2J1ZmZlciA9IFtdO3JldHVybiByZXN1bHQ7fX19O2Z1bmN0aW9uIHBvaW50KHgseSl7YnVmZmVyLnB1c2goXCJNXCIseCxcIixcIix5LHBvaW50Q2lyY2xlKTt9ZnVuY3Rpb24gcG9pbnRMaW5lU3RhcnQoeCx5KXtidWZmZXIucHVzaChcIk1cIix4LFwiLFwiLHkpO3N0cmVhbS5wb2ludCA9IHBvaW50TGluZTt9ZnVuY3Rpb24gcG9pbnRMaW5lKHgseSl7YnVmZmVyLnB1c2goXCJMXCIseCxcIixcIix5KTt9ZnVuY3Rpb24gbGluZUVuZCgpe3N0cmVhbS5wb2ludCA9IHBvaW50O31mdW5jdGlvbiBsaW5lRW5kUG9seWdvbigpe2J1ZmZlci5wdXNoKFwiWlwiKTt9cmV0dXJuIHN0cmVhbTt9ZnVuY3Rpb24gZDNfZ2VvX3BhdGhCdWZmZXJDaXJjbGUocmFkaXVzKXtyZXR1cm4gXCJtMCxcIiArIHJhZGl1cyArIFwiYVwiICsgcmFkaXVzICsgXCIsXCIgKyByYWRpdXMgKyBcIiAwIDEsMSAwLFwiICsgLTIgKiByYWRpdXMgKyBcImFcIiArIHJhZGl1cyArIFwiLFwiICsgcmFkaXVzICsgXCIgMCAxLDEgMCxcIiArIDIgKiByYWRpdXMgKyBcInpcIjt9dmFyIGQzX2dlb19wYXRoQ2VudHJvaWQ9e3BvaW50OmQzX2dlb19wYXRoQ2VudHJvaWRQb2ludCxsaW5lU3RhcnQ6ZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVTdGFydCxsaW5lRW5kOmQzX2dlb19wYXRoQ2VudHJvaWRMaW5lRW5kLHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtkM19nZW9fcGF0aENlbnRyb2lkLmxpbmVTdGFydCA9IGQzX2dlb19wYXRoQ2VudHJvaWRSaW5nU3RhcnQ7fSxwb2x5Z29uRW5kOmZ1bmN0aW9uIHBvbHlnb25FbmQoKXtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gZDNfZ2VvX3BhdGhDZW50cm9pZFBvaW50O2QzX2dlb19wYXRoQ2VudHJvaWQubGluZVN0YXJ0ID0gZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVTdGFydDtkM19nZW9fcGF0aENlbnRyb2lkLmxpbmVFbmQgPSBkM19nZW9fcGF0aENlbnRyb2lkTGluZUVuZDt9fTtmdW5jdGlvbiBkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQoeCx5KXtkM19nZW9fY2VudHJvaWRYMCArPSB4O2QzX2dlb19jZW50cm9pZFkwICs9IHk7KytkM19nZW9fY2VudHJvaWRaMDt9ZnVuY3Rpb24gZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVTdGFydCgpe3ZhciB4MCx5MDtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gZnVuY3Rpb24oeCx5KXtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50O2QzX2dlb19wYXRoQ2VudHJvaWRQb2ludCh4MCA9IHgseTAgPSB5KTt9O2Z1bmN0aW9uIG5leHRQb2ludCh4LHkpe3ZhciBkeD14IC0geDAsZHk9eSAtIHkwLHo9TWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtkM19nZW9fY2VudHJvaWRYMSArPSB6ICogKHgwICsgeCkgLyAyO2QzX2dlb19jZW50cm9pZFkxICs9IHogKiAoeTAgKyB5KSAvIDI7ZDNfZ2VvX2NlbnRyb2lkWjEgKz0gejtkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQoeDAgPSB4LHkwID0geSk7fX1mdW5jdGlvbiBkM19nZW9fcGF0aENlbnRyb2lkTGluZUVuZCgpe2QzX2dlb19wYXRoQ2VudHJvaWQucG9pbnQgPSBkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQ7fWZ1bmN0aW9uIGQzX2dlb19wYXRoQ2VudHJvaWRSaW5nU3RhcnQoKXt2YXIgeDAwLHkwMCx4MCx5MDtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gZnVuY3Rpb24oeCx5KXtkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50O2QzX2dlb19wYXRoQ2VudHJvaWRQb2ludCh4MDAgPSB4MCA9IHgseTAwID0geTAgPSB5KTt9O2Z1bmN0aW9uIG5leHRQb2ludCh4LHkpe3ZhciBkeD14IC0geDAsZHk9eSAtIHkwLHo9TWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtkM19nZW9fY2VudHJvaWRYMSArPSB6ICogKHgwICsgeCkgLyAyO2QzX2dlb19jZW50cm9pZFkxICs9IHogKiAoeTAgKyB5KSAvIDI7ZDNfZ2VvX2NlbnRyb2lkWjEgKz0gejt6ID0geTAgKiB4IC0geDAgKiB5O2QzX2dlb19jZW50cm9pZFgyICs9IHogKiAoeDAgKyB4KTtkM19nZW9fY2VudHJvaWRZMiArPSB6ICogKHkwICsgeSk7ZDNfZ2VvX2NlbnRyb2lkWjIgKz0geiAqIDM7ZDNfZ2VvX3BhdGhDZW50cm9pZFBvaW50KHgwID0geCx5MCA9IHkpO31kM19nZW9fcGF0aENlbnRyb2lkLmxpbmVFbmQgPSBmdW5jdGlvbigpe25leHRQb2ludCh4MDAseTAwKTt9O31mdW5jdGlvbiBkM19nZW9fcGF0aENvbnRleHQoY29udGV4dCl7dmFyIF9wb2ludFJhZGl1cz00LjU7dmFyIHN0cmVhbT17cG9pbnQ6cG9pbnQsbGluZVN0YXJ0OmZ1bmN0aW9uIGxpbmVTdGFydCgpe3N0cmVhbS5wb2ludCA9IHBvaW50TGluZVN0YXJ0O30sbGluZUVuZDpsaW5lRW5kLHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtzdHJlYW0ubGluZUVuZCA9IGxpbmVFbmRQb2x5Z29uO30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7c3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kO3N0cmVhbS5wb2ludCA9IHBvaW50O30scG9pbnRSYWRpdXM6ZnVuY3Rpb24gcG9pbnRSYWRpdXMoXyl7X3BvaW50UmFkaXVzID0gXztyZXR1cm4gc3RyZWFtO30scmVzdWx0OmQzX25vb3B9O2Z1bmN0aW9uIHBvaW50KHgseSl7Y29udGV4dC5tb3ZlVG8oeCArIF9wb2ludFJhZGl1cyx5KTtjb250ZXh0LmFyYyh4LHksX3BvaW50UmFkaXVzLDAsz4QpO31mdW5jdGlvbiBwb2ludExpbmVTdGFydCh4LHkpe2NvbnRleHQubW92ZVRvKHgseSk7c3RyZWFtLnBvaW50ID0gcG9pbnRMaW5lO31mdW5jdGlvbiBwb2ludExpbmUoeCx5KXtjb250ZXh0LmxpbmVUbyh4LHkpO31mdW5jdGlvbiBsaW5lRW5kKCl7c3RyZWFtLnBvaW50ID0gcG9pbnQ7fWZ1bmN0aW9uIGxpbmVFbmRQb2x5Z29uKCl7Y29udGV4dC5jbG9zZVBhdGgoKTt9cmV0dXJuIHN0cmVhbTt9ZnVuY3Rpb24gZDNfZ2VvX3Jlc2FtcGxlKHByb2plY3Qpe3ZhciDOtDI9LjUsY29zTWluRGlzdGFuY2U9TWF0aC5jb3MoMzAgKiBkM19yYWRpYW5zKSxtYXhEZXB0aD0xNjtmdW5jdGlvbiByZXNhbXBsZShzdHJlYW0pe3JldHVybiAobWF4RGVwdGg/cmVzYW1wbGVSZWN1cnNpdmU6cmVzYW1wbGVOb25lKShzdHJlYW0pO31mdW5jdGlvbiByZXNhbXBsZU5vbmUoc3RyZWFtKXtyZXR1cm4gZDNfZ2VvX3RyYW5zZm9ybVBvaW50KHN0cmVhbSxmdW5jdGlvbih4LHkpe3ggPSBwcm9qZWN0KHgseSk7c3RyZWFtLnBvaW50KHhbMF0seFsxXSk7fSk7fWZ1bmN0aW9uIHJlc2FtcGxlUmVjdXJzaXZlKHN0cmVhbSl7dmFyIM67MDAsz4YwMCx4MDAseTAwLGEwMCxiMDAsYzAwLM67MCx4MCx5MCxhMCxiMCxjMDt2YXIgcmVzYW1wbGU9e3BvaW50OnBvaW50LGxpbmVTdGFydDpsaW5lU3RhcnQsbGluZUVuZDpsaW5lRW5kLHBvbHlnb25TdGFydDpmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKXtzdHJlYW0ucG9seWdvblN0YXJ0KCk7cmVzYW1wbGUubGluZVN0YXJ0ID0gcmluZ1N0YXJ0O30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7c3RyZWFtLnBvbHlnb25FbmQoKTtyZXNhbXBsZS5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7fX07ZnVuY3Rpb24gcG9pbnQoeCx5KXt4ID0gcHJvamVjdCh4LHkpO3N0cmVhbS5wb2ludCh4WzBdLHhbMV0pO31mdW5jdGlvbiBsaW5lU3RhcnQoKXt4MCA9IE5hTjtyZXNhbXBsZS5wb2ludCA9IGxpbmVQb2ludDtzdHJlYW0ubGluZVN0YXJ0KCk7fWZ1bmN0aW9uIGxpbmVQb2ludCjOuyzPhil7dmFyIGM9ZDNfZ2VvX2NhcnRlc2lhbihbzrssz4ZdKSxwPXByb2plY3Qozrssz4YpO3Jlc2FtcGxlTGluZVRvKHgwLHkwLM67MCxhMCxiMCxjMCx4MCA9IHBbMF0seTAgPSBwWzFdLM67MCA9IM67LGEwID0gY1swXSxiMCA9IGNbMV0sYzAgPSBjWzJdLG1heERlcHRoLHN0cmVhbSk7c3RyZWFtLnBvaW50KHgwLHkwKTt9ZnVuY3Rpb24gbGluZUVuZCgpe3Jlc2FtcGxlLnBvaW50ID0gcG9pbnQ7c3RyZWFtLmxpbmVFbmQoKTt9ZnVuY3Rpb24gcmluZ1N0YXJ0KCl7bGluZVN0YXJ0KCk7cmVzYW1wbGUucG9pbnQgPSByaW5nUG9pbnQ7cmVzYW1wbGUubGluZUVuZCA9IHJpbmdFbmQ7fWZ1bmN0aW9uIHJpbmdQb2ludCjOuyzPhil7bGluZVBvaW50KM67MDAgPSDOuyzPhjAwID0gz4YpLHgwMCA9IHgwLHkwMCA9IHkwLGEwMCA9IGEwLGIwMCA9IGIwLGMwMCA9IGMwO3Jlc2FtcGxlLnBvaW50ID0gbGluZVBvaW50O31mdW5jdGlvbiByaW5nRW5kKCl7cmVzYW1wbGVMaW5lVG8oeDAseTAszrswLGEwLGIwLGMwLHgwMCx5MDAszrswMCxhMDAsYjAwLGMwMCxtYXhEZXB0aCxzdHJlYW0pO3Jlc2FtcGxlLmxpbmVFbmQgPSBsaW5lRW5kO2xpbmVFbmQoKTt9cmV0dXJuIHJlc2FtcGxlO31mdW5jdGlvbiByZXNhbXBsZUxpbmVUbyh4MCx5MCzOuzAsYTAsYjAsYzAseDEseTEszrsxLGExLGIxLGMxLGRlcHRoLHN0cmVhbSl7dmFyIGR4PXgxIC0geDAsZHk9eTEgLSB5MCxkMj1keCAqIGR4ICsgZHkgKiBkeTtpZihkMiA+IDQgKiDOtDIgJiYgZGVwdGgtLSl7dmFyIGE9YTAgKyBhMSxiPWIwICsgYjEsYz1jMCArIGMxLG09TWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIgKyBjICogYyksz4YyPU1hdGguYXNpbihjIC89IG0pLM67Mj1hYnMoYWJzKGMpIC0gMSkgPCDOtSB8fCBhYnMozrswIC0gzrsxKSA8IM61PyjOuzAgKyDOuzEpIC8gMjpNYXRoLmF0YW4yKGIsYSkscD1wcm9qZWN0KM67MizPhjIpLHgyPXBbMF0seTI9cFsxXSxkeDI9eDIgLSB4MCxkeTI9eTIgLSB5MCxkej1keSAqIGR4MiAtIGR4ICogZHkyO2lmKGR6ICogZHogLyBkMiA+IM60MiB8fCBhYnMoKGR4ICogZHgyICsgZHkgKiBkeTIpIC8gZDIgLSAuNSkgPiAuMyB8fCBhMCAqIGExICsgYjAgKiBiMSArIGMwICogYzEgPCBjb3NNaW5EaXN0YW5jZSl7cmVzYW1wbGVMaW5lVG8oeDAseTAszrswLGEwLGIwLGMwLHgyLHkyLM67MixhIC89IG0sYiAvPSBtLGMsZGVwdGgsc3RyZWFtKTtzdHJlYW0ucG9pbnQoeDIseTIpO3Jlc2FtcGxlTGluZVRvKHgyLHkyLM67MixhLGIsYyx4MSx5MSzOuzEsYTEsYjEsYzEsZGVwdGgsc3RyZWFtKTt9fX1yZXNhbXBsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KM60Mik7bWF4RGVwdGggPSAozrQyID0gXyAqIF8pID4gMCAmJiAxNjtyZXR1cm4gcmVzYW1wbGU7fTtyZXR1cm4gcmVzYW1wbGU7fWQzLmdlby5wYXRoID0gZnVuY3Rpb24oKXt2YXIgcG9pbnRSYWRpdXM9NC41LHByb2plY3Rpb24sY29udGV4dCxwcm9qZWN0U3RyZWFtLGNvbnRleHRTdHJlYW0sY2FjaGVTdHJlYW07ZnVuY3Rpb24gcGF0aChvYmplY3Qpe2lmKG9iamVjdCl7aWYodHlwZW9mIHBvaW50UmFkaXVzID09PSBcImZ1bmN0aW9uXCIpY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrcG9pbnRSYWRpdXMuYXBwbHkodGhpcyxhcmd1bWVudHMpKTtpZighY2FjaGVTdHJlYW0gfHwgIWNhY2hlU3RyZWFtLnZhbGlkKWNhY2hlU3RyZWFtID0gcHJvamVjdFN0cmVhbShjb250ZXh0U3RyZWFtKTtkMy5nZW8uc3RyZWFtKG9iamVjdCxjYWNoZVN0cmVhbSk7fXJldHVybiBjb250ZXh0U3RyZWFtLnJlc3VsdCgpO31wYXRoLmFyZWEgPSBmdW5jdGlvbihvYmplY3Qpe2QzX2dlb19wYXRoQXJlYVN1bSA9IDA7ZDMuZ2VvLnN0cmVhbShvYmplY3QscHJvamVjdFN0cmVhbShkM19nZW9fcGF0aEFyZWEpKTtyZXR1cm4gZDNfZ2VvX3BhdGhBcmVhU3VtO307cGF0aC5jZW50cm9pZCA9IGZ1bmN0aW9uKG9iamVjdCl7ZDNfZ2VvX2NlbnRyb2lkWDAgPSBkM19nZW9fY2VudHJvaWRZMCA9IGQzX2dlb19jZW50cm9pZFowID0gZDNfZ2VvX2NlbnRyb2lkWDEgPSBkM19nZW9fY2VudHJvaWRZMSA9IGQzX2dlb19jZW50cm9pZFoxID0gZDNfZ2VvX2NlbnRyb2lkWDIgPSBkM19nZW9fY2VudHJvaWRZMiA9IGQzX2dlb19jZW50cm9pZFoyID0gMDtkMy5nZW8uc3RyZWFtKG9iamVjdCxwcm9qZWN0U3RyZWFtKGQzX2dlb19wYXRoQ2VudHJvaWQpKTtyZXR1cm4gZDNfZ2VvX2NlbnRyb2lkWjI/W2QzX2dlb19jZW50cm9pZFgyIC8gZDNfZ2VvX2NlbnRyb2lkWjIsZDNfZ2VvX2NlbnRyb2lkWTIgLyBkM19nZW9fY2VudHJvaWRaMl06ZDNfZ2VvX2NlbnRyb2lkWjE/W2QzX2dlb19jZW50cm9pZFgxIC8gZDNfZ2VvX2NlbnRyb2lkWjEsZDNfZ2VvX2NlbnRyb2lkWTEgLyBkM19nZW9fY2VudHJvaWRaMV06ZDNfZ2VvX2NlbnRyb2lkWjA/W2QzX2dlb19jZW50cm9pZFgwIC8gZDNfZ2VvX2NlbnRyb2lkWjAsZDNfZ2VvX2NlbnRyb2lkWTAgLyBkM19nZW9fY2VudHJvaWRaMF06W05hTixOYU5dO307cGF0aC5ib3VuZHMgPSBmdW5jdGlvbihvYmplY3Qpe2QzX2dlb19wYXRoQm91bmRzWDEgPSBkM19nZW9fcGF0aEJvdW5kc1kxID0gLShkM19nZW9fcGF0aEJvdW5kc1gwID0gZDNfZ2VvX3BhdGhCb3VuZHNZMCA9IEluZmluaXR5KTtkMy5nZW8uc3RyZWFtKG9iamVjdCxwcm9qZWN0U3RyZWFtKGQzX2dlb19wYXRoQm91bmRzKSk7cmV0dXJuIFtbZDNfZ2VvX3BhdGhCb3VuZHNYMCxkM19nZW9fcGF0aEJvdW5kc1kwXSxbZDNfZ2VvX3BhdGhCb3VuZHNYMSxkM19nZW9fcGF0aEJvdW5kc1kxXV07fTtwYXRoLnByb2plY3Rpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcHJvamVjdGlvbjtwcm9qZWN0U3RyZWFtID0gKHByb2plY3Rpb24gPSBfKT9fLnN0cmVhbSB8fCBkM19nZW9fcGF0aFByb2plY3RTdHJlYW0oXyk6ZDNfaWRlbnRpdHk7cmV0dXJuIHJlc2V0KCk7fTtwYXRoLmNvbnRleHQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY29udGV4dDtjb250ZXh0U3RyZWFtID0gKGNvbnRleHQgPSBfKSA9PSBudWxsP25ldyBkM19nZW9fcGF0aEJ1ZmZlcigpOm5ldyBkM19nZW9fcGF0aENvbnRleHQoXyk7aWYodHlwZW9mIHBvaW50UmFkaXVzICE9PSBcImZ1bmN0aW9uXCIpY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cyhwb2ludFJhZGl1cyk7cmV0dXJuIHJlc2V0KCk7fTtwYXRoLnBvaW50UmFkaXVzID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBvaW50UmFkaXVzO3BvaW50UmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIj9fOihjb250ZXh0U3RyZWFtLnBvaW50UmFkaXVzKCtfKSwrXyk7cmV0dXJuIHBhdGg7fTtmdW5jdGlvbiByZXNldCgpe2NhY2hlU3RyZWFtID0gbnVsbDtyZXR1cm4gcGF0aDt9cmV0dXJuIHBhdGgucHJvamVjdGlvbihkMy5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCk7fTtmdW5jdGlvbiBkM19nZW9fcGF0aFByb2plY3RTdHJlYW0ocHJvamVjdCl7dmFyIHJlc2FtcGxlPWQzX2dlb19yZXNhbXBsZShmdW5jdGlvbih4LHkpe3JldHVybiBwcm9qZWN0KFt4ICogZDNfZGVncmVlcyx5ICogZDNfZGVncmVlc10pO30pO3JldHVybiBmdW5jdGlvbihzdHJlYW0pe3JldHVybiBkM19nZW9fcHJvamVjdGlvblJhZGlhbnMocmVzYW1wbGUoc3RyZWFtKSk7fTt9ZDMuZ2VvLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKG1ldGhvZHMpe3JldHVybiB7c3RyZWFtOmZ1bmN0aW9uIHN0cmVhbShfc3RyZWFtMil7dmFyIHRyYW5zZm9ybT1uZXcgZDNfZ2VvX3RyYW5zZm9ybShfc3RyZWFtMik7Zm9yKHZhciBrIGluIG1ldGhvZHMpIHRyYW5zZm9ybVtrXSA9IG1ldGhvZHNba107cmV0dXJuIHRyYW5zZm9ybTt9fTt9O2Z1bmN0aW9uIGQzX2dlb190cmFuc2Zvcm0oc3RyZWFtKXt0aGlzLnN0cmVhbSA9IHN0cmVhbTt9ZDNfZ2VvX3RyYW5zZm9ybS5wcm90b3R5cGUgPSB7cG9pbnQ6ZnVuY3Rpb24gcG9pbnQoeCx5KXt0aGlzLnN0cmVhbS5wb2ludCh4LHkpO30sc3BoZXJlOmZ1bmN0aW9uIHNwaGVyZSgpe3RoaXMuc3RyZWFtLnNwaGVyZSgpO30sbGluZVN0YXJ0OmZ1bmN0aW9uIGxpbmVTdGFydCgpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpO30sbGluZUVuZDpmdW5jdGlvbiBsaW5lRW5kKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpO30scG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpO30scG9seWdvbkVuZDpmdW5jdGlvbiBwb2x5Z29uRW5kKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpO319O2Z1bmN0aW9uIGQzX2dlb190cmFuc2Zvcm1Qb2ludChzdHJlYW0scG9pbnQpe3JldHVybiB7cG9pbnQ6cG9pbnQsc3BoZXJlOmZ1bmN0aW9uIHNwaGVyZSgpe3N0cmVhbS5zcGhlcmUoKTt9LGxpbmVTdGFydDpmdW5jdGlvbiBsaW5lU3RhcnQoKXtzdHJlYW0ubGluZVN0YXJ0KCk7fSxsaW5lRW5kOmZ1bmN0aW9uIGxpbmVFbmQoKXtzdHJlYW0ubGluZUVuZCgpO30scG9seWdvblN0YXJ0OmZ1bmN0aW9uIHBvbHlnb25TdGFydCgpe3N0cmVhbS5wb2x5Z29uU3RhcnQoKTt9LHBvbHlnb25FbmQ6ZnVuY3Rpb24gcG9seWdvbkVuZCgpe3N0cmVhbS5wb2x5Z29uRW5kKCk7fX07fWQzLmdlby5wcm9qZWN0aW9uID0gZDNfZ2VvX3Byb2plY3Rpb247ZDMuZ2VvLnByb2plY3Rpb25NdXRhdG9yID0gZDNfZ2VvX3Byb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIGQzX2dlb19wcm9qZWN0aW9uKHByb2plY3Qpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbk11dGF0b3IoZnVuY3Rpb24oKXtyZXR1cm4gcHJvamVjdDt9KSgpO31mdW5jdGlvbiBkM19nZW9fcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KXt2YXIgcHJvamVjdCxyb3RhdGUscHJvamVjdFJvdGF0ZSxwcm9qZWN0UmVzYW1wbGU9ZDNfZ2VvX3Jlc2FtcGxlKGZ1bmN0aW9uKHgseSl7eCA9IHByb2plY3QoeCx5KTtyZXR1cm4gW3hbMF0gKiBrICsgzrR4LM60eSAtIHhbMV0gKiBrXTt9KSxrPTE1MCx4PTQ4MCx5PTI1MCzOuz0wLM+GPTAszrTOuz0wLM60z4Y9MCzOtM6zPTAszrR4LM60eSxwcmVjbGlwPWQzX2dlb19jbGlwQW50aW1lcmlkaWFuLHBvc3RjbGlwPWQzX2lkZW50aXR5LGNsaXBBbmdsZT1udWxsLGNsaXBFeHRlbnQ9bnVsbCxzdHJlYW07ZnVuY3Rpb24gcHJvamVjdGlvbihwb2ludCl7cG9pbnQgPSBwcm9qZWN0Um90YXRlKHBvaW50WzBdICogZDNfcmFkaWFucyxwb2ludFsxXSAqIGQzX3JhZGlhbnMpO3JldHVybiBbcG9pbnRbMF0gKiBrICsgzrR4LM60eSAtIHBvaW50WzFdICoga107fWZ1bmN0aW9uIGludmVydChwb2ludCl7cG9pbnQgPSBwcm9qZWN0Um90YXRlLmludmVydCgocG9pbnRbMF0gLSDOtHgpIC8gaywozrR5IC0gcG9pbnRbMV0pIC8gayk7cmV0dXJuIHBvaW50ICYmIFtwb2ludFswXSAqIGQzX2RlZ3JlZXMscG9pbnRbMV0gKiBkM19kZWdyZWVzXTt9cHJvamVjdGlvbi5zdHJlYW0gPSBmdW5jdGlvbihvdXRwdXQpe2lmKHN0cmVhbSlzdHJlYW0udmFsaWQgPSBmYWxzZTtzdHJlYW0gPSBkM19nZW9fcHJvamVjdGlvblJhZGlhbnMocHJlY2xpcChyb3RhdGUscHJvamVjdFJlc2FtcGxlKHBvc3RjbGlwKG91dHB1dCkpKSk7c3RyZWFtLnZhbGlkID0gdHJ1ZTtyZXR1cm4gc3RyZWFtO307cHJvamVjdGlvbi5jbGlwQW5nbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2xpcEFuZ2xlO3ByZWNsaXAgPSBfID09IG51bGw/KGNsaXBBbmdsZSA9IF8sZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW4pOmQzX2dlb19jbGlwQ2lyY2xlKChjbGlwQW5nbGUgPSArXykgKiBkM19yYWRpYW5zKTtyZXR1cm4gaW52YWxpZGF0ZSgpO307cHJvamVjdGlvbi5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGNsaXBFeHRlbnQ7Y2xpcEV4dGVudCA9IF87cG9zdGNsaXAgPSBfP2QzX2dlb19jbGlwRXh0ZW50KF9bMF1bMF0sX1swXVsxXSxfWzFdWzBdLF9bMV1bMV0pOmQzX2lkZW50aXR5O3JldHVybiBpbnZhbGlkYXRlKCk7fTtwcm9qZWN0aW9uLnNjYWxlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGs7ayA9ICtfO3JldHVybiByZXNldCgpO307cHJvamVjdGlvbi50cmFuc2xhdGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW3gseV07eCA9ICtfWzBdO3kgPSArX1sxXTtyZXR1cm4gcmVzZXQoKTt9O3Byb2plY3Rpb24uY2VudGVyID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFvOuyAqIGQzX2RlZ3JlZXMsz4YgKiBkM19kZWdyZWVzXTvOuyA9IF9bMF0gJSAzNjAgKiBkM19yYWRpYW5zO8+GID0gX1sxXSAlIDM2MCAqIGQzX3JhZGlhbnM7cmV0dXJuIHJlc2V0KCk7fTtwcm9qZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBbzrTOuyAqIGQzX2RlZ3JlZXMszrTPhiAqIGQzX2RlZ3JlZXMszrTOsyAqIGQzX2RlZ3JlZXNdO860zrsgPSBfWzBdICUgMzYwICogZDNfcmFkaWFuczvOtM+GID0gX1sxXSAlIDM2MCAqIGQzX3JhZGlhbnM7zrTOsyA9IF8ubGVuZ3RoID4gMj9fWzJdICUgMzYwICogZDNfcmFkaWFuczowO3JldHVybiByZXNldCgpO307ZDMucmViaW5kKHByb2plY3Rpb24scHJvamVjdFJlc2FtcGxlLFwicHJlY2lzaW9uXCIpO2Z1bmN0aW9uIHJlc2V0KCl7cHJvamVjdFJvdGF0ZSA9IGQzX2dlb19jb21wb3NlKHJvdGF0ZSA9IGQzX2dlb19yb3RhdGlvbijOtM67LM60z4YszrTOsykscHJvamVjdCk7dmFyIGNlbnRlcj1wcm9qZWN0KM67LM+GKTvOtHggPSB4IC0gY2VudGVyWzBdICogazvOtHkgPSB5ICsgY2VudGVyWzFdICogaztyZXR1cm4gaW52YWxpZGF0ZSgpO31mdW5jdGlvbiBpbnZhbGlkYXRlKCl7aWYoc3RyZWFtKXN0cmVhbS52YWxpZCA9IGZhbHNlLHN0cmVhbSA9IG51bGw7cmV0dXJuIHByb2plY3Rpb247fXJldHVybiBmdW5jdGlvbigpe3Byb2plY3QgPSBwcm9qZWN0QXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Byb2plY3Rpb24uaW52ZXJ0ID0gcHJvamVjdC5pbnZlcnQgJiYgaW52ZXJ0O3JldHVybiByZXNldCgpO307fWZ1bmN0aW9uIGQzX2dlb19wcm9qZWN0aW9uUmFkaWFucyhzdHJlYW0pe3JldHVybiBkM19nZW9fdHJhbnNmb3JtUG9pbnQoc3RyZWFtLGZ1bmN0aW9uKHgseSl7c3RyZWFtLnBvaW50KHggKiBkM19yYWRpYW5zLHkgKiBkM19yYWRpYW5zKTt9KTt9ZnVuY3Rpb24gZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcijOuyzPhil7cmV0dXJuIFvOuyzPhl07fShkMy5nZW8uZXF1aXJlY3Rhbmd1bGFyID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfZ2VvX3Byb2plY3Rpb24oZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcik7fSkucmF3ID0gZDNfZ2VvX2VxdWlyZWN0YW5ndWxhci5pbnZlcnQgPSBkM19nZW9fZXF1aXJlY3Rhbmd1bGFyO2QzLmdlby5yb3RhdGlvbiA9IGZ1bmN0aW9uKHJvdGF0ZSl7cm90YXRlID0gZDNfZ2VvX3JvdGF0aW9uKHJvdGF0ZVswXSAlIDM2MCAqIGQzX3JhZGlhbnMscm90YXRlWzFdICogZDNfcmFkaWFucyxyb3RhdGUubGVuZ3RoID4gMj9yb3RhdGVbMl0gKiBkM19yYWRpYW5zOjApO2Z1bmN0aW9uIGZvcndhcmQoY29vcmRpbmF0ZXMpe2Nvb3JkaW5hdGVzID0gcm90YXRlKGNvb3JkaW5hdGVzWzBdICogZDNfcmFkaWFucyxjb29yZGluYXRlc1sxXSAqIGQzX3JhZGlhbnMpO3JldHVybiBjb29yZGluYXRlc1swXSAqPSBkM19kZWdyZWVzLGNvb3JkaW5hdGVzWzFdICo9IGQzX2RlZ3JlZXMsY29vcmRpbmF0ZXM7fWZvcndhcmQuaW52ZXJ0ID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpe2Nvb3JkaW5hdGVzID0gcm90YXRlLmludmVydChjb29yZGluYXRlc1swXSAqIGQzX3JhZGlhbnMsY29vcmRpbmF0ZXNbMV0gKiBkM19yYWRpYW5zKTtyZXR1cm4gY29vcmRpbmF0ZXNbMF0gKj0gZDNfZGVncmVlcyxjb29yZGluYXRlc1sxXSAqPSBkM19kZWdyZWVzLGNvb3JkaW5hdGVzO307cmV0dXJuIGZvcndhcmQ7fTtmdW5jdGlvbiBkM19nZW9faWRlbnRpdHlSb3RhdGlvbijOuyzPhil7cmV0dXJuIFvOuyA+IM+AP867IC0gz4Q6zrsgPCAtz4A/zrsgKyDPhDrOuyzPhl07fWQzX2dlb19pZGVudGl0eVJvdGF0aW9uLmludmVydCA9IGQzX2dlb19lcXVpcmVjdGFuZ3VsYXI7ZnVuY3Rpb24gZDNfZ2VvX3JvdGF0aW9uKM60zrsszrTPhizOtM6zKXtyZXR1cm4gzrTOuz/OtM+GIHx8IM60zrM/ZDNfZ2VvX2NvbXBvc2UoZDNfZ2VvX3JvdGF0aW9uzrsozrTOuyksZDNfZ2VvX3JvdGF0aW9uz4bOsyjOtM+GLM60zrMpKTpkM19nZW9fcm90YXRpb27OuyjOtM67KTrOtM+GIHx8IM60zrM/ZDNfZ2VvX3JvdGF0aW9uz4bOsyjOtM+GLM60zrMpOmQzX2dlb19pZGVudGl0eVJvdGF0aW9uO31mdW5jdGlvbiBkM19nZW9fZm9yd2FyZFJvdGF0aW9uzrsozrTOuyl7cmV0dXJuIGZ1bmN0aW9uKM67LM+GKXtyZXR1cm4gzrsgKz0gzrTOuyxbzrsgPiDPgD/OuyAtIM+EOs67IDwgLc+AP867ICsgz4Q6zrssz4ZdO307fWZ1bmN0aW9uIGQzX2dlb19yb3RhdGlvbs67KM60zrspe3ZhciByb3RhdGlvbj1kM19nZW9fZm9yd2FyZFJvdGF0aW9uzrsozrTOuyk7cm90YXRpb24uaW52ZXJ0ID0gZDNfZ2VvX2ZvcndhcmRSb3RhdGlvbs67KC3OtM67KTtyZXR1cm4gcm90YXRpb247fWZ1bmN0aW9uIGQzX2dlb19yb3RhdGlvbs+GzrMozrTPhizOtM6zKXt2YXIgY29zzrTPhj1NYXRoLmNvcyjOtM+GKSxzaW7OtM+GPU1hdGguc2luKM60z4YpLGNvc860zrM9TWF0aC5jb3MozrTOsyksc2luzrTOsz1NYXRoLnNpbijOtM6zKTtmdW5jdGlvbiByb3RhdGlvbijOuyzPhil7dmFyIGNvc8+GPU1hdGguY29zKM+GKSx4PU1hdGguY29zKM67KSAqIGNvc8+GLHk9TWF0aC5zaW4ozrspICogY29zz4Ysej1NYXRoLnNpbijPhiksaz16ICogY29zzrTPhiArIHggKiBzaW7OtM+GO3JldHVybiBbTWF0aC5hdGFuMih5ICogY29zzrTOsyAtIGsgKiBzaW7OtM6zLHggKiBjb3POtM+GIC0geiAqIHNpbs60z4YpLGQzX2FzaW4oayAqIGNvc860zrMgKyB5ICogc2luzrTOsyldO31yb3RhdGlvbi5pbnZlcnQgPSBmdW5jdGlvbijOuyzPhil7dmFyIGNvc8+GPU1hdGguY29zKM+GKSx4PU1hdGguY29zKM67KSAqIGNvc8+GLHk9TWF0aC5zaW4ozrspICogY29zz4Ysej1NYXRoLnNpbijPhiksaz16ICogY29zzrTOsyAtIHkgKiBzaW7OtM6zO3JldHVybiBbTWF0aC5hdGFuMih5ICogY29zzrTOsyArIHogKiBzaW7OtM6zLHggKiBjb3POtM+GICsgayAqIHNpbs60z4YpLGQzX2FzaW4oayAqIGNvc860z4YgLSB4ICogc2luzrTPhildO307cmV0dXJuIHJvdGF0aW9uO31kMy5nZW8uY2lyY2xlID0gZnVuY3Rpb24oKXt2YXIgb3JpZ2luPVswLDBdLGFuZ2xlLHByZWNpc2lvbj02LGludGVycG9sYXRlO2Z1bmN0aW9uIGNpcmNsZSgpe3ZhciBjZW50ZXI9dHlwZW9mIG9yaWdpbiA9PT0gXCJmdW5jdGlvblwiP29yaWdpbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b3JpZ2luLHJvdGF0ZT1kM19nZW9fcm90YXRpb24oLWNlbnRlclswXSAqIGQzX3JhZGlhbnMsLWNlbnRlclsxXSAqIGQzX3JhZGlhbnMsMCkuaW52ZXJ0LHJpbmc9W107aW50ZXJwb2xhdGUobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uIHBvaW50KHgseSl7cmluZy5wdXNoKHggPSByb3RhdGUoeCx5KSk7eFswXSAqPSBkM19kZWdyZWVzLHhbMV0gKj0gZDNfZGVncmVlczt9fSk7cmV0dXJuIHt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltyaW5nXX07fWNpcmNsZS5vcmlnaW4gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gb3JpZ2luO29yaWdpbiA9IHg7cmV0dXJuIGNpcmNsZTt9O2NpcmNsZS5hbmdsZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhbmdsZTtpbnRlcnBvbGF0ZSA9IGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZSgoYW5nbGUgPSAreCkgKiBkM19yYWRpYW5zLHByZWNpc2lvbiAqIGQzX3JhZGlhbnMpO3JldHVybiBjaXJjbGU7fTtjaXJjbGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHByZWNpc2lvbjtpbnRlcnBvbGF0ZSA9IGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZShhbmdsZSAqIGQzX3JhZGlhbnMsKHByZWNpc2lvbiA9ICtfKSAqIGQzX3JhZGlhbnMpO3JldHVybiBjaXJjbGU7fTtyZXR1cm4gY2lyY2xlLmFuZ2xlKDkwKTt9O2Z1bmN0aW9uIGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZShyYWRpdXMscHJlY2lzaW9uKXt2YXIgY3I9TWF0aC5jb3MocmFkaXVzKSxzcj1NYXRoLnNpbihyYWRpdXMpO3JldHVybiBmdW5jdGlvbihmcm9tLHRvLGRpcmVjdGlvbixsaXN0ZW5lcil7dmFyIHN0ZXA9ZGlyZWN0aW9uICogcHJlY2lzaW9uO2lmKGZyb20gIT0gbnVsbCl7ZnJvbSA9IGQzX2dlb19jaXJjbGVBbmdsZShjcixmcm9tKTt0byA9IGQzX2dlb19jaXJjbGVBbmdsZShjcix0byk7aWYoZGlyZWN0aW9uID4gMD9mcm9tIDwgdG86ZnJvbSA+IHRvKWZyb20gKz0gZGlyZWN0aW9uICogz4Q7fWVsc2Uge2Zyb20gPSByYWRpdXMgKyBkaXJlY3Rpb24gKiDPhDt0byA9IHJhZGl1cyAtIC41ICogc3RlcDt9Zm9yKHZhciBwb2ludCx0PWZyb207ZGlyZWN0aW9uID4gMD90ID4gdG86dCA8IHRvO3QgLT0gc3RlcCkge2xpc3RlbmVyLnBvaW50KChwb2ludCA9IGQzX2dlb19zcGhlcmljYWwoW2NyLC1zciAqIE1hdGguY29zKHQpLC1zciAqIE1hdGguc2luKHQpXSkpWzBdLHBvaW50WzFdKTt9fTt9ZnVuY3Rpb24gZDNfZ2VvX2NpcmNsZUFuZ2xlKGNyLHBvaW50KXt2YXIgYT1kM19nZW9fY2FydGVzaWFuKHBvaW50KTthWzBdIC09IGNyO2QzX2dlb19jYXJ0ZXNpYW5Ob3JtYWxpemUoYSk7dmFyIGFuZ2xlPWQzX2Fjb3MoLWFbMV0pO3JldHVybiAoKC1hWzJdIDwgMD8tYW5nbGU6YW5nbGUpICsgMiAqIE1hdGguUEkgLSDOtSkgJSAoMiAqIE1hdGguUEkpO31kMy5nZW8uZGlzdGFuY2UgPSBmdW5jdGlvbihhLGIpe3ZhciDOlM67PShiWzBdIC0gYVswXSkgKiBkM19yYWRpYW5zLM+GMD1hWzFdICogZDNfcmFkaWFucyzPhjE9YlsxXSAqIGQzX3JhZGlhbnMsc2luzpTOuz1NYXRoLnNpbijOlM67KSxjb3POlM67PU1hdGguY29zKM6UzrspLHNpbs+GMD1NYXRoLnNpbijPhjApLGNvc8+GMD1NYXRoLmNvcyjPhjApLHNpbs+GMT1NYXRoLnNpbijPhjEpLGNvc8+GMT1NYXRoLmNvcyjPhjEpLHQ7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KCh0ID0gY29zz4YxICogc2luzpTOuykgKiB0ICsgKHQgPSBjb3PPhjAgKiBzaW7PhjEgLSBzaW7PhjAgKiBjb3PPhjEgKiBjb3POlM67KSAqIHQpLHNpbs+GMCAqIHNpbs+GMSArIGNvc8+GMCAqIGNvc8+GMSAqIGNvc86UzrspO307ZDMuZ2VvLmdyYXRpY3VsZSA9IGZ1bmN0aW9uKCl7dmFyIHgxLHgwLFgxLFgwLHkxLHkwLFkxLFkwLGR4PTEwLGR5PWR4LERYPTkwLERZPTM2MCx4LHksWCxZLHByZWNpc2lvbj0yLjU7ZnVuY3Rpb24gZ3JhdGljdWxlKCl7cmV0dXJuIHt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6bGluZXMoKX07fWZ1bmN0aW9uIGxpbmVzKCl7cmV0dXJuIGQzLnJhbmdlKE1hdGguY2VpbChYMCAvIERYKSAqIERYLFgxLERYKS5tYXAoWCkuY29uY2F0KGQzLnJhbmdlKE1hdGguY2VpbChZMCAvIERZKSAqIERZLFkxLERZKS5tYXAoWSkpLmNvbmNhdChkMy5yYW5nZShNYXRoLmNlaWwoeDAgLyBkeCkgKiBkeCx4MSxkeCkuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiBhYnMoeCAlIERYKSA+IM61O30pLm1hcCh4KSkuY29uY2F0KGQzLnJhbmdlKE1hdGguY2VpbCh5MCAvIGR5KSAqIGR5LHkxLGR5KS5maWx0ZXIoZnVuY3Rpb24oeSl7cmV0dXJuIGFicyh5ICUgRFkpID4gzrU7fSkubWFwKHkpKTt9Z3JhdGljdWxlLmxpbmVzID0gZnVuY3Rpb24oKXtyZXR1cm4gbGluZXMoKS5tYXAoZnVuY3Rpb24oY29vcmRpbmF0ZXMpe3JldHVybiB7dHlwZTpcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczpjb29yZGluYXRlc307fSk7fTtncmF0aWN1bGUub3V0bGluZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIHt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltYKFgwKS5jb25jYXQoWShZMSkuc2xpY2UoMSksWChYMSkucmV2ZXJzZSgpLnNsaWNlKDEpLFkoWTApLnJldmVyc2UoKS5zbGljZSgxKSldfTt9O2dyYXRpY3VsZS5leHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZ3JhdGljdWxlLm1pbm9yRXh0ZW50KCk7cmV0dXJuIGdyYXRpY3VsZS5tYWpvckV4dGVudChfKS5taW5vckV4dGVudChfKTt9O2dyYXRpY3VsZS5tYWpvckV4dGVudCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBbW1gwLFkwXSxbWDEsWTFdXTtYMCA9ICtfWzBdWzBdLFgxID0gK19bMV1bMF07WTAgPSArX1swXVsxXSxZMSA9ICtfWzFdWzFdO2lmKFgwID4gWDEpXyA9IFgwLFgwID0gWDEsWDEgPSBfO2lmKFkwID4gWTEpXyA9IFkwLFkwID0gWTEsWTEgPSBfO3JldHVybiBncmF0aWN1bGUucHJlY2lzaW9uKHByZWNpc2lvbik7fTtncmF0aWN1bGUubWlub3JFeHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW1t4MCx5MF0sW3gxLHkxXV07eDAgPSArX1swXVswXSx4MSA9ICtfWzFdWzBdO3kwID0gK19bMF1bMV0seTEgPSArX1sxXVsxXTtpZih4MCA+IHgxKV8gPSB4MCx4MCA9IHgxLHgxID0gXztpZih5MCA+IHkxKV8gPSB5MCx5MCA9IHkxLHkxID0gXztyZXR1cm4gZ3JhdGljdWxlLnByZWNpc2lvbihwcmVjaXNpb24pO307Z3JhdGljdWxlLnN0ZXAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZ3JhdGljdWxlLm1pbm9yU3RlcCgpO3JldHVybiBncmF0aWN1bGUubWFqb3JTdGVwKF8pLm1pbm9yU3RlcChfKTt9O2dyYXRpY3VsZS5tYWpvclN0ZXAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW0RYLERZXTtEWCA9ICtfWzBdLERZID0gK19bMV07cmV0dXJuIGdyYXRpY3VsZTt9O2dyYXRpY3VsZS5taW5vclN0ZXAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gW2R4LGR5XTtkeCA9ICtfWzBdLGR5ID0gK19bMV07cmV0dXJuIGdyYXRpY3VsZTt9O2dyYXRpY3VsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcHJlY2lzaW9uO3ByZWNpc2lvbiA9ICtfO3ggPSBkM19nZW9fZ3JhdGljdWxlWCh5MCx5MSw5MCk7eSA9IGQzX2dlb19ncmF0aWN1bGVZKHgwLHgxLHByZWNpc2lvbik7WCA9IGQzX2dlb19ncmF0aWN1bGVYKFkwLFkxLDkwKTtZID0gZDNfZ2VvX2dyYXRpY3VsZVkoWDAsWDEscHJlY2lzaW9uKTtyZXR1cm4gZ3JhdGljdWxlO307cmV0dXJuIGdyYXRpY3VsZS5tYWpvckV4dGVudChbWy0xODAsLTkwICsgzrVdLFsxODAsOTAgLSDOtV1dKS5taW5vckV4dGVudChbWy0xODAsLTgwIC0gzrVdLFsxODAsODAgKyDOtV1dKTt9O2Z1bmN0aW9uIGQzX2dlb19ncmF0aWN1bGVYKHkwLHkxLGR5KXt2YXIgeT1kMy5yYW5nZSh5MCx5MSAtIM61LGR5KS5jb25jYXQoeTEpO3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIFt4LHldO30pO307fWZ1bmN0aW9uIGQzX2dlb19ncmF0aWN1bGVZKHgwLHgxLGR4KXt2YXIgeD1kMy5yYW5nZSh4MCx4MSAtIM61LGR4KS5jb25jYXQoeDEpO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4geC5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIFt4LHldO30pO307fWZ1bmN0aW9uIGQzX3NvdXJjZShkKXtyZXR1cm4gZC5zb3VyY2U7fWZ1bmN0aW9uIGQzX3RhcmdldChkKXtyZXR1cm4gZC50YXJnZXQ7fWQzLmdlby5ncmVhdEFyYyA9IGZ1bmN0aW9uKCl7dmFyIHNvdXJjZT1kM19zb3VyY2Usc291cmNlXyx0YXJnZXQ9ZDNfdGFyZ2V0LHRhcmdldF87ZnVuY3Rpb24gZ3JlYXRBcmMoKXtyZXR1cm4ge3R5cGU6XCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6W3NvdXJjZV8gfHwgc291cmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0YXJnZXRfIHx8IHRhcmdldC5hcHBseSh0aGlzLGFyZ3VtZW50cyldfTt9Z3JlYXRBcmMuZGlzdGFuY2UgPSBmdW5jdGlvbigpe3JldHVybiBkMy5nZW8uZGlzdGFuY2Uoc291cmNlXyB8fCBzb3VyY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRhcmdldF8gfHwgdGFyZ2V0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7fTtncmVhdEFyYy5zb3VyY2UgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc291cmNlO3NvdXJjZSA9IF8sc291cmNlXyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCI/bnVsbDpfO3JldHVybiBncmVhdEFyYzt9O2dyZWF0QXJjLnRhcmdldCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0YXJnZXQ7dGFyZ2V0ID0gXyx0YXJnZXRfID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIj9udWxsOl87cmV0dXJuIGdyZWF0QXJjO307Z3JlYXRBcmMucHJlY2lzaW9uID0gZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9ncmVhdEFyYzowO307cmV0dXJuIGdyZWF0QXJjO307ZDMuZ2VvLmludGVycG9sYXRlID0gZnVuY3Rpb24oc291cmNlLHRhcmdldCl7cmV0dXJuIGQzX2dlb19pbnRlcnBvbGF0ZShzb3VyY2VbMF0gKiBkM19yYWRpYW5zLHNvdXJjZVsxXSAqIGQzX3JhZGlhbnMsdGFyZ2V0WzBdICogZDNfcmFkaWFucyx0YXJnZXRbMV0gKiBkM19yYWRpYW5zKTt9O2Z1bmN0aW9uIGQzX2dlb19pbnRlcnBvbGF0ZSh4MCx5MCx4MSx5MSl7dmFyIGN5MD1NYXRoLmNvcyh5MCksc3kwPU1hdGguc2luKHkwKSxjeTE9TWF0aC5jb3MoeTEpLHN5MT1NYXRoLnNpbih5MSksa3gwPWN5MCAqIE1hdGguY29zKHgwKSxreTA9Y3kwICogTWF0aC5zaW4oeDApLGt4MT1jeTEgKiBNYXRoLmNvcyh4MSksa3kxPWN5MSAqIE1hdGguc2luKHgxKSxkPTIgKiBNYXRoLmFzaW4oTWF0aC5zcXJ0KGQzX2hhdmVyc2luKHkxIC0geTApICsgY3kwICogY3kxICogZDNfaGF2ZXJzaW4oeDEgLSB4MCkpKSxrPTEgLyBNYXRoLnNpbihkKTt2YXIgaW50ZXJwb2xhdGU9ZD9mdW5jdGlvbih0KXt2YXIgQj1NYXRoLnNpbih0ICo9IGQpICogayxBPU1hdGguc2luKGQgLSB0KSAqIGsseD1BICoga3gwICsgQiAqIGt4MSx5PUEgKiBreTAgKyBCICoga3kxLHo9QSAqIHN5MCArIEIgKiBzeTE7cmV0dXJuIFtNYXRoLmF0YW4yKHkseCkgKiBkM19kZWdyZWVzLE1hdGguYXRhbjIoeixNYXRoLnNxcnQoeCAqIHggKyB5ICogeSkpICogZDNfZGVncmVlc107fTpmdW5jdGlvbigpe3JldHVybiBbeDAgKiBkM19kZWdyZWVzLHkwICogZDNfZGVncmVlc107fTtpbnRlcnBvbGF0ZS5kaXN0YW5jZSA9IGQ7cmV0dXJuIGludGVycG9sYXRlO31kMy5nZW8ubGVuZ3RoID0gZnVuY3Rpb24ob2JqZWN0KXtkM19nZW9fbGVuZ3RoU3VtID0gMDtkMy5nZW8uc3RyZWFtKG9iamVjdCxkM19nZW9fbGVuZ3RoKTtyZXR1cm4gZDNfZ2VvX2xlbmd0aFN1bTt9O3ZhciBkM19nZW9fbGVuZ3RoU3VtO3ZhciBkM19nZW9fbGVuZ3RoPXtzcGhlcmU6ZDNfbm9vcCxwb2ludDpkM19ub29wLGxpbmVTdGFydDpkM19nZW9fbGVuZ3RoTGluZVN0YXJ0LGxpbmVFbmQ6ZDNfbm9vcCxwb2x5Z29uU3RhcnQ6ZDNfbm9vcCxwb2x5Z29uRW5kOmQzX25vb3B9O2Z1bmN0aW9uIGQzX2dlb19sZW5ndGhMaW5lU3RhcnQoKXt2YXIgzrswLHNpbs+GMCxjb3PPhjA7ZDNfZ2VvX2xlbmd0aC5wb2ludCA9IGZ1bmN0aW9uKM67LM+GKXvOuzAgPSDOuyAqIGQzX3JhZGlhbnMsc2luz4YwID0gTWF0aC5zaW4oz4YgKj0gZDNfcmFkaWFucyksY29zz4YwID0gTWF0aC5jb3Moz4YpO2QzX2dlb19sZW5ndGgucG9pbnQgPSBuZXh0UG9pbnQ7fTtkM19nZW9fbGVuZ3RoLmxpbmVFbmQgPSBmdW5jdGlvbigpe2QzX2dlb19sZW5ndGgucG9pbnQgPSBkM19nZW9fbGVuZ3RoLmxpbmVFbmQgPSBkM19ub29wO307ZnVuY3Rpb24gbmV4dFBvaW50KM67LM+GKXt2YXIgc2luz4Y9TWF0aC5zaW4oz4YgKj0gZDNfcmFkaWFucyksY29zz4Y9TWF0aC5jb3Moz4YpLHQ9YWJzKCjOuyAqPSBkM19yYWRpYW5zKSAtIM67MCksY29zzpTOuz1NYXRoLmNvcyh0KTtkM19nZW9fbGVuZ3RoU3VtICs9IE1hdGguYXRhbjIoTWF0aC5zcXJ0KCh0ID0gY29zz4YgKiBNYXRoLnNpbih0KSkgKiB0ICsgKHQgPSBjb3PPhjAgKiBzaW7PhiAtIHNpbs+GMCAqIGNvc8+GICogY29zzpTOuykgKiB0KSxzaW7PhjAgKiBzaW7PhiArIGNvc8+GMCAqIGNvc8+GICogY29zzpTOuyk7zrswID0gzrssc2luz4YwID0gc2luz4YsY29zz4YwID0gY29zz4Y7fX1mdW5jdGlvbiBkM19nZW9fYXppbXV0aGFsKHNjYWxlLGFuZ2xlKXtmdW5jdGlvbiBhemltdXRoYWwozrssz4Ype3ZhciBjb3POuz1NYXRoLmNvcyjOuyksY29zz4Y9TWF0aC5jb3Moz4YpLGs9c2NhbGUoY29zzrsgKiBjb3PPhik7cmV0dXJuIFtrICogY29zz4YgKiBNYXRoLnNpbijOuyksayAqIE1hdGguc2luKM+GKV07fWF6aW11dGhhbC5pbnZlcnQgPSBmdW5jdGlvbih4LHkpe3ZhciDPgT1NYXRoLnNxcnQoeCAqIHggKyB5ICogeSksYz1hbmdsZSjPgSksc2luYz1NYXRoLnNpbihjKSxjb3NjPU1hdGguY29zKGMpO3JldHVybiBbTWF0aC5hdGFuMih4ICogc2luYyzPgSAqIGNvc2MpLE1hdGguYXNpbijPgSAmJiB5ICogc2luYyAvIM+BKV07fTtyZXR1cm4gYXppbXV0aGFsO312YXIgZDNfZ2VvX2F6aW11dGhhbEVxdWFsQXJlYT1kM19nZW9fYXppbXV0aGFsKGZ1bmN0aW9uKGNvc867Y29zz4Ype3JldHVybiBNYXRoLnNxcnQoMiAvICgxICsgY29zzrtjb3PPhikpO30sZnVuY3Rpb24oz4Epe3JldHVybiAyICogTWF0aC5hc2luKM+BIC8gMik7fSk7KGQzLmdlby5hemltdXRoYWxFcXVhbEFyZWEgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19nZW9fYXppbXV0aGFsRXF1YWxBcmVhKTt9KS5yYXcgPSBkM19nZW9fYXppbXV0aGFsRXF1YWxBcmVhO3ZhciBkM19nZW9fYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZDNfZ2VvX2F6aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+GKXt2YXIgYz1NYXRoLmFjb3MoY29zzrtjb3PPhik7cmV0dXJuIGMgJiYgYyAvIE1hdGguc2luKGMpO30sZDNfaWRlbnRpdHkpOyhkMy5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19nZW9fYXppbXV0aGFsRXF1aWRpc3RhbnQpO30pLnJhdyA9IGQzX2dlb19hemltdXRoYWxFcXVpZGlzdGFudDtmdW5jdGlvbiBkM19nZW9fY29uaWNDb25mb3JtYWwoz4YwLM+GMSl7dmFyIGNvc8+GMD1NYXRoLmNvcyjPhjApLHQ9ZnVuY3Rpb24gdCjPhil7cmV0dXJuIE1hdGgudGFuKM+AIC8gNCArIM+GIC8gMik7fSxuPc+GMCA9PT0gz4YxP01hdGguc2luKM+GMCk6TWF0aC5sb2coY29zz4YwIC8gTWF0aC5jb3Moz4YxKSkgLyBNYXRoLmxvZyh0KM+GMSkgLyB0KM+GMCkpLEY9Y29zz4YwICogTWF0aC5wb3codCjPhjApLG4pIC8gbjtpZighbilyZXR1cm4gZDNfZ2VvX21lcmNhdG9yO2Z1bmN0aW9uIGZvcndhcmQozrssz4Ype2lmKEYgPiAwKXtpZijPhiA8IC1oYWxmz4AgKyDOtSnPhiA9IC1oYWxmz4AgKyDOtTt9ZWxzZSB7aWYoz4YgPiBoYWxmz4AgLSDOtSnPhiA9IGhhbGbPgCAtIM61O312YXIgz4E9RiAvIE1hdGgucG93KHQoz4YpLG4pO3JldHVybiBbz4EgKiBNYXRoLnNpbihuICogzrspLEYgLSDPgSAqIE1hdGguY29zKG4gKiDOuyldO31mb3J3YXJkLmludmVydCA9IGZ1bmN0aW9uKHgseSl7dmFyIM+BMF95PUYgLSB5LM+BPWQzX3NnbihuKSAqIE1hdGguc3FydCh4ICogeCArIM+BMF95ICogz4EwX3kpO3JldHVybiBbTWF0aC5hdGFuMih4LM+BMF95KSAvIG4sMiAqIE1hdGguYXRhbihNYXRoLnBvdyhGIC8gz4EsMSAvIG4pKSAtIGhhbGbPgF07fTtyZXR1cm4gZm9yd2FyZDt9KGQzLmdlby5jb25pY0NvbmZvcm1hbCA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX2dlb19jb25pYyhkM19nZW9fY29uaWNDb25mb3JtYWwpO30pLnJhdyA9IGQzX2dlb19jb25pY0NvbmZvcm1hbDtmdW5jdGlvbiBkM19nZW9fY29uaWNFcXVpZGlzdGFudCjPhjAsz4YxKXt2YXIgY29zz4YwPU1hdGguY29zKM+GMCksbj3PhjAgPT09IM+GMT9NYXRoLnNpbijPhjApOihjb3PPhjAgLSBNYXRoLmNvcyjPhjEpKSAvICjPhjEgLSDPhjApLEc9Y29zz4YwIC8gbiArIM+GMDtpZihhYnMobikgPCDOtSlyZXR1cm4gZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcjtmdW5jdGlvbiBmb3J3YXJkKM67LM+GKXt2YXIgz4E9RyAtIM+GO3JldHVybiBbz4EgKiBNYXRoLnNpbihuICogzrspLEcgLSDPgSAqIE1hdGguY29zKG4gKiDOuyldO31mb3J3YXJkLmludmVydCA9IGZ1bmN0aW9uKHgseSl7dmFyIM+BMF95PUcgLSB5O3JldHVybiBbTWF0aC5hdGFuMih4LM+BMF95KSAvIG4sRyAtIGQzX3NnbihuKSAqIE1hdGguc3FydCh4ICogeCArIM+BMF95ICogz4EwX3kpXTt9O3JldHVybiBmb3J3YXJkO30oZDMuZ2VvLmNvbmljRXF1aWRpc3RhbnQgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fY29uaWMoZDNfZ2VvX2NvbmljRXF1aWRpc3RhbnQpO30pLnJhdyA9IGQzX2dlb19jb25pY0VxdWlkaXN0YW50O3ZhciBkM19nZW9fZ25vbW9uaWM9ZDNfZ2VvX2F6aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+GKXtyZXR1cm4gMSAvIGNvc867Y29zz4Y7fSxNYXRoLmF0YW4pOyhkMy5nZW8uZ25vbW9uaWMgPSBmdW5jdGlvbigpe3JldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19nZW9fZ25vbW9uaWMpO30pLnJhdyA9IGQzX2dlb19nbm9tb25pYztmdW5jdGlvbiBkM19nZW9fbWVyY2F0b3Iozrssz4Ype3JldHVybiBbzrssTWF0aC5sb2coTWF0aC50YW4oz4AgLyA0ICsgz4YgLyAyKSldO31kM19nZW9fbWVyY2F0b3IuaW52ZXJ0ID0gZnVuY3Rpb24oeCx5KXtyZXR1cm4gW3gsMiAqIE1hdGguYXRhbihNYXRoLmV4cCh5KSkgLSBoYWxmz4BdO307ZnVuY3Rpb24gZDNfZ2VvX21lcmNhdG9yUHJvamVjdGlvbihwcm9qZWN0KXt2YXIgbT1kM19nZW9fcHJvamVjdGlvbihwcm9qZWN0KSxzY2FsZT1tLnNjYWxlLHRyYW5zbGF0ZT1tLnRyYW5zbGF0ZSxjbGlwRXh0ZW50PW0uY2xpcEV4dGVudCxjbGlwQXV0bzttLnNjYWxlID0gZnVuY3Rpb24oKXt2YXIgdj1zY2FsZS5hcHBseShtLGFyZ3VtZW50cyk7cmV0dXJuIHYgPT09IG0/Y2xpcEF1dG8/bS5jbGlwRXh0ZW50KG51bGwpOm06djt9O20udHJhbnNsYXRlID0gZnVuY3Rpb24oKXt2YXIgdj10cmFuc2xhdGUuYXBwbHkobSxhcmd1bWVudHMpO3JldHVybiB2ID09PSBtP2NsaXBBdXRvP20uY2xpcEV4dGVudChudWxsKTptOnY7fTttLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKXt2YXIgdj1jbGlwRXh0ZW50LmFwcGx5KG0sYXJndW1lbnRzKTtpZih2ID09PSBtKXtpZihjbGlwQXV0byA9IF8gPT0gbnVsbCl7dmFyIGs9z4AgKiBzY2FsZSgpLHQ9dHJhbnNsYXRlKCk7Y2xpcEV4dGVudChbW3RbMF0gLSBrLHRbMV0gLSBrXSxbdFswXSArIGssdFsxXSArIGtdXSk7fX1lbHNlIGlmKGNsaXBBdXRvKXt2ID0gbnVsbDt9cmV0dXJuIHY7fTtyZXR1cm4gbS5jbGlwRXh0ZW50KG51bGwpO30oZDMuZ2VvLm1lcmNhdG9yID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfZ2VvX21lcmNhdG9yUHJvamVjdGlvbihkM19nZW9fbWVyY2F0b3IpO30pLnJhdyA9IGQzX2dlb19tZXJjYXRvcjt2YXIgZDNfZ2VvX29ydGhvZ3JhcGhpYz1kM19nZW9fYXppbXV0aGFsKGZ1bmN0aW9uKCl7cmV0dXJuIDE7fSxNYXRoLmFzaW4pOyhkMy5nZW8ub3J0aG9ncmFwaGljID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfZ2VvX3Byb2plY3Rpb24oZDNfZ2VvX29ydGhvZ3JhcGhpYyk7fSkucmF3ID0gZDNfZ2VvX29ydGhvZ3JhcGhpYzt2YXIgZDNfZ2VvX3N0ZXJlb2dyYXBoaWM9ZDNfZ2VvX2F6aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+GKXtyZXR1cm4gMSAvICgxICsgY29zzrtjb3PPhik7fSxmdW5jdGlvbijPgSl7cmV0dXJuIDIgKiBNYXRoLmF0YW4oz4EpO30pOyhkMy5nZW8uc3RlcmVvZ3JhcGhpYyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX2dlb19wcm9qZWN0aW9uKGQzX2dlb19zdGVyZW9ncmFwaGljKTt9KS5yYXcgPSBkM19nZW9fc3RlcmVvZ3JhcGhpYztmdW5jdGlvbiBkM19nZW9fdHJhbnN2ZXJzZU1lcmNhdG9yKM67LM+GKXtyZXR1cm4gW01hdGgubG9nKE1hdGgudGFuKM+AIC8gNCArIM+GIC8gMikpLC3Ou107fWQzX2dlb190cmFuc3ZlcnNlTWVyY2F0b3IuaW52ZXJ0ID0gZnVuY3Rpb24oeCx5KXtyZXR1cm4gWy15LDIgKiBNYXRoLmF0YW4oTWF0aC5leHAoeCkpIC0gaGFsZs+AXTt9OyhkMy5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yID0gZnVuY3Rpb24oKXt2YXIgcHJvamVjdGlvbj1kM19nZW9fbWVyY2F0b3JQcm9qZWN0aW9uKGQzX2dlb190cmFuc3ZlcnNlTWVyY2F0b3IpLGNlbnRlcj1wcm9qZWN0aW9uLmNlbnRlcixyb3RhdGU9cHJvamVjdGlvbi5yb3RhdGU7cHJvamVjdGlvbi5jZW50ZXIgPSBmdW5jdGlvbihfKXtyZXR1cm4gXz9jZW50ZXIoWy1fWzFdLF9bMF1dKTooXyA9IGNlbnRlcigpLFtfWzFdLC1fWzBdXSk7fTtwcm9qZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pe3JldHVybiBfP3JvdGF0ZShbX1swXSxfWzFdLF8ubGVuZ3RoID4gMj9fWzJdICsgOTA6OTBdKTooXyA9IHJvdGF0ZSgpLFtfWzBdLF9bMV0sX1syXSAtIDkwXSk7fTtyZXR1cm4gcm90YXRlKFswLDAsOTBdKTt9KS5yYXcgPSBkM19nZW9fdHJhbnN2ZXJzZU1lcmNhdG9yO2QzLmdlb20gPSB7fTtmdW5jdGlvbiBkM19nZW9tX3BvaW50WChkKXtyZXR1cm4gZFswXTt9ZnVuY3Rpb24gZDNfZ2VvbV9wb2ludFkoZCl7cmV0dXJuIGRbMV07fWQzLmdlb20uaHVsbCA9IGZ1bmN0aW9uKHZlcnRpY2VzKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGh1bGwodmVydGljZXMpO2Z1bmN0aW9uIGh1bGwoZGF0YSl7aWYoZGF0YS5sZW5ndGggPCAzKXJldHVybiBbXTt2YXIgZng9ZDNfZnVuY3Rvcih4KSxmeT1kM19mdW5jdG9yKHkpLGksbj1kYXRhLmxlbmd0aCxwb2ludHM9W10sZmxpcHBlZFBvaW50cz1bXTtmb3IoaSA9IDA7aSA8IG47aSsrKSB7cG9pbnRzLnB1c2goWytmeC5jYWxsKHRoaXMsZGF0YVtpXSxpKSwrZnkuY2FsbCh0aGlzLGRhdGFbaV0saSksaV0pO31wb2ludHMuc29ydChkM19nZW9tX2h1bGxPcmRlcik7Zm9yKGkgPSAwO2kgPCBuO2krKykgZmxpcHBlZFBvaW50cy5wdXNoKFtwb2ludHNbaV1bMF0sLXBvaW50c1tpXVsxXV0pO3ZhciB1cHBlcj1kM19nZW9tX2h1bGxVcHBlcihwb2ludHMpLGxvd2VyPWQzX2dlb21faHVsbFVwcGVyKGZsaXBwZWRQb2ludHMpO3ZhciBza2lwTGVmdD1sb3dlclswXSA9PT0gdXBwZXJbMF0sc2tpcFJpZ2h0PWxvd2VyW2xvd2VyLmxlbmd0aCAtIDFdID09PSB1cHBlclt1cHBlci5sZW5ndGggLSAxXSxwb2x5Z29uPVtdO2ZvcihpID0gdXBwZXIubGVuZ3RoIC0gMTtpID49IDA7LS1pKSBwb2x5Z29uLnB1c2goZGF0YVtwb2ludHNbdXBwZXJbaV1dWzJdXSk7Zm9yKGkgPSArc2tpcExlZnQ7aSA8IGxvd2VyLmxlbmd0aCAtIHNraXBSaWdodDsrK2kpIHBvbHlnb24ucHVzaChkYXRhW3BvaW50c1tsb3dlcltpXV1bMl1dKTtyZXR1cm4gcG9seWdvbjt9aHVsbC54ID0gZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHggPSBfLGh1bGwpOng7fTtodWxsLnkgPSBmdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeSA9IF8saHVsbCk6eTt9O3JldHVybiBodWxsO307ZnVuY3Rpb24gZDNfZ2VvbV9odWxsVXBwZXIocG9pbnRzKXt2YXIgbj1wb2ludHMubGVuZ3RoLGh1bGw9WzAsMV0saHM9Mjtmb3IodmFyIGk9MjtpIDwgbjtpKyspIHt3aGlsZShocyA+IDEgJiYgZDNfY3Jvc3MyZChwb2ludHNbaHVsbFtocyAtIDJdXSxwb2ludHNbaHVsbFtocyAtIDFdXSxwb2ludHNbaV0pIDw9IDApIC0taHM7aHVsbFtocysrXSA9IGk7fXJldHVybiBodWxsLnNsaWNlKDAsaHMpO31mdW5jdGlvbiBkM19nZW9tX2h1bGxPcmRlcihhLGIpe3JldHVybiBhWzBdIC0gYlswXSB8fCBhWzFdIC0gYlsxXTt9ZDMuZ2VvbS5wb2x5Z29uID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpe2QzX3N1YmNsYXNzKGNvb3JkaW5hdGVzLGQzX2dlb21fcG9seWdvblByb3RvdHlwZSk7cmV0dXJuIGNvb3JkaW5hdGVzO307dmFyIGQzX2dlb21fcG9seWdvblByb3RvdHlwZT1kMy5nZW9tLnBvbHlnb24ucHJvdG90eXBlID0gW107ZDNfZ2VvbV9wb2x5Z29uUHJvdG90eXBlLmFyZWEgPSBmdW5jdGlvbigpe3ZhciBpPS0xLG49dGhpcy5sZW5ndGgsYSxiPXRoaXNbbiAtIDFdLGFyZWE9MDt3aGlsZSgrK2kgPCBuKSB7YSA9IGI7YiA9IHRoaXNbaV07YXJlYSArPSBhWzFdICogYlswXSAtIGFbMF0gKiBiWzFdO31yZXR1cm4gYXJlYSAqIC41O307ZDNfZ2VvbV9wb2x5Z29uUHJvdG90eXBlLmNlbnRyb2lkID0gZnVuY3Rpb24oayl7dmFyIGk9LTEsbj10aGlzLmxlbmd0aCx4PTAseT0wLGEsYj10aGlzW24gLSAxXSxjO2lmKCFhcmd1bWVudHMubGVuZ3RoKWsgPSAtMSAvICg2ICogdGhpcy5hcmVhKCkpO3doaWxlKCsraSA8IG4pIHthID0gYjtiID0gdGhpc1tpXTtjID0gYVswXSAqIGJbMV0gLSBiWzBdICogYVsxXTt4ICs9IChhWzBdICsgYlswXSkgKiBjO3kgKz0gKGFbMV0gKyBiWzFdKSAqIGM7fXJldHVybiBbeCAqIGsseSAqIGtdO307ZDNfZ2VvbV9wb2x5Z29uUHJvdG90eXBlLmNsaXAgPSBmdW5jdGlvbihzdWJqZWN0KXt2YXIgaW5wdXQsY2xvc2VkPWQzX2dlb21fcG9seWdvbkNsb3NlZChzdWJqZWN0KSxpPS0xLG49dGhpcy5sZW5ndGggLSBkM19nZW9tX3BvbHlnb25DbG9zZWQodGhpcyksaixtLGE9dGhpc1tuIC0gMV0sYixjLGQ7d2hpbGUoKytpIDwgbikge2lucHV0ID0gc3ViamVjdC5zbGljZSgpO3N1YmplY3QubGVuZ3RoID0gMDtiID0gdGhpc1tpXTtjID0gaW5wdXRbKG0gPSBpbnB1dC5sZW5ndGggLSBjbG9zZWQpIC0gMV07aiA9IC0xO3doaWxlKCsraiA8IG0pIHtkID0gaW5wdXRbal07aWYoZDNfZ2VvbV9wb2x5Z29uSW5zaWRlKGQsYSxiKSl7aWYoIWQzX2dlb21fcG9seWdvbkluc2lkZShjLGEsYikpe3N1YmplY3QucHVzaChkM19nZW9tX3BvbHlnb25JbnRlcnNlY3QoYyxkLGEsYikpO31zdWJqZWN0LnB1c2goZCk7fWVsc2UgaWYoZDNfZ2VvbV9wb2x5Z29uSW5zaWRlKGMsYSxiKSl7c3ViamVjdC5wdXNoKGQzX2dlb21fcG9seWdvbkludGVyc2VjdChjLGQsYSxiKSk7fWMgPSBkO31pZihjbG9zZWQpc3ViamVjdC5wdXNoKHN1YmplY3RbMF0pO2EgPSBiO31yZXR1cm4gc3ViamVjdDt9O2Z1bmN0aW9uIGQzX2dlb21fcG9seWdvbkluc2lkZShwLGEsYil7cmV0dXJuIChiWzBdIC0gYVswXSkgKiAocFsxXSAtIGFbMV0pIDwgKGJbMV0gLSBhWzFdKSAqIChwWzBdIC0gYVswXSk7fWZ1bmN0aW9uIGQzX2dlb21fcG9seWdvbkludGVyc2VjdChjLGQsYSxiKXt2YXIgeDE9Y1swXSx4Mz1hWzBdLHgyMT1kWzBdIC0geDEseDQzPWJbMF0gLSB4Myx5MT1jWzFdLHkzPWFbMV0seTIxPWRbMV0gLSB5MSx5NDM9YlsxXSAtIHkzLHVhPSh4NDMgKiAoeTEgLSB5MykgLSB5NDMgKiAoeDEgLSB4MykpIC8gKHk0MyAqIHgyMSAtIHg0MyAqIHkyMSk7cmV0dXJuIFt4MSArIHVhICogeDIxLHkxICsgdWEgKiB5MjFdO31mdW5jdGlvbiBkM19nZW9tX3BvbHlnb25DbG9zZWQoY29vcmRpbmF0ZXMpe3ZhciBhPWNvb3JkaW5hdGVzWzBdLGI9Y29vcmRpbmF0ZXNbY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV07cmV0dXJuICEoYVswXSAtIGJbMF0gfHwgYVsxXSAtIGJbMV0pO312YXIgZDNfZ2VvbV92b3Jvbm9pRWRnZXMsZDNfZ2VvbV92b3Jvbm9pQ2VsbHMsZDNfZ2VvbV92b3Jvbm9pQmVhY2hlcyxkM19nZW9tX3Zvcm9ub2lCZWFjaFBvb2w9W10sZDNfZ2VvbV92b3Jvbm9pRmlyc3RDaXJjbGUsZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcyxkM19nZW9tX3Zvcm9ub2lDaXJjbGVQb29sPVtdO2Z1bmN0aW9uIGQzX2dlb21fdm9yb25vaUJlYWNoKCl7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKHRoaXMpO3RoaXMuZWRnZSA9IHRoaXMuc2l0ZSA9IHRoaXMuY2lyY2xlID0gbnVsbDt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlQmVhY2goc2l0ZSl7dmFyIGJlYWNoPWQzX2dlb21fdm9yb25vaUJlYWNoUG9vbC5wb3AoKSB8fCBuZXcgZDNfZ2VvbV92b3Jvbm9pQmVhY2goKTtiZWFjaC5zaXRlID0gc2l0ZTtyZXR1cm4gYmVhY2g7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaURldGFjaEJlYWNoKGJlYWNoKXtkM19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUoYmVhY2gpO2QzX2dlb21fdm9yb25vaUJlYWNoZXMucmVtb3ZlKGJlYWNoKTtkM19nZW9tX3Zvcm9ub2lCZWFjaFBvb2wucHVzaChiZWFjaCk7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKGJlYWNoKTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVtb3ZlQmVhY2goYmVhY2gpe3ZhciBjaXJjbGU9YmVhY2guY2lyY2xlLHg9Y2lyY2xlLngseT1jaXJjbGUuY3ksdmVydGV4PXt4OngseTp5fSxwcmV2aW91cz1iZWFjaC5QLG5leHQ9YmVhY2guTixkaXNhcHBlYXJpbmc9W2JlYWNoXTtkM19nZW9tX3Zvcm9ub2lEZXRhY2hCZWFjaChiZWFjaCk7dmFyIGxBcmM9cHJldmlvdXM7d2hpbGUobEFyYy5jaXJjbGUgJiYgYWJzKHggLSBsQXJjLmNpcmNsZS54KSA8IM61ICYmIGFicyh5IC0gbEFyYy5jaXJjbGUuY3kpIDwgzrUpIHtwcmV2aW91cyA9IGxBcmMuUDtkaXNhcHBlYXJpbmcudW5zaGlmdChsQXJjKTtkM19nZW9tX3Zvcm9ub2lEZXRhY2hCZWFjaChsQXJjKTtsQXJjID0gcHJldmlvdXM7fWRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpO2QzX2dlb21fdm9yb25vaURldGFjaENpcmNsZShsQXJjKTt2YXIgckFyYz1uZXh0O3doaWxlKHJBcmMuY2lyY2xlICYmIGFicyh4IC0gckFyYy5jaXJjbGUueCkgPCDOtSAmJiBhYnMoeSAtIHJBcmMuY2lyY2xlLmN5KSA8IM61KSB7bmV4dCA9IHJBcmMuTjtkaXNhcHBlYXJpbmcucHVzaChyQXJjKTtkM19nZW9tX3Zvcm9ub2lEZXRhY2hCZWFjaChyQXJjKTtyQXJjID0gbmV4dDt9ZGlzYXBwZWFyaW5nLnB1c2gockFyYyk7ZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKHJBcmMpO3ZhciBuQXJjcz1kaXNhcHBlYXJpbmcubGVuZ3RoLGlBcmM7Zm9yKGlBcmMgPSAxO2lBcmMgPCBuQXJjczsrK2lBcmMpIHtyQXJjID0gZGlzYXBwZWFyaW5nW2lBcmNdO2xBcmMgPSBkaXNhcHBlYXJpbmdbaUFyYyAtIDFdO2QzX2dlb21fdm9yb25vaVNldEVkZ2VFbmQockFyYy5lZGdlLGxBcmMuc2l0ZSxyQXJjLnNpdGUsdmVydGV4KTt9bEFyYyA9IGRpc2FwcGVhcmluZ1swXTtyQXJjID0gZGlzYXBwZWFyaW5nW25BcmNzIC0gMV07ckFyYy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShsQXJjLnNpdGUsckFyYy5zaXRlLG51bGwsdmVydGV4KTtkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7ZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2lyY2xlKHJBcmMpO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lBZGRCZWFjaChzaXRlKXt2YXIgeD1zaXRlLngsZGlyZWN0cml4PXNpdGUueSxsQXJjLHJBcmMsZHhsLGR4cixub2RlPWQzX2dlb21fdm9yb25vaUJlYWNoZXMuXzt3aGlsZShub2RlKSB7ZHhsID0gZDNfZ2VvbV92b3Jvbm9pTGVmdEJyZWFrUG9pbnQobm9kZSxkaXJlY3RyaXgpIC0geDtpZihkeGwgPiDOtSlub2RlID0gbm9kZS5MO2Vsc2Uge2R4ciA9IHggLSBkM19nZW9tX3Zvcm9ub2lSaWdodEJyZWFrUG9pbnQobm9kZSxkaXJlY3RyaXgpO2lmKGR4ciA+IM61KXtpZighbm9kZS5SKXtsQXJjID0gbm9kZTticmVhazt9bm9kZSA9IG5vZGUuUjt9ZWxzZSB7aWYoZHhsID4gLc61KXtsQXJjID0gbm9kZS5QO3JBcmMgPSBub2RlO31lbHNlIGlmKGR4ciA+IC3OtSl7bEFyYyA9IG5vZGU7ckFyYyA9IG5vZGUuTjt9ZWxzZSB7bEFyYyA9IHJBcmMgPSBub2RlO31icmVhazt9fX12YXIgbmV3QXJjPWQzX2dlb21fdm9yb25vaUNyZWF0ZUJlYWNoKHNpdGUpO2QzX2dlb21fdm9yb25vaUJlYWNoZXMuaW5zZXJ0KGxBcmMsbmV3QXJjKTtpZighbEFyYyAmJiAhckFyYylyZXR1cm47aWYobEFyYyA9PT0gckFyYyl7ZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKGxBcmMpO3JBcmMgPSBkM19nZW9tX3Zvcm9ub2lDcmVhdGVCZWFjaChsQXJjLnNpdGUpO2QzX2dlb21fdm9yb25vaUJlYWNoZXMuaW5zZXJ0KG5ld0FyYyxyQXJjKTtuZXdBcmMuZWRnZSA9IHJBcmMuZWRnZSA9IGQzX2dlb21fdm9yb25vaUNyZWF0ZUVkZ2UobEFyYy5zaXRlLG5ld0FyYy5zaXRlKTtkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7ZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2lyY2xlKHJBcmMpO3JldHVybjt9aWYoIXJBcmMpe25ld0FyYy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShsQXJjLnNpdGUsbmV3QXJjLnNpdGUpO3JldHVybjt9ZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKGxBcmMpO2QzX2dlb21fdm9yb25vaURldGFjaENpcmNsZShyQXJjKTt2YXIgbFNpdGU9bEFyYy5zaXRlLGF4PWxTaXRlLngsYXk9bFNpdGUueSxieD1zaXRlLnggLSBheCxieT1zaXRlLnkgLSBheSxyU2l0ZT1yQXJjLnNpdGUsY3g9clNpdGUueCAtIGF4LGN5PXJTaXRlLnkgLSBheSxkPTIgKiAoYnggKiBjeSAtIGJ5ICogY3gpLGhiPWJ4ICogYnggKyBieSAqIGJ5LGhjPWN4ICogY3ggKyBjeSAqIGN5LHZlcnRleD17eDooY3kgKiBoYiAtIGJ5ICogaGMpIC8gZCArIGF4LHk6KGJ4ICogaGMgLSBjeCAqIGhiKSAvIGQgKyBheX07ZDNfZ2VvbV92b3Jvbm9pU2V0RWRnZUVuZChyQXJjLmVkZ2UsbFNpdGUsclNpdGUsdmVydGV4KTtuZXdBcmMuZWRnZSA9IGQzX2dlb21fdm9yb25vaUNyZWF0ZUVkZ2UobFNpdGUsc2l0ZSxudWxsLHZlcnRleCk7ckFyYy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShzaXRlLHJTaXRlLG51bGwsdmVydGV4KTtkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7ZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2lyY2xlKHJBcmMpO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lMZWZ0QnJlYWtQb2ludChhcmMsZGlyZWN0cml4KXt2YXIgc2l0ZT1hcmMuc2l0ZSxyZm9jeD1zaXRlLngscmZvY3k9c2l0ZS55LHBieTI9cmZvY3kgLSBkaXJlY3RyaXg7aWYoIXBieTIpcmV0dXJuIHJmb2N4O3ZhciBsQXJjPWFyYy5QO2lmKCFsQXJjKXJldHVybiAtSW5maW5pdHk7c2l0ZSA9IGxBcmMuc2l0ZTt2YXIgbGZvY3g9c2l0ZS54LGxmb2N5PXNpdGUueSxwbGJ5Mj1sZm9jeSAtIGRpcmVjdHJpeDtpZighcGxieTIpcmV0dXJuIGxmb2N4O3ZhciBobD1sZm9jeCAtIHJmb2N4LGFieTI9MSAvIHBieTIgLSAxIC8gcGxieTIsYj1obCAvIHBsYnkyO2lmKGFieTIpcmV0dXJuICgtYiArIE1hdGguc3FydChiICogYiAtIDIgKiBhYnkyICogKGhsICogaGwgLyAoLTIgKiBwbGJ5MikgLSBsZm9jeSArIHBsYnkyIC8gMiArIHJmb2N5IC0gcGJ5MiAvIDIpKSkgLyBhYnkyICsgcmZvY3g7cmV0dXJuIChyZm9jeCArIGxmb2N4KSAvIDI7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJpZ2h0QnJlYWtQb2ludChhcmMsZGlyZWN0cml4KXt2YXIgckFyYz1hcmMuTjtpZihyQXJjKXJldHVybiBkM19nZW9tX3Zvcm9ub2lMZWZ0QnJlYWtQb2ludChyQXJjLGRpcmVjdHJpeCk7dmFyIHNpdGU9YXJjLnNpdGU7cmV0dXJuIHNpdGUueSA9PT0gZGlyZWN0cml4P3NpdGUueDpJbmZpbml0eTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ2VsbChzaXRlKXt0aGlzLnNpdGUgPSBzaXRlO3RoaXMuZWRnZXMgPSBbXTt9ZDNfZ2VvbV92b3Jvbm9pQ2VsbC5wcm90b3R5cGUucHJlcGFyZSA9IGZ1bmN0aW9uKCl7dmFyIGhhbGZFZGdlcz10aGlzLmVkZ2VzLGlIYWxmRWRnZT1oYWxmRWRnZXMubGVuZ3RoLGVkZ2U7d2hpbGUoaUhhbGZFZGdlLS0pIHtlZGdlID0gaGFsZkVkZ2VzW2lIYWxmRWRnZV0uZWRnZTtpZighZWRnZS5iIHx8ICFlZGdlLmEpaGFsZkVkZ2VzLnNwbGljZShpSGFsZkVkZ2UsMSk7fWhhbGZFZGdlcy5zb3J0KGQzX2dlb21fdm9yb25vaUhhbGZFZGdlT3JkZXIpO3JldHVybiBoYWxmRWRnZXMubGVuZ3RoO307ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ2xvc2VDZWxscyhleHRlbnQpe3ZhciB4MD1leHRlbnRbMF1bMF0seDE9ZXh0ZW50WzFdWzBdLHkwPWV4dGVudFswXVsxXSx5MT1leHRlbnRbMV1bMV0seDIseTIseDMseTMsY2VsbHM9ZDNfZ2VvbV92b3Jvbm9pQ2VsbHMsaUNlbGw9Y2VsbHMubGVuZ3RoLGNlbGwsaUhhbGZFZGdlLGhhbGZFZGdlcyxuSGFsZkVkZ2VzLHN0YXJ0LGVuZDt3aGlsZShpQ2VsbC0tKSB7Y2VsbCA9IGNlbGxzW2lDZWxsXTtpZighY2VsbCB8fCAhY2VsbC5wcmVwYXJlKCkpY29udGludWU7aGFsZkVkZ2VzID0gY2VsbC5lZGdlcztuSGFsZkVkZ2VzID0gaGFsZkVkZ2VzLmxlbmd0aDtpSGFsZkVkZ2UgPSAwO3doaWxlKGlIYWxmRWRnZSA8IG5IYWxmRWRnZXMpIHtlbmQgPSBoYWxmRWRnZXNbaUhhbGZFZGdlXS5lbmQoKSx4MyA9IGVuZC54LHkzID0gZW5kLnk7c3RhcnQgPSBoYWxmRWRnZXNbKytpSGFsZkVkZ2UgJSBuSGFsZkVkZ2VzXS5zdGFydCgpLHgyID0gc3RhcnQueCx5MiA9IHN0YXJ0Lnk7aWYoYWJzKHgzIC0geDIpID4gzrUgfHwgYWJzKHkzIC0geTIpID4gzrUpe2hhbGZFZGdlcy5zcGxpY2UoaUhhbGZFZGdlLDAsbmV3IGQzX2dlb21fdm9yb25vaUhhbGZFZGdlKGQzX2dlb21fdm9yb25vaUNyZWF0ZUJvcmRlckVkZ2UoY2VsbC5zaXRlLGVuZCxhYnMoeDMgLSB4MCkgPCDOtSAmJiB5MSAtIHkzID4gzrU/e3g6eDAseTphYnMoeDIgLSB4MCkgPCDOtT95Mjp5MX06YWJzKHkzIC0geTEpIDwgzrUgJiYgeDEgLSB4MyA+IM61P3t4OmFicyh5MiAtIHkxKSA8IM61P3gyOngxLHk6eTF9OmFicyh4MyAtIHgxKSA8IM61ICYmIHkzIC0geTAgPiDOtT97eDp4MSx5OmFicyh4MiAtIHgxKSA8IM61P3kyOnkwfTphYnMoeTMgLSB5MCkgPCDOtSAmJiB4MyAtIHgwID4gzrU/e3g6YWJzKHkyIC0geTApIDwgzrU/eDI6eDAseTp5MH06bnVsbCksY2VsbC5zaXRlLG51bGwpKTsrK25IYWxmRWRnZXM7fX19fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUhhbGZFZGdlT3JkZXIoYSxiKXtyZXR1cm4gYi5hbmdsZSAtIGEuYW5nbGU7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNpcmNsZSgpe2QzX2dlb21fdm9yb25vaVJlZEJsYWNrTm9kZSh0aGlzKTt0aGlzLnggPSB0aGlzLnkgPSB0aGlzLmFyYyA9IHRoaXMuc2l0ZSA9IHRoaXMuY3kgPSBudWxsO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUoYXJjKXt2YXIgbEFyYz1hcmMuUCxyQXJjPWFyYy5OO2lmKCFsQXJjIHx8ICFyQXJjKXJldHVybjt2YXIgbFNpdGU9bEFyYy5zaXRlLGNTaXRlPWFyYy5zaXRlLHJTaXRlPXJBcmMuc2l0ZTtpZihsU2l0ZSA9PT0gclNpdGUpcmV0dXJuO3ZhciBieD1jU2l0ZS54LGJ5PWNTaXRlLnksYXg9bFNpdGUueCAtIGJ4LGF5PWxTaXRlLnkgLSBieSxjeD1yU2l0ZS54IC0gYngsY3k9clNpdGUueSAtIGJ5O3ZhciBkPTIgKiAoYXggKiBjeSAtIGF5ICogY3gpO2lmKGQgPj0gLc61MilyZXR1cm47dmFyIGhhPWF4ICogYXggKyBheSAqIGF5LGhjPWN4ICogY3ggKyBjeSAqIGN5LHg9KGN5ICogaGEgLSBheSAqIGhjKSAvIGQseT0oYXggKiBoYyAtIGN4ICogaGEpIC8gZCxjeT15ICsgYnk7dmFyIGNpcmNsZT1kM19nZW9tX3Zvcm9ub2lDaXJjbGVQb29sLnBvcCgpIHx8IG5ldyBkM19nZW9tX3Zvcm9ub2lDaXJjbGUoKTtjaXJjbGUuYXJjID0gYXJjO2NpcmNsZS5zaXRlID0gY1NpdGU7Y2lyY2xlLnggPSB4ICsgYng7Y2lyY2xlLnkgPSBjeSArIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtjaXJjbGUuY3kgPSBjeTthcmMuY2lyY2xlID0gY2lyY2xlO3ZhciBiZWZvcmU9bnVsbCxub2RlPWQzX2dlb21fdm9yb25vaUNpcmNsZXMuXzt3aGlsZShub2RlKSB7aWYoY2lyY2xlLnkgPCBub2RlLnkgfHwgY2lyY2xlLnkgPT09IG5vZGUueSAmJiBjaXJjbGUueCA8PSBub2RlLngpe2lmKG5vZGUuTClub2RlID0gbm9kZS5MO2Vsc2Uge2JlZm9yZSA9IG5vZGUuUDticmVhazt9fWVsc2Uge2lmKG5vZGUuUilub2RlID0gbm9kZS5SO2Vsc2Uge2JlZm9yZSA9IG5vZGU7YnJlYWs7fX19ZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcy5pbnNlcnQoYmVmb3JlLGNpcmNsZSk7aWYoIWJlZm9yZSlkM19nZW9tX3Zvcm9ub2lGaXJzdENpcmNsZSA9IGNpcmNsZTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xlKGFyYyl7dmFyIGNpcmNsZT1hcmMuY2lyY2xlO2lmKGNpcmNsZSl7aWYoIWNpcmNsZS5QKWQzX2dlb21fdm9yb25vaUZpcnN0Q2lyY2xlID0gY2lyY2xlLk47ZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcy5yZW1vdmUoY2lyY2xlKTtkM19nZW9tX3Zvcm9ub2lDaXJjbGVQb29sLnB1c2goY2lyY2xlKTtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja05vZGUoY2lyY2xlKTthcmMuY2lyY2xlID0gbnVsbDt9fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNsaXBFZGdlcyhleHRlbnQpe3ZhciBlZGdlcz1kM19nZW9tX3Zvcm9ub2lFZGdlcyxjbGlwPWQzX2dlb21fY2xpcExpbmUoZXh0ZW50WzBdWzBdLGV4dGVudFswXVsxXSxleHRlbnRbMV1bMF0sZXh0ZW50WzFdWzFdKSxpPWVkZ2VzLmxlbmd0aCxlO3doaWxlKGktLSkge2UgPSBlZGdlc1tpXTtpZighZDNfZ2VvbV92b3Jvbm9pQ29ubmVjdEVkZ2UoZSxleHRlbnQpIHx8ICFjbGlwKGUpIHx8IGFicyhlLmEueCAtIGUuYi54KSA8IM61ICYmIGFicyhlLmEueSAtIGUuYi55KSA8IM61KXtlLmEgPSBlLmIgPSBudWxsO2VkZ2VzLnNwbGljZShpLDEpO319fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNvbm5lY3RFZGdlKGVkZ2UsZXh0ZW50KXt2YXIgdmI9ZWRnZS5iO2lmKHZiKXJldHVybiB0cnVlO3ZhciB2YT1lZGdlLmEseDA9ZXh0ZW50WzBdWzBdLHgxPWV4dGVudFsxXVswXSx5MD1leHRlbnRbMF1bMV0seTE9ZXh0ZW50WzFdWzFdLGxTaXRlPWVkZ2UubCxyU2l0ZT1lZGdlLnIsbHg9bFNpdGUueCxseT1sU2l0ZS55LHJ4PXJTaXRlLngscnk9clNpdGUueSxmeD0obHggKyByeCkgLyAyLGZ5PShseSArIHJ5KSAvIDIsZm0sZmI7aWYocnkgPT09IGx5KXtpZihmeCA8IHgwIHx8IGZ4ID49IHgxKXJldHVybjtpZihseCA+IHJ4KXtpZighdmEpdmEgPSB7eDpmeCx5OnkwfTtlbHNlIGlmKHZhLnkgPj0geTEpcmV0dXJuO3ZiID0ge3g6ZngseTp5MX07fWVsc2Uge2lmKCF2YSl2YSA9IHt4OmZ4LHk6eTF9O2Vsc2UgaWYodmEueSA8IHkwKXJldHVybjt2YiA9IHt4OmZ4LHk6eTB9O319ZWxzZSB7Zm0gPSAobHggLSByeCkgLyAocnkgLSBseSk7ZmIgPSBmeSAtIGZtICogZng7aWYoZm0gPCAtMSB8fCBmbSA+IDEpe2lmKGx4ID4gcngpe2lmKCF2YSl2YSA9IHt4Oih5MCAtIGZiKSAvIGZtLHk6eTB9O2Vsc2UgaWYodmEueSA+PSB5MSlyZXR1cm47dmIgPSB7eDooeTEgLSBmYikgLyBmbSx5OnkxfTt9ZWxzZSB7aWYoIXZhKXZhID0ge3g6KHkxIC0gZmIpIC8gZm0seTp5MX07ZWxzZSBpZih2YS55IDwgeTApcmV0dXJuO3ZiID0ge3g6KHkwIC0gZmIpIC8gZm0seTp5MH07fX1lbHNlIHtpZihseSA8IHJ5KXtpZighdmEpdmEgPSB7eDp4MCx5OmZtICogeDAgKyBmYn07ZWxzZSBpZih2YS54ID49IHgxKXJldHVybjt2YiA9IHt4OngxLHk6Zm0gKiB4MSArIGZifTt9ZWxzZSB7aWYoIXZhKXZhID0ge3g6eDEseTpmbSAqIHgxICsgZmJ9O2Vsc2UgaWYodmEueCA8IHgwKXJldHVybjt2YiA9IHt4OngwLHk6Zm0gKiB4MCArIGZifTt9fX1lZGdlLmEgPSB2YTtlZGdlLmIgPSB2YjtyZXR1cm4gdHJ1ZTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pRWRnZShsU2l0ZSxyU2l0ZSl7dGhpcy5sID0gbFNpdGU7dGhpcy5yID0gclNpdGU7dGhpcy5hID0gdGhpcy5iID0gbnVsbDt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShsU2l0ZSxyU2l0ZSx2YSx2Yil7dmFyIGVkZ2U9bmV3IGQzX2dlb21fdm9yb25vaUVkZ2UobFNpdGUsclNpdGUpO2QzX2dlb21fdm9yb25vaUVkZ2VzLnB1c2goZWRnZSk7aWYodmEpZDNfZ2VvbV92b3Jvbm9pU2V0RWRnZUVuZChlZGdlLGxTaXRlLHJTaXRlLHZhKTtpZih2YilkM19nZW9tX3Zvcm9ub2lTZXRFZGdlRW5kKGVkZ2UsclNpdGUsbFNpdGUsdmIpO2QzX2dlb21fdm9yb25vaUNlbGxzW2xTaXRlLmldLmVkZ2VzLnB1c2gobmV3IGQzX2dlb21fdm9yb25vaUhhbGZFZGdlKGVkZ2UsbFNpdGUsclNpdGUpKTtkM19nZW9tX3Zvcm9ub2lDZWxsc1tyU2l0ZS5pXS5lZGdlcy5wdXNoKG5ldyBkM19nZW9tX3Zvcm9ub2lIYWxmRWRnZShlZGdlLHJTaXRlLGxTaXRlKSk7cmV0dXJuIGVkZ2U7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNyZWF0ZUJvcmRlckVkZ2UobFNpdGUsdmEsdmIpe3ZhciBlZGdlPW5ldyBkM19nZW9tX3Zvcm9ub2lFZGdlKGxTaXRlLG51bGwpO2VkZ2UuYSA9IHZhO2VkZ2UuYiA9IHZiO2QzX2dlb21fdm9yb25vaUVkZ2VzLnB1c2goZWRnZSk7cmV0dXJuIGVkZ2U7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVNldEVkZ2VFbmQoZWRnZSxsU2l0ZSxyU2l0ZSx2ZXJ0ZXgpe2lmKCFlZGdlLmEgJiYgIWVkZ2UuYil7ZWRnZS5hID0gdmVydGV4O2VkZ2UubCA9IGxTaXRlO2VkZ2UuciA9IHJTaXRlO31lbHNlIGlmKGVkZ2UubCA9PT0gclNpdGUpe2VkZ2UuYiA9IHZlcnRleDt9ZWxzZSB7ZWRnZS5hID0gdmVydGV4O319ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2UoZWRnZSxsU2l0ZSxyU2l0ZSl7dmFyIHZhPWVkZ2UuYSx2Yj1lZGdlLmI7dGhpcy5lZGdlID0gZWRnZTt0aGlzLnNpdGUgPSBsU2l0ZTt0aGlzLmFuZ2xlID0gclNpdGU/TWF0aC5hdGFuMihyU2l0ZS55IC0gbFNpdGUueSxyU2l0ZS54IC0gbFNpdGUueCk6ZWRnZS5sID09PSBsU2l0ZT9NYXRoLmF0YW4yKHZiLnggLSB2YS54LHZhLnkgLSB2Yi55KTpNYXRoLmF0YW4yKHZhLnggLSB2Yi54LHZiLnkgLSB2YS55KTt9ZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2UucHJvdG90eXBlID0ge3N0YXJ0OmZ1bmN0aW9uIHN0YXJ0KCl7cmV0dXJuIHRoaXMuZWRnZS5sID09PSB0aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmI7fSxlbmQ6ZnVuY3Rpb24gZW5kKCl7cmV0dXJuIHRoaXMuZWRnZS5sID09PSB0aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmE7fX07ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tUcmVlKCl7dGhpcy5fID0gbnVsbDt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKG5vZGUpe25vZGUuVSA9IG5vZGUuQyA9IG5vZGUuTCA9IG5vZGUuUiA9IG5vZGUuUCA9IG5vZGUuTiA9IG51bGw7fWQzX2dlb21fdm9yb25vaVJlZEJsYWNrVHJlZS5wcm90b3R5cGUgPSB7aW5zZXJ0OmZ1bmN0aW9uIGluc2VydChhZnRlcixub2RlKXt2YXIgcGFyZW50LGdyYW5kcGEsdW5jbGU7aWYoYWZ0ZXIpe25vZGUuUCA9IGFmdGVyO25vZGUuTiA9IGFmdGVyLk47aWYoYWZ0ZXIuTilhZnRlci5OLlAgPSBub2RlO2FmdGVyLk4gPSBub2RlO2lmKGFmdGVyLlIpe2FmdGVyID0gYWZ0ZXIuUjt3aGlsZShhZnRlci5MKSBhZnRlciA9IGFmdGVyLkw7YWZ0ZXIuTCA9IG5vZGU7fWVsc2Uge2FmdGVyLlIgPSBub2RlO31wYXJlbnQgPSBhZnRlcjt9ZWxzZSBpZih0aGlzLl8pe2FmdGVyID0gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tGaXJzdCh0aGlzLl8pO25vZGUuUCA9IG51bGw7bm9kZS5OID0gYWZ0ZXI7YWZ0ZXIuUCA9IGFmdGVyLkwgPSBub2RlO3BhcmVudCA9IGFmdGVyO31lbHNlIHtub2RlLlAgPSBub2RlLk4gPSBudWxsO3RoaXMuXyA9IG5vZGU7cGFyZW50ID0gbnVsbDt9bm9kZS5MID0gbm9kZS5SID0gbnVsbDtub2RlLlUgPSBwYXJlbnQ7bm9kZS5DID0gdHJ1ZTthZnRlciA9IG5vZGU7d2hpbGUocGFyZW50ICYmIHBhcmVudC5DKSB7Z3JhbmRwYSA9IHBhcmVudC5VO2lmKHBhcmVudCA9PT0gZ3JhbmRwYS5MKXt1bmNsZSA9IGdyYW5kcGEuUjtpZih1bmNsZSAmJiB1bmNsZS5DKXtwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTtncmFuZHBhLkMgPSB0cnVlO2FmdGVyID0gZ3JhbmRwYTt9ZWxzZSB7aWYoYWZ0ZXIgPT09IHBhcmVudC5SKXtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZUxlZnQodGhpcyxwYXJlbnQpO2FmdGVyID0gcGFyZW50O3BhcmVudCA9IGFmdGVyLlU7fXBhcmVudC5DID0gZmFsc2U7Z3JhbmRwYS5DID0gdHJ1ZTtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsZ3JhbmRwYSk7fX1lbHNlIHt1bmNsZSA9IGdyYW5kcGEuTDtpZih1bmNsZSAmJiB1bmNsZS5DKXtwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTtncmFuZHBhLkMgPSB0cnVlO2FmdGVyID0gZ3JhbmRwYTt9ZWxzZSB7aWYoYWZ0ZXIgPT09IHBhcmVudC5MKXtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMscGFyZW50KTthZnRlciA9IHBhcmVudDtwYXJlbnQgPSBhZnRlci5VO31wYXJlbnQuQyA9IGZhbHNlO2dyYW5kcGEuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsZ3JhbmRwYSk7fX1wYXJlbnQgPSBhZnRlci5VO310aGlzLl8uQyA9IGZhbHNlO30scmVtb3ZlOmZ1bmN0aW9uIHJlbW92ZShub2RlKXtpZihub2RlLk4pbm9kZS5OLlAgPSBub2RlLlA7aWYobm9kZS5QKW5vZGUuUC5OID0gbm9kZS5OO25vZGUuTiA9IG5vZGUuUCA9IG51bGw7dmFyIHBhcmVudD1ub2RlLlUsc2libGluZyxsZWZ0PW5vZGUuTCxyaWdodD1ub2RlLlIsbmV4dCxyZWQ7aWYoIWxlZnQpbmV4dCA9IHJpZ2h0O2Vsc2UgaWYoIXJpZ2h0KW5leHQgPSBsZWZ0O2Vsc2UgbmV4dCA9IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrRmlyc3QocmlnaHQpO2lmKHBhcmVudCl7aWYocGFyZW50LkwgPT09IG5vZGUpcGFyZW50LkwgPSBuZXh0O2Vsc2UgcGFyZW50LlIgPSBuZXh0O31lbHNlIHt0aGlzLl8gPSBuZXh0O31pZihsZWZ0ICYmIHJpZ2h0KXtyZWQgPSBuZXh0LkM7bmV4dC5DID0gbm9kZS5DO25leHQuTCA9IGxlZnQ7bGVmdC5VID0gbmV4dDtpZihuZXh0ICE9PSByaWdodCl7cGFyZW50ID0gbmV4dC5VO25leHQuVSA9IG5vZGUuVTtub2RlID0gbmV4dC5SO3BhcmVudC5MID0gbm9kZTtuZXh0LlIgPSByaWdodDtyaWdodC5VID0gbmV4dDt9ZWxzZSB7bmV4dC5VID0gcGFyZW50O3BhcmVudCA9IG5leHQ7bm9kZSA9IG5leHQuUjt9fWVsc2Uge3JlZCA9IG5vZGUuQztub2RlID0gbmV4dDt9aWYobm9kZSlub2RlLlUgPSBwYXJlbnQ7aWYocmVkKXJldHVybjtpZihub2RlICYmIG5vZGUuQyl7bm9kZS5DID0gZmFsc2U7cmV0dXJuO31kbyB7aWYobm9kZSA9PT0gdGhpcy5fKWJyZWFrO2lmKG5vZGUgPT09IHBhcmVudC5MKXtzaWJsaW5nID0gcGFyZW50LlI7aWYoc2libGluZy5DKXtzaWJsaW5nLkMgPSBmYWxzZTtwYXJlbnQuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMscGFyZW50KTtzaWJsaW5nID0gcGFyZW50LlI7fWlmKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQyB8fCBzaWJsaW5nLlIgJiYgc2libGluZy5SLkMpe2lmKCFzaWJsaW5nLlIgfHwgIXNpYmxpbmcuUi5DKXtzaWJsaW5nLkwuQyA9IGZhbHNlO3NpYmxpbmcuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLHNpYmxpbmcpO3NpYmxpbmcgPSBwYXJlbnQuUjt9c2libGluZy5DID0gcGFyZW50LkM7cGFyZW50LkMgPSBzaWJsaW5nLlIuQyA9IGZhbHNlO2QzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLHBhcmVudCk7bm9kZSA9IHRoaXMuXzticmVhazt9fWVsc2Uge3NpYmxpbmcgPSBwYXJlbnQuTDtpZihzaWJsaW5nLkMpe3NpYmxpbmcuQyA9IGZhbHNlO3BhcmVudC5DID0gdHJ1ZTtkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMscGFyZW50KTtzaWJsaW5nID0gcGFyZW50Lkw7fWlmKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQyB8fCBzaWJsaW5nLlIgJiYgc2libGluZy5SLkMpe2lmKCFzaWJsaW5nLkwgfHwgIXNpYmxpbmcuTC5DKXtzaWJsaW5nLlIuQyA9IGZhbHNlO3NpYmxpbmcuQyA9IHRydWU7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsc2libGluZyk7c2libGluZyA9IHBhcmVudC5MO31zaWJsaW5nLkMgPSBwYXJlbnQuQztwYXJlbnQuQyA9IHNpYmxpbmcuTC5DID0gZmFsc2U7ZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLHBhcmVudCk7bm9kZSA9IHRoaXMuXzticmVhazt9fXNpYmxpbmcuQyA9IHRydWU7bm9kZSA9IHBhcmVudDtwYXJlbnQgPSBwYXJlbnQuVTt9d2hpbGUoIW5vZGUuQyk7aWYobm9kZSlub2RlLkMgPSBmYWxzZTt9fTtmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZUxlZnQodHJlZSxub2RlKXt2YXIgcD1ub2RlLHE9bm9kZS5SLHBhcmVudD1wLlU7aWYocGFyZW50KXtpZihwYXJlbnQuTCA9PT0gcClwYXJlbnQuTCA9IHE7ZWxzZSBwYXJlbnQuUiA9IHE7fWVsc2Uge3RyZWUuXyA9IHE7fXEuVSA9IHBhcmVudDtwLlUgPSBxO3AuUiA9IHEuTDtpZihwLlIpcC5SLlUgPSBwO3EuTCA9IHA7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlUmlnaHQodHJlZSxub2RlKXt2YXIgcD1ub2RlLHE9bm9kZS5MLHBhcmVudD1wLlU7aWYocGFyZW50KXtpZihwYXJlbnQuTCA9PT0gcClwYXJlbnQuTCA9IHE7ZWxzZSBwYXJlbnQuUiA9IHE7fWVsc2Uge3RyZWUuXyA9IHE7fXEuVSA9IHBhcmVudDtwLlUgPSBxO3AuTCA9IHEuUjtpZihwLkwpcC5MLlUgPSBwO3EuUiA9IHA7fWZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrRmlyc3Qobm9kZSl7d2hpbGUobm9kZS5MKSBub2RlID0gbm9kZS5MO3JldHVybiBub2RlO31mdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2koc2l0ZXMsYmJveCl7dmFyIHNpdGU9c2l0ZXMuc29ydChkM19nZW9tX3Zvcm9ub2lWZXJ0ZXhPcmRlcikucG9wKCkseDAseTAsY2lyY2xlO2QzX2dlb21fdm9yb25vaUVkZ2VzID0gW107ZDNfZ2VvbV92b3Jvbm9pQ2VsbHMgPSBuZXcgQXJyYXkoc2l0ZXMubGVuZ3RoKTtkM19nZW9tX3Zvcm9ub2lCZWFjaGVzID0gbmV3IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrVHJlZSgpO2QzX2dlb21fdm9yb25vaUNpcmNsZXMgPSBuZXcgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tUcmVlKCk7d2hpbGUodHJ1ZSkge2NpcmNsZSA9IGQzX2dlb21fdm9yb25vaUZpcnN0Q2lyY2xlO2lmKHNpdGUgJiYgKCFjaXJjbGUgfHwgc2l0ZS55IDwgY2lyY2xlLnkgfHwgc2l0ZS55ID09PSBjaXJjbGUueSAmJiBzaXRlLnggPCBjaXJjbGUueCkpe2lmKHNpdGUueCAhPT0geDAgfHwgc2l0ZS55ICE9PSB5MCl7ZDNfZ2VvbV92b3Jvbm9pQ2VsbHNbc2l0ZS5pXSA9IG5ldyBkM19nZW9tX3Zvcm9ub2lDZWxsKHNpdGUpO2QzX2dlb21fdm9yb25vaUFkZEJlYWNoKHNpdGUpO3gwID0gc2l0ZS54LHkwID0gc2l0ZS55O31zaXRlID0gc2l0ZXMucG9wKCk7fWVsc2UgaWYoY2lyY2xlKXtkM19nZW9tX3Zvcm9ub2lSZW1vdmVCZWFjaChjaXJjbGUuYXJjKTt9ZWxzZSB7YnJlYWs7fX1pZihiYm94KWQzX2dlb21fdm9yb25vaUNsaXBFZGdlcyhiYm94KSxkM19nZW9tX3Zvcm9ub2lDbG9zZUNlbGxzKGJib3gpO3ZhciBkaWFncmFtPXtjZWxsczpkM19nZW9tX3Zvcm9ub2lDZWxscyxlZGdlczpkM19nZW9tX3Zvcm9ub2lFZGdlc307ZDNfZ2VvbV92b3Jvbm9pQmVhY2hlcyA9IGQzX2dlb21fdm9yb25vaUNpcmNsZXMgPSBkM19nZW9tX3Zvcm9ub2lFZGdlcyA9IGQzX2dlb21fdm9yb25vaUNlbGxzID0gbnVsbDtyZXR1cm4gZGlhZ3JhbTt9ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pVmVydGV4T3JkZXIoYSxiKXtyZXR1cm4gYi55IC0gYS55IHx8IGIueCAtIGEueDt9ZDMuZ2VvbS52b3Jvbm9pID0gZnVuY3Rpb24ocG9pbnRzKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZLGZ4PXgsZnk9eSxjbGlwRXh0ZW50PWQzX2dlb21fdm9yb25vaUNsaXBFeHRlbnQ7aWYocG9pbnRzKXJldHVybiB2b3Jvbm9pKHBvaW50cyk7ZnVuY3Rpb24gdm9yb25vaShkYXRhKXt2YXIgcG9seWdvbnM9bmV3IEFycmF5KGRhdGEubGVuZ3RoKSx4MD1jbGlwRXh0ZW50WzBdWzBdLHkwPWNsaXBFeHRlbnRbMF1bMV0seDE9Y2xpcEV4dGVudFsxXVswXSx5MT1jbGlwRXh0ZW50WzFdWzFdO2QzX2dlb21fdm9yb25vaShzaXRlcyhkYXRhKSxjbGlwRXh0ZW50KS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwsaSl7dmFyIGVkZ2VzPWNlbGwuZWRnZXMsc2l0ZT1jZWxsLnNpdGUscG9seWdvbj1wb2x5Z29uc1tpXSA9IGVkZ2VzLmxlbmd0aD9lZGdlcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHM9ZS5zdGFydCgpO3JldHVybiBbcy54LHMueV07fSk6c2l0ZS54ID49IHgwICYmIHNpdGUueCA8PSB4MSAmJiBzaXRlLnkgPj0geTAgJiYgc2l0ZS55IDw9IHkxP1tbeDAseTFdLFt4MSx5MV0sW3gxLHkwXSxbeDAseTBdXTpbXTtwb2x5Z29uLnBvaW50ID0gZGF0YVtpXTt9KTtyZXR1cm4gcG9seWdvbnM7fWZ1bmN0aW9uIHNpdGVzKGRhdGEpe3JldHVybiBkYXRhLm1hcChmdW5jdGlvbihkLGkpe3JldHVybiB7eDpNYXRoLnJvdW5kKGZ4KGQsaSkgLyDOtSkgKiDOtSx5Ok1hdGgucm91bmQoZnkoZCxpKSAvIM61KSAqIM61LGk6aX07fSk7fXZvcm9ub2kubGlua3MgPSBmdW5jdGlvbihkYXRhKXtyZXR1cm4gZDNfZ2VvbV92b3Jvbm9pKHNpdGVzKGRhdGEpKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZWRnZSl7cmV0dXJuIGVkZ2UubCAmJiBlZGdlLnI7fSkubWFwKGZ1bmN0aW9uKGVkZ2Upe3JldHVybiB7c291cmNlOmRhdGFbZWRnZS5sLmldLHRhcmdldDpkYXRhW2VkZ2Uuci5pXX07fSk7fTt2b3Jvbm9pLnRyaWFuZ2xlcyA9IGZ1bmN0aW9uKGRhdGEpe3ZhciB0cmlhbmdsZXM9W107ZDNfZ2VvbV92b3Jvbm9pKHNpdGVzKGRhdGEpKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwsaSl7dmFyIHNpdGU9Y2VsbC5zaXRlLGVkZ2VzPWNlbGwuZWRnZXMuc29ydChkM19nZW9tX3Zvcm9ub2lIYWxmRWRnZU9yZGVyKSxqPS0xLG09ZWRnZXMubGVuZ3RoLGUwLHMwLGUxPWVkZ2VzW20gLSAxXS5lZGdlLHMxPWUxLmwgPT09IHNpdGU/ZTEucjplMS5sO3doaWxlKCsraiA8IG0pIHtlMCA9IGUxO3MwID0gczE7ZTEgPSBlZGdlc1tqXS5lZGdlO3MxID0gZTEubCA9PT0gc2l0ZT9lMS5yOmUxLmw7aWYoaSA8IHMwLmkgJiYgaSA8IHMxLmkgJiYgZDNfZ2VvbV92b3Jvbm9pVHJpYW5nbGVBcmVhKHNpdGUsczAsczEpIDwgMCl7dHJpYW5nbGVzLnB1c2goW2RhdGFbaV0sZGF0YVtzMC5pXSxkYXRhW3MxLmldXSk7fX19KTtyZXR1cm4gdHJpYW5nbGVzO307dm9yb25vaS54ID0gZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZ4ID0gZDNfZnVuY3Rvcih4ID0gXyksdm9yb25vaSk6eDt9O3Zvcm9ub2kueSA9IGZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmeSA9IGQzX2Z1bmN0b3IoeSA9IF8pLHZvcm9ub2kpOnk7fTt2b3Jvbm9pLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2xpcEV4dGVudCA9PT0gZDNfZ2VvbV92b3Jvbm9pQ2xpcEV4dGVudD9udWxsOmNsaXBFeHRlbnQ7Y2xpcEV4dGVudCA9IF8gPT0gbnVsbD9kM19nZW9tX3Zvcm9ub2lDbGlwRXh0ZW50Ol87cmV0dXJuIHZvcm9ub2k7fTt2b3Jvbm9pLnNpemUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY2xpcEV4dGVudCA9PT0gZDNfZ2VvbV92b3Jvbm9pQ2xpcEV4dGVudD9udWxsOmNsaXBFeHRlbnQgJiYgY2xpcEV4dGVudFsxXTtyZXR1cm4gdm9yb25vaS5jbGlwRXh0ZW50KF8gJiYgW1swLDBdLF9dKTt9O3JldHVybiB2b3Jvbm9pO307dmFyIGQzX2dlb21fdm9yb25vaUNsaXBFeHRlbnQ9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pVHJpYW5nbGVBcmVhKGEsYixjKXtyZXR1cm4gKGEueCAtIGMueCkgKiAoYi55IC0gYS55KSAtIChhLnggLSBiLngpICogKGMueSAtIGEueSk7fWQzLmdlb20uZGVsYXVuYXkgPSBmdW5jdGlvbih2ZXJ0aWNlcyl7cmV0dXJuIGQzLmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyh2ZXJ0aWNlcyk7fTtkMy5nZW9tLnF1YWR0cmVlID0gZnVuY3Rpb24ocG9pbnRzLHgxLHkxLHgyLHkyKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZLGNvbXBhdDtpZihjb21wYXQgPSBhcmd1bWVudHMubGVuZ3RoKXt4ID0gZDNfZ2VvbV9xdWFkdHJlZUNvbXBhdFg7eSA9IGQzX2dlb21fcXVhZHRyZWVDb21wYXRZO2lmKGNvbXBhdCA9PT0gMyl7eTIgPSB5MTt4MiA9IHgxO3kxID0geDEgPSAwO31yZXR1cm4gcXVhZHRyZWUocG9pbnRzKTt9ZnVuY3Rpb24gcXVhZHRyZWUoZGF0YSl7dmFyIGQsZng9ZDNfZnVuY3Rvcih4KSxmeT1kM19mdW5jdG9yKHkpLHhzLHlzLGksbix4MV8seTFfLHgyXyx5Ml87aWYoeDEgIT0gbnVsbCl7eDFfID0geDEseTFfID0geTEseDJfID0geDIseTJfID0geTI7fWVsc2Uge3gyXyA9IHkyXyA9IC0oeDFfID0geTFfID0gSW5maW5pdHkpO3hzID0gW10seXMgPSBbXTtuID0gZGF0YS5sZW5ndGg7aWYoY29tcGF0KWZvcihpID0gMDtpIDwgbjsrK2kpIHtkID0gZGF0YVtpXTtpZihkLnggPCB4MV8peDFfID0gZC54O2lmKGQueSA8IHkxXyl5MV8gPSBkLnk7aWYoZC54ID4geDJfKXgyXyA9IGQueDtpZihkLnkgPiB5Ml8peTJfID0gZC55O3hzLnB1c2goZC54KTt5cy5wdXNoKGQueSk7fWVsc2UgZm9yKGkgPSAwO2kgPCBuOysraSkge3ZhciB4Xz0rZngoZCA9IGRhdGFbaV0saSkseV89K2Z5KGQsaSk7aWYoeF8gPCB4MV8peDFfID0geF87aWYoeV8gPCB5MV8peTFfID0geV87aWYoeF8gPiB4Ml8peDJfID0geF87aWYoeV8gPiB5Ml8peTJfID0geV87eHMucHVzaCh4Xyk7eXMucHVzaCh5Xyk7fX12YXIgZHg9eDJfIC0geDFfLGR5PXkyXyAtIHkxXztpZihkeCA+IGR5KXkyXyA9IHkxXyArIGR4O2Vsc2UgeDJfID0geDFfICsgZHk7ZnVuY3Rpb24gaW5zZXJ0KG4sZCx4LHkseDEseTEseDIseTIpe2lmKGlzTmFOKHgpIHx8IGlzTmFOKHkpKXJldHVybjtpZihuLmxlYWYpe3ZhciBueD1uLngsbnk9bi55O2lmKG54ICE9IG51bGwpe2lmKGFicyhueCAtIHgpICsgYWJzKG55IC0geSkgPCAuMDEpe2luc2VydENoaWxkKG4sZCx4LHkseDEseTEseDIseTIpO31lbHNlIHt2YXIgblBvaW50PW4ucG9pbnQ7bi54ID0gbi55ID0gbi5wb2ludCA9IG51bGw7aW5zZXJ0Q2hpbGQobixuUG9pbnQsbngsbnkseDEseTEseDIseTIpO2luc2VydENoaWxkKG4sZCx4LHkseDEseTEseDIseTIpO319ZWxzZSB7bi54ID0geCxuLnkgPSB5LG4ucG9pbnQgPSBkO319ZWxzZSB7aW5zZXJ0Q2hpbGQobixkLHgseSx4MSx5MSx4Mix5Mik7fX1mdW5jdGlvbiBpbnNlcnRDaGlsZChuLGQseCx5LHgxLHkxLHgyLHkyKXt2YXIgeG09KHgxICsgeDIpICogLjUseW09KHkxICsgeTIpICogLjUscmlnaHQ9eCA+PSB4bSxiZWxvdz15ID49IHltLGk9YmVsb3cgPDwgMSB8IHJpZ2h0O24ubGVhZiA9IGZhbHNlO24gPSBuLm5vZGVzW2ldIHx8IChuLm5vZGVzW2ldID0gZDNfZ2VvbV9xdWFkdHJlZU5vZGUoKSk7aWYocmlnaHQpeDEgPSB4bTtlbHNlIHgyID0geG07aWYoYmVsb3cpeTEgPSB5bTtlbHNlIHkyID0geW07aW5zZXJ0KG4sZCx4LHkseDEseTEseDIseTIpO312YXIgcm9vdD1kM19nZW9tX3F1YWR0cmVlTm9kZSgpO3Jvb3QuYWRkID0gZnVuY3Rpb24oZCl7aW5zZXJ0KHJvb3QsZCwrZngoZCwrK2kpLCtmeShkLGkpLHgxXyx5MV8seDJfLHkyXyk7fTtyb290LnZpc2l0ID0gZnVuY3Rpb24oZil7ZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYscm9vdCx4MV8seTFfLHgyXyx5Ml8pO307cm9vdC5maW5kID0gZnVuY3Rpb24ocG9pbnQpe3JldHVybiBkM19nZW9tX3F1YWR0cmVlRmluZChyb290LHBvaW50WzBdLHBvaW50WzFdLHgxXyx5MV8seDJfLHkyXyk7fTtpID0gLTE7aWYoeDEgPT0gbnVsbCl7d2hpbGUoKytpIDwgbikge2luc2VydChyb290LGRhdGFbaV0seHNbaV0seXNbaV0seDFfLHkxXyx4Ml8seTJfKTt9LS1pO31lbHNlIGRhdGEuZm9yRWFjaChyb290LmFkZCk7eHMgPSB5cyA9IGRhdGEgPSBkID0gbnVsbDtyZXR1cm4gcm9vdDt9cXVhZHRyZWUueCA9IGZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4ID0gXyxxdWFkdHJlZSk6eDt9O3F1YWR0cmVlLnkgPSBmdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeSA9IF8scXVhZHRyZWUpOnk7fTtxdWFkdHJlZS5leHRlbnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDEgPT0gbnVsbD9udWxsOltbeDEseTFdLFt4Mix5Ml1dO2lmKF8gPT0gbnVsbCl4MSA9IHkxID0geDIgPSB5MiA9IG51bGw7ZWxzZSB4MSA9ICtfWzBdWzBdLHkxID0gK19bMF1bMV0seDIgPSArX1sxXVswXSx5MiA9ICtfWzFdWzFdO3JldHVybiBxdWFkdHJlZTt9O3F1YWR0cmVlLnNpemUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDEgPT0gbnVsbD9udWxsOlt4MiAtIHgxLHkyIC0geTFdO2lmKF8gPT0gbnVsbCl4MSA9IHkxID0geDIgPSB5MiA9IG51bGw7ZWxzZSB4MSA9IHkxID0gMCx4MiA9ICtfWzBdLHkyID0gK19bMV07cmV0dXJuIHF1YWR0cmVlO307cmV0dXJuIHF1YWR0cmVlO307ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZUNvbXBhdFgoZCl7cmV0dXJuIGQueDt9ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZUNvbXBhdFkoZCl7cmV0dXJuIGQueTt9ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZU5vZGUoKXtyZXR1cm4ge2xlYWY6dHJ1ZSxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGx9O31mdW5jdGlvbiBkM19nZW9tX3F1YWR0cmVlVmlzaXQoZixub2RlLHgxLHkxLHgyLHkyKXtpZighZihub2RlLHgxLHkxLHgyLHkyKSl7dmFyIHN4PSh4MSArIHgyKSAqIC41LHN5PSh5MSArIHkyKSAqIC41LGNoaWxkcmVuPW5vZGUubm9kZXM7aWYoY2hpbGRyZW5bMF0pZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYsY2hpbGRyZW5bMF0seDEseTEsc3gsc3kpO2lmKGNoaWxkcmVuWzFdKWQzX2dlb21fcXVhZHRyZWVWaXNpdChmLGNoaWxkcmVuWzFdLHN4LHkxLHgyLHN5KTtpZihjaGlsZHJlblsyXSlkM19nZW9tX3F1YWR0cmVlVmlzaXQoZixjaGlsZHJlblsyXSx4MSxzeSxzeCx5Mik7aWYoY2hpbGRyZW5bM10pZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYsY2hpbGRyZW5bM10sc3gsc3kseDIseTIpO319ZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZUZpbmQocm9vdCx4LHkseDAseTAseDMseTMpe3ZhciBtaW5EaXN0YW5jZTI9SW5maW5pdHksY2xvc2VzdFBvaW50OyhmdW5jdGlvbiBmaW5kKG5vZGUseDEseTEseDIseTIpe2lmKHgxID4geDMgfHwgeTEgPiB5MyB8fCB4MiA8IHgwIHx8IHkyIDwgeTApcmV0dXJuO2lmKHBvaW50ID0gbm9kZS5wb2ludCl7dmFyIHBvaW50LGR4PXggLSBub2RlLngsZHk9eSAtIG5vZGUueSxkaXN0YW5jZTI9ZHggKiBkeCArIGR5ICogZHk7aWYoZGlzdGFuY2UyIDwgbWluRGlzdGFuY2UyKXt2YXIgZGlzdGFuY2U9TWF0aC5zcXJ0KG1pbkRpc3RhbmNlMiA9IGRpc3RhbmNlMik7eDAgPSB4IC0gZGlzdGFuY2UseTAgPSB5IC0gZGlzdGFuY2U7eDMgPSB4ICsgZGlzdGFuY2UseTMgPSB5ICsgZGlzdGFuY2U7Y2xvc2VzdFBvaW50ID0gcG9pbnQ7fX12YXIgY2hpbGRyZW49bm9kZS5ub2Rlcyx4bT0oeDEgKyB4MikgKiAuNSx5bT0oeTEgKyB5MikgKiAuNSxyaWdodD14ID49IHhtLGJlbG93PXkgPj0geW07Zm9yKHZhciBpPWJlbG93IDw8IDEgfCByaWdodCxqPWkgKyA0O2kgPCBqOysraSkge2lmKG5vZGUgPSBjaGlsZHJlbltpICYgM10pc3dpdGNoKGkgJiAzKXtjYXNlIDA6ZmluZChub2RlLHgxLHkxLHhtLHltKTticmVhaztjYXNlIDE6ZmluZChub2RlLHhtLHkxLHgyLHltKTticmVhaztjYXNlIDI6ZmluZChub2RlLHgxLHltLHhtLHkyKTticmVhaztjYXNlIDM6ZmluZChub2RlLHhtLHltLHgyLHkyKTticmVhazt9fX0pKHJvb3QseDAseTAseDMseTMpO3JldHVybiBjbG9zZXN0UG9pbnQ7fWQzLmludGVycG9sYXRlUmdiID0gZDNfaW50ZXJwb2xhdGVSZ2I7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVSZ2IoYSxiKXthID0gZDMucmdiKGEpO2IgPSBkMy5yZ2IoYik7dmFyIGFyPWEucixhZz1hLmcsYWI9YS5iLGJyPWIuciAtIGFyLGJnPWIuZyAtIGFnLGJiPWIuYiAtIGFiO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXCIjXCIgKyBkM19yZ2JfaGV4KE1hdGgucm91bmQoYXIgKyBiciAqIHQpKSArIGQzX3JnYl9oZXgoTWF0aC5yb3VuZChhZyArIGJnICogdCkpICsgZDNfcmdiX2hleChNYXRoLnJvdW5kKGFiICsgYmIgKiB0KSk7fTt9ZDMuaW50ZXJwb2xhdGVPYmplY3QgPSBkM19pbnRlcnBvbGF0ZU9iamVjdDtmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZU9iamVjdChhLGIpe3ZhciBpPXt9LGM9e30saztmb3IoayBpbiBhKSB7aWYoayBpbiBiKXtpW2tdID0gZDNfaW50ZXJwb2xhdGUoYVtrXSxiW2tdKTt9ZWxzZSB7Y1trXSA9IGFba107fX1mb3IoayBpbiBiKSB7aWYoIShrIGluIGEpKXtjW2tdID0gYltrXTt9fXJldHVybiBmdW5jdGlvbih0KXtmb3IoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtyZXR1cm4gYzt9O31kMy5pbnRlcnBvbGF0ZU51bWJlciA9IGQzX2ludGVycG9sYXRlTnVtYmVyO2Z1bmN0aW9uIGQzX2ludGVycG9sYXRlTnVtYmVyKGEsYil7YSA9ICthLGIgPSArYjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7fTt9ZDMuaW50ZXJwb2xhdGVTdHJpbmcgPSBkM19pbnRlcnBvbGF0ZVN0cmluZztmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZVN0cmluZyhhLGIpe3ZhciBiaT1kM19pbnRlcnBvbGF0ZV9udW1iZXJBLmxhc3RJbmRleCA9IGQzX2ludGVycG9sYXRlX251bWJlckIubGFzdEluZGV4ID0gMCxhbSxibSxicyxpPS0xLHM9W10scT1bXTthID0gYSArIFwiXCIsYiA9IGIgKyBcIlwiO3doaWxlKChhbSA9IGQzX2ludGVycG9sYXRlX251bWJlckEuZXhlYyhhKSkgJiYgKGJtID0gZDNfaW50ZXJwb2xhdGVfbnVtYmVyQi5leGVjKGIpKSkge2lmKChicyA9IGJtLmluZGV4KSA+IGJpKXticyA9IGIuc2xpY2UoYmksYnMpO2lmKHNbaV0pc1tpXSArPSBicztlbHNlIHNbKytpXSA9IGJzO31pZigoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSl7aWYoc1tpXSlzW2ldICs9IGJtO2Vsc2Ugc1srK2ldID0gYm07fWVsc2Uge3NbKytpXSA9IG51bGw7cS5wdXNoKHtpOmkseDpkM19pbnRlcnBvbGF0ZU51bWJlcihhbSxibSl9KTt9YmkgPSBkM19pbnRlcnBvbGF0ZV9udW1iZXJCLmxhc3RJbmRleDt9aWYoYmkgPCBiLmxlbmd0aCl7YnMgPSBiLnNsaWNlKGJpKTtpZihzW2ldKXNbaV0gKz0gYnM7ZWxzZSBzWysraV0gPSBiczt9cmV0dXJuIHMubGVuZ3RoIDwgMj9xWzBdPyhiID0gcVswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBiKHQpICsgXCJcIjt9KTpmdW5jdGlvbigpe3JldHVybiBiO306KGIgPSBxLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxvO2kgPCBiOysraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO3JldHVybiBzLmpvaW4oXCJcIik7fSk7fXZhciBkM19pbnRlcnBvbGF0ZV9udW1iZXJBPS9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxkM19pbnRlcnBvbGF0ZV9udW1iZXJCPW5ldyBSZWdFeHAoZDNfaW50ZXJwb2xhdGVfbnVtYmVyQS5zb3VyY2UsXCJnXCIpO2QzLmludGVycG9sYXRlID0gZDNfaW50ZXJwb2xhdGU7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGUoYSxiKXt2YXIgaT1kMy5pbnRlcnBvbGF0b3JzLmxlbmd0aCxmO3doaWxlKC0taSA+PSAwICYmICEoZiA9IGQzLmludGVycG9sYXRvcnNbaV0oYSxiKSkpO3JldHVybiBmO31kMy5pbnRlcnBvbGF0b3JzID0gW2Z1bmN0aW9uKGEsYil7dmFyIHQ9dHlwZW9mIGI7cmV0dXJuICh0ID09PSBcInN0cmluZ1wiP2QzX3JnYl9uYW1lcy5oYXMoYi50b0xvd2VyQ2FzZSgpKSB8fCAvXigjfHJnYlxcKHxoc2xcXCgpL2kudGVzdChiKT9kM19pbnRlcnBvbGF0ZVJnYjpkM19pbnRlcnBvbGF0ZVN0cmluZzpiIGluc3RhbmNlb2YgZDNfY29sb3I/ZDNfaW50ZXJwb2xhdGVSZ2I6QXJyYXkuaXNBcnJheShiKT9kM19pbnRlcnBvbGF0ZUFycmF5OnQgPT09IFwib2JqZWN0XCIgJiYgaXNOYU4oYik/ZDNfaW50ZXJwb2xhdGVPYmplY3Q6ZDNfaW50ZXJwb2xhdGVOdW1iZXIpKGEsYik7fV07ZDMuaW50ZXJwb2xhdGVBcnJheSA9IGQzX2ludGVycG9sYXRlQXJyYXk7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVBcnJheShhLGIpe3ZhciB4PVtdLGM9W10sbmE9YS5sZW5ndGgsbmI9Yi5sZW5ndGgsbjA9TWF0aC5taW4oYS5sZW5ndGgsYi5sZW5ndGgpLGk7Zm9yKGkgPSAwO2kgPCBuMDsrK2kpIHgucHVzaChkM19pbnRlcnBvbGF0ZShhW2ldLGJbaV0pKTtmb3IoO2kgPCBuYTsrK2kpIGNbaV0gPSBhW2ldO2Zvcig7aSA8IG5iOysraSkgY1tpXSA9IGJbaV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihpID0gMDtpIDwgbjA7KytpKSBjW2ldID0geFtpXSh0KTtyZXR1cm4gYzt9O312YXIgZDNfZWFzZV9kZWZhdWx0PWZ1bmN0aW9uIGQzX2Vhc2VfZGVmYXVsdCgpe3JldHVybiBkM19pZGVudGl0eTt9O3ZhciBkM19lYXNlPWQzLm1hcCh7bGluZWFyOmQzX2Vhc2VfZGVmYXVsdCxwb2x5OmQzX2Vhc2VfcG9seSxxdWFkOmZ1bmN0aW9uIHF1YWQoKXtyZXR1cm4gZDNfZWFzZV9xdWFkO30sY3ViaWM6ZnVuY3Rpb24gY3ViaWMoKXtyZXR1cm4gZDNfZWFzZV9jdWJpYzt9LHNpbjpmdW5jdGlvbiBzaW4oKXtyZXR1cm4gZDNfZWFzZV9zaW47fSxleHA6ZnVuY3Rpb24gZXhwKCl7cmV0dXJuIGQzX2Vhc2VfZXhwO30sY2lyY2xlOmZ1bmN0aW9uIGNpcmNsZSgpe3JldHVybiBkM19lYXNlX2NpcmNsZTt9LGVsYXN0aWM6ZDNfZWFzZV9lbGFzdGljLGJhY2s6ZDNfZWFzZV9iYWNrLGJvdW5jZTpmdW5jdGlvbiBib3VuY2UoKXtyZXR1cm4gZDNfZWFzZV9ib3VuY2U7fX0pO3ZhciBkM19lYXNlX21vZGU9ZDMubWFwKHtcImluXCI6ZDNfaWRlbnRpdHksb3V0OmQzX2Vhc2VfcmV2ZXJzZSxcImluLW91dFwiOmQzX2Vhc2VfcmVmbGVjdCxcIm91dC1pblwiOmZ1bmN0aW9uIG91dEluKGYpe3JldHVybiBkM19lYXNlX3JlZmxlY3QoZDNfZWFzZV9yZXZlcnNlKGYpKTt9fSk7ZDMuZWFzZSA9IGZ1bmN0aW9uKG5hbWUpe3ZhciBpPW5hbWUuaW5kZXhPZihcIi1cIiksdD1pID49IDA/bmFtZS5zbGljZSgwLGkpOm5hbWUsbT1pID49IDA/bmFtZS5zbGljZShpICsgMSk6XCJpblwiO3QgPSBkM19lYXNlLmdldCh0KSB8fCBkM19lYXNlX2RlZmF1bHQ7bSA9IGQzX2Vhc2VfbW9kZS5nZXQobSkgfHwgZDNfaWRlbnRpdHk7cmV0dXJuIGQzX2Vhc2VfY2xhbXAobSh0LmFwcGx5KG51bGwsZDNfYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywxKSkpKTt9O2Z1bmN0aW9uIGQzX2Vhc2VfY2xhbXAoZil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0IDw9IDA/MDp0ID49IDE/MTpmKHQpO307fWZ1bmN0aW9uIGQzX2Vhc2VfcmV2ZXJzZShmKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEgLSBmKDEgLSB0KTt9O31mdW5jdGlvbiBkM19lYXNlX3JlZmxlY3QoZil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAuNSAqICh0IDwgLjU/ZigyICogdCk6MiAtIGYoMiAtIDIgKiB0KSk7fTt9ZnVuY3Rpb24gZDNfZWFzZV9xdWFkKHQpe3JldHVybiB0ICogdDt9ZnVuY3Rpb24gZDNfZWFzZV9jdWJpYyh0KXtyZXR1cm4gdCAqIHQgKiB0O31mdW5jdGlvbiBkM19lYXNlX2N1YmljSW5PdXQodCl7aWYodCA8PSAwKXJldHVybiAwO2lmKHQgPj0gMSlyZXR1cm4gMTt2YXIgdDI9dCAqIHQsdDM9dDIgKiB0O3JldHVybiA0ICogKHQgPCAuNT90MzozICogKHQgLSB0MikgKyB0MyAtIC43NSk7fWZ1bmN0aW9uIGQzX2Vhc2VfcG9seShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsZSk7fTt9ZnVuY3Rpb24gZDNfZWFzZV9zaW4odCl7cmV0dXJuIDEgLSBNYXRoLmNvcyh0ICogaGFsZs+AKTt9ZnVuY3Rpb24gZDNfZWFzZV9leHAodCl7cmV0dXJuIE1hdGgucG93KDIsMTAgKiAodCAtIDEpKTt9ZnVuY3Rpb24gZDNfZWFzZV9jaXJjbGUodCl7cmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KTt9ZnVuY3Rpb24gZDNfZWFzZV9lbGFzdGljKGEscCl7dmFyIHM7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpcCA9IC40NTtpZihhcmd1bWVudHMubGVuZ3RoKXMgPSBwIC8gz4QgKiBNYXRoLmFzaW4oMSAvIGEpO2Vsc2UgYSA9IDEscyA9IHAgLyA0O3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMSArIGEgKiBNYXRoLnBvdygyLC0xMCAqIHQpICogTWF0aC5zaW4oKHQgLSBzKSAqIM+EIC8gcCk7fTt9ZnVuY3Rpb24gZDNfZWFzZV9iYWNrKHMpe2lmKCFzKXMgPSAxLjcwMTU4O3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCAqIHQgKiAoKHMgKyAxKSAqIHQgLSBzKTt9O31mdW5jdGlvbiBkM19lYXNlX2JvdW5jZSh0KXtyZXR1cm4gdCA8IDEgLyAyLjc1PzcuNTYyNSAqIHQgKiB0OnQgPCAyIC8gMi43NT83LjU2MjUgKiAodCAtPSAxLjUgLyAyLjc1KSAqIHQgKyAuNzU6dCA8IDIuNSAvIDIuNzU/Ny41NjI1ICogKHQgLT0gMi4yNSAvIDIuNzUpICogdCArIC45Mzc1OjcuNTYyNSAqICh0IC09IDIuNjI1IC8gMi43NSkgKiB0ICsgLjk4NDM3NTt9ZDMuaW50ZXJwb2xhdGVIY2wgPSBkM19pbnRlcnBvbGF0ZUhjbDtmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZUhjbChhLGIpe2EgPSBkMy5oY2woYSk7YiA9IGQzLmhjbChiKTt2YXIgYWg9YS5oLGFjPWEuYyxhbD1hLmwsYmg9Yi5oIC0gYWgsYmM9Yi5jIC0gYWMsYmw9Yi5sIC0gYWw7aWYoaXNOYU4oYmMpKWJjID0gMCxhYyA9IGlzTmFOKGFjKT9iLmM6YWM7aWYoaXNOYU4oYmgpKWJoID0gMCxhaCA9IGlzTmFOKGFoKT9iLmg6YWg7ZWxzZSBpZihiaCA+IDE4MCliaCAtPSAzNjA7ZWxzZSBpZihiaCA8IC0xODApYmggKz0gMzYwO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZDNfaGNsX2xhYihhaCArIGJoICogdCxhYyArIGJjICogdCxhbCArIGJsICogdCkgKyBcIlwiO307fWQzLmludGVycG9sYXRlSHNsID0gZDNfaW50ZXJwb2xhdGVIc2w7ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVIc2woYSxiKXthID0gZDMuaHNsKGEpO2IgPSBkMy5oc2woYik7dmFyIGFoPWEuaCxhcz1hLnMsYWw9YS5sLGJoPWIuaCAtIGFoLGJzPWIucyAtIGFzLGJsPWIubCAtIGFsO2lmKGlzTmFOKGJzKSlicyA9IDAsYXMgPSBpc05hTihhcyk/Yi5zOmFzO2lmKGlzTmFOKGJoKSliaCA9IDAsYWggPSBpc05hTihhaCk/Yi5oOmFoO2Vsc2UgaWYoYmggPiAxODApYmggLT0gMzYwO2Vsc2UgaWYoYmggPCAtMTgwKWJoICs9IDM2MDtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQzX2hzbF9yZ2IoYWggKyBiaCAqIHQsYXMgKyBicyAqIHQsYWwgKyBibCAqIHQpICsgXCJcIjt9O31kMy5pbnRlcnBvbGF0ZUxhYiA9IGQzX2ludGVycG9sYXRlTGFiO2Z1bmN0aW9uIGQzX2ludGVycG9sYXRlTGFiKGEsYil7YSA9IGQzLmxhYihhKTtiID0gZDMubGFiKGIpO3ZhciBhbD1hLmwsYWE9YS5hLGFiPWEuYixibD1iLmwgLSBhbCxiYT1iLmEgLSBhYSxiYj1iLmIgLSBhYjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQzX2xhYl9yZ2IoYWwgKyBibCAqIHQsYWEgKyBiYSAqIHQsYWIgKyBiYiAqIHQpICsgXCJcIjt9O31kMy5pbnRlcnBvbGF0ZVJvdW5kID0gZDNfaW50ZXJwb2xhdGVSb3VuZDtmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZVJvdW5kKGEsYil7YiAtPSBhO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChhICsgYiAqIHQpO307fWQzLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKHN0cmluZyl7dmFyIGc9ZDNfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQzLm5zLnByZWZpeC5zdmcsXCJnXCIpO3JldHVybiAoZDMudHJhbnNmb3JtID0gZnVuY3Rpb24oc3RyaW5nKXtpZihzdHJpbmcgIT0gbnVsbCl7Zy5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIixzdHJpbmcpO3ZhciB0PWcudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKTt9cmV0dXJuIG5ldyBkM190cmFuc2Zvcm0odD90Lm1hdHJpeDpkM190cmFuc2Zvcm1JZGVudGl0eSk7fSkoc3RyaW5nKTt9O2Z1bmN0aW9uIGQzX3RyYW5zZm9ybShtKXt2YXIgcjA9W20uYSxtLmJdLHIxPVttLmMsbS5kXSxreD1kM190cmFuc2Zvcm1Ob3JtYWxpemUocjApLGt6PWQzX3RyYW5zZm9ybURvdChyMCxyMSksa3k9ZDNfdHJhbnNmb3JtTm9ybWFsaXplKGQzX3RyYW5zZm9ybUNvbWJpbmUocjEscjAsLWt6KSkgfHwgMDtpZihyMFswXSAqIHIxWzFdIDwgcjFbMF0gKiByMFsxXSl7cjBbMF0gKj0gLTE7cjBbMV0gKj0gLTE7a3ggKj0gLTE7a3ogKj0gLTE7fXRoaXMucm90YXRlID0gKGt4P01hdGguYXRhbjIocjBbMV0scjBbMF0pOk1hdGguYXRhbjIoLXIxWzBdLHIxWzFdKSkgKiBkM19kZWdyZWVzO3RoaXMudHJhbnNsYXRlID0gW20uZSxtLmZdO3RoaXMuc2NhbGUgPSBba3gsa3ldO3RoaXMuc2tldyA9IGt5P01hdGguYXRhbjIoa3osa3kpICogZDNfZGVncmVlczowO31kM190cmFuc2Zvcm0ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXtyZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnRyYW5zbGF0ZSArIFwiKXJvdGF0ZShcIiArIHRoaXMucm90YXRlICsgXCIpc2tld1goXCIgKyB0aGlzLnNrZXcgKyBcIilzY2FsZShcIiArIHRoaXMuc2NhbGUgKyBcIilcIjt9O2Z1bmN0aW9uIGQzX3RyYW5zZm9ybURvdChhLGIpe3JldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO31mdW5jdGlvbiBkM190cmFuc2Zvcm1Ob3JtYWxpemUoYSl7dmFyIGs9TWF0aC5zcXJ0KGQzX3RyYW5zZm9ybURvdChhLGEpKTtpZihrKXthWzBdIC89IGs7YVsxXSAvPSBrO31yZXR1cm4gazt9ZnVuY3Rpb24gZDNfdHJhbnNmb3JtQ29tYmluZShhLGIsayl7YVswXSArPSBrICogYlswXTthWzFdICs9IGsgKiBiWzFdO3JldHVybiBhO312YXIgZDNfdHJhbnNmb3JtSWRlbnRpdHk9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtkMy5pbnRlcnBvbGF0ZVRyYW5zZm9ybSA9IGQzX2ludGVycG9sYXRlVHJhbnNmb3JtO2Z1bmN0aW9uIGQzX2ludGVycG9sYXRlVHJhbnNmb3JtUG9wKHMpe3JldHVybiBzLmxlbmd0aD9zLnBvcCgpICsgXCIsXCI6XCJcIjt9ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVUcmFuc2xhdGUodGEsdGIscyxxKXtpZih0YVswXSAhPT0gdGJbMF0gfHwgdGFbMV0gIT09IHRiWzFdKXt2YXIgaT1zLnB1c2goXCJ0cmFuc2xhdGUoXCIsbnVsbCxcIixcIixudWxsLFwiKVwiKTtxLnB1c2goe2k6aSAtIDQseDpkM19pbnRlcnBvbGF0ZU51bWJlcih0YVswXSx0YlswXSl9LHtpOmkgLSAyLHg6ZDNfaW50ZXJwb2xhdGVOdW1iZXIodGFbMV0sdGJbMV0pfSk7fWVsc2UgaWYodGJbMF0gfHwgdGJbMV0pe3MucHVzaChcInRyYW5zbGF0ZShcIiArIHRiICsgXCIpXCIpO319ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVSb3RhdGUocmEscmIscyxxKXtpZihyYSAhPT0gcmIpe2lmKHJhIC0gcmIgPiAxODApcmIgKz0gMzYwO2Vsc2UgaWYocmIgLSByYSA+IDE4MClyYSArPSAzNjA7cS5wdXNoKHtpOnMucHVzaChkM19pbnRlcnBvbGF0ZVRyYW5zZm9ybVBvcChzKSArIFwicm90YXRlKFwiLG51bGwsXCIpXCIpIC0gMix4OmQzX2ludGVycG9sYXRlTnVtYmVyKHJhLHJiKX0pO31lbHNlIGlmKHJiKXtzLnB1c2goZDNfaW50ZXJwb2xhdGVUcmFuc2Zvcm1Qb3AocykgKyBcInJvdGF0ZShcIiArIHJiICsgXCIpXCIpO319ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVTa2V3KHdhLHdiLHMscSl7aWYod2EgIT09IHdiKXtxLnB1c2goe2k6cy5wdXNoKGQzX2ludGVycG9sYXRlVHJhbnNmb3JtUG9wKHMpICsgXCJza2V3WChcIixudWxsLFwiKVwiKSAtIDIseDpkM19pbnRlcnBvbGF0ZU51bWJlcih3YSx3Yil9KTt9ZWxzZSBpZih3Yil7cy5wdXNoKGQzX2ludGVycG9sYXRlVHJhbnNmb3JtUG9wKHMpICsgXCJza2V3WChcIiArIHdiICsgXCIpXCIpO319ZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVTY2FsZShrYSxrYixzLHEpe2lmKGthWzBdICE9PSBrYlswXSB8fCBrYVsxXSAhPT0ga2JbMV0pe3ZhciBpPXMucHVzaChkM19pbnRlcnBvbGF0ZVRyYW5zZm9ybVBvcChzKSArIFwic2NhbGUoXCIsbnVsbCxcIixcIixudWxsLFwiKVwiKTtxLnB1c2goe2k6aSAtIDQseDpkM19pbnRlcnBvbGF0ZU51bWJlcihrYVswXSxrYlswXSl9LHtpOmkgLSAyLHg6ZDNfaW50ZXJwb2xhdGVOdW1iZXIoa2FbMV0sa2JbMV0pfSk7fWVsc2UgaWYoa2JbMF0gIT09IDEgfHwga2JbMV0gIT09IDEpe3MucHVzaChkM19pbnRlcnBvbGF0ZVRyYW5zZm9ybVBvcChzKSArIFwic2NhbGUoXCIgKyBrYiArIFwiKVwiKTt9fWZ1bmN0aW9uIGQzX2ludGVycG9sYXRlVHJhbnNmb3JtKGEsYil7dmFyIHM9W10scT1bXTthID0gZDMudHJhbnNmb3JtKGEpLGIgPSBkMy50cmFuc2Zvcm0oYik7ZDNfaW50ZXJwb2xhdGVUcmFuc2xhdGUoYS50cmFuc2xhdGUsYi50cmFuc2xhdGUscyxxKTtkM19pbnRlcnBvbGF0ZVJvdGF0ZShhLnJvdGF0ZSxiLnJvdGF0ZSxzLHEpO2QzX2ludGVycG9sYXRlU2tldyhhLnNrZXcsYi5za2V3LHMscSk7ZDNfaW50ZXJwb2xhdGVTY2FsZShhLnNjYWxlLGIuc2NhbGUscyxxKTthID0gYiA9IG51bGw7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPS0xLG49cS5sZW5ndGgsbzt3aGlsZSgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7cmV0dXJuIHMuam9pbihcIlwiKTt9O31mdW5jdGlvbiBkM191bmludGVycG9sYXRlTnVtYmVyKGEsYil7YiA9IChiIC09IGEgPSArYSkgfHwgMSAvIGI7cmV0dXJuIGZ1bmN0aW9uKHgpe3JldHVybiAoeCAtIGEpIC8gYjt9O31mdW5jdGlvbiBkM191bmludGVycG9sYXRlQ2xhbXAoYSxiKXtiID0gKGIgLT0gYSA9ICthKSB8fCAxIC8gYjtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoeCAtIGEpIC8gYikpO307fWQzLmxheW91dCA9IHt9O2QzLmxheW91dC5idW5kbGUgPSBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihsaW5rcyl7dmFyIHBhdGhzPVtdLGk9LTEsbj1saW5rcy5sZW5ndGg7d2hpbGUoKytpIDwgbikgcGF0aHMucHVzaChkM19sYXlvdXRfYnVuZGxlUGF0aChsaW5rc1tpXSkpO3JldHVybiBwYXRoczt9O307ZnVuY3Rpb24gZDNfbGF5b3V0X2J1bmRsZVBhdGgobGluayl7dmFyIHN0YXJ0PWxpbmsuc291cmNlLGVuZD1saW5rLnRhcmdldCxsY2E9ZDNfbGF5b3V0X2J1bmRsZUxlYXN0Q29tbW9uQW5jZXN0b3Ioc3RhcnQsZW5kKSxwb2ludHM9W3N0YXJ0XTt3aGlsZShzdGFydCAhPT0gbGNhKSB7c3RhcnQgPSBzdGFydC5wYXJlbnQ7cG9pbnRzLnB1c2goc3RhcnQpO312YXIgaz1wb2ludHMubGVuZ3RoO3doaWxlKGVuZCAhPT0gbGNhKSB7cG9pbnRzLnNwbGljZShrLDAsZW5kKTtlbmQgPSBlbmQucGFyZW50O31yZXR1cm4gcG9pbnRzO31mdW5jdGlvbiBkM19sYXlvdXRfYnVuZGxlQW5jZXN0b3JzKG5vZGUpe3ZhciBhbmNlc3RvcnM9W10scGFyZW50PW5vZGUucGFyZW50O3doaWxlKHBhcmVudCAhPSBudWxsKSB7YW5jZXN0b3JzLnB1c2gobm9kZSk7bm9kZSA9IHBhcmVudDtwYXJlbnQgPSBwYXJlbnQucGFyZW50O31hbmNlc3RvcnMucHVzaChub2RlKTtyZXR1cm4gYW5jZXN0b3JzO31mdW5jdGlvbiBkM19sYXlvdXRfYnVuZGxlTGVhc3RDb21tb25BbmNlc3RvcihhLGIpe2lmKGEgPT09IGIpcmV0dXJuIGE7dmFyIGFOb2Rlcz1kM19sYXlvdXRfYnVuZGxlQW5jZXN0b3JzKGEpLGJOb2Rlcz1kM19sYXlvdXRfYnVuZGxlQW5jZXN0b3JzKGIpLGFOb2RlPWFOb2Rlcy5wb3AoKSxiTm9kZT1iTm9kZXMucG9wKCksc2hhcmVkTm9kZT1udWxsO3doaWxlKGFOb2RlID09PSBiTm9kZSkge3NoYXJlZE5vZGUgPSBhTm9kZTthTm9kZSA9IGFOb2Rlcy5wb3AoKTtiTm9kZSA9IGJOb2Rlcy5wb3AoKTt9cmV0dXJuIHNoYXJlZE5vZGU7fWQzLmxheW91dC5jaG9yZCA9IGZ1bmN0aW9uKCl7dmFyIGNob3JkPXt9LGNob3Jkcyxncm91cHMsbWF0cml4LG4scGFkZGluZz0wLHNvcnRHcm91cHMsc29ydFN1Ymdyb3Vwcyxzb3J0Q2hvcmRzO2Z1bmN0aW9uIHJlbGF5b3V0KCl7dmFyIHN1Ymdyb3Vwcz17fSxncm91cFN1bXM9W10sZ3JvdXBJbmRleD1kMy5yYW5nZShuKSxzdWJncm91cEluZGV4PVtdLGsseCx4MCxpLGo7Y2hvcmRzID0gW107Z3JvdXBzID0gW107ayA9IDAsaSA9IC0xO3doaWxlKCsraSA8IG4pIHt4ID0gMCxqID0gLTE7d2hpbGUoKytqIDwgbikge3ggKz0gbWF0cml4W2ldW2pdO31ncm91cFN1bXMucHVzaCh4KTtzdWJncm91cEluZGV4LnB1c2goZDMucmFuZ2UobikpO2sgKz0geDt9aWYoc29ydEdyb3Vwcyl7Z3JvdXBJbmRleC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIHNvcnRHcm91cHMoZ3JvdXBTdW1zW2FdLGdyb3VwU3Vtc1tiXSk7fSk7fWlmKHNvcnRTdWJncm91cHMpe3N1Ymdyb3VwSW5kZXguZm9yRWFjaChmdW5jdGlvbihkLGkpe2Quc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBzb3J0U3ViZ3JvdXBzKG1hdHJpeFtpXVthXSxtYXRyaXhbaV1bYl0pO30pO30pO31rID0gKM+EIC0gcGFkZGluZyAqIG4pIC8gazt4ID0gMCxpID0gLTE7d2hpbGUoKytpIDwgbikge3gwID0geCxqID0gLTE7d2hpbGUoKytqIDwgbikge3ZhciBkaT1ncm91cEluZGV4W2ldLGRqPXN1Ymdyb3VwSW5kZXhbZGldW2pdLHY9bWF0cml4W2RpXVtkal0sYTA9eCxhMT14ICs9IHYgKiBrO3N1Ymdyb3Vwc1tkaSArIFwiLVwiICsgZGpdID0ge2luZGV4OmRpLHN1YmluZGV4OmRqLHN0YXJ0QW5nbGU6YTAsZW5kQW5nbGU6YTEsdmFsdWU6dn07fWdyb3Vwc1tkaV0gPSB7aW5kZXg6ZGksc3RhcnRBbmdsZTp4MCxlbmRBbmdsZTp4LHZhbHVlOih4IC0geDApIC8ga307eCArPSBwYWRkaW5nO31pID0gLTE7d2hpbGUoKytpIDwgbikge2ogPSBpIC0gMTt3aGlsZSgrK2ogPCBuKSB7dmFyIHNvdXJjZT1zdWJncm91cHNbaSArIFwiLVwiICsgal0sdGFyZ2V0PXN1Ymdyb3Vwc1tqICsgXCItXCIgKyBpXTtpZihzb3VyY2UudmFsdWUgfHwgdGFyZ2V0LnZhbHVlKXtjaG9yZHMucHVzaChzb3VyY2UudmFsdWUgPCB0YXJnZXQudmFsdWU/e3NvdXJjZTp0YXJnZXQsdGFyZ2V0OnNvdXJjZX06e3NvdXJjZTpzb3VyY2UsdGFyZ2V0OnRhcmdldH0pO319fWlmKHNvcnRDaG9yZHMpcmVzb3J0KCk7fWZ1bmN0aW9uIHJlc29ydCgpe2Nob3Jkcy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIHNvcnRDaG9yZHMoKGEuc291cmNlLnZhbHVlICsgYS50YXJnZXQudmFsdWUpIC8gMiwoYi5zb3VyY2UudmFsdWUgKyBiLnRhcmdldC52YWx1ZSkgLyAyKTt9KTt9Y2hvcmQubWF0cml4ID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG1hdHJpeDtuID0gKG1hdHJpeCA9IHgpICYmIG1hdHJpeC5sZW5ndGg7Y2hvcmRzID0gZ3JvdXBzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5wYWRkaW5nID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZGRpbmc7cGFkZGluZyA9IHg7Y2hvcmRzID0gZ3JvdXBzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zb3J0R3JvdXBzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvcnRHcm91cHM7c29ydEdyb3VwcyA9IHg7Y2hvcmRzID0gZ3JvdXBzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zb3J0U3ViZ3JvdXBzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvcnRTdWJncm91cHM7c29ydFN1Ymdyb3VwcyA9IHg7Y2hvcmRzID0gbnVsbDtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zb3J0Q2hvcmRzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvcnRDaG9yZHM7c29ydENob3JkcyA9IHg7aWYoY2hvcmRzKXJlc29ydCgpO3JldHVybiBjaG9yZDt9O2Nob3JkLmNob3JkcyA9IGZ1bmN0aW9uKCl7aWYoIWNob3JkcylyZWxheW91dCgpO3JldHVybiBjaG9yZHM7fTtjaG9yZC5ncm91cHMgPSBmdW5jdGlvbigpe2lmKCFncm91cHMpcmVsYXlvdXQoKTtyZXR1cm4gZ3JvdXBzO307cmV0dXJuIGNob3JkO307ZDMubGF5b3V0LmZvcmNlID0gZnVuY3Rpb24oKXt2YXIgZm9yY2U9e30sZXZlbnQ9ZDMuZGlzcGF0Y2goXCJzdGFydFwiLFwidGlja1wiLFwiZW5kXCIpLHRpbWVyLHNpemU9WzEsMV0sZHJhZyxhbHBoYSxmcmljdGlvbj0uOSxsaW5rRGlzdGFuY2U9ZDNfbGF5b3V0X2ZvcmNlTGlua0Rpc3RhbmNlLGxpbmtTdHJlbmd0aD1kM19sYXlvdXRfZm9yY2VMaW5rU3RyZW5ndGgsY2hhcmdlPS0zMCxjaGFyZ2VEaXN0YW5jZTI9ZDNfbGF5b3V0X2ZvcmNlQ2hhcmdlRGlzdGFuY2UyLGdyYXZpdHk9LjEsdGhldGEyPS42NCxub2Rlcz1bXSxsaW5rcz1bXSxkaXN0YW5jZXMsc3RyZW5ndGhzLGNoYXJnZXM7ZnVuY3Rpb24gcmVwdWxzZShub2RlKXtyZXR1cm4gZnVuY3Rpb24ocXVhZCx4MSxfLHgyKXtpZihxdWFkLnBvaW50ICE9PSBub2RlKXt2YXIgZHg9cXVhZC5jeCAtIG5vZGUueCxkeT1xdWFkLmN5IC0gbm9kZS55LGR3PXgyIC0geDEsZG49ZHggKiBkeCArIGR5ICogZHk7aWYoZHcgKiBkdyAvIHRoZXRhMiA8IGRuKXtpZihkbiA8IGNoYXJnZURpc3RhbmNlMil7dmFyIGs9cXVhZC5jaGFyZ2UgLyBkbjtub2RlLnB4IC09IGR4ICogaztub2RlLnB5IC09IGR5ICogazt9cmV0dXJuIHRydWU7fWlmKHF1YWQucG9pbnQgJiYgZG4gJiYgZG4gPCBjaGFyZ2VEaXN0YW5jZTIpe3ZhciBrPXF1YWQucG9pbnRDaGFyZ2UgLyBkbjtub2RlLnB4IC09IGR4ICogaztub2RlLnB5IC09IGR5ICogazt9fXJldHVybiAhcXVhZC5jaGFyZ2U7fTt9Zm9yY2UudGljayA9IGZ1bmN0aW9uKCl7aWYoKGFscGhhICo9IC45OSkgPCAuMDA1KXt0aW1lciA9IG51bGw7ZXZlbnQuZW5kKHt0eXBlOlwiZW5kXCIsYWxwaGE6YWxwaGEgPSAwfSk7cmV0dXJuIHRydWU7fXZhciBuPW5vZGVzLmxlbmd0aCxtPWxpbmtzLmxlbmd0aCxxLGksbyxzLHQsbCxrLHgseTtmb3IoaSA9IDA7aSA8IG07KytpKSB7byA9IGxpbmtzW2ldO3MgPSBvLnNvdXJjZTt0ID0gby50YXJnZXQ7eCA9IHQueCAtIHMueDt5ID0gdC55IC0gcy55O2lmKGwgPSB4ICogeCArIHkgKiB5KXtsID0gYWxwaGEgKiBzdHJlbmd0aHNbaV0gKiAoKGwgPSBNYXRoLnNxcnQobCkpIC0gZGlzdGFuY2VzW2ldKSAvIGw7eCAqPSBsO3kgKj0gbDt0LnggLT0geCAqIChrID0gcy53ZWlnaHQgKyB0LndlaWdodD9zLndlaWdodCAvIChzLndlaWdodCArIHQud2VpZ2h0KTouNSk7dC55IC09IHkgKiBrO3MueCArPSB4ICogKGsgPSAxIC0gayk7cy55ICs9IHkgKiBrO319aWYoayA9IGFscGhhICogZ3Jhdml0eSl7eCA9IHNpemVbMF0gLyAyO3kgPSBzaXplWzFdIC8gMjtpID0gLTE7aWYoayl3aGlsZSgrK2kgPCBuKSB7byA9IG5vZGVzW2ldO28ueCArPSAoeCAtIG8ueCkgKiBrO28ueSArPSAoeSAtIG8ueSkgKiBrO319aWYoY2hhcmdlKXtkM19sYXlvdXRfZm9yY2VBY2N1bXVsYXRlKHEgPSBkMy5nZW9tLnF1YWR0cmVlKG5vZGVzKSxhbHBoYSxjaGFyZ2VzKTtpID0gLTE7d2hpbGUoKytpIDwgbikge2lmKCEobyA9IG5vZGVzW2ldKS5maXhlZCl7cS52aXNpdChyZXB1bHNlKG8pKTt9fX1pID0gLTE7d2hpbGUoKytpIDwgbikge28gPSBub2Rlc1tpXTtpZihvLmZpeGVkKXtvLnggPSBvLnB4O28ueSA9IG8ucHk7fWVsc2Uge28ueCAtPSAoby5weCAtIChvLnB4ID0gby54KSkgKiBmcmljdGlvbjtvLnkgLT0gKG8ucHkgLSAoby5weSA9IG8ueSkpICogZnJpY3Rpb247fX1ldmVudC50aWNrKHt0eXBlOlwidGlja1wiLGFscGhhOmFscGhhfSk7fTtmb3JjZS5ub2RlcyA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBub2Rlcztub2RlcyA9IHg7cmV0dXJuIGZvcmNlO307Zm9yY2UubGlua3MgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbGlua3M7bGlua3MgPSB4O3JldHVybiBmb3JjZTt9O2ZvcmNlLnNpemUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc2l6ZTtzaXplID0geDtyZXR1cm4gZm9yY2U7fTtmb3JjZS5saW5rRGlzdGFuY2UgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbGlua0Rpc3RhbmNlO2xpbmtEaXN0YW5jZSA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDoreDtyZXR1cm4gZm9yY2U7fTtmb3JjZS5kaXN0YW5jZSA9IGZvcmNlLmxpbmtEaXN0YW5jZTtmb3JjZS5saW5rU3RyZW5ndGggPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbGlua1N0cmVuZ3RoO2xpbmtTdHJlbmd0aCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDoreDtyZXR1cm4gZm9yY2U7fTtmb3JjZS5mcmljdGlvbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBmcmljdGlvbjtmcmljdGlvbiA9ICt4O3JldHVybiBmb3JjZTt9O2ZvcmNlLmNoYXJnZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjaGFyZ2U7Y2hhcmdlID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIj94Oit4O3JldHVybiBmb3JjZTt9O2ZvcmNlLmNoYXJnZURpc3RhbmNlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChjaGFyZ2VEaXN0YW5jZTIpO2NoYXJnZURpc3RhbmNlMiA9IHggKiB4O3JldHVybiBmb3JjZTt9O2ZvcmNlLmdyYXZpdHkgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZ3Jhdml0eTtncmF2aXR5ID0gK3g7cmV0dXJuIGZvcmNlO307Zm9yY2UudGhldGEgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KHRoZXRhMik7dGhldGEyID0geCAqIHg7cmV0dXJuIGZvcmNlO307Zm9yY2UuYWxwaGEgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYWxwaGE7eCA9ICt4O2lmKGFscGhhKXtpZih4ID4gMCl7YWxwaGEgPSB4O31lbHNlIHt0aW1lci5jID0gbnVsbCx0aW1lci50ID0gTmFOLHRpbWVyID0gbnVsbDtldmVudC5zdGFydCh7dHlwZTpcImVuZFwiLGFscGhhOmFscGhhID0gMH0pO319ZWxzZSBpZih4ID4gMCl7ZXZlbnQuc3RhcnQoe3R5cGU6XCJzdGFydFwiLGFscGhhOmFscGhhID0geH0pO3RpbWVyID0gZDNfdGltZXIoZm9yY2UudGljayk7fXJldHVybiBmb3JjZTt9O2ZvcmNlLnN0YXJ0ID0gZnVuY3Rpb24oKXt2YXIgaSxuPW5vZGVzLmxlbmd0aCxtPWxpbmtzLmxlbmd0aCx3PXNpemVbMF0saD1zaXplWzFdLG5laWdoYm9ycyxvO2ZvcihpID0gMDtpIDwgbjsrK2kpIHsobyA9IG5vZGVzW2ldKS5pbmRleCA9IGk7by53ZWlnaHQgPSAwO31mb3IoaSA9IDA7aSA8IG07KytpKSB7byA9IGxpbmtzW2ldO2lmKHR5cGVvZiBvLnNvdXJjZSA9PSBcIm51bWJlclwiKW8uc291cmNlID0gbm9kZXNbby5zb3VyY2VdO2lmKHR5cGVvZiBvLnRhcmdldCA9PSBcIm51bWJlclwiKW8udGFyZ2V0ID0gbm9kZXNbby50YXJnZXRdOysrby5zb3VyY2Uud2VpZ2h0Oysrby50YXJnZXQud2VpZ2h0O31mb3IoaSA9IDA7aSA8IG47KytpKSB7byA9IG5vZGVzW2ldO2lmKGlzTmFOKG8ueCkpby54ID0gcG9zaXRpb24oXCJ4XCIsdyk7aWYoaXNOYU4oby55KSlvLnkgPSBwb3NpdGlvbihcInlcIixoKTtpZihpc05hTihvLnB4KSlvLnB4ID0gby54O2lmKGlzTmFOKG8ucHkpKW8ucHkgPSBvLnk7fWRpc3RhbmNlcyA9IFtdO2lmKHR5cGVvZiBsaW5rRGlzdGFuY2UgPT09IFwiZnVuY3Rpb25cIilmb3IoaSA9IDA7aSA8IG07KytpKSBkaXN0YW5jZXNbaV0gPSArbGlua0Rpc3RhbmNlLmNhbGwodGhpcyxsaW5rc1tpXSxpKTtlbHNlIGZvcihpID0gMDtpIDwgbTsrK2kpIGRpc3RhbmNlc1tpXSA9IGxpbmtEaXN0YW5jZTtzdHJlbmd0aHMgPSBbXTtpZih0eXBlb2YgbGlua1N0cmVuZ3RoID09PSBcImZ1bmN0aW9uXCIpZm9yKGkgPSAwO2kgPCBtOysraSkgc3RyZW5ndGhzW2ldID0gK2xpbmtTdHJlbmd0aC5jYWxsKHRoaXMsbGlua3NbaV0saSk7ZWxzZSBmb3IoaSA9IDA7aSA8IG07KytpKSBzdHJlbmd0aHNbaV0gPSBsaW5rU3RyZW5ndGg7Y2hhcmdlcyA9IFtdO2lmKHR5cGVvZiBjaGFyZ2UgPT09IFwiZnVuY3Rpb25cIilmb3IoaSA9IDA7aSA8IG47KytpKSBjaGFyZ2VzW2ldID0gK2NoYXJnZS5jYWxsKHRoaXMsbm9kZXNbaV0saSk7ZWxzZSBmb3IoaSA9IDA7aSA8IG47KytpKSBjaGFyZ2VzW2ldID0gY2hhcmdlO2Z1bmN0aW9uIHBvc2l0aW9uKGRpbWVuc2lvbixzaXplKXtpZighbmVpZ2hib3JzKXtuZWlnaGJvcnMgPSBuZXcgQXJyYXkobik7Zm9yKGogPSAwO2ogPCBuOysraikge25laWdoYm9yc1tqXSA9IFtdO31mb3IoaiA9IDA7aiA8IG07KytqKSB7dmFyIG89bGlua3Nbal07bmVpZ2hib3JzW28uc291cmNlLmluZGV4XS5wdXNoKG8udGFyZ2V0KTtuZWlnaGJvcnNbby50YXJnZXQuaW5kZXhdLnB1c2goby5zb3VyY2UpO319dmFyIGNhbmRpZGF0ZXM9bmVpZ2hib3JzW2ldLGo9LTEsbD1jYW5kaWRhdGVzLmxlbmd0aCx4O3doaWxlKCsraiA8IGwpIGlmKCFpc05hTih4ID0gY2FuZGlkYXRlc1tqXVtkaW1lbnNpb25dKSlyZXR1cm4geDtyZXR1cm4gTWF0aC5yYW5kb20oKSAqIHNpemU7fXJldHVybiBmb3JjZS5yZXN1bWUoKTt9O2ZvcmNlLnJlc3VtZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGZvcmNlLmFscGhhKC4xKTt9O2ZvcmNlLnN0b3AgPSBmdW5jdGlvbigpe3JldHVybiBmb3JjZS5hbHBoYSgwKTt9O2ZvcmNlLmRyYWcgPSBmdW5jdGlvbigpe2lmKCFkcmFnKWRyYWcgPSBkMy5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGQzX2lkZW50aXR5KS5vbihcImRyYWdzdGFydC5mb3JjZVwiLGQzX2xheW91dF9mb3JjZURyYWdzdGFydCkub24oXCJkcmFnLmZvcmNlXCIsZHJhZ21vdmUpLm9uKFwiZHJhZ2VuZC5mb3JjZVwiLGQzX2xheW91dF9mb3JjZURyYWdlbmQpO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkcmFnO3RoaXMub24oXCJtb3VzZW92ZXIuZm9yY2VcIixkM19sYXlvdXRfZm9yY2VNb3VzZW92ZXIpLm9uKFwibW91c2VvdXQuZm9yY2VcIixkM19sYXlvdXRfZm9yY2VNb3VzZW91dCkuY2FsbChkcmFnKTt9O2Z1bmN0aW9uIGRyYWdtb3ZlKGQpe2QucHggPSBkMy5ldmVudC54LGQucHkgPSBkMy5ldmVudC55O2ZvcmNlLnJlc3VtZSgpO31yZXR1cm4gZDMucmViaW5kKGZvcmNlLGV2ZW50LFwib25cIik7fTtmdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VEcmFnc3RhcnQoZCl7ZC5maXhlZCB8PSAyO31mdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VEcmFnZW5kKGQpe2QuZml4ZWQgJj0gfjY7fWZ1bmN0aW9uIGQzX2xheW91dF9mb3JjZU1vdXNlb3ZlcihkKXtkLmZpeGVkIHw9IDQ7ZC5weCA9IGQueCxkLnB5ID0gZC55O31mdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VNb3VzZW91dChkKXtkLmZpeGVkICY9IH40O31mdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VBY2N1bXVsYXRlKHF1YWQsYWxwaGEsY2hhcmdlcyl7dmFyIGN4PTAsY3k9MDtxdWFkLmNoYXJnZSA9IDA7aWYoIXF1YWQubGVhZil7dmFyIG5vZGVzPXF1YWQubm9kZXMsbj1ub2Rlcy5sZW5ndGgsaT0tMSxjO3doaWxlKCsraSA8IG4pIHtjID0gbm9kZXNbaV07aWYoYyA9PSBudWxsKWNvbnRpbnVlO2QzX2xheW91dF9mb3JjZUFjY3VtdWxhdGUoYyxhbHBoYSxjaGFyZ2VzKTtxdWFkLmNoYXJnZSArPSBjLmNoYXJnZTtjeCArPSBjLmNoYXJnZSAqIGMuY3g7Y3kgKz0gYy5jaGFyZ2UgKiBjLmN5O319aWYocXVhZC5wb2ludCl7aWYoIXF1YWQubGVhZil7cXVhZC5wb2ludC54ICs9IE1hdGgucmFuZG9tKCkgLSAuNTtxdWFkLnBvaW50LnkgKz0gTWF0aC5yYW5kb20oKSAtIC41O312YXIgaz1hbHBoYSAqIGNoYXJnZXNbcXVhZC5wb2ludC5pbmRleF07cXVhZC5jaGFyZ2UgKz0gcXVhZC5wb2ludENoYXJnZSA9IGs7Y3ggKz0gayAqIHF1YWQucG9pbnQueDtjeSArPSBrICogcXVhZC5wb2ludC55O31xdWFkLmN4ID0gY3ggLyBxdWFkLmNoYXJnZTtxdWFkLmN5ID0gY3kgLyBxdWFkLmNoYXJnZTt9dmFyIGQzX2xheW91dF9mb3JjZUxpbmtEaXN0YW5jZT0yMCxkM19sYXlvdXRfZm9yY2VMaW5rU3RyZW5ndGg9MSxkM19sYXlvdXRfZm9yY2VDaGFyZ2VEaXN0YW5jZTI9SW5maW5pdHk7ZDMubGF5b3V0LmhpZXJhcmNoeSA9IGZ1bmN0aW9uKCl7dmFyIHNvcnQ9ZDNfbGF5b3V0X2hpZXJhcmNoeVNvcnQsY2hpbGRyZW49ZDNfbGF5b3V0X2hpZXJhcmNoeUNoaWxkcmVuLHZhbHVlPWQzX2xheW91dF9oaWVyYXJjaHlWYWx1ZTtmdW5jdGlvbiBoaWVyYXJjaHkocm9vdCl7dmFyIHN0YWNrPVtyb290XSxub2Rlcz1bXSxub2RlO3Jvb3QuZGVwdGggPSAwO3doaWxlKChub2RlID0gc3RhY2sucG9wKCkpICE9IG51bGwpIHtub2Rlcy5wdXNoKG5vZGUpO2lmKChjaGlsZHMgPSBjaGlsZHJlbi5jYWxsKGhpZXJhcmNoeSxub2RlLG5vZGUuZGVwdGgpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKXt2YXIgbixjaGlsZHMsY2hpbGQ7d2hpbGUoLS1uID49IDApIHtzdGFjay5wdXNoKGNoaWxkID0gY2hpbGRzW25dKTtjaGlsZC5wYXJlbnQgPSBub2RlO2NoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7fWlmKHZhbHVlKW5vZGUudmFsdWUgPSAwO25vZGUuY2hpbGRyZW4gPSBjaGlsZHM7fWVsc2Uge2lmKHZhbHVlKW5vZGUudmFsdWUgPSArdmFsdWUuY2FsbChoaWVyYXJjaHksbm9kZSxub2RlLmRlcHRoKSB8fCAwO2RlbGV0ZSBub2RlLmNoaWxkcmVuO319ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxmdW5jdGlvbihub2RlKXt2YXIgY2hpbGRzLHBhcmVudDtpZihzb3J0ICYmIChjaGlsZHMgPSBub2RlLmNoaWxkcmVuKSljaGlsZHMuc29ydChzb3J0KTtpZih2YWx1ZSAmJiAocGFyZW50ID0gbm9kZS5wYXJlbnQpKXBhcmVudC52YWx1ZSArPSBub2RlLnZhbHVlO30pO3JldHVybiBub2Rlczt9aGllcmFyY2h5LnNvcnQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc29ydDtzb3J0ID0geDtyZXR1cm4gaGllcmFyY2h5O307aGllcmFyY2h5LmNoaWxkcmVuID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGNoaWxkcmVuO2NoaWxkcmVuID0geDtyZXR1cm4gaGllcmFyY2h5O307aGllcmFyY2h5LnZhbHVlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZhbHVlO3ZhbHVlID0geDtyZXR1cm4gaGllcmFyY2h5O307aGllcmFyY2h5LnJldmFsdWUgPSBmdW5jdGlvbihyb290KXtpZih2YWx1ZSl7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKHJvb3QsZnVuY3Rpb24obm9kZSl7aWYobm9kZS5jaGlsZHJlbilub2RlLnZhbHVlID0gMDt9KTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290LGZ1bmN0aW9uKG5vZGUpe3ZhciBwYXJlbnQ7aWYoIW5vZGUuY2hpbGRyZW4pbm9kZS52YWx1ZSA9ICt2YWx1ZS5jYWxsKGhpZXJhcmNoeSxub2RlLG5vZGUuZGVwdGgpIHx8IDA7aWYocGFyZW50ID0gbm9kZS5wYXJlbnQpcGFyZW50LnZhbHVlICs9IG5vZGUudmFsdWU7fSk7fXJldHVybiByb290O307cmV0dXJuIGhpZXJhcmNoeTt9O2Z1bmN0aW9uIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQob2JqZWN0LGhpZXJhcmNoeSl7ZDMucmViaW5kKG9iamVjdCxoaWVyYXJjaHksXCJzb3J0XCIsXCJjaGlsZHJlblwiLFwidmFsdWVcIik7b2JqZWN0Lm5vZGVzID0gb2JqZWN0O29iamVjdC5saW5rcyA9IGQzX2xheW91dF9oaWVyYXJjaHlMaW5rcztyZXR1cm4gb2JqZWN0O31mdW5jdGlvbiBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRCZWZvcmUobm9kZSxjYWxsYmFjayl7dmFyIG5vZGVzPVtub2RlXTt3aGlsZSgobm9kZSA9IG5vZGVzLnBvcCgpKSAhPSBudWxsKSB7Y2FsbGJhY2sobm9kZSk7aWYoKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikgJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpKXt2YXIgbixjaGlsZHJlbjt3aGlsZSgtLW4gPj0gMCkgbm9kZXMucHVzaChjaGlsZHJlbltuXSk7fX19ZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIobm9kZSxjYWxsYmFjayl7dmFyIG5vZGVzPVtub2RlXSxub2RlczI9W107d2hpbGUoKG5vZGUgPSBub2Rlcy5wb3AoKSkgIT0gbnVsbCkge25vZGVzMi5wdXNoKG5vZGUpO2lmKChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pICYmIChuID0gY2hpbGRyZW4ubGVuZ3RoKSl7dmFyIGk9LTEsbixjaGlsZHJlbjt3aGlsZSgrK2kgPCBuKSBub2Rlcy5wdXNoKGNoaWxkcmVuW2ldKTt9fXdoaWxlKChub2RlID0gbm9kZXMyLnBvcCgpKSAhPSBudWxsKSB7Y2FsbGJhY2sobm9kZSk7fX1mdW5jdGlvbiBkM19sYXlvdXRfaGllcmFyY2h5Q2hpbGRyZW4oZCl7cmV0dXJuIGQuY2hpbGRyZW47fWZ1bmN0aW9uIGQzX2xheW91dF9oaWVyYXJjaHlWYWx1ZShkKXtyZXR1cm4gZC52YWx1ZTt9ZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVNvcnQoYSxiKXtyZXR1cm4gYi52YWx1ZSAtIGEudmFsdWU7fWZ1bmN0aW9uIGQzX2xheW91dF9oaWVyYXJjaHlMaW5rcyhub2Rlcyl7cmV0dXJuIGQzLm1lcmdlKG5vZGVzLm1hcChmdW5jdGlvbihwYXJlbnQpe3JldHVybiAocGFyZW50LmNoaWxkcmVuIHx8IFtdKS5tYXAoZnVuY3Rpb24oY2hpbGQpe3JldHVybiB7c291cmNlOnBhcmVudCx0YXJnZXQ6Y2hpbGR9O30pO30pKTt9ZDMubGF5b3V0LnBhcnRpdGlvbiA9IGZ1bmN0aW9uKCl7dmFyIGhpZXJhcmNoeT1kMy5sYXlvdXQuaGllcmFyY2h5KCksc2l6ZT1bMSwxXTtmdW5jdGlvbiBwb3NpdGlvbihub2RlLHgsZHgsZHkpe3ZhciBjaGlsZHJlbj1ub2RlLmNoaWxkcmVuO25vZGUueCA9IHg7bm9kZS55ID0gbm9kZS5kZXB0aCAqIGR5O25vZGUuZHggPSBkeDtub2RlLmR5ID0gZHk7aWYoY2hpbGRyZW4gJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpKXt2YXIgaT0tMSxuLGMsZDtkeCA9IG5vZGUudmFsdWU/ZHggLyBub2RlLnZhbHVlOjA7d2hpbGUoKytpIDwgbikge3Bvc2l0aW9uKGMgPSBjaGlsZHJlbltpXSx4LGQgPSBjLnZhbHVlICogZHgsZHkpO3ggKz0gZDt9fX1mdW5jdGlvbiBkZXB0aChub2RlKXt2YXIgY2hpbGRyZW49bm9kZS5jaGlsZHJlbixkPTA7aWYoY2hpbGRyZW4gJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpKXt2YXIgaT0tMSxuO3doaWxlKCsraSA8IG4pIGQgPSBNYXRoLm1heChkLGRlcHRoKGNoaWxkcmVuW2ldKSk7fXJldHVybiAxICsgZDt9ZnVuY3Rpb24gcGFydGl0aW9uKGQsaSl7dmFyIG5vZGVzPWhpZXJhcmNoeS5jYWxsKHRoaXMsZCxpKTtwb3NpdGlvbihub2Rlc1swXSwwLHNpemVbMF0sc2l6ZVsxXSAvIGRlcHRoKG5vZGVzWzBdKSk7cmV0dXJuIG5vZGVzO31wYXJ0aXRpb24uc2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzaXplO3NpemUgPSB4O3JldHVybiBwYXJ0aXRpb247fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZChwYXJ0aXRpb24saGllcmFyY2h5KTt9O2QzLmxheW91dC5waWUgPSBmdW5jdGlvbigpe3ZhciB2YWx1ZT1OdW1iZXIsc29ydD1kM19sYXlvdXRfcGllU29ydEJ5VmFsdWUsc3RhcnRBbmdsZT0wLGVuZEFuZ2xlPc+ELHBhZEFuZ2xlPTA7ZnVuY3Rpb24gcGllKGRhdGEpe3ZhciBuPWRhdGEubGVuZ3RoLHZhbHVlcz1kYXRhLm1hcChmdW5jdGlvbihkLGkpe3JldHVybiArdmFsdWUuY2FsbChwaWUsZCxpKTt9KSxhPSsodHlwZW9mIHN0YXJ0QW5nbGUgPT09IFwiZnVuY3Rpb25cIj9zdGFydEFuZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpzdGFydEFuZ2xlKSxkYT0odHlwZW9mIGVuZEFuZ2xlID09PSBcImZ1bmN0aW9uXCI/ZW5kQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmVuZEFuZ2xlKSAtIGEscD1NYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCsodHlwZW9mIHBhZEFuZ2xlID09PSBcImZ1bmN0aW9uXCI/cGFkQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOnBhZEFuZ2xlKSkscGE9cCAqIChkYSA8IDA/LTE6MSksc3VtPWQzLnN1bSh2YWx1ZXMpLGs9c3VtPyhkYSAtIG4gKiBwYSkgLyBzdW06MCxpbmRleD1kMy5yYW5nZShuKSxhcmNzPVtdLHY7aWYoc29ydCAhPSBudWxsKWluZGV4LnNvcnQoc29ydCA9PT0gZDNfbGF5b3V0X3BpZVNvcnRCeVZhbHVlP2Z1bmN0aW9uKGksail7cmV0dXJuIHZhbHVlc1tqXSAtIHZhbHVlc1tpXTt9OmZ1bmN0aW9uKGksail7cmV0dXJuIHNvcnQoZGF0YVtpXSxkYXRhW2pdKTt9KTtpbmRleC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2FyY3NbaV0gPSB7ZGF0YTpkYXRhW2ldLHZhbHVlOnYgPSB2YWx1ZXNbaV0sc3RhcnRBbmdsZTphLGVuZEFuZ2xlOmEgKz0gdiAqIGsgKyBwYSxwYWRBbmdsZTpwfTt9KTtyZXR1cm4gYXJjczt9cGllLnZhbHVlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZhbHVlO3ZhbHVlID0gXztyZXR1cm4gcGllO307cGllLnNvcnQgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc29ydDtzb3J0ID0gXztyZXR1cm4gcGllO307cGllLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc3RhcnRBbmdsZTtzdGFydEFuZ2xlID0gXztyZXR1cm4gcGllO307cGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGVuZEFuZ2xlO2VuZEFuZ2xlID0gXztyZXR1cm4gcGllO307cGllLnBhZEFuZ2xlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZEFuZ2xlO3BhZEFuZ2xlID0gXztyZXR1cm4gcGllO307cmV0dXJuIHBpZTt9O3ZhciBkM19sYXlvdXRfcGllU29ydEJ5VmFsdWU9e307ZDMubGF5b3V0LnN0YWNrID0gZnVuY3Rpb24oKXt2YXIgdmFsdWVzPWQzX2lkZW50aXR5LG9yZGVyPWQzX2xheW91dF9zdGFja09yZGVyRGVmYXVsdCxvZmZzZXQ9ZDNfbGF5b3V0X3N0YWNrT2Zmc2V0WmVybyxvdXQ9ZDNfbGF5b3V0X3N0YWNrT3V0LHg9ZDNfbGF5b3V0X3N0YWNrWCx5PWQzX2xheW91dF9zdGFja1k7ZnVuY3Rpb24gc3RhY2soZGF0YSxpbmRleCl7aWYoIShuID0gZGF0YS5sZW5ndGgpKXJldHVybiBkYXRhO3ZhciBzZXJpZXM9ZGF0YS5tYXAoZnVuY3Rpb24oZCxpKXtyZXR1cm4gdmFsdWVzLmNhbGwoc3RhY2ssZCxpKTt9KTt2YXIgcG9pbnRzPXNlcmllcy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGQubWFwKGZ1bmN0aW9uKHYsaSl7cmV0dXJuIFt4LmNhbGwoc3RhY2ssdixpKSx5LmNhbGwoc3RhY2ssdixpKV07fSk7fSk7dmFyIG9yZGVycz1vcmRlci5jYWxsKHN0YWNrLHBvaW50cyxpbmRleCk7c2VyaWVzID0gZDMucGVybXV0ZShzZXJpZXMsb3JkZXJzKTtwb2ludHMgPSBkMy5wZXJtdXRlKHBvaW50cyxvcmRlcnMpO3ZhciBvZmZzZXRzPW9mZnNldC5jYWxsKHN0YWNrLHBvaW50cyxpbmRleCk7dmFyIG09c2VyaWVzWzBdLmxlbmd0aCxuLGksaixvO2ZvcihqID0gMDtqIDwgbTsrK2opIHtvdXQuY2FsbChzdGFjayxzZXJpZXNbMF1bal0sbyA9IG9mZnNldHNbal0scG9pbnRzWzBdW2pdWzFdKTtmb3IoaSA9IDE7aSA8IG47KytpKSB7b3V0LmNhbGwoc3RhY2ssc2VyaWVzW2ldW2pdLG8gKz0gcG9pbnRzW2kgLSAxXVtqXVsxXSxwb2ludHNbaV1bal1bMV0pO319cmV0dXJuIGRhdGE7fXN0YWNrLnZhbHVlcyA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2YWx1ZXM7dmFsdWVzID0geDtyZXR1cm4gc3RhY2s7fTtzdGFjay5vcmRlciA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvcmRlcjtvcmRlciA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDpkM19sYXlvdXRfc3RhY2tPcmRlcnMuZ2V0KHgpIHx8IGQzX2xheW91dF9zdGFja09yZGVyRGVmYXVsdDtyZXR1cm4gc3RhY2s7fTtzdGFjay5vZmZzZXQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gb2Zmc2V0O29mZnNldCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI/eDpkM19sYXlvdXRfc3RhY2tPZmZzZXRzLmdldCh4KSB8fCBkM19sYXlvdXRfc3RhY2tPZmZzZXRaZXJvO3JldHVybiBzdGFjazt9O3N0YWNrLnggPSBmdW5jdGlvbih6KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDt4ID0gejtyZXR1cm4gc3RhY2s7fTtzdGFjay55ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHk7eSA9IHo7cmV0dXJuIHN0YWNrO307c3RhY2sub3V0ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG91dDtvdXQgPSB6O3JldHVybiBzdGFjazt9O3JldHVybiBzdGFjazt9O2Z1bmN0aW9uIGQzX2xheW91dF9zdGFja1goZCl7cmV0dXJuIGQueDt9ZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrWShkKXtyZXR1cm4gZC55O31mdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tPdXQoZCx5MCx5KXtkLnkwID0geTA7ZC55ID0geTt9dmFyIGQzX2xheW91dF9zdGFja09yZGVycz1kMy5tYXAoe1wiaW5zaWRlLW91dFwiOmZ1bmN0aW9uIGluc2lkZU91dChkYXRhKXt2YXIgbj1kYXRhLmxlbmd0aCxpLGosbWF4PWRhdGEubWFwKGQzX2xheW91dF9zdGFja01heEluZGV4KSxzdW1zPWRhdGEubWFwKGQzX2xheW91dF9zdGFja1JlZHVjZVN1bSksaW5kZXg9ZDMucmFuZ2Uobikuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBtYXhbYV0gLSBtYXhbYl07fSksdG9wPTAsYm90dG9tPTAsdG9wcz1bXSxib3R0b21zPVtdO2ZvcihpID0gMDtpIDwgbjsrK2kpIHtqID0gaW5kZXhbaV07aWYodG9wIDwgYm90dG9tKXt0b3AgKz0gc3Vtc1tqXTt0b3BzLnB1c2goaik7fWVsc2Uge2JvdHRvbSArPSBzdW1zW2pdO2JvdHRvbXMucHVzaChqKTt9fXJldHVybiBib3R0b21zLnJldmVyc2UoKS5jb25jYXQodG9wcyk7fSxyZXZlcnNlOmZ1bmN0aW9uIHJldmVyc2UoZGF0YSl7cmV0dXJuIGQzLnJhbmdlKGRhdGEubGVuZ3RoKS5yZXZlcnNlKCk7fSxcImRlZmF1bHRcIjpkM19sYXlvdXRfc3RhY2tPcmRlckRlZmF1bHR9KTt2YXIgZDNfbGF5b3V0X3N0YWNrT2Zmc2V0cz1kMy5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24gc2lsaG91ZXR0ZShkYXRhKXt2YXIgbj1kYXRhLmxlbmd0aCxtPWRhdGFbMF0ubGVuZ3RoLHN1bXM9W10sbWF4PTAsaSxqLG8seTA9W107Zm9yKGogPSAwO2ogPCBtOysraikge2ZvcihpID0gMCxvID0gMDtpIDwgbjtpKyspIG8gKz0gZGF0YVtpXVtqXVsxXTtpZihvID4gbWF4KW1heCA9IG87c3Vtcy5wdXNoKG8pO31mb3IoaiA9IDA7aiA8IG07KytqKSB7eTBbal0gPSAobWF4IC0gc3Vtc1tqXSkgLyAyO31yZXR1cm4geTA7fSx3aWdnbGU6ZnVuY3Rpb24gd2lnZ2xlKGRhdGEpe3ZhciBuPWRhdGEubGVuZ3RoLHg9ZGF0YVswXSxtPXgubGVuZ3RoLGksaixrLHMxLHMyLHMzLGR4LG8sbzAseTA9W107eTBbMF0gPSBvID0gbzAgPSAwO2ZvcihqID0gMTtqIDwgbTsrK2opIHtmb3IoaSA9IDAsczEgPSAwO2kgPCBuOysraSkgczEgKz0gZGF0YVtpXVtqXVsxXTtmb3IoaSA9IDAsczIgPSAwLGR4ID0geFtqXVswXSAtIHhbaiAtIDFdWzBdO2kgPCBuOysraSkge2ZvcihrID0gMCxzMyA9IChkYXRhW2ldW2pdWzFdIC0gZGF0YVtpXVtqIC0gMV1bMV0pIC8gKDIgKiBkeCk7ayA8IGk7KytrKSB7czMgKz0gKGRhdGFba11bal1bMV0gLSBkYXRhW2tdW2ogLSAxXVsxXSkgLyBkeDt9czIgKz0gczMgKiBkYXRhW2ldW2pdWzFdO315MFtqXSA9IG8gLT0gczE/czIgLyBzMSAqIGR4OjA7aWYobyA8IG8wKW8wID0gbzt9Zm9yKGogPSAwO2ogPCBtOysraikgeTBbal0gLT0gbzA7cmV0dXJuIHkwO30sZXhwYW5kOmZ1bmN0aW9uIGV4cGFuZChkYXRhKXt2YXIgbj1kYXRhLmxlbmd0aCxtPWRhdGFbMF0ubGVuZ3RoLGs9MSAvIG4saSxqLG8seTA9W107Zm9yKGogPSAwO2ogPCBtOysraikge2ZvcihpID0gMCxvID0gMDtpIDwgbjtpKyspIG8gKz0gZGF0YVtpXVtqXVsxXTtpZihvKWZvcihpID0gMDtpIDwgbjtpKyspIGRhdGFbaV1bal1bMV0gLz0gbztlbHNlIGZvcihpID0gMDtpIDwgbjtpKyspIGRhdGFbaV1bal1bMV0gPSBrO31mb3IoaiA9IDA7aiA8IG07KytqKSB5MFtqXSA9IDA7cmV0dXJuIHkwO30semVybzpkM19sYXlvdXRfc3RhY2tPZmZzZXRaZXJvfSk7ZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrT3JkZXJEZWZhdWx0KGRhdGEpe3JldHVybiBkMy5yYW5nZShkYXRhLmxlbmd0aCk7fWZ1bmN0aW9uIGQzX2xheW91dF9zdGFja09mZnNldFplcm8oZGF0YSl7dmFyIGo9LTEsbT1kYXRhWzBdLmxlbmd0aCx5MD1bXTt3aGlsZSgrK2ogPCBtKSB5MFtqXSA9IDA7cmV0dXJuIHkwO31mdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tNYXhJbmRleChhcnJheSl7dmFyIGk9MSxqPTAsdj1hcnJheVswXVsxXSxrLG49YXJyYXkubGVuZ3RoO2Zvcig7aSA8IG47KytpKSB7aWYoKGsgPSBhcnJheVtpXVsxXSkgPiB2KXtqID0gaTt2ID0gazt9fXJldHVybiBqO31mdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tSZWR1Y2VTdW0oZCl7cmV0dXJuIGQucmVkdWNlKGQzX2xheW91dF9zdGFja1N1bSwwKTt9ZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrU3VtKHAsZCl7cmV0dXJuIHAgKyBkWzFdO31kMy5sYXlvdXQuaGlzdG9ncmFtID0gZnVuY3Rpb24oKXt2YXIgZnJlcXVlbmN5PXRydWUsdmFsdWVyPU51bWJlcixyYW5nZXI9ZDNfbGF5b3V0X2hpc3RvZ3JhbVJhbmdlLGJpbm5lcj1kM19sYXlvdXRfaGlzdG9ncmFtQmluU3R1cmdlcztmdW5jdGlvbiBoaXN0b2dyYW0oZGF0YSxpKXt2YXIgYmlucz1bXSx2YWx1ZXM9ZGF0YS5tYXAodmFsdWVyLHRoaXMpLHJhbmdlPXJhbmdlci5jYWxsKHRoaXMsdmFsdWVzLGkpLHRocmVzaG9sZHM9YmlubmVyLmNhbGwodGhpcyxyYW5nZSx2YWx1ZXMsaSksYmluLGk9LTEsbj12YWx1ZXMubGVuZ3RoLG09dGhyZXNob2xkcy5sZW5ndGggLSAxLGs9ZnJlcXVlbmN5PzE6MSAvIG4seDt3aGlsZSgrK2kgPCBtKSB7YmluID0gYmluc1tpXSA9IFtdO2Jpbi5keCA9IHRocmVzaG9sZHNbaSArIDFdIC0gKGJpbi54ID0gdGhyZXNob2xkc1tpXSk7YmluLnkgPSAwO31pZihtID4gMCl7aSA9IC0xO3doaWxlKCsraSA8IG4pIHt4ID0gdmFsdWVzW2ldO2lmKHggPj0gcmFuZ2VbMF0gJiYgeCA8PSByYW5nZVsxXSl7YmluID0gYmluc1tkMy5iaXNlY3QodGhyZXNob2xkcyx4LDEsbSkgLSAxXTtiaW4ueSArPSBrO2Jpbi5wdXNoKGRhdGFbaV0pO319fXJldHVybiBiaW5zO31oaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdmFsdWVyO3ZhbHVlciA9IHg7cmV0dXJuIGhpc3RvZ3JhbTt9O2hpc3RvZ3JhbS5yYW5nZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByYW5nZXI7cmFuZ2VyID0gZDNfZnVuY3Rvcih4KTtyZXR1cm4gaGlzdG9ncmFtO307aGlzdG9ncmFtLmJpbnMgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYmlubmVyO2Jpbm5lciA9IHR5cGVvZiB4ID09PSBcIm51bWJlclwiP2Z1bmN0aW9uKHJhbmdlKXtyZXR1cm4gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpbkZpeGVkKHJhbmdlLHgpO306ZDNfZnVuY3Rvcih4KTtyZXR1cm4gaGlzdG9ncmFtO307aGlzdG9ncmFtLmZyZXF1ZW5jeSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBmcmVxdWVuY3k7ZnJlcXVlbmN5ID0gISF4O3JldHVybiBoaXN0b2dyYW07fTtyZXR1cm4gaGlzdG9ncmFtO307ZnVuY3Rpb24gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpblN0dXJnZXMocmFuZ2UsdmFsdWVzKXtyZXR1cm4gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpbkZpeGVkKHJhbmdlLE1hdGguY2VpbChNYXRoLmxvZyh2YWx1ZXMubGVuZ3RoKSAvIE1hdGguTE4yICsgMSkpO31mdW5jdGlvbiBkM19sYXlvdXRfaGlzdG9ncmFtQmluRml4ZWQocmFuZ2Usbil7dmFyIHg9LTEsYj0rcmFuZ2VbMF0sbT0ocmFuZ2VbMV0gLSBiKSAvIG4sZj1bXTt3aGlsZSgrK3ggPD0gbikgZlt4XSA9IG0gKiB4ICsgYjtyZXR1cm4gZjt9ZnVuY3Rpb24gZDNfbGF5b3V0X2hpc3RvZ3JhbVJhbmdlKHZhbHVlcyl7cmV0dXJuIFtkMy5taW4odmFsdWVzKSxkMy5tYXgodmFsdWVzKV07fWQzLmxheW91dC5wYWNrID0gZnVuY3Rpb24oKXt2YXIgaGllcmFyY2h5PWQzLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KGQzX2xheW91dF9wYWNrU29ydCkscGFkZGluZz0wLHNpemU9WzEsMV0scmFkaXVzO2Z1bmN0aW9uIHBhY2soZCxpKXt2YXIgbm9kZXM9aGllcmFyY2h5LmNhbGwodGhpcyxkLGkpLHJvb3Q9bm9kZXNbMF0sdz1zaXplWzBdLGg9c2l6ZVsxXSxyPXJhZGl1cyA9PSBudWxsP01hdGguc3FydDp0eXBlb2YgcmFkaXVzID09PSBcImZ1bmN0aW9uXCI/cmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHJhZGl1czt9O3Jvb3QueCA9IHJvb3QueSA9IDA7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxmdW5jdGlvbihkKXtkLnIgPSArcihkLnZhbHVlKTt9KTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290LGQzX2xheW91dF9wYWNrU2libGluZ3MpO2lmKHBhZGRpbmcpe3ZhciBkcj1wYWRkaW5nICogKHJhZGl1cz8xOk1hdGgubWF4KDIgKiByb290LnIgLyB3LDIgKiByb290LnIgLyBoKSkgLyAyO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsZnVuY3Rpb24oZCl7ZC5yICs9IGRyO30pO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsZDNfbGF5b3V0X3BhY2tTaWJsaW5ncyk7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxmdW5jdGlvbihkKXtkLnIgLT0gZHI7fSk7fWQzX2xheW91dF9wYWNrVHJhbnNmb3JtKHJvb3QsdyAvIDIsaCAvIDIscmFkaXVzPzE6MSAvIE1hdGgubWF4KDIgKiByb290LnIgLyB3LDIgKiByb290LnIgLyBoKSk7cmV0dXJuIG5vZGVzO31wYWNrLnNpemUgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc2l6ZTtzaXplID0gXztyZXR1cm4gcGFjazt9O3BhY2sucmFkaXVzID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhZGl1cztyYWRpdXMgPSBfID09IG51bGwgfHwgdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIj9fOitfO3JldHVybiBwYWNrO307cGFjay5wYWRkaW5nID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZGRpbmc7cGFkZGluZyA9ICtfO3JldHVybiBwYWNrO307cmV0dXJuIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQocGFjayxoaWVyYXJjaHkpO307ZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tTb3J0KGEsYil7cmV0dXJuIGEudmFsdWUgLSBiLnZhbHVlO31mdW5jdGlvbiBkM19sYXlvdXRfcGFja0luc2VydChhLGIpe3ZhciBjPWEuX3BhY2tfbmV4dDthLl9wYWNrX25leHQgPSBiO2IuX3BhY2tfcHJldiA9IGE7Yi5fcGFja19uZXh0ID0gYztjLl9wYWNrX3ByZXYgPSBiO31mdW5jdGlvbiBkM19sYXlvdXRfcGFja1NwbGljZShhLGIpe2EuX3BhY2tfbmV4dCA9IGI7Yi5fcGFja19wcmV2ID0gYTt9ZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tJbnRlcnNlY3RzKGEsYil7dmFyIGR4PWIueCAtIGEueCxkeT1iLnkgLSBhLnksZHI9YS5yICsgYi5yO3JldHVybiAuOTk5ICogZHIgKiBkciA+IGR4ICogZHggKyBkeSAqIGR5O31mdW5jdGlvbiBkM19sYXlvdXRfcGFja1NpYmxpbmdzKG5vZGUpe2lmKCEobm9kZXMgPSBub2RlLmNoaWxkcmVuKSB8fCAhKG4gPSBub2Rlcy5sZW5ndGgpKXJldHVybjt2YXIgbm9kZXMseE1pbj1JbmZpbml0eSx4TWF4PS1JbmZpbml0eSx5TWluPUluZmluaXR5LHlNYXg9LUluZmluaXR5LGEsYixjLGksaixrLG47ZnVuY3Rpb24gYm91bmQobm9kZSl7eE1pbiA9IE1hdGgubWluKG5vZGUueCAtIG5vZGUucix4TWluKTt4TWF4ID0gTWF0aC5tYXgobm9kZS54ICsgbm9kZS5yLHhNYXgpO3lNaW4gPSBNYXRoLm1pbihub2RlLnkgLSBub2RlLnIseU1pbik7eU1heCA9IE1hdGgubWF4KG5vZGUueSArIG5vZGUucix5TWF4KTt9bm9kZXMuZm9yRWFjaChkM19sYXlvdXRfcGFja0xpbmspO2EgPSBub2Rlc1swXTthLnggPSAtYS5yO2EueSA9IDA7Ym91bmQoYSk7aWYobiA+IDEpe2IgPSBub2Rlc1sxXTtiLnggPSBiLnI7Yi55ID0gMDtib3VuZChiKTtpZihuID4gMil7YyA9IG5vZGVzWzJdO2QzX2xheW91dF9wYWNrUGxhY2UoYSxiLGMpO2JvdW5kKGMpO2QzX2xheW91dF9wYWNrSW5zZXJ0KGEsYyk7YS5fcGFja19wcmV2ID0gYztkM19sYXlvdXRfcGFja0luc2VydChjLGIpO2IgPSBhLl9wYWNrX25leHQ7Zm9yKGkgPSAzO2kgPCBuO2krKykge2QzX2xheW91dF9wYWNrUGxhY2UoYSxiLGMgPSBub2Rlc1tpXSk7dmFyIGlzZWN0PTAsczE9MSxzMj0xO2ZvcihqID0gYi5fcGFja19uZXh0O2ogIT09IGI7aiA9IGouX3BhY2tfbmV4dCxzMSsrKSB7aWYoZDNfbGF5b3V0X3BhY2tJbnRlcnNlY3RzKGosYykpe2lzZWN0ID0gMTticmVhazt9fWlmKGlzZWN0ID09IDEpe2ZvcihrID0gYS5fcGFja19wcmV2O2sgIT09IGouX3BhY2tfcHJldjtrID0gay5fcGFja19wcmV2LHMyKyspIHtpZihkM19sYXlvdXRfcGFja0ludGVyc2VjdHMoayxjKSl7YnJlYWs7fX19aWYoaXNlY3Qpe2lmKHMxIDwgczIgfHwgczEgPT0gczIgJiYgYi5yIDwgYS5yKWQzX2xheW91dF9wYWNrU3BsaWNlKGEsYiA9IGopO2Vsc2UgZDNfbGF5b3V0X3BhY2tTcGxpY2UoYSA9IGssYik7aS0tO31lbHNlIHtkM19sYXlvdXRfcGFja0luc2VydChhLGMpO2IgPSBjO2JvdW5kKGMpO319fX12YXIgY3g9KHhNaW4gKyB4TWF4KSAvIDIsY3k9KHlNaW4gKyB5TWF4KSAvIDIsY3I9MDtmb3IoaSA9IDA7aSA8IG47aSsrKSB7YyA9IG5vZGVzW2ldO2MueCAtPSBjeDtjLnkgLT0gY3k7Y3IgPSBNYXRoLm1heChjcixjLnIgKyBNYXRoLnNxcnQoYy54ICogYy54ICsgYy55ICogYy55KSk7fW5vZGUuciA9IGNyO25vZGVzLmZvckVhY2goZDNfbGF5b3V0X3BhY2tVbmxpbmspO31mdW5jdGlvbiBkM19sYXlvdXRfcGFja0xpbmsobm9kZSl7bm9kZS5fcGFja19uZXh0ID0gbm9kZS5fcGFja19wcmV2ID0gbm9kZTt9ZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tVbmxpbmsobm9kZSl7ZGVsZXRlIG5vZGUuX3BhY2tfbmV4dDtkZWxldGUgbm9kZS5fcGFja19wcmV2O31mdW5jdGlvbiBkM19sYXlvdXRfcGFja1RyYW5zZm9ybShub2RlLHgseSxrKXt2YXIgY2hpbGRyZW49bm9kZS5jaGlsZHJlbjtub2RlLnggPSB4ICs9IGsgKiBub2RlLng7bm9kZS55ID0geSArPSBrICogbm9kZS55O25vZGUuciAqPSBrO2lmKGNoaWxkcmVuKXt2YXIgaT0tMSxuPWNoaWxkcmVuLmxlbmd0aDt3aGlsZSgrK2kgPCBuKSBkM19sYXlvdXRfcGFja1RyYW5zZm9ybShjaGlsZHJlbltpXSx4LHksayk7fX1mdW5jdGlvbiBkM19sYXlvdXRfcGFja1BsYWNlKGEsYixjKXt2YXIgZGI9YS5yICsgYy5yLGR4PWIueCAtIGEueCxkeT1iLnkgLSBhLnk7aWYoZGIgJiYgKGR4IHx8IGR5KSl7dmFyIGRhPWIuciArIGMucixkYz1keCAqIGR4ICsgZHkgKiBkeTtkYSAqPSBkYTtkYiAqPSBkYjt2YXIgeD0uNSArIChkYiAtIGRhKSAvICgyICogZGMpLHk9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMiAqIGRhICogKGRiICsgZGMpIC0gKGRiIC09IGRjKSAqIGRiIC0gZGEgKiBkYSkpIC8gKDIgKiBkYyk7Yy54ID0gYS54ICsgeCAqIGR4ICsgeSAqIGR5O2MueSA9IGEueSArIHggKiBkeSAtIHkgKiBkeDt9ZWxzZSB7Yy54ID0gYS54ICsgZGI7Yy55ID0gYS55O319ZDMubGF5b3V0LnRyZWUgPSBmdW5jdGlvbigpe3ZhciBoaWVyYXJjaHk9ZDMubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksc2VwYXJhdGlvbj1kM19sYXlvdXRfdHJlZVNlcGFyYXRpb24sc2l6ZT1bMSwxXSxub2RlU2l6ZT1udWxsO2Z1bmN0aW9uIHRyZWUoZCxpKXt2YXIgbm9kZXM9aGllcmFyY2h5LmNhbGwodGhpcyxkLGkpLHJvb3QwPW5vZGVzWzBdLHJvb3QxPXdyYXBUcmVlKHJvb3QwKTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290MSxmaXJzdFdhbGspLHJvb3QxLnBhcmVudC5tID0gLXJvb3QxLno7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKHJvb3QxLHNlY29uZFdhbGspO2lmKG5vZGVTaXplKWQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEJlZm9yZShyb290MCxzaXplTm9kZSk7ZWxzZSB7dmFyIGxlZnQ9cm9vdDAscmlnaHQ9cm9vdDAsYm90dG9tPXJvb3QwO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEJlZm9yZShyb290MCxmdW5jdGlvbihub2RlKXtpZihub2RlLnggPCBsZWZ0LngpbGVmdCA9IG5vZGU7aWYobm9kZS54ID4gcmlnaHQueClyaWdodCA9IG5vZGU7aWYobm9kZS5kZXB0aCA+IGJvdHRvbS5kZXB0aClib3R0b20gPSBub2RlO30pO3ZhciB0eD1zZXBhcmF0aW9uKGxlZnQscmlnaHQpIC8gMiAtIGxlZnQueCxreD1zaXplWzBdIC8gKHJpZ2h0LnggKyBzZXBhcmF0aW9uKHJpZ2h0LGxlZnQpIC8gMiArIHR4KSxreT1zaXplWzFdIC8gKGJvdHRvbS5kZXB0aCB8fCAxKTtkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRCZWZvcmUocm9vdDAsZnVuY3Rpb24obm9kZSl7bm9kZS54ID0gKG5vZGUueCArIHR4KSAqIGt4O25vZGUueSA9IG5vZGUuZGVwdGggKiBreTt9KTt9cmV0dXJuIG5vZGVzO31mdW5jdGlvbiB3cmFwVHJlZShyb290MCl7dmFyIHJvb3QxPXtBOm51bGwsY2hpbGRyZW46W3Jvb3QwXX0scXVldWU9W3Jvb3QxXSxub2RlMTt3aGlsZSgobm9kZTEgPSBxdWV1ZS5wb3AoKSkgIT0gbnVsbCkge2Zvcih2YXIgY2hpbGRyZW49bm9kZTEuY2hpbGRyZW4sY2hpbGQsaT0wLG49Y2hpbGRyZW4ubGVuZ3RoO2kgPCBuOysraSkge3F1ZXVlLnB1c2goKGNoaWxkcmVuW2ldID0gY2hpbGQgPSB7XzpjaGlsZHJlbltpXSxwYXJlbnQ6bm9kZTEsY2hpbGRyZW46KGNoaWxkID0gY2hpbGRyZW5baV0uY2hpbGRyZW4pICYmIGNoaWxkLnNsaWNlKCkgfHwgW10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6aX0pLmEgPSBjaGlsZCk7fX1yZXR1cm4gcm9vdDEuY2hpbGRyZW5bMF07fWZ1bmN0aW9uIGZpcnN0V2Fsayh2KXt2YXIgY2hpbGRyZW49di5jaGlsZHJlbixzaWJsaW5ncz12LnBhcmVudC5jaGlsZHJlbix3PXYuaT9zaWJsaW5nc1t2LmkgLSAxXTpudWxsO2lmKGNoaWxkcmVuLmxlbmd0aCl7ZDNfbGF5b3V0X3RyZWVTaGlmdCh2KTt2YXIgbWlkcG9pbnQ9KGNoaWxkcmVuWzBdLnogKyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS56KSAvIDI7aWYodyl7di56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sdy5fKTt2Lm0gPSB2LnogLSBtaWRwb2ludDt9ZWxzZSB7di56ID0gbWlkcG9pbnQ7fX1lbHNlIGlmKHcpe3YueiA9IHcueiArIHNlcGFyYXRpb24odi5fLHcuXyk7fXYucGFyZW50LkEgPSBhcHBvcnRpb24odix3LHYucGFyZW50LkEgfHwgc2libGluZ3NbMF0pO31mdW5jdGlvbiBzZWNvbmRXYWxrKHYpe3YuXy54ID0gdi56ICsgdi5wYXJlbnQubTt2Lm0gKz0gdi5wYXJlbnQubTt9ZnVuY3Rpb24gYXBwb3J0aW9uKHYsdyxhbmNlc3Rvcil7aWYodyl7dmFyIHZpcD12LHZvcD12LHZpbT13LHZvbT12aXAucGFyZW50LmNoaWxkcmVuWzBdLHNpcD12aXAubSxzb3A9dm9wLm0sc2ltPXZpbS5tLHNvbT12b20ubSxzaGlmdDt3aGlsZSgodmltID0gZDNfbGF5b3V0X3RyZWVSaWdodCh2aW0pLHZpcCA9IGQzX2xheW91dF90cmVlTGVmdCh2aXApLHZpbSAmJiB2aXApKSB7dm9tID0gZDNfbGF5b3V0X3RyZWVMZWZ0KHZvbSk7dm9wID0gZDNfbGF5b3V0X3RyZWVSaWdodCh2b3ApO3ZvcC5hID0gdjtzaGlmdCA9IHZpbS56ICsgc2ltIC0gdmlwLnogLSBzaXAgKyBzZXBhcmF0aW9uKHZpbS5fLHZpcC5fKTtpZihzaGlmdCA+IDApe2QzX2xheW91dF90cmVlTW92ZShkM19sYXlvdXRfdHJlZUFuY2VzdG9yKHZpbSx2LGFuY2VzdG9yKSx2LHNoaWZ0KTtzaXAgKz0gc2hpZnQ7c29wICs9IHNoaWZ0O31zaW0gKz0gdmltLm07c2lwICs9IHZpcC5tO3NvbSArPSB2b20ubTtzb3AgKz0gdm9wLm07fWlmKHZpbSAmJiAhZDNfbGF5b3V0X3RyZWVSaWdodCh2b3ApKXt2b3AudCA9IHZpbTt2b3AubSArPSBzaW0gLSBzb3A7fWlmKHZpcCAmJiAhZDNfbGF5b3V0X3RyZWVMZWZ0KHZvbSkpe3ZvbS50ID0gdmlwO3ZvbS5tICs9IHNpcCAtIHNvbTthbmNlc3RvciA9IHY7fX1yZXR1cm4gYW5jZXN0b3I7fWZ1bmN0aW9uIHNpemVOb2RlKG5vZGUpe25vZGUueCAqPSBzaXplWzBdO25vZGUueSA9IG5vZGUuZGVwdGggKiBzaXplWzFdO310cmVlLnNlcGFyYXRpb24gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc2VwYXJhdGlvbjtzZXBhcmF0aW9uID0geDtyZXR1cm4gdHJlZTt9O3RyZWUuc2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBub2RlU2l6ZT9udWxsOnNpemU7bm9kZVNpemUgPSAoc2l6ZSA9IHgpID09IG51bGw/c2l6ZU5vZGU6bnVsbDtyZXR1cm4gdHJlZTt9O3RyZWUubm9kZVNpemUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbm9kZVNpemU/c2l6ZTpudWxsO25vZGVTaXplID0gKHNpemUgPSB4KSA9PSBudWxsP251bGw6c2l6ZU5vZGU7cmV0dXJuIHRyZWU7fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZCh0cmVlLGhpZXJhcmNoeSk7fTtmdW5jdGlvbiBkM19sYXlvdXRfdHJlZVNlcGFyYXRpb24oYSxiKXtyZXR1cm4gYS5wYXJlbnQgPT0gYi5wYXJlbnQ/MToyO31mdW5jdGlvbiBkM19sYXlvdXRfdHJlZUxlZnQodil7dmFyIGNoaWxkcmVuPXYuY2hpbGRyZW47cmV0dXJuIGNoaWxkcmVuLmxlbmd0aD9jaGlsZHJlblswXTp2LnQ7fWZ1bmN0aW9uIGQzX2xheW91dF90cmVlUmlnaHQodil7dmFyIGNoaWxkcmVuPXYuY2hpbGRyZW4sbjtyZXR1cm4gKG4gPSBjaGlsZHJlbi5sZW5ndGgpP2NoaWxkcmVuW24gLSAxXTp2LnQ7fWZ1bmN0aW9uIGQzX2xheW91dF90cmVlTW92ZSh3bSx3cCxzaGlmdCl7dmFyIGNoYW5nZT1zaGlmdCAvICh3cC5pIC0gd20uaSk7d3AuYyAtPSBjaGFuZ2U7d3AucyArPSBzaGlmdDt3bS5jICs9IGNoYW5nZTt3cC56ICs9IHNoaWZ0O3dwLm0gKz0gc2hpZnQ7fWZ1bmN0aW9uIGQzX2xheW91dF90cmVlU2hpZnQodil7dmFyIHNoaWZ0PTAsY2hhbmdlPTAsY2hpbGRyZW49di5jaGlsZHJlbixpPWNoaWxkcmVuLmxlbmd0aCx3O3doaWxlKC0taSA+PSAwKSB7dyA9IGNoaWxkcmVuW2ldO3cueiArPSBzaGlmdDt3Lm0gKz0gc2hpZnQ7c2hpZnQgKz0gdy5zICsgKGNoYW5nZSArPSB3LmMpO319ZnVuY3Rpb24gZDNfbGF5b3V0X3RyZWVBbmNlc3Rvcih2aW0sdixhbmNlc3Rvcil7cmV0dXJuIHZpbS5hLnBhcmVudCA9PT0gdi5wYXJlbnQ/dmltLmE6YW5jZXN0b3I7fWQzLmxheW91dC5jbHVzdGVyID0gZnVuY3Rpb24oKXt2YXIgaGllcmFyY2h5PWQzLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHNlcGFyYXRpb249ZDNfbGF5b3V0X3RyZWVTZXBhcmF0aW9uLHNpemU9WzEsMV0sbm9kZVNpemU9ZmFsc2U7ZnVuY3Rpb24gY2x1c3RlcihkLGkpe3ZhciBub2Rlcz1oaWVyYXJjaHkuY2FsbCh0aGlzLGQsaSkscm9vdD1ub2Rlc1swXSxwcmV2aW91c05vZGUseD0wO2QzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsZnVuY3Rpb24obm9kZSl7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW47aWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKXtub2RlLnggPSBkM19sYXlvdXRfY2x1c3RlclgoY2hpbGRyZW4pO25vZGUueSA9IGQzX2xheW91dF9jbHVzdGVyWShjaGlsZHJlbik7fWVsc2Uge25vZGUueCA9IHByZXZpb3VzTm9kZT94ICs9IHNlcGFyYXRpb24obm9kZSxwcmV2aW91c05vZGUpOjA7bm9kZS55ID0gMDtwcmV2aW91c05vZGUgPSBub2RlO319KTt2YXIgbGVmdD1kM19sYXlvdXRfY2x1c3RlckxlZnQocm9vdCkscmlnaHQ9ZDNfbGF5b3V0X2NsdXN0ZXJSaWdodChyb290KSx4MD1sZWZ0LnggLSBzZXBhcmF0aW9uKGxlZnQscmlnaHQpIC8gMix4MT1yaWdodC54ICsgc2VwYXJhdGlvbihyaWdodCxsZWZ0KSAvIDI7ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCxub2RlU2l6ZT9mdW5jdGlvbihub2RlKXtub2RlLnggPSAobm9kZS54IC0gcm9vdC54KSAqIHNpemVbMF07bm9kZS55ID0gKHJvb3QueSAtIG5vZGUueSkgKiBzaXplWzFdO306ZnVuY3Rpb24obm9kZSl7bm9kZS54ID0gKG5vZGUueCAtIHgwKSAvICh4MSAtIHgwKSAqIHNpemVbMF07bm9kZS55ID0gKDEgLSAocm9vdC55P25vZGUueSAvIHJvb3QueToxKSkgKiBzaXplWzFdO30pO3JldHVybiBub2Rlczt9Y2x1c3Rlci5zZXBhcmF0aW9uID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNlcGFyYXRpb247c2VwYXJhdGlvbiA9IHg7cmV0dXJuIGNsdXN0ZXI7fTtjbHVzdGVyLnNpemUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbm9kZVNpemU/bnVsbDpzaXplO25vZGVTaXplID0gKHNpemUgPSB4KSA9PSBudWxsO3JldHVybiBjbHVzdGVyO307Y2x1c3Rlci5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBub2RlU2l6ZT9zaXplOm51bGw7bm9kZVNpemUgPSAoc2l6ZSA9IHgpICE9IG51bGw7cmV0dXJuIGNsdXN0ZXI7fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZChjbHVzdGVyLGhpZXJhcmNoeSk7fTtmdW5jdGlvbiBkM19sYXlvdXRfY2x1c3RlclkoY2hpbGRyZW4pe3JldHVybiAxICsgZDMubWF4KGNoaWxkcmVuLGZ1bmN0aW9uKGNoaWxkKXtyZXR1cm4gY2hpbGQueTt9KTt9ZnVuY3Rpb24gZDNfbGF5b3V0X2NsdXN0ZXJYKGNoaWxkcmVuKXtyZXR1cm4gY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uKHgsY2hpbGQpe3JldHVybiB4ICsgY2hpbGQueDt9LDApIC8gY2hpbGRyZW4ubGVuZ3RoO31mdW5jdGlvbiBkM19sYXlvdXRfY2x1c3RlckxlZnQoX3gyKXt2YXIgX2FnYWluPXRydWU7X2Z1bmN0aW9uOiB3aGlsZShfYWdhaW4pIHt2YXIgbm9kZT1feDI7X2FnYWluID0gZmFsc2U7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW47aWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKXtfeDIgPSBjaGlsZHJlblswXTtfYWdhaW4gPSB0cnVlO2NoaWxkcmVuID0gdW5kZWZpbmVkO2NvbnRpbnVlIF9mdW5jdGlvbjt9ZWxzZSB7cmV0dXJuIG5vZGU7fX19ZnVuY3Rpb24gZDNfbGF5b3V0X2NsdXN0ZXJSaWdodChfeDMpe3ZhciBfYWdhaW4yPXRydWU7X2Z1bmN0aW9uMjogd2hpbGUoX2FnYWluMikge3ZhciBub2RlPV94MztfYWdhaW4yID0gZmFsc2U7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW4sbjtpZihjaGlsZHJlbiAmJiAobiA9IGNoaWxkcmVuLmxlbmd0aCkpe194MyA9IGNoaWxkcmVuW24gLSAxXTtfYWdhaW4yID0gdHJ1ZTtjaGlsZHJlbiA9IG4gPSB1bmRlZmluZWQ7Y29udGludWUgX2Z1bmN0aW9uMjt9ZWxzZSB7cmV0dXJuIG5vZGU7fX19ZDMubGF5b3V0LnRyZWVtYXAgPSBmdW5jdGlvbigpe3ZhciBoaWVyYXJjaHk9ZDMubGF5b3V0LmhpZXJhcmNoeSgpLHJvdW5kPU1hdGgucm91bmQsc2l6ZT1bMSwxXSxwYWRkaW5nPW51bGwscGFkPWQzX2xheW91dF90cmVlbWFwUGFkTnVsbCxzdGlja3k9ZmFsc2Usc3RpY2tpZXMsbW9kZT1cInNxdWFyaWZ5XCIscmF0aW89LjUgKiAoMSArIE1hdGguc3FydCg1KSk7ZnVuY3Rpb24gc2NhbGUoY2hpbGRyZW4sayl7dmFyIGk9LTEsbj1jaGlsZHJlbi5sZW5ndGgsY2hpbGQsYXJlYTt3aGlsZSgrK2kgPCBuKSB7YXJlYSA9IChjaGlsZCA9IGNoaWxkcmVuW2ldKS52YWx1ZSAqIChrIDwgMD8wOmspO2NoaWxkLmFyZWEgPSBpc05hTihhcmVhKSB8fCBhcmVhIDw9IDA/MDphcmVhO319ZnVuY3Rpb24gc3F1YXJpZnkobm9kZSl7dmFyIGNoaWxkcmVuPW5vZGUuY2hpbGRyZW47aWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKXt2YXIgcmVjdD1wYWQobm9kZSkscm93PVtdLHJlbWFpbmluZz1jaGlsZHJlbi5zbGljZSgpLGNoaWxkLGJlc3Q9SW5maW5pdHksc2NvcmUsdT1tb2RlID09PSBcInNsaWNlXCI/cmVjdC5keDptb2RlID09PSBcImRpY2VcIj9yZWN0LmR5Om1vZGUgPT09IFwic2xpY2UtZGljZVwiP25vZGUuZGVwdGggJiAxP3JlY3QuZHk6cmVjdC5keDpNYXRoLm1pbihyZWN0LmR4LHJlY3QuZHkpLG47c2NhbGUocmVtYWluaW5nLHJlY3QuZHggKiByZWN0LmR5IC8gbm9kZS52YWx1ZSk7cm93LmFyZWEgPSAwO3doaWxlKChuID0gcmVtYWluaW5nLmxlbmd0aCkgPiAwKSB7cm93LnB1c2goY2hpbGQgPSByZW1haW5pbmdbbiAtIDFdKTtyb3cuYXJlYSArPSBjaGlsZC5hcmVhO2lmKG1vZGUgIT09IFwic3F1YXJpZnlcIiB8fCAoc2NvcmUgPSB3b3JzdChyb3csdSkpIDw9IGJlc3Qpe3JlbWFpbmluZy5wb3AoKTtiZXN0ID0gc2NvcmU7fWVsc2Uge3Jvdy5hcmVhIC09IHJvdy5wb3AoKS5hcmVhO3Bvc2l0aW9uKHJvdyx1LHJlY3QsZmFsc2UpO3UgPSBNYXRoLm1pbihyZWN0LmR4LHJlY3QuZHkpO3Jvdy5sZW5ndGggPSByb3cuYXJlYSA9IDA7YmVzdCA9IEluZmluaXR5O319aWYocm93Lmxlbmd0aCl7cG9zaXRpb24ocm93LHUscmVjdCx0cnVlKTtyb3cubGVuZ3RoID0gcm93LmFyZWEgPSAwO31jaGlsZHJlbi5mb3JFYWNoKHNxdWFyaWZ5KTt9fWZ1bmN0aW9uIHN0aWNraWZ5KG5vZGUpe3ZhciBjaGlsZHJlbj1ub2RlLmNoaWxkcmVuO2lmKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCl7dmFyIHJlY3Q9cGFkKG5vZGUpLHJlbWFpbmluZz1jaGlsZHJlbi5zbGljZSgpLGNoaWxkLHJvdz1bXTtzY2FsZShyZW1haW5pbmcscmVjdC5keCAqIHJlY3QuZHkgLyBub2RlLnZhbHVlKTtyb3cuYXJlYSA9IDA7d2hpbGUoY2hpbGQgPSByZW1haW5pbmcucG9wKCkpIHtyb3cucHVzaChjaGlsZCk7cm93LmFyZWEgKz0gY2hpbGQuYXJlYTtpZihjaGlsZC56ICE9IG51bGwpe3Bvc2l0aW9uKHJvdyxjaGlsZC56P3JlY3QuZHg6cmVjdC5keSxyZWN0LCFyZW1haW5pbmcubGVuZ3RoKTtyb3cubGVuZ3RoID0gcm93LmFyZWEgPSAwO319Y2hpbGRyZW4uZm9yRWFjaChzdGlja2lmeSk7fX1mdW5jdGlvbiB3b3JzdChyb3csdSl7dmFyIHM9cm93LmFyZWEscixybWF4PTAscm1pbj1JbmZpbml0eSxpPS0xLG49cm93Lmxlbmd0aDt3aGlsZSgrK2kgPCBuKSB7aWYoIShyID0gcm93W2ldLmFyZWEpKWNvbnRpbnVlO2lmKHIgPCBybWluKXJtaW4gPSByO2lmKHIgPiBybWF4KXJtYXggPSByO31zICo9IHM7dSAqPSB1O3JldHVybiBzP01hdGgubWF4KHUgKiBybWF4ICogcmF0aW8gLyBzLHMgLyAodSAqIHJtaW4gKiByYXRpbykpOkluZmluaXR5O31mdW5jdGlvbiBwb3NpdGlvbihyb3csdSxyZWN0LGZsdXNoKXt2YXIgaT0tMSxuPXJvdy5sZW5ndGgseD1yZWN0LngseT1yZWN0Lnksdj11P3JvdW5kKHJvdy5hcmVhIC8gdSk6MCxvO2lmKHUgPT0gcmVjdC5keCl7aWYoZmx1c2ggfHwgdiA+IHJlY3QuZHkpdiA9IHJlY3QuZHk7d2hpbGUoKytpIDwgbikge28gPSByb3dbaV07by54ID0geDtvLnkgPSB5O28uZHkgPSB2O3ggKz0gby5keCA9IE1hdGgubWluKHJlY3QueCArIHJlY3QuZHggLSB4LHY/cm91bmQoby5hcmVhIC8gdik6MCk7fW8ueiA9IHRydWU7by5keCArPSByZWN0LnggKyByZWN0LmR4IC0geDtyZWN0LnkgKz0gdjtyZWN0LmR5IC09IHY7fWVsc2Uge2lmKGZsdXNoIHx8IHYgPiByZWN0LmR4KXYgPSByZWN0LmR4O3doaWxlKCsraSA8IG4pIHtvID0gcm93W2ldO28ueCA9IHg7by55ID0geTtvLmR4ID0gdjt5ICs9IG8uZHkgPSBNYXRoLm1pbihyZWN0LnkgKyByZWN0LmR5IC0geSx2P3JvdW5kKG8uYXJlYSAvIHYpOjApO31vLnogPSBmYWxzZTtvLmR5ICs9IHJlY3QueSArIHJlY3QuZHkgLSB5O3JlY3QueCArPSB2O3JlY3QuZHggLT0gdjt9fWZ1bmN0aW9uIHRyZWVtYXAoZCl7dmFyIG5vZGVzPXN0aWNraWVzIHx8IGhpZXJhcmNoeShkKSxyb290PW5vZGVzWzBdO3Jvb3QueCA9IHJvb3QueSA9IDA7aWYocm9vdC52YWx1ZSlyb290LmR4ID0gc2l6ZVswXSxyb290LmR5ID0gc2l6ZVsxXTtlbHNlIHJvb3QuZHggPSByb290LmR5ID0gMDtpZihzdGlja2llcyloaWVyYXJjaHkucmV2YWx1ZShyb290KTtzY2FsZShbcm9vdF0scm9vdC5keCAqIHJvb3QuZHkgLyByb290LnZhbHVlKTsoc3RpY2tpZXM/c3RpY2tpZnk6c3F1YXJpZnkpKHJvb3QpO2lmKHN0aWNreSlzdGlja2llcyA9IG5vZGVzO3JldHVybiBub2Rlczt9dHJlZW1hcC5zaXplID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNpemU7c2l6ZSA9IHg7cmV0dXJuIHRyZWVtYXA7fTt0cmVlbWFwLnBhZGRpbmcgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcGFkZGluZztmdW5jdGlvbiBwYWRGdW5jdGlvbihub2RlKXt2YXIgcD14LmNhbGwodHJlZW1hcCxub2RlLG5vZGUuZGVwdGgpO3JldHVybiBwID09IG51bGw/ZDNfbGF5b3V0X3RyZWVtYXBQYWROdWxsKG5vZGUpOmQzX2xheW91dF90cmVlbWFwUGFkKG5vZGUsdHlwZW9mIHAgPT09IFwibnVtYmVyXCI/W3AscCxwLHBdOnApO31mdW5jdGlvbiBwYWRDb25zdGFudChub2RlKXtyZXR1cm4gZDNfbGF5b3V0X3RyZWVtYXBQYWQobm9kZSx4KTt9dmFyIHR5cGU7cGFkID0gKHBhZGRpbmcgPSB4KSA9PSBudWxsP2QzX2xheW91dF90cmVlbWFwUGFkTnVsbDoodHlwZSA9IHR5cGVvZiB4KSA9PT0gXCJmdW5jdGlvblwiP3BhZEZ1bmN0aW9uOnR5cGUgPT09IFwibnVtYmVyXCI/KHggPSBbeCx4LHgseF0scGFkQ29uc3RhbnQpOnBhZENvbnN0YW50O3JldHVybiB0cmVlbWFwO307dHJlZW1hcC5yb3VuZCA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByb3VuZCAhPSBOdW1iZXI7cm91bmQgPSB4P01hdGgucm91bmQ6TnVtYmVyO3JldHVybiB0cmVlbWFwO307dHJlZW1hcC5zdGlja3kgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc3RpY2t5O3N0aWNreSA9IHg7c3RpY2tpZXMgPSBudWxsO3JldHVybiB0cmVlbWFwO307dHJlZW1hcC5yYXRpbyA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByYXRpbztyYXRpbyA9IHg7cmV0dXJuIHRyZWVtYXA7fTt0cmVlbWFwLm1vZGUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbW9kZTttb2RlID0geCArIFwiXCI7cmV0dXJuIHRyZWVtYXA7fTtyZXR1cm4gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZCh0cmVlbWFwLGhpZXJhcmNoeSk7fTtmdW5jdGlvbiBkM19sYXlvdXRfdHJlZW1hcFBhZE51bGwobm9kZSl7cmV0dXJuIHt4Om5vZGUueCx5Om5vZGUueSxkeDpub2RlLmR4LGR5Om5vZGUuZHl9O31mdW5jdGlvbiBkM19sYXlvdXRfdHJlZW1hcFBhZChub2RlLHBhZGRpbmcpe3ZhciB4PW5vZGUueCArIHBhZGRpbmdbM10seT1ub2RlLnkgKyBwYWRkaW5nWzBdLGR4PW5vZGUuZHggLSBwYWRkaW5nWzFdIC0gcGFkZGluZ1szXSxkeT1ub2RlLmR5IC0gcGFkZGluZ1swXSAtIHBhZGRpbmdbMl07aWYoZHggPCAwKXt4ICs9IGR4IC8gMjtkeCA9IDA7fWlmKGR5IDwgMCl7eSArPSBkeSAvIDI7ZHkgPSAwO31yZXR1cm4ge3g6eCx5OnksZHg6ZHgsZHk6ZHl9O31kMy5yYW5kb20gPSB7bm9ybWFsOmZ1bmN0aW9uIG5vcm1hbCjCtSzPgyl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuIDwgMinPgyA9IDE7aWYobiA8IDEpwrUgPSAwO3JldHVybiBmdW5jdGlvbigpe3ZhciB4LHkscjtkbyB7eCA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTt5ID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO3IgPSB4ICogeCArIHkgKiB5O313aGlsZSghciB8fCByID4gMSk7cmV0dXJuIMK1ICsgz4MgKiB4ICogTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocikgLyByKTt9O30sbG9nTm9ybWFsOmZ1bmN0aW9uIGxvZ05vcm1hbCgpe3ZhciByYW5kb209ZDMucmFuZG9tLm5vcm1hbC5hcHBseShkMyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChyYW5kb20oKSk7fTt9LGJhdGVzOmZ1bmN0aW9uIGJhdGVzKG0pe3ZhciByYW5kb209ZDMucmFuZG9tLmlyd2luSGFsbChtKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmFuZG9tKCkgLyBtO307fSxpcndpbkhhbGw6ZnVuY3Rpb24gaXJ3aW5IYWxsKG0pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz0wLGo9MDtqIDwgbTtqKyspIHMgKz0gTWF0aC5yYW5kb20oKTtyZXR1cm4gczt9O319O2QzLnNjYWxlID0ge307ZnVuY3Rpb24gZDNfc2NhbGVFeHRlbnQoZG9tYWluKXt2YXIgc3RhcnQ9ZG9tYWluWzBdLHN0b3A9ZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXTtyZXR1cm4gc3RhcnQgPCBzdG9wP1tzdGFydCxzdG9wXTpbc3RvcCxzdGFydF07fWZ1bmN0aW9uIGQzX3NjYWxlUmFuZ2Uoc2NhbGUpe3JldHVybiBzY2FsZS5yYW5nZUV4dGVudD9zY2FsZS5yYW5nZUV4dGVudCgpOmQzX3NjYWxlRXh0ZW50KHNjYWxlLnJhbmdlKCkpO31mdW5jdGlvbiBkM19zY2FsZV9iaWxpbmVhcihkb21haW4scmFuZ2UsdW5pbnRlcnBvbGF0ZSxpbnRlcnBvbGF0ZSl7dmFyIHU9dW5pbnRlcnBvbGF0ZShkb21haW5bMF0sZG9tYWluWzFdKSxpPWludGVycG9sYXRlKHJhbmdlWzBdLHJhbmdlWzFdKTtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIGkodSh4KSk7fTt9ZnVuY3Rpb24gZDNfc2NhbGVfbmljZShkb21haW4sbmljZSl7dmFyIGkwPTAsaTE9ZG9tYWluLmxlbmd0aCAtIDEseDA9ZG9tYWluW2kwXSx4MT1kb21haW5baTFdLGR4O2lmKHgxIDwgeDApe2R4ID0gaTAsaTAgPSBpMSxpMSA9IGR4O2R4ID0geDAseDAgPSB4MSx4MSA9IGR4O31kb21haW5baTBdID0gbmljZS5mbG9vcih4MCk7ZG9tYWluW2kxXSA9IG5pY2UuY2VpbCh4MSk7cmV0dXJuIGRvbWFpbjt9ZnVuY3Rpb24gZDNfc2NhbGVfbmljZVN0ZXAoc3RlcCl7cmV0dXJuIHN0ZXA/e2Zsb29yOmZ1bmN0aW9uIGZsb29yKHgpe3JldHVybiBNYXRoLmZsb29yKHggLyBzdGVwKSAqIHN0ZXA7fSxjZWlsOmZ1bmN0aW9uIGNlaWwoeCl7cmV0dXJuIE1hdGguY2VpbCh4IC8gc3RlcCkgKiBzdGVwO319OmQzX3NjYWxlX25pY2VJZGVudGl0eTt9dmFyIGQzX3NjYWxlX25pY2VJZGVudGl0eT17Zmxvb3I6ZDNfaWRlbnRpdHksY2VpbDpkM19pZGVudGl0eX07ZnVuY3Rpb24gZDNfc2NhbGVfcG9seWxpbmVhcihkb21haW4scmFuZ2UsdW5pbnRlcnBvbGF0ZSxpbnRlcnBvbGF0ZSl7dmFyIHU9W10saT1bXSxqPTAsaz1NYXRoLm1pbihkb21haW4ubGVuZ3RoLHJhbmdlLmxlbmd0aCkgLSAxO2lmKGRvbWFpbltrXSA8IGRvbWFpblswXSl7ZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO3JhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7fXdoaWxlKCsraiA8PSBrKSB7dS5wdXNoKHVuaW50ZXJwb2xhdGUoZG9tYWluW2ogLSAxXSxkb21haW5bal0pKTtpLnB1c2goaW50ZXJwb2xhdGUocmFuZ2VbaiAtIDFdLHJhbmdlW2pdKSk7fXJldHVybiBmdW5jdGlvbih4KXt2YXIgaj1kMy5iaXNlY3QoZG9tYWluLHgsMSxrKSAtIDE7cmV0dXJuIGlbal0odVtqXSh4KSk7fTt9ZDMuc2NhbGUubGluZWFyID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyKFswLDFdLFswLDFdLGQzX2ludGVycG9sYXRlLGZhbHNlKTt9O2Z1bmN0aW9uIGQzX3NjYWxlX2xpbmVhcihkb21haW4scmFuZ2UsaW50ZXJwb2xhdGUsY2xhbXApe3ZhciBvdXRwdXQsaW5wdXQ7ZnVuY3Rpb24gcmVzY2FsZSgpe3ZhciBsaW5lYXI9TWF0aC5taW4oZG9tYWluLmxlbmd0aCxyYW5nZS5sZW5ndGgpID4gMj9kM19zY2FsZV9wb2x5bGluZWFyOmQzX3NjYWxlX2JpbGluZWFyLHVuaW50ZXJwb2xhdGU9Y2xhbXA/ZDNfdW5pbnRlcnBvbGF0ZUNsYW1wOmQzX3VuaW50ZXJwb2xhdGVOdW1iZXI7b3V0cHV0ID0gbGluZWFyKGRvbWFpbixyYW5nZSx1bmludGVycG9sYXRlLGludGVycG9sYXRlKTtpbnB1dCA9IGxpbmVhcihyYW5nZSxkb21haW4sdW5pbnRlcnBvbGF0ZSxkM19pbnRlcnBvbGF0ZSk7cmV0dXJuIHNjYWxlO31mdW5jdGlvbiBzY2FsZSh4KXtyZXR1cm4gb3V0cHV0KHgpO31zY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KXtyZXR1cm4gaW5wdXQoeSk7fTtzY2FsZS5kb21haW4gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZG9tYWluO2RvbWFpbiA9IHgubWFwKE51bWJlcik7cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKHgpe3JldHVybiBzY2FsZS5yYW5nZSh4KS5pbnRlcnBvbGF0ZShkM19pbnRlcnBvbGF0ZVJvdW5kKTt9O3NjYWxlLmNsYW1wID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGNsYW1wO2NsYW1wID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaW50ZXJwb2xhdGU7aW50ZXJwb2xhdGUgPSB4O3JldHVybiByZXNjYWxlKCk7fTtzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKG0pe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sbSk7fTtzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24obSxmb3JtYXQpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbixtLGZvcm1hdCk7fTtzY2FsZS5uaWNlID0gZnVuY3Rpb24obSl7ZDNfc2NhbGVfbGluZWFyTmljZShkb21haW4sbSk7cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9saW5lYXIoZG9tYWluLHJhbmdlLGludGVycG9sYXRlLGNsYW1wKTt9O3JldHVybiByZXNjYWxlKCk7fWZ1bmN0aW9uIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpe3JldHVybiBkMy5yZWJpbmQoc2NhbGUsbGluZWFyLFwicmFuZ2VcIixcInJhbmdlUm91bmRcIixcImludGVycG9sYXRlXCIsXCJjbGFtcFwiKTt9ZnVuY3Rpb24gZDNfc2NhbGVfbGluZWFyTmljZShkb21haW4sbSl7cmV0dXJuIGQzX3NjYWxlX25pY2UoZG9tYWluLGQzX3NjYWxlX25pY2VTdGVwKGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4sbSlbMl0pKTt9ZnVuY3Rpb24gZDNfc2NhbGVfbGluZWFyVGlja1JhbmdlKGRvbWFpbixtKXtpZihtID09IG51bGwpbSA9IDEwO3ZhciBleHRlbnQ9ZDNfc2NhbGVFeHRlbnQoZG9tYWluKSxzcGFuPWV4dGVudFsxXSAtIGV4dGVudFswXSxzdGVwPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coc3BhbiAvIG0pIC8gTWF0aC5MTjEwKSksZXJyPW0gLyBzcGFuICogc3RlcDtpZihlcnIgPD0gLjE1KXN0ZXAgKj0gMTA7ZWxzZSBpZihlcnIgPD0gLjM1KXN0ZXAgKj0gNTtlbHNlIGlmKGVyciA8PSAuNzUpc3RlcCAqPSAyO2V4dGVudFswXSA9IE1hdGguY2VpbChleHRlbnRbMF0gLyBzdGVwKSAqIHN0ZXA7ZXh0ZW50WzFdID0gTWF0aC5mbG9vcihleHRlbnRbMV0gLyBzdGVwKSAqIHN0ZXAgKyBzdGVwICogLjU7ZXh0ZW50WzJdID0gc3RlcDtyZXR1cm4gZXh0ZW50O31mdW5jdGlvbiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sbSl7cmV0dXJuIGQzLnJhbmdlLmFwcGx5KGQzLGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4sbSkpO31mdW5jdGlvbiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbixtLGZvcm1hdCl7dmFyIHJhbmdlPWQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4sbSk7aWYoZm9ybWF0KXt2YXIgbWF0Y2g9ZDNfZm9ybWF0X3JlLmV4ZWMoZm9ybWF0KTttYXRjaC5zaGlmdCgpO2lmKG1hdGNoWzhdID09PSBcInNcIil7dmFyIHByZWZpeD1kMy5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoYWJzKHJhbmdlWzBdKSxhYnMocmFuZ2VbMV0pKSk7aWYoIW1hdGNoWzddKW1hdGNoWzddID0gXCIuXCIgKyBkM19zY2FsZV9saW5lYXJQcmVjaXNpb24ocHJlZml4LnNjYWxlKHJhbmdlWzJdKSk7bWF0Y2hbOF0gPSBcImZcIjtmb3JtYXQgPSBkMy5mb3JtYXQobWF0Y2guam9pbihcIlwiKSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBmb3JtYXQocHJlZml4LnNjYWxlKGQpKSArIHByZWZpeC5zeW1ib2w7fTt9aWYoIW1hdGNoWzddKW1hdGNoWzddID0gXCIuXCIgKyBkM19zY2FsZV9saW5lYXJGb3JtYXRQcmVjaXNpb24obWF0Y2hbOF0scmFuZ2UpO2Zvcm1hdCA9IG1hdGNoLmpvaW4oXCJcIik7fWVsc2Uge2Zvcm1hdCA9IFwiLC5cIiArIGQzX3NjYWxlX2xpbmVhclByZWNpc2lvbihyYW5nZVsyXSkgKyBcImZcIjt9cmV0dXJuIGQzLmZvcm1hdChmb3JtYXQpO312YXIgZDNfc2NhbGVfbGluZWFyRm9ybWF0U2lnbmlmaWNhbnQ9e3M6MSxnOjEscDoxLHI6MSxlOjF9O2Z1bmN0aW9uIGQzX3NjYWxlX2xpbmVhclByZWNpc2lvbih2YWx1ZSl7cmV0dXJuIC1NYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4xMCArIC4wMSk7fWZ1bmN0aW9uIGQzX3NjYWxlX2xpbmVhckZvcm1hdFByZWNpc2lvbih0eXBlLHJhbmdlKXt2YXIgcD1kM19zY2FsZV9saW5lYXJQcmVjaXNpb24ocmFuZ2VbMl0pO3JldHVybiB0eXBlIGluIGQzX3NjYWxlX2xpbmVhckZvcm1hdFNpZ25pZmljYW50P01hdGguYWJzKHAgLSBkM19zY2FsZV9saW5lYXJQcmVjaXNpb24oTWF0aC5tYXgoYWJzKHJhbmdlWzBdKSxhYnMocmFuZ2VbMV0pKSkpICsgKyh0eXBlICE9PSBcImVcIik6cCAtICh0eXBlID09PSBcIiVcIikgKiAyO31kMy5zY2FsZS5sb2cgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9sb2coZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCx0cnVlLFsxLDEwXSk7fTtmdW5jdGlvbiBkM19zY2FsZV9sb2cobGluZWFyLGJhc2UscG9zaXRpdmUsZG9tYWluKXtmdW5jdGlvbiBsb2coeCl7cmV0dXJuIChwb3NpdGl2ZT9NYXRoLmxvZyh4IDwgMD8wOngpOi1NYXRoLmxvZyh4ID4gMD8wOi14KSkgLyBNYXRoLmxvZyhiYXNlKTt9ZnVuY3Rpb24gcG93KHgpe3JldHVybiBwb3NpdGl2ZT9NYXRoLnBvdyhiYXNlLHgpOi1NYXRoLnBvdyhiYXNlLC14KTt9ZnVuY3Rpb24gc2NhbGUoeCl7cmV0dXJuIGxpbmVhcihsb2coeCkpO31zY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih4KXtyZXR1cm4gcG93KGxpbmVhci5pbnZlcnQoeCkpO307c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRvbWFpbjtwb3NpdGl2ZSA9IHhbMF0gPj0gMDtsaW5lYXIuZG9tYWluKChkb21haW4gPSB4Lm1hcChOdW1iZXIpKS5tYXAobG9nKSk7cmV0dXJuIHNjYWxlO307c2NhbGUuYmFzZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBiYXNlO2Jhc2UgPSArXztsaW5lYXIuZG9tYWluKGRvbWFpbi5tYXAobG9nKSk7cmV0dXJuIHNjYWxlO307c2NhbGUubmljZSA9IGZ1bmN0aW9uKCl7dmFyIG5pY2VkPWQzX3NjYWxlX25pY2UoZG9tYWluLm1hcChsb2cpLHBvc2l0aXZlP01hdGg6ZDNfc2NhbGVfbG9nTmljZU5lZ2F0aXZlKTtsaW5lYXIuZG9tYWluKG5pY2VkKTtkb21haW4gPSBuaWNlZC5tYXAocG93KTtyZXR1cm4gc2NhbGU7fTtzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKCl7dmFyIGV4dGVudD1kM19zY2FsZUV4dGVudChkb21haW4pLHRpY2tzPVtdLHU9ZXh0ZW50WzBdLHY9ZXh0ZW50WzFdLGk9TWF0aC5mbG9vcihsb2codSkpLGo9TWF0aC5jZWlsKGxvZyh2KSksbj1iYXNlICUgMT8yOmJhc2U7aWYoaXNGaW5pdGUoaiAtIGkpKXtpZihwb3NpdGl2ZSl7Zm9yKDtpIDwgajtpKyspIGZvcih2YXIgaz0xO2sgPCBuO2srKykgdGlja3MucHVzaChwb3coaSkgKiBrKTt0aWNrcy5wdXNoKHBvdyhpKSk7fWVsc2Uge3RpY2tzLnB1c2gocG93KGkpKTtmb3IoO2krKyA8IGo7KSBmb3IodmFyIGs9biAtIDE7ayA+IDA7ay0tKSB0aWNrcy5wdXNoKHBvdyhpKSAqIGspO31mb3IoaSA9IDA7dGlja3NbaV0gPCB1O2krKykge31mb3IoaiA9IHRpY2tzLmxlbmd0aDt0aWNrc1tqIC0gMV0gPiB2O2otLSkge310aWNrcyA9IHRpY2tzLnNsaWNlKGksaik7fXJldHVybiB0aWNrczt9O3NjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihuLGZvcm1hdCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQzX3NjYWxlX2xvZ0Zvcm1hdDtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilmb3JtYXQgPSBkM19zY2FsZV9sb2dGb3JtYXQ7ZWxzZSBpZih0eXBlb2YgZm9ybWF0ICE9PSBcImZ1bmN0aW9uXCIpZm9ybWF0ID0gZDMuZm9ybWF0KGZvcm1hdCk7dmFyIGs9TWF0aC5tYXgoLjEsbiAvIHNjYWxlLnRpY2tzKCkubGVuZ3RoKSxmPXBvc2l0aXZlPyhlID0gMWUtMTIsTWF0aC5jZWlsKTooZSA9IC0xZS0xMixNYXRoLmZsb29yKSxlO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZCAvIHBvdyhmKGxvZyhkKSArIGUpKSA8PSBrP2Zvcm1hdChkKTpcIlwiO307fTtzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfbG9nKGxpbmVhci5jb3B5KCksYmFzZSxwb3NpdGl2ZSxkb21haW4pO307cmV0dXJuIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpO312YXIgZDNfc2NhbGVfbG9nRm9ybWF0PWQzLmZvcm1hdChcIi4wZVwiKSxkM19zY2FsZV9sb2dOaWNlTmVnYXRpdmU9e2Zsb29yOmZ1bmN0aW9uIGZsb29yKHgpe3JldHVybiAtTWF0aC5jZWlsKC14KTt9LGNlaWw6ZnVuY3Rpb24gY2VpbCh4KXtyZXR1cm4gLU1hdGguZmxvb3IoLXgpO319O2QzLnNjYWxlLnBvdyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NjYWxlX3BvdyhkMy5zY2FsZS5saW5lYXIoKSwxLFswLDFdKTt9O2Z1bmN0aW9uIGQzX3NjYWxlX3BvdyhsaW5lYXIsZXhwb25lbnQsZG9tYWluKXt2YXIgcG93cD1kM19zY2FsZV9wb3dQb3coZXhwb25lbnQpLHBvd2I9ZDNfc2NhbGVfcG93UG93KDEgLyBleHBvbmVudCk7ZnVuY3Rpb24gc2NhbGUoeCl7cmV0dXJuIGxpbmVhcihwb3dwKHgpKTt9c2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeCl7cmV0dXJuIHBvd2IobGluZWFyLmludmVydCh4KSk7fTtzY2FsZS5kb21haW4gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZG9tYWluO2xpbmVhci5kb21haW4oKGRvbWFpbiA9IHgubWFwKE51bWJlcikpLm1hcChwb3dwKSk7cmV0dXJuIHNjYWxlO307c2NhbGUudGlja3MgPSBmdW5jdGlvbihtKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja3MoZG9tYWluLG0pO307c2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKG0sZm9ybWF0KXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja0Zvcm1hdChkb21haW4sbSxmb3JtYXQpO307c2NhbGUubmljZSA9IGZ1bmN0aW9uKG0pe3JldHVybiBzY2FsZS5kb21haW4oZDNfc2NhbGVfbGluZWFyTmljZShkb21haW4sbSkpO307c2NhbGUuZXhwb25lbnQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZXhwb25lbnQ7cG93cCA9IGQzX3NjYWxlX3Bvd1BvdyhleHBvbmVudCA9IHgpO3Bvd2IgPSBkM19zY2FsZV9wb3dQb3coMSAvIGV4cG9uZW50KTtsaW5lYXIuZG9tYWluKGRvbWFpbi5tYXAocG93cCkpO3JldHVybiBzY2FsZTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9wb3cobGluZWFyLmNvcHkoKSxleHBvbmVudCxkb21haW4pO307cmV0dXJuIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpO31mdW5jdGlvbiBkM19zY2FsZV9wb3dQb3coZSl7cmV0dXJuIGZ1bmN0aW9uKHgpe3JldHVybiB4IDwgMD8tTWF0aC5wb3coLXgsZSk6TWF0aC5wb3coeCxlKTt9O31kMy5zY2FsZS5zcXJ0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDMuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpO307ZDMuc2NhbGUub3JkaW5hbCA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NjYWxlX29yZGluYWwoW10se3Q6XCJyYW5nZVwiLGE6W1tdXX0pO307ZnVuY3Rpb24gZDNfc2NhbGVfb3JkaW5hbChkb21haW4scmFuZ2VyKXt2YXIgaW5kZXgscmFuZ2UscmFuZ2VCYW5kO2Z1bmN0aW9uIHNjYWxlKHgpe3JldHVybiByYW5nZVsoKGluZGV4LmdldCh4KSB8fCAocmFuZ2VyLnQgPT09IFwicmFuZ2VcIj9pbmRleC5zZXQoeCxkb21haW4ucHVzaCh4KSk6TmFOKSkgLSAxKSAlIHJhbmdlLmxlbmd0aF07fWZ1bmN0aW9uIHN0ZXBzKHN0YXJ0LHN0ZXApe3JldHVybiBkMy5yYW5nZShkb21haW4ubGVuZ3RoKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7fSk7fXNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkb21haW47ZG9tYWluID0gW107aW5kZXggPSBuZXcgZDNfTWFwKCk7dmFyIGk9LTEsbj14Lmxlbmd0aCx4aTt3aGlsZSgrK2kgPCBuKSBpZighaW5kZXguaGFzKHhpID0geFtpXSkpaW5kZXguc2V0KHhpLGRvbWFpbi5wdXNoKHhpKSk7cmV0dXJuIHNjYWxlW3Jhbmdlci50XS5hcHBseShzY2FsZSxyYW5nZXIuYSk7fTtzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByYW5nZTtyYW5nZSA9IHg7cmFuZ2VCYW5kID0gMDtyYW5nZXIgPSB7dDpcInJhbmdlXCIsYTphcmd1bWVudHN9O3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlUG9pbnRzID0gZnVuY3Rpb24oeCxwYWRkaW5nKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilwYWRkaW5nID0gMDt2YXIgc3RhcnQ9eFswXSxzdG9wPXhbMV0sc3RlcD1kb21haW4ubGVuZ3RoIDwgMj8oc3RhcnQgPSAoc3RhcnQgKyBzdG9wKSAvIDIsMCk6KHN0b3AgLSBzdGFydCkgLyAoZG9tYWluLmxlbmd0aCAtIDEgKyBwYWRkaW5nKTtyYW5nZSA9IHN0ZXBzKHN0YXJ0ICsgc3RlcCAqIHBhZGRpbmcgLyAyLHN0ZXApO3JhbmdlQmFuZCA9IDA7cmFuZ2VyID0ge3Q6XCJyYW5nZVBvaW50c1wiLGE6YXJndW1lbnRzfTtyZXR1cm4gc2NhbGU7fTtzY2FsZS5yYW5nZVJvdW5kUG9pbnRzID0gZnVuY3Rpb24oeCxwYWRkaW5nKXtpZihhcmd1bWVudHMubGVuZ3RoIDwgMilwYWRkaW5nID0gMDt2YXIgc3RhcnQ9eFswXSxzdG9wPXhbMV0sc3RlcD1kb21haW4ubGVuZ3RoIDwgMj8oc3RhcnQgPSBzdG9wID0gTWF0aC5yb3VuZCgoc3RhcnQgKyBzdG9wKSAvIDIpLDApOihzdG9wIC0gc3RhcnQpIC8gKGRvbWFpbi5sZW5ndGggLSAxICsgcGFkZGluZykgfCAwO3JhbmdlID0gc3RlcHMoc3RhcnQgKyBNYXRoLnJvdW5kKHN0ZXAgKiBwYWRkaW5nIC8gMiArIChzdG9wIC0gc3RhcnQgLSAoZG9tYWluLmxlbmd0aCAtIDEgKyBwYWRkaW5nKSAqIHN0ZXApIC8gMiksc3RlcCk7cmFuZ2VCYW5kID0gMDtyYW5nZXIgPSB7dDpcInJhbmdlUm91bmRQb2ludHNcIixhOmFyZ3VtZW50c307cmV0dXJuIHNjYWxlO307c2NhbGUucmFuZ2VCYW5kcyA9IGZ1bmN0aW9uKHgscGFkZGluZyxvdXRlclBhZGRpbmcpe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAyKXBhZGRpbmcgPSAwO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKW91dGVyUGFkZGluZyA9IHBhZGRpbmc7dmFyIHJldmVyc2U9eFsxXSA8IHhbMF0sc3RhcnQ9eFtyZXZlcnNlIC0gMF0sc3RvcD14WzEgLSByZXZlcnNlXSxzdGVwPShzdG9wIC0gc3RhcnQpIC8gKGRvbWFpbi5sZW5ndGggLSBwYWRkaW5nICsgMiAqIG91dGVyUGFkZGluZyk7cmFuZ2UgPSBzdGVwcyhzdGFydCArIHN0ZXAgKiBvdXRlclBhZGRpbmcsc3RlcCk7aWYocmV2ZXJzZSlyYW5nZS5yZXZlcnNlKCk7cmFuZ2VCYW5kID0gc3RlcCAqICgxIC0gcGFkZGluZyk7cmFuZ2VyID0ge3Q6XCJyYW5nZUJhbmRzXCIsYTphcmd1bWVudHN9O3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlUm91bmRCYW5kcyA9IGZ1bmN0aW9uKHgscGFkZGluZyxvdXRlclBhZGRpbmcpe2lmKGFyZ3VtZW50cy5sZW5ndGggPCAyKXBhZGRpbmcgPSAwO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAzKW91dGVyUGFkZGluZyA9IHBhZGRpbmc7dmFyIHJldmVyc2U9eFsxXSA8IHhbMF0sc3RhcnQ9eFtyZXZlcnNlIC0gMF0sc3RvcD14WzEgLSByZXZlcnNlXSxzdGVwPU1hdGguZmxvb3IoKHN0b3AgLSBzdGFydCkgLyAoZG9tYWluLmxlbmd0aCAtIHBhZGRpbmcgKyAyICogb3V0ZXJQYWRkaW5nKSk7cmFuZ2UgPSBzdGVwcyhzdGFydCArIE1hdGgucm91bmQoKHN0b3AgLSBzdGFydCAtIChkb21haW4ubGVuZ3RoIC0gcGFkZGluZykgKiBzdGVwKSAvIDIpLHN0ZXApO2lmKHJldmVyc2UpcmFuZ2UucmV2ZXJzZSgpO3JhbmdlQmFuZCA9IE1hdGgucm91bmQoc3RlcCAqICgxIC0gcGFkZGluZykpO3JhbmdlciA9IHt0OlwicmFuZ2VSb3VuZEJhbmRzXCIsYTphcmd1bWVudHN9O3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlQmFuZCA9IGZ1bmN0aW9uKCl7cmV0dXJuIHJhbmdlQmFuZDt9O3NjYWxlLnJhbmdlRXh0ZW50ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVFeHRlbnQocmFuZ2VyLmFbMF0pO307c2NhbGUuY29weSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3NjYWxlX29yZGluYWwoZG9tYWluLHJhbmdlcik7fTtyZXR1cm4gc2NhbGUuZG9tYWluKGRvbWFpbik7fWQzLnNjYWxlLmNhdGVnb3J5MTAgPSBmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkxMCk7fTtkMy5zY2FsZS5jYXRlZ29yeTIwID0gZnVuY3Rpb24oKXtyZXR1cm4gZDMuc2NhbGUub3JkaW5hbCgpLnJhbmdlKGQzX2NhdGVnb3J5MjApO307ZDMuc2NhbGUuY2F0ZWdvcnkyMGIgPSBmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkyMGIpO307ZDMuc2NhbGUuY2F0ZWdvcnkyMGMgPSBmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkyMGMpO307dmFyIGQzX2NhdGVnb3J5MTA9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoZDNfcmdiU3RyaW5nKTt2YXIgZDNfY2F0ZWdvcnkyMD1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChkM19yZ2JTdHJpbmcpO3ZhciBkM19jYXRlZ29yeTIwYj1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoZDNfcmdiU3RyaW5nKTt2YXIgZDNfY2F0ZWdvcnkyMGM9WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChkM19yZ2JTdHJpbmcpO2QzLnNjYWxlLnF1YW50aWxlID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfcXVhbnRpbGUoW10sW10pO307ZnVuY3Rpb24gZDNfc2NhbGVfcXVhbnRpbGUoZG9tYWluLHJhbmdlKXt2YXIgdGhyZXNob2xkcztmdW5jdGlvbiByZXNjYWxlKCl7dmFyIGs9MCxxPXJhbmdlLmxlbmd0aDt0aHJlc2hvbGRzID0gW107d2hpbGUoKytrIDwgcSkgdGhyZXNob2xkc1trIC0gMV0gPSBkMy5xdWFudGlsZShkb21haW4sayAvIHEpO3JldHVybiBzY2FsZTt9ZnVuY3Rpb24gc2NhbGUoeCl7aWYoIWlzTmFOKHggPSAreCkpcmV0dXJuIHJhbmdlW2QzLmJpc2VjdCh0aHJlc2hvbGRzLHgpXTt9c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRvbWFpbjtkb21haW4gPSB4Lm1hcChkM19udW1iZXIpLmZpbHRlcihkM19udW1lcmljKS5zb3J0KGQzX2FzY2VuZGluZyk7cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUucXVhbnRpbGVzID0gZnVuY3Rpb24oKXtyZXR1cm4gdGhyZXNob2xkczt9O3NjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9uKHkpe3kgPSByYW5nZS5pbmRleE9mKHkpO3JldHVybiB5IDwgMD9bTmFOLE5hTl06W3kgPiAwP3RocmVzaG9sZHNbeSAtIDFdOmRvbWFpblswXSx5IDwgdGhyZXNob2xkcy5sZW5ndGg/dGhyZXNob2xkc1t5XTpkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdXTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9xdWFudGlsZShkb21haW4scmFuZ2UpO307cmV0dXJuIHJlc2NhbGUoKTt9ZDMuc2NhbGUucXVhbnRpemUgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9xdWFudGl6ZSgwLDEsWzAsMV0pO307ZnVuY3Rpb24gZDNfc2NhbGVfcXVhbnRpemUoeDAseDEscmFuZ2Upe3ZhciBreCxpO2Z1bmN0aW9uIHNjYWxlKHgpe3JldHVybiByYW5nZVtNYXRoLm1heCgwLE1hdGgubWluKGksTWF0aC5mbG9vcihreCAqICh4IC0geDApKSkpXTt9ZnVuY3Rpb24gcmVzY2FsZSgpe2t4ID0gcmFuZ2UubGVuZ3RoIC8gKHgxIC0geDApO2kgPSByYW5nZS5sZW5ndGggLSAxO3JldHVybiBzY2FsZTt9c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFt4MCx4MV07eDAgPSAreFswXTt4MSA9ICt4W3gubGVuZ3RoIC0gMV07cmV0dXJuIHJlc2NhbGUoKTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0geDtyZXR1cm4gcmVzY2FsZSgpO307c2NhbGUuaW52ZXJ0RXh0ZW50ID0gZnVuY3Rpb24oeSl7eSA9IHJhbmdlLmluZGV4T2YoeSk7eSA9IHkgPCAwP05hTjp5IC8ga3ggKyB4MDtyZXR1cm4gW3kseSArIDEgLyBreF07fTtzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfcXVhbnRpemUoeDAseDEscmFuZ2UpO307cmV0dXJuIHJlc2NhbGUoKTt9ZDMuc2NhbGUudGhyZXNob2xkID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfdGhyZXNob2xkKFsuNV0sWzAsMV0pO307ZnVuY3Rpb24gZDNfc2NhbGVfdGhyZXNob2xkKGRvbWFpbixyYW5nZSl7ZnVuY3Rpb24gc2NhbGUoeCl7aWYoeCA8PSB4KXJldHVybiByYW5nZVtkMy5iaXNlY3QoZG9tYWluLHgpXTt9c2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRvbWFpbjtkb21haW4gPSBfO3JldHVybiBzY2FsZTt9O3NjYWxlLnJhbmdlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHJhbmdlO3JhbmdlID0gXztyZXR1cm4gc2NhbGU7fTtzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KXt5ID0gcmFuZ2UuaW5kZXhPZih5KTtyZXR1cm4gW2RvbWFpblt5IC0gMV0sZG9tYWluW3ldXTt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV90aHJlc2hvbGQoZG9tYWluLHJhbmdlKTt9O3JldHVybiBzY2FsZTt9ZDMuc2NhbGUuaWRlbnRpdHkgPSBmdW5jdGlvbigpe3JldHVybiBkM19zY2FsZV9pZGVudGl0eShbMCwxXSk7fTtmdW5jdGlvbiBkM19zY2FsZV9pZGVudGl0eShkb21haW4pe2Z1bmN0aW9uIGlkZW50aXR5KHgpe3JldHVybiAreDt9aWRlbnRpdHkuaW52ZXJ0ID0gaWRlbnRpdHk7aWRlbnRpdHkuZG9tYWluID0gaWRlbnRpdHkucmFuZ2UgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZG9tYWluO2RvbWFpbiA9IHgubWFwKGlkZW50aXR5KTtyZXR1cm4gaWRlbnRpdHk7fTtpZGVudGl0eS50aWNrcyA9IGZ1bmN0aW9uKG0pe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sbSk7fTtpZGVudGl0eS50aWNrRm9ybWF0ID0gZnVuY3Rpb24obSxmb3JtYXQpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbixtLGZvcm1hdCk7fTtpZGVudGl0eS5jb3B5ID0gZnVuY3Rpb24oKXtyZXR1cm4gZDNfc2NhbGVfaWRlbnRpdHkoZG9tYWluKTt9O3JldHVybiBpZGVudGl0eTt9ZDMuc3ZnID0ge307ZnVuY3Rpb24gZDNfemVybygpe3JldHVybiAwO31kMy5zdmcuYXJjID0gZnVuY3Rpb24oKXt2YXIgaW5uZXJSYWRpdXM9ZDNfc3ZnX2FyY0lubmVyUmFkaXVzLG91dGVyUmFkaXVzPWQzX3N2Z19hcmNPdXRlclJhZGl1cyxjb3JuZXJSYWRpdXM9ZDNfemVybyxwYWRSYWRpdXM9ZDNfc3ZnX2FyY0F1dG8sc3RhcnRBbmdsZT1kM19zdmdfYXJjU3RhcnRBbmdsZSxlbmRBbmdsZT1kM19zdmdfYXJjRW5kQW5nbGUscGFkQW5nbGU9ZDNfc3ZnX2FyY1BhZEFuZ2xlO2Z1bmN0aW9uIGFyYygpe3ZhciByMD1NYXRoLm1heCgwLCtpbm5lclJhZGl1cy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIxPU1hdGgubWF4KDAsK291dGVyUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYTA9c3RhcnRBbmdsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykgLSBoYWxmz4AsYTE9ZW5kQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpIC0gaGFsZs+ALGRhPU1hdGguYWJzKGExIC0gYTApLGN3PWEwID4gYTE/MDoxO2lmKHIxIDwgcjApcmMgPSByMSxyMSA9IHIwLHIwID0gcmM7aWYoZGEgPj0gz4TOtSlyZXR1cm4gY2lyY2xlU2VnbWVudChyMSxjdykgKyAocjA/Y2lyY2xlU2VnbWVudChyMCwxIC0gY3cpOlwiXCIpICsgXCJaXCI7dmFyIHJjLGNyLHJwLGFwLHAwPTAscDE9MCx4MCx5MCx4MSx5MSx4Mix5Mix4Myx5MyxwYXRoPVtdO2lmKGFwID0gKCtwYWRBbmdsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykgfHwgMCkgLyAyKXtycCA9IHBhZFJhZGl1cyA9PT0gZDNfc3ZnX2FyY0F1dG8/TWF0aC5zcXJ0KHIwICogcjAgKyByMSAqIHIxKTorcGFkUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighY3cpcDEgKj0gLTE7aWYocjEpcDEgPSBkM19hc2luKHJwIC8gcjEgKiBNYXRoLnNpbihhcCkpO2lmKHIwKXAwID0gZDNfYXNpbihycCAvIHIwICogTWF0aC5zaW4oYXApKTt9aWYocjEpe3gwID0gcjEgKiBNYXRoLmNvcyhhMCArIHAxKTt5MCA9IHIxICogTWF0aC5zaW4oYTAgKyBwMSk7eDEgPSByMSAqIE1hdGguY29zKGExIC0gcDEpO3kxID0gcjEgKiBNYXRoLnNpbihhMSAtIHAxKTt2YXIgbDE9TWF0aC5hYnMoYTEgLSBhMCAtIDIgKiBwMSkgPD0gz4A/MDoxO2lmKHAxICYmIGQzX3N2Z19hcmNTd2VlcCh4MCx5MCx4MSx5MSkgPT09IGN3IF4gbDEpe3ZhciBoMT0oYTAgKyBhMSkgLyAyO3gwID0gcjEgKiBNYXRoLmNvcyhoMSk7eTAgPSByMSAqIE1hdGguc2luKGgxKTt4MSA9IHkxID0gbnVsbDt9fWVsc2Uge3gwID0geTAgPSAwO31pZihyMCl7eDIgPSByMCAqIE1hdGguY29zKGExIC0gcDApO3kyID0gcjAgKiBNYXRoLnNpbihhMSAtIHAwKTt4MyA9IHIwICogTWF0aC5jb3MoYTAgKyBwMCk7eTMgPSByMCAqIE1hdGguc2luKGEwICsgcDApO3ZhciBsMD1NYXRoLmFicyhhMCAtIGExICsgMiAqIHAwKSA8PSDPgD8wOjE7aWYocDAgJiYgZDNfc3ZnX2FyY1N3ZWVwKHgyLHkyLHgzLHkzKSA9PT0gMSAtIGN3IF4gbDApe3ZhciBoMD0oYTAgKyBhMSkgLyAyO3gyID0gcjAgKiBNYXRoLmNvcyhoMCk7eTIgPSByMCAqIE1hdGguc2luKGgwKTt4MyA9IHkzID0gbnVsbDt9fWVsc2Uge3gyID0geTIgPSAwO31pZihkYSA+IM61ICYmIChyYyA9IE1hdGgubWluKE1hdGguYWJzKHIxIC0gcjApIC8gMiwrY29ybmVyUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpID4gLjAwMSl7Y3IgPSByMCA8IHIxIF4gY3c/MDoxO3ZhciByYzE9cmMscmMwPXJjO2lmKGRhIDwgz4Ape3ZhciBvYz14MyA9PSBudWxsP1t4Mix5Ml06eDEgPT0gbnVsbD9beDAseTBdOmQzX2dlb21fcG9seWdvbkludGVyc2VjdChbeDAseTBdLFt4Myx5M10sW3gxLHkxXSxbeDIseTJdKSxheD14MCAtIG9jWzBdLGF5PXkwIC0gb2NbMV0sYng9eDEgLSBvY1swXSxieT15MSAtIG9jWzFdLGtjPTEgLyBNYXRoLnNpbihNYXRoLmFjb3MoKGF4ICogYnggKyBheSAqIGJ5KSAvIChNYXRoLnNxcnQoYXggKiBheCArIGF5ICogYXkpICogTWF0aC5zcXJ0KGJ4ICogYnggKyBieSAqIGJ5KSkpIC8gMiksbGM9TWF0aC5zcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtyYzAgPSBNYXRoLm1pbihyYywocjAgLSBsYykgLyAoa2MgLSAxKSk7cmMxID0gTWF0aC5taW4ocmMsKHIxIC0gbGMpIC8gKGtjICsgMSkpO31pZih4MSAhPSBudWxsKXt2YXIgdDMwPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyh4MyA9PSBudWxsP1t4Mix5Ml06W3gzLHkzXSxbeDAseTBdLHIxLHJjMSxjdyksdDEyPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyhbeDEseTFdLFt4Mix5Ml0scjEscmMxLGN3KTtpZihyYyA9PT0gcmMxKXtwYXRoLnB1c2goXCJNXCIsdDMwWzBdLFwiQVwiLHJjMSxcIixcIixyYzEsXCIgMCAwLFwiLGNyLFwiIFwiLHQzMFsxXSxcIkFcIixyMSxcIixcIixyMSxcIiAwIFwiLDEgLSBjdyBeIGQzX3N2Z19hcmNTd2VlcCh0MzBbMV1bMF0sdDMwWzFdWzFdLHQxMlsxXVswXSx0MTJbMV1bMV0pLFwiLFwiLGN3LFwiIFwiLHQxMlsxXSxcIkFcIixyYzEsXCIsXCIscmMxLFwiIDAgMCxcIixjcixcIiBcIix0MTJbMF0pO31lbHNlIHtwYXRoLnB1c2goXCJNXCIsdDMwWzBdLFwiQVwiLHJjMSxcIixcIixyYzEsXCIgMCAxLFwiLGNyLFwiIFwiLHQxMlswXSk7fX1lbHNlIHtwYXRoLnB1c2goXCJNXCIseDAsXCIsXCIseTApO31pZih4MyAhPSBudWxsKXt2YXIgdDAzPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyhbeDAseTBdLFt4Myx5M10scjAsLXJjMCxjdyksdDIxPWQzX3N2Z19hcmNDb3JuZXJUYW5nZW50cyhbeDIseTJdLHgxID09IG51bGw/W3gwLHkwXTpbeDEseTFdLHIwLC1yYzAsY3cpO2lmKHJjID09PSByYzApe3BhdGgucHVzaChcIkxcIix0MjFbMF0sXCJBXCIscmMwLFwiLFwiLHJjMCxcIiAwIDAsXCIsY3IsXCIgXCIsdDIxWzFdLFwiQVwiLHIwLFwiLFwiLHIwLFwiIDAgXCIsY3cgXiBkM19zdmdfYXJjU3dlZXAodDIxWzFdWzBdLHQyMVsxXVsxXSx0MDNbMV1bMF0sdDAzWzFdWzFdKSxcIixcIiwxIC0gY3csXCIgXCIsdDAzWzFdLFwiQVwiLHJjMCxcIixcIixyYzAsXCIgMCAwLFwiLGNyLFwiIFwiLHQwM1swXSk7fWVsc2Uge3BhdGgucHVzaChcIkxcIix0MjFbMF0sXCJBXCIscmMwLFwiLFwiLHJjMCxcIiAwIDAsXCIsY3IsXCIgXCIsdDAzWzBdKTt9fWVsc2Uge3BhdGgucHVzaChcIkxcIix4MixcIixcIix5Mik7fX1lbHNlIHtwYXRoLnB1c2goXCJNXCIseDAsXCIsXCIseTApO2lmKHgxICE9IG51bGwpcGF0aC5wdXNoKFwiQVwiLHIxLFwiLFwiLHIxLFwiIDAgXCIsbDEsXCIsXCIsY3csXCIgXCIseDEsXCIsXCIseTEpO3BhdGgucHVzaChcIkxcIix4MixcIixcIix5Mik7aWYoeDMgIT0gbnVsbClwYXRoLnB1c2goXCJBXCIscjAsXCIsXCIscjAsXCIgMCBcIixsMCxcIixcIiwxIC0gY3csXCIgXCIseDMsXCIsXCIseTMpO31wYXRoLnB1c2goXCJaXCIpO3JldHVybiBwYXRoLmpvaW4oXCJcIik7fWZ1bmN0aW9uIGNpcmNsZVNlZ21lbnQocjEsY3cpe3JldHVybiBcIk0wLFwiICsgcjEgKyBcIkFcIiArIHIxICsgXCIsXCIgKyByMSArIFwiIDAgMSxcIiArIGN3ICsgXCIgMCxcIiArIC1yMSArIFwiQVwiICsgcjEgKyBcIixcIiArIHIxICsgXCIgMCAxLFwiICsgY3cgKyBcIiAwLFwiICsgcjE7fWFyYy5pbm5lclJhZGl1cyA9IGZ1bmN0aW9uKHYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpbm5lclJhZGl1cztpbm5lclJhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGFyYzt9O2FyYy5vdXRlclJhZGl1cyA9IGZ1bmN0aW9uKHYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvdXRlclJhZGl1cztvdXRlclJhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGFyYzt9O2FyYy5jb3JuZXJSYWRpdXMgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gY29ybmVyUmFkaXVzO2Nvcm5lclJhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGFyYzt9O2FyYy5wYWRSYWRpdXMgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcGFkUmFkaXVzO3BhZFJhZGl1cyA9IHYgPT0gZDNfc3ZnX2FyY0F1dG8/ZDNfc3ZnX2FyY0F1dG86ZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc3RhcnRBbmdsZTtzdGFydEFuZ2xlID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLmVuZEFuZ2xlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGVuZEFuZ2xlO2VuZEFuZ2xlID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLnBhZEFuZ2xlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHBhZEFuZ2xlO3BhZEFuZ2xlID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gYXJjO307YXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKXt2YXIgcj0oK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSArICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLGFyZ3VtZW50cykpIC8gMixhPSgrc3RhcnRBbmdsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykgKyArZW5kQW5nbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSAvIDIgLSBoYWxmz4A7cmV0dXJuIFtNYXRoLmNvcyhhKSAqIHIsTWF0aC5zaW4oYSkgKiByXTt9O3JldHVybiBhcmM7fTt2YXIgZDNfc3ZnX2FyY0F1dG89XCJhdXRvXCI7ZnVuY3Rpb24gZDNfc3ZnX2FyY0lubmVyUmFkaXVzKGQpe3JldHVybiBkLmlubmVyUmFkaXVzO31mdW5jdGlvbiBkM19zdmdfYXJjT3V0ZXJSYWRpdXMoZCl7cmV0dXJuIGQub3V0ZXJSYWRpdXM7fWZ1bmN0aW9uIGQzX3N2Z19hcmNTdGFydEFuZ2xlKGQpe3JldHVybiBkLnN0YXJ0QW5nbGU7fWZ1bmN0aW9uIGQzX3N2Z19hcmNFbmRBbmdsZShkKXtyZXR1cm4gZC5lbmRBbmdsZTt9ZnVuY3Rpb24gZDNfc3ZnX2FyY1BhZEFuZ2xlKGQpe3JldHVybiBkICYmIGQucGFkQW5nbGU7fWZ1bmN0aW9uIGQzX3N2Z19hcmNTd2VlcCh4MCx5MCx4MSx5MSl7cmV0dXJuICh4MCAtIHgxKSAqIHkwIC0gKHkwIC0geTEpICogeDAgPiAwPzA6MTt9ZnVuY3Rpb24gZDNfc3ZnX2FyY0Nvcm5lclRhbmdlbnRzKHAwLHAxLHIxLHJjLGN3KXt2YXIgeDAxPXAwWzBdIC0gcDFbMF0seTAxPXAwWzFdIC0gcDFbMV0sbG89KGN3P3JjOi1yYykgLyBNYXRoLnNxcnQoeDAxICogeDAxICsgeTAxICogeTAxKSxveD1sbyAqIHkwMSxveT0tbG8gKiB4MDEseDE9cDBbMF0gKyBveCx5MT1wMFsxXSArIG95LHgyPXAxWzBdICsgb3gseTI9cDFbMV0gKyBveSx4Mz0oeDEgKyB4MikgLyAyLHkzPSh5MSArIHkyKSAvIDIsZHg9eDIgLSB4MSxkeT15MiAtIHkxLGQyPWR4ICogZHggKyBkeSAqIGR5LHI9cjEgLSByYyxEPXgxICogeTIgLSB4MiAqIHkxLGQ9KGR5IDwgMD8tMToxKSAqIE1hdGguc3FydChNYXRoLm1heCgwLHIgKiByICogZDIgLSBEICogRCkpLGN4MD0oRCAqIGR5IC0gZHggKiBkKSAvIGQyLGN5MD0oLUQgKiBkeCAtIGR5ICogZCkgLyBkMixjeDE9KEQgKiBkeSArIGR4ICogZCkgLyBkMixjeTE9KC1EICogZHggKyBkeSAqIGQpIC8gZDIsZHgwPWN4MCAtIHgzLGR5MD1jeTAgLSB5MyxkeDE9Y3gxIC0geDMsZHkxPWN5MSAtIHkzO2lmKGR4MCAqIGR4MCArIGR5MCAqIGR5MCA+IGR4MSAqIGR4MSArIGR5MSAqIGR5MSljeDAgPSBjeDEsY3kwID0gY3kxO3JldHVybiBbW2N4MCAtIG94LGN5MCAtIG95XSxbY3gwICogcjEgLyByLGN5MCAqIHIxIC8gcl1dO31mdW5jdGlvbiBkM19zdmdfbGluZShwcm9qZWN0aW9uKXt2YXIgeD1kM19nZW9tX3BvaW50WCx5PWQzX2dlb21fcG9pbnRZLGRlZmluZWQ9ZDNfdHJ1ZSxpbnRlcnBvbGF0ZT1kM19zdmdfbGluZUxpbmVhcixpbnRlcnBvbGF0ZUtleT1pbnRlcnBvbGF0ZS5rZXksdGVuc2lvbj0uNztmdW5jdGlvbiBsaW5lKGRhdGEpe3ZhciBzZWdtZW50cz1bXSxwb2ludHM9W10saT0tMSxuPWRhdGEubGVuZ3RoLGQsZng9ZDNfZnVuY3Rvcih4KSxmeT1kM19mdW5jdG9yKHkpO2Z1bmN0aW9uIHNlZ21lbnQoKXtzZWdtZW50cy5wdXNoKFwiTVwiLGludGVycG9sYXRlKHByb2plY3Rpb24ocG9pbnRzKSx0ZW5zaW9uKSk7fXdoaWxlKCsraSA8IG4pIHtpZihkZWZpbmVkLmNhbGwodGhpcyxkID0gZGF0YVtpXSxpKSl7cG9pbnRzLnB1c2goWytmeC5jYWxsKHRoaXMsZCxpKSwrZnkuY2FsbCh0aGlzLGQsaSldKTt9ZWxzZSBpZihwb2ludHMubGVuZ3RoKXtzZWdtZW50KCk7cG9pbnRzID0gW107fX1pZihwb2ludHMubGVuZ3RoKXNlZ21lbnQoKTtyZXR1cm4gc2VnbWVudHMubGVuZ3RoP3NlZ21lbnRzLmpvaW4oXCJcIik6bnVsbDt9bGluZS54ID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHg7eCA9IF87cmV0dXJuIGxpbmU7fTtsaW5lLnkgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTt5ID0gXztyZXR1cm4gbGluZTt9O2xpbmUuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkZWZpbmVkO2RlZmluZWQgPSBfO3JldHVybiBsaW5lO307bGluZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpbnRlcnBvbGF0ZUtleTtpZih0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiKWludGVycG9sYXRlS2V5ID0gaW50ZXJwb2xhdGUgPSBfO2Vsc2UgaW50ZXJwb2xhdGVLZXkgPSAoaW50ZXJwb2xhdGUgPSBkM19zdmdfbGluZUludGVycG9sYXRvcnMuZ2V0KF8pIHx8IGQzX3N2Z19saW5lTGluZWFyKS5rZXk7cmV0dXJuIGxpbmU7fTtsaW5lLnRlbnNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGVuc2lvbjt0ZW5zaW9uID0gXztyZXR1cm4gbGluZTt9O3JldHVybiBsaW5lO31kMy5zdmcubGluZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3N2Z19saW5lKGQzX2lkZW50aXR5KTt9O3ZhciBkM19zdmdfbGluZUludGVycG9sYXRvcnM9ZDMubWFwKHtsaW5lYXI6ZDNfc3ZnX2xpbmVMaW5lYXIsXCJsaW5lYXItY2xvc2VkXCI6ZDNfc3ZnX2xpbmVMaW5lYXJDbG9zZWQsc3RlcDpkM19zdmdfbGluZVN0ZXAsXCJzdGVwLWJlZm9yZVwiOmQzX3N2Z19saW5lU3RlcEJlZm9yZSxcInN0ZXAtYWZ0ZXJcIjpkM19zdmdfbGluZVN0ZXBBZnRlcixiYXNpczpkM19zdmdfbGluZUJhc2lzLFwiYmFzaXMtb3BlblwiOmQzX3N2Z19saW5lQmFzaXNPcGVuLFwiYmFzaXMtY2xvc2VkXCI6ZDNfc3ZnX2xpbmVCYXNpc0Nsb3NlZCxidW5kbGU6ZDNfc3ZnX2xpbmVCdW5kbGUsY2FyZGluYWw6ZDNfc3ZnX2xpbmVDYXJkaW5hbCxcImNhcmRpbmFsLW9wZW5cIjpkM19zdmdfbGluZUNhcmRpbmFsT3BlbixcImNhcmRpbmFsLWNsb3NlZFwiOmQzX3N2Z19saW5lQ2FyZGluYWxDbG9zZWQsbW9ub3RvbmU6ZDNfc3ZnX2xpbmVNb25vdG9uZX0pO2QzX3N2Z19saW5lSW50ZXJwb2xhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGtleSx2YWx1ZSl7dmFsdWUua2V5ID0ga2V5O3ZhbHVlLmNsb3NlZCA9IC8tY2xvc2VkJC8udGVzdChrZXkpO30pO2Z1bmN0aW9uIGQzX3N2Z19saW5lTGluZWFyKHBvaW50cyl7cmV0dXJuIHBvaW50cy5sZW5ndGggPiAxP3BvaW50cy5qb2luKFwiTFwiKTpwb2ludHMgKyBcIlpcIjt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVMaW5lYXJDbG9zZWQocG9pbnRzKXtyZXR1cm4gcG9pbnRzLmpvaW4oXCJMXCIpICsgXCJaXCI7fWZ1bmN0aW9uIGQzX3N2Z19saW5lU3RlcChwb2ludHMpe3ZhciBpPTAsbj1wb2ludHMubGVuZ3RoLHA9cG9pbnRzWzBdLHBhdGg9W3BbMF0sXCIsXCIscFsxXV07d2hpbGUoKytpIDwgbikgcGF0aC5wdXNoKFwiSFwiLChwWzBdICsgKHAgPSBwb2ludHNbaV0pWzBdKSAvIDIsXCJWXCIscFsxXSk7aWYobiA+IDEpcGF0aC5wdXNoKFwiSFwiLHBbMF0pO3JldHVybiBwYXRoLmpvaW4oXCJcIik7fWZ1bmN0aW9uIGQzX3N2Z19saW5lU3RlcEJlZm9yZShwb2ludHMpe3ZhciBpPTAsbj1wb2ludHMubGVuZ3RoLHA9cG9pbnRzWzBdLHBhdGg9W3BbMF0sXCIsXCIscFsxXV07d2hpbGUoKytpIDwgbikgcGF0aC5wdXNoKFwiVlwiLChwID0gcG9pbnRzW2ldKVsxXSxcIkhcIixwWzBdKTtyZXR1cm4gcGF0aC5qb2luKFwiXCIpO31mdW5jdGlvbiBkM19zdmdfbGluZVN0ZXBBZnRlcihwb2ludHMpe3ZhciBpPTAsbj1wb2ludHMubGVuZ3RoLHA9cG9pbnRzWzBdLHBhdGg9W3BbMF0sXCIsXCIscFsxXV07d2hpbGUoKytpIDwgbikgcGF0aC5wdXNoKFwiSFwiLChwID0gcG9pbnRzW2ldKVswXSxcIlZcIixwWzFdKTtyZXR1cm4gcGF0aC5qb2luKFwiXCIpO31mdW5jdGlvbiBkM19zdmdfbGluZUNhcmRpbmFsT3Blbihwb2ludHMsdGVuc2lvbil7cmV0dXJuIHBvaW50cy5sZW5ndGggPCA0P2QzX3N2Z19saW5lTGluZWFyKHBvaW50cyk6cG9pbnRzWzFdICsgZDNfc3ZnX2xpbmVIZXJtaXRlKHBvaW50cy5zbGljZSgxLC0xKSxkM19zdmdfbGluZUNhcmRpbmFsVGFuZ2VudHMocG9pbnRzLHRlbnNpb24pKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVDYXJkaW5hbENsb3NlZChwb2ludHMsdGVuc2lvbil7cmV0dXJuIHBvaW50cy5sZW5ndGggPCAzP2QzX3N2Z19saW5lTGluZWFyQ2xvc2VkKHBvaW50cyk6cG9pbnRzWzBdICsgZDNfc3ZnX2xpbmVIZXJtaXRlKChwb2ludHMucHVzaChwb2ludHNbMF0pLHBvaW50cyksZDNfc3ZnX2xpbmVDYXJkaW5hbFRhbmdlbnRzKFtwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdXS5jb25jYXQocG9pbnRzLFtwb2ludHNbMV1dKSx0ZW5zaW9uKSk7fWZ1bmN0aW9uIGQzX3N2Z19saW5lQ2FyZGluYWwocG9pbnRzLHRlbnNpb24pe3JldHVybiBwb2ludHMubGVuZ3RoIDwgMz9kM19zdmdfbGluZUxpbmVhcihwb2ludHMpOnBvaW50c1swXSArIGQzX3N2Z19saW5lSGVybWl0ZShwb2ludHMsZDNfc3ZnX2xpbmVDYXJkaW5hbFRhbmdlbnRzKHBvaW50cyx0ZW5zaW9uKSk7fWZ1bmN0aW9uIGQzX3N2Z19saW5lSGVybWl0ZShwb2ludHMsdGFuZ2VudHMpe2lmKHRhbmdlbnRzLmxlbmd0aCA8IDEgfHwgcG9pbnRzLmxlbmd0aCAhPSB0YW5nZW50cy5sZW5ndGggJiYgcG9pbnRzLmxlbmd0aCAhPSB0YW5nZW50cy5sZW5ndGggKyAyKXtyZXR1cm4gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKTt9dmFyIHF1YWQ9cG9pbnRzLmxlbmd0aCAhPSB0YW5nZW50cy5sZW5ndGgscGF0aD1cIlwiLHAwPXBvaW50c1swXSxwPXBvaW50c1sxXSx0MD10YW5nZW50c1swXSx0PXQwLHBpPTE7aWYocXVhZCl7cGF0aCArPSBcIlFcIiArIChwWzBdIC0gdDBbMF0gKiAyIC8gMykgKyBcIixcIiArIChwWzFdIC0gdDBbMV0gKiAyIC8gMykgKyBcIixcIiArIHBbMF0gKyBcIixcIiArIHBbMV07cDAgPSBwb2ludHNbMV07cGkgPSAyO31pZih0YW5nZW50cy5sZW5ndGggPiAxKXt0ID0gdGFuZ2VudHNbMV07cCA9IHBvaW50c1twaV07cGkrKztwYXRoICs9IFwiQ1wiICsgKHAwWzBdICsgdDBbMF0pICsgXCIsXCIgKyAocDBbMV0gKyB0MFsxXSkgKyBcIixcIiArIChwWzBdIC0gdFswXSkgKyBcIixcIiArIChwWzFdIC0gdFsxXSkgKyBcIixcIiArIHBbMF0gKyBcIixcIiArIHBbMV07Zm9yKHZhciBpPTI7aSA8IHRhbmdlbnRzLmxlbmd0aDtpKysscGkrKykge3AgPSBwb2ludHNbcGldO3QgPSB0YW5nZW50c1tpXTtwYXRoICs9IFwiU1wiICsgKHBbMF0gLSB0WzBdKSArIFwiLFwiICsgKHBbMV0gLSB0WzFdKSArIFwiLFwiICsgcFswXSArIFwiLFwiICsgcFsxXTt9fWlmKHF1YWQpe3ZhciBscD1wb2ludHNbcGldO3BhdGggKz0gXCJRXCIgKyAocFswXSArIHRbMF0gKiAyIC8gMykgKyBcIixcIiArIChwWzFdICsgdFsxXSAqIDIgLyAzKSArIFwiLFwiICsgbHBbMF0gKyBcIixcIiArIGxwWzFdO31yZXR1cm4gcGF0aDt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVDYXJkaW5hbFRhbmdlbnRzKHBvaW50cyx0ZW5zaW9uKXt2YXIgdGFuZ2VudHM9W10sYT0oMSAtIHRlbnNpb24pIC8gMixwMCxwMT1wb2ludHNbMF0scDI9cG9pbnRzWzFdLGk9MSxuPXBvaW50cy5sZW5ndGg7d2hpbGUoKytpIDwgbikge3AwID0gcDE7cDEgPSBwMjtwMiA9IHBvaW50c1tpXTt0YW5nZW50cy5wdXNoKFthICogKHAyWzBdIC0gcDBbMF0pLGEgKiAocDJbMV0gLSBwMFsxXSldKTt9cmV0dXJuIHRhbmdlbnRzO31mdW5jdGlvbiBkM19zdmdfbGluZUJhc2lzKHBvaW50cyl7aWYocG9pbnRzLmxlbmd0aCA8IDMpcmV0dXJuIGQzX3N2Z19saW5lTGluZWFyKHBvaW50cyk7dmFyIGk9MSxuPXBvaW50cy5sZW5ndGgscGk9cG9pbnRzWzBdLHgwPXBpWzBdLHkwPXBpWzFdLHB4PVt4MCx4MCx4MCwocGkgPSBwb2ludHNbMV0pWzBdXSxweT1beTAseTAseTAscGlbMV1dLHBhdGg9W3gwLFwiLFwiLHkwLFwiTFwiLGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMyxweCksXCIsXCIsZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLHB5KV07cG9pbnRzLnB1c2gocG9pbnRzW24gLSAxXSk7d2hpbGUoKytpIDw9IG4pIHtwaSA9IHBvaW50c1tpXTtweC5zaGlmdCgpO3B4LnB1c2gocGlbMF0pO3B5LnNoaWZ0KCk7cHkucHVzaChwaVsxXSk7ZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLHB4LHB5KTt9cG9pbnRzLnBvcCgpO3BhdGgucHVzaChcIkxcIixwaSk7cmV0dXJuIHBhdGguam9pbihcIlwiKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVCYXNpc09wZW4ocG9pbnRzKXtpZihwb2ludHMubGVuZ3RoIDwgNClyZXR1cm4gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKTt2YXIgcGF0aD1bXSxpPS0xLG49cG9pbnRzLmxlbmd0aCxwaSxweD1bMF0scHk9WzBdO3doaWxlKCsraSA8IDMpIHtwaSA9IHBvaW50c1tpXTtweC5wdXNoKHBpWzBdKTtweS5wdXNoKHBpWzFdKTt9cGF0aC5wdXNoKGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMyxweCkgKyBcIixcIiArIGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMyxweSkpOy0taTt3aGlsZSgrK2kgPCBuKSB7cGkgPSBwb2ludHNbaV07cHguc2hpZnQoKTtweC5wdXNoKHBpWzBdKTtweS5zaGlmdCgpO3B5LnB1c2gocGlbMV0pO2QzX3N2Z19saW5lQmFzaXNCZXppZXIocGF0aCxweCxweSk7fXJldHVybiBwYXRoLmpvaW4oXCJcIik7fWZ1bmN0aW9uIGQzX3N2Z19saW5lQmFzaXNDbG9zZWQocG9pbnRzKXt2YXIgcGF0aCxpPS0xLG49cG9pbnRzLmxlbmd0aCxtPW4gKyA0LHBpLHB4PVtdLHB5PVtdO3doaWxlKCsraSA8IDQpIHtwaSA9IHBvaW50c1tpICUgbl07cHgucHVzaChwaVswXSk7cHkucHVzaChwaVsxXSk7fXBhdGggPSBbZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLHB4KSxcIixcIixkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjMscHkpXTstLWk7d2hpbGUoKytpIDwgbSkge3BpID0gcG9pbnRzW2kgJSBuXTtweC5zaGlmdCgpO3B4LnB1c2gocGlbMF0pO3B5LnNoaWZ0KCk7cHkucHVzaChwaVsxXSk7ZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLHB4LHB5KTt9cmV0dXJuIHBhdGguam9pbihcIlwiKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVCdW5kbGUocG9pbnRzLHRlbnNpb24pe3ZhciBuPXBvaW50cy5sZW5ndGggLSAxO2lmKG4pe3ZhciB4MD1wb2ludHNbMF1bMF0seTA9cG9pbnRzWzBdWzFdLGR4PXBvaW50c1tuXVswXSAtIHgwLGR5PXBvaW50c1tuXVsxXSAtIHkwLGk9LTEscCx0O3doaWxlKCsraSA8PSBuKSB7cCA9IHBvaW50c1tpXTt0ID0gaSAvIG47cFswXSA9IHRlbnNpb24gKiBwWzBdICsgKDEgLSB0ZW5zaW9uKSAqICh4MCArIHQgKiBkeCk7cFsxXSA9IHRlbnNpb24gKiBwWzFdICsgKDEgLSB0ZW5zaW9uKSAqICh5MCArIHQgKiBkeSk7fX1yZXR1cm4gZDNfc3ZnX2xpbmVCYXNpcyhwb2ludHMpO31mdW5jdGlvbiBkM19zdmdfbGluZURvdDQoYSxiKXtyZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107fXZhciBkM19zdmdfbGluZUJhc2lzQmV6aWVyMT1bMCwyIC8gMywxIC8gMywwXSxkM19zdmdfbGluZUJhc2lzQmV6aWVyMj1bMCwxIC8gMywyIC8gMywwXSxkM19zdmdfbGluZUJhc2lzQmV6aWVyMz1bMCwxIC8gNiwyIC8gMywxIC8gNl07ZnVuY3Rpb24gZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLHgseSl7cGF0aC5wdXNoKFwiQ1wiLGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMSx4KSxcIixcIixkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjEseSksXCIsXCIsZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIyLHgpLFwiLFwiLGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMix5KSxcIixcIixkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjMseCksXCIsXCIsZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLHkpKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVTbG9wZShwMCxwMSl7cmV0dXJuIChwMVsxXSAtIHAwWzFdKSAvIChwMVswXSAtIHAwWzBdKTt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVGaW5pdGVEaWZmZXJlbmNlcyhwb2ludHMpe3ZhciBpPTAsaj1wb2ludHMubGVuZ3RoIC0gMSxtPVtdLHAwPXBvaW50c1swXSxwMT1wb2ludHNbMV0sZD1tWzBdID0gZDNfc3ZnX2xpbmVTbG9wZShwMCxwMSk7d2hpbGUoKytpIDwgaikge21baV0gPSAoZCArIChkID0gZDNfc3ZnX2xpbmVTbG9wZShwMCA9IHAxLHAxID0gcG9pbnRzW2kgKyAxXSkpKSAvIDI7fW1baV0gPSBkO3JldHVybiBtO31mdW5jdGlvbiBkM19zdmdfbGluZU1vbm90b25lVGFuZ2VudHMocG9pbnRzKXt2YXIgdGFuZ2VudHM9W10sZCxhLGIscyxtPWQzX3N2Z19saW5lRmluaXRlRGlmZmVyZW5jZXMocG9pbnRzKSxpPS0xLGo9cG9pbnRzLmxlbmd0aCAtIDE7d2hpbGUoKytpIDwgaikge2QgPSBkM19zdmdfbGluZVNsb3BlKHBvaW50c1tpXSxwb2ludHNbaSArIDFdKTtpZihhYnMoZCkgPCDOtSl7bVtpXSA9IG1baSArIDFdID0gMDt9ZWxzZSB7YSA9IG1baV0gLyBkO2IgPSBtW2kgKyAxXSAvIGQ7cyA9IGEgKiBhICsgYiAqIGI7aWYocyA+IDkpe3MgPSBkICogMyAvIE1hdGguc3FydChzKTttW2ldID0gcyAqIGE7bVtpICsgMV0gPSBzICogYjt9fX1pID0gLTE7d2hpbGUoKytpIDw9IGopIHtzID0gKHBvaW50c1tNYXRoLm1pbihqLGkgKyAxKV1bMF0gLSBwb2ludHNbTWF0aC5tYXgoMCxpIC0gMSldWzBdKSAvICg2ICogKDEgKyBtW2ldICogbVtpXSkpO3RhbmdlbnRzLnB1c2goW3MgfHwgMCxtW2ldICogcyB8fCAwXSk7fXJldHVybiB0YW5nZW50czt9ZnVuY3Rpb24gZDNfc3ZnX2xpbmVNb25vdG9uZShwb2ludHMpe3JldHVybiBwb2ludHMubGVuZ3RoIDwgMz9kM19zdmdfbGluZUxpbmVhcihwb2ludHMpOnBvaW50c1swXSArIGQzX3N2Z19saW5lSGVybWl0ZShwb2ludHMsZDNfc3ZnX2xpbmVNb25vdG9uZVRhbmdlbnRzKHBvaW50cykpO31kMy5zdmcubGluZS5yYWRpYWwgPSBmdW5jdGlvbigpe3ZhciBsaW5lPWQzX3N2Z19saW5lKGQzX3N2Z19saW5lUmFkaWFsKTtsaW5lLnJhZGl1cyA9IGxpbmUueCxkZWxldGUgbGluZS54O2xpbmUuYW5nbGUgPSBsaW5lLnksZGVsZXRlIGxpbmUueTtyZXR1cm4gbGluZTt9O2Z1bmN0aW9uIGQzX3N2Z19saW5lUmFkaWFsKHBvaW50cyl7dmFyIHBvaW50LGk9LTEsbj1wb2ludHMubGVuZ3RoLHIsYTt3aGlsZSgrK2kgPCBuKSB7cG9pbnQgPSBwb2ludHNbaV07ciA9IHBvaW50WzBdO2EgPSBwb2ludFsxXSAtIGhhbGbPgDtwb2ludFswXSA9IHIgKiBNYXRoLmNvcyhhKTtwb2ludFsxXSA9IHIgKiBNYXRoLnNpbihhKTt9cmV0dXJuIHBvaW50czt9ZnVuY3Rpb24gZDNfc3ZnX2FyZWEocHJvamVjdGlvbil7dmFyIHgwPWQzX2dlb21fcG9pbnRYLHgxPWQzX2dlb21fcG9pbnRYLHkwPTAseTE9ZDNfZ2VvbV9wb2ludFksZGVmaW5lZD1kM190cnVlLGludGVycG9sYXRlPWQzX3N2Z19saW5lTGluZWFyLGludGVycG9sYXRlS2V5PWludGVycG9sYXRlLmtleSxpbnRlcnBvbGF0ZVJldmVyc2U9aW50ZXJwb2xhdGUsTD1cIkxcIix0ZW5zaW9uPS43O2Z1bmN0aW9uIGFyZWEoZGF0YSl7dmFyIHNlZ21lbnRzPVtdLHBvaW50czA9W10scG9pbnRzMT1bXSxpPS0xLG49ZGF0YS5sZW5ndGgsZCxmeDA9ZDNfZnVuY3Rvcih4MCksZnkwPWQzX2Z1bmN0b3IoeTApLGZ4MT14MCA9PT0geDE/ZnVuY3Rpb24oKXtyZXR1cm4geDt9OmQzX2Z1bmN0b3IoeDEpLGZ5MT15MCA9PT0geTE/ZnVuY3Rpb24oKXtyZXR1cm4geTt9OmQzX2Z1bmN0b3IoeTEpLHgseTtmdW5jdGlvbiBzZWdtZW50KCl7c2VnbWVudHMucHVzaChcIk1cIixpbnRlcnBvbGF0ZShwcm9qZWN0aW9uKHBvaW50czEpLHRlbnNpb24pLEwsaW50ZXJwb2xhdGVSZXZlcnNlKHByb2plY3Rpb24ocG9pbnRzMC5yZXZlcnNlKCkpLHRlbnNpb24pLFwiWlwiKTt9d2hpbGUoKytpIDwgbikge2lmKGRlZmluZWQuY2FsbCh0aGlzLGQgPSBkYXRhW2ldLGkpKXtwb2ludHMwLnB1c2goW3ggPSArZngwLmNhbGwodGhpcyxkLGkpLHkgPSArZnkwLmNhbGwodGhpcyxkLGkpXSk7cG9pbnRzMS5wdXNoKFsrZngxLmNhbGwodGhpcyxkLGkpLCtmeTEuY2FsbCh0aGlzLGQsaSldKTt9ZWxzZSBpZihwb2ludHMwLmxlbmd0aCl7c2VnbWVudCgpO3BvaW50czAgPSBbXTtwb2ludHMxID0gW107fX1pZihwb2ludHMwLmxlbmd0aClzZWdtZW50KCk7cmV0dXJuIHNlZ21lbnRzLmxlbmd0aD9zZWdtZW50cy5qb2luKFwiXCIpOm51bGw7fWFyZWEueCA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB4MTt4MCA9IHgxID0gXztyZXR1cm4gYXJlYTt9O2FyZWEueDAgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geDA7eDAgPSBfO3JldHVybiBhcmVhO307YXJlYS54MSA9IGZ1bmN0aW9uKF8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB4MTt4MSA9IF87cmV0dXJuIGFyZWE7fTthcmVhLnkgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTE7eTAgPSB5MSA9IF87cmV0dXJuIGFyZWE7fTthcmVhLnkwID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHkwO3kwID0gXztyZXR1cm4gYXJlYTt9O2FyZWEueTEgPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4geTE7eTEgPSBfO3JldHVybiBhcmVhO307YXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRlZmluZWQ7ZGVmaW5lZCA9IF87cmV0dXJuIGFyZWE7fTthcmVhLmludGVycG9sYXRlID0gZnVuY3Rpb24oXyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGludGVycG9sYXRlS2V5O2lmKHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIpaW50ZXJwb2xhdGVLZXkgPSBpbnRlcnBvbGF0ZSA9IF87ZWxzZSBpbnRlcnBvbGF0ZUtleSA9IChpbnRlcnBvbGF0ZSA9IGQzX3N2Z19saW5lSW50ZXJwb2xhdG9ycy5nZXQoXykgfHwgZDNfc3ZnX2xpbmVMaW5lYXIpLmtleTtpbnRlcnBvbGF0ZVJldmVyc2UgPSBpbnRlcnBvbGF0ZS5yZXZlcnNlIHx8IGludGVycG9sYXRlO0wgPSBpbnRlcnBvbGF0ZS5jbG9zZWQ/XCJNXCI6XCJMXCI7cmV0dXJuIGFyZWE7fTthcmVhLnRlbnNpb24gPSBmdW5jdGlvbihfKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGVuc2lvbjt0ZW5zaW9uID0gXztyZXR1cm4gYXJlYTt9O3JldHVybiBhcmVhO31kM19zdmdfbGluZVN0ZXBCZWZvcmUucmV2ZXJzZSA9IGQzX3N2Z19saW5lU3RlcEFmdGVyO2QzX3N2Z19saW5lU3RlcEFmdGVyLnJldmVyc2UgPSBkM19zdmdfbGluZVN0ZXBCZWZvcmU7ZDMuc3ZnLmFyZWEgPSBmdW5jdGlvbigpe3JldHVybiBkM19zdmdfYXJlYShkM19pZGVudGl0eSk7fTtkMy5zdmcuYXJlYS5yYWRpYWwgPSBmdW5jdGlvbigpe3ZhciBhcmVhPWQzX3N2Z19hcmVhKGQzX3N2Z19saW5lUmFkaWFsKTthcmVhLnJhZGl1cyA9IGFyZWEueCxkZWxldGUgYXJlYS54O2FyZWEuaW5uZXJSYWRpdXMgPSBhcmVhLngwLGRlbGV0ZSBhcmVhLngwO2FyZWEub3V0ZXJSYWRpdXMgPSBhcmVhLngxLGRlbGV0ZSBhcmVhLngxO2FyZWEuYW5nbGUgPSBhcmVhLnksZGVsZXRlIGFyZWEueTthcmVhLnN0YXJ0QW5nbGUgPSBhcmVhLnkwLGRlbGV0ZSBhcmVhLnkwO2FyZWEuZW5kQW5nbGUgPSBhcmVhLnkxLGRlbGV0ZSBhcmVhLnkxO3JldHVybiBhcmVhO307ZDMuc3ZnLmNob3JkID0gZnVuY3Rpb24oKXt2YXIgc291cmNlPWQzX3NvdXJjZSx0YXJnZXQ9ZDNfdGFyZ2V0LHJhZGl1cz1kM19zdmdfY2hvcmRSYWRpdXMsc3RhcnRBbmdsZT1kM19zdmdfYXJjU3RhcnRBbmdsZSxlbmRBbmdsZT1kM19zdmdfYXJjRW5kQW5nbGU7ZnVuY3Rpb24gY2hvcmQoZCxpKXt2YXIgcz1zdWJncm91cCh0aGlzLHNvdXJjZSxkLGkpLHQ9c3ViZ3JvdXAodGhpcyx0YXJnZXQsZCxpKTtyZXR1cm4gXCJNXCIgKyBzLnAwICsgYXJjKHMucixzLnAxLHMuYTEgLSBzLmEwKSArIChlcXVhbHMocyx0KT9jdXJ2ZShzLnIscy5wMSxzLnIscy5wMCk6Y3VydmUocy5yLHMucDEsdC5yLHQucDApICsgYXJjKHQucix0LnAxLHQuYTEgLSB0LmEwKSArIGN1cnZlKHQucix0LnAxLHMucixzLnAwKSkgKyBcIlpcIjt9ZnVuY3Rpb24gc3ViZ3JvdXAoc2VsZixmLGQsaSl7dmFyIHN1Ymdyb3VwPWYuY2FsbChzZWxmLGQsaSkscj1yYWRpdXMuY2FsbChzZWxmLHN1Ymdyb3VwLGkpLGEwPXN0YXJ0QW5nbGUuY2FsbChzZWxmLHN1Ymdyb3VwLGkpIC0gaGFsZs+ALGExPWVuZEFuZ2xlLmNhbGwoc2VsZixzdWJncm91cCxpKSAtIGhhbGbPgDtyZXR1cm4ge3I6cixhMDphMCxhMTphMSxwMDpbciAqIE1hdGguY29zKGEwKSxyICogTWF0aC5zaW4oYTApXSxwMTpbciAqIE1hdGguY29zKGExKSxyICogTWF0aC5zaW4oYTEpXX07fWZ1bmN0aW9uIGVxdWFscyhhLGIpe3JldHVybiBhLmEwID09IGIuYTAgJiYgYS5hMSA9PSBiLmExO31mdW5jdGlvbiBhcmMocixwLGEpe3JldHVybiBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiAwIFwiICsgKyhhID4gz4ApICsgXCIsMSBcIiArIHA7fWZ1bmN0aW9uIGN1cnZlKHIwLHAwLHIxLHAxKXtyZXR1cm4gXCJRIDAsMCBcIiArIHAxO31jaG9yZC5yYWRpdXMgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcmFkaXVzO3JhZGl1cyA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGNob3JkO307Y2hvcmQuc291cmNlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNvdXJjZTtzb3VyY2UgPSBkM19mdW5jdG9yKHYpO3JldHVybiBjaG9yZDt9O2Nob3JkLnRhcmdldCA9IGZ1bmN0aW9uKHYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0YXJnZXQ7dGFyZ2V0ID0gZDNfZnVuY3Rvcih2KTtyZXR1cm4gY2hvcmQ7fTtjaG9yZC5zdGFydEFuZ2xlID0gZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHN0YXJ0QW5nbGU7c3RhcnRBbmdsZSA9IGQzX2Z1bmN0b3Iodik7cmV0dXJuIGNob3JkO307Y2hvcmQuZW5kQW5nbGUgPSBmdW5jdGlvbih2KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZW5kQW5nbGU7ZW5kQW5nbGUgPSBkM19mdW5jdG9yKHYpO3JldHVybiBjaG9yZDt9O3JldHVybiBjaG9yZDt9O2Z1bmN0aW9uIGQzX3N2Z19jaG9yZFJhZGl1cyhkKXtyZXR1cm4gZC5yYWRpdXM7fWQzLnN2Zy5kaWFnb25hbCA9IGZ1bmN0aW9uKCl7dmFyIHNvdXJjZT1kM19zb3VyY2UsdGFyZ2V0PWQzX3RhcmdldCxwcm9qZWN0aW9uPWQzX3N2Z19kaWFnb25hbFByb2plY3Rpb247ZnVuY3Rpb24gZGlhZ29uYWwoZCxpKXt2YXIgcDA9c291cmNlLmNhbGwodGhpcyxkLGkpLHAzPXRhcmdldC5jYWxsKHRoaXMsZCxpKSxtPShwMC55ICsgcDMueSkgLyAyLHA9W3AwLHt4OnAwLngseTptfSx7eDpwMy54LHk6bX0scDNdO3AgPSBwLm1hcChwcm9qZWN0aW9uKTtyZXR1cm4gXCJNXCIgKyBwWzBdICsgXCJDXCIgKyBwWzFdICsgXCIgXCIgKyBwWzJdICsgXCIgXCIgKyBwWzNdO31kaWFnb25hbC5zb3VyY2UgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gc291cmNlO3NvdXJjZSA9IGQzX2Z1bmN0b3IoeCk7cmV0dXJuIGRpYWdvbmFsO307ZGlhZ29uYWwudGFyZ2V0ID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRhcmdldDt0YXJnZXQgPSBkM19mdW5jdG9yKHgpO3JldHVybiBkaWFnb25hbDt9O2RpYWdvbmFsLnByb2plY3Rpb24gPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcHJvamVjdGlvbjtwcm9qZWN0aW9uID0geDtyZXR1cm4gZGlhZ29uYWw7fTtyZXR1cm4gZGlhZ29uYWw7fTtmdW5jdGlvbiBkM19zdmdfZGlhZ29uYWxQcm9qZWN0aW9uKGQpe3JldHVybiBbZC54LGQueV07fWQzLnN2Zy5kaWFnb25hbC5yYWRpYWwgPSBmdW5jdGlvbigpe3ZhciBkaWFnb25hbD1kMy5zdmcuZGlhZ29uYWwoKSxwcm9qZWN0aW9uPWQzX3N2Z19kaWFnb25hbFByb2plY3Rpb24scHJvamVjdGlvbl89ZGlhZ29uYWwucHJvamVjdGlvbjtkaWFnb25hbC5wcm9qZWN0aW9uID0gZnVuY3Rpb24oeCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cHJvamVjdGlvbl8oZDNfc3ZnX2RpYWdvbmFsUmFkaWFsUHJvamVjdGlvbihwcm9qZWN0aW9uID0geCkpOnByb2plY3Rpb247fTtyZXR1cm4gZGlhZ29uYWw7fTtmdW5jdGlvbiBkM19zdmdfZGlhZ29uYWxSYWRpYWxQcm9qZWN0aW9uKHByb2plY3Rpb24pe3JldHVybiBmdW5jdGlvbigpe3ZhciBkPXByb2plY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZFswXSxhPWRbMV0gLSBoYWxmz4A7cmV0dXJuIFtyICogTWF0aC5jb3MoYSksciAqIE1hdGguc2luKGEpXTt9O31kMy5zdmcuc3ltYm9sID0gZnVuY3Rpb24oKXt2YXIgdHlwZT1kM19zdmdfc3ltYm9sVHlwZSxzaXplPWQzX3N2Z19zeW1ib2xTaXplO2Z1bmN0aW9uIHN5bWJvbChkLGkpe3JldHVybiAoZDNfc3ZnX3N5bWJvbHMuZ2V0KHR5cGUuY2FsbCh0aGlzLGQsaSkpIHx8IGQzX3N2Z19zeW1ib2xDaXJjbGUpKHNpemUuY2FsbCh0aGlzLGQsaSkpO31zeW1ib2wudHlwZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0eXBlO3R5cGUgPSBkM19mdW5jdG9yKHgpO3JldHVybiBzeW1ib2w7fTtzeW1ib2wuc2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzaXplO3NpemUgPSBkM19mdW5jdG9yKHgpO3JldHVybiBzeW1ib2w7fTtyZXR1cm4gc3ltYm9sO307ZnVuY3Rpb24gZDNfc3ZnX3N5bWJvbFNpemUoKXtyZXR1cm4gNjQ7fWZ1bmN0aW9uIGQzX3N2Z19zeW1ib2xUeXBlKCl7cmV0dXJuIFwiY2lyY2xlXCI7fWZ1bmN0aW9uIGQzX3N2Z19zeW1ib2xDaXJjbGUoc2l6ZSl7dmFyIHI9TWF0aC5zcXJ0KHNpemUgLyDPgCk7cmV0dXJuIFwiTTAsXCIgKyByICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCAxLDEgMCxcIiArIC1yICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCAxLDEgMCxcIiArIHIgKyBcIlpcIjt9dmFyIGQzX3N2Z19zeW1ib2xzPWQzLm1hcCh7Y2lyY2xlOmQzX3N2Z19zeW1ib2xDaXJjbGUsY3Jvc3M6ZnVuY3Rpb24gY3Jvc3Moc2l6ZSl7dmFyIHI9TWF0aC5zcXJ0KHNpemUgLyA1KSAvIDI7cmV0dXJuIFwiTVwiICsgLTMgKiByICsgXCIsXCIgKyAtciArIFwiSFwiICsgLXIgKyBcIlZcIiArIC0zICogciArIFwiSFwiICsgciArIFwiVlwiICsgLXIgKyBcIkhcIiArIDMgKiByICsgXCJWXCIgKyByICsgXCJIXCIgKyByICsgXCJWXCIgKyAzICogciArIFwiSFwiICsgLXIgKyBcIlZcIiArIHIgKyBcIkhcIiArIC0zICogciArIFwiWlwiO30sZGlhbW9uZDpmdW5jdGlvbiBkaWFtb25kKHNpemUpe3ZhciByeT1NYXRoLnNxcnQoc2l6ZSAvICgyICogZDNfc3ZnX3N5bWJvbFRhbjMwKSkscng9cnkgKiBkM19zdmdfc3ltYm9sVGFuMzA7cmV0dXJuIFwiTTAsXCIgKyAtcnkgKyBcIkxcIiArIHJ4ICsgXCIsMFwiICsgXCIgMCxcIiArIHJ5ICsgXCIgXCIgKyAtcnggKyBcIiwwXCIgKyBcIlpcIjt9LHNxdWFyZTpmdW5jdGlvbiBzcXVhcmUoc2l6ZSl7dmFyIHI9TWF0aC5zcXJ0KHNpemUpIC8gMjtyZXR1cm4gXCJNXCIgKyAtciArIFwiLFwiICsgLXIgKyBcIkxcIiArIHIgKyBcIixcIiArIC1yICsgXCIgXCIgKyByICsgXCIsXCIgKyByICsgXCIgXCIgKyAtciArIFwiLFwiICsgciArIFwiWlwiO30sXCJ0cmlhbmdsZS1kb3duXCI6ZnVuY3Rpb24gdHJpYW5nbGVEb3duKHNpemUpe3ZhciByeD1NYXRoLnNxcnQoc2l6ZSAvIGQzX3N2Z19zeW1ib2xTcXJ0Mykscnk9cnggKiBkM19zdmdfc3ltYm9sU3FydDMgLyAyO3JldHVybiBcIk0wLFwiICsgcnkgKyBcIkxcIiArIHJ4ICsgXCIsXCIgKyAtcnkgKyBcIiBcIiArIC1yeCArIFwiLFwiICsgLXJ5ICsgXCJaXCI7fSxcInRyaWFuZ2xlLXVwXCI6ZnVuY3Rpb24gdHJpYW5nbGVVcChzaXplKXt2YXIgcng9TWF0aC5zcXJ0KHNpemUgLyBkM19zdmdfc3ltYm9sU3FydDMpLHJ5PXJ4ICogZDNfc3ZnX3N5bWJvbFNxcnQzIC8gMjtyZXR1cm4gXCJNMCxcIiArIC1yeSArIFwiTFwiICsgcnggKyBcIixcIiArIHJ5ICsgXCIgXCIgKyAtcnggKyBcIixcIiArIHJ5ICsgXCJaXCI7fX0pO2QzLnN2Zy5zeW1ib2xUeXBlcyA9IGQzX3N2Z19zeW1ib2xzLmtleXMoKTt2YXIgZDNfc3ZnX3N5bWJvbFNxcnQzPU1hdGguc3FydCgzKSxkM19zdmdfc3ltYm9sVGFuMzA9TWF0aC50YW4oMzAgKiBkM19yYWRpYW5zKTtkM19zZWxlY3Rpb25Qcm90b3R5cGUudHJhbnNpdGlvbiA9IGZ1bmN0aW9uKG5hbWUpe3ZhciBpZD1kM190cmFuc2l0aW9uSW5oZXJpdElkIHx8ICsrZDNfdHJhbnNpdGlvbklkLG5zPWQzX3RyYW5zaXRpb25OYW1lc3BhY2UobmFtZSksc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLG5vZGUsdHJhbnNpdGlvbj1kM190cmFuc2l0aW9uSW5oZXJpdCB8fCB7dGltZTpEYXRlLm5vdygpLGVhc2U6ZDNfZWFzZV9jdWJpY0luT3V0LGRlbGF5OjAsZHVyYXRpb246MjUwfTtmb3IodmFyIGo9LTEsbT10aGlzLmxlbmd0aDsrK2ogPCBtOykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgZ3JvdXA9dGhpc1tqXSxpPS0xLG49Z3JvdXAubGVuZ3RoOysraSA8IG47KSB7aWYobm9kZSA9IGdyb3VwW2ldKWQzX3RyYW5zaXRpb25Ob2RlKG5vZGUsaSxucyxpZCx0cmFuc2l0aW9uKTtzdWJncm91cC5wdXNoKG5vZGUpO319cmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLG5zLGlkKTt9O2QzX3NlbGVjdGlvblByb3RvdHlwZS5pbnRlcnJ1cHQgPSBmdW5jdGlvbihuYW1lKXtyZXR1cm4gdGhpcy5lYWNoKG5hbWUgPT0gbnVsbD9kM19zZWxlY3Rpb25faW50ZXJydXB0OmQzX3NlbGVjdGlvbl9pbnRlcnJ1cHROUyhkM190cmFuc2l0aW9uTmFtZXNwYWNlKG5hbWUpKSk7fTt2YXIgZDNfc2VsZWN0aW9uX2ludGVycnVwdD1kM19zZWxlY3Rpb25faW50ZXJydXB0TlMoZDNfdHJhbnNpdGlvbk5hbWVzcGFjZSgpKTtmdW5jdGlvbiBkM19zZWxlY3Rpb25faW50ZXJydXB0TlMobnMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsb2NrLGFjdGl2ZUlkLGFjdGl2ZTtpZigobG9jayA9IHRoaXNbbnNdKSAmJiAoYWN0aXZlID0gbG9ja1thY3RpdmVJZCA9IGxvY2suYWN0aXZlXSkpe2FjdGl2ZS50aW1lci5jID0gbnVsbDthY3RpdmUudGltZXIudCA9IE5hTjtpZigtLWxvY2suY291bnQpZGVsZXRlIGxvY2tbYWN0aXZlSWRdO2Vsc2UgZGVsZXRlIHRoaXNbbnNdO2xvY2suYWN0aXZlICs9IC41O2FjdGl2ZS5ldmVudCAmJiBhY3RpdmUuZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGFjdGl2ZS5pbmRleCk7fX07fWZ1bmN0aW9uIGQzX3RyYW5zaXRpb24oZ3JvdXBzLG5zLGlkKXtkM19zdWJjbGFzcyhncm91cHMsZDNfdHJhbnNpdGlvblByb3RvdHlwZSk7Z3JvdXBzLm5hbWVzcGFjZSA9IG5zO2dyb3Vwcy5pZCA9IGlkO3JldHVybiBncm91cHM7fXZhciBkM190cmFuc2l0aW9uUHJvdG90eXBlPVtdLGQzX3RyYW5zaXRpb25JZD0wLGQzX3RyYW5zaXRpb25Jbmhlcml0SWQsZDNfdHJhbnNpdGlvbkluaGVyaXQ7ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5jYWxsID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLmNhbGw7ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5lbXB0eSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5lbXB0eTtkM190cmFuc2l0aW9uUHJvdG90eXBlLm5vZGUgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUubm9kZTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnNpemUgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuc2l6ZTtkMy50cmFuc2l0aW9uID0gZnVuY3Rpb24oc2VsZWN0aW9uLG5hbWUpe3JldHVybiBzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnRyYW5zaXRpb24/ZDNfdHJhbnNpdGlvbkluaGVyaXRJZD9zZWxlY3Rpb24udHJhbnNpdGlvbihuYW1lKTpzZWxlY3Rpb246ZDMuc2VsZWN0aW9uKCkudHJhbnNpdGlvbihzZWxlY3Rpb24pO307ZDMudHJhbnNpdGlvbi5wcm90b3R5cGUgPSBkM190cmFuc2l0aW9uUHJvdG90eXBlO2QzX3RyYW5zaXRpb25Qcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlLHN1Ymdyb3Vwcz1bXSxzdWJncm91cCxzdWJub2RlLG5vZGU7c2VsZWN0b3IgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3Ioc2VsZWN0b3IpO2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7c3ViZ3JvdXBzLnB1c2goc3ViZ3JvdXAgPSBbXSk7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9LTEsbj1ncm91cC5sZW5ndGg7KytpIDwgbjspIHtpZigobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdG9yLmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGksaikpKXtpZihcIl9fZGF0YV9fXCIgaW4gbm9kZSlzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztkM190cmFuc2l0aW9uTm9kZShzdWJub2RlLGksbnMsaWQsbm9kZVtuc11baWRdKTtzdWJncm91cC5wdXNoKHN1Ym5vZGUpO31lbHNlIHtzdWJncm91cC5wdXNoKG51bGwpO319fXJldHVybiBkM190cmFuc2l0aW9uKHN1Ymdyb3VwcyxucyxpZCk7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKHNlbGVjdG9yKXt2YXIgaWQ9dGhpcy5pZCxucz10aGlzLm5hbWVzcGFjZSxzdWJncm91cHM9W10sc3ViZ3JvdXAsc3Vibm9kZXMsbm9kZSxzdWJub2RlLHRyYW5zaXRpb247c2VsZWN0b3IgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3JBbGwoc2VsZWN0b3IpO2Zvcih2YXIgaj0tMSxtPXRoaXMubGVuZ3RoOysraiA8IG07KSB7Zm9yKHZhciBncm91cD10aGlzW2pdLGk9LTEsbj1ncm91cC5sZW5ndGg7KytpIDwgbjspIHtpZihub2RlID0gZ3JvdXBbaV0pe3RyYW5zaXRpb24gPSBub2RlW25zXVtpZF07c3Vibm9kZXMgPSBzZWxlY3Rvci5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopO3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgaz0tMSxvPXN1Ym5vZGVzLmxlbmd0aDsrK2sgPCBvOykge2lmKHN1Ym5vZGUgPSBzdWJub2Rlc1trXSlkM190cmFuc2l0aW9uTm9kZShzdWJub2RlLGssbnMsaWQsdHJhbnNpdGlvbik7c3ViZ3JvdXAucHVzaChzdWJub2RlKTt9fX19cmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLG5zLGlkKTt9O2QzX3RyYW5zaXRpb25Qcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24oZmlsdGVyKXt2YXIgc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLGdyb3VwLG5vZGU7aWYodHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiKWZpbHRlciA9IGQzX3NlbGVjdGlvbl9maWx0ZXIoZmlsdGVyKTtmb3IodmFyIGo9MCxtPXRoaXMubGVuZ3RoO2ogPCBtO2orKykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgZ3JvdXA9dGhpc1tqXSxpPTAsbj1ncm91cC5sZW5ndGg7aSA8IG47aSsrKSB7aWYoKG5vZGUgPSBncm91cFtpXSkgJiYgZmlsdGVyLmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGksaikpe3N1Ymdyb3VwLnB1c2gobm9kZSk7fX19cmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLHRoaXMubmFtZXNwYWNlLHRoaXMuaWQpO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS50d2VlbiA9IGZ1bmN0aW9uKG5hbWUsdHdlZW4pe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAyKXJldHVybiB0aGlzLm5vZGUoKVtuc11baWRdLnR3ZWVuLmdldChuYW1lKTtyZXR1cm4gZDNfc2VsZWN0aW9uX2VhY2godGhpcyx0d2VlbiA9PSBudWxsP2Z1bmN0aW9uKG5vZGUpe25vZGVbbnNdW2lkXS50d2Vlbi5yZW1vdmUobmFtZSk7fTpmdW5jdGlvbihub2RlKXtub2RlW25zXVtpZF0udHdlZW4uc2V0KG5hbWUsdHdlZW4pO30pO307ZnVuY3Rpb24gZDNfdHJhbnNpdGlvbl90d2Vlbihncm91cHMsbmFtZSx2YWx1ZSx0d2Vlbil7dmFyIGlkPWdyb3Vwcy5pZCxucz1ncm91cHMubmFtZXNwYWNlO3JldHVybiBkM19zZWxlY3Rpb25fZWFjaChncm91cHMsdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI/ZnVuY3Rpb24obm9kZSxpLGope25vZGVbbnNdW2lkXS50d2Vlbi5zZXQobmFtZSx0d2Vlbih2YWx1ZS5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopKSk7fToodmFsdWUgPSB0d2Vlbih2YWx1ZSksZnVuY3Rpb24obm9kZSl7bm9kZVtuc11baWRdLnR3ZWVuLnNldChuYW1lLHZhbHVlKTt9KSk7fWQzX3RyYW5zaXRpb25Qcm90b3R5cGUuYXR0ciA9IGZ1bmN0aW9uKG5hbWVOUyx2YWx1ZSl7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpe2Zvcih2YWx1ZSBpbiBuYW1lTlMpIHRoaXMuYXR0cih2YWx1ZSxuYW1lTlNbdmFsdWVdKTtyZXR1cm4gdGhpczt9dmFyIGludGVycG9sYXRlPW5hbWVOUyA9PSBcInRyYW5zZm9ybVwiP2QzX2ludGVycG9sYXRlVHJhbnNmb3JtOmQzX2ludGVycG9sYXRlLG5hbWU9ZDMubnMucXVhbGlmeShuYW1lTlMpO2Z1bmN0aW9uIGF0dHJOdWxsKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fWZ1bmN0aW9uIGF0dHJOdWxsTlMoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCk7fWZ1bmN0aW9uIGF0dHJUd2VlbihiKXtyZXR1cm4gYiA9PSBudWxsP2F0dHJOdWxsOihiICs9IFwiXCIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZShuYW1lKSxpO3JldHVybiBhICE9PSBiICYmIChpID0gaW50ZXJwb2xhdGUoYSxiKSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuYW1lLGkodCkpO30pO30pO31mdW5jdGlvbiBhdHRyVHdlZW5OUyhiKXtyZXR1cm4gYiA9PSBudWxsP2F0dHJOdWxsTlM6KGIgKz0gXCJcIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsKSxpO3JldHVybiBhICE9PSBiICYmIChpID0gaW50ZXJwb2xhdGUoYSxiKSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCxpKHQpKTt9KTt9KTt9cmV0dXJuIGQzX3RyYW5zaXRpb25fdHdlZW4odGhpcyxcImF0dHIuXCIgKyBuYW1lTlMsdmFsdWUsbmFtZS5sb2NhbD9hdHRyVHdlZW5OUzphdHRyVHdlZW4pO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5hdHRyVHdlZW4gPSBmdW5jdGlvbihuYW1lTlMsdHdlZW4pe3ZhciBuYW1lPWQzLm5zLnF1YWxpZnkobmFtZU5TKTtmdW5jdGlvbiBhdHRyVHdlZW4oZCxpKXt2YXIgZj10d2Vlbi5jYWxsKHRoaXMsZCxpLHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpKTtyZXR1cm4gZiAmJiBmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuYW1lLGYodCkpO307fWZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGQsaSl7dmFyIGY9dHdlZW4uY2FsbCh0aGlzLGQsaSx0aGlzLmdldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsbmFtZS5sb2NhbCkpO3JldHVybiBmICYmIGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSxuYW1lLmxvY2FsLGYodCkpO307fXJldHVybiB0aGlzLnR3ZWVuKFwiYXR0ci5cIiArIG5hbWVOUyxuYW1lLmxvY2FsP2F0dHJUd2Vlbk5TOmF0dHJUd2Vlbik7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnN0eWxlID0gZnVuY3Rpb24obmFtZSx2YWx1ZSxwcmlvcml0eSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuIDwgMyl7aWYodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpe2lmKG4gPCAyKXZhbHVlID0gXCJcIjtmb3IocHJpb3JpdHkgaW4gbmFtZSkgdGhpcy5zdHlsZShwcmlvcml0eSxuYW1lW3ByaW9yaXR5XSx2YWx1ZSk7cmV0dXJuIHRoaXM7fXByaW9yaXR5ID0gXCJcIjt9ZnVuY3Rpb24gc3R5bGVOdWxsKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTt9ZnVuY3Rpb24gc3R5bGVTdHJpbmcoYil7cmV0dXJuIGIgPT0gbnVsbD9zdHlsZU51bGw6KGIgKz0gXCJcIixmdW5jdGlvbigpe3ZhciBhPWQzX3dpbmRvdyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSxpO3JldHVybiBhICE9PSBiICYmIChpID0gZDNfaW50ZXJwb2xhdGUoYSxiKSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsaSh0KSxwcmlvcml0eSk7fSk7fSk7fXJldHVybiBkM190cmFuc2l0aW9uX3R3ZWVuKHRoaXMsXCJzdHlsZS5cIiArIG5hbWUsdmFsdWUsc3R5bGVTdHJpbmcpO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5zdHlsZVR3ZWVuID0gZnVuY3Rpb24obmFtZSx0d2Vlbixwcmlvcml0eSl7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDMpcHJpb3JpdHkgPSBcIlwiO2Z1bmN0aW9uIHN0eWxlVHdlZW4oZCxpKXt2YXIgZj10d2Vlbi5jYWxsKHRoaXMsZCxpLGQzX3dpbmRvdyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSk7cmV0dXJuIGYgJiYgZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLGYodCkscHJpb3JpdHkpO307fXJldHVybiB0aGlzLnR3ZWVuKFwic3R5bGUuXCIgKyBuYW1lLHN0eWxlVHdlZW4pO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsdWUpe3JldHVybiBkM190cmFuc2l0aW9uX3R3ZWVuKHRoaXMsXCJ0ZXh0XCIsdmFsdWUsZDNfdHJhbnNpdGlvbl90ZXh0KTt9O2Z1bmN0aW9uIGQzX3RyYW5zaXRpb25fdGV4dChiKXtpZihiID09IG51bGwpYiA9IFwiXCI7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudCA9IGI7fTt9ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbigpe3ZhciBucz10aGlzLm5hbWVzcGFjZTtyZXR1cm4gdGhpcy5lYWNoKFwiZW5kLnRyYW5zaXRpb25cIixmdW5jdGlvbigpe3ZhciBwO2lmKHRoaXNbbnNdLmNvdW50IDwgMiAmJiAocCA9IHRoaXMucGFyZW50Tm9kZSkpcC5yZW1vdmVDaGlsZCh0aGlzKTt9KTt9O2QzX3RyYW5zaXRpb25Qcm90b3R5cGUuZWFzZSA9IGZ1bmN0aW9uKHZhbHVlKXt2YXIgaWQ9dGhpcy5pZCxucz10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoIDwgMSlyZXR1cm4gdGhpcy5ub2RlKClbbnNdW2lkXS5lYXNlO2lmKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKXZhbHVlID0gZDMuZWFzZS5hcHBseShkMyxhcmd1bWVudHMpO3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLGZ1bmN0aW9uKG5vZGUpe25vZGVbbnNdW2lkXS5lYXNlID0gdmFsdWU7fSk7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLmRlbGF5ID0gZnVuY3Rpb24odmFsdWUpe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAxKXJldHVybiB0aGlzLm5vZGUoKVtuc11baWRdLmRlbGF5O3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP2Z1bmN0aW9uKG5vZGUsaSxqKXtub2RlW25zXVtpZF0uZGVsYXkgPSArdmFsdWUuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSxqKTt9Oih2YWx1ZSA9ICt2YWx1ZSxmdW5jdGlvbihub2RlKXtub2RlW25zXVtpZF0uZGVsYXkgPSB2YWx1ZTt9KSk7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLmR1cmF0aW9uID0gZnVuY3Rpb24odmFsdWUpe3ZhciBpZD10aGlzLmlkLG5zPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGggPCAxKXJldHVybiB0aGlzLm5vZGUoKVtuc11baWRdLmR1cmF0aW9uO3JldHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiP2Z1bmN0aW9uKG5vZGUsaSxqKXtub2RlW25zXVtpZF0uZHVyYXRpb24gPSBNYXRoLm1heCgxLHZhbHVlLmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGksaikpO306KHZhbHVlID0gTWF0aC5tYXgoMSx2YWx1ZSksZnVuY3Rpb24obm9kZSl7bm9kZVtuc11baWRdLmR1cmF0aW9uID0gdmFsdWU7fSkpO307ZDNfdHJhbnNpdGlvblByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7dmFyIGlkPXRoaXMuaWQsbnM9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aCA8IDIpe3ZhciBpbmhlcml0PWQzX3RyYW5zaXRpb25Jbmhlcml0LGluaGVyaXRJZD1kM190cmFuc2l0aW9uSW5oZXJpdElkO3RyeXtkM190cmFuc2l0aW9uSW5oZXJpdElkID0gaWQ7ZDNfc2VsZWN0aW9uX2VhY2godGhpcyxmdW5jdGlvbihub2RlLGksail7ZDNfdHJhbnNpdGlvbkluaGVyaXQgPSBub2RlW25zXVtpZF07dHlwZS5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpLGopO30pO31maW5hbGx5IHtkM190cmFuc2l0aW9uSW5oZXJpdCA9IGluaGVyaXQ7ZDNfdHJhbnNpdGlvbkluaGVyaXRJZCA9IGluaGVyaXRJZDt9fWVsc2Uge2QzX3NlbGVjdGlvbl9lYWNoKHRoaXMsZnVuY3Rpb24obm9kZSl7dmFyIHRyYW5zaXRpb249bm9kZVtuc11baWRdOyh0cmFuc2l0aW9uLmV2ZW50IHx8ICh0cmFuc2l0aW9uLmV2ZW50ID0gZDMuZGlzcGF0Y2goXCJzdGFydFwiLFwiZW5kXCIsXCJpbnRlcnJ1cHRcIikpKS5vbih0eXBlLGxpc3RlbmVyKTt9KTt9cmV0dXJuIHRoaXM7fTtkM190cmFuc2l0aW9uUHJvdG90eXBlLnRyYW5zaXRpb24gPSBmdW5jdGlvbigpe3ZhciBpZDA9dGhpcy5pZCxpZDE9KytkM190cmFuc2l0aW9uSWQsbnM9dGhpcy5uYW1lc3BhY2Usc3ViZ3JvdXBzPVtdLHN1Ymdyb3VwLGdyb3VwLG5vZGUsdHJhbnNpdGlvbjtmb3IodmFyIGo9MCxtPXRoaXMubGVuZ3RoO2ogPCBtO2orKykge3N1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pO2Zvcih2YXIgZ3JvdXA9dGhpc1tqXSxpPTAsbj1ncm91cC5sZW5ndGg7aSA8IG47aSsrKSB7aWYobm9kZSA9IGdyb3VwW2ldKXt0cmFuc2l0aW9uID0gbm9kZVtuc11baWQwXTtkM190cmFuc2l0aW9uTm9kZShub2RlLGksbnMsaWQxLHt0aW1lOnRyYW5zaXRpb24udGltZSxlYXNlOnRyYW5zaXRpb24uZWFzZSxkZWxheTp0cmFuc2l0aW9uLmRlbGF5ICsgdHJhbnNpdGlvbi5kdXJhdGlvbixkdXJhdGlvbjp0cmFuc2l0aW9uLmR1cmF0aW9ufSk7fXN1Ymdyb3VwLnB1c2gobm9kZSk7fX1yZXR1cm4gZDNfdHJhbnNpdGlvbihzdWJncm91cHMsbnMsaWQxKTt9O2Z1bmN0aW9uIGQzX3RyYW5zaXRpb25OYW1lc3BhY2UobmFtZSl7cmV0dXJuIG5hbWUgPT0gbnVsbD9cIl9fdHJhbnNpdGlvbl9fXCI6XCJfX3RyYW5zaXRpb25fXCIgKyBuYW1lICsgXCJfX1wiO31mdW5jdGlvbiBkM190cmFuc2l0aW9uTm9kZShub2RlLGksbnMsaWQsaW5oZXJpdCl7dmFyIGxvY2s9bm9kZVtuc10gfHwgKG5vZGVbbnNdID0ge2FjdGl2ZTowLGNvdW50OjB9KSx0cmFuc2l0aW9uPWxvY2tbaWRdO2lmKCF0cmFuc2l0aW9uKXt2YXIgc2NoZWR1bGU9ZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCl7dmFyIGRlbGF5PXRyYW5zaXRpb24uZGVsYXksZHVyYXRpb24sZWFzZSx0d2VlbmVkPVtdO3RpbWVyLnQgPSBkZWxheSArIHRpbWU7aWYoZGVsYXkgPD0gZWxhcHNlZClyZXR1cm4gc3RhcnQoZWxhcHNlZCAtIGRlbGF5KTt0aW1lci5jID0gc3RhcnQ7ZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCl7dmFyIGFjdGl2ZUlkPWxvY2suYWN0aXZlLGFjdGl2ZT1sb2NrW2FjdGl2ZUlkXTtpZihhY3RpdmUpe2FjdGl2ZS50aW1lci5jID0gbnVsbDthY3RpdmUudGltZXIudCA9IE5hTjstLWxvY2suY291bnQ7ZGVsZXRlIGxvY2tbYWN0aXZlSWRdO2FjdGl2ZS5ldmVudCAmJiBhY3RpdmUuZXZlbnQuaW50ZXJydXB0LmNhbGwobm9kZSxub2RlLl9fZGF0YV9fLGFjdGl2ZS5pbmRleCk7fWZvcih2YXIgY2FuY2VsSWQgaW4gbG9jaykge2lmKCtjYW5jZWxJZCA8IGlkKXt2YXIgY2FuY2VsPWxvY2tbY2FuY2VsSWRdO2NhbmNlbC50aW1lci5jID0gbnVsbDtjYW5jZWwudGltZXIudCA9IE5hTjstLWxvY2suY291bnQ7ZGVsZXRlIGxvY2tbY2FuY2VsSWRdO319bG9jay5hY3RpdmUgPSBpZDt0cmFuc2l0aW9uLmV2ZW50ICYmIHRyYW5zaXRpb24uZXZlbnQuc3RhcnQuY2FsbChub2RlLG5vZGUuX19kYXRhX18saSk7dHJhbnNpdGlvbi50d2Vlbi5mb3JFYWNoKGZ1bmN0aW9uKGtleSx2YWx1ZSl7aWYodmFsdWUgPSB2YWx1ZS5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpKSl7dHdlZW5lZC5wdXNoKHZhbHVlKTt9fSk7ZWFzZSA9IHRyYW5zaXRpb24uZWFzZTtkdXJhdGlvbiA9IHRyYW5zaXRpb24uZHVyYXRpb247dGltZXIuYyA9IHRpY2s7ZDNfdGltZXIoZnVuY3Rpb24oKXtpZih0aW1lci5jICYmIHRpY2soZWxhcHNlZCB8fCAxKSl7dGltZXIuYyA9IG51bGw7dGltZXIudCA9IE5hTjt9cmV0dXJuIDE7fSwwLHRpbWUpO31mdW5jdGlvbiB0aWNrKGVsYXBzZWQpe3ZhciB0PWVsYXBzZWQgLyBkdXJhdGlvbixlPWVhc2UodCksbj10d2VlbmVkLmxlbmd0aDt3aGlsZShuID4gMCkge3R3ZWVuZWRbLS1uXS5jYWxsKG5vZGUsZSk7fWlmKHQgPj0gMSl7dHJhbnNpdGlvbi5ldmVudCAmJiB0cmFuc2l0aW9uLmV2ZW50LmVuZC5jYWxsKG5vZGUsbm9kZS5fX2RhdGFfXyxpKTtpZigtLWxvY2suY291bnQpZGVsZXRlIGxvY2tbaWRdO2Vsc2UgZGVsZXRlIG5vZGVbbnNdO3JldHVybiAxO319fTt2YXIgdGltZT1pbmhlcml0LnRpbWUsdGltZXI9ZDNfdGltZXIoc2NoZWR1bGUsMCx0aW1lKTt0cmFuc2l0aW9uID0gbG9ja1tpZF0gPSB7dHdlZW46bmV3IGQzX01hcCgpLHRpbWU6dGltZSx0aW1lcjp0aW1lcixkZWxheTppbmhlcml0LmRlbGF5LGR1cmF0aW9uOmluaGVyaXQuZHVyYXRpb24sZWFzZTppbmhlcml0LmVhc2UsaW5kZXg6aX07aW5oZXJpdCA9IG51bGw7Kytsb2NrLmNvdW50O319ZDMuc3ZnLmF4aXMgPSBmdW5jdGlvbigpe3ZhciBzY2FsZT1kMy5zY2FsZS5saW5lYXIoKSxvcmllbnQ9ZDNfc3ZnX2F4aXNEZWZhdWx0T3JpZW50LGlubmVyVGlja1NpemU9NixvdXRlclRpY2tTaXplPTYsdGlja1BhZGRpbmc9Myx0aWNrQXJndW1lbnRzXz1bMTBdLHRpY2tWYWx1ZXM9bnVsbCx0aWNrRm9ybWF0XztmdW5jdGlvbiBheGlzKGcpe2cuZWFjaChmdW5jdGlvbigpe3ZhciBnPWQzLnNlbGVjdCh0aGlzKTt2YXIgc2NhbGUwPXRoaXMuX19jaGFydF9fIHx8IHNjYWxlLHNjYWxlMT10aGlzLl9fY2hhcnRfXyA9IHNjYWxlLmNvcHkoKTt2YXIgdGlja3M9dGlja1ZhbHVlcyA9PSBudWxsP3NjYWxlMS50aWNrcz9zY2FsZTEudGlja3MuYXBwbHkoc2NhbGUxLHRpY2tBcmd1bWVudHNfKTpzY2FsZTEuZG9tYWluKCk6dGlja1ZhbHVlcyx0aWNrRm9ybWF0PXRpY2tGb3JtYXRfID09IG51bGw/c2NhbGUxLnRpY2tGb3JtYXQ/c2NhbGUxLnRpY2tGb3JtYXQuYXBwbHkoc2NhbGUxLHRpY2tBcmd1bWVudHNfKTpkM19pZGVudGl0eTp0aWNrRm9ybWF0Xyx0aWNrPWcuc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh0aWNrcyxzY2FsZTEpLHRpY2tFbnRlcj10aWNrLmVudGVyKCkuaW5zZXJ0KFwiZ1wiLFwiLmRvbWFpblwiKS5hdHRyKFwiY2xhc3NcIixcInRpY2tcIikuc3R5bGUoXCJvcGFjaXR5XCIszrUpLHRpY2tFeGl0PWQzLnRyYW5zaXRpb24odGljay5leGl0KCkpLnN0eWxlKFwib3BhY2l0eVwiLM61KS5yZW1vdmUoKSx0aWNrVXBkYXRlPWQzLnRyYW5zaXRpb24odGljay5vcmRlcigpKS5zdHlsZShcIm9wYWNpdHlcIiwxKSx0aWNrU3BhY2luZz1NYXRoLm1heChpbm5lclRpY2tTaXplLDApICsgdGlja1BhZGRpbmcsdGlja1RyYW5zZm9ybTt2YXIgcmFuZ2U9ZDNfc2NhbGVSYW5nZShzY2FsZTEpLHBhdGg9Zy5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoWzBdKSxwYXRoVXBkYXRlPShwYXRoLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcImRvbWFpblwiKSxkMy50cmFuc2l0aW9uKHBhdGgpKTt0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKTt0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKTt2YXIgbGluZUVudGVyPXRpY2tFbnRlci5zZWxlY3QoXCJsaW5lXCIpLGxpbmVVcGRhdGU9dGlja1VwZGF0ZS5zZWxlY3QoXCJsaW5lXCIpLHRleHQ9dGljay5zZWxlY3QoXCJ0ZXh0XCIpLnRleHQodGlja0Zvcm1hdCksdGV4dEVudGVyPXRpY2tFbnRlci5zZWxlY3QoXCJ0ZXh0XCIpLHRleHRVcGRhdGU9dGlja1VwZGF0ZS5zZWxlY3QoXCJ0ZXh0XCIpLHNpZ249b3JpZW50ID09PSBcInRvcFwiIHx8IG9yaWVudCA9PT0gXCJsZWZ0XCI/LTE6MSx4MSx4Mix5MSx5MjtpZihvcmllbnQgPT09IFwiYm90dG9tXCIgfHwgb3JpZW50ID09PSBcInRvcFwiKXt0aWNrVHJhbnNmb3JtID0gZDNfc3ZnX2F4aXNYLHgxID0gXCJ4XCIseTEgPSBcInlcIix4MiA9IFwieDJcIix5MiA9IFwieTJcIjt0ZXh0LmF0dHIoXCJkeVwiLHNpZ24gPCAwP1wiMGVtXCI6XCIuNzFlbVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIik7cGF0aFVwZGF0ZS5hdHRyKFwiZFwiLFwiTVwiICsgcmFuZ2VbMF0gKyBcIixcIiArIHNpZ24gKiBvdXRlclRpY2tTaXplICsgXCJWMEhcIiArIHJhbmdlWzFdICsgXCJWXCIgKyBzaWduICogb3V0ZXJUaWNrU2l6ZSk7fWVsc2Uge3RpY2tUcmFuc2Zvcm0gPSBkM19zdmdfYXhpc1kseDEgPSBcInlcIix5MSA9IFwieFwiLHgyID0gXCJ5MlwiLHkyID0gXCJ4MlwiO3RleHQuYXR0cihcImR5XCIsXCIuMzJlbVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsc2lnbiA8IDA/XCJlbmRcIjpcInN0YXJ0XCIpO3BhdGhVcGRhdGUuYXR0cihcImRcIixcIk1cIiArIHNpZ24gKiBvdXRlclRpY2tTaXplICsgXCIsXCIgKyByYW5nZVswXSArIFwiSDBWXCIgKyByYW5nZVsxXSArIFwiSFwiICsgc2lnbiAqIG91dGVyVGlja1NpemUpO31saW5lRW50ZXIuYXR0cih5MixzaWduICogaW5uZXJUaWNrU2l6ZSk7dGV4dEVudGVyLmF0dHIoeTEsc2lnbiAqIHRpY2tTcGFjaW5nKTtsaW5lVXBkYXRlLmF0dHIoeDIsMCkuYXR0cih5MixzaWduICogaW5uZXJUaWNrU2l6ZSk7dGV4dFVwZGF0ZS5hdHRyKHgxLDApLmF0dHIoeTEsc2lnbiAqIHRpY2tTcGFjaW5nKTtpZihzY2FsZTEucmFuZ2VCYW5kKXt2YXIgeD1zY2FsZTEsZHg9eC5yYW5nZUJhbmQoKSAvIDI7c2NhbGUwID0gc2NhbGUxID0gZnVuY3Rpb24oZCl7cmV0dXJuIHgoZCkgKyBkeDt9O31lbHNlIGlmKHNjYWxlMC5yYW5nZUJhbmQpe3NjYWxlMCA9IHNjYWxlMTt9ZWxzZSB7dGlja0V4aXQuY2FsbCh0aWNrVHJhbnNmb3JtLHNjYWxlMSxzY2FsZTApO310aWNrRW50ZXIuY2FsbCh0aWNrVHJhbnNmb3JtLHNjYWxlMCxzY2FsZTEpO3RpY2tVcGRhdGUuY2FsbCh0aWNrVHJhbnNmb3JtLHNjYWxlMSxzY2FsZTEpO30pO31heGlzLnNjYWxlID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHNjYWxlO3NjYWxlID0geDtyZXR1cm4gYXhpczt9O2F4aXMub3JpZW50ID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG9yaWVudDtvcmllbnQgPSB4IGluIGQzX3N2Z19heGlzT3JpZW50cz94ICsgXCJcIjpkM19zdmdfYXhpc0RlZmF1bHRPcmllbnQ7cmV0dXJuIGF4aXM7fTtheGlzLnRpY2tzID0gZnVuY3Rpb24oKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGlja0FyZ3VtZW50c187dGlja0FyZ3VtZW50c18gPSBkM19hcnJheShhcmd1bWVudHMpO3JldHVybiBheGlzO307YXhpcy50aWNrVmFsdWVzID0gZnVuY3Rpb24oeCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRpY2tWYWx1ZXM7dGlja1ZhbHVlcyA9IHg7cmV0dXJuIGF4aXM7fTtheGlzLnRpY2tGb3JtYXQgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGlja0Zvcm1hdF87dGlja0Zvcm1hdF8gPSB4O3JldHVybiBheGlzO307YXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKHgpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW4pcmV0dXJuIGlubmVyVGlja1NpemU7aW5uZXJUaWNrU2l6ZSA9ICt4O291dGVyVGlja1NpemUgPSArYXJndW1lbnRzW24gLSAxXTtyZXR1cm4gYXhpczt9O2F4aXMuaW5uZXJUaWNrU2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpbm5lclRpY2tTaXplO2lubmVyVGlja1NpemUgPSAreDtyZXR1cm4gYXhpczt9O2F4aXMub3V0ZXJUaWNrU2l6ZSA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvdXRlclRpY2tTaXplO291dGVyVGlja1NpemUgPSAreDtyZXR1cm4gYXhpczt9O2F4aXMudGlja1BhZGRpbmcgPSBmdW5jdGlvbih4KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGlja1BhZGRpbmc7dGlja1BhZGRpbmcgPSAreDtyZXR1cm4gYXhpczt9O2F4aXMudGlja1N1YmRpdmlkZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggJiYgYXhpczt9O3JldHVybiBheGlzO307dmFyIGQzX3N2Z19heGlzRGVmYXVsdE9yaWVudD1cImJvdHRvbVwiLGQzX3N2Z19heGlzT3JpZW50cz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIGQzX3N2Z19heGlzWChzZWxlY3Rpb24seDAseDEpe3NlbGVjdGlvbi5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24oZCl7dmFyIHYwPXgwKGQpO3JldHVybiBcInRyYW5zbGF0ZShcIiArIChpc0Zpbml0ZSh2MCk/djA6eDEoZCkpICsgXCIsMClcIjt9KTt9ZnVuY3Rpb24gZDNfc3ZnX2F4aXNZKHNlbGVjdGlvbix5MCx5MSl7c2VsZWN0aW9uLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbihkKXt2YXIgdjA9eTAoZCk7cmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoaXNGaW5pdGUodjApP3YwOnkxKGQpKSArIFwiKVwiO30pO31kMy5zdmcuYnJ1c2ggPSBmdW5jdGlvbigpe3ZhciBldmVudD1kM19ldmVudERpc3BhdGNoKGJydXNoLFwiYnJ1c2hzdGFydFwiLFwiYnJ1c2hcIixcImJydXNoZW5kXCIpLHg9bnVsbCx5PW51bGwseEV4dGVudD1bMCwwXSx5RXh0ZW50PVswLDBdLHhFeHRlbnREb21haW4seUV4dGVudERvbWFpbix4Q2xhbXA9dHJ1ZSx5Q2xhbXA9dHJ1ZSxyZXNpemVzPWQzX3N2Z19icnVzaFJlc2l6ZXNbMF07ZnVuY3Rpb24gYnJ1c2goZyl7Zy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9ZDMuc2VsZWN0KHRoaXMpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLFwicmdiYSgwLDAsMCwwKVwiKS5vbihcIm1vdXNlZG93bi5icnVzaFwiLGJydXNoc3RhcnQpLm9uKFwidG91Y2hzdGFydC5icnVzaFwiLGJydXNoc3RhcnQpO3ZhciBiYWNrZ3JvdW5kPWcuc2VsZWN0QWxsKFwiLmJhY2tncm91bmRcIikuZGF0YShbMF0pO2JhY2tncm91bmQuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiYmFja2dyb3VuZFwiKS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKS5zdHlsZShcImN1cnNvclwiLFwiY3Jvc3NoYWlyXCIpO2cuc2VsZWN0QWxsKFwiLmV4dGVudFwiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiZXh0ZW50XCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJtb3ZlXCIpO3ZhciByZXNpemU9Zy5zZWxlY3RBbGwoXCIucmVzaXplXCIpLmRhdGEocmVzaXplcyxkM19pZGVudGl0eSk7cmVzaXplLmV4aXQoKS5yZW1vdmUoKTtyZXNpemUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKGQpe3JldHVybiBcInJlc2l6ZSBcIiArIGQ7fSkuc3R5bGUoXCJjdXJzb3JcIixmdW5jdGlvbihkKXtyZXR1cm4gZDNfc3ZnX2JydXNoQ3Vyc29yW2RdO30pLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIixmdW5jdGlvbihkKXtyZXR1cm4gKC9bZXddJC8udGVzdChkKT8tMzpudWxsKTt9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKGQpe3JldHVybiAoL15bbnNdLy50ZXN0KGQpPy0zOm51bGwpO30pLmF0dHIoXCJ3aWR0aFwiLDYpLmF0dHIoXCJoZWlnaHRcIiw2KS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKTtyZXNpemUuc3R5bGUoXCJkaXNwbGF5XCIsYnJ1c2guZW1wdHkoKT9cIm5vbmVcIjpudWxsKTt2YXIgZ1VwZGF0ZT1kMy50cmFuc2l0aW9uKGcpLGJhY2tncm91bmRVcGRhdGU9ZDMudHJhbnNpdGlvbihiYWNrZ3JvdW5kKSxyYW5nZTtpZih4KXtyYW5nZSA9IGQzX3NjYWxlUmFuZ2UoeCk7YmFja2dyb3VuZFVwZGF0ZS5hdHRyKFwieFwiLHJhbmdlWzBdKS5hdHRyKFwid2lkdGhcIixyYW5nZVsxXSAtIHJhbmdlWzBdKTtyZWRyYXdYKGdVcGRhdGUpO31pZih5KXtyYW5nZSA9IGQzX3NjYWxlUmFuZ2UoeSk7YmFja2dyb3VuZFVwZGF0ZS5hdHRyKFwieVwiLHJhbmdlWzBdKS5hdHRyKFwiaGVpZ2h0XCIscmFuZ2VbMV0gLSByYW5nZVswXSk7cmVkcmF3WShnVXBkYXRlKTt9cmVkcmF3KGdVcGRhdGUpO30pO31icnVzaC5ldmVudCA9IGZ1bmN0aW9uKGcpe2cuZWFjaChmdW5jdGlvbigpe3ZhciBldmVudF89ZXZlbnQub2YodGhpcyxhcmd1bWVudHMpLGV4dGVudDE9e3g6eEV4dGVudCx5OnlFeHRlbnQsaTp4RXh0ZW50RG9tYWluLGo6eUV4dGVudERvbWFpbn0sZXh0ZW50MD10aGlzLl9fY2hhcnRfXyB8fCBleHRlbnQxO3RoaXMuX19jaGFydF9fID0gZXh0ZW50MTtpZihkM190cmFuc2l0aW9uSW5oZXJpdElkKXtkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goXCJzdGFydC5icnVzaFwiLGZ1bmN0aW9uKCl7eEV4dGVudERvbWFpbiA9IGV4dGVudDAuaTt5RXh0ZW50RG9tYWluID0gZXh0ZW50MC5qO3hFeHRlbnQgPSBleHRlbnQwLng7eUV4dGVudCA9IGV4dGVudDAueTtldmVudF8oe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KTt9KS50d2VlbihcImJydXNoOmJydXNoXCIsZnVuY3Rpb24oKXt2YXIgeGk9ZDNfaW50ZXJwb2xhdGVBcnJheSh4RXh0ZW50LGV4dGVudDEueCkseWk9ZDNfaW50ZXJwb2xhdGVBcnJheSh5RXh0ZW50LGV4dGVudDEueSk7eEV4dGVudERvbWFpbiA9IHlFeHRlbnREb21haW4gPSBudWxsO3JldHVybiBmdW5jdGlvbih0KXt4RXh0ZW50ID0gZXh0ZW50MS54ID0geGkodCk7eUV4dGVudCA9IGV4dGVudDEueSA9IHlpKHQpO2V2ZW50Xyh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSk7fTt9KS5lYWNoKFwiZW5kLmJydXNoXCIsZnVuY3Rpb24oKXt4RXh0ZW50RG9tYWluID0gZXh0ZW50MS5pO3lFeHRlbnREb21haW4gPSBleHRlbnQxLmo7ZXZlbnRfKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KTtldmVudF8oe3R5cGU6XCJicnVzaGVuZFwifSk7fSk7fWVsc2Uge2V2ZW50Xyh7dHlwZTpcImJydXNoc3RhcnRcIn0pO2V2ZW50Xyh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSk7ZXZlbnRfKHt0eXBlOlwiYnJ1c2hlbmRcIn0pO319KTt9O2Z1bmN0aW9uIHJlZHJhdyhnKXtnLnNlbGVjdEFsbChcIi5yZXNpemVcIikuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKGQpe3JldHVybiBcInRyYW5zbGF0ZShcIiArIHhFeHRlbnRbKy9lJC8udGVzdChkKV0gKyBcIixcIiArIHlFeHRlbnRbKy9ecy8udGVzdChkKV0gKyBcIilcIjt9KTt9ZnVuY3Rpb24gcmVkcmF3WChnKXtnLnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInhcIix4RXh0ZW50WzBdKTtnLnNlbGVjdEFsbChcIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0XCIpLmF0dHIoXCJ3aWR0aFwiLHhFeHRlbnRbMV0gLSB4RXh0ZW50WzBdKTt9ZnVuY3Rpb24gcmVkcmF3WShnKXtnLnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInlcIix5RXh0ZW50WzBdKTtnLnNlbGVjdEFsbChcIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0XCIpLmF0dHIoXCJoZWlnaHRcIix5RXh0ZW50WzFdIC0geUV4dGVudFswXSk7fWZ1bmN0aW9uIGJydXNoc3RhcnQoKXt2YXIgdGFyZ2V0PXRoaXMsZXZlbnRUYXJnZXQ9ZDMuc2VsZWN0KGQzLmV2ZW50LnRhcmdldCksZXZlbnRfPWV2ZW50Lm9mKHRhcmdldCxhcmd1bWVudHMpLGc9ZDMuc2VsZWN0KHRhcmdldCkscmVzaXppbmc9ZXZlbnRUYXJnZXQuZGF0dW0oKSxyZXNpemluZ1g9IS9eKG58cykkLy50ZXN0KHJlc2l6aW5nKSAmJiB4LHJlc2l6aW5nWT0hL14oZXx3KSQvLnRlc3QocmVzaXppbmcpICYmIHksZHJhZ2dpbmc9ZXZlbnRUYXJnZXQuY2xhc3NlZChcImV4dGVudFwiKSxkcmFnUmVzdG9yZT1kM19ldmVudF9kcmFnU3VwcHJlc3ModGFyZ2V0KSxjZW50ZXIsb3JpZ2luPWQzLm1vdXNlKHRhcmdldCksb2Zmc2V0O3ZhciB3PWQzLnNlbGVjdChkM193aW5kb3codGFyZ2V0KSkub24oXCJrZXlkb3duLmJydXNoXCIsa2V5ZG93bikub24oXCJrZXl1cC5icnVzaFwiLGtleXVwKTtpZihkMy5ldmVudC5jaGFuZ2VkVG91Y2hlcyl7dy5vbihcInRvdWNobW92ZS5icnVzaFwiLGJydXNobW92ZSkub24oXCJ0b3VjaGVuZC5icnVzaFwiLGJydXNoZW5kKTt9ZWxzZSB7dy5vbihcIm1vdXNlbW92ZS5icnVzaFwiLGJydXNobW92ZSkub24oXCJtb3VzZXVwLmJydXNoXCIsYnJ1c2hlbmQpO31nLmludGVycnVwdCgpLnNlbGVjdEFsbChcIipcIikuaW50ZXJydXB0KCk7aWYoZHJhZ2dpbmcpe29yaWdpblswXSA9IHhFeHRlbnRbMF0gLSBvcmlnaW5bMF07b3JpZ2luWzFdID0geUV4dGVudFswXSAtIG9yaWdpblsxXTt9ZWxzZSBpZihyZXNpemluZyl7dmFyIGV4PSsvdyQvLnRlc3QocmVzaXppbmcpLGV5PSsvXm4vLnRlc3QocmVzaXppbmcpO29mZnNldCA9IFt4RXh0ZW50WzEgLSBleF0gLSBvcmlnaW5bMF0seUV4dGVudFsxIC0gZXldIC0gb3JpZ2luWzFdXTtvcmlnaW5bMF0gPSB4RXh0ZW50W2V4XTtvcmlnaW5bMV0gPSB5RXh0ZW50W2V5XTt9ZWxzZSBpZihkMy5ldmVudC5hbHRLZXkpY2VudGVyID0gb3JpZ2luLnNsaWNlKCk7Zy5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLnNlbGVjdEFsbChcIi5yZXNpemVcIikuc3R5bGUoXCJkaXNwbGF5XCIsbnVsbCk7ZDMuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLGV2ZW50VGFyZ2V0LnN0eWxlKFwiY3Vyc29yXCIpKTtldmVudF8oe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KTticnVzaG1vdmUoKTtmdW5jdGlvbiBrZXlkb3duKCl7aWYoZDMuZXZlbnQua2V5Q29kZSA9PSAzMil7aWYoIWRyYWdnaW5nKXtjZW50ZXIgPSBudWxsO29yaWdpblswXSAtPSB4RXh0ZW50WzFdO29yaWdpblsxXSAtPSB5RXh0ZW50WzFdO2RyYWdnaW5nID0gMjt9ZDNfZXZlbnRQcmV2ZW50RGVmYXVsdCgpO319ZnVuY3Rpb24ga2V5dXAoKXtpZihkMy5ldmVudC5rZXlDb2RlID09IDMyICYmIGRyYWdnaW5nID09IDIpe29yaWdpblswXSArPSB4RXh0ZW50WzFdO29yaWdpblsxXSArPSB5RXh0ZW50WzFdO2RyYWdnaW5nID0gMDtkM19ldmVudFByZXZlbnREZWZhdWx0KCk7fX1mdW5jdGlvbiBicnVzaG1vdmUoKXt2YXIgcG9pbnQ9ZDMubW91c2UodGFyZ2V0KSxtb3ZlZD1mYWxzZTtpZihvZmZzZXQpe3BvaW50WzBdICs9IG9mZnNldFswXTtwb2ludFsxXSArPSBvZmZzZXRbMV07fWlmKCFkcmFnZ2luZyl7aWYoZDMuZXZlbnQuYWx0S2V5KXtpZighY2VudGVyKWNlbnRlciA9IFsoeEV4dGVudFswXSArIHhFeHRlbnRbMV0pIC8gMiwoeUV4dGVudFswXSArIHlFeHRlbnRbMV0pIC8gMl07b3JpZ2luWzBdID0geEV4dGVudFsrKHBvaW50WzBdIDwgY2VudGVyWzBdKV07b3JpZ2luWzFdID0geUV4dGVudFsrKHBvaW50WzFdIDwgY2VudGVyWzFdKV07fWVsc2UgY2VudGVyID0gbnVsbDt9aWYocmVzaXppbmdYICYmIG1vdmUxKHBvaW50LHgsMCkpe3JlZHJhd1goZyk7bW92ZWQgPSB0cnVlO31pZihyZXNpemluZ1kgJiYgbW92ZTEocG9pbnQseSwxKSl7cmVkcmF3WShnKTttb3ZlZCA9IHRydWU7fWlmKG1vdmVkKXtyZWRyYXcoZyk7ZXZlbnRfKHt0eXBlOlwiYnJ1c2hcIixtb2RlOmRyYWdnaW5nP1wibW92ZVwiOlwicmVzaXplXCJ9KTt9fWZ1bmN0aW9uIG1vdmUxKHBvaW50LHNjYWxlLGkpe3ZhciByYW5nZT1kM19zY2FsZVJhbmdlKHNjYWxlKSxyMD1yYW5nZVswXSxyMT1yYW5nZVsxXSxwb3NpdGlvbj1vcmlnaW5baV0sZXh0ZW50PWk/eUV4dGVudDp4RXh0ZW50LHNpemU9ZXh0ZW50WzFdIC0gZXh0ZW50WzBdLG1pbixtYXg7aWYoZHJhZ2dpbmcpe3IwIC09IHBvc2l0aW9uO3IxIC09IHNpemUgKyBwb3NpdGlvbjt9bWluID0gKGk/eUNsYW1wOnhDbGFtcCk/TWF0aC5tYXgocjAsTWF0aC5taW4ocjEscG9pbnRbaV0pKTpwb2ludFtpXTtpZihkcmFnZ2luZyl7bWF4ID0gKG1pbiArPSBwb3NpdGlvbikgKyBzaXplO31lbHNlIHtpZihjZW50ZXIpcG9zaXRpb24gPSBNYXRoLm1heChyMCxNYXRoLm1pbihyMSwyICogY2VudGVyW2ldIC0gbWluKSk7aWYocG9zaXRpb24gPCBtaW4pe21heCA9IG1pbjttaW4gPSBwb3NpdGlvbjt9ZWxzZSB7bWF4ID0gcG9zaXRpb247fX1pZihleHRlbnRbMF0gIT0gbWluIHx8IGV4dGVudFsxXSAhPSBtYXgpe2lmKGkpeUV4dGVudERvbWFpbiA9IG51bGw7ZWxzZSB4RXh0ZW50RG9tYWluID0gbnVsbDtleHRlbnRbMF0gPSBtaW47ZXh0ZW50WzFdID0gbWF4O3JldHVybiB0cnVlO319ZnVuY3Rpb24gYnJ1c2hlbmQoKXticnVzaG1vdmUoKTtnLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5zZWxlY3RBbGwoXCIucmVzaXplXCIpLnN0eWxlKFwiZGlzcGxheVwiLGJydXNoLmVtcHR5KCk/XCJub25lXCI6bnVsbCk7ZDMuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLG51bGwpO3cub24oXCJtb3VzZW1vdmUuYnJ1c2hcIixudWxsKS5vbihcIm1vdXNldXAuYnJ1c2hcIixudWxsKS5vbihcInRvdWNobW92ZS5icnVzaFwiLG51bGwpLm9uKFwidG91Y2hlbmQuYnJ1c2hcIixudWxsKS5vbihcImtleWRvd24uYnJ1c2hcIixudWxsKS5vbihcImtleXVwLmJydXNoXCIsbnVsbCk7ZHJhZ1Jlc3RvcmUoKTtldmVudF8oe3R5cGU6XCJicnVzaGVuZFwifSk7fX1icnVzaC54ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHg7eCA9IHo7cmVzaXplcyA9IGQzX3N2Z19icnVzaFJlc2l6ZXNbIXggPDwgMSB8ICF5XTtyZXR1cm4gYnJ1c2g7fTticnVzaC55ID0gZnVuY3Rpb24oeil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHk7eSA9IHo7cmVzaXplcyA9IGQzX3N2Z19icnVzaFJlc2l6ZXNbIXggPDwgMSB8ICF5XTtyZXR1cm4gYnJ1c2g7fTticnVzaC5jbGFtcCA9IGZ1bmN0aW9uKHope2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB4ICYmIHk/W3hDbGFtcCx5Q2xhbXBdOng/eENsYW1wOnk/eUNsYW1wOm51bGw7aWYoeCAmJiB5KXhDbGFtcCA9ICEhelswXSx5Q2xhbXAgPSAhIXpbMV07ZWxzZSBpZih4KXhDbGFtcCA9ICEhejtlbHNlIGlmKHkpeUNsYW1wID0gISF6O3JldHVybiBicnVzaDt9O2JydXNoLmV4dGVudCA9IGZ1bmN0aW9uKHope3ZhciB4MCx4MSx5MCx5MSx0O2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZih4KXtpZih4RXh0ZW50RG9tYWluKXt4MCA9IHhFeHRlbnREb21haW5bMF0seDEgPSB4RXh0ZW50RG9tYWluWzFdO31lbHNlIHt4MCA9IHhFeHRlbnRbMF0seDEgPSB4RXh0ZW50WzFdO2lmKHguaW52ZXJ0KXgwID0geC5pbnZlcnQoeDApLHgxID0geC5pbnZlcnQoeDEpO2lmKHgxIDwgeDApdCA9IHgwLHgwID0geDEseDEgPSB0O319aWYoeSl7aWYoeUV4dGVudERvbWFpbil7eTAgPSB5RXh0ZW50RG9tYWluWzBdLHkxID0geUV4dGVudERvbWFpblsxXTt9ZWxzZSB7eTAgPSB5RXh0ZW50WzBdLHkxID0geUV4dGVudFsxXTtpZih5LmludmVydCl5MCA9IHkuaW52ZXJ0KHkwKSx5MSA9IHkuaW52ZXJ0KHkxKTtpZih5MSA8IHkwKXQgPSB5MCx5MCA9IHkxLHkxID0gdDt9fXJldHVybiB4ICYmIHk/W1t4MCx5MF0sW3gxLHkxXV06eD9beDAseDFdOnkgJiYgW3kwLHkxXTt9aWYoeCl7eDAgPSB6WzBdLHgxID0gelsxXTtpZih5KXgwID0geDBbMF0seDEgPSB4MVswXTt4RXh0ZW50RG9tYWluID0gW3gwLHgxXTtpZih4LmludmVydCl4MCA9IHgoeDApLHgxID0geCh4MSk7aWYoeDEgPCB4MCl0ID0geDAseDAgPSB4MSx4MSA9IHQ7aWYoeDAgIT0geEV4dGVudFswXSB8fCB4MSAhPSB4RXh0ZW50WzFdKXhFeHRlbnQgPSBbeDAseDFdO31pZih5KXt5MCA9IHpbMF0seTEgPSB6WzFdO2lmKHgpeTAgPSB5MFsxXSx5MSA9IHkxWzFdO3lFeHRlbnREb21haW4gPSBbeTAseTFdO2lmKHkuaW52ZXJ0KXkwID0geSh5MCkseTEgPSB5KHkxKTtpZih5MSA8IHkwKXQgPSB5MCx5MCA9IHkxLHkxID0gdDtpZih5MCAhPSB5RXh0ZW50WzBdIHx8IHkxICE9IHlFeHRlbnRbMV0peUV4dGVudCA9IFt5MCx5MV07fXJldHVybiBicnVzaDt9O2JydXNoLmNsZWFyID0gZnVuY3Rpb24oKXtpZighYnJ1c2guZW1wdHkoKSl7eEV4dGVudCA9IFswLDBdLHlFeHRlbnQgPSBbMCwwXTt4RXh0ZW50RG9tYWluID0geUV4dGVudERvbWFpbiA9IG51bGw7fXJldHVybiBicnVzaDt9O2JydXNoLmVtcHR5ID0gZnVuY3Rpb24oKXtyZXR1cm4gISF4ICYmIHhFeHRlbnRbMF0gPT0geEV4dGVudFsxXSB8fCAhIXkgJiYgeUV4dGVudFswXSA9PSB5RXh0ZW50WzFdO307cmV0dXJuIGQzLnJlYmluZChicnVzaCxldmVudCxcIm9uXCIpO307dmFyIGQzX3N2Z19icnVzaEN1cnNvcj17bjpcIm5zLXJlc2l6ZVwiLGU6XCJldy1yZXNpemVcIixzOlwibnMtcmVzaXplXCIsdzpcImV3LXJlc2l6ZVwiLG53OlwibndzZS1yZXNpemVcIixuZTpcIm5lc3ctcmVzaXplXCIsc2U6XCJud3NlLXJlc2l6ZVwiLHN3OlwibmVzdy1yZXNpemVcIn07dmFyIGQzX3N2Z19icnVzaFJlc2l6ZXM9W1tcIm5cIixcImVcIixcInNcIixcIndcIixcIm53XCIsXCJuZVwiLFwic2VcIixcInN3XCJdLFtcImVcIixcIndcIl0sW1wiblwiLFwic1wiXSxbXV07dmFyIGQzX3RpbWVfZm9ybWF0PWQzX3RpbWUuZm9ybWF0ID0gZDNfbG9jYWxlX2VuVVMudGltZUZvcm1hdDt2YXIgZDNfdGltZV9mb3JtYXRVdGM9ZDNfdGltZV9mb3JtYXQudXRjO3ZhciBkM190aW1lX2Zvcm1hdElzbz1kM190aW1lX2Zvcm1hdFV0YyhcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiKTtkM190aW1lX2Zvcm1hdC5pc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAmJiArbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIik/ZDNfdGltZV9mb3JtYXRJc29OYXRpdmU6ZDNfdGltZV9mb3JtYXRJc287ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXRJc29OYXRpdmUoZGF0ZSl7cmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTt9ZDNfdGltZV9mb3JtYXRJc29OYXRpdmUucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcpe3ZhciBkYXRlPW5ldyBEYXRlKHN0cmluZyk7cmV0dXJuIGlzTmFOKGRhdGUpP251bGw6ZGF0ZTt9O2QzX3RpbWVfZm9ybWF0SXNvTmF0aXZlLnRvU3RyaW5nID0gZDNfdGltZV9mb3JtYXRJc28udG9TdHJpbmc7ZDNfdGltZS5zZWNvbmQgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe3JldHVybiBuZXcgZDNfZGF0ZShNYXRoLmZsb29yKGRhdGUgLyAxZTMpICogMWUzKTt9LGZ1bmN0aW9uKGRhdGUsb2Zmc2V0KXtkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBNYXRoLmZsb29yKG9mZnNldCkgKiAxZTMpO30sZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUuZ2V0U2Vjb25kcygpO30pO2QzX3RpbWUuc2Vjb25kcyA9IGQzX3RpbWUuc2Vjb25kLnJhbmdlO2QzX3RpbWUuc2Vjb25kcy51dGMgPSBkM190aW1lLnNlY29uZC51dGMucmFuZ2U7ZDNfdGltZS5taW51dGUgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe3JldHVybiBuZXcgZDNfZGF0ZShNYXRoLmZsb29yKGRhdGUgLyA2ZTQpICogNmU0KTt9LGZ1bmN0aW9uKGRhdGUsb2Zmc2V0KXtkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBNYXRoLmZsb29yKG9mZnNldCkgKiA2ZTQpO30sZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO30pO2QzX3RpbWUubWludXRlcyA9IGQzX3RpbWUubWludXRlLnJhbmdlO2QzX3RpbWUubWludXRlcy51dGMgPSBkM190aW1lLm1pbnV0ZS51dGMucmFuZ2U7ZDNfdGltZS5ob3VyID0gZDNfdGltZV9pbnRlcnZhbChmdW5jdGlvbihkYXRlKXt2YXIgdGltZXpvbmU9ZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjA7cmV0dXJuIG5ldyBkM19kYXRlKChNYXRoLmZsb29yKGRhdGUgLyAzNmU1IC0gdGltZXpvbmUpICsgdGltZXpvbmUpICogMzZlNSk7fSxmdW5jdGlvbihkYXRlLG9mZnNldCl7ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogMzZlNSk7fSxmdW5jdGlvbihkYXRlKXtyZXR1cm4gZGF0ZS5nZXRIb3VycygpO30pO2QzX3RpbWUuaG91cnMgPSBkM190aW1lLmhvdXIucmFuZ2U7ZDNfdGltZS5ob3Vycy51dGMgPSBkM190aW1lLmhvdXIudXRjLnJhbmdlO2QzX3RpbWUubW9udGggPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpe2RhdGUgPSBkM190aW1lLmRheShkYXRlKTtkYXRlLnNldERhdGUoMSk7cmV0dXJuIGRhdGU7fSxmdW5jdGlvbihkYXRlLG9mZnNldCl7ZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBvZmZzZXQpO30sZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUuZ2V0TW9udGgoKTt9KTtkM190aW1lLm1vbnRocyA9IGQzX3RpbWUubW9udGgucmFuZ2U7ZDNfdGltZS5tb250aHMudXRjID0gZDNfdGltZS5tb250aC51dGMucmFuZ2U7ZnVuY3Rpb24gZDNfdGltZV9zY2FsZShsaW5lYXIsbWV0aG9kcyxmb3JtYXQpe2Z1bmN0aW9uIHNjYWxlKHgpe3JldHVybiBsaW5lYXIoeCk7fXNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHgpe3JldHVybiBkM190aW1lX3NjYWxlRGF0ZShsaW5lYXIuaW52ZXJ0KHgpKTt9O3NjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKHgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBsaW5lYXIuZG9tYWluKCkubWFwKGQzX3RpbWVfc2NhbGVEYXRlKTtsaW5lYXIuZG9tYWluKHgpO3JldHVybiBzY2FsZTt9O2Z1bmN0aW9uIHRpY2tNZXRob2QoZXh0ZW50LGNvdW50KXt2YXIgc3Bhbj1leHRlbnRbMV0gLSBleHRlbnRbMF0sdGFyZ2V0PXNwYW4gLyBjb3VudCxpPWQzLmJpc2VjdChkM190aW1lX3NjYWxlU3RlcHMsdGFyZ2V0KTtyZXR1cm4gaSA9PSBkM190aW1lX3NjYWxlU3RlcHMubGVuZ3RoP1ttZXRob2RzLnllYXIsZDNfc2NhbGVfbGluZWFyVGlja1JhbmdlKGV4dGVudC5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGQgLyAzMTUzNmU2O30pLGNvdW50KVsyXV06IWk/W2QzX3RpbWVfc2NhbGVNaWxsaXNlY29uZHMsZDNfc2NhbGVfbGluZWFyVGlja1JhbmdlKGV4dGVudCxjb3VudClbMl1dOm1ldGhvZHNbdGFyZ2V0IC8gZDNfdGltZV9zY2FsZVN0ZXBzW2kgLSAxXSA8IGQzX3RpbWVfc2NhbGVTdGVwc1tpXSAvIHRhcmdldD9pIC0gMTppXTt9c2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLHNraXApe3ZhciBkb21haW49c2NhbGUuZG9tYWluKCksZXh0ZW50PWQzX3NjYWxlRXh0ZW50KGRvbWFpbiksbWV0aG9kPWludGVydmFsID09IG51bGw/dGlja01ldGhvZChleHRlbnQsMTApOnR5cGVvZiBpbnRlcnZhbCA9PT0gXCJudW1iZXJcIiAmJiB0aWNrTWV0aG9kKGV4dGVudCxpbnRlcnZhbCk7aWYobWV0aG9kKWludGVydmFsID0gbWV0aG9kWzBdLHNraXAgPSBtZXRob2RbMV07ZnVuY3Rpb24gc2tpcHBlZChkYXRlKXtyZXR1cm4gIWlzTmFOKGRhdGUpICYmICFpbnRlcnZhbC5yYW5nZShkYXRlLGQzX3RpbWVfc2NhbGVEYXRlKCtkYXRlICsgMSksc2tpcCkubGVuZ3RoO31yZXR1cm4gc2NhbGUuZG9tYWluKGQzX3NjYWxlX25pY2UoZG9tYWluLHNraXAgPiAxP3tmbG9vcjpmdW5jdGlvbiBmbG9vcihkYXRlKXt3aGlsZShza2lwcGVkKGRhdGUgPSBpbnRlcnZhbC5mbG9vcihkYXRlKSkpIGRhdGUgPSBkM190aW1lX3NjYWxlRGF0ZShkYXRlIC0gMSk7cmV0dXJuIGRhdGU7fSxjZWlsOmZ1bmN0aW9uIGNlaWwoZGF0ZSl7d2hpbGUoc2tpcHBlZChkYXRlID0gaW50ZXJ2YWwuY2VpbChkYXRlKSkpIGRhdGUgPSBkM190aW1lX3NjYWxlRGF0ZSgrZGF0ZSArIDEpO3JldHVybiBkYXRlO319OmludGVydmFsKSk7fTtzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLHNraXApe3ZhciBleHRlbnQ9ZDNfc2NhbGVFeHRlbnQoc2NhbGUuZG9tYWluKCkpLG1ldGhvZD1pbnRlcnZhbCA9PSBudWxsP3RpY2tNZXRob2QoZXh0ZW50LDEwKTp0eXBlb2YgaW50ZXJ2YWwgPT09IFwibnVtYmVyXCI/dGlja01ldGhvZChleHRlbnQsaW50ZXJ2YWwpOiFpbnRlcnZhbC5yYW5nZSAmJiBbe3JhbmdlOmludGVydmFsfSxza2lwXTtpZihtZXRob2QpaW50ZXJ2YWwgPSBtZXRob2RbMF0sc2tpcCA9IG1ldGhvZFsxXTtyZXR1cm4gaW50ZXJ2YWwucmFuZ2UoZXh0ZW50WzBdLGQzX3RpbWVfc2NhbGVEYXRlKCtleHRlbnRbMV0gKyAxKSxza2lwIDwgMT8xOnNraXApO307c2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKCl7cmV0dXJuIGZvcm1hdDt9O3NjYWxlLmNvcHkgPSBmdW5jdGlvbigpe3JldHVybiBkM190aW1lX3NjYWxlKGxpbmVhci5jb3B5KCksbWV0aG9kcyxmb3JtYXQpO307cmV0dXJuIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSxsaW5lYXIpO31mdW5jdGlvbiBkM190aW1lX3NjYWxlRGF0ZSh0KXtyZXR1cm4gbmV3IERhdGUodCk7fXZhciBkM190aW1lX3NjYWxlU3RlcHM9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XTt2YXIgZDNfdGltZV9zY2FsZUxvY2FsTWV0aG9kcz1bW2QzX3RpbWUuc2Vjb25kLDFdLFtkM190aW1lLnNlY29uZCw1XSxbZDNfdGltZS5zZWNvbmQsMTVdLFtkM190aW1lLnNlY29uZCwzMF0sW2QzX3RpbWUubWludXRlLDFdLFtkM190aW1lLm1pbnV0ZSw1XSxbZDNfdGltZS5taW51dGUsMTVdLFtkM190aW1lLm1pbnV0ZSwzMF0sW2QzX3RpbWUuaG91ciwxXSxbZDNfdGltZS5ob3VyLDNdLFtkM190aW1lLmhvdXIsNl0sW2QzX3RpbWUuaG91ciwxMl0sW2QzX3RpbWUuZGF5LDFdLFtkM190aW1lLmRheSwyXSxbZDNfdGltZS53ZWVrLDFdLFtkM190aW1lLm1vbnRoLDFdLFtkM190aW1lLm1vbnRoLDNdLFtkM190aW1lLnllYXIsMV1dO3ZhciBkM190aW1lX3NjYWxlTG9jYWxGb3JtYXQ9ZDNfdGltZV9mb3JtYXQubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldE1pbGxpc2Vjb25kcygpO31dLFtcIjolU1wiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFNlY29uZHMoKTt9XSxbXCIlSTolTVwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldE1pbnV0ZXMoKTt9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldEhvdXJzKCk7fV0sW1wiJWEgJWRcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXREYXkoKSAmJiBkLmdldERhdGUoKSAhPSAxO31dLFtcIiViICVkXCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ2V0RGF0ZSgpICE9IDE7fV0sW1wiJUJcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXRNb250aCgpO31dLFtcIiVZXCIsZDNfdHJ1ZV1dKTt2YXIgZDNfdGltZV9zY2FsZU1pbGxpc2Vjb25kcz17cmFuZ2U6ZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsc3RvcCxzdGVwKXtyZXR1cm4gZDMucmFuZ2UoTWF0aC5jZWlsKHN0YXJ0IC8gc3RlcCkgKiBzdGVwLCtzdG9wLHN0ZXApLm1hcChkM190aW1lX3NjYWxlRGF0ZSk7fSxmbG9vcjpkM19pZGVudGl0eSxjZWlsOmQzX2lkZW50aXR5fTtkM190aW1lX3NjYWxlTG9jYWxNZXRob2RzLnllYXIgPSBkM190aW1lLnllYXI7ZDNfdGltZS5zY2FsZSA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3RpbWVfc2NhbGUoZDMuc2NhbGUubGluZWFyKCksZDNfdGltZV9zY2FsZUxvY2FsTWV0aG9kcyxkM190aW1lX3NjYWxlTG9jYWxGb3JtYXQpO307dmFyIGQzX3RpbWVfc2NhbGVVdGNNZXRob2RzPWQzX3RpbWVfc2NhbGVMb2NhbE1ldGhvZHMubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBbbVswXS51dGMsbVsxXV07fSk7dmFyIGQzX3RpbWVfc2NhbGVVdGNGb3JtYXQ9ZDNfdGltZV9mb3JtYXRVdGMubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ01pbGxpc2Vjb25kcygpO31dLFtcIjolU1wiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ1NlY29uZHMoKTt9XSxbXCIlSTolTVwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ01pbnV0ZXMoKTt9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldFVUQ0hvdXJzKCk7fV0sW1wiJWEgJWRcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXRVVENEYXkoKSAmJiBkLmdldFVUQ0RhdGUoKSAhPSAxO31dLFtcIiViICVkXCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ2V0VVRDRGF0ZSgpICE9IDE7fV0sW1wiJUJcIixmdW5jdGlvbihkKXtyZXR1cm4gZC5nZXRVVENNb250aCgpO31dLFtcIiVZXCIsZDNfdHJ1ZV1dKTtkM190aW1lX3NjYWxlVXRjTWV0aG9kcy55ZWFyID0gZDNfdGltZS55ZWFyLnV0YztkM190aW1lLnNjYWxlLnV0YyA9IGZ1bmN0aW9uKCl7cmV0dXJuIGQzX3RpbWVfc2NhbGUoZDMuc2NhbGUubGluZWFyKCksZDNfdGltZV9zY2FsZVV0Y01ldGhvZHMsZDNfdGltZV9zY2FsZVV0Y0Zvcm1hdCk7fTtkMy50ZXh0ID0gZDNfeGhyVHlwZShmdW5jdGlvbihyZXF1ZXN0KXtyZXR1cm4gcmVxdWVzdC5yZXNwb25zZVRleHQ7fSk7ZDMuanNvbiA9IGZ1bmN0aW9uKHVybCxjYWxsYmFjayl7cmV0dXJuIGQzX3hocih1cmwsXCJhcHBsaWNhdGlvbi9qc29uXCIsZDNfanNvbixjYWxsYmFjayk7fTtmdW5jdGlvbiBkM19qc29uKHJlcXVlc3Qpe3JldHVybiBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTt9ZDMuaHRtbCA9IGZ1bmN0aW9uKHVybCxjYWxsYmFjayl7cmV0dXJuIGQzX3hocih1cmwsXCJ0ZXh0L2h0bWxcIixkM19odG1sLGNhbGxiYWNrKTt9O2Z1bmN0aW9uIGQzX2h0bWwocmVxdWVzdCl7dmFyIHJhbmdlPWQzX2RvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cmFuZ2Uuc2VsZWN0Tm9kZShkM19kb2N1bWVudC5ib2R5KTtyZXR1cm4gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHJlcXVlc3QucmVzcG9uc2VUZXh0KTt9ZDMueG1sID0gZDNfeGhyVHlwZShmdW5jdGlvbihyZXF1ZXN0KXtyZXR1cm4gcmVxdWVzdC5yZXNwb25zZVhNTDt9KTtpZih0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZClkZWZpbmUodGhpcy5kMyA9IGQzKTtlbHNlIGlmKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgbW9kdWxlLmV4cG9ydHMpbW9kdWxlLmV4cG9ydHMgPSBkMztlbHNlIHRoaXMuZDMgPSBkMzt9KSgpO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2QzL2QzLmpzXG4gKiogbW9kdWxlIGlkID0gMjE1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 216 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsIconJs = __webpack_require__(161);\n\nvar _iconsIconJs2 = _interopRequireDefault(_iconsIconJs);\n\nvar methodsToBind = ['handleClick'];\n\nvar StatusFilter = (function (_React$Component) {\n _inherits(StatusFilter, _React$Component);\n\n function StatusFilter() {\n var _this = this;\n\n _classCallCheck(this, StatusFilter);\n\n _get(Object.getPrototypeOf(StatusFilter.prototype), 'constructor', this).call(this);\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(StatusFilter, [{\n key: 'handleClick',\n value: function handleClick() {\n this.props.handleClick(this.props.slug);\n }\n }, {\n key: 'render',\n value: function render() {\n var itemClass = 'status-filter__item--' + this.props.slug;\n\n var classNames = (0, _classnames2['default'])({\n 'status-filter__item': true,\n itemClass: true,\n 'is-active': this.props.isActive\n });\n\n return _react2['default'].createElement(\n 'li',\n { className: classNames, onClick: this.handleClick },\n _react2['default'].createElement(_iconsIconJs2['default'], { icon: this.props.icon }),\n this.props.name\n );\n }\n }]);\n\n return StatusFilter;\n})(_react2['default'].Component);\n\nexports['default'] = StatusFilter;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1N0YXR1c0ZpbHRlci5qcz9hMTdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxTQUFTLG1EQUFtRDtBQUM1RCxvRUFBb0Usd0JBQXdCO0FBQzVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2ljb25zSWNvbkpzID0gcmVxdWlyZSgnLi4vaWNvbnMvSWNvbi5qcycpO1xuXG52YXIgX2ljb25zSWNvbkpzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ljb25zSWNvbkpzKTtcblxudmFyIG1ldGhvZHNUb0JpbmQgPSBbJ2hhbmRsZUNsaWNrJ107XG5cbnZhciBTdGF0dXNGaWx0ZXIgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN0YXR1c0ZpbHRlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3RhdHVzRmlsdGVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhdHVzRmlsdGVyKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFN0YXR1c0ZpbHRlci5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgbWV0aG9kc1RvQmluZC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN0YXR1c0ZpbHRlciwgW3tcbiAgICBrZXk6ICdoYW5kbGVDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgdGhpcy5wcm9wcy5oYW5kbGVDbGljayh0aGlzLnByb3BzLnNsdWcpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBpdGVtQ2xhc3MgPSAnc3RhdHVzLWZpbHRlcl9faXRlbS0tJyArIHRoaXMucHJvcHMuc2x1ZztcblxuICAgICAgdmFyIGNsYXNzTmFtZXMgPSAoMCwgX2NsYXNzbmFtZXMyWydkZWZhdWx0J10pKHtcbiAgICAgICAgJ3N0YXR1cy1maWx0ZXJfX2l0ZW0nOiB0cnVlLFxuICAgICAgICBpdGVtQ2xhc3M6IHRydWUsXG4gICAgICAgICdpcy1hY3RpdmUnOiB0aGlzLnByb3BzLmlzQWN0aXZlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnbGknLFxuICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcywgb25DbGljazogdGhpcy5oYW5kbGVDbGljayB9LFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uSnMyWydkZWZhdWx0J10sIHsgaWNvbjogdGhpcy5wcm9wcy5pY29uIH0pLFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YXR1c0ZpbHRlcjtcbn0pKF9yZWFjdDJbJ2RlZmF1bHQnXS5Db21wb25lbnQpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBTdGF0dXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvc2lkZWJhci9TdGF0dXNGaWx0ZXIuanNcbiAqKiBtb2R1bGUgaWQgPSAyMTZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['handleKeyUp'];\n\nvar SearchBox = (function (_React$Component) {\n _inherits(SearchBox, _React$Component);\n\n function SearchBox() {\n var _this = this;\n\n _classCallCheck(this, SearchBox);\n\n _get(Object.getPrototypeOf(SearchBox.prototype), 'constructor', this).call(this);\n\n this.state = {\n searchValue: ''\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(SearchBox, [{\n key: 'handleKeyUp',\n value: function handleKeyUp(event) {\n var value = event.target.value;\n this.setState({\n searchValue: value\n });\n _actionsUIActions2['default'].setTorrentsSearchFilter(value);\n }\n }, {\n key: 'render',\n value: function render() {\n var classSet = (0, _classnames2['default'])({\n 'sidebar__item': true,\n 'sidebar__item--search': true,\n 'is-in-use': this.state.searchValue !== ''\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: classSet },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'search' }),\n _react2['default'].createElement('input', { className: 'textbox',\n type: 'text',\n placeholder: 'Search Torrents',\n onKeyUp: this.handleKeyUp })\n );\n }\n }]);\n\n return SearchBox;\n})(_react2['default'].Component);\n\nexports['default'] = SearchBox;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NlYXJjaEJveC5qcz81NGRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLFNBQVMsc0JBQXNCO0FBQy9CLGtFQUFrRSxpQkFBaUI7QUFDbkYsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2ljb25zSWNvbiA9IHJlcXVpcmUoJy4uL2ljb25zL0ljb24nKTtcblxudmFyIF9pY29uc0ljb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zID0gcmVxdWlyZSgnLi4vLi4vYWN0aW9ucy9VSUFjdGlvbnMnKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNVSUFjdGlvbnMpO1xuXG52YXIgbWV0aG9kc1RvQmluZCA9IFsnaGFuZGxlS2V5VXAnXTtcblxudmFyIFNlYXJjaEJveCA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2VhcmNoQm94LCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTZWFyY2hCb3goKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWFyY2hCb3gpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU2VhcmNoQm94LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2VhcmNoVmFsdWU6ICcnXG4gICAgfTtcblxuICAgIG1ldGhvZHNUb0JpbmQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTZWFyY2hCb3gsIFt7XG4gICAga2V5OiAnaGFuZGxlS2V5VXAnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVLZXlVcChldmVudCkge1xuICAgICAgdmFyIHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5zZXRUb3JyZW50c1NlYXJjaEZpbHRlcih2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNsYXNzU2V0ID0gKDAsIF9jbGFzc25hbWVzMlsnZGVmYXVsdCddKSh7XG4gICAgICAgICdzaWRlYmFyX19pdGVtJzogdHJ1ZSxcbiAgICAgICAgJ3NpZGViYXJfX2l0ZW0tLXNlYXJjaCc6IHRydWUsXG4gICAgICAgICdpcy1pbi11c2UnOiB0aGlzLnN0YXRlLnNlYXJjaFZhbHVlICE9PSAnJ1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc1NldCB9LFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdzZWFyY2gnIH0pLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGNsYXNzTmFtZTogJ3RleHRib3gnLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBUb3JyZW50cycsXG4gICAgICAgICAgb25LZXlVcDogdGhpcy5oYW5kbGVLZXlVcCB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2VhcmNoQm94O1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFNlYXJjaEJveDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NlYXJjaEJveC5qc1xuICoqIG1vZHVsZSBpZCA9IDIxNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ }, /* 217 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['handleKeyUp'];\n\nvar SearchBox = (function (_React$Component) {\n _inherits(SearchBox, _React$Component);\n\n function SearchBox() {\n var _this = this;\n\n _classCallCheck(this, SearchBox);\n\n _get(Object.getPrototypeOf(SearchBox.prototype), 'constructor', this).call(this);\n\n this.state = {\n searchValue: ''\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(SearchBox, [{\n key: 'handleKeyUp',\n value: function handleKeyUp(event) {\n var value = event.target.value;\n this.setState({\n searchValue: value\n });\n _actionsUIActions2['default'].setTorrentsSearchFilter(value);\n }\n }, {\n key: 'render',\n value: function render() {\n var classSet = (0, _classnames2['default'])({\n 'sidebar__item': true,\n 'sidebar__item--search': true,\n 'is-in-use': this.state.searchValue !== ''\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: classSet },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'search' }),\n _react2['default'].createElement('input', { className: 'textbox',\n type: 'text',\n placeholder: 'Search Torrents',\n onKeyUp: this.handleKeyUp })\n );\n }\n }]);\n\n return SearchBox;\n})(_react2['default'].Component);\n\nexports['default'] = SearchBox;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NlYXJjaEJveC5qcz81NGRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLFNBQVMsc0JBQXNCO0FBQy9CLGtFQUFrRSxpQkFBaUI7QUFDbkYsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2ljb25zSWNvbiA9IHJlcXVpcmUoJy4uL2ljb25zL0ljb24nKTtcblxudmFyIF9pY29uc0ljb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zID0gcmVxdWlyZSgnLi4vLi4vYWN0aW9ucy9VSUFjdGlvbnMnKTtcblxudmFyIF9hY3Rpb25zVUlBY3Rpb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FjdGlvbnNVSUFjdGlvbnMpO1xuXG52YXIgbWV0aG9kc1RvQmluZCA9IFsnaGFuZGxlS2V5VXAnXTtcblxudmFyIFNlYXJjaEJveCA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2VhcmNoQm94LCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTZWFyY2hCb3goKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWFyY2hCb3gpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoU2VhcmNoQm94LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2VhcmNoVmFsdWU6ICcnXG4gICAgfTtcblxuICAgIG1ldGhvZHNUb0JpbmQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTZWFyY2hCb3gsIFt7XG4gICAga2V5OiAnaGFuZGxlS2V5VXAnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVLZXlVcChldmVudCkge1xuICAgICAgdmFyIHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5zZXRUb3JyZW50c1NlYXJjaEZpbHRlcih2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNsYXNzU2V0ID0gKDAsIF9jbGFzc25hbWVzMlsnZGVmYXVsdCddKSh7XG4gICAgICAgICdzaWRlYmFyX19pdGVtJzogdHJ1ZSxcbiAgICAgICAgJ3NpZGViYXJfX2l0ZW0tLXNlYXJjaCc6IHRydWUsXG4gICAgICAgICdpcy1pbi11c2UnOiB0aGlzLnN0YXRlLnNlYXJjaFZhbHVlICE9PSAnJ1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc1NldCB9LFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdzZWFyY2gnIH0pLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGNsYXNzTmFtZTogJ3RleHRib3gnLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBUb3JyZW50cycsXG4gICAgICAgICAgb25LZXlVcDogdGhpcy5oYW5kbGVLZXlVcCB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2VhcmNoQm94O1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFNlYXJjaEJveDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NlYXJjaEJveC5qc1xuICoqIG1vZHVsZSBpZCA9IDIxN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _genericDropdown = __webpack_require__(172);\n\nvar _genericDropdown2 = _interopRequireDefault(_genericDropdown);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar Sidebar = (function (_React$Component) {\n _inherits(Sidebar, _React$Component);\n\n function Sidebar() {\n _classCallCheck(this, Sidebar);\n\n _get(Object.getPrototypeOf(Sidebar.prototype), 'constructor', this).call(this);\n\n this.state = {\n isEpanded: false\n };\n }\n\n _createClass(Sidebar, [{\n key: 'getDropdownHeader',\n value: function getDropdownHeader() {\n return _react2['default'].createElement(\n 'button',\n { className: 'client-stats client-stat--limits' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'limits' }),\n ' Speed Limits'\n );\n }\n }, {\n key: 'getMenuItems',\n value: function getMenuItems() {\n return [{\n displayName: '1',\n property: '1'\n }, {\n displayName: '2',\n property: '2'\n }, {\n displayName: '3',\n property: '3'\n }, {\n displayName: '4',\n property: '4'\n }, {\n displayName: '5',\n property: '5'\n }, {\n displayName: '6',\n property: '6'\n }, {\n displayName: '7',\n property: '7'\n }, {\n displayName: '8',\n property: '8'\n }, {\n displayName: '9',\n property: '9'\n }, {\n displayName: '10',\n property: '10'\n }];\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'div',\n { className: 'client-stats sidebar__item' },\n _react2['default'].createElement(_genericDropdown2['default'], {\n handleItemSelect: this.handleItemSelect,\n header: this.getDropdownHeader(),\n menuItems: this.getMenuItems(),\n selectedItem: '1'\n })\n );\n }\n }]);\n\n return Sidebar;\n})(_react2['default'].Component);\n\nexports['default'] = Sidebar;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1NwZWVkTGltaXREcm9wZG93bi5qcz9jYzMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdEQUFnRDtBQUN6RCxrRUFBa0UsaUJBQWlCO0FBQ25GO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywwQ0FBMEM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9nZW5lcmljRHJvcGRvd24gPSByZXF1aXJlKCcuLi9nZW5lcmljL0Ryb3Bkb3duJyk7XG5cbnZhciBfZ2VuZXJpY0Ryb3Bkb3duMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dlbmVyaWNEcm9wZG93bik7XG5cbnZhciBfaWNvbnNJY29uID0gcmVxdWlyZSgnLi4vaWNvbnMvSWNvbicpO1xuXG52YXIgX2ljb25zSWNvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pY29uc0ljb24pO1xuXG52YXIgU2lkZWJhciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2lkZWJhciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU2lkZWJhcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2lkZWJhcik7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTaWRlYmFyLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNFcGFuZGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2lkZWJhciwgW3tcbiAgICBrZXk6ICdnZXREcm9wZG93bkhlYWRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERyb3Bkb3duSGVhZGVyKCkge1xuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnYnV0dG9uJyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdjbGllbnQtc3RhdHMgY2xpZW50LXN0YXQtLWxpbWl0cycgfSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zSWNvbjJbJ2RlZmF1bHQnXSwgeyBpY29uOiAnbGltaXRzJyB9KSxcbiAgICAgICAgJyBTcGVlZCBMaW1pdHMnXG4gICAgICApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldE1lbnVJdGVtcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1lbnVJdGVtcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBkaXNwbGF5TmFtZTogJzEnLFxuICAgICAgICBwcm9wZXJ0eTogJzEnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnMicsXG4gICAgICAgIHByb3BlcnR5OiAnMidcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICczJyxcbiAgICAgICAgcHJvcGVydHk6ICczJ1xuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5TmFtZTogJzQnLFxuICAgICAgICBwcm9wZXJ0eTogJzQnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnNScsXG4gICAgICAgIHByb3BlcnR5OiAnNSdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICc2JyxcbiAgICAgICAgcHJvcGVydHk6ICc2J1xuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5TmFtZTogJzcnLFxuICAgICAgICBwcm9wZXJ0eTogJzcnXG4gICAgICB9LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnOCcsXG4gICAgICAgIHByb3BlcnR5OiAnOCdcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICc5JyxcbiAgICAgICAgcHJvcGVydHk6ICc5J1xuICAgICAgfSwge1xuICAgICAgICBkaXNwbGF5TmFtZTogJzEwJyxcbiAgICAgICAgcHJvcGVydHk6ICcxMCdcbiAgICAgIH1dO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAnY2xpZW50LXN0YXRzIHNpZGViYXJfX2l0ZW0nIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9nZW5lcmljRHJvcGRvd24yWydkZWZhdWx0J10sIHtcbiAgICAgICAgICBoYW5kbGVJdGVtU2VsZWN0OiB0aGlzLmhhbmRsZUl0ZW1TZWxlY3QsXG4gICAgICAgICAgaGVhZGVyOiB0aGlzLmdldERyb3Bkb3duSGVhZGVyKCksXG4gICAgICAgICAgbWVudUl0ZW1zOiB0aGlzLmdldE1lbnVJdGVtcygpLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbTogJzEnXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTaWRlYmFyO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFNpZGViYXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvc2lkZWJhci9TcGVlZExpbWl0RHJvcGRvd24uanNcbiAqKiBtb2R1bGUgaWQgPSAyMTdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 218 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _TorrentDetails = __webpack_require__(219);\n\nvar _TorrentDetails2 = _interopRequireDefault(_TorrentDetails);\n\nvar _TorrentList = __webpack_require__(220);\n\nvar _TorrentList2 = _interopRequireDefault(_TorrentList);\n\nvar methodsToBind = ['toggleDetailsPanel'];\n\nvar TorrentListContainer = (function (_React$Component) {\n _inherits(TorrentListContainer, _React$Component);\n\n function TorrentListContainer() {\n _classCallCheck(this, TorrentListContainer);\n\n _get(Object.getPrototypeOf(TorrentListContainer.prototype), 'constructor', this).call(this);\n\n this.state = {\n detailsPanelOpen: false\n };\n }\n\n _createClass(TorrentListContainer, [{\n key: 'render',\n value: function render() {\n var classes = (0, _classnames2['default'])({\n 'torrents': true\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: classes },\n _react2['default'].createElement(_TorrentList2['default'], null),\n _react2['default'].createElement(_TorrentDetails2['default'], null)\n );\n }\n }]);\n\n return TorrentListContainer;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentListContainer;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudExpc3RDb250YWluZXIuanM/M2IyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsU0FBUyxxQkFBcUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9sb2Rhc2ggPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxudmFyIF9sb2Rhc2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9kYXNoKTtcblxudmFyIF9jbGFzc25hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xuXG52YXIgX2NsYXNzbmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lcyk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9Ub3JyZW50RGV0YWlscyA9IHJlcXVpcmUoJy4vVG9ycmVudERldGFpbHMnKTtcblxudmFyIF9Ub3JyZW50RGV0YWlsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub3JyZW50RGV0YWlscyk7XG5cbnZhciBfVG9ycmVudExpc3QgPSByZXF1aXJlKCcuL1RvcnJlbnRMaXN0Jyk7XG5cbnZhciBfVG9ycmVudExpc3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9ycmVudExpc3QpO1xuXG52YXIgbWV0aG9kc1RvQmluZCA9IFsndG9nZ2xlRGV0YWlsc1BhbmVsJ107XG5cbnZhciBUb3JyZW50TGlzdENvbnRhaW5lciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9ycmVudExpc3RDb250YWluZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvcnJlbnRMaXN0Q29udGFpbmVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb3JyZW50TGlzdENvbnRhaW5lcik7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50TGlzdENvbnRhaW5lci5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRldGFpbHNQYW5lbE9wZW46IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUb3JyZW50TGlzdENvbnRhaW5lciwgW3tcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgY2xhc3NlcyA9ICgwLCBfY2xhc3NuYW1lczJbJ2RlZmF1bHQnXSkoe1xuICAgICAgICAndG9ycmVudHMnOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzZXMgfSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX1RvcnJlbnRMaXN0MlsnZGVmYXVsdCddLCBudWxsKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX1RvcnJlbnREZXRhaWxzMlsnZGVmYXVsdCddLCBudWxsKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudExpc3RDb250YWluZXI7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudExpc3RDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnRMaXN0Q29udGFpbmVyLmpzXG4gKiogbW9kdWxlIGlkID0gMjE4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _iconsIconJs = __webpack_require__(161);\n\nvar _iconsIconJs2 = _interopRequireDefault(_iconsIconJs);\n\nvar _StatusFilter = __webpack_require__(219);\n\nvar _StatusFilter2 = _interopRequireDefault(_StatusFilter);\n\nvar _storesTorrentFilterStore = __webpack_require__(194);\n\nvar _storesTorrentFilterStore2 = _interopRequireDefault(_storesTorrentFilterStore);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['getFilters', 'handleClick', 'onStatusFilterChange'];\n\nvar StatusFilters = (function (_React$Component) {\n _inherits(StatusFilters, _React$Component);\n\n function StatusFilters() {\n var _this = this;\n\n _classCallCheck(this, StatusFilters);\n\n _get(Object.getPrototypeOf(StatusFilters.prototype), 'constructor', this).call(this);\n\n this.state = {\n statusFilter: _storesTorrentFilterStore2['default'].getStatusFilter()\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(StatusFilters, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesTorrentFilterStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesTorrentFilterStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n }\n }, {\n key: 'handleClick',\n value: function handleClick(filter) {\n _actionsUIActions2['default'].setTorrentStatusFilter(filter);\n }\n }, {\n key: 'onStatusFilterChange',\n value: function onStatusFilterChange() {\n this.setState({\n statusFilter: _storesTorrentFilterStore2['default'].getStatusFilter()\n });\n }\n }, {\n key: 'getFilters',\n value: function getFilters() {\n var _this2 = this;\n\n var filters = [{\n label: 'All',\n slug: 'all',\n icon: 'all'\n }, {\n label: 'Downloading',\n slug: 'downloading',\n icon: 'downloadSmall'\n }, {\n label: 'Completed',\n slug: 'completed',\n icon: 'completed'\n }, {\n label: 'Active',\n slug: 'active',\n icon: 'active'\n }, {\n label: 'Inactive',\n slug: 'inactive',\n icon: 'inactive'\n }, {\n label: 'Error',\n slug: 'error',\n icon: 'error'\n }];\n\n var filterElements = filters.map(function (filter) {\n return _react2['default'].createElement(_StatusFilter2['default'], { handleClick: _this2.handleClick,\n key: filter.slug,\n icon: filter.icon,\n isActive: filter.slug === _this2.state.statusFilter,\n name: filter.label,\n slug: filter.slug });\n });\n\n return filterElements;\n }\n }, {\n key: 'render',\n value: function render() {\n var filters = this.getFilters();\n\n return _react2['default'].createElement(\n 'ul',\n { className: 'status-filter sidebar__item' },\n _react2['default'].createElement(\n 'li',\n { className: 'status-filter__item status-filter__item--heading' },\n 'Filter by Status'\n ),\n filters\n );\n }\n }]);\n\n return StatusFilters;\n})(_react2['default'].Component);\n\nexports['default'] = StatusFilters;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1N0YXR1c0ZpbHRlcnMuanM/ZDEwNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QixPQUFPOztBQUVQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLDJDQUEyQztBQUNwRDtBQUNBO0FBQ0EsV0FBVyxnRUFBZ0U7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBfaWNvbnNJY29uSnMgPSByZXF1aXJlKCcuLi9pY29ucy9JY29uLmpzJyk7XG5cbnZhciBfaWNvbnNJY29uSnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uSnMpO1xuXG52YXIgX1N0YXR1c0ZpbHRlciA9IHJlcXVpcmUoJy4vU3RhdHVzRmlsdGVyJyk7XG5cbnZhciBfU3RhdHVzRmlsdGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1N0YXR1c0ZpbHRlcik7XG5cbnZhciBfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlID0gcmVxdWlyZSgnLi4vLi4vc3RvcmVzL1RvcnJlbnRGaWx0ZXJTdG9yZScpO1xuXG52YXIgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUpO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9hY3Rpb25zL1VJQWN0aW9ucycpO1xuXG52YXIgX2FjdGlvbnNVSUFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc1VJQWN0aW9ucyk7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydnZXRGaWx0ZXJzJywgJ2hhbmRsZUNsaWNrJywgJ29uU3RhdHVzRmlsdGVyQ2hhbmdlJ107XG5cbnZhciBTdGF0dXNGaWx0ZXJzID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdGF0dXNGaWx0ZXJzLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTdGF0dXNGaWx0ZXJzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhdHVzRmlsdGVycyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihTdGF0dXNGaWx0ZXJzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzRmlsdGVyOiBfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmdldFN0YXR1c0ZpbHRlcigpXG4gICAgfTtcblxuICAgIG1ldGhvZHNUb0JpbmQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdGF0dXNGaWx0ZXJzLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlMlsnZGVmYXVsdCddLmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UU19GSUxURVJfU1RBVFVTX0NIQU5HRSwgdGhpcy5vblN0YXR1c0ZpbHRlckNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUyWydkZWZhdWx0J10udW5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfVE9SUkVOVFNfRklMVEVSX1NUQVRVU19DSEFOR0UsIHRoaXMub25TdGF0dXNGaWx0ZXJDaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZUNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZmlsdGVyKSB7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5zZXRUb3JyZW50U3RhdHVzRmlsdGVyKGZpbHRlcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25TdGF0dXNGaWx0ZXJDaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblN0YXR1c0ZpbHRlckNoYW5nZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXNGaWx0ZXI6IF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUyWydkZWZhdWx0J10uZ2V0U3RhdHVzRmlsdGVyKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldEZpbHRlcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWx0ZXJzKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBmaWx0ZXJzID0gW3tcbiAgICAgICAgbGFiZWw6ICdBbGwnLFxuICAgICAgICBzbHVnOiAnYWxsJyxcbiAgICAgICAgaWNvbjogJ2FsbCdcbiAgICAgIH0sIHtcbiAgICAgICAgbGFiZWw6ICdEb3dubG9hZGluZycsXG4gICAgICAgIHNsdWc6ICdkb3dubG9hZGluZycsXG4gICAgICAgIGljb246ICdkb3dubG9hZFNtYWxsJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0NvbXBsZXRlZCcsXG4gICAgICAgIHNsdWc6ICdjb21wbGV0ZWQnLFxuICAgICAgICBpY29uOiAnY29tcGxldGVkJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0FjdGl2ZScsXG4gICAgICAgIHNsdWc6ICdhY3RpdmUnLFxuICAgICAgICBpY29uOiAnYWN0aXZlJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0luYWN0aXZlJyxcbiAgICAgICAgc2x1ZzogJ2luYWN0aXZlJyxcbiAgICAgICAgaWNvbjogJ2luYWN0aXZlJ1xuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogJ0Vycm9yJyxcbiAgICAgICAgc2x1ZzogJ2Vycm9yJyxcbiAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgICAgfV07XG5cbiAgICAgIHZhciBmaWx0ZXJFbGVtZW50cyA9IGZpbHRlcnMubWFwKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9TdGF0dXNGaWx0ZXIyWydkZWZhdWx0J10sIHsgaGFuZGxlQ2xpY2s6IF90aGlzMi5oYW5kbGVDbGljayxcbiAgICAgICAgICBrZXk6IGZpbHRlci5zbHVnLFxuICAgICAgICAgIGljb246IGZpbHRlci5pY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiBmaWx0ZXIuc2x1ZyA9PT0gX3RoaXMyLnN0YXRlLnN0YXR1c0ZpbHRlcixcbiAgICAgICAgICBuYW1lOiBmaWx0ZXIubGFiZWwsXG4gICAgICAgICAgc2x1ZzogZmlsdGVyLnNsdWcgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZpbHRlckVsZW1lbnRzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzKCk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ3VsJyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICdzdGF0dXMtZmlsdGVyIHNpZGViYXJfX2l0ZW0nIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdsaScsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdzdGF0dXMtZmlsdGVyX19pdGVtIHN0YXR1cy1maWx0ZXJfX2l0ZW0tLWhlYWRpbmcnIH0sXG4gICAgICAgICAgJ0ZpbHRlciBieSBTdGF0dXMnXG4gICAgICAgICksXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YXR1c0ZpbHRlcnM7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gU3RhdHVzRmlsdGVycztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1N0YXR1c0ZpbHRlcnMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMThcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 219 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilFormatData = __webpack_require__(212);\n\nvar _utilFormatData2 = _interopRequireDefault(_utilFormatData);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar _storesTorrentStore = __webpack_require__(197);\n\nvar _storesTorrentStore2 = _interopRequireDefault(_storesTorrentStore);\n\nvar _storesUIStore = __webpack_require__(204);\n\nvar _storesUIStore2 = _interopRequireDefault(_storesUIStore);\n\nvar methodsToBind = ['getFileData', 'getFileTreeDomNodes', 'onTorrentDetailsHashChange', 'onOpenChange', 'onTorrentDetailsChange', 'createFileTree', 'getHeading', 'getSidePanel'];\n\nvar TorrentDetails = (function (_React$Component) {\n _inherits(TorrentDetails, _React$Component);\n\n function TorrentDetails() {\n var _this = this;\n\n _classCallCheck(this, TorrentDetails);\n\n _get(Object.getPrototypeOf(TorrentDetails.prototype), 'constructor', this).call(this);\n\n this.state = {\n isOpen: false,\n torrentDetailsSuccess: false,\n torrentDetailsError: false,\n selectedTorrent: {},\n selectedTorrentHash: null,\n torrentDetails: {}\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(TorrentDetails, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TORRENT_DETAILS_CHANGE, this.onTorrentDetailsChange);\n _storesUIStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_OPEN_CHANGE, this.onOpenChange);\n _storesUIStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_HASH_CHANGE, this.onTorrentDetailsHashChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesTorrentStore2['default'].stopPollingTorrentDetails();\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TORRENT_DETAILS_CHANGE, this.onTorrentDetailsChange);\n _storesUIStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_OPEN_CHANGE, this.onOpenChange);\n _storesUIStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_HASH_CHANGE, this.onTorrentDetailsHashChange);\n }\n }, {\n key: 'onTorrentDetailsHashChange',\n value: function onTorrentDetailsHashChange() {\n if (_storesUIStore2['default'].isTorrentDetailsOpen()) {\n _storesTorrentStore2['default'].fetchTorrentDetails(_storesUIStore2['default'].getTorrentDetailsHash());\n }\n }\n }, {\n key: 'onOpenChange',\n value: function onOpenChange() {\n if (!_storesUIStore2['default'].isTorrentDetailsOpen()) {\n _storesTorrentStore2['default'].stopPollingTorrentDetails();\n } else {\n _storesTorrentStore2['default'].fetchTorrentDetails(_storesUIStore2['default'].getTorrentDetailsHash());\n }\n\n this.setState({\n isOpen: _storesUIStore2['default'].isTorrentDetailsOpen()\n });\n }\n }, {\n key: 'onTorrentDetailsChange',\n value: function onTorrentDetailsChange() {\n this.setState({\n torrentDetails: _storesTorrentStore2['default'].getTorrentDetails(_storesUIStore2['default'].getTorrentDetailsHash())\n });\n }\n }, {\n key: 'createFileTree',\n value: function createFileTree(tree, directory, file) {\n if (tree === undefined) tree = {};\n var depth = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];\n\n if (depth < file.pathComponents.length - 1) {\n depth++;\n tree[directory] = this.createFileTree(tree[directory], file.pathComponents[depth], file, depth);\n } else {\n if (!tree.files) {\n tree.files = [];\n }\n tree.files.push(file);\n }\n return tree;\n }\n }, {\n key: 'getFileTreeDomNodes',\n value: function getFileTreeDomNodes(tree) {\n var _this2 = this;\n\n var depth = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n var index = 0;\n depth++;\n return Object.keys(tree).map(function (branchName) {\n var branch = tree[branchName];\n var domNodes = null;\n index++;\n\n if (branchName === 'files') {\n branch.sort(function (a, b) {\n return a.filename.localeCompare(b.filename);\n });\n domNodes = branch.map(function (file, fileIndex) {\n return _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__node--file',\n key: '' + fileIndex },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'file' }),\n file.filename\n );\n });\n } else {\n var classes = 'file-list__branch file-list__branch--depth-' + depth;\n domNodes = _react2['default'].createElement(\n 'div',\n { className: classes, key: '' + index + depth },\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__node--directory' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'directoryOutlined' }),\n branchName\n ),\n _this2.getFileTreeDomNodes(tree[branchName], depth)\n );\n }\n\n return domNodes;\n });\n }\n }, {\n key: 'getFileList',\n value: function getFileList(files) {\n var _this3 = this;\n\n var tree = {};\n\n files.forEach(function (file) {\n tree = _this3.createFileTree(tree, file.pathComponents[0], file);\n });\n\n var directoryTree = this.getFileTreeDomNodes(tree);\n\n return directoryTree;\n }\n }, {\n key: 'getFileData',\n value: function getFileData(torrent, files) {\n var parentDirectory = torrent.directory;\n var filename = torrent.filename;\n\n if (files) {\n // We've received full file details from the client.\n return _react2['default'].createElement(\n 'div',\n { className: 'file-list torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__parent-directory' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'directoryFilled' }),\n parentDirectory\n ),\n this.getFileList(files)\n );\n } else {\n // We've only received the top-level file details from the torrent list.\n return _react2['default'].createElement(\n 'div',\n { className: 'file-list torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__parent-directory' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'directoryFilled' }),\n parentDirectory\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__node--file' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'file' }),\n filename\n )\n );\n }\n }\n }, {\n key: 'getHeading',\n value: function getHeading() {\n // return (\n //
\n // Dropdown\n //
\n // );\n }\n }, {\n key: 'getPeerList',\n value: function getPeerList(peers) {\n if (peers) {\n var peerList = null;\n var peerCount = 0;\n\n peerList = peers.map(function (peer, index) {\n var downloadRate = _utilFormatData2['default'].data(peer.downloadRate, '/s');\n var uploadRate = _utilFormatData2['default'].data(peer.uploadRate, '/s');\n return _react2['default'].createElement(\n 'tr',\n { key: index },\n _react2['default'].createElement(\n 'td',\n null,\n peer.address\n ),\n _react2['default'].createElement(\n 'td',\n null,\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'td',\n null,\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n )\n );\n });\n peerCount = peerList.length;\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent-details__peers torrent-details__section' },\n _react2['default'].createElement(\n 'table',\n { className: 'torrent-details__table table' },\n _react2['default'].createElement(\n 'thead',\n { className: 'torrent-details__table__heading' },\n _react2['default'].createElement(\n 'tr',\n null,\n _react2['default'].createElement(\n 'th',\n null,\n 'Peers',\n _react2['default'].createElement(\n 'span',\n { className: 'torrent-details__table__heading__count' },\n peerCount\n )\n ),\n _react2['default'].createElement(\n 'th',\n null,\n 'DL'\n ),\n _react2['default'].createElement(\n 'th',\n null,\n 'UL'\n )\n )\n ),\n _react2['default'].createElement(\n 'tbody',\n null,\n peerList\n )\n )\n );\n }\n }\n }, {\n key: 'getSidePanel',\n value: function getSidePanel() {\n if (!this.state.isOpen) {\n return null;\n }\n\n var selectedHash = _storesUIStore2['default'].getTorrentDetailsHash();\n var torrent = _storesTorrentStore2['default'].getTorrent(selectedHash);\n var added = new Date(torrent.added * 1000);\n var addedString = added.getMonth() + 1 + '/' + added.getDate() + '/' + added.getFullYear();\n var completed = _utilFormatData2['default'].data(torrent.bytesDone);\n var downloadRate = _utilFormatData2['default'].data(torrent.downloadRate, '/s');\n var downloadTotal = _utilFormatData2['default'].data(torrent.downloadTotal);\n var eta = _utilFormatData2['default'].eta(torrent.eta);\n var ratio = _utilFormatData2['default'].ratio(torrent.ratio);\n var totalSize = _utilFormatData2['default'].data(torrent.sizeBytes);\n var torrentDetails = this.state.torrentDetails || {};\n var uploadRate = _utilFormatData2['default'].data(torrent.uploadRate, '/s');\n var uploadTotal = _utilFormatData2['default'].data(torrent.uploadTotal);\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent-details', key: this.state.isOpen },\n this.getHeading(),\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent-details__transfer-data torrent-details__section' },\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--download' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'download' }),\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--upload' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'upload' }),\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--ratio' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'ratio' }),\n ratio\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--eta' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'eta' }),\n eta\n )\n ),\n this.getTrackerList(torrentDetails.trackers),\n this.getFileData(torrent, torrentDetails.files),\n this.getPeerList(torrentDetails.peers)\n );\n }\n }, {\n key: 'getTrackerList',\n value: function getTrackerList() {\n var trackers = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n var trackerCount = trackers.length;\n var trackerTypes = ['http', 'udp', 'dht'];\n\n var trackerDetails = trackers.map(function (tracker, index) {\n return _react2['default'].createElement(\n 'tr',\n { key: index },\n _react2['default'].createElement(\n 'td',\n null,\n tracker.url\n ),\n _react2['default'].createElement(\n 'td',\n null,\n trackerTypes[tracker.type - 1]\n )\n );\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent-details__peers torrent-details__section' },\n _react2['default'].createElement(\n 'table',\n { className: 'torrent-details__table table' },\n _react2['default'].createElement(\n 'thead',\n { className: 'torrent-details__table__heading' },\n _react2['default'].createElement(\n 'tr',\n null,\n _react2['default'].createElement(\n 'th',\n null,\n 'Trackers',\n _react2['default'].createElement(\n 'span',\n { className: 'torrent-details__table__heading__count' },\n trackerCount\n )\n ),\n _react2['default'].createElement(\n 'th',\n null,\n 'Type'\n )\n )\n ),\n _react2['default'].createElement(\n 'tbody',\n null,\n trackerDetails\n )\n )\n );\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n _reactAddonsCssTransitionGroup2['default'],\n {\n transitionEnterTimeout: 500,\n transitionLeaveTimeout: 500,\n transitionName: 'torrent-details' },\n this.getSidePanel()\n );\n }\n }]);\n\n return TorrentDetails;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentDetails;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudERldGFpbHMuanM/NDFjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsd0NBQXdDLG1CQUFtQiw0QkFBNEIsa0RBQWtELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sY0FBYyxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUVscEIsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdB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QUFDQTtBQUNBO0FBQ0EsYUFBYSxtREFBbUQ7QUFDaEUsc0VBQXNFLGlCQUFpQjtBQUN2RjtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrREFBa0Q7QUFDL0Qsc0VBQXNFLGdCQUFnQjtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELHNFQUFzRSxjQUFjO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxTQUFTLCtEQUErRDtBQUN4RTtBQUNBO0FBQ0EsV0FBVyw0Q0FBNEM7QUFDdkQ7QUFDQTtBQUNBLGFBQWEsK0NBQStDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzREFBc0Q7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3g0LCBfeDUsIF94NikgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeDQsIHByb3BlcnR5ID0gX3g1LCByZWNlaXZlciA9IF94NjsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeDQgPSBwYXJlbnQ7IF94NSA9IHByb3BlcnR5OyBfeDYgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2xvZGFzaCA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG52YXIgX2xvZGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2Rhc2gpO1xuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWNzcy10cmFuc2l0aW9uLWdyb3VwJyk7XG5cbnZhciBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXApO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBfdXRpbEZvcm1hdERhdGEgPSByZXF1aXJlKCcuLi8uLi91dGlsL2Zvcm1hdERhdGEnKTtcblxudmFyIF91dGlsRm9ybWF0RGF0YTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsRm9ybWF0RGF0YSk7XG5cbnZhciBfaWNvbnNJY29uID0gcmVxdWlyZSgnLi4vaWNvbnMvSWNvbicpO1xuXG52YXIgX2ljb25zSWNvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pY29uc0ljb24pO1xuXG52YXIgX2FjdGlvbnNUb3JyZW50QWN0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL2FjdGlvbnMvVG9ycmVudEFjdGlvbnMnKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc1RvcnJlbnRBY3Rpb25zKTtcblxudmFyIF9zdG9yZXNUb3JyZW50U3RvcmUgPSByZXF1aXJlKCcuLi8uLi9zdG9yZXMvVG9ycmVudFN0b3JlJyk7XG5cbnZhciBfc3RvcmVzVG9ycmVudFN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3Jlc1RvcnJlbnRTdG9yZSk7XG5cbnZhciBfc3RvcmVzVUlTdG9yZSA9IHJlcXVpcmUoJy4uLy4uL3N0b3Jlcy9VSVN0b3JlJyk7XG5cbnZhciBfc3RvcmVzVUlTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdG9yZXNVSVN0b3JlKTtcblxudmFyIG1ldGhvZHNUb0JpbmQgPSBbJ2dldEZpbGVEYXRhJywgJ2dldEZpbGVUcmVlRG9tTm9kZXMnLCAnb25Ub3JyZW50RGV0YWlsc0hhc2hDaGFuZ2UnLCAnb25PcGVuQ2hhbmdlJywgJ29uVG9ycmVudERldGFpbHNDaGFuZ2UnLCAnY3JlYXRlRmlsZVRyZWUnLCAnZ2V0SGVhZGluZycsICdnZXRTaWRlUGFuZWwnXTtcblxudmFyIFRvcnJlbnREZXRhaWxzID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUb3JyZW50RGV0YWlscywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVG9ycmVudERldGFpbHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb3JyZW50RGV0YWlscyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50RGV0YWlscy5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICB0b3JyZW50RGV0YWlsc1N1Y2Nlc3M6IGZhbHNlLFxuICAgICAgdG9ycmVudERldGFpbHNFcnJvcjogZmFsc2UsXG4gICAgICBzZWxlY3RlZFRvcnJlbnQ6IHt9LFxuICAgICAgc2VsZWN0ZWRUb3JyZW50SGFzaDogbnVsbCxcbiAgICAgIHRvcnJlbnREZXRhaWxzOiB7fVxuICAgIH07XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVG9ycmVudERldGFpbHMsIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UX0RFVEFJTFNfQ0hBTkdFLCB0aGlzLm9uVG9ycmVudERldGFpbHNDaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19PUEVOX0NIQU5HRSwgdGhpcy5vbk9wZW5DaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19IQVNIX0NIQU5HRSwgdGhpcy5vblRvcnJlbnREZXRhaWxzSGFzaENoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10uc3RvcFBvbGxpbmdUb3JyZW50RGV0YWlscygpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVE9SUkVOVF9ERVRBSUxTX0NIQU5HRSwgdGhpcy5vblRvcnJlbnREZXRhaWxzQ2hhbmdlKTtcbiAgICAgIF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLnVubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19PUEVOX0NIQU5HRSwgdGhpcy5vbk9wZW5DaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10udW5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfVE9SUkVOVF9ERVRBSUxTX0hBU0hfQ0hBTkdFLCB0aGlzLm9uVG9ycmVudERldGFpbHNIYXNoQ2hhbmdlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblRvcnJlbnREZXRhaWxzSGFzaENoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVG9ycmVudERldGFpbHNIYXNoQ2hhbmdlKCkge1xuICAgICAgaWYgKF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmlzVG9ycmVudERldGFpbHNPcGVuKCkpIHtcbiAgICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5mZXRjaFRvcnJlbnREZXRhaWxzKF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnREZXRhaWxzSGFzaCgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbk9wZW5DaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk9wZW5DaGFuZ2UoKSB7XG4gICAgICBpZiAoIV9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmlzVG9ycmVudERldGFpbHNPcGVuKCkpIHtcbiAgICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5zdG9wUG9sbGluZ1RvcnJlbnREZXRhaWxzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmZldGNoVG9ycmVudERldGFpbHMoX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10uZ2V0VG9ycmVudERldGFpbHNIYXNoKCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNPcGVuOiBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5pc1RvcnJlbnREZXRhaWxzT3BlbigpXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblRvcnJlbnREZXRhaWxzQ2hhbmdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Ub3JyZW50RGV0YWlsc0NoYW5nZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0b3JyZW50RGV0YWlsczogX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5nZXRUb3JyZW50RGV0YWlscyhfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5nZXRUb3JyZW50RGV0YWlsc0hhc2goKSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NyZWF0ZUZpbGVUcmVlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlRmlsZVRyZWUodHJlZSwgZGlyZWN0b3J5LCBmaWxlKSB7XG4gICAgICBpZiAodHJlZSA9PT0gdW5kZWZpbmVkKSB0cmVlID0ge307XG4gICAgICB2YXIgZGVwdGggPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzNdO1xuXG4gICAgICBpZiAoZGVwdGggPCBmaWxlLnBhdGhDb21wb25lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgICAgdHJlZVtkaXJlY3RvcnldID0gdGhpcy5jcmVhdGVGaWxlVHJlZSh0cmVlW2RpcmVjdG9yeV0sIGZpbGUucGF0aENvbXBvbmVudHNbZGVwdGhdLCBmaWxlLCBkZXB0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRyZWUuZmlsZXMpIHtcbiAgICAgICAgICB0cmVlLmZpbGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0RmlsZVRyZWVEb21Ob2RlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVUcmVlRG9tTm9kZXModHJlZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBkZXB0aCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMV07XG5cbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBkZXB0aCsrO1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRyZWUpLm1hcChmdW5jdGlvbiAoYnJhbmNoTmFtZSkge1xuICAgICAgICB2YXIgYnJhbmNoID0gdHJlZVticmFuY2hOYW1lXTtcbiAgICAgICAgdmFyIGRvbU5vZGVzID0gbnVsbDtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBpZiAoYnJhbmNoTmFtZSA9PT0gJ2ZpbGVzJykge1xuICAgICAgICAgIGJyYW5jaC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5maWxlbmFtZS5sb2NhbGVDb21wYXJlKGIuZmlsZW5hbWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRvbU5vZGVzID0gYnJhbmNoLm1hcChmdW5jdGlvbiAoZmlsZSwgZmlsZUluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdF9fbm9kZSBmaWxlLWxpc3RfX25vZGUtLWZpbGUnLFxuICAgICAgICAgICAgICAgIGtleTogJycgKyBmaWxlSW5kZXggfSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zSWNvbjJbJ2RlZmF1bHQnXSwgeyBpY29uOiAnZmlsZScgfSksXG4gICAgICAgICAgICAgIGZpbGUuZmlsZW5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNsYXNzZXMgPSAnZmlsZS1saXN0X19icmFuY2ggZmlsZS1saXN0X19icmFuY2gtLWRlcHRoLScgKyBkZXB0aDtcbiAgICAgICAgICBkb21Ob2RlcyA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3Nlcywga2V5OiAnJyArIGluZGV4ICsgZGVwdGggfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdmaWxlLWxpc3RfX25vZGUgZmlsZS1saXN0X19ub2RlLS1kaXJlY3RvcnknIH0sXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ2RpcmVjdG9yeU91dGxpbmVkJyB9KSxcbiAgICAgICAgICAgICAgYnJhbmNoTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF90aGlzMi5nZXRGaWxlVHJlZURvbU5vZGVzKHRyZWVbYnJhbmNoTmFtZV0sIGRlcHRoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9tTm9kZXM7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRGaWxlTGlzdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVMaXN0KGZpbGVzKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHRyZWUgPSB7fTtcblxuICAgICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICB0cmVlID0gX3RoaXMzLmNyZWF0ZUZpbGVUcmVlKHRyZWUsIGZpbGUucGF0aENvbXBvbmVudHNbMF0sIGZpbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBkaXJlY3RvcnlUcmVlID0gdGhpcy5nZXRGaWxlVHJlZURvbU5vZGVzKHRyZWUpO1xuXG4gICAgICByZXR1cm4gZGlyZWN0b3J5VHJlZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRGaWxlRGF0YScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVEYXRhKHRvcnJlbnQsIGZpbGVzKSB7XG4gICAgICB2YXIgcGFyZW50RGlyZWN0b3J5ID0gdG9ycmVudC5kaXJlY3Rvcnk7XG4gICAgICB2YXIgZmlsZW5hbWUgPSB0b3JyZW50LmZpbGVuYW1lO1xuXG4gICAgICBpZiAoZmlsZXMpIHtcbiAgICAgICAgLy8gV2UndmUgcmVjZWl2ZWQgZnVsbCBmaWxlIGRldGFpbHMgZnJvbSB0aGUgY2xpZW50LlxuICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdmaWxlLWxpc3QgdG9ycmVudC1kZXRhaWxzX19zZWN0aW9uJyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdF9fbm9kZSBmaWxlLWxpc3RfX3BhcmVudC1kaXJlY3RvcnknIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdkaXJlY3RvcnlGaWxsZWQnIH0pLFxuICAgICAgICAgICAgcGFyZW50RGlyZWN0b3J5XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmdldEZpbGVMaXN0KGZpbGVzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UndmUgb25seSByZWNlaXZlZCB0aGUgdG9wLWxldmVsIGZpbGUgZGV0YWlscyBmcm9tIHRoZSB0b3JyZW50IGxpc3QuXG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdCB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnZmlsZS1saXN0X19ub2RlIGZpbGUtbGlzdF9fcGFyZW50LWRpcmVjdG9yeScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ2RpcmVjdG9yeUZpbGxlZCcgfSksXG4gICAgICAgICAgICBwYXJlbnREaXJlY3RvcnlcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdF9fbm9kZSBmaWxlLWxpc3RfX25vZGUtLWZpbGUnIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdmaWxlJyB9KSxcbiAgICAgICAgICAgIGZpbGVuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldEhlYWRpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRIZWFkaW5nKCkge1xuICAgICAgLy8gcmV0dXJuIChcbiAgICAgIC8vICAgPGRpdiBjbGFzc05hbWU9XCJ0b3JyZW50LWRldGFpbHNfX2FjdGlvbnMgdG9ycmVudC1kZXRhaWxzX19zZWN0aW9uXCI+XG4gICAgICAvLyAgICAgRHJvcGRvd25cbiAgICAgIC8vICAgPC9kaXY+XG4gICAgICAvLyApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFBlZXJMaXN0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGVlckxpc3QocGVlcnMpIHtcbiAgICAgIGlmIChwZWVycykge1xuICAgICAgICB2YXIgcGVlckxpc3QgPSBudWxsO1xuICAgICAgICB2YXIgcGVlckNvdW50ID0gMDtcblxuICAgICAgICBwZWVyTGlzdCA9IHBlZXJzLm1hcChmdW5jdGlvbiAocGVlciwgaW5kZXgpIHtcbiAgICAgICAgICB2YXIgZG93bmxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEocGVlci5kb3dubG9hZFJhdGUsICcvcycpO1xuICAgICAgICAgIHZhciB1cGxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEocGVlci51cGxvYWRSYXRlLCAnL3MnKTtcbiAgICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndHInLFxuICAgICAgICAgICAgeyBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ3RkJyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcGVlci5hZGRyZXNzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIGRvd25sb2FkUmF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgICAgZG93bmxvYWRSYXRlLnVuaXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICB1cGxvYWRSYXRlLnZhbHVlLFxuICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWRSYXRlLnVuaXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBwZWVyQ291bnQgPSBwZWVyTGlzdC5sZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX19wZWVycyB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndGFibGUnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHNfX3RhYmxlIHRhYmxlJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICd0aGVhZCcsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190YWJsZV9faGVhZGluZycgfSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ3RyJyxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgJ3RoJyxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAnUGVlcnMnLFxuICAgICAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHNfX3RhYmxlX19oZWFkaW5nX19jb3VudCcgfSxcbiAgICAgICAgICAgICAgICAgICAgcGVlckNvdW50XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICd0aCcsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgJ0RMJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICdVTCdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ3Rib2R5JyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcGVlckxpc3RcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0U2lkZVBhbmVsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2lkZVBhbmVsKCkge1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzT3Blbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGVjdGVkSGFzaCA9IF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnREZXRhaWxzSGFzaCgpO1xuICAgICAgdmFyIHRvcnJlbnQgPSBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnQoc2VsZWN0ZWRIYXNoKTtcbiAgICAgIHZhciBhZGRlZCA9IG5ldyBEYXRlKHRvcnJlbnQuYWRkZWQgKiAxMDAwKTtcbiAgICAgIHZhciBhZGRlZFN0cmluZyA9IGFkZGVkLmdldE1vbnRoKCkgKyAxICsgJy8nICsgYWRkZWQuZ2V0RGF0ZSgpICsgJy8nICsgYWRkZWQuZ2V0RnVsbFllYXIoKTtcbiAgICAgIHZhciBjb21wbGV0ZWQgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmJ5dGVzRG9uZSk7XG4gICAgICB2YXIgZG93bmxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodG9ycmVudC5kb3dubG9hZFJhdGUsICcvcycpO1xuICAgICAgdmFyIGRvd25sb2FkVG90YWwgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmRvd25sb2FkVG90YWwpO1xuICAgICAgdmFyIGV0YSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5ldGEodG9ycmVudC5ldGEpO1xuICAgICAgdmFyIHJhdGlvID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLnJhdGlvKHRvcnJlbnQucmF0aW8pO1xuICAgICAgdmFyIHRvdGFsU2l6ZSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQuc2l6ZUJ5dGVzKTtcbiAgICAgIHZhciB0b3JyZW50RGV0YWlscyA9IHRoaXMuc3RhdGUudG9ycmVudERldGFpbHMgfHwge307XG4gICAgICB2YXIgdXBsb2FkUmF0ZSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQudXBsb2FkUmF0ZSwgJy9zJyk7XG4gICAgICB2YXIgdXBsb2FkVG90YWwgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LnVwbG9hZFRvdGFsKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHMnLCBrZXk6IHRoaXMuc3RhdGUuaXNPcGVuIH0sXG4gICAgICAgIHRoaXMuZ2V0SGVhZGluZygpLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAndWwnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190cmFuc2Zlci1kYXRhIHRvcnJlbnQtZGV0YWlsc19fc2VjdGlvbicgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RyYW5zZmVyLWRhdGEgdHJhbnNmZXItZGF0YS0tZG93bmxvYWQnIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdkb3dubG9hZCcgfSksXG4gICAgICAgICAgICBkb3dubG9hZFJhdGUudmFsdWUsXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICBkb3dubG9hZFJhdGUudW5pdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnbGknLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0cmFuc2Zlci1kYXRhIHRyYW5zZmVyLWRhdGEtLXVwbG9hZCcgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ3VwbG9hZCcgfSksXG4gICAgICAgICAgICB1cGxvYWRSYXRlLnZhbHVlLFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgdXBsb2FkUmF0ZS51bml0XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RyYW5zZmVyLWRhdGEgdHJhbnNmZXItZGF0YS0tcmF0aW8nIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdyYXRpbycgfSksXG4gICAgICAgICAgICByYXRpb1xuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnbGknLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0cmFuc2Zlci1kYXRhIHRyYW5zZmVyLWRhdGEtLWV0YScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ2V0YScgfSksXG4gICAgICAgICAgICBldGFcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuZ2V0VHJhY2tlckxpc3QodG9ycmVudERldGFpbHMudHJhY2tlcnMpLFxuICAgICAgICB0aGlzLmdldEZpbGVEYXRhKHRvcnJlbnQsIHRvcnJlbnREZXRhaWxzLmZpbGVzKSxcbiAgICAgICAgdGhpcy5nZXRQZWVyTGlzdCh0b3JyZW50RGV0YWlscy5wZWVycylcbiAgICAgICk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0VHJhY2tlckxpc3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUcmFja2VyTGlzdCgpIHtcbiAgICAgIHZhciB0cmFja2VycyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IFtdIDogYXJndW1lbnRzWzBdO1xuXG4gICAgICB2YXIgdHJhY2tlckNvdW50ID0gdHJhY2tlcnMubGVuZ3RoO1xuICAgICAgdmFyIHRyYWNrZXJUeXBlcyA9IFsnaHR0cCcsICd1ZHAnLCAnZGh0J107XG5cbiAgICAgIHZhciB0cmFja2VyRGV0YWlscyA9IHRyYWNrZXJzLm1hcChmdW5jdGlvbiAodHJhY2tlciwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd0cicsXG4gICAgICAgICAgeyBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRyYWNrZXIudXJsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdHJhY2tlclR5cGVzW3RyYWNrZXIudHlwZSAtIDFdXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX19wZWVycyB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd0YWJsZScsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHNfX3RhYmxlIHRhYmxlJyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ3RoZWFkJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190YWJsZV9faGVhZGluZycgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAndHInLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgJ1RyYWNrZXJzJyxcbiAgICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190YWJsZV9faGVhZGluZ19fY291bnQnIH0sXG4gICAgICAgICAgICAgICAgICB0cmFja2VyQ291bnRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICd0aCcsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAnVHlwZSdcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndGJvZHknLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRyYWNrZXJEZXRhaWxzXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwMlsnZGVmYXVsdCddLFxuICAgICAgICB7XG4gICAgICAgICAgdHJhbnNpdGlvbkVudGVyVGltZW91dDogNTAwLFxuICAgICAgICAgIHRyYW5zaXRpb25MZWF2ZVRpbWVvdXQ6IDUwMCxcbiAgICAgICAgICB0cmFuc2l0aW9uTmFtZTogJ3RvcnJlbnQtZGV0YWlscycgfSxcbiAgICAgICAgdGhpcy5nZXRTaWRlUGFuZWwoKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudERldGFpbHM7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudERldGFpbHM7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnREZXRhaWxzLmpzXG4gKiogbW9kdWxlIGlkID0gMjE5XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsIconJs = __webpack_require__(161);\n\nvar _iconsIconJs2 = _interopRequireDefault(_iconsIconJs);\n\nvar methodsToBind = ['handleClick'];\n\nvar StatusFilter = (function (_React$Component) {\n _inherits(StatusFilter, _React$Component);\n\n function StatusFilter() {\n var _this = this;\n\n _classCallCheck(this, StatusFilter);\n\n _get(Object.getPrototypeOf(StatusFilter.prototype), 'constructor', this).call(this);\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(StatusFilter, [{\n key: 'handleClick',\n value: function handleClick() {\n this.props.handleClick(this.props.slug);\n }\n }, {\n key: 'render',\n value: function render() {\n var itemClass = 'status-filter__item--' + this.props.slug;\n\n var classNames = (0, _classnames2['default'])({\n 'status-filter__item': true,\n itemClass: true,\n 'is-active': this.props.isActive\n });\n\n return _react2['default'].createElement(\n 'li',\n { className: classNames, onClick: this.handleClick },\n _react2['default'].createElement(_iconsIconJs2['default'], { icon: this.props.icon }),\n this.props.name\n );\n }\n }]);\n\n return StatusFilter;\n})(_react2['default'].Component);\n\nexports['default'] = StatusFilter;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zaWRlYmFyL1N0YXR1c0ZpbHRlci5qcz9hMTdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxTQUFTLG1EQUFtRDtBQUM1RCxvRUFBb0Usd0JBQXdCO0FBQzVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2ljb25zSWNvbkpzID0gcmVxdWlyZSgnLi4vaWNvbnMvSWNvbi5qcycpO1xuXG52YXIgX2ljb25zSWNvbkpzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ljb25zSWNvbkpzKTtcblxudmFyIG1ldGhvZHNUb0JpbmQgPSBbJ2hhbmRsZUNsaWNrJ107XG5cbnZhciBTdGF0dXNGaWx0ZXIgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN0YXR1c0ZpbHRlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3RhdHVzRmlsdGVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhdHVzRmlsdGVyKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKFN0YXR1c0ZpbHRlci5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgbWV0aG9kc1RvQmluZC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN0YXR1c0ZpbHRlciwgW3tcbiAgICBrZXk6ICdoYW5kbGVDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgdGhpcy5wcm9wcy5oYW5kbGVDbGljayh0aGlzLnByb3BzLnNsdWcpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBpdGVtQ2xhc3MgPSAnc3RhdHVzLWZpbHRlcl9faXRlbS0tJyArIHRoaXMucHJvcHMuc2x1ZztcblxuICAgICAgdmFyIGNsYXNzTmFtZXMgPSAoMCwgX2NsYXNzbmFtZXMyWydkZWZhdWx0J10pKHtcbiAgICAgICAgJ3N0YXR1cy1maWx0ZXJfX2l0ZW0nOiB0cnVlLFxuICAgICAgICBpdGVtQ2xhc3M6IHRydWUsXG4gICAgICAgICdpcy1hY3RpdmUnOiB0aGlzLnByb3BzLmlzQWN0aXZlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnbGknLFxuICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcywgb25DbGljazogdGhpcy5oYW5kbGVDbGljayB9LFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uSnMyWydkZWZhdWx0J10sIHsgaWNvbjogdGhpcy5wcm9wcy5pY29uIH0pLFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YXR1c0ZpbHRlcjtcbn0pKF9yZWFjdDJbJ2RlZmF1bHQnXS5Db21wb25lbnQpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBTdGF0dXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvc2lkZWJhci9TdGF0dXNGaWx0ZXIuanNcbiAqKiBtb2R1bGUgaWQgPSAyMTlcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); /***/ }, /* 220 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(157);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _genericLoadingIndicator = __webpack_require__(221);\n\nvar _genericLoadingIndicator2 = _interopRequireDefault(_genericLoadingIndicator);\n\nvar _Torrent = __webpack_require__(222);\n\nvar _Torrent2 = _interopRequireDefault(_Torrent);\n\nvar _TorrentDetails = __webpack_require__(219);\n\nvar _TorrentDetails2 = _interopRequireDefault(_TorrentDetails);\n\nvar _storesTorrentFilterStore = __webpack_require__(194);\n\nvar _storesTorrentFilterStore2 = _interopRequireDefault(_storesTorrentFilterStore);\n\nvar _storesTorrentStore = __webpack_require__(197);\n\nvar _storesTorrentStore2 = _interopRequireDefault(_storesTorrentStore);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['onReceiveTorrentsError', 'onReceiveTorrentsSuccess', 'handleDetailsClick', 'handleTorrentClick', 'onStatusFilterChange', 'onTorrentSelectionChange', 'getListPadding', 'getViewportLimits', 'setScrollPosition', 'setViewportHeight'];\n\nvar TorrentListContainer = (function (_React$Component) {\n _inherits(TorrentListContainer, _React$Component);\n\n function TorrentListContainer() {\n var _this = this;\n\n _classCallCheck(this, TorrentListContainer);\n\n _get(Object.getPrototypeOf(TorrentListContainer.prototype), 'constructor', this).call(this);\n\n this.state = {\n detailsPanelOpen: false,\n maxTorrentIndex: 10,\n minTorrentIndex: 0,\n scrollPosition: 0,\n torrentCount: 0,\n torrentHeight: 64,\n torrents: null,\n torrentRequestError: false,\n torrentRequestSuccess: false,\n viewportHeight: 0\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n\n this.handleScroll = _lodash2['default'].throttle(this.setScrollPosition, 100, {\n leading: true,\n trailing: true\n });\n\n this.handleWindowResize = _lodash2['default'].throttle(this.setViewportHeight, 350, {\n leading: true,\n trailing: true\n });\n }\n\n _createClass(TorrentListContainer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENT_SELECTION_CHANGE, this.onTorrentSelectionChange);\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_SUCCESS, this.onReceiveTorrentsSuccess);\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_ERROR, this.onReceiveTorrentsError);\n _storesTorrentFilterStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n _storesTorrentStore2['default'].fetchTorrents();\n window.addEventListener('resize', this.handleWindowResize);\n this.setViewportHeight();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize);\n\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENT_SELECTION_CHANGE, this.onTorrentSelectionChange);\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_SUCCESS, this.onReceiveTorrentsSuccess);\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_ERROR, this.onReceiveTorrentsError);\n _storesTorrentFilterStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n }\n }, {\n key: 'handleDetailsClick',\n value: function handleDetailsClick(torrent, event) {\n _actionsUIActions2['default'].handleDetailsClick({\n hash: torrent.hash,\n event: event\n });\n }\n }, {\n key: 'handleTorrentClick',\n value: function handleTorrentClick(hash, event) {\n _actionsUIActions2['default'].handleTorrentClick({ hash: hash, event: event });\n }\n }, {\n key: 'onReceiveTorrentsError',\n value: function onReceiveTorrentsError() {\n this.setState({ torrentRequestError: true, torrentRequestSuccess: false });\n }\n }, {\n key: 'onReceiveTorrentsSuccess',\n value: function onReceiveTorrentsSuccess() {\n var torrents = _storesTorrentStore2['default'].getTorrents();\n\n this.setState({\n torrents: torrents,\n torrentCount: torrents.length,\n torrentRequestError: false,\n torrentRequestSuccess: true\n });\n }\n }, {\n key: 'onStatusFilterChange',\n value: function onStatusFilterChange() {\n this.forceUpdate();\n }\n }, {\n key: 'onTorrentSelectionChange',\n value: function onTorrentSelectionChange() {\n if (_storesTorrentStore2['default'].getSelectedTorrents().length !== 1 && this.state.detailsPanelOpen || _storesTorrentStore2['default'].getTorrents().length === 0) {\n // Close the detail side panel if more than one torrent is selected or if\n // none are selected.\n this.setState({\n detailsPanelOpen: false\n });\n } else {\n this.forceUpdate();\n }\n }\n }, {\n key: 'getListPadding',\n value: function getListPadding(minTorrentIndex, maxTorrentIndex, torrentCount) {\n if (maxTorrentIndex > torrentCount - 1) {\n maxTorrentIndex = torrentCount - 1;\n }\n\n var hiddenBottom = torrentCount - 1 - maxTorrentIndex;\n var hiddenTop = minTorrentIndex;\n\n var bottom = maxTorrentIndex <= torrentCount ? hiddenBottom * this.state.torrentHeight : 0;\n var top = minTorrentIndex > 0 ? hiddenTop * this.state.torrentHeight : 0;\n\n return {\n bottom: bottom,\n top: top\n };\n }\n }, {\n key: 'getViewportLimits',\n value: function getViewportLimits() {\n var buffer = 10;\n\n var elementsInView = Math.floor(this.state.viewportHeight / this.state.torrentHeight);\n\n var minTorrentIndex = Math.floor(this.state.scrollPosition / this.state.torrentHeight) - buffer;\n\n var maxTorrentIndex = minTorrentIndex + elementsInView + buffer * 2 + 1;\n\n if (this.state.torrentCount < maxTorrentIndex) {\n maxTorrentIndex = this.state.torrentCount - 1;\n }\n\n if (minTorrentIndex < 0) {\n minTorrentIndex = 0;\n }\n\n return { minTorrentIndex: minTorrentIndex, maxTorrentIndex: maxTorrentIndex };\n }\n }, {\n key: 'setScrollPosition',\n value: function setScrollPosition() {\n if (this.refs.torrentList) {\n this.setState({\n scrollPosition: _reactDom2['default'].findDOMNode(this.refs.torrentList).scrollTop\n });\n }\n }\n }, {\n key: 'setViewportHeight',\n value: function setViewportHeight() {\n if (this.refs.torrentList) {\n this.setState({\n viewportHeight: _reactDom2['default'].findDOMNode(this.refs.torrentList).offsetHeight\n });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var torrentListContent = null;\n\n if (!this.state.torrentRequestSuccess) {\n torrentListContent = _react2['default'].createElement(_genericLoadingIndicator2['default'], null);\n } else {\n (function () {\n var selectedTorrents = _storesTorrentStore2['default'].getSelectedTorrents();\n var torrents = _this2.state.torrents;\n var viewportLimits = _this2.getViewportLimits();\n var listPadding = _this2.getListPadding(viewportLimits.minTorrentIndex, viewportLimits.maxTorrentIndex, torrents.length);\n\n var visibleTorrents = torrents.slice(viewportLimits.minTorrentIndex, viewportLimits.maxTorrentIndex);\n\n var torrentList = visibleTorrents.map(function (torrent, index) {\n var isSelected = false;\n var hash = torrent.hash;\n\n if (selectedTorrents.indexOf(hash) > -1) {\n isSelected = true;\n }\n\n return _react2['default'].createElement(_Torrent2['default'], { key: hash, data: torrent, selected: isSelected,\n handleClick: _this2.handleTorrentClick,\n handleDetailsClick: _this2.handleDetailsClick });\n });\n\n torrentListContent = _react2['default'].createElement(\n 'ul',\n { className: 'torrent__list' },\n _react2['default'].createElement('li', { className: 'torrent__spacer torrent__spacer--top',\n style: { height: listPadding.top + 'px' } }),\n torrentList,\n _react2['default'].createElement('li', { className: 'torrent__spacer torrent__spacer--bottom',\n style: { height: listPadding.bottom + 'px' } })\n );\n })();\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent__list__wrapper', onScroll: this.handleScroll,\n ref: 'torrentList' },\n torrentListContent\n );\n }\n }]);\n\n return TorrentListContainer;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentListContainer;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudExpc3QuanM/ZDcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx3REFBd0QsMkJBQTJCO0FBQ25GO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxxQkFBcUIsMERBQTBEO0FBQy9FO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkVBQTJFO0FBQzNFO0FBQ0EsNkRBQTZEO0FBQzdELFdBQVc7O0FBRVg7QUFDQTtBQUNBLGFBQWEsNkJBQTZCO0FBQzFDLG9EQUFvRDtBQUNwRCxzQkFBc0IsaUNBQWlDLEVBQUU7QUFDekQ7QUFDQSxvREFBb0Q7QUFDcEQsc0JBQXNCLG9DQUFvQyxFQUFFO0FBQzVEO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2xvZGFzaCA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG52YXIgX2xvZGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2Rhc2gpO1xuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBfZ2VuZXJpY0xvYWRpbmdJbmRpY2F0b3IgPSByZXF1aXJlKCcuLi9nZW5lcmljL0xvYWRpbmdJbmRpY2F0b3InKTtcblxudmFyIF9nZW5lcmljTG9hZGluZ0luZGljYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZW5lcmljTG9hZGluZ0luZGljYXRvcik7XG5cbnZhciBfVG9ycmVudCA9IHJlcXVpcmUoJy4vVG9ycmVudCcpO1xuXG52YXIgX1RvcnJlbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9ycmVudCk7XG5cbnZhciBfVG9ycmVudERldGFpbHMgPSByZXF1aXJlKCcuL1RvcnJlbnREZXRhaWxzJyk7XG5cbnZhciBfVG9ycmVudERldGFpbHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9ycmVudERldGFpbHMpO1xuXG52YXIgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZSA9IHJlcXVpcmUoJy4uLy4uL3N0b3Jlcy9Ub3JyZW50RmlsdGVyU3RvcmUnKTtcblxudmFyIF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlKTtcblxudmFyIF9zdG9yZXNUb3JyZW50U3RvcmUgPSByZXF1aXJlKCcuLi8uLi9zdG9yZXMvVG9ycmVudFN0b3JlJyk7XG5cbnZhciBfc3RvcmVzVG9ycmVudFN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3Jlc1RvcnJlbnRTdG9yZSk7XG5cbnZhciBfYWN0aW9uc1VJQWN0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL2FjdGlvbnMvVUlBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc1VJQWN0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hY3Rpb25zVUlBY3Rpb25zKTtcblxudmFyIG1ldGhvZHNUb0JpbmQgPSBbJ29uUmVjZWl2ZVRvcnJlbnRzRXJyb3InLCAnb25SZWNlaXZlVG9ycmVudHNTdWNjZXNzJywgJ2hhbmRsZURldGFpbHNDbGljaycsICdoYW5kbGVUb3JyZW50Q2xpY2snLCAnb25TdGF0dXNGaWx0ZXJDaGFuZ2UnLCAnb25Ub3JyZW50U2VsZWN0aW9uQ2hhbmdlJywgJ2dldExpc3RQYWRkaW5nJywgJ2dldFZpZXdwb3J0TGltaXRzJywgJ3NldFNjcm9sbFBvc2l0aW9uJywgJ3NldFZpZXdwb3J0SGVpZ2h0J107XG5cbnZhciBUb3JyZW50TGlzdENvbnRhaW5lciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9ycmVudExpc3RDb250YWluZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvcnJlbnRMaXN0Q29udGFpbmVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9ycmVudExpc3RDb250YWluZXIpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVG9ycmVudExpc3RDb250YWluZXIucHJvdG90eXBlKSwgJ2NvbnN0cnVjdG9yJywgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkZXRhaWxzUGFuZWxPcGVuOiBmYWxzZSxcbiAgICAgIG1heFRvcnJlbnRJbmRleDogMTAsXG4gICAgICBtaW5Ub3JyZW50SW5kZXg6IDAsXG4gICAgICBzY3JvbGxQb3NpdGlvbjogMCxcbiAgICAgIHRvcnJlbnRDb3VudDogMCxcbiAgICAgIHRvcnJlbnRIZWlnaHQ6IDY0LFxuICAgICAgdG9ycmVudHM6IG51bGwsXG4gICAgICB0b3JyZW50UmVxdWVzdEVycm9yOiBmYWxzZSxcbiAgICAgIHRvcnJlbnRSZXF1ZXN0U3VjY2VzczogZmFsc2UsXG4gICAgICB2aWV3cG9ydEhlaWdodDogMFxuICAgIH07XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbmRsZVNjcm9sbCA9IF9sb2Rhc2gyWydkZWZhdWx0J10udGhyb3R0bGUodGhpcy5zZXRTY3JvbGxQb3NpdGlvbiwgMTAwLCB7XG4gICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgdHJhaWxpbmc6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuaGFuZGxlV2luZG93UmVzaXplID0gX2xvZGFzaDJbJ2RlZmF1bHQnXS50aHJvdHRsZSh0aGlzLnNldFZpZXdwb3J0SGVpZ2h0LCAzNTAsIHtcbiAgICAgIGxlYWRpbmc6IHRydWUsXG4gICAgICB0cmFpbGluZzogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvcnJlbnRMaXN0Q29udGFpbmVyLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UX1NFTEVDVElPTl9DSEFOR0UsIHRoaXMub25Ub3JyZW50U2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UU19SRVFVRVNUX1NVQ0NFU1MsIHRoaXMub25SZWNlaXZlVG9ycmVudHNTdWNjZXNzKTtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UU19SRVFVRVNUX0VSUk9SLCB0aGlzLm9uUmVjZWl2ZVRvcnJlbnRzRXJyb3IpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfVE9SUkVOVFNfRklMVEVSX1NUQVRVU19DSEFOR0UsIHRoaXMub25TdGF0dXNGaWx0ZXJDaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5mZXRjaFRvcnJlbnRzKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpO1xuICAgICAgdGhpcy5zZXRWaWV3cG9ydEhlaWdodCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpO1xuXG4gICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLnVubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfU0VMRUNUSU9OX0NIQU5HRSwgdGhpcy5vblRvcnJlbnRTZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVE9SUkVOVFNfUkVRVUVTVF9TVUNDRVNTLCB0aGlzLm9uUmVjZWl2ZVRvcnJlbnRzU3VjY2Vzcyk7XG4gICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLnVubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UU19SRVFVRVNUX0VSUk9SLCB0aGlzLm9uUmVjZWl2ZVRvcnJlbnRzRXJyb3IpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UU19GSUxURVJfU1RBVFVTX0NIQU5HRSwgdGhpcy5vblN0YXR1c0ZpbHRlckNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlRGV0YWlsc0NsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRGV0YWlsc0NsaWNrKHRvcnJlbnQsIGV2ZW50KSB7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5oYW5kbGVEZXRhaWxzQ2xpY2soe1xuICAgICAgICBoYXNoOiB0b3JyZW50Lmhhc2gsXG4gICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVG9ycmVudENsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVG9ycmVudENsaWNrKGhhc2gsIGV2ZW50KSB7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5oYW5kbGVUb3JyZW50Q2xpY2soeyBoYXNoOiBoYXNoLCBldmVudDogZXZlbnQgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25SZWNlaXZlVG9ycmVudHNFcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUmVjZWl2ZVRvcnJlbnRzRXJyb3IoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdG9ycmVudFJlcXVlc3RFcnJvcjogdHJ1ZSwgdG9ycmVudFJlcXVlc3RTdWNjZXNzOiBmYWxzZSB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblJlY2VpdmVUb3JyZW50c1N1Y2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblJlY2VpdmVUb3JyZW50c1N1Y2Nlc3MoKSB7XG4gICAgICB2YXIgdG9ycmVudHMgPSBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnRzKCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0b3JyZW50czogdG9ycmVudHMsXG4gICAgICAgIHRvcnJlbnRDb3VudDogdG9ycmVudHMubGVuZ3RoLFxuICAgICAgICB0b3JyZW50UmVxdWVzdEVycm9yOiBmYWxzZSxcbiAgICAgICAgdG9ycmVudFJlcXVlc3RTdWNjZXNzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblN0YXR1c0ZpbHRlckNoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uU3RhdHVzRmlsdGVyQ2hhbmdlKCkge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uVG9ycmVudFNlbGVjdGlvbkNoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVG9ycmVudFNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICAgIGlmIChfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmdldFNlbGVjdGVkVG9ycmVudHMoKS5sZW5ndGggIT09IDEgJiYgdGhpcy5zdGF0ZS5kZXRhaWxzUGFuZWxPcGVuIHx8IF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10uZ2V0VG9ycmVudHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gQ2xvc2UgdGhlIGRldGFpbCBzaWRlIHBhbmVsIGlmIG1vcmUgdGhhbiBvbmUgdG9ycmVudCBpcyBzZWxlY3RlZCBvciBpZlxuICAgICAgICAvLyBub25lIGFyZSBzZWxlY3RlZC5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGV0YWlsc1BhbmVsT3BlbjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0TGlzdFBhZGRpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMaXN0UGFkZGluZyhtaW5Ub3JyZW50SW5kZXgsIG1heFRvcnJlbnRJbmRleCwgdG9ycmVudENvdW50KSB7XG4gICAgICBpZiAobWF4VG9ycmVudEluZGV4ID4gdG9ycmVudENvdW50IC0gMSkge1xuICAgICAgICBtYXhUb3JyZW50SW5kZXggPSB0b3JyZW50Q291bnQgLSAxO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlkZGVuQm90dG9tID0gdG9ycmVudENvdW50IC0gMSAtIG1heFRvcnJlbnRJbmRleDtcbiAgICAgIHZhciBoaWRkZW5Ub3AgPSBtaW5Ub3JyZW50SW5kZXg7XG5cbiAgICAgIHZhciBib3R0b20gPSBtYXhUb3JyZW50SW5kZXggPD0gdG9ycmVudENvdW50ID8gaGlkZGVuQm90dG9tICogdGhpcy5zdGF0ZS50b3JyZW50SGVpZ2h0IDogMDtcbiAgICAgIHZhciB0b3AgPSBtaW5Ub3JyZW50SW5kZXggPiAwID8gaGlkZGVuVG9wICogdGhpcy5zdGF0ZS50b3JyZW50SGVpZ2h0IDogMDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm90dG9tOiBib3R0b20sXG4gICAgICAgIHRvcDogdG9wXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFZpZXdwb3J0TGltaXRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Vmlld3BvcnRMaW1pdHMoKSB7XG4gICAgICB2YXIgYnVmZmVyID0gMTA7XG5cbiAgICAgIHZhciBlbGVtZW50c0luVmlldyA9IE1hdGguZmxvb3IodGhpcy5zdGF0ZS52aWV3cG9ydEhlaWdodCAvIHRoaXMuc3RhdGUudG9ycmVudEhlaWdodCk7XG5cbiAgICAgIHZhciBtaW5Ub3JyZW50SW5kZXggPSBNYXRoLmZsb29yKHRoaXMuc3RhdGUuc2Nyb2xsUG9zaXRpb24gLyB0aGlzLnN0YXRlLnRvcnJlbnRIZWlnaHQpIC0gYnVmZmVyO1xuXG4gICAgICB2YXIgbWF4VG9ycmVudEluZGV4ID0gbWluVG9ycmVudEluZGV4ICsgZWxlbWVudHNJblZpZXcgKyBidWZmZXIgKiAyICsgMTtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUudG9ycmVudENvdW50IDwgbWF4VG9ycmVudEluZGV4KSB7XG4gICAgICAgIG1heFRvcnJlbnRJbmRleCA9IHRoaXMuc3RhdGUudG9ycmVudENvdW50IC0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1pblRvcnJlbnRJbmRleCA8IDApIHtcbiAgICAgICAgbWluVG9ycmVudEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgbWluVG9ycmVudEluZGV4OiBtaW5Ub3JyZW50SW5kZXgsIG1heFRvcnJlbnRJbmRleDogbWF4VG9ycmVudEluZGV4IH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2V0U2Nyb2xsUG9zaXRpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLnJlZnMudG9ycmVudExpc3QpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2Nyb2xsUG9zaXRpb246IF9yZWFjdERvbTJbJ2RlZmF1bHQnXS5maW5kRE9NTm9kZSh0aGlzLnJlZnMudG9ycmVudExpc3QpLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRWaWV3cG9ydEhlaWdodCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFZpZXdwb3J0SGVpZ2h0KCkge1xuICAgICAgaWYgKHRoaXMucmVmcy50b3JyZW50TGlzdCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB2aWV3cG9ydEhlaWdodDogX3JlYWN0RG9tMlsnZGVmYXVsdCddLmZpbmRET01Ob2RlKHRoaXMucmVmcy50b3JyZW50TGlzdCkub2Zmc2V0SGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgdG9ycmVudExpc3RDb250ZW50ID0gbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnRvcnJlbnRSZXF1ZXN0U3VjY2Vzcykge1xuICAgICAgICB0b3JyZW50TGlzdENvbnRlbnQgPSBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfZ2VuZXJpY0xvYWRpbmdJbmRpY2F0b3IyWydkZWZhdWx0J10sIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRUb3JyZW50cyA9IF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10uZ2V0U2VsZWN0ZWRUb3JyZW50cygpO1xuICAgICAgICAgIHZhciB0b3JyZW50cyA9IF90aGlzMi5zdGF0ZS50b3JyZW50cztcbiAgICAgICAgICB2YXIgdmlld3BvcnRMaW1pdHMgPSBfdGhpczIuZ2V0Vmlld3BvcnRMaW1pdHMoKTtcbiAgICAgICAgICB2YXIgbGlzdFBhZGRpbmcgPSBfdGhpczIuZ2V0TGlzdFBhZGRpbmcodmlld3BvcnRMaW1pdHMubWluVG9ycmVudEluZGV4LCB2aWV3cG9ydExpbWl0cy5tYXhUb3JyZW50SW5kZXgsIHRvcnJlbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgICB2YXIgdmlzaWJsZVRvcnJlbnRzID0gdG9ycmVudHMuc2xpY2Uodmlld3BvcnRMaW1pdHMubWluVG9ycmVudEluZGV4LCB2aWV3cG9ydExpbWl0cy5tYXhUb3JyZW50SW5kZXgpO1xuXG4gICAgICAgICAgdmFyIHRvcnJlbnRMaXN0ID0gdmlzaWJsZVRvcnJlbnRzLm1hcChmdW5jdGlvbiAodG9ycmVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBpc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaGFzaCA9IHRvcnJlbnQuaGFzaDtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkVG9ycmVudHMuaW5kZXhPZihoYXNoKSA+IC0xKSB7XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX1RvcnJlbnQyWydkZWZhdWx0J10sIHsga2V5OiBoYXNoLCBkYXRhOiB0b3JyZW50LCBzZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgaGFuZGxlQ2xpY2s6IF90aGlzMi5oYW5kbGVUb3JyZW50Q2xpY2ssXG4gICAgICAgICAgICAgIGhhbmRsZURldGFpbHNDbGljazogX3RoaXMyLmhhbmRsZURldGFpbHNDbGljayB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRvcnJlbnRMaXN0Q29udGVudCA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ3VsJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fbGlzdCcgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdsaScsIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fc3BhY2VyIHRvcnJlbnRfX3NwYWNlci0tdG9wJyxcbiAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBsaXN0UGFkZGluZy50b3AgKyAncHgnIH0gfSksXG4gICAgICAgICAgICB0b3JyZW50TGlzdCxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdsaScsIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fc3BhY2VyIHRvcnJlbnRfX3NwYWNlci0tYm90dG9tJyxcbiAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBsaXN0UGFkZGluZy5ib3R0b20gKyAncHgnIH0gfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2xpc3RfX3dyYXBwZXInLCBvblNjcm9sbDogdGhpcy5oYW5kbGVTY3JvbGwsXG4gICAgICAgICAgcmVmOiAndG9ycmVudExpc3QnIH0sXG4gICAgICAgIHRvcnJlbnRMaXN0Q29udGVudFxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudExpc3RDb250YWluZXI7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudExpc3RDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnRMaXN0LmpzXG4gKiogbW9kdWxlIGlkID0gMjIwXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _TorrentDetails = __webpack_require__(221);\n\nvar _TorrentDetails2 = _interopRequireDefault(_TorrentDetails);\n\nvar _TorrentList = __webpack_require__(222);\n\nvar _TorrentList2 = _interopRequireDefault(_TorrentList);\n\nvar methodsToBind = ['toggleDetailsPanel'];\n\nvar TorrentListContainer = (function (_React$Component) {\n _inherits(TorrentListContainer, _React$Component);\n\n function TorrentListContainer() {\n _classCallCheck(this, TorrentListContainer);\n\n _get(Object.getPrototypeOf(TorrentListContainer.prototype), 'constructor', this).call(this);\n\n this.state = {\n detailsPanelOpen: false\n };\n }\n\n _createClass(TorrentListContainer, [{\n key: 'render',\n value: function render() {\n var classes = (0, _classnames2['default'])({\n 'torrents': true\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: classes },\n _react2['default'].createElement(_TorrentList2['default'], null),\n _react2['default'].createElement(_TorrentDetails2['default'], null)\n );\n }\n }]);\n\n return TorrentListContainer;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentListContainer;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudExpc3RDb250YWluZXIuanM/M2IyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsU0FBUyxxQkFBcUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjIyMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9sb2Rhc2ggPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxudmFyIF9sb2Rhc2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9kYXNoKTtcblxudmFyIF9jbGFzc25hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xuXG52YXIgX2NsYXNzbmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lcyk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9Ub3JyZW50RGV0YWlscyA9IHJlcXVpcmUoJy4vVG9ycmVudERldGFpbHMnKTtcblxudmFyIF9Ub3JyZW50RGV0YWlsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub3JyZW50RGV0YWlscyk7XG5cbnZhciBfVG9ycmVudExpc3QgPSByZXF1aXJlKCcuL1RvcnJlbnRMaXN0Jyk7XG5cbnZhciBfVG9ycmVudExpc3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9ycmVudExpc3QpO1xuXG52YXIgbWV0aG9kc1RvQmluZCA9IFsndG9nZ2xlRGV0YWlsc1BhbmVsJ107XG5cbnZhciBUb3JyZW50TGlzdENvbnRhaW5lciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9ycmVudExpc3RDb250YWluZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvcnJlbnRMaXN0Q29udGFpbmVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb3JyZW50TGlzdENvbnRhaW5lcik7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50TGlzdENvbnRhaW5lci5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRldGFpbHNQYW5lbE9wZW46IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUb3JyZW50TGlzdENvbnRhaW5lciwgW3tcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgY2xhc3NlcyA9ICgwLCBfY2xhc3NuYW1lczJbJ2RlZmF1bHQnXSkoe1xuICAgICAgICAndG9ycmVudHMnOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzZXMgfSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX1RvcnJlbnRMaXN0MlsnZGVmYXVsdCddLCBudWxsKSxcbiAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX1RvcnJlbnREZXRhaWxzMlsnZGVmYXVsdCddLCBudWxsKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudExpc3RDb250YWluZXI7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudExpc3RDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnRMaXN0Q29udGFpbmVyLmpzXG4gKiogbW9kdWxlIGlkID0gMjIwXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 221 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar TorrentList = (function (_React$Component) {\n _inherits(TorrentList, _React$Component);\n\n function TorrentList() {\n _classCallCheck(this, TorrentList);\n\n _get(Object.getPrototypeOf(TorrentList.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(TorrentList, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'div',\n null,\n 'Loading'\n );\n }\n }]);\n\n return TorrentList;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentList;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9nZW5lcmljL0xvYWRpbmdJbmRpY2F0b3IuanM/ZDc0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBUb3JyZW50TGlzdCA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9ycmVudExpc3QsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvcnJlbnRMaXN0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb3JyZW50TGlzdCk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50TGlzdC5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvcnJlbnRMaXN0LCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIG51bGwsXG4gICAgICAgICdMb2FkaW5nJ1xuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudExpc3Q7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudExpc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvZ2VuZXJpYy9Mb2FkaW5nSW5kaWNhdG9yLmpzXG4gKiogbW9kdWxlIGlkID0gMjIxXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactAddonsCssTransitionGroup = __webpack_require__(165);\n\nvar _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _utilFormatData = __webpack_require__(213);\n\nvar _utilFormatData2 = _interopRequireDefault(_utilFormatData);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _actionsTorrentActions = __webpack_require__(179);\n\nvar _actionsTorrentActions2 = _interopRequireDefault(_actionsTorrentActions);\n\nvar _storesTorrentStore = __webpack_require__(197);\n\nvar _storesTorrentStore2 = _interopRequireDefault(_storesTorrentStore);\n\nvar _storesUIStore = __webpack_require__(205);\n\nvar _storesUIStore2 = _interopRequireDefault(_storesUIStore);\n\nvar methodsToBind = ['getFileData', 'getFileTreeDomNodes', 'onTorrentDetailsHashChange', 'onOpenChange', 'onTorrentDetailsChange', 'createFileTree', 'getHeading', 'getSidePanel'];\n\nvar TorrentDetails = (function (_React$Component) {\n _inherits(TorrentDetails, _React$Component);\n\n function TorrentDetails() {\n var _this = this;\n\n _classCallCheck(this, TorrentDetails);\n\n _get(Object.getPrototypeOf(TorrentDetails.prototype), 'constructor', this).call(this);\n\n this.state = {\n isOpen: false,\n torrentDetailsSuccess: false,\n torrentDetailsError: false,\n selectedTorrent: {},\n selectedTorrentHash: null,\n torrentDetails: {}\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(TorrentDetails, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TORRENT_DETAILS_CHANGE, this.onTorrentDetailsChange);\n _storesUIStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_OPEN_CHANGE, this.onOpenChange);\n _storesUIStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_HASH_CHANGE, this.onTorrentDetailsHashChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _storesTorrentStore2['default'].stopPollingTorrentDetails();\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TORRENT_DETAILS_CHANGE, this.onTorrentDetailsChange);\n _storesUIStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_OPEN_CHANGE, this.onOpenChange);\n _storesUIStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENT_DETAILS_HASH_CHANGE, this.onTorrentDetailsHashChange);\n }\n }, {\n key: 'onTorrentDetailsHashChange',\n value: function onTorrentDetailsHashChange() {\n if (_storesUIStore2['default'].isTorrentDetailsOpen()) {\n _storesTorrentStore2['default'].fetchTorrentDetails(_storesUIStore2['default'].getTorrentDetailsHash());\n }\n }\n }, {\n key: 'onOpenChange',\n value: function onOpenChange() {\n if (!_storesUIStore2['default'].isTorrentDetailsOpen()) {\n _storesTorrentStore2['default'].stopPollingTorrentDetails();\n } else {\n _storesTorrentStore2['default'].fetchTorrentDetails(_storesUIStore2['default'].getTorrentDetailsHash());\n }\n\n this.setState({\n isOpen: _storesUIStore2['default'].isTorrentDetailsOpen()\n });\n }\n }, {\n key: 'onTorrentDetailsChange',\n value: function onTorrentDetailsChange() {\n this.setState({\n torrentDetails: _storesTorrentStore2['default'].getTorrentDetails(_storesUIStore2['default'].getTorrentDetailsHash())\n });\n }\n }, {\n key: 'createFileTree',\n value: function createFileTree(tree, directory, file) {\n if (tree === undefined) tree = {};\n var depth = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];\n\n if (depth < file.pathComponents.length - 1) {\n depth++;\n tree[directory] = this.createFileTree(tree[directory], file.pathComponents[depth], file, depth);\n } else {\n if (!tree.files) {\n tree.files = [];\n }\n tree.files.push(file);\n }\n return tree;\n }\n }, {\n key: 'getFileTreeDomNodes',\n value: function getFileTreeDomNodes(tree) {\n var _this2 = this;\n\n var depth = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n var index = 0;\n depth++;\n return Object.keys(tree).map(function (branchName) {\n var branch = tree[branchName];\n var domNodes = null;\n index++;\n\n if (branchName === 'files') {\n branch.sort(function (a, b) {\n return a.filename.localeCompare(b.filename);\n });\n domNodes = branch.map(function (file, fileIndex) {\n return _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__node--file',\n key: '' + fileIndex },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'file' }),\n file.filename\n );\n });\n } else {\n var classes = 'file-list__branch file-list__branch--depth-' + depth;\n domNodes = _react2['default'].createElement(\n 'div',\n { className: classes, key: '' + index + depth },\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__node--directory' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'directoryOutlined' }),\n branchName\n ),\n _this2.getFileTreeDomNodes(tree[branchName], depth)\n );\n }\n\n return domNodes;\n });\n }\n }, {\n key: 'getFileList',\n value: function getFileList(files) {\n var _this3 = this;\n\n var tree = {};\n\n files.forEach(function (file) {\n tree = _this3.createFileTree(tree, file.pathComponents[0], file);\n });\n\n var directoryTree = this.getFileTreeDomNodes(tree);\n\n return directoryTree;\n }\n }, {\n key: 'getFileData',\n value: function getFileData(torrent, files) {\n var parentDirectory = torrent.directory;\n var filename = torrent.filename;\n\n if (files) {\n // We've received full file details from the client.\n return _react2['default'].createElement(\n 'div',\n { className: 'file-list torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__parent-directory' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'directoryFilled' }),\n parentDirectory\n ),\n this.getFileList(files)\n );\n } else {\n // We've only received the top-level file details from the torrent list.\n return _react2['default'].createElement(\n 'div',\n { className: 'file-list torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__parent-directory' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'directoryFilled' }),\n parentDirectory\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'file-list__node file-list__node--file' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'file' }),\n filename\n )\n );\n }\n }\n }, {\n key: 'getHeading',\n value: function getHeading() {\n // return (\n //
\n // Dropdown\n //
\n // );\n }\n }, {\n key: 'getPeerList',\n value: function getPeerList(peers) {\n if (peers) {\n var peerList = null;\n var peerCount = 0;\n\n peerList = peers.map(function (peer, index) {\n var downloadRate = _utilFormatData2['default'].data(peer.downloadRate, '/s');\n var uploadRate = _utilFormatData2['default'].data(peer.uploadRate, '/s');\n return _react2['default'].createElement(\n 'tr',\n { key: index },\n _react2['default'].createElement(\n 'td',\n null,\n peer.address\n ),\n _react2['default'].createElement(\n 'td',\n null,\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'td',\n null,\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n )\n );\n });\n peerCount = peerList.length;\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent-details__peers torrent-details__section' },\n _react2['default'].createElement(\n 'table',\n { className: 'torrent-details__table table' },\n _react2['default'].createElement(\n 'thead',\n { className: 'torrent-details__table__heading' },\n _react2['default'].createElement(\n 'tr',\n null,\n _react2['default'].createElement(\n 'th',\n null,\n 'Peers',\n _react2['default'].createElement(\n 'span',\n { className: 'torrent-details__table__heading__count' },\n peerCount\n )\n ),\n _react2['default'].createElement(\n 'th',\n null,\n 'DL'\n ),\n _react2['default'].createElement(\n 'th',\n null,\n 'UL'\n )\n )\n ),\n _react2['default'].createElement(\n 'tbody',\n null,\n peerList\n )\n )\n );\n }\n }\n }, {\n key: 'getSidePanel',\n value: function getSidePanel() {\n if (!this.state.isOpen) {\n return null;\n }\n\n var selectedHash = _storesUIStore2['default'].getTorrentDetailsHash();\n var torrent = _storesTorrentStore2['default'].getTorrent(selectedHash);\n var added = new Date(torrent.added * 1000);\n var addedString = added.getMonth() + 1 + '/' + added.getDate() + '/' + added.getFullYear();\n var completed = _utilFormatData2['default'].data(torrent.bytesDone);\n var downloadRate = _utilFormatData2['default'].data(torrent.downloadRate, '/s');\n var downloadTotal = _utilFormatData2['default'].data(torrent.downloadTotal);\n var eta = _utilFormatData2['default'].eta(torrent.eta);\n var ratio = _utilFormatData2['default'].ratio(torrent.ratio);\n var totalSize = _utilFormatData2['default'].data(torrent.sizeBytes);\n var torrentDetails = this.state.torrentDetails || {};\n var uploadRate = _utilFormatData2['default'].data(torrent.uploadRate, '/s');\n var uploadTotal = _utilFormatData2['default'].data(torrent.uploadTotal);\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent-details', key: this.state.isOpen },\n this.getHeading(),\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent-details__transfer-data torrent-details__section' },\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--download' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'download' }),\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--upload' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'upload' }),\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--ratio' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'ratio' }),\n ratio\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'transfer-data transfer-data--eta' },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'eta' }),\n eta\n )\n ),\n this.getTrackerList(torrentDetails.trackers),\n this.getFileData(torrent, torrentDetails.files),\n this.getPeerList(torrentDetails.peers)\n );\n }\n }, {\n key: 'getTrackerList',\n value: function getTrackerList() {\n var trackers = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n var trackerCount = trackers.length;\n var trackerTypes = ['http', 'udp', 'dht'];\n\n var trackerDetails = trackers.map(function (tracker, index) {\n return _react2['default'].createElement(\n 'tr',\n { key: index },\n _react2['default'].createElement(\n 'td',\n null,\n tracker.url\n ),\n _react2['default'].createElement(\n 'td',\n null,\n trackerTypes[tracker.type - 1]\n )\n );\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent-details__peers torrent-details__section' },\n _react2['default'].createElement(\n 'table',\n { className: 'torrent-details__table table' },\n _react2['default'].createElement(\n 'thead',\n { className: 'torrent-details__table__heading' },\n _react2['default'].createElement(\n 'tr',\n null,\n _react2['default'].createElement(\n 'th',\n null,\n 'Trackers',\n _react2['default'].createElement(\n 'span',\n { className: 'torrent-details__table__heading__count' },\n trackerCount\n )\n ),\n _react2['default'].createElement(\n 'th',\n null,\n 'Type'\n )\n )\n ),\n _react2['default'].createElement(\n 'tbody',\n null,\n trackerDetails\n )\n )\n );\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n _reactAddonsCssTransitionGroup2['default'],\n {\n transitionEnterTimeout: 500,\n transitionLeaveTimeout: 500,\n transitionName: 'torrent-details' },\n this.getSidePanel()\n );\n }\n }]);\n\n return TorrentDetails;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentDetails;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudERldGFpbHMuanM/NDFjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsd0NBQXdDLG1CQUFtQiw0QkFBNEIsa0RBQWtELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sY0FBYyxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUVscEIsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdB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QUFDQTtBQUNBO0FBQ0EsYUFBYSxtREFBbUQ7QUFDaEUsc0VBQXNFLGlCQUFpQjtBQUN2RjtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrREFBa0Q7QUFDL0Qsc0VBQXNFLGdCQUFnQjtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELHNFQUFzRSxjQUFjO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxTQUFTLCtEQUErRDtBQUN4RTtBQUNBO0FBQ0EsV0FBVyw0Q0FBNEM7QUFDdkQ7QUFDQTtBQUNBLGFBQWEsK0NBQStDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzREFBc0Q7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3g0LCBfeDUsIF94NikgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeDQsIHByb3BlcnR5ID0gX3g1LCByZWNlaXZlciA9IF94NjsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeDQgPSBwYXJlbnQ7IF94NSA9IHByb3BlcnR5OyBfeDYgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2xvZGFzaCA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG52YXIgX2xvZGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2Rhc2gpO1xuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWNzcy10cmFuc2l0aW9uLWdyb3VwJyk7XG5cbnZhciBfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNDc3NUcmFuc2l0aW9uR3JvdXApO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBfdXRpbEZvcm1hdERhdGEgPSByZXF1aXJlKCcuLi8uLi91dGlsL2Zvcm1hdERhdGEnKTtcblxudmFyIF91dGlsRm9ybWF0RGF0YTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsRm9ybWF0RGF0YSk7XG5cbnZhciBfaWNvbnNJY29uID0gcmVxdWlyZSgnLi4vaWNvbnMvSWNvbicpO1xuXG52YXIgX2ljb25zSWNvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pY29uc0ljb24pO1xuXG52YXIgX2FjdGlvbnNUb3JyZW50QWN0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL2FjdGlvbnMvVG9ycmVudEFjdGlvbnMnKTtcblxudmFyIF9hY3Rpb25zVG9ycmVudEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uc1RvcnJlbnRBY3Rpb25zKTtcblxudmFyIF9zdG9yZXNUb3JyZW50U3RvcmUgPSByZXF1aXJlKCcuLi8uLi9zdG9yZXMvVG9ycmVudFN0b3JlJyk7XG5cbnZhciBfc3RvcmVzVG9ycmVudFN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3Jlc1RvcnJlbnRTdG9yZSk7XG5cbnZhciBfc3RvcmVzVUlTdG9yZSA9IHJlcXVpcmUoJy4uLy4uL3N0b3Jlcy9VSVN0b3JlJyk7XG5cbnZhciBfc3RvcmVzVUlTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdG9yZXNVSVN0b3JlKTtcblxudmFyIG1ldGhvZHNUb0JpbmQgPSBbJ2dldEZpbGVEYXRhJywgJ2dldEZpbGVUcmVlRG9tTm9kZXMnLCAnb25Ub3JyZW50RGV0YWlsc0hhc2hDaGFuZ2UnLCAnb25PcGVuQ2hhbmdlJywgJ29uVG9ycmVudERldGFpbHNDaGFuZ2UnLCAnY3JlYXRlRmlsZVRyZWUnLCAnZ2V0SGVhZGluZycsICdnZXRTaWRlUGFuZWwnXTtcblxudmFyIFRvcnJlbnREZXRhaWxzID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUb3JyZW50RGV0YWlscywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVG9ycmVudERldGFpbHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb3JyZW50RGV0YWlscyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50RGV0YWlscy5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICB0b3JyZW50RGV0YWlsc1N1Y2Nlc3M6IGZhbHNlLFxuICAgICAgdG9ycmVudERldGFpbHNFcnJvcjogZmFsc2UsXG4gICAgICBzZWxlY3RlZFRvcnJlbnQ6IHt9LFxuICAgICAgc2VsZWN0ZWRUb3JyZW50SGFzaDogbnVsbCxcbiAgICAgIHRvcnJlbnREZXRhaWxzOiB7fVxuICAgIH07XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVG9ycmVudERldGFpbHMsIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UX0RFVEFJTFNfQ0hBTkdFLCB0aGlzLm9uVG9ycmVudERldGFpbHNDaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19PUEVOX0NIQU5HRSwgdGhpcy5vbk9wZW5DaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19IQVNIX0NIQU5HRSwgdGhpcy5vblRvcnJlbnREZXRhaWxzSGFzaENoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10uc3RvcFBvbGxpbmdUb3JyZW50RGV0YWlscygpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVE9SUkVOVF9ERVRBSUxTX0NIQU5HRSwgdGhpcy5vblRvcnJlbnREZXRhaWxzQ2hhbmdlKTtcbiAgICAgIF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLnVubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfREVUQUlMU19PUEVOX0NIQU5HRSwgdGhpcy5vbk9wZW5DaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10udW5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfVE9SUkVOVF9ERVRBSUxTX0hBU0hfQ0hBTkdFLCB0aGlzLm9uVG9ycmVudERldGFpbHNIYXNoQ2hhbmdlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblRvcnJlbnREZXRhaWxzSGFzaENoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVG9ycmVudERldGFpbHNIYXNoQ2hhbmdlKCkge1xuICAgICAgaWYgKF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmlzVG9ycmVudERldGFpbHNPcGVuKCkpIHtcbiAgICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5mZXRjaFRvcnJlbnREZXRhaWxzKF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnREZXRhaWxzSGFzaCgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbk9wZW5DaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk9wZW5DaGFuZ2UoKSB7XG4gICAgICBpZiAoIV9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmlzVG9ycmVudERldGFpbHNPcGVuKCkpIHtcbiAgICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5zdG9wUG9sbGluZ1RvcnJlbnREZXRhaWxzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmZldGNoVG9ycmVudERldGFpbHMoX3N0b3Jlc1VJU3RvcmUyWydkZWZhdWx0J10uZ2V0VG9ycmVudERldGFpbHNIYXNoKCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNPcGVuOiBfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5pc1RvcnJlbnREZXRhaWxzT3BlbigpXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblRvcnJlbnREZXRhaWxzQ2hhbmdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Ub3JyZW50RGV0YWlsc0NoYW5nZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0b3JyZW50RGV0YWlsczogX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5nZXRUb3JyZW50RGV0YWlscyhfc3RvcmVzVUlTdG9yZTJbJ2RlZmF1bHQnXS5nZXRUb3JyZW50RGV0YWlsc0hhc2goKSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NyZWF0ZUZpbGVUcmVlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlRmlsZVRyZWUodHJlZSwgZGlyZWN0b3J5LCBmaWxlKSB7XG4gICAgICBpZiAodHJlZSA9PT0gdW5kZWZpbmVkKSB0cmVlID0ge307XG4gICAgICB2YXIgZGVwdGggPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzNdO1xuXG4gICAgICBpZiAoZGVwdGggPCBmaWxlLnBhdGhDb21wb25lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgICAgdHJlZVtkaXJlY3RvcnldID0gdGhpcy5jcmVhdGVGaWxlVHJlZSh0cmVlW2RpcmVjdG9yeV0sIGZpbGUucGF0aENvbXBvbmVudHNbZGVwdGhdLCBmaWxlLCBkZXB0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRyZWUuZmlsZXMpIHtcbiAgICAgICAgICB0cmVlLmZpbGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0RmlsZVRyZWVEb21Ob2RlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVUcmVlRG9tTm9kZXModHJlZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBkZXB0aCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMV07XG5cbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBkZXB0aCsrO1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRyZWUpLm1hcChmdW5jdGlvbiAoYnJhbmNoTmFtZSkge1xuICAgICAgICB2YXIgYnJhbmNoID0gdHJlZVticmFuY2hOYW1lXTtcbiAgICAgICAgdmFyIGRvbU5vZGVzID0gbnVsbDtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBpZiAoYnJhbmNoTmFtZSA9PT0gJ2ZpbGVzJykge1xuICAgICAgICAgIGJyYW5jaC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5maWxlbmFtZS5sb2NhbGVDb21wYXJlKGIuZmlsZW5hbWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRvbU5vZGVzID0gYnJhbmNoLm1hcChmdW5jdGlvbiAoZmlsZSwgZmlsZUluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdF9fbm9kZSBmaWxlLWxpc3RfX25vZGUtLWZpbGUnLFxuICAgICAgICAgICAgICAgIGtleTogJycgKyBmaWxlSW5kZXggfSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zSWNvbjJbJ2RlZmF1bHQnXSwgeyBpY29uOiAnZmlsZScgfSksXG4gICAgICAgICAgICAgIGZpbGUuZmlsZW5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNsYXNzZXMgPSAnZmlsZS1saXN0X19icmFuY2ggZmlsZS1saXN0X19icmFuY2gtLWRlcHRoLScgKyBkZXB0aDtcbiAgICAgICAgICBkb21Ob2RlcyA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3Nlcywga2V5OiAnJyArIGluZGV4ICsgZGVwdGggfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdmaWxlLWxpc3RfX25vZGUgZmlsZS1saXN0X19ub2RlLS1kaXJlY3RvcnknIH0sXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ2RpcmVjdG9yeU91dGxpbmVkJyB9KSxcbiAgICAgICAgICAgICAgYnJhbmNoTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF90aGlzMi5nZXRGaWxlVHJlZURvbU5vZGVzKHRyZWVbYnJhbmNoTmFtZV0sIGRlcHRoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9tTm9kZXM7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRGaWxlTGlzdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVMaXN0KGZpbGVzKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHRyZWUgPSB7fTtcblxuICAgICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICB0cmVlID0gX3RoaXMzLmNyZWF0ZUZpbGVUcmVlKHRyZWUsIGZpbGUucGF0aENvbXBvbmVudHNbMF0sIGZpbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBkaXJlY3RvcnlUcmVlID0gdGhpcy5nZXRGaWxlVHJlZURvbU5vZGVzKHRyZWUpO1xuXG4gICAgICByZXR1cm4gZGlyZWN0b3J5VHJlZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRGaWxlRGF0YScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVEYXRhKHRvcnJlbnQsIGZpbGVzKSB7XG4gICAgICB2YXIgcGFyZW50RGlyZWN0b3J5ID0gdG9ycmVudC5kaXJlY3Rvcnk7XG4gICAgICB2YXIgZmlsZW5hbWUgPSB0b3JyZW50LmZpbGVuYW1lO1xuXG4gICAgICBpZiAoZmlsZXMpIHtcbiAgICAgICAgLy8gV2UndmUgcmVjZWl2ZWQgZnVsbCBmaWxlIGRldGFpbHMgZnJvbSB0aGUgY2xpZW50LlxuICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdmaWxlLWxpc3QgdG9ycmVudC1kZXRhaWxzX19zZWN0aW9uJyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdF9fbm9kZSBmaWxlLWxpc3RfX3BhcmVudC1kaXJlY3RvcnknIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdkaXJlY3RvcnlGaWxsZWQnIH0pLFxuICAgICAgICAgICAgcGFyZW50RGlyZWN0b3J5XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmdldEZpbGVMaXN0KGZpbGVzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UndmUgb25seSByZWNlaXZlZCB0aGUgdG9wLWxldmVsIGZpbGUgZGV0YWlscyBmcm9tIHRoZSB0b3JyZW50IGxpc3QuXG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdCB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnZmlsZS1saXN0X19ub2RlIGZpbGUtbGlzdF9fcGFyZW50LWRpcmVjdG9yeScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ2RpcmVjdG9yeUZpbGxlZCcgfSksXG4gICAgICAgICAgICBwYXJlbnREaXJlY3RvcnlcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2ZpbGUtbGlzdF9fbm9kZSBmaWxlLWxpc3RfX25vZGUtLWZpbGUnIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdmaWxlJyB9KSxcbiAgICAgICAgICAgIGZpbGVuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldEhlYWRpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRIZWFkaW5nKCkge1xuICAgICAgLy8gcmV0dXJuIChcbiAgICAgIC8vICAgPGRpdiBjbGFzc05hbWU9XCJ0b3JyZW50LWRldGFpbHNfX2FjdGlvbnMgdG9ycmVudC1kZXRhaWxzX19zZWN0aW9uXCI+XG4gICAgICAvLyAgICAgRHJvcGRvd25cbiAgICAgIC8vICAgPC9kaXY+XG4gICAgICAvLyApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFBlZXJMaXN0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGVlckxpc3QocGVlcnMpIHtcbiAgICAgIGlmIChwZWVycykge1xuICAgICAgICB2YXIgcGVlckxpc3QgPSBudWxsO1xuICAgICAgICB2YXIgcGVlckNvdW50ID0gMDtcblxuICAgICAgICBwZWVyTGlzdCA9IHBlZXJzLm1hcChmdW5jdGlvbiAocGVlciwgaW5kZXgpIHtcbiAgICAgICAgICB2YXIgZG93bmxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEocGVlci5kb3dubG9hZFJhdGUsICcvcycpO1xuICAgICAgICAgIHZhciB1cGxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEocGVlci51cGxvYWRSYXRlLCAnL3MnKTtcbiAgICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndHInLFxuICAgICAgICAgICAgeyBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ3RkJyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcGVlci5hZGRyZXNzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIGRvd25sb2FkUmF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgICAgZG93bmxvYWRSYXRlLnVuaXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICB1cGxvYWRSYXRlLnZhbHVlLFxuICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWRSYXRlLnVuaXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBwZWVyQ291bnQgPSBwZWVyTGlzdC5sZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX19wZWVycyB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndGFibGUnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHNfX3RhYmxlIHRhYmxlJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICd0aGVhZCcsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190YWJsZV9faGVhZGluZycgfSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ3RyJyxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgJ3RoJyxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAnUGVlcnMnLFxuICAgICAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHNfX3RhYmxlX19oZWFkaW5nX19jb3VudCcgfSxcbiAgICAgICAgICAgICAgICAgICAgcGVlckNvdW50XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICd0aCcsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgJ0RMJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICdVTCdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ3Rib2R5JyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcGVlckxpc3RcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0U2lkZVBhbmVsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2lkZVBhbmVsKCkge1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzT3Blbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGVjdGVkSGFzaCA9IF9zdG9yZXNVSVN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnREZXRhaWxzSGFzaCgpO1xuICAgICAgdmFyIHRvcnJlbnQgPSBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnQoc2VsZWN0ZWRIYXNoKTtcbiAgICAgIHZhciBhZGRlZCA9IG5ldyBEYXRlKHRvcnJlbnQuYWRkZWQgKiAxMDAwKTtcbiAgICAgIHZhciBhZGRlZFN0cmluZyA9IGFkZGVkLmdldE1vbnRoKCkgKyAxICsgJy8nICsgYWRkZWQuZ2V0RGF0ZSgpICsgJy8nICsgYWRkZWQuZ2V0RnVsbFllYXIoKTtcbiAgICAgIHZhciBjb21wbGV0ZWQgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmJ5dGVzRG9uZSk7XG4gICAgICB2YXIgZG93bmxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodG9ycmVudC5kb3dubG9hZFJhdGUsICcvcycpO1xuICAgICAgdmFyIGRvd25sb2FkVG90YWwgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmRvd25sb2FkVG90YWwpO1xuICAgICAgdmFyIGV0YSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5ldGEodG9ycmVudC5ldGEpO1xuICAgICAgdmFyIHJhdGlvID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLnJhdGlvKHRvcnJlbnQucmF0aW8pO1xuICAgICAgdmFyIHRvdGFsU2l6ZSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQuc2l6ZUJ5dGVzKTtcbiAgICAgIHZhciB0b3JyZW50RGV0YWlscyA9IHRoaXMuc3RhdGUudG9ycmVudERldGFpbHMgfHwge307XG4gICAgICB2YXIgdXBsb2FkUmF0ZSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQudXBsb2FkUmF0ZSwgJy9zJyk7XG4gICAgICB2YXIgdXBsb2FkVG90YWwgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LnVwbG9hZFRvdGFsKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHMnLCBrZXk6IHRoaXMuc3RhdGUuaXNPcGVuIH0sXG4gICAgICAgIHRoaXMuZ2V0SGVhZGluZygpLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAndWwnLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190cmFuc2Zlci1kYXRhIHRvcnJlbnQtZGV0YWlsc19fc2VjdGlvbicgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RyYW5zZmVyLWRhdGEgdHJhbnNmZXItZGF0YS0tZG93bmxvYWQnIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdkb3dubG9hZCcgfSksXG4gICAgICAgICAgICBkb3dubG9hZFJhdGUudmFsdWUsXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICBkb3dubG9hZFJhdGUudW5pdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnbGknLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0cmFuc2Zlci1kYXRhIHRyYW5zZmVyLWRhdGEtLXVwbG9hZCcgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ3VwbG9hZCcgfSksXG4gICAgICAgICAgICB1cGxvYWRSYXRlLnZhbHVlLFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgdXBsb2FkUmF0ZS51bml0XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RyYW5zZmVyLWRhdGEgdHJhbnNmZXItZGF0YS0tcmF0aW8nIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdyYXRpbycgfSksXG4gICAgICAgICAgICByYXRpb1xuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnbGknLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0cmFuc2Zlci1kYXRhIHRyYW5zZmVyLWRhdGEtLWV0YScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ljb24yWydkZWZhdWx0J10sIHsgaWNvbjogJ2V0YScgfSksXG4gICAgICAgICAgICBldGFcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuZ2V0VHJhY2tlckxpc3QodG9ycmVudERldGFpbHMudHJhY2tlcnMpLFxuICAgICAgICB0aGlzLmdldEZpbGVEYXRhKHRvcnJlbnQsIHRvcnJlbnREZXRhaWxzLmZpbGVzKSxcbiAgICAgICAgdGhpcy5nZXRQZWVyTGlzdCh0b3JyZW50RGV0YWlscy5wZWVycylcbiAgICAgICk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0VHJhY2tlckxpc3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUcmFja2VyTGlzdCgpIHtcbiAgICAgIHZhciB0cmFja2VycyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IFtdIDogYXJndW1lbnRzWzBdO1xuXG4gICAgICB2YXIgdHJhY2tlckNvdW50ID0gdHJhY2tlcnMubGVuZ3RoO1xuICAgICAgdmFyIHRyYWNrZXJUeXBlcyA9IFsnaHR0cCcsICd1ZHAnLCAnZGh0J107XG5cbiAgICAgIHZhciB0cmFja2VyRGV0YWlscyA9IHRyYWNrZXJzLm1hcChmdW5jdGlvbiAodHJhY2tlciwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd0cicsXG4gICAgICAgICAgeyBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRyYWNrZXIudXJsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdHJhY2tlclR5cGVzW3RyYWNrZXIudHlwZSAtIDFdXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX19wZWVycyB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd0YWJsZScsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50LWRldGFpbHNfX3RhYmxlIHRhYmxlJyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ3RoZWFkJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190YWJsZV9faGVhZGluZycgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAndHInLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgJ1RyYWNrZXJzJyxcbiAgICAgICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudC1kZXRhaWxzX190YWJsZV9faGVhZGluZ19fY291bnQnIH0sXG4gICAgICAgICAgICAgICAgICB0cmFja2VyQ291bnRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICd0aCcsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAnVHlwZSdcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAndGJvZHknLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRyYWNrZXJEZXRhaWxzXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgX3JlYWN0QWRkb25zQ3NzVHJhbnNpdGlvbkdyb3VwMlsnZGVmYXVsdCddLFxuICAgICAgICB7XG4gICAgICAgICAgdHJhbnNpdGlvbkVudGVyVGltZW91dDogNTAwLFxuICAgICAgICAgIHRyYW5zaXRpb25MZWF2ZVRpbWVvdXQ6IDUwMCxcbiAgICAgICAgICB0cmFuc2l0aW9uTmFtZTogJ3RvcnJlbnQtZGV0YWlscycgfSxcbiAgICAgICAgdGhpcy5nZXRTaWRlUGFuZWwoKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudERldGFpbHM7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudERldGFpbHM7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnREZXRhaWxzLmpzXG4gKiogbW9kdWxlIGlkID0gMjIxXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 222 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utilFormatData = __webpack_require__(212);\n\nvar _utilFormatData2 = _interopRequireDefault(_utilFormatData);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _ProgressBar = __webpack_require__(223);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar methodsToBind = ['handleClick', 'handleRightClick'];\n\nvar Torrent = (function (_React$Component) {\n _inherits(Torrent, _React$Component);\n\n function Torrent() {\n var _this = this;\n\n _classCallCheck(this, Torrent);\n\n _get(Object.getPrototypeOf(Torrent.prototype), 'constructor', this).call(this);\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(Torrent, [{\n key: 'handleClick',\n value: function handleClick(event) {\n this.props.handleClick(this.props.data.hash, event);\n }\n }, {\n key: 'handleRightClick',\n value: function handleRightClick(event) {\n console.log(event);\n }\n }, {\n key: 'render',\n value: function render() {\n var torrent = this.props.data;\n var added = new Date(torrent.added * 1000);\n var addedString = added.getMonth() + 1 + '/' + added.getDate() + '/' + added.getFullYear();\n var completed = _utilFormatData2['default'].data(torrent.bytesDone);\n var downloadRate = _utilFormatData2['default'].data(torrent.downloadRate, '/s');\n var downloadTotal = _utilFormatData2['default'].data(torrent.downloadTotal);\n var eta = _utilFormatData2['default'].eta(torrent.eta);\n var ratio = _utilFormatData2['default'].ratio(torrent.ratio);\n var totalSize = _utilFormatData2['default'].data(torrent.sizeBytes);\n var uploadRate = _utilFormatData2['default'].data(torrent.uploadRate, '/s');\n var uploadTotal = _utilFormatData2['default'].data(torrent.uploadTotal);\n\n var classes = (0, _classnames2['default'])({\n 'torrent': true,\n 'is-selected': this.props.selected,\n 'is-stopped': torrent.status.indexOf('is-stopped') > -1,\n 'is-paused': torrent.status.indexOf('is-paused') > -1,\n 'is-actively-downloading': downloadRate.value > 0,\n 'is-downloading': torrent.status.indexOf('is-downloading') > -1,\n 'is-seeding': torrent.status.indexOf('is-seeding') > -1,\n 'is-completed': torrent.status.indexOf('is-completed') > -1,\n 'is-checking': torrent.status.indexOf('is-checking') > -1,\n 'is-active': torrent.status.indexOf('is-active') > -1,\n 'is-inactive': torrent.status.indexOf('is-inactive') > -1\n });\n\n return _react2['default'].createElement(\n 'li',\n {\n className: classes,\n onMouseDown: this.handleClick,\n onContextMenu: this.handleRightClick },\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent__details' },\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--primary text-overflow' },\n torrent.name\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--secondary' },\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent__details' },\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--eta' },\n eta\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--speed' },\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--speed' },\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--ratio' },\n ratio\n )\n )\n )\n ),\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent__details torrent__details--tertiary' },\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--completed' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Downloaded'\n ),\n torrent.percentComplete,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n '%'\n ),\n ' — ',\n completed.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n completed.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--uploaded' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Uploaded'\n ),\n uploadTotal.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadTotal.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--size' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Size'\n ),\n totalSize.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n totalSize.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--added' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Added'\n ),\n addedString\n )\n ),\n _react2['default'].createElement(_ProgressBar2['default'], { percent: torrent.percentComplete }),\n _react2['default'].createElement(\n 'button',\n { className: 'torrent__more-info floating-action__button',\n onClick: this.props.handleDetailsClick.bind(this, torrent) },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'dotsMini', size: 'mini' })\n )\n );\n }\n }]);\n\n return Torrent;\n})(_react2['default'].Component);\n\nexports['default'] = Torrent;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudC5qcz9jNjYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLFdBQVcsZ0NBQWdDO0FBQzNDO0FBQ0E7QUFDQSxhQUFhLHVEQUF1RDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQSxlQUFlLGdDQUFnQztBQUMvQztBQUNBO0FBQ0EsaUJBQWlCLHFDQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1Q0FBdUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVDQUF1QztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdUNBQXVDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyREFBMkQ7QUFDdEU7QUFDQTtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZEO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0NBQXNDO0FBQ25EO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLG1DQUFtQztBQUN2RztBQUNBO0FBQ0EsV0FBVztBQUNYLHdFQUF3RTtBQUN4RSxvRUFBb0UsaUNBQWlDO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3V0aWxGb3JtYXREYXRhID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9mb3JtYXREYXRhJyk7XG5cbnZhciBfdXRpbEZvcm1hdERhdGEyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbEZvcm1hdERhdGEpO1xuXG52YXIgX2ljb25zSWNvbiA9IHJlcXVpcmUoJy4uL2ljb25zL0ljb24nKTtcblxudmFyIF9pY29uc0ljb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uKTtcblxudmFyIF9Qcm9ncmVzc0JhciA9IHJlcXVpcmUoJy4vUHJvZ3Jlc3NCYXInKTtcblxudmFyIF9Qcm9ncmVzc0JhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Qcm9ncmVzc0Jhcik7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydoYW5kbGVDbGljaycsICdoYW5kbGVSaWdodENsaWNrJ107XG5cbnZhciBUb3JyZW50ID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUb3JyZW50LCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUb3JyZW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9ycmVudCk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVG9ycmVudCwgW3tcbiAgICBrZXk6ICdoYW5kbGVDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmhhbmRsZUNsaWNrKHRoaXMucHJvcHMuZGF0YS5oYXNoLCBldmVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlUmlnaHRDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVJpZ2h0Q2xpY2soZXZlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgdG9ycmVudCA9IHRoaXMucHJvcHMuZGF0YTtcbiAgICAgIHZhciBhZGRlZCA9IG5ldyBEYXRlKHRvcnJlbnQuYWRkZWQgKiAxMDAwKTtcbiAgICAgIHZhciBhZGRlZFN0cmluZyA9IGFkZGVkLmdldE1vbnRoKCkgKyAxICsgJy8nICsgYWRkZWQuZ2V0RGF0ZSgpICsgJy8nICsgYWRkZWQuZ2V0RnVsbFllYXIoKTtcbiAgICAgIHZhciBjb21wbGV0ZWQgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmJ5dGVzRG9uZSk7XG4gICAgICB2YXIgZG93bmxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodG9ycmVudC5kb3dubG9hZFJhdGUsICcvcycpO1xuICAgICAgdmFyIGRvd25sb2FkVG90YWwgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmRvd25sb2FkVG90YWwpO1xuICAgICAgdmFyIGV0YSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5ldGEodG9ycmVudC5ldGEpO1xuICAgICAgdmFyIHJhdGlvID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLnJhdGlvKHRvcnJlbnQucmF0aW8pO1xuICAgICAgdmFyIHRvdGFsU2l6ZSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQuc2l6ZUJ5dGVzKTtcbiAgICAgIHZhciB1cGxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodG9ycmVudC51cGxvYWRSYXRlLCAnL3MnKTtcbiAgICAgIHZhciB1cGxvYWRUb3RhbCA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQudXBsb2FkVG90YWwpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9ICgwLCBfY2xhc3NuYW1lczJbJ2RlZmF1bHQnXSkoe1xuICAgICAgICAndG9ycmVudCc6IHRydWUsXG4gICAgICAgICdpcy1zZWxlY3RlZCc6IHRoaXMucHJvcHMuc2VsZWN0ZWQsXG4gICAgICAgICdpcy1zdG9wcGVkJzogdG9ycmVudC5zdGF0dXMuaW5kZXhPZignaXMtc3RvcHBlZCcpID4gLTEsXG4gICAgICAgICdpcy1wYXVzZWQnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1wYXVzZWQnKSA+IC0xLFxuICAgICAgICAnaXMtYWN0aXZlbHktZG93bmxvYWRpbmcnOiBkb3dubG9hZFJhdGUudmFsdWUgPiAwLFxuICAgICAgICAnaXMtZG93bmxvYWRpbmcnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1kb3dubG9hZGluZycpID4gLTEsXG4gICAgICAgICdpcy1zZWVkaW5nJzogdG9ycmVudC5zdGF0dXMuaW5kZXhPZignaXMtc2VlZGluZycpID4gLTEsXG4gICAgICAgICdpcy1jb21wbGV0ZWQnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1jb21wbGV0ZWQnKSA+IC0xLFxuICAgICAgICAnaXMtY2hlY2tpbmcnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1jaGVja2luZycpID4gLTEsXG4gICAgICAgICdpcy1hY3RpdmUnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1hY3RpdmUnKSA+IC0xLFxuICAgICAgICAnaXMtaW5hY3RpdmUnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1pbmFjdGl2ZScpID4gLTFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdsaScsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgb25Nb3VzZURvd246IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgICAgb25Db250ZXh0TWVudTogdGhpcy5oYW5kbGVSaWdodENsaWNrIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd1bCcsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzJyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tcHJpbWFyeSB0ZXh0LW92ZXJmbG93JyB9LFxuICAgICAgICAgICAgdG9ycmVudC5uYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlY29uZGFyeScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAndWwnLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMnIH0sXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1ldGEnIH0sXG4gICAgICAgICAgICAgICAgZXRhXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zcGVlZCcgfSxcbiAgICAgICAgICAgICAgICBkb3dubG9hZFJhdGUudmFsdWUsXG4gICAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgICAgZG93bmxvYWRSYXRlLnVuaXRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zcGVlZCcgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWRSYXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgICAgIHVwbG9hZFJhdGUudW5pdFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXJhdGlvJyB9LFxuICAgICAgICAgICAgICAgIHJhdGlvXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd1bCcsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzIHRvcnJlbnRfX2RldGFpbHMtLXRlcnRpYXJ5JyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tY29tcGxldGVkJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzX19sYWJlbCcgfSxcbiAgICAgICAgICAgICAgJ0Rvd25sb2FkZWQnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdG9ycmVudC5wZXJjZW50Q29tcGxldGUsXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAnwqDigJTCoCcsXG4gICAgICAgICAgICBjb21wbGV0ZWQudmFsdWUsXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZWQudW5pdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnbGknLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS11cGxvYWRlZCcgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlsc19fbGFiZWwnIH0sXG4gICAgICAgICAgICAgICdVcGxvYWRlZCdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB1cGxvYWRUb3RhbC52YWx1ZSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgIHVwbG9hZFRvdGFsLnVuaXRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2l6ZScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlsc19fbGFiZWwnIH0sXG4gICAgICAgICAgICAgICdTaXplJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZS52YWx1ZSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgIHRvdGFsU2l6ZS51bml0XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLWFkZGVkJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzX19sYWJlbCcgfSxcbiAgICAgICAgICAgICAgJ0FkZGVkJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGFkZGVkU3RyaW5nXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfUHJvZ3Jlc3NCYXIyWydkZWZhdWx0J10sIHsgcGVyY2VudDogdG9ycmVudC5wZXJjZW50Q29tcGxldGUgfSksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdidXR0b24nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fbW9yZS1pbmZvIGZsb2F0aW5nLWFjdGlvbl9fYnV0dG9uJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMuaGFuZGxlRGV0YWlsc0NsaWNrLmJpbmQodGhpcywgdG9ycmVudCkgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdkb3RzTWluaScsIHNpemU6ICdtaW5pJyB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb3JyZW50O1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFRvcnJlbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnQuanNcbiAqKiBtb2R1bGUgaWQgPSAyMjJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _lodash = __webpack_require__(198);\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(157);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _constantsEventTypes = __webpack_require__(162);\n\nvar _constantsEventTypes2 = _interopRequireDefault(_constantsEventTypes);\n\nvar _genericLoadingIndicator = __webpack_require__(223);\n\nvar _genericLoadingIndicator2 = _interopRequireDefault(_genericLoadingIndicator);\n\nvar _Torrent = __webpack_require__(224);\n\nvar _Torrent2 = _interopRequireDefault(_Torrent);\n\nvar _TorrentDetails = __webpack_require__(221);\n\nvar _TorrentDetails2 = _interopRequireDefault(_TorrentDetails);\n\nvar _storesTorrentFilterStore = __webpack_require__(194);\n\nvar _storesTorrentFilterStore2 = _interopRequireDefault(_storesTorrentFilterStore);\n\nvar _storesTorrentStore = __webpack_require__(197);\n\nvar _storesTorrentStore2 = _interopRequireDefault(_storesTorrentStore);\n\nvar _actionsUIActions = __webpack_require__(173);\n\nvar _actionsUIActions2 = _interopRequireDefault(_actionsUIActions);\n\nvar methodsToBind = ['onReceiveTorrentsError', 'onReceiveTorrentsSuccess', 'handleDetailsClick', 'handleTorrentClick', 'onStatusFilterChange', 'onTorrentSelectionChange', 'getListPadding', 'getViewportLimits', 'setScrollPosition', 'setViewportHeight'];\n\nvar TorrentListContainer = (function (_React$Component) {\n _inherits(TorrentListContainer, _React$Component);\n\n function TorrentListContainer() {\n var _this = this;\n\n _classCallCheck(this, TorrentListContainer);\n\n _get(Object.getPrototypeOf(TorrentListContainer.prototype), 'constructor', this).call(this);\n\n this.state = {\n detailsPanelOpen: false,\n maxTorrentIndex: 10,\n minTorrentIndex: 0,\n scrollPosition: 0,\n torrentCount: 0,\n torrentHeight: 64,\n torrents: null,\n torrentRequestError: false,\n torrentRequestSuccess: false,\n viewportHeight: 0\n };\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n\n this.handleScroll = _lodash2['default'].throttle(this.setScrollPosition, 100, {\n leading: true,\n trailing: true\n });\n\n this.handleWindowResize = _lodash2['default'].throttle(this.setViewportHeight, 350, {\n leading: true,\n trailing: true\n });\n }\n\n _createClass(TorrentListContainer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENT_SELECTION_CHANGE, this.onTorrentSelectionChange);\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_SUCCESS, this.onReceiveTorrentsSuccess);\n _storesTorrentStore2['default'].listen(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_ERROR, this.onReceiveTorrentsError);\n _storesTorrentFilterStore2['default'].listen(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n _storesTorrentStore2['default'].fetchTorrents();\n window.addEventListener('resize', this.handleWindowResize);\n this.setViewportHeight();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize);\n\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENT_SELECTION_CHANGE, this.onTorrentSelectionChange);\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_SUCCESS, this.onReceiveTorrentsSuccess);\n _storesTorrentStore2['default'].unlisten(_constantsEventTypes2['default'].CLIENT_TORRENTS_REQUEST_ERROR, this.onReceiveTorrentsError);\n _storesTorrentFilterStore2['default'].unlisten(_constantsEventTypes2['default'].UI_TORRENTS_FILTER_STATUS_CHANGE, this.onStatusFilterChange);\n }\n }, {\n key: 'handleDetailsClick',\n value: function handleDetailsClick(torrent, event) {\n _actionsUIActions2['default'].handleDetailsClick({\n hash: torrent.hash,\n event: event\n });\n }\n }, {\n key: 'handleTorrentClick',\n value: function handleTorrentClick(hash, event) {\n _actionsUIActions2['default'].handleTorrentClick({ hash: hash, event: event });\n }\n }, {\n key: 'onReceiveTorrentsError',\n value: function onReceiveTorrentsError() {\n this.setState({ torrentRequestError: true, torrentRequestSuccess: false });\n }\n }, {\n key: 'onReceiveTorrentsSuccess',\n value: function onReceiveTorrentsSuccess() {\n var torrents = _storesTorrentStore2['default'].getTorrents();\n\n this.setState({\n torrents: torrents,\n torrentCount: torrents.length,\n torrentRequestError: false,\n torrentRequestSuccess: true\n });\n }\n }, {\n key: 'onStatusFilterChange',\n value: function onStatusFilterChange() {\n this.forceUpdate();\n }\n }, {\n key: 'onTorrentSelectionChange',\n value: function onTorrentSelectionChange() {\n if (_storesTorrentStore2['default'].getSelectedTorrents().length !== 1 && this.state.detailsPanelOpen || _storesTorrentStore2['default'].getTorrents().length === 0) {\n // Close the detail side panel if more than one torrent is selected or if\n // none are selected.\n this.setState({\n detailsPanelOpen: false\n });\n } else {\n this.forceUpdate();\n }\n }\n }, {\n key: 'getListPadding',\n value: function getListPadding(minTorrentIndex, maxTorrentIndex, torrentCount) {\n if (maxTorrentIndex > torrentCount - 1) {\n maxTorrentIndex = torrentCount - 1;\n }\n\n var hiddenBottom = torrentCount - 1 - maxTorrentIndex;\n var hiddenTop = minTorrentIndex;\n\n var bottom = maxTorrentIndex <= torrentCount ? hiddenBottom * this.state.torrentHeight : 0;\n var top = minTorrentIndex > 0 ? hiddenTop * this.state.torrentHeight : 0;\n\n return {\n bottom: bottom,\n top: top\n };\n }\n }, {\n key: 'getViewportLimits',\n value: function getViewportLimits() {\n var buffer = 10;\n\n var elementsInView = Math.floor(this.state.viewportHeight / this.state.torrentHeight);\n\n var minTorrentIndex = Math.floor(this.state.scrollPosition / this.state.torrentHeight) - buffer;\n\n var maxTorrentIndex = minTorrentIndex + elementsInView + buffer * 2 + 1;\n\n if (this.state.torrentCount < maxTorrentIndex) {\n maxTorrentIndex = this.state.torrentCount - 1;\n }\n\n if (minTorrentIndex < 0) {\n minTorrentIndex = 0;\n }\n\n return { minTorrentIndex: minTorrentIndex, maxTorrentIndex: maxTorrentIndex };\n }\n }, {\n key: 'setScrollPosition',\n value: function setScrollPosition() {\n if (this.refs.torrentList) {\n this.setState({\n scrollPosition: _reactDom2['default'].findDOMNode(this.refs.torrentList).scrollTop\n });\n }\n }\n }, {\n key: 'setViewportHeight',\n value: function setViewportHeight() {\n if (this.refs.torrentList) {\n this.setState({\n viewportHeight: _reactDom2['default'].findDOMNode(this.refs.torrentList).offsetHeight\n });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var torrentListContent = null;\n\n if (!this.state.torrentRequestSuccess) {\n torrentListContent = _react2['default'].createElement(_genericLoadingIndicator2['default'], null);\n } else {\n (function () {\n var selectedTorrents = _storesTorrentStore2['default'].getSelectedTorrents();\n var torrents = _this2.state.torrents;\n var viewportLimits = _this2.getViewportLimits();\n var listPadding = _this2.getListPadding(viewportLimits.minTorrentIndex, viewportLimits.maxTorrentIndex, torrents.length);\n\n var visibleTorrents = torrents.slice(viewportLimits.minTorrentIndex, viewportLimits.maxTorrentIndex);\n\n var torrentList = visibleTorrents.map(function (torrent, index) {\n var isSelected = false;\n var hash = torrent.hash;\n\n if (selectedTorrents.indexOf(hash) > -1) {\n isSelected = true;\n }\n\n return _react2['default'].createElement(_Torrent2['default'], { key: hash, data: torrent, selected: isSelected,\n handleClick: _this2.handleTorrentClick,\n handleDetailsClick: _this2.handleDetailsClick });\n });\n\n torrentListContent = _react2['default'].createElement(\n 'ul',\n { className: 'torrent__list' },\n _react2['default'].createElement('li', { className: 'torrent__spacer torrent__spacer--top',\n style: { height: listPadding.top + 'px' } }),\n torrentList,\n _react2['default'].createElement('li', { className: 'torrent__spacer torrent__spacer--bottom',\n style: { height: listPadding.bottom + 'px' } })\n );\n })();\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: 'torrent__list__wrapper', onScroll: this.handleScroll,\n ref: 'torrentList' },\n torrentListContent\n );\n }\n }]);\n\n return TorrentListContainer;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentListContainer;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudExpc3QuanM/ZDcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx3REFBd0QsMkJBQTJCO0FBQ25GO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxxQkFBcUIsMERBQTBEO0FBQy9FO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkVBQTJFO0FBQzNFO0FBQ0EsNkRBQTZEO0FBQzdELFdBQVc7O0FBRVg7QUFDQTtBQUNBLGFBQWEsNkJBQTZCO0FBQzFDLG9EQUFvRDtBQUNwRCxzQkFBc0IsaUNBQWlDLEVBQUU7QUFDekQ7QUFDQSxvREFBb0Q7QUFDcEQsc0JBQXNCLG9DQUFvQyxFQUFFO0FBQzVEO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2xvZGFzaCA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG52YXIgX2xvZGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2Rhc2gpO1xuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9jb25zdGFudHMvRXZlbnRUeXBlcycpO1xuXG52YXIgX2NvbnN0YW50c0V2ZW50VHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uc3RhbnRzRXZlbnRUeXBlcyk7XG5cbnZhciBfZ2VuZXJpY0xvYWRpbmdJbmRpY2F0b3IgPSByZXF1aXJlKCcuLi9nZW5lcmljL0xvYWRpbmdJbmRpY2F0b3InKTtcblxudmFyIF9nZW5lcmljTG9hZGluZ0luZGljYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZW5lcmljTG9hZGluZ0luZGljYXRvcik7XG5cbnZhciBfVG9ycmVudCA9IHJlcXVpcmUoJy4vVG9ycmVudCcpO1xuXG52YXIgX1RvcnJlbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9ycmVudCk7XG5cbnZhciBfVG9ycmVudERldGFpbHMgPSByZXF1aXJlKCcuL1RvcnJlbnREZXRhaWxzJyk7XG5cbnZhciBfVG9ycmVudERldGFpbHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9ycmVudERldGFpbHMpO1xuXG52YXIgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZSA9IHJlcXVpcmUoJy4uLy4uL3N0b3Jlcy9Ub3JyZW50RmlsdGVyU3RvcmUnKTtcblxudmFyIF9zdG9yZXNUb3JyZW50RmlsdGVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RvcmVzVG9ycmVudEZpbHRlclN0b3JlKTtcblxudmFyIF9zdG9yZXNUb3JyZW50U3RvcmUgPSByZXF1aXJlKCcuLi8uLi9zdG9yZXMvVG9ycmVudFN0b3JlJyk7XG5cbnZhciBfc3RvcmVzVG9ycmVudFN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0b3Jlc1RvcnJlbnRTdG9yZSk7XG5cbnZhciBfYWN0aW9uc1VJQWN0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL2FjdGlvbnMvVUlBY3Rpb25zJyk7XG5cbnZhciBfYWN0aW9uc1VJQWN0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hY3Rpb25zVUlBY3Rpb25zKTtcblxudmFyIG1ldGhvZHNUb0JpbmQgPSBbJ29uUmVjZWl2ZVRvcnJlbnRzRXJyb3InLCAnb25SZWNlaXZlVG9ycmVudHNTdWNjZXNzJywgJ2hhbmRsZURldGFpbHNDbGljaycsICdoYW5kbGVUb3JyZW50Q2xpY2snLCAnb25TdGF0dXNGaWx0ZXJDaGFuZ2UnLCAnb25Ub3JyZW50U2VsZWN0aW9uQ2hhbmdlJywgJ2dldExpc3RQYWRkaW5nJywgJ2dldFZpZXdwb3J0TGltaXRzJywgJ3NldFNjcm9sbFBvc2l0aW9uJywgJ3NldFZpZXdwb3J0SGVpZ2h0J107XG5cbnZhciBUb3JyZW50TGlzdENvbnRhaW5lciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9ycmVudExpc3RDb250YWluZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvcnJlbnRMaXN0Q29udGFpbmVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9ycmVudExpc3RDb250YWluZXIpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVG9ycmVudExpc3RDb250YWluZXIucHJvdG90eXBlKSwgJ2NvbnN0cnVjdG9yJywgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkZXRhaWxzUGFuZWxPcGVuOiBmYWxzZSxcbiAgICAgIG1heFRvcnJlbnRJbmRleDogMTAsXG4gICAgICBtaW5Ub3JyZW50SW5kZXg6IDAsXG4gICAgICBzY3JvbGxQb3NpdGlvbjogMCxcbiAgICAgIHRvcnJlbnRDb3VudDogMCxcbiAgICAgIHRvcnJlbnRIZWlnaHQ6IDY0LFxuICAgICAgdG9ycmVudHM6IG51bGwsXG4gICAgICB0b3JyZW50UmVxdWVzdEVycm9yOiBmYWxzZSxcbiAgICAgIHRvcnJlbnRSZXF1ZXN0U3VjY2VzczogZmFsc2UsXG4gICAgICB2aWV3cG9ydEhlaWdodDogMFxuICAgIH07XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbmRsZVNjcm9sbCA9IF9sb2Rhc2gyWydkZWZhdWx0J10udGhyb3R0bGUodGhpcy5zZXRTY3JvbGxQb3NpdGlvbiwgMTAwLCB7XG4gICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgdHJhaWxpbmc6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuaGFuZGxlV2luZG93UmVzaXplID0gX2xvZGFzaDJbJ2RlZmF1bHQnXS50aHJvdHRsZSh0aGlzLnNldFZpZXdwb3J0SGVpZ2h0LCAzNTAsIHtcbiAgICAgIGxlYWRpbmc6IHRydWUsXG4gICAgICB0cmFpbGluZzogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvcnJlbnRMaXN0Q29udGFpbmVyLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UX1NFTEVDVElPTl9DSEFOR0UsIHRoaXMub25Ub3JyZW50U2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UU19SRVFVRVNUX1NVQ0NFU1MsIHRoaXMub25SZWNlaXZlVG9ycmVudHNTdWNjZXNzKTtcbiAgICAgIF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UU19SRVFVRVNUX0VSUk9SLCB0aGlzLm9uUmVjZWl2ZVRvcnJlbnRzRXJyb3IpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS5saXN0ZW4oX2NvbnN0YW50c0V2ZW50VHlwZXMyWydkZWZhdWx0J10uVUlfVE9SUkVOVFNfRklMVEVSX1NUQVRVU19DSEFOR0UsIHRoaXMub25TdGF0dXNGaWx0ZXJDaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS5mZXRjaFRvcnJlbnRzKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpO1xuICAgICAgdGhpcy5zZXRWaWV3cG9ydEhlaWdodCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpO1xuXG4gICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLnVubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLlVJX1RPUlJFTlRfU0VMRUNUSU9OX0NIQU5HRSwgdGhpcy5vblRvcnJlbnRTZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5DTElFTlRfVE9SUkVOVFNfUkVRVUVTVF9TVUNDRVNTLCB0aGlzLm9uUmVjZWl2ZVRvcnJlbnRzU3VjY2Vzcyk7XG4gICAgICBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLnVubGlzdGVuKF9jb25zdGFudHNFdmVudFR5cGVzMlsnZGVmYXVsdCddLkNMSUVOVF9UT1JSRU5UU19SRVFVRVNUX0VSUk9SLCB0aGlzLm9uUmVjZWl2ZVRvcnJlbnRzRXJyb3IpO1xuICAgICAgX3N0b3Jlc1RvcnJlbnRGaWx0ZXJTdG9yZTJbJ2RlZmF1bHQnXS51bmxpc3RlbihfY29uc3RhbnRzRXZlbnRUeXBlczJbJ2RlZmF1bHQnXS5VSV9UT1JSRU5UU19GSUxURVJfU1RBVFVTX0NIQU5HRSwgdGhpcy5vblN0YXR1c0ZpbHRlckNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlRGV0YWlsc0NsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRGV0YWlsc0NsaWNrKHRvcnJlbnQsIGV2ZW50KSB7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5oYW5kbGVEZXRhaWxzQ2xpY2soe1xuICAgICAgICBoYXNoOiB0b3JyZW50Lmhhc2gsXG4gICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVG9ycmVudENsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVG9ycmVudENsaWNrKGhhc2gsIGV2ZW50KSB7XG4gICAgICBfYWN0aW9uc1VJQWN0aW9uczJbJ2RlZmF1bHQnXS5oYW5kbGVUb3JyZW50Q2xpY2soeyBoYXNoOiBoYXNoLCBldmVudDogZXZlbnQgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25SZWNlaXZlVG9ycmVudHNFcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUmVjZWl2ZVRvcnJlbnRzRXJyb3IoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdG9ycmVudFJlcXVlc3RFcnJvcjogdHJ1ZSwgdG9ycmVudFJlcXVlc3RTdWNjZXNzOiBmYWxzZSB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblJlY2VpdmVUb3JyZW50c1N1Y2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblJlY2VpdmVUb3JyZW50c1N1Y2Nlc3MoKSB7XG4gICAgICB2YXIgdG9ycmVudHMgPSBfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmdldFRvcnJlbnRzKCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0b3JyZW50czogdG9ycmVudHMsXG4gICAgICAgIHRvcnJlbnRDb3VudDogdG9ycmVudHMubGVuZ3RoLFxuICAgICAgICB0b3JyZW50UmVxdWVzdEVycm9yOiBmYWxzZSxcbiAgICAgICAgdG9ycmVudFJlcXVlc3RTdWNjZXNzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvblN0YXR1c0ZpbHRlckNoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uU3RhdHVzRmlsdGVyQ2hhbmdlKCkge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uVG9ycmVudFNlbGVjdGlvbkNoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVG9ycmVudFNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICAgIGlmIChfc3RvcmVzVG9ycmVudFN0b3JlMlsnZGVmYXVsdCddLmdldFNlbGVjdGVkVG9ycmVudHMoKS5sZW5ndGggIT09IDEgJiYgdGhpcy5zdGF0ZS5kZXRhaWxzUGFuZWxPcGVuIHx8IF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10uZ2V0VG9ycmVudHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gQ2xvc2UgdGhlIGRldGFpbCBzaWRlIHBhbmVsIGlmIG1vcmUgdGhhbiBvbmUgdG9ycmVudCBpcyBzZWxlY3RlZCBvciBpZlxuICAgICAgICAvLyBub25lIGFyZSBzZWxlY3RlZC5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGV0YWlsc1BhbmVsT3BlbjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0TGlzdFBhZGRpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMaXN0UGFkZGluZyhtaW5Ub3JyZW50SW5kZXgsIG1heFRvcnJlbnRJbmRleCwgdG9ycmVudENvdW50KSB7XG4gICAgICBpZiAobWF4VG9ycmVudEluZGV4ID4gdG9ycmVudENvdW50IC0gMSkge1xuICAgICAgICBtYXhUb3JyZW50SW5kZXggPSB0b3JyZW50Q291bnQgLSAxO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlkZGVuQm90dG9tID0gdG9ycmVudENvdW50IC0gMSAtIG1heFRvcnJlbnRJbmRleDtcbiAgICAgIHZhciBoaWRkZW5Ub3AgPSBtaW5Ub3JyZW50SW5kZXg7XG5cbiAgICAgIHZhciBib3R0b20gPSBtYXhUb3JyZW50SW5kZXggPD0gdG9ycmVudENvdW50ID8gaGlkZGVuQm90dG9tICogdGhpcy5zdGF0ZS50b3JyZW50SGVpZ2h0IDogMDtcbiAgICAgIHZhciB0b3AgPSBtaW5Ub3JyZW50SW5kZXggPiAwID8gaGlkZGVuVG9wICogdGhpcy5zdGF0ZS50b3JyZW50SGVpZ2h0IDogMDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm90dG9tOiBib3R0b20sXG4gICAgICAgIHRvcDogdG9wXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFZpZXdwb3J0TGltaXRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Vmlld3BvcnRMaW1pdHMoKSB7XG4gICAgICB2YXIgYnVmZmVyID0gMTA7XG5cbiAgICAgIHZhciBlbGVtZW50c0luVmlldyA9IE1hdGguZmxvb3IodGhpcy5zdGF0ZS52aWV3cG9ydEhlaWdodCAvIHRoaXMuc3RhdGUudG9ycmVudEhlaWdodCk7XG5cbiAgICAgIHZhciBtaW5Ub3JyZW50SW5kZXggPSBNYXRoLmZsb29yKHRoaXMuc3RhdGUuc2Nyb2xsUG9zaXRpb24gLyB0aGlzLnN0YXRlLnRvcnJlbnRIZWlnaHQpIC0gYnVmZmVyO1xuXG4gICAgICB2YXIgbWF4VG9ycmVudEluZGV4ID0gbWluVG9ycmVudEluZGV4ICsgZWxlbWVudHNJblZpZXcgKyBidWZmZXIgKiAyICsgMTtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUudG9ycmVudENvdW50IDwgbWF4VG9ycmVudEluZGV4KSB7XG4gICAgICAgIG1heFRvcnJlbnRJbmRleCA9IHRoaXMuc3RhdGUudG9ycmVudENvdW50IC0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1pblRvcnJlbnRJbmRleCA8IDApIHtcbiAgICAgICAgbWluVG9ycmVudEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgbWluVG9ycmVudEluZGV4OiBtaW5Ub3JyZW50SW5kZXgsIG1heFRvcnJlbnRJbmRleDogbWF4VG9ycmVudEluZGV4IH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2V0U2Nyb2xsUG9zaXRpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLnJlZnMudG9ycmVudExpc3QpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2Nyb2xsUG9zaXRpb246IF9yZWFjdERvbTJbJ2RlZmF1bHQnXS5maW5kRE9NTm9kZSh0aGlzLnJlZnMudG9ycmVudExpc3QpLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRWaWV3cG9ydEhlaWdodCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFZpZXdwb3J0SGVpZ2h0KCkge1xuICAgICAgaWYgKHRoaXMucmVmcy50b3JyZW50TGlzdCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB2aWV3cG9ydEhlaWdodDogX3JlYWN0RG9tMlsnZGVmYXVsdCddLmZpbmRET01Ob2RlKHRoaXMucmVmcy50b3JyZW50TGlzdCkub2Zmc2V0SGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgdG9ycmVudExpc3RDb250ZW50ID0gbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnRvcnJlbnRSZXF1ZXN0U3VjY2Vzcykge1xuICAgICAgICB0b3JyZW50TGlzdENvbnRlbnQgPSBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfZ2VuZXJpY0xvYWRpbmdJbmRpY2F0b3IyWydkZWZhdWx0J10sIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRUb3JyZW50cyA9IF9zdG9yZXNUb3JyZW50U3RvcmUyWydkZWZhdWx0J10uZ2V0U2VsZWN0ZWRUb3JyZW50cygpO1xuICAgICAgICAgIHZhciB0b3JyZW50cyA9IF90aGlzMi5zdGF0ZS50b3JyZW50cztcbiAgICAgICAgICB2YXIgdmlld3BvcnRMaW1pdHMgPSBfdGhpczIuZ2V0Vmlld3BvcnRMaW1pdHMoKTtcbiAgICAgICAgICB2YXIgbGlzdFBhZGRpbmcgPSBfdGhpczIuZ2V0TGlzdFBhZGRpbmcodmlld3BvcnRMaW1pdHMubWluVG9ycmVudEluZGV4LCB2aWV3cG9ydExpbWl0cy5tYXhUb3JyZW50SW5kZXgsIHRvcnJlbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgICB2YXIgdmlzaWJsZVRvcnJlbnRzID0gdG9ycmVudHMuc2xpY2Uodmlld3BvcnRMaW1pdHMubWluVG9ycmVudEluZGV4LCB2aWV3cG9ydExpbWl0cy5tYXhUb3JyZW50SW5kZXgpO1xuXG4gICAgICAgICAgdmFyIHRvcnJlbnRMaXN0ID0gdmlzaWJsZVRvcnJlbnRzLm1hcChmdW5jdGlvbiAodG9ycmVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBpc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaGFzaCA9IHRvcnJlbnQuaGFzaDtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkVG9ycmVudHMuaW5kZXhPZihoYXNoKSA+IC0xKSB7XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX1RvcnJlbnQyWydkZWZhdWx0J10sIHsga2V5OiBoYXNoLCBkYXRhOiB0b3JyZW50LCBzZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgaGFuZGxlQ2xpY2s6IF90aGlzMi5oYW5kbGVUb3JyZW50Q2xpY2ssXG4gICAgICAgICAgICAgIGhhbmRsZURldGFpbHNDbGljazogX3RoaXMyLmhhbmRsZURldGFpbHNDbGljayB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRvcnJlbnRMaXN0Q29udGVudCA9IF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ3VsJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fbGlzdCcgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdsaScsIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fc3BhY2VyIHRvcnJlbnRfX3NwYWNlci0tdG9wJyxcbiAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBsaXN0UGFkZGluZy50b3AgKyAncHgnIH0gfSksXG4gICAgICAgICAgICB0b3JyZW50TGlzdCxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdsaScsIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fc3BhY2VyIHRvcnJlbnRfX3NwYWNlci0tYm90dG9tJyxcbiAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBsaXN0UGFkZGluZy5ib3R0b20gKyAncHgnIH0gfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2xpc3RfX3dyYXBwZXInLCBvblNjcm9sbDogdGhpcy5oYW5kbGVTY3JvbGwsXG4gICAgICAgICAgcmVmOiAndG9ycmVudExpc3QnIH0sXG4gICAgICAgIHRvcnJlbnRMaXN0Q29udGVudFxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudExpc3RDb250YWluZXI7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudExpc3RDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnRMaXN0LmpzXG4gKiogbW9kdWxlIGlkID0gMjIyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 223 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar ProgressBar = (function (_React$Component) {\n _inherits(ProgressBar, _React$Component);\n\n function ProgressBar() {\n _classCallCheck(this, ProgressBar);\n\n _get(Object.getPrototypeOf(ProgressBar.prototype), 'constructor', this).call(this);\n }\n\n _createClass(ProgressBar, [{\n key: 'render',\n value: function render() {\n var percent = this.props.percent;\n var className = 'progress-bar';\n\n return _react2['default'].createElement(\n 'div',\n { className: className },\n _react2['default'].createElement('div', { className: 'progress-bar__fill', style: { width: percent + '%' } })\n );\n }\n }]);\n\n return ProgressBar;\n})(_react2['default'].Component);\n\nexports['default'] = ProgressBar;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvUHJvZ3Jlc3NCYXIuanM/ZDNiNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsdUJBQXVCO0FBQ2hDLGlEQUFpRCwwQ0FBMEMsdUJBQXVCLEVBQUU7QUFDcEg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBQcm9ncmVzc0JhciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUHJvZ3Jlc3NCYXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFByb2dyZXNzQmFyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQcm9ncmVzc0Jhcik7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihQcm9ncmVzc0Jhci5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFByb2dyZXNzQmFyLCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwZXJjZW50ID0gdGhpcy5wcm9wcy5wZXJjZW50O1xuICAgICAgdmFyIGNsYXNzTmFtZSA9ICdwcm9ncmVzcy1iYXInO1xuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IGNsYXNzTmFtZTogJ3Byb2dyZXNzLWJhcl9fZmlsbCcsIHN0eWxlOiB7IHdpZHRoOiBwZXJjZW50ICsgJyUnIH0gfSlcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFByb2dyZXNzQmFyO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFByb2dyZXNzQmFyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3RvcnJlbnQtbGlzdC9Qcm9ncmVzc0Jhci5qc1xuICoqIG1vZHVsZSBpZCA9IDIyM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar TorrentList = (function (_React$Component) {\n _inherits(TorrentList, _React$Component);\n\n function TorrentList() {\n _classCallCheck(this, TorrentList);\n\n _get(Object.getPrototypeOf(TorrentList.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(TorrentList, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'div',\n null,\n 'Loading'\n );\n }\n }]);\n\n return TorrentList;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentList;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9nZW5lcmljL0xvYWRpbmdJbmRpY2F0b3IuanM/ZDc0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBUb3JyZW50TGlzdCA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9ycmVudExpc3QsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvcnJlbnRMaXN0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb3JyZW50TGlzdCk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50TGlzdC5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvcnJlbnRMaXN0LCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIG51bGwsXG4gICAgICAgICdMb2FkaW5nJ1xuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudExpc3Q7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudExpc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvZ2VuZXJpYy9Mb2FkaW5nSW5kaWNhdG9yLmpzXG4gKiogbW9kdWxlIGlkID0gMjIzXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 224 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _classnames = __webpack_require__(164);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utilFormatData = __webpack_require__(213);\n\nvar _utilFormatData2 = _interopRequireDefault(_utilFormatData);\n\nvar _iconsIcon = __webpack_require__(161);\n\nvar _iconsIcon2 = _interopRequireDefault(_iconsIcon);\n\nvar _ProgressBar = __webpack_require__(225);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar methodsToBind = ['handleClick', 'handleRightClick'];\n\nvar Torrent = (function (_React$Component) {\n _inherits(Torrent, _React$Component);\n\n function Torrent() {\n var _this = this;\n\n _classCallCheck(this, Torrent);\n\n _get(Object.getPrototypeOf(Torrent.prototype), 'constructor', this).call(this);\n\n methodsToBind.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(Torrent, [{\n key: 'handleClick',\n value: function handleClick(event) {\n this.props.handleClick(this.props.data.hash, event);\n }\n }, {\n key: 'handleRightClick',\n value: function handleRightClick(event) {\n console.log(event);\n }\n }, {\n key: 'render',\n value: function render() {\n var torrent = this.props.data;\n var added = new Date(torrent.added * 1000);\n var addedString = added.getMonth() + 1 + '/' + added.getDate() + '/' + added.getFullYear();\n var completed = _utilFormatData2['default'].data(torrent.bytesDone);\n var downloadRate = _utilFormatData2['default'].data(torrent.downloadRate, '/s');\n var downloadTotal = _utilFormatData2['default'].data(torrent.downloadTotal);\n var eta = _utilFormatData2['default'].eta(torrent.eta);\n var ratio = _utilFormatData2['default'].ratio(torrent.ratio);\n var totalSize = _utilFormatData2['default'].data(torrent.sizeBytes);\n var uploadRate = _utilFormatData2['default'].data(torrent.uploadRate, '/s');\n var uploadTotal = _utilFormatData2['default'].data(torrent.uploadTotal);\n\n var classes = (0, _classnames2['default'])({\n 'torrent': true,\n 'is-selected': this.props.selected,\n 'is-stopped': torrent.status.indexOf('is-stopped') > -1,\n 'is-paused': torrent.status.indexOf('is-paused') > -1,\n 'is-actively-downloading': downloadRate.value > 0,\n 'is-downloading': torrent.status.indexOf('is-downloading') > -1,\n 'is-seeding': torrent.status.indexOf('is-seeding') > -1,\n 'is-completed': torrent.status.indexOf('is-completed') > -1,\n 'is-checking': torrent.status.indexOf('is-checking') > -1,\n 'is-active': torrent.status.indexOf('is-active') > -1,\n 'is-inactive': torrent.status.indexOf('is-inactive') > -1\n });\n\n return _react2['default'].createElement(\n 'li',\n {\n className: classes,\n onMouseDown: this.handleClick,\n onContextMenu: this.handleRightClick },\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent__details' },\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--primary text-overflow' },\n torrent.name\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--secondary' },\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent__details' },\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--eta' },\n eta\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--speed' },\n downloadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n downloadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--speed' },\n uploadRate.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadRate.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--ratio' },\n ratio\n )\n )\n )\n ),\n _react2['default'].createElement(\n 'ul',\n { className: 'torrent__details torrent__details--tertiary' },\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--completed' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Downloaded'\n ),\n torrent.percentComplete,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n '%'\n ),\n ' — ',\n completed.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n completed.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--uploaded' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Uploaded'\n ),\n uploadTotal.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n uploadTotal.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--size' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Size'\n ),\n totalSize.value,\n _react2['default'].createElement(\n 'em',\n { className: 'unit' },\n totalSize.unit\n )\n ),\n _react2['default'].createElement(\n 'li',\n { className: 'torrent__details--added' },\n _react2['default'].createElement(\n 'span',\n { className: 'torrent__details__label' },\n 'Added'\n ),\n addedString\n )\n ),\n _react2['default'].createElement(_ProgressBar2['default'], { percent: torrent.percentComplete }),\n _react2['default'].createElement(\n 'button',\n { className: 'torrent__more-info floating-action__button',\n onClick: this.props.handleDetailsClick.bind(this, torrent) },\n _react2['default'].createElement(_iconsIcon2['default'], { icon: 'dotsMini', size: 'mini' })\n )\n );\n }\n }]);\n\n return Torrent;\n})(_react2['default'].Component);\n\nexports['default'] = Torrent;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudC5qcz9jNjYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWxqQix1Q0FBdUMsbUJBQW1CLDRCQUE0QixpREFBaUQsZ0JBQWdCLGtEQUFrRCw4REFBOEQsMEJBQTBCLDRDQUE0Qyx1QkFBdUIsa0JBQWtCLEVBQUUsT0FBTyxhQUFhLGdCQUFnQixnQkFBZ0IsZUFBZSwyQkFBMkIsb0JBQW9CLEVBQUUsRUFBRSw0QkFBNEIsbUJBQW1CLEVBQUUsT0FBTyx1QkFBdUIsNEJBQTRCLGtCQUFrQixFQUFFLDhCQUE4QixFQUFFLEVBQUU7O0FBRS9vQixzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFNWU7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLFdBQVcsZ0NBQWdDO0FBQzNDO0FBQ0E7QUFDQSxhQUFhLHVEQUF1RDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQSxlQUFlLGdDQUFnQztBQUMvQztBQUNBO0FBQ0EsaUJBQWlCLHFDQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1Q0FBdUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVDQUF1QztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdUNBQXVDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyREFBMkQ7QUFDdEU7QUFDQTtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZEO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0NBQXNDO0FBQ25EO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLG1DQUFtQztBQUN2RztBQUNBO0FBQ0EsV0FBVztBQUNYLHdFQUF3RTtBQUN4RSxvRUFBb0UsaUNBQWlDO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3V0aWxGb3JtYXREYXRhID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9mb3JtYXREYXRhJyk7XG5cbnZhciBfdXRpbEZvcm1hdERhdGEyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbEZvcm1hdERhdGEpO1xuXG52YXIgX2ljb25zSWNvbiA9IHJlcXVpcmUoJy4uL2ljb25zL0ljb24nKTtcblxudmFyIF9pY29uc0ljb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNJY29uKTtcblxudmFyIF9Qcm9ncmVzc0JhciA9IHJlcXVpcmUoJy4vUHJvZ3Jlc3NCYXInKTtcblxudmFyIF9Qcm9ncmVzc0JhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Qcm9ncmVzc0Jhcik7XG5cbnZhciBtZXRob2RzVG9CaW5kID0gWydoYW5kbGVDbGljaycsICdoYW5kbGVSaWdodENsaWNrJ107XG5cbnZhciBUb3JyZW50ID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUb3JyZW50LCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUb3JyZW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9ycmVudCk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG5cbiAgICBtZXRob2RzVG9CaW5kLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVG9ycmVudCwgW3tcbiAgICBrZXk6ICdoYW5kbGVDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmhhbmRsZUNsaWNrKHRoaXMucHJvcHMuZGF0YS5oYXNoLCBldmVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlUmlnaHRDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVJpZ2h0Q2xpY2soZXZlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgdG9ycmVudCA9IHRoaXMucHJvcHMuZGF0YTtcbiAgICAgIHZhciBhZGRlZCA9IG5ldyBEYXRlKHRvcnJlbnQuYWRkZWQgKiAxMDAwKTtcbiAgICAgIHZhciBhZGRlZFN0cmluZyA9IGFkZGVkLmdldE1vbnRoKCkgKyAxICsgJy8nICsgYWRkZWQuZ2V0RGF0ZSgpICsgJy8nICsgYWRkZWQuZ2V0RnVsbFllYXIoKTtcbiAgICAgIHZhciBjb21wbGV0ZWQgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmJ5dGVzRG9uZSk7XG4gICAgICB2YXIgZG93bmxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodG9ycmVudC5kb3dubG9hZFJhdGUsICcvcycpO1xuICAgICAgdmFyIGRvd25sb2FkVG90YWwgPSBfdXRpbEZvcm1hdERhdGEyWydkZWZhdWx0J10uZGF0YSh0b3JyZW50LmRvd25sb2FkVG90YWwpO1xuICAgICAgdmFyIGV0YSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5ldGEodG9ycmVudC5ldGEpO1xuICAgICAgdmFyIHJhdGlvID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLnJhdGlvKHRvcnJlbnQucmF0aW8pO1xuICAgICAgdmFyIHRvdGFsU2l6ZSA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQuc2l6ZUJ5dGVzKTtcbiAgICAgIHZhciB1cGxvYWRSYXRlID0gX3V0aWxGb3JtYXREYXRhMlsnZGVmYXVsdCddLmRhdGEodG9ycmVudC51cGxvYWRSYXRlLCAnL3MnKTtcbiAgICAgIHZhciB1cGxvYWRUb3RhbCA9IF91dGlsRm9ybWF0RGF0YTJbJ2RlZmF1bHQnXS5kYXRhKHRvcnJlbnQudXBsb2FkVG90YWwpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9ICgwLCBfY2xhc3NuYW1lczJbJ2RlZmF1bHQnXSkoe1xuICAgICAgICAndG9ycmVudCc6IHRydWUsXG4gICAgICAgICdpcy1zZWxlY3RlZCc6IHRoaXMucHJvcHMuc2VsZWN0ZWQsXG4gICAgICAgICdpcy1zdG9wcGVkJzogdG9ycmVudC5zdGF0dXMuaW5kZXhPZignaXMtc3RvcHBlZCcpID4gLTEsXG4gICAgICAgICdpcy1wYXVzZWQnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1wYXVzZWQnKSA+IC0xLFxuICAgICAgICAnaXMtYWN0aXZlbHktZG93bmxvYWRpbmcnOiBkb3dubG9hZFJhdGUudmFsdWUgPiAwLFxuICAgICAgICAnaXMtZG93bmxvYWRpbmcnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1kb3dubG9hZGluZycpID4gLTEsXG4gICAgICAgICdpcy1zZWVkaW5nJzogdG9ycmVudC5zdGF0dXMuaW5kZXhPZignaXMtc2VlZGluZycpID4gLTEsXG4gICAgICAgICdpcy1jb21wbGV0ZWQnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1jb21wbGV0ZWQnKSA+IC0xLFxuICAgICAgICAnaXMtY2hlY2tpbmcnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1jaGVja2luZycpID4gLTEsXG4gICAgICAgICdpcy1hY3RpdmUnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1hY3RpdmUnKSA+IC0xLFxuICAgICAgICAnaXMtaW5hY3RpdmUnOiB0b3JyZW50LnN0YXR1cy5pbmRleE9mKCdpcy1pbmFjdGl2ZScpID4gLTFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdsaScsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgb25Nb3VzZURvd246IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgICAgb25Db250ZXh0TWVudTogdGhpcy5oYW5kbGVSaWdodENsaWNrIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd1bCcsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzJyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tcHJpbWFyeSB0ZXh0LW92ZXJmbG93JyB9LFxuICAgICAgICAgICAgdG9ycmVudC5uYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXNlY29uZGFyeScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAndWwnLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMnIH0sXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1ldGEnIH0sXG4gICAgICAgICAgICAgICAgZXRhXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zcGVlZCcgfSxcbiAgICAgICAgICAgICAgICBkb3dubG9hZFJhdGUudmFsdWUsXG4gICAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgICAgZG93bmxvYWRSYXRlLnVuaXRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS1zcGVlZCcgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWRSYXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgICAgIHVwbG9hZFJhdGUudW5pdFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLXJhdGlvJyB9LFxuICAgICAgICAgICAgICAgIHJhdGlvXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICd1bCcsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzIHRvcnJlbnRfX2RldGFpbHMtLXRlcnRpYXJ5JyB9LFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tY29tcGxldGVkJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzX19sYWJlbCcgfSxcbiAgICAgICAgICAgICAgJ0Rvd25sb2FkZWQnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdG9ycmVudC5wZXJjZW50Q29tcGxldGUsXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAnwqDigJTCoCcsXG4gICAgICAgICAgICBjb21wbGV0ZWQudmFsdWUsXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ2VtJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd1bml0JyB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZWQudW5pdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnbGknLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzLS11cGxvYWRlZCcgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlsc19fbGFiZWwnIH0sXG4gICAgICAgICAgICAgICdVcGxvYWRlZCdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB1cGxvYWRUb3RhbC52YWx1ZSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgIHVwbG9hZFRvdGFsLnVuaXRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2xpJyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlscy0tc2l6ZScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fZGV0YWlsc19fbGFiZWwnIH0sXG4gICAgICAgICAgICAgICdTaXplJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZS52YWx1ZSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAnZW0nLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3VuaXQnIH0sXG4gICAgICAgICAgICAgIHRvdGFsU2l6ZS51bml0XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdsaScsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ3RvcnJlbnRfX2RldGFpbHMtLWFkZGVkJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICd0b3JyZW50X19kZXRhaWxzX19sYWJlbCcgfSxcbiAgICAgICAgICAgICAgJ0FkZGVkJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGFkZGVkU3RyaW5nXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfUHJvZ3Jlc3NCYXIyWydkZWZhdWx0J10sIHsgcGVyY2VudDogdG9ycmVudC5wZXJjZW50Q29tcGxldGUgfSksXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdidXR0b24nLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndG9ycmVudF9fbW9yZS1pbmZvIGZsb2F0aW5nLWFjdGlvbl9fYnV0dG9uJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMuaGFuZGxlRGV0YWlsc0NsaWNrLmJpbmQodGhpcywgdG9ycmVudCkgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNJY29uMlsnZGVmYXVsdCddLCB7IGljb246ICdkb3RzTWluaScsIHNpemU6ICdtaW5pJyB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb3JyZW50O1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFRvcnJlbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vY2xpZW50L3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvdG9ycmVudC1saXN0L1RvcnJlbnQuanNcbiAqKiBtb2R1bGUgaWQgPSAyMjRcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 225 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar ProgressBar = (function (_React$Component) {\n _inherits(ProgressBar, _React$Component);\n\n function ProgressBar() {\n _classCallCheck(this, ProgressBar);\n\n _get(Object.getPrototypeOf(ProgressBar.prototype), 'constructor', this).call(this);\n }\n\n _createClass(ProgressBar, [{\n key: 'render',\n value: function render() {\n var percent = this.props.percent;\n var className = 'progress-bar';\n\n return _react2['default'].createElement(\n 'div',\n { className: className },\n _react2['default'].createElement('div', { className: 'progress-bar__fill', style: { width: percent + '%' } })\n );\n }\n }]);\n\n return ProgressBar;\n})(_react2['default'].Component);\n\nexports['default'] = ProgressBar;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvUHJvZ3Jlc3NCYXIuanM/ZDNiNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsdUJBQXVCO0FBQ2hDLGlEQUFpRCwwQ0FBMEMsdUJBQXVCLEVBQUU7QUFDcEg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gsIF94MiwgX3gzKSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94LCBwcm9wZXJ0eSA9IF94MiwgcmVjZWl2ZXIgPSBfeDM7IF9hZ2FpbiA9IGZhbHNlOyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgX3ggPSBwYXJlbnQ7IF94MiA9IHByb3BlcnR5OyBfeDMgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBQcm9ncmVzc0JhciA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUHJvZ3Jlc3NCYXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFByb2dyZXNzQmFyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQcm9ncmVzc0Jhcik7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihQcm9ncmVzc0Jhci5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFByb2dyZXNzQmFyLCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwZXJjZW50ID0gdGhpcy5wcm9wcy5wZXJjZW50O1xuICAgICAgdmFyIGNsYXNzTmFtZSA9ICdwcm9ncmVzcy1iYXInO1xuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lIH0sXG4gICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IGNsYXNzTmFtZTogJ3Byb2dyZXNzLWJhcl9fZmlsbCcsIHN0eWxlOiB7IHdpZHRoOiBwZXJjZW50ICsgJyUnIH0gfSlcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFByb2dyZXNzQmFyO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFByb2dyZXNzQmFyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3RvcnJlbnQtbGlzdC9Qcm9ncmVzc0Jhci5qc1xuICoqIG1vZHVsZSBpZCA9IDIyNVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ } /******/ ]); \ No newline at end of file