for-modules 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.txt +12 -0
- package/README.md +1 -0
- package/babel.config.json +6 -0
- package/dist/Structures/Filters.d.ts +109 -0
- package/dist/Structures/Filters.js +296 -0
- package/dist/Structures/Manager.d.ts +192 -0
- package/dist/Structures/Manager.js +580 -0
- package/dist/Structures/Node.d.ts +140 -0
- package/dist/Structures/Node.js +588 -0
- package/dist/Structures/Player.d.ts +250 -0
- package/dist/Structures/Player.js +750 -0
- package/dist/Structures/Queue.d.ts +38 -0
- package/dist/Structures/Queue.js +180 -0
- package/dist/Structures/Rest.d.ts +60 -0
- package/dist/Structures/Rest.js +246 -0
- package/dist/Structures/Utils.d.ts +174 -0
- package/dist/Structures/Utils.js +318 -0
- package/dist/Utils/FiltersEqualizers.d.ts +12 -0
- package/dist/Utils/FiltersEqualizers.js +227 -0
- package/dist/Utils/ManagerCheck.d.ts +2 -0
- package/dist/Utils/ManagerCheck.js +75 -0
- package/dist/Utils/NodeCheck.d.ts +2 -0
- package/dist/Utils/NodeCheck.js +54 -0
- package/dist/Utils/PlayerCheck.d.ts +2 -0
- package/dist/Utils/PlayerCheck.js +38 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +127 -0
- package/eslint.config.d.ts +2 -0
- package/eslint.config.js +12 -0
- package/package.json +51 -0
- package/renovate.json +6 -0
- package/tsconfig.json +25 -0
@@ -0,0 +1,580 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.Manager = void 0;
|
7
|
+
var _Utils = require("./Utils");
|
8
|
+
var _collection = require("@discordjs/collection");
|
9
|
+
var _ManagerCheck = _interopRequireDefault(require("../Utils/ManagerCheck"));
|
10
|
+
var _tinyTypedEmitter = require("tiny-typed-emitter");
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
12
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
13
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
14
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
15
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
16
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
17
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
18
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
19
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
20
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
21
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
22
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
23
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
24
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
25
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
26
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
27
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
28
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
29
|
+
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
30
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
31
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
32
|
+
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
33
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
34
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
35
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
36
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
37
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable no-async-promise-executor */
|
38
|
+
/**
|
39
|
+
* The main hub for interacting with Lavalink and using Magmastream,
|
40
|
+
*/
|
41
|
+
var Manager = exports.Manager = /*#__PURE__*/function (_TypedEmitter) {
|
42
|
+
/**
|
43
|
+
* Initiates the Manager class.
|
44
|
+
* @param options
|
45
|
+
*/
|
46
|
+
function Manager(options) {
|
47
|
+
var _this;
|
48
|
+
_classCallCheck(this, Manager);
|
49
|
+
_this = _callSuper(this, Manager);
|
50
|
+
/** The map of players. */
|
51
|
+
_defineProperty(_this, "players", new _collection.Collection());
|
52
|
+
/** The map of nodes. */
|
53
|
+
_defineProperty(_this, "nodes", new _collection.Collection());
|
54
|
+
_defineProperty(_this, "initiated", false);
|
55
|
+
_defineProperty(_this, "caches", new _collection.Collection());
|
56
|
+
(0, _ManagerCheck["default"])(options);
|
57
|
+
_Utils.Structure.get("Player").init(_this);
|
58
|
+
_Utils.Structure.get("Node").init(_this);
|
59
|
+
_Utils.TrackUtils.init(_this);
|
60
|
+
if (options.trackPartial) {
|
61
|
+
_Utils.TrackUtils.setTrackPartial(options.trackPartial);
|
62
|
+
delete options.trackPartial;
|
63
|
+
}
|
64
|
+
_this.options = _objectSpread({
|
65
|
+
plugins: [],
|
66
|
+
nodes: [{
|
67
|
+
identifier: "default",
|
68
|
+
host: "localhost",
|
69
|
+
resumeStatus: false,
|
70
|
+
resumeTimeout: 1000
|
71
|
+
}],
|
72
|
+
shards: 1,
|
73
|
+
autoPlay: true,
|
74
|
+
usePriority: false,
|
75
|
+
clientName: "For v3.0",
|
76
|
+
defaultSearchPlatform: "youtube",
|
77
|
+
useNode: "leastPlayers"
|
78
|
+
}, options);
|
79
|
+
if (_this.options.plugins) {
|
80
|
+
var _iterator = _createForOfIteratorHelper(_this.options.plugins.entries()),
|
81
|
+
_step;
|
82
|
+
try {
|
83
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
84
|
+
var _step$value = _slicedToArray(_step.value, 2),
|
85
|
+
index = _step$value[0],
|
86
|
+
plugin = _step$value[1];
|
87
|
+
if (!(plugin instanceof _Utils.Plugin)) throw new RangeError("Plugin at index ".concat(index, " does not extend Plugin."));
|
88
|
+
plugin.load(_this);
|
89
|
+
}
|
90
|
+
} catch (err) {
|
91
|
+
_iterator.e(err);
|
92
|
+
} finally {
|
93
|
+
_iterator.f();
|
94
|
+
}
|
95
|
+
}
|
96
|
+
if (_this.options.nodes) {
|
97
|
+
var _iterator2 = _createForOfIteratorHelper(_this.options.nodes),
|
98
|
+
_step2;
|
99
|
+
try {
|
100
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
101
|
+
var nodeOptions = _step2.value;
|
102
|
+
var node = new (_Utils.Structure.get("Node"))(nodeOptions);
|
103
|
+
_this.nodes.set(node.options.identifier, node);
|
104
|
+
}
|
105
|
+
} catch (err) {
|
106
|
+
_iterator2.e(err);
|
107
|
+
} finally {
|
108
|
+
_iterator2.f();
|
109
|
+
}
|
110
|
+
}
|
111
|
+
setInterval(function () {
|
112
|
+
_this.caches.clear();
|
113
|
+
}, _this.options.caches.time);
|
114
|
+
return _this;
|
115
|
+
}
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Initiates the Manager.
|
119
|
+
* @param clientId
|
120
|
+
*/
|
121
|
+
_inherits(Manager, _TypedEmitter);
|
122
|
+
return _createClass(Manager, [{
|
123
|
+
key: "leastLoadNode",
|
124
|
+
get: /** Returns the nodes that has the least load. */
|
125
|
+
function get() {
|
126
|
+
return this.nodes.filter(function (node) {
|
127
|
+
return node.connected;
|
128
|
+
}).sort(function (a, b) {
|
129
|
+
var aload = a.stats.cpu ? a.stats.cpu.lavalinkLoad / a.stats.cpu.cores * 100 : 0;
|
130
|
+
var bload = b.stats.cpu ? b.stats.cpu.lavalinkLoad / b.stats.cpu.cores * 100 : 0;
|
131
|
+
return aload - bload;
|
132
|
+
});
|
133
|
+
}
|
134
|
+
|
135
|
+
/** Returns the nodes that has the least amount of players. */
|
136
|
+
}, {
|
137
|
+
key: "leastPlayersNode",
|
138
|
+
get: function get() {
|
139
|
+
return this.nodes.filter(function (node) {
|
140
|
+
return node.connected;
|
141
|
+
}).sort(function (a, b) {
|
142
|
+
return a.stats.players - b.stats.players;
|
143
|
+
});
|
144
|
+
}
|
145
|
+
|
146
|
+
/** Returns a node based on priority. */
|
147
|
+
}, {
|
148
|
+
key: "priorityNode",
|
149
|
+
get: function get() {
|
150
|
+
var filteredNodes = this.nodes.filter(function (node) {
|
151
|
+
return node.connected && node.options.priority > 0;
|
152
|
+
});
|
153
|
+
var totalWeight = filteredNodes.reduce(function (total, node) {
|
154
|
+
return total + node.options.priority;
|
155
|
+
}, 0);
|
156
|
+
var weightedNodes = filteredNodes.map(function (node) {
|
157
|
+
return {
|
158
|
+
node: node,
|
159
|
+
weight: node.options.priority / totalWeight
|
160
|
+
};
|
161
|
+
});
|
162
|
+
var randomNumber = Math.random();
|
163
|
+
var cumulativeWeight = 0;
|
164
|
+
var _iterator3 = _createForOfIteratorHelper(weightedNodes),
|
165
|
+
_step3;
|
166
|
+
try {
|
167
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
168
|
+
var _step3$value = _step3.value,
|
169
|
+
node = _step3$value.node,
|
170
|
+
weight = _step3$value.weight;
|
171
|
+
cumulativeWeight += weight;
|
172
|
+
if (randomNumber <= cumulativeWeight) {
|
173
|
+
return node;
|
174
|
+
}
|
175
|
+
}
|
176
|
+
} catch (err) {
|
177
|
+
_iterator3.e(err);
|
178
|
+
} finally {
|
179
|
+
_iterator3.f();
|
180
|
+
}
|
181
|
+
return this.options.useNode === "leastLoad" ? this.leastLoadNode.first() : this.leastPlayersNode.first();
|
182
|
+
}
|
183
|
+
|
184
|
+
/** Returns the node to use. */
|
185
|
+
}, {
|
186
|
+
key: "useableNodes",
|
187
|
+
get: function get() {
|
188
|
+
return this.options.usePriority ? this.priorityNode : this.options.useNode === "leastLoad" ? this.leastLoadNode.first() : this.leastPlayersNode.first();
|
189
|
+
}
|
190
|
+
}, {
|
191
|
+
key: "init",
|
192
|
+
value: function init(clientId) {
|
193
|
+
if (this.initiated) return this;
|
194
|
+
if (typeof clientId !== "undefined") this.options.clientId = clientId;
|
195
|
+
if (typeof this.options.clientId !== "string") throw new Error('"clientId" set is not type of "string"');
|
196
|
+
if (!this.options.clientId) throw new Error('"clientId" is not set. Pass it in Manager#init() or as a option in the constructor.');
|
197
|
+
var _iterator4 = _createForOfIteratorHelper(this.nodes.values()),
|
198
|
+
_step4;
|
199
|
+
try {
|
200
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
201
|
+
var node = _step4.value;
|
202
|
+
try {
|
203
|
+
node.connect();
|
204
|
+
} catch (err) {
|
205
|
+
this.emit("NodeError", node, err);
|
206
|
+
}
|
207
|
+
}
|
208
|
+
} catch (err) {
|
209
|
+
_iterator4.e(err);
|
210
|
+
} finally {
|
211
|
+
_iterator4.f();
|
212
|
+
}
|
213
|
+
this.initiated = true;
|
214
|
+
return this;
|
215
|
+
}
|
216
|
+
|
217
|
+
/**
|
218
|
+
* Searches the enabled sources based off the URL or the `source` property.
|
219
|
+
* @param query
|
220
|
+
* @param requester
|
221
|
+
* @returns The search result.
|
222
|
+
*/
|
223
|
+
}, {
|
224
|
+
key: "search",
|
225
|
+
value: (function () {
|
226
|
+
var _search = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(query, requester) {
|
227
|
+
var _Manager$DEFAULT_SOUR, _query$source;
|
228
|
+
var node, data, _query, _source, search, res, searchData, playlistData, tracks, playlist, result, tracksToReplace, _iterator5, _step5, track, _track$title$split$ma, _track$title$split$ma2, author, title, isYouTubeURL;
|
229
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
230
|
+
while (1) switch (_context.prev = _context.next) {
|
231
|
+
case 0:
|
232
|
+
isYouTubeURL = function _isYouTubeURL(uri) {
|
233
|
+
return uri.includes("youtube.com") || uri.includes("youtu.be");
|
234
|
+
};
|
235
|
+
node = this.useableNodes;
|
236
|
+
if (node) {
|
237
|
+
_context.next = 4;
|
238
|
+
break;
|
239
|
+
}
|
240
|
+
throw new Error("No available nodes.");
|
241
|
+
case 4:
|
242
|
+
if (!(this.options.caches.enabled && this.options.caches.time > 0 && typeof query === "string")) {
|
243
|
+
_context.next = 8;
|
244
|
+
break;
|
245
|
+
}
|
246
|
+
data = this.caches.get(query);
|
247
|
+
if (!data) {
|
248
|
+
_context.next = 8;
|
249
|
+
break;
|
250
|
+
}
|
251
|
+
return _context.abrupt("return", data);
|
252
|
+
case 8:
|
253
|
+
_query = typeof query === "string" ? {
|
254
|
+
query: query
|
255
|
+
} : query;
|
256
|
+
_source = (_Manager$DEFAULT_SOUR = Manager.DEFAULT_SOURCES[(_query$source = _query.source) !== null && _query$source !== void 0 ? _query$source : this.options.defaultSearchPlatform]) !== null && _Manager$DEFAULT_SOUR !== void 0 ? _Manager$DEFAULT_SOUR : _query.source;
|
257
|
+
search = _query.query;
|
258
|
+
if (!/^https?:\/\//.test(search)) {
|
259
|
+
search = "".concat(_source, ":").concat(search);
|
260
|
+
}
|
261
|
+
_context.prev = 12;
|
262
|
+
_context.next = 15;
|
263
|
+
return node.rest.get("/v4/loadtracks?identifier=".concat(encodeURIComponent(search)));
|
264
|
+
case 15:
|
265
|
+
res = _context.sent;
|
266
|
+
if (res) {
|
267
|
+
_context.next = 18;
|
268
|
+
break;
|
269
|
+
}
|
270
|
+
throw new Error("Query not found.");
|
271
|
+
case 18:
|
272
|
+
searchData = [];
|
273
|
+
_context.t0 = res.loadType;
|
274
|
+
_context.next = _context.t0 === "search" ? 22 : _context.t0 === "track" ? 24 : _context.t0 === "playlist" ? 26 : 28;
|
275
|
+
break;
|
276
|
+
case 22:
|
277
|
+
searchData = res.data;
|
278
|
+
return _context.abrupt("break", 28);
|
279
|
+
case 24:
|
280
|
+
searchData = [res.data];
|
281
|
+
return _context.abrupt("break", 28);
|
282
|
+
case 26:
|
283
|
+
playlistData = res.data;
|
284
|
+
return _context.abrupt("break", 28);
|
285
|
+
case 28:
|
286
|
+
tracks = searchData.map(function (track) {
|
287
|
+
return _Utils.TrackUtils.build(track, requester);
|
288
|
+
});
|
289
|
+
playlist = null;
|
290
|
+
if (res.loadType === "playlist") {
|
291
|
+
playlist = {
|
292
|
+
name: playlistData.info.name,
|
293
|
+
tracks: playlistData.tracks.map(function (track) {
|
294
|
+
return _Utils.TrackUtils.build(track, requester);
|
295
|
+
}),
|
296
|
+
duration: playlistData.tracks.reduce(function (acc, cur) {
|
297
|
+
return acc + (cur.info.length || 0);
|
298
|
+
}, 0)
|
299
|
+
};
|
300
|
+
}
|
301
|
+
result = {
|
302
|
+
loadType: res.loadType,
|
303
|
+
tracks: tracks,
|
304
|
+
playlist: playlist
|
305
|
+
};
|
306
|
+
if (this.options.replaceYouTubeCredentials) {
|
307
|
+
tracksToReplace = [];
|
308
|
+
if (result.loadType === "playlist") {
|
309
|
+
tracksToReplace = result.playlist.tracks;
|
310
|
+
} else {
|
311
|
+
tracksToReplace = result.tracks;
|
312
|
+
}
|
313
|
+
_iterator5 = _createForOfIteratorHelper(tracksToReplace);
|
314
|
+
try {
|
315
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
316
|
+
track = _step5.value;
|
317
|
+
if (isYouTubeURL(track.uri)) {
|
318
|
+
track.author = track.author.replace("- Topic", "");
|
319
|
+
track.title = track.title.replace("Topic -", "");
|
320
|
+
}
|
321
|
+
if (track.title.includes("-")) {
|
322
|
+
_track$title$split$ma = track.title.split("-").map(function (str) {
|
323
|
+
return str.trim();
|
324
|
+
}), _track$title$split$ma2 = _slicedToArray(_track$title$split$ma, 2), author = _track$title$split$ma2[0], title = _track$title$split$ma2[1];
|
325
|
+
track.author = author;
|
326
|
+
track.title = title;
|
327
|
+
}
|
328
|
+
}
|
329
|
+
} catch (err) {
|
330
|
+
_iterator5.e(err);
|
331
|
+
} finally {
|
332
|
+
_iterator5.f();
|
333
|
+
}
|
334
|
+
}
|
335
|
+
if (this.options.caches.enabled && this.options.caches.time > 0) this.caches.set(search, result);
|
336
|
+
return _context.abrupt("return", result);
|
337
|
+
case 37:
|
338
|
+
_context.prev = 37;
|
339
|
+
_context.t1 = _context["catch"](12);
|
340
|
+
throw new Error(_context.t1);
|
341
|
+
case 40:
|
342
|
+
case "end":
|
343
|
+
return _context.stop();
|
344
|
+
}
|
345
|
+
}, _callee, this, [[12, 37]]);
|
346
|
+
}));
|
347
|
+
function search(_x, _x2) {
|
348
|
+
return _search.apply(this, arguments);
|
349
|
+
}
|
350
|
+
return search;
|
351
|
+
}()
|
352
|
+
/**
|
353
|
+
* Decodes the base64 encoded tracks and returns a TrackData array.
|
354
|
+
* @param tracks
|
355
|
+
*/
|
356
|
+
)
|
357
|
+
}, {
|
358
|
+
key: "decodeTracks",
|
359
|
+
value: function decodeTracks(tracks) {
|
360
|
+
var _this2 = this;
|
361
|
+
return new Promise(/*#__PURE__*/function () {
|
362
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(resolve, reject) {
|
363
|
+
var node;
|
364
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
365
|
+
while (1) switch (_context2.prev = _context2.next) {
|
366
|
+
case 0:
|
367
|
+
node = _this2.nodes.first();
|
368
|
+
if (node) {
|
369
|
+
_context2.next = 3;
|
370
|
+
break;
|
371
|
+
}
|
372
|
+
return _context2.abrupt("return", reject(new Error("No available nodes.")));
|
373
|
+
case 3:
|
374
|
+
_context2.next = 5;
|
375
|
+
return node.rest.post("/v4/decodetracks", JSON.stringify(tracks)).then(function (res) {
|
376
|
+
if (!res) return reject(new Error("No data returned from query."));
|
377
|
+
resolve(res);
|
378
|
+
})["catch"](function (err) {
|
379
|
+
return reject(err);
|
380
|
+
});
|
381
|
+
case 5:
|
382
|
+
case "end":
|
383
|
+
return _context2.stop();
|
384
|
+
}
|
385
|
+
}, _callee2);
|
386
|
+
}));
|
387
|
+
return function (_x3, _x4) {
|
388
|
+
return _ref.apply(this, arguments);
|
389
|
+
};
|
390
|
+
}());
|
391
|
+
}
|
392
|
+
|
393
|
+
/**
|
394
|
+
* Decodes the base64 encoded track and returns a TrackData.
|
395
|
+
* @param track
|
396
|
+
*/
|
397
|
+
}, {
|
398
|
+
key: "decodeTrack",
|
399
|
+
value: (function () {
|
400
|
+
var _decodeTrack = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(track) {
|
401
|
+
var res;
|
402
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
403
|
+
while (1) switch (_context3.prev = _context3.next) {
|
404
|
+
case 0:
|
405
|
+
_context3.next = 2;
|
406
|
+
return this.decodeTracks([track]);
|
407
|
+
case 2:
|
408
|
+
res = _context3.sent;
|
409
|
+
return _context3.abrupt("return", res[0]);
|
410
|
+
case 4:
|
411
|
+
case "end":
|
412
|
+
return _context3.stop();
|
413
|
+
}
|
414
|
+
}, _callee3, this);
|
415
|
+
}));
|
416
|
+
function decodeTrack(_x5) {
|
417
|
+
return _decodeTrack.apply(this, arguments);
|
418
|
+
}
|
419
|
+
return decodeTrack;
|
420
|
+
}()
|
421
|
+
/**
|
422
|
+
* Creates a player or returns one if it already exists.
|
423
|
+
* @param options
|
424
|
+
*/
|
425
|
+
)
|
426
|
+
}, {
|
427
|
+
key: "create",
|
428
|
+
value: function create(options) {
|
429
|
+
if (this.players.has(options.guild)) {
|
430
|
+
return this.players.get(options.guild);
|
431
|
+
}
|
432
|
+
return new (_Utils.Structure.get("Player"))(options);
|
433
|
+
}
|
434
|
+
|
435
|
+
/**
|
436
|
+
* Returns a player or undefined if it does not exist.
|
437
|
+
* @param guild
|
438
|
+
*/
|
439
|
+
}, {
|
440
|
+
key: "get",
|
441
|
+
value: function get(guild) {
|
442
|
+
return this.players.get(guild);
|
443
|
+
}
|
444
|
+
|
445
|
+
/**
|
446
|
+
* Destroys a player if it exists.
|
447
|
+
* @param guild
|
448
|
+
*/
|
449
|
+
}, {
|
450
|
+
key: "destroy",
|
451
|
+
value: function destroy(guild) {
|
452
|
+
this.players["delete"](guild);
|
453
|
+
}
|
454
|
+
|
455
|
+
/**
|
456
|
+
* Creates a node or returns one if it already exists.
|
457
|
+
* @param options
|
458
|
+
*/
|
459
|
+
}, {
|
460
|
+
key: "createNode",
|
461
|
+
value: function createNode(options) {
|
462
|
+
if (this.nodes.has(options.identifier || options.host)) {
|
463
|
+
return this.nodes.get(options.identifier || options.host);
|
464
|
+
}
|
465
|
+
return new (_Utils.Structure.get("Node"))(options);
|
466
|
+
}
|
467
|
+
|
468
|
+
/**
|
469
|
+
* Destroys a node if it exists.
|
470
|
+
* @param identifier
|
471
|
+
*/
|
472
|
+
}, {
|
473
|
+
key: "destroyNode",
|
474
|
+
value: function destroyNode(identifier) {
|
475
|
+
var node = this.nodes.get(identifier);
|
476
|
+
if (!node) return;
|
477
|
+
node.destroy();
|
478
|
+
this.nodes["delete"](identifier);
|
479
|
+
}
|
480
|
+
|
481
|
+
/**
|
482
|
+
* Sends voice data to the Lavalink server.
|
483
|
+
* @param data
|
484
|
+
*/
|
485
|
+
}, {
|
486
|
+
key: "updateVoiceState",
|
487
|
+
value: (function () {
|
488
|
+
var _updateVoiceState = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(data) {
|
489
|
+
var update, player, _player$voiceState, sessionId, _player$voiceState$ev, token, endpoint;
|
490
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
491
|
+
while (1) switch (_context4.prev = _context4.next) {
|
492
|
+
case 0:
|
493
|
+
if (!("t" in data && !["VOICE_STATE_UPDATE", "VOICE_SERVER_UPDATE"].includes(data.t))) {
|
494
|
+
_context4.next = 2;
|
495
|
+
break;
|
496
|
+
}
|
497
|
+
return _context4.abrupt("return");
|
498
|
+
case 2:
|
499
|
+
update = "d" in data ? data.d : data;
|
500
|
+
if (!(!update || !("token" in update) && !("session_id" in update))) {
|
501
|
+
_context4.next = 5;
|
502
|
+
break;
|
503
|
+
}
|
504
|
+
return _context4.abrupt("return");
|
505
|
+
case 5:
|
506
|
+
player = this.players.get(update.guild_id);
|
507
|
+
if (player) {
|
508
|
+
_context4.next = 8;
|
509
|
+
break;
|
510
|
+
}
|
511
|
+
return _context4.abrupt("return");
|
512
|
+
case 8:
|
513
|
+
if (!("token" in update)) {
|
514
|
+
_context4.next = 14;
|
515
|
+
break;
|
516
|
+
}
|
517
|
+
player.voiceState.event = update;
|
518
|
+
_player$voiceState = player.voiceState, sessionId = _player$voiceState.sessionId, _player$voiceState$ev = _player$voiceState.event, token = _player$voiceState$ev.token, endpoint = _player$voiceState$ev.endpoint;
|
519
|
+
_context4.next = 13;
|
520
|
+
return player.node.rest.updatePlayer({
|
521
|
+
guildId: player.guild,
|
522
|
+
data: {
|
523
|
+
voice: {
|
524
|
+
token: token,
|
525
|
+
endpoint: endpoint,
|
526
|
+
sessionId: sessionId
|
527
|
+
}
|
528
|
+
}
|
529
|
+
});
|
530
|
+
case 13:
|
531
|
+
return _context4.abrupt("return");
|
532
|
+
case 14:
|
533
|
+
if (!(update.user_id !== this.options.clientId)) {
|
534
|
+
_context4.next = 16;
|
535
|
+
break;
|
536
|
+
}
|
537
|
+
return _context4.abrupt("return");
|
538
|
+
case 16:
|
539
|
+
if (!update.channel_id) {
|
540
|
+
_context4.next = 21;
|
541
|
+
break;
|
542
|
+
}
|
543
|
+
if (player.voiceChannel !== update.channel_id) {
|
544
|
+
this.emit("PlayerMove", player, player.voiceChannel, update.channel_id);
|
545
|
+
}
|
546
|
+
player.voiceState.sessionId = update.session_id;
|
547
|
+
player.voiceChannel = update.channel_id;
|
548
|
+
return _context4.abrupt("return");
|
549
|
+
case 21:
|
550
|
+
this.emit("PlayerDisconnect", player, player.voiceChannel);
|
551
|
+
player.voiceChannel = null;
|
552
|
+
player.voiceState = Object.assign({});
|
553
|
+
player.destroy();
|
554
|
+
return _context4.abrupt("return");
|
555
|
+
case 26:
|
556
|
+
case "end":
|
557
|
+
return _context4.stop();
|
558
|
+
}
|
559
|
+
}, _callee4, this);
|
560
|
+
}));
|
561
|
+
function updateVoiceState(_x6) {
|
562
|
+
return _updateVoiceState.apply(this, arguments);
|
563
|
+
}
|
564
|
+
return updateVoiceState;
|
565
|
+
}())
|
566
|
+
}]);
|
567
|
+
}(_tinyTypedEmitter.TypedEmitter);
|
568
|
+
_defineProperty(Manager, "DEFAULT_SOURCES", {
|
569
|
+
"youtube music": "ytmsearch",
|
570
|
+
youtube: "ytsearch",
|
571
|
+
spotify: "spsearch",
|
572
|
+
jiosaavn: "jssearch",
|
573
|
+
soundcloud: "scsearch",
|
574
|
+
deezer: "dzsearch",
|
575
|
+
tidal: "tdsearch",
|
576
|
+
applemusic: "amsearch",
|
577
|
+
bandcamp: "bcsearch",
|
578
|
+
tiktok: "tiktok"
|
579
|
+
});
|
580
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJyZXF1aXJlIiwiX2NvbGxlY3Rpb24iLCJfTWFuYWdlckNoZWNrIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl90aW55VHlwZWRFbWl0dGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwidCIsInIiLCJPYmplY3QiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsImEiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9uIiwiRiIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfb2JqZWN0U3ByZWFkIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsImJpbmQiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIk1hbmFnZXIiLCJleHBvcnRzIiwiX1R5cGVkRW1pdHRlciIsIm9wdGlvbnMiLCJfdGhpcyIsIkNvbGxlY3Rpb24iLCJtYW5hZ2VyQ2hlY2siLCJTdHJ1Y3R1cmUiLCJnZXQiLCJpbml0IiwiVHJhY2tVdGlscyIsInRyYWNrUGFydGlhbCIsInNldFRyYWNrUGFydGlhbCIsInBsdWdpbnMiLCJub2RlcyIsImlkZW50aWZpZXIiLCJob3N0IiwicmVzdW1lU3RhdHVzIiwicmVzdW1lVGltZW91dCIsInNoYXJkcyIsImF1dG9QbGF5IiwidXNlUHJpb3JpdHkiLCJjbGllbnROYW1lIiwiZGVmYXVsdFNlYXJjaFBsYXRmb3JtIiwidXNlTm9kZSIsIl9pdGVyYXRvciIsImVudHJpZXMiLCJfc3RlcCIsIl9zdGVwJHZhbHVlIiwiaW5kZXgiLCJwbHVnaW4iLCJQbHVnaW4iLCJSYW5nZUVycm9yIiwiY29uY2F0IiwibG9hZCIsImVyciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJub2RlT3B0aW9ucyIsIm5vZGUiLCJzZXQiLCJzZXRJbnRlcnZhbCIsImNhY2hlcyIsImNsZWFyIiwidGltZSIsImNvbm5lY3RlZCIsInNvcnQiLCJiIiwiYWxvYWQiLCJzdGF0cyIsImNwdSIsImxhdmFsaW5rTG9hZCIsImNvcmVzIiwiYmxvYWQiLCJwbGF5ZXJzIiwiZmlsdGVyZWROb2RlcyIsInByaW9yaXR5IiwidG90YWxXZWlnaHQiLCJyZWR1Y2UiLCJ0b3RhbCIsIndlaWdodGVkTm9kZXMiLCJtYXAiLCJ3ZWlnaHQiLCJyYW5kb21OdW1iZXIiLCJNYXRoIiwicmFuZG9tIiwiY3VtdWxhdGl2ZVdlaWdodCIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfc3RlcDMkdmFsdWUiLCJsZWFzdExvYWROb2RlIiwiZmlyc3QiLCJsZWFzdFBsYXllcnNOb2RlIiwicHJpb3JpdHlOb2RlIiwiY2xpZW50SWQiLCJpbml0aWF0ZWQiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiY29ubmVjdCIsImVtaXQiLCJfc2VhcmNoIiwiX2NhbGxlZSIsInF1ZXJ5IiwicmVxdWVzdGVyIiwiX01hbmFnZXIkREVGQVVMVF9TT1VSIiwiX3F1ZXJ5JHNvdXJjZSIsImRhdGEiLCJfcXVlcnkiLCJfc291cmNlIiwic2VhcmNoIiwicmVzIiwic2VhcmNoRGF0YSIsInBsYXlsaXN0RGF0YSIsInRyYWNrcyIsInBsYXlsaXN0IiwicmVzdWx0IiwidHJhY2tzVG9SZXBsYWNlIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsInRyYWNrIiwiX3RyYWNrJHRpdGxlJHNwbGl0JG1hIiwiX3RyYWNrJHRpdGxlJHNwbGl0JG1hMiIsImF1dGhvciIsInRpdGxlIiwiaXNZb3VUdWJlVVJMIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl9pc1lvdVR1YmVVUkwiLCJ1cmkiLCJpbmNsdWRlcyIsInVzZWFibGVOb2RlcyIsImVuYWJsZWQiLCJERUZBVUxUX1NPVVJDRVMiLCJzb3VyY2UiLCJyZXN0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidDAiLCJsb2FkVHlwZSIsImJ1aWxkIiwiaW5mbyIsImR1cmF0aW9uIiwiYWNjIiwiY3VyIiwicmVwbGFjZVlvdVR1YmVDcmVkZW50aWFscyIsInJlcGxhY2UiLCJzcGxpdCIsInN0ciIsInRyaW0iLCJ0MSIsIl94IiwiX3gyIiwiZGVjb2RlVHJhY2tzIiwiX3RoaXMyIiwiX3JlZiIsIl9jYWxsZWUyIiwicmVqZWN0IiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwicG9zdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJfeDMiLCJfeDQiLCJfZGVjb2RlVHJhY2siLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImRlY29kZVRyYWNrIiwiX3g1IiwiaGFzIiwiZ3VpbGQiLCJkZXN0cm95IiwiY3JlYXRlTm9kZSIsImRlc3Ryb3lOb2RlIiwiX3VwZGF0ZVZvaWNlU3RhdGUiLCJfY2FsbGVlNCIsInVwZGF0ZSIsInBsYXllciIsIl9wbGF5ZXIkdm9pY2VTdGF0ZSIsInNlc3Npb25JZCIsIl9wbGF5ZXIkdm9pY2VTdGF0ZSRldiIsInRva2VuIiwiZW5kcG9pbnQiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJndWlsZF9pZCIsInZvaWNlU3RhdGUiLCJldmVudCIsInVwZGF0ZVBsYXllciIsImd1aWxkSWQiLCJ2b2ljZSIsInVzZXJfaWQiLCJjaGFubmVsX2lkIiwidm9pY2VDaGFubmVsIiwic2Vzc2lvbl9pZCIsImFzc2lnbiIsInVwZGF0ZVZvaWNlU3RhdGUiLCJfeDYiLCJUeXBlZEVtaXR0ZXIiLCJ5b3V0dWJlIiwic3BvdGlmeSIsImppb3NhYXZuIiwic291bmRjbG91ZCIsImRlZXplciIsInRpZGFsIiwiYXBwbGVtdXNpYyIsImJhbmRjYW1wIiwidGlrdG9rIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0cnVjdHVyZXMvTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yICovXG5pbXBvcnQge1xuXHRMb2FkVHlwZSxcblx0UGx1Z2luLFxuXHRTdHJ1Y3R1cmUsXG5cdFRyYWNrRGF0YSxcblx0VHJhY2tFbmRFdmVudCxcblx0VHJhY2tFeGNlcHRpb25FdmVudCxcblx0VHJhY2tTdGFydEV2ZW50LFxuXHRUcmFja1N0dWNrRXZlbnQsXG5cdFRyYWNrVXRpbHMsXG5cdFZvaWNlUGFja2V0LFxuXHRWb2ljZVNlcnZlcixcblx0V2ViU29ja2V0Q2xvc2VkRXZlbnQsXG59IGZyb20gXCIuL1V0aWxzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSBcIkBkaXNjb3JkanMvY29sbGVjdGlvblwiO1xuaW1wb3J0IHsgTm9kZSwgTm9kZU9wdGlvbnMgfSBmcm9tIFwiLi9Ob2RlXCI7XG5pbXBvcnQgeyBQbGF5ZXIsIFBsYXllck9wdGlvbnMsIFRyYWNrLCBVbnJlc29sdmVkVHJhY2sgfSBmcm9tIFwiLi9QbGF5ZXJcIjtcbmltcG9ydCB7IFZvaWNlU3RhdGUgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBtYW5hZ2VyQ2hlY2sgZnJvbSBcIi4uL1V0aWxzL01hbmFnZXJDaGVja1wiO1xuaW1wb3J0IHsgQ2xpZW50VXNlciwgVXNlciB9IGZyb20gXCJkaXNjb3JkLmpzXCI7XG5pbXBvcnQgeyBUeXBlZEVtaXR0ZXIgfSBmcm9tIFwidGlueS10eXBlZC1lbWl0dGVyXCI7XG5cbi8qKlxuICogVGhlIG1haW4gaHViIGZvciBpbnRlcmFjdGluZyB3aXRoIExhdmFsaW5rIGFuZCB1c2luZyBNYWdtYXN0cmVhbSxcbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZXIgZXh0ZW5kcyBUeXBlZEVtaXR0ZXI8TWFuYWdlckV2ZW50cz4ge1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfU09VUkNFUzogUmVjb3JkPFNlYXJjaFBsYXRmb3JtLCBzdHJpbmc+ID0ge1xuXHRcdFwieW91dHViZSBtdXNpY1wiOiBcInl0bXNlYXJjaFwiLFxuXHRcdHlvdXR1YmU6IFwieXRzZWFyY2hcIixcblx0XHRzcG90aWZ5OiBcInNwc2VhcmNoXCIsXG5cdFx0amlvc2Fhdm46IFwianNzZWFyY2hcIixcblx0XHRzb3VuZGNsb3VkOiBcInNjc2VhcmNoXCIsXG5cdFx0ZGVlemVyOiBcImR6c2VhcmNoXCIsXG5cdFx0dGlkYWw6IFwidGRzZWFyY2hcIixcblx0XHRhcHBsZW11c2ljOiBcImFtc2VhcmNoXCIsXG5cdFx0YmFuZGNhbXA6IFwiYmNzZWFyY2hcIixcblx0XHR0aWt0b2s6IFwidGlrdG9rXCIsXG5cdH07XG5cblx0LyoqIFRoZSBtYXAgb2YgcGxheWVycy4gKi9cblx0cHVibGljIHJlYWRvbmx5IHBsYXllcnMgPSBuZXcgQ29sbGVjdGlvbjxzdHJpbmcsIFBsYXllcj4oKTtcblx0LyoqIFRoZSBtYXAgb2Ygbm9kZXMuICovXG5cdHB1YmxpYyByZWFkb25seSBub2RlcyA9IG5ldyBDb2xsZWN0aW9uPHN0cmluZywgTm9kZT4oKTtcblx0LyoqIFRoZSBvcHRpb25zIHRoYXQgd2VyZSBzZXQuICovXG5cdHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBNYW5hZ2VyT3B0aW9ucztcblx0cHJpdmF0ZSBpbml0aWF0ZWQgPSBmYWxzZTtcblx0cHVibGljIGNhY2hlcyA9IG5ldyBDb2xsZWN0aW9uPHN0cmluZywgU2VhcmNoUmVzdWx0PigpO1xuXG5cdC8qKiBSZXR1cm5zIHRoZSBub2RlcyB0aGF0IGhhcyB0aGUgbGVhc3QgbG9hZC4gKi9cblx0cHVibGljIGdldCBsZWFzdExvYWROb2RlKCk6IENvbGxlY3Rpb248c3RyaW5nLCBOb2RlPiB7XG5cdFx0cmV0dXJuIHRoaXMubm9kZXNcblx0XHRcdC5maWx0ZXIoKG5vZGUpID0+IG5vZGUuY29ubmVjdGVkKVxuXHRcdFx0LnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdFx0Y29uc3QgYWxvYWQgPSBhLnN0YXRzLmNwdSA/IChhLnN0YXRzLmNwdS5sYXZhbGlua0xvYWQgLyBhLnN0YXRzLmNwdS5jb3JlcykgKiAxMDAgOiAwO1xuXHRcdFx0XHRjb25zdCBibG9hZCA9IGIuc3RhdHMuY3B1ID8gKGIuc3RhdHMuY3B1LmxhdmFsaW5rTG9hZCAvIGIuc3RhdHMuY3B1LmNvcmVzKSAqIDEwMCA6IDA7XG5cdFx0XHRcdHJldHVybiBhbG9hZCAtIGJsb2FkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0aGUgbm9kZXMgdGhhdCBoYXMgdGhlIGxlYXN0IGFtb3VudCBvZiBwbGF5ZXJzLiAqL1xuXHRwcml2YXRlIGdldCBsZWFzdFBsYXllcnNOb2RlKCk6IENvbGxlY3Rpb248c3RyaW5nLCBOb2RlPiB7XG5cdFx0cmV0dXJuIHRoaXMubm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLmNvbm5lY3RlZCkuc29ydCgoYSwgYikgPT4gYS5zdGF0cy5wbGF5ZXJzIC0gYi5zdGF0cy5wbGF5ZXJzKTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGEgbm9kZSBiYXNlZCBvbiBwcmlvcml0eS4gKi9cblx0cHJpdmF0ZSBnZXQgcHJpb3JpdHlOb2RlKCk6IE5vZGUge1xuXHRcdGNvbnN0IGZpbHRlcmVkTm9kZXMgPSB0aGlzLm5vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5jb25uZWN0ZWQgJiYgbm9kZS5vcHRpb25zLnByaW9yaXR5ID4gMCk7XG5cdFx0Y29uc3QgdG90YWxXZWlnaHQgPSBmaWx0ZXJlZE5vZGVzLnJlZHVjZSgodG90YWwsIG5vZGUpID0+IHRvdGFsICsgbm9kZS5vcHRpb25zLnByaW9yaXR5LCAwKTtcblx0XHRjb25zdCB3ZWlnaHRlZE5vZGVzID0gZmlsdGVyZWROb2Rlcy5tYXAoKG5vZGUpID0+ICh7XG5cdFx0XHRub2RlLFxuXHRcdFx0d2VpZ2h0OiBub2RlLm9wdGlvbnMucHJpb3JpdHkgLyB0b3RhbFdlaWdodCxcblx0XHR9KSk7XG5cdFx0Y29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5yYW5kb20oKTtcblxuXHRcdGxldCBjdW11bGF0aXZlV2VpZ2h0ID0gMDtcblxuXHRcdGZvciAoY29uc3QgeyBub2RlLCB3ZWlnaHQgfSBvZiB3ZWlnaHRlZE5vZGVzKSB7XG5cdFx0XHRjdW11bGF0aXZlV2VpZ2h0ICs9IHdlaWdodDtcblx0XHRcdGlmIChyYW5kb21OdW1iZXIgPD0gY3VtdWxhdGl2ZVdlaWdodCkge1xuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnVzZU5vZGUgPT09IFwibGVhc3RMb2FkXCIgPyB0aGlzLmxlYXN0TG9hZE5vZGUuZmlyc3QoKSA6IHRoaXMubGVhc3RQbGF5ZXJzTm9kZS5maXJzdCgpO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIG5vZGUgdG8gdXNlLiAqL1xuXHRwdWJsaWMgZ2V0IHVzZWFibGVOb2RlcygpOiBOb2RlIHtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnVzZVByaW9yaXR5ID8gdGhpcy5wcmlvcml0eU5vZGUgOiB0aGlzLm9wdGlvbnMudXNlTm9kZSA9PT0gXCJsZWFzdExvYWRcIiA/IHRoaXMubGVhc3RMb2FkTm9kZS5maXJzdCgpIDogdGhpcy5sZWFzdFBsYXllcnNOb2RlLmZpcnN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhdGVzIHRoZSBNYW5hZ2VyIGNsYXNzLlxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9uczogTWFuYWdlck9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0bWFuYWdlckNoZWNrKG9wdGlvbnMpO1xuXHRcdFN0cnVjdHVyZS5nZXQoXCJQbGF5ZXJcIikuaW5pdCh0aGlzKTtcblx0XHRTdHJ1Y3R1cmUuZ2V0KFwiTm9kZVwiKS5pbml0KHRoaXMpO1xuXHRcdFRyYWNrVXRpbHMuaW5pdCh0aGlzKTtcblx0XHRcblx0XHRpZiAob3B0aW9ucy50cmFja1BhcnRpYWwpIHtcblx0XHRcdFRyYWNrVXRpbHMuc2V0VHJhY2tQYXJ0aWFsKG9wdGlvbnMudHJhY2tQYXJ0aWFsKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zLnRyYWNrUGFydGlhbDtcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRwbHVnaW5zOiBbXSxcblx0XHRcdG5vZGVzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZGVudGlmaWVyOiBcImRlZmF1bHRcIixcblx0XHRcdFx0XHRob3N0OiBcImxvY2FsaG9zdFwiLFxuXHRcdFx0XHRcdHJlc3VtZVN0YXR1czogZmFsc2UsXG5cdFx0XHRcdFx0cmVzdW1lVGltZW91dDogMTAwMCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0XHRzaGFyZHM6IDEsXG5cdFx0XHRhdXRvUGxheTogdHJ1ZSxcblx0XHRcdHVzZVByaW9yaXR5OiBmYWxzZSxcblx0XHRcdGNsaWVudE5hbWU6IFwiRm9yIHYzLjBcIixcblx0XHRcdGRlZmF1bHRTZWFyY2hQbGF0Zm9ybTogXCJ5b3V0dWJlXCIsXG5cdFx0XHR1c2VOb2RlOiBcImxlYXN0UGxheWVyc1wiLFxuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wbHVnaW5zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgcGx1Z2luXSBvZiB0aGlzLm9wdGlvbnMucGx1Z2lucy5lbnRyaWVzKCkpIHtcblx0XHRcdFx0aWYgKCEocGx1Z2luIGluc3RhbmNlb2YgUGx1Z2luKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBsdWdpbiBhdCBpbmRleCAke2luZGV4fSBkb2VzIG5vdCBleHRlbmQgUGx1Z2luLmApO1xuXHRcdFx0XHRwbHVnaW4ubG9hZCh0aGlzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vZGVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGVPcHRpb25zIG9mIHRoaXMub3B0aW9ucy5ub2Rlcykge1xuXHRcdFx0XHRjb25zdCBub2RlID0gbmV3IChTdHJ1Y3R1cmUuZ2V0KFwiTm9kZVwiKSkobm9kZU9wdGlvbnMpO1xuXHRcdFx0XHR0aGlzLm5vZGVzLnNldChub2RlLm9wdGlvbnMuaWRlbnRpZmllciwgbm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuY2FjaGVzLmNsZWFyKCk7XG5cdFx0fSwgdGhpcy5vcHRpb25zLmNhY2hlcy50aW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWF0ZXMgdGhlIE1hbmFnZXIuXG5cdCAqIEBwYXJhbSBjbGllbnRJZFxuXHQgKi9cblx0cHVibGljIGluaXQoY2xpZW50SWQ/OiBzdHJpbmcpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5pbml0aWF0ZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICh0eXBlb2YgY2xpZW50SWQgIT09IFwidW5kZWZpbmVkXCIpIHRoaXMub3B0aW9ucy5jbGllbnRJZCA9IGNsaWVudElkO1xuXG5cdFx0aWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY2xpZW50SWQgIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcignXCJjbGllbnRJZFwiIHNldCBpcyBub3QgdHlwZSBvZiBcInN0cmluZ1wiJyk7XG5cblx0XHRpZiAoIXRoaXMub3B0aW9ucy5jbGllbnRJZCkgdGhyb3cgbmV3IEVycm9yKCdcImNsaWVudElkXCIgaXMgbm90IHNldC4gUGFzcyBpdCBpbiBNYW5hZ2VyI2luaXQoKSBvciBhcyBhIG9wdGlvbiBpbiB0aGUgY29uc3RydWN0b3IuJyk7XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ub2Rlcy52YWx1ZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bm9kZS5jb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhpcy5lbWl0KFwiTm9kZUVycm9yXCIsIG5vZGUsIGVycik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0aWF0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlYXJjaGVzIHRoZSBlbmFibGVkIHNvdXJjZXMgYmFzZWQgb2ZmIHRoZSBVUkwgb3IgdGhlIGBzb3VyY2VgIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcXVlcnlcblx0ICogQHBhcmFtIHJlcXVlc3RlclxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBzZWFyY2gocXVlcnk6IHN0cmluZyB8IFNlYXJjaFF1ZXJ5LCByZXF1ZXN0ZXI/OiBVc2VyIHwgQ2xpZW50VXNlcik6IFByb21pc2U8U2VhcmNoUmVzdWx0PiB7XG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMudXNlYWJsZU5vZGVzO1xuXG5cdFx0aWYgKCFub2RlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgbm9kZXMuXCIpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25zLmNhY2hlcy5lbmFibGVkICYmIHRoaXMub3B0aW9ucy5jYWNoZXMudGltZSA+IDAgJiYgdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRjb25zdCBkYXRhID0gdGhpcy5jYWNoZXMuZ2V0KHF1ZXJ5KTtcblx0XHRcdGlmIChkYXRhKSByZXR1cm4gZGF0YTtcblx0XHR9XG5cdFx0Y29uc3QgX3F1ZXJ5OiBTZWFyY2hRdWVyeSA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IHsgcXVlcnkgfSA6IHF1ZXJ5O1xuXHRcdGNvbnN0IF9zb3VyY2UgPSBNYW5hZ2VyLkRFRkFVTFRfU09VUkNFU1tfcXVlcnkuc291cmNlID8/IHRoaXMub3B0aW9ucy5kZWZhdWx0U2VhcmNoUGxhdGZvcm1dID8/IF9xdWVyeS5zb3VyY2U7XG5cdFx0bGV0IHNlYXJjaCA9IF9xdWVyeS5xdWVyeTtcblxuXHRcdGlmICghL15odHRwcz86XFwvXFwvLy50ZXN0KHNlYXJjaCkpIHtcblx0XHRcdHNlYXJjaCA9IGAke19zb3VyY2V9OiR7c2VhcmNofWA7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlcyA9IChhd2FpdCBub2RlLnJlc3QuZ2V0KGAvdjQvbG9hZHRyYWNrcz9pZGVudGlmaWVyPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaCl9YCkpIGFzIExhdmFsaW5rUmVzcG9uc2U7XG5cdFx0XHRpZiAoIXJlcykgdGhyb3cgbmV3IEVycm9yKFwiUXVlcnkgbm90IGZvdW5kLlwiKTtcblxuXHRcdFx0bGV0IHNlYXJjaERhdGEgPSBbXTtcblx0XHRcdGxldCBwbGF5bGlzdERhdGE6IFBsYXlsaXN0UmF3RGF0YSB8IHVuZGVmaW5lZDtcblxuXHRcdFx0c3dpdGNoIChyZXMubG9hZFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInNlYXJjaFwiOlxuXHRcdFx0XHRcdHNlYXJjaERhdGEgPSByZXMuZGF0YSBhcyBUcmFja0RhdGFbXTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwidHJhY2tcIjpcblx0XHRcdFx0XHRzZWFyY2hEYXRhID0gW3Jlcy5kYXRhIGFzIFRyYWNrRGF0YVtdXTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwicGxheWxpc3RcIjpcblx0XHRcdFx0XHRwbGF5bGlzdERhdGEgPSByZXMuZGF0YSBhcyBQbGF5bGlzdFJhd0RhdGE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRyYWNrcyA9IHNlYXJjaERhdGEubWFwKCh0cmFjaykgPT4gVHJhY2tVdGlscy5idWlsZCh0cmFjaywgcmVxdWVzdGVyKSk7XG5cdFx0XHRsZXQgcGxheWxpc3QgPSBudWxsO1xuXG5cdFx0XHRpZiAocmVzLmxvYWRUeXBlID09PSBcInBsYXlsaXN0XCIpIHtcblx0XHRcdFx0cGxheWxpc3QgPSB7XG5cdFx0XHRcdFx0bmFtZTogcGxheWxpc3REYXRhIS5pbmZvLm5hbWUsXG5cdFx0XHRcdFx0dHJhY2tzOiBwbGF5bGlzdERhdGEhLnRyYWNrcy5tYXAoKHRyYWNrKSA9PiBUcmFja1V0aWxzLmJ1aWxkKHRyYWNrLCByZXF1ZXN0ZXIpKSxcblx0XHRcdFx0XHRkdXJhdGlvbjogcGxheWxpc3REYXRhIS50cmFja3MucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgKGN1ci5pbmZvLmxlbmd0aCB8fCAwKSwgMCksXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdDogU2VhcmNoUmVzdWx0ID0ge1xuXHRcdFx0XHRsb2FkVHlwZTogcmVzLmxvYWRUeXBlLFxuXHRcdFx0XHR0cmFja3MsXG5cdFx0XHRcdHBsYXlsaXN0LFxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5yZXBsYWNlWW91VHViZUNyZWRlbnRpYWxzKSB7XG5cdFx0XHRcdGxldCB0cmFja3NUb1JlcGxhY2U6IFRyYWNrW10gPSBbXTtcblx0XHRcdFx0aWYgKHJlc3VsdC5sb2FkVHlwZSA9PT0gXCJwbGF5bGlzdFwiKSB7XG5cdFx0XHRcdFx0dHJhY2tzVG9SZXBsYWNlID0gcmVzdWx0LnBsYXlsaXN0LnRyYWNrcztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cmFja3NUb1JlcGxhY2UgPSByZXN1bHQudHJhY2tzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCB0cmFjayBvZiB0cmFja3NUb1JlcGxhY2UpIHtcblx0XHRcdFx0XHRpZiAoaXNZb3VUdWJlVVJMKHRyYWNrLnVyaSkpIHtcblx0XHRcdFx0XHRcdHRyYWNrLmF1dGhvciA9IHRyYWNrLmF1dGhvci5yZXBsYWNlKFwiLSBUb3BpY1wiLCBcIlwiKTtcblx0XHRcdFx0XHRcdHRyYWNrLnRpdGxlID0gdHJhY2sudGl0bGUucmVwbGFjZShcIlRvcGljIC1cIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0cmFjay50aXRsZS5pbmNsdWRlcyhcIi1cIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IFthdXRob3IsIHRpdGxlXSA9IHRyYWNrLnRpdGxlLnNwbGl0KFwiLVwiKS5tYXAoKHN0cjogc3RyaW5nKSA9PiBzdHIudHJpbSgpKTtcblx0XHRcdFx0XHRcdHRyYWNrLmF1dGhvciA9IGF1dGhvcjtcblx0XHRcdFx0XHRcdHRyYWNrLnRpdGxlID0gdGl0bGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLmNhY2hlcy5lbmFibGVkICYmIHRoaXMub3B0aW9ucy5jYWNoZXMudGltZSA+IDApIHRoaXMuY2FjaGVzLnNldChzZWFyY2gsIHJlc3VsdCk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNZb3VUdWJlVVJMKHVyaTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gdXJpLmluY2x1ZGVzKFwieW91dHViZS5jb21cIikgfHwgdXJpLmluY2x1ZGVzKFwieW91dHUuYmVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlY29kZXMgdGhlIGJhc2U2NCBlbmNvZGVkIHRyYWNrcyBhbmQgcmV0dXJucyBhIFRyYWNrRGF0YSBhcnJheS5cblx0ICogQHBhcmFtIHRyYWNrc1xuXHQgKi9cblx0cHVibGljIGRlY29kZVRyYWNrcyh0cmFja3M6IHN0cmluZ1tdKTogUHJvbWlzZTxUcmFja0RhdGFbXT4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyhyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVzLmZpcnN0KCk7XG5cdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgbm9kZXMuXCIpKTtcblx0XHRcdH1cblx0XG5cdFx0XHRhd2FpdCBub2RlLnJlc3QucG9zdChcIi92NC9kZWNvZGV0cmFja3NcIiwgSlNPTi5zdHJpbmdpZnkodHJhY2tzKSlcblx0XHRcdFx0LnRoZW4oKHJlcykgPT4ge1xuXHRcdFx0XHRcdGlmICghcmVzKSByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk5vIGRhdGEgcmV0dXJuZWQgZnJvbSBxdWVyeS5cIikpO1xuXHRcdFx0XHRcdHJlc29sdmUocmVzIGFzIFRyYWNrRGF0YVtdKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnIpID0+IHJlamVjdChlcnIpKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWNvZGVzIHRoZSBiYXNlNjQgZW5jb2RlZCB0cmFjayBhbmQgcmV0dXJucyBhIFRyYWNrRGF0YS5cblx0ICogQHBhcmFtIHRyYWNrXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZGVjb2RlVHJhY2sodHJhY2s6IHN0cmluZyk6IFByb21pc2U8VHJhY2tEYXRhPiB7XG5cdFx0Y29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWNvZGVUcmFja3MoW3RyYWNrXSk7XG5cdFx0cmV0dXJuIHJlc1swXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgcGxheWVyIG9yIHJldHVybnMgb25lIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0cHVibGljIGNyZWF0ZShvcHRpb25zOiBQbGF5ZXJPcHRpb25zKTogUGxheWVyIHtcblx0XHRpZiAodGhpcy5wbGF5ZXJzLmhhcyhvcHRpb25zLmd1aWxkKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGxheWVycy5nZXQob3B0aW9ucy5ndWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyAoU3RydWN0dXJlLmdldChcIlBsYXllclwiKSkob3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHBsYXllciBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG5cdCAqIEBwYXJhbSBndWlsZFxuXHQgKi9cblx0cHVibGljIGdldChndWlsZDogc3RyaW5nKTogUGxheWVyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5wbGF5ZXJzLmdldChndWlsZCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJveXMgYSBwbGF5ZXIgaWYgaXQgZXhpc3RzLlxuXHQgKiBAcGFyYW0gZ3VpbGRcblx0ICovXG5cdHB1YmxpYyBkZXN0cm95KGd1aWxkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnBsYXllcnMuZGVsZXRlKGd1aWxkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbm9kZSBvciByZXR1cm5zIG9uZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cblx0ICogQHBhcmFtIG9wdGlvbnNcblx0ICovXG5cdHB1YmxpYyBjcmVhdGVOb2RlKG9wdGlvbnM6IE5vZGVPcHRpb25zKTogTm9kZSB7XG5cdFx0aWYgKHRoaXMubm9kZXMuaGFzKG9wdGlvbnMuaWRlbnRpZmllciB8fCBvcHRpb25zLmhvc3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ub2Rlcy5nZXQob3B0aW9ucy5pZGVudGlmaWVyIHx8IG9wdGlvbnMuaG9zdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyAoU3RydWN0dXJlLmdldChcIk5vZGVcIikpKG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlc3Ryb3lzIGEgbm9kZSBpZiBpdCBleGlzdHMuXG5cdCAqIEBwYXJhbSBpZGVudGlmaWVyXG5cdCAqL1xuXHRwdWJsaWMgZGVzdHJveU5vZGUoaWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMubm9kZXMuZ2V0KGlkZW50aWZpZXIpO1xuXHRcdGlmICghbm9kZSkgcmV0dXJuO1xuXHRcdG5vZGUuZGVzdHJveSgpO1xuXHRcdHRoaXMubm9kZXMuZGVsZXRlKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbmRzIHZvaWNlIGRhdGEgdG8gdGhlIExhdmFsaW5rIHNlcnZlci5cblx0ICogQHBhcmFtIGRhdGFcblx0ICovXG5cdHB1YmxpYyBhc3luYyB1cGRhdGVWb2ljZVN0YXRlKGRhdGE6IFZvaWNlUGFja2V0IHwgVm9pY2VTZXJ2ZXIgfCBWb2ljZVN0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKFwidFwiIGluIGRhdGEgJiYgIVtcIlZPSUNFX1NUQVRFX1VQREFURVwiLCBcIlZPSUNFX1NFUlZFUl9VUERBVEVcIl0uaW5jbHVkZXMoZGF0YS50KSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdXBkYXRlID0gXCJkXCIgaW4gZGF0YSA/IGRhdGEuZCA6IGRhdGE7XG5cblx0XHRpZiAoIXVwZGF0ZSB8fCAoIShcInRva2VuXCIgaW4gdXBkYXRlKSAmJiAhKFwic2Vzc2lvbl9pZFwiIGluIHVwZGF0ZSkpKSByZXR1cm47XG5cblx0XHRjb25zdCBwbGF5ZXIgPSB0aGlzLnBsYXllcnMuZ2V0KHVwZGF0ZS5ndWlsZF9pZCk7XG5cblx0XHRpZiAoIXBsYXllcikgcmV0dXJuO1xuXHRcdGlmIChcInRva2VuXCIgaW4gdXBkYXRlKSB7XG5cdFx0XHRwbGF5ZXIudm9pY2VTdGF0ZS5ldmVudCA9IHVwZGF0ZTtcblxuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzZXNzaW9uSWQsXG5cdFx0XHRcdGV2ZW50OiB7IHRva2VuLCBlbmRwb2ludCB9LFxuXHRcdFx0fSA9IHBsYXllci52b2ljZVN0YXRlO1xuXG5cdFx0XHRhd2FpdCBwbGF5ZXIubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRcdGd1aWxkSWQ6IHBsYXllci5ndWlsZCxcblx0XHRcdFx0ZGF0YTogeyB2b2ljZTogeyB0b2tlbiwgZW5kcG9pbnQsIHNlc3Npb25JZCB9IH0sXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh1cGRhdGUudXNlcl9pZCAhPT0gdGhpcy5vcHRpb25zLmNsaWVudElkKSByZXR1cm47XG5cdFx0aWYgKHVwZGF0ZS5jaGFubmVsX2lkKSB7XG5cdFx0XHRpZiAocGxheWVyLnZvaWNlQ2hhbm5lbCAhPT0gdXBkYXRlLmNoYW5uZWxfaWQpIHtcblx0XHRcdFx0dGhpcy5lbWl0KFwiUGxheWVyTW92ZVwiLCBwbGF5ZXIsIHBsYXllci52b2ljZUNoYW5uZWwsIHVwZGF0ZS5jaGFubmVsX2lkKTtcblx0XHRcdH1cblxuXHRcdFx0cGxheWVyLnZvaWNlU3RhdGUuc2Vzc2lvbklkID0gdXBkYXRlLnNlc3Npb25faWQ7XG5cdFx0XHRwbGF5ZXIudm9pY2VDaGFubmVsID0gdXBkYXRlLmNoYW5uZWxfaWQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lbWl0KFwiUGxheWVyRGlzY29ubmVjdFwiLCBwbGF5ZXIsIHBsYXllci52b2ljZUNoYW5uZWwpO1xuXHRcdHBsYXllci52b2ljZUNoYW5uZWwgPSBudWxsO1xuXHRcdHBsYXllci52b2ljZVN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSk7XG5cdFx0cGxheWVyLmRlc3Ryb3koKTtcblx0XHRyZXR1cm47XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXlsb2FkIHtcblx0LyoqIFRoZSBPUCBjb2RlICovXG5cdG9wOiBudW1iZXI7XG5cdGQ6IHtcblx0XHRndWlsZF9pZDogc3RyaW5nO1xuXHRcdGNoYW5uZWxfaWQ6IHN0cmluZyB8IG51bGw7XG5cdFx0c2VsZl9tdXRlOiBib29sZWFuO1xuXHRcdHNlbGZfZGVhZjogYm9vbGVhbjtcblx0fTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VyT3B0aW9ucyB7XG5cdC8qKiBVc2UgcHJpb3JpdHkgbW9kZSBvdmVyIGxlYXN0IGFtb3VudCBvZiBwbGF5ZXIgb3IgbG9hZD8gKi9cblx0dXNlUHJpb3JpdHk/OiBib29sZWFuO1xuXHQvKiogVXNlIHRoZSBsZWFzdCBhbW91bnQgb2YgcGxheWVycyBvciBsZWFzdCBsb2FkPyAqL1xuXHR1c2VOb2RlPzogXCJsZWFzdExvYWRcIiB8IFwibGVhc3RQbGF5ZXJzXCI7XG5cdC8qKiBUaGUgYXJyYXkgb2Ygbm9kZXMgdG8gY29ubmVjdCB0by4gKi9cblx0bm9kZXM/OiBOb2RlT3B0aW9uc1tdO1xuXHQvKiogVGhlIGNsaWVudCBJRCB0byB1c2UuICovXG5cdGNsaWVudElkPzogc3RyaW5nO1xuXHQvKiogVmFsdWUgdG8gdXNlIGZvciB0aGUgYENsaWVudC1OYW1lYCBoZWFkZXIuICovXG5cdGNsaWVudE5hbWU/OiBzdHJpbmc7XG5cdC8qKiBUaGUgc2hhcmQgY291bnQuICovXG5cdHNoYXJkcz86IG51bWJlcjtcblx0LyoqIEEgYXJyYXkgb2YgcGx1Z2lucyB0byB1c2UuICovXG5cdHBsdWdpbnM/OiBQbHVnaW5bXTtcblx0LyoqIFdoZXRoZXIgcGxheWVycyBzaG91bGQgYXV0b21hdGljYWxseSBwbGF5IHRoZSBuZXh0IHNvbmcuICovXG5cdGF1dG9QbGF5PzogYm9vbGVhbjtcblx0LyoqIEFuIGFycmF5IG9mIHRyYWNrIHByb3BlcnRpZXMgdG8ga2VlcC4gYHRyYWNrYCB3aWxsIGFsd2F5cyBiZSBwcmVzZW50LiAqL1xuXHR0cmFja1BhcnRpYWw/OiBzdHJpbmdbXTtcblx0LyoqIFRoZSBkZWZhdWx0IHNlYXJjaCBwbGF0Zm9ybSB0byB1c2UsIGNhbiBiZSBcInlvdXR1YmVcIiwgXCJ5b3V0dWJlIG11c2ljXCIsIFwic291bmRjbG91ZFwiIG9yIGRlZXplci4gKi9cblx0ZGVmYXVsdFNlYXJjaFBsYXRmb3JtPzogU2VhcmNoUGxhdGZvcm07XG5cdC8qKiBXaGV0aGVyIHRoZSBZb3VUdWJlIHZpZGVvIHRpdGxlcyBzaG91bGQgYmUgcmVwbGFjZWQgaWYgdGhlIEF1dGhvciBkb2VzIG5vdCBleGFjdGx5IG1hdGNoLiAqL1xuXHRyZXBsYWNlWW91VHViZUNyZWRlbnRpYWxzPzogYm9vbGVhbjtcblx0Y2FjaGVzOiB7XG5cdFx0LyoqIFdoZXRoZXIgdG8gY2FjaGUgdGhlIHNlYXJjaCByZXN1bHRzLiAqL1xuXHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0LyoqIFRoZSB0aW1lIHRvIGNhY2hlIHRoZSBzZWFyY2ggcmVzdWx0cy4gKi9cblx0XHR0aW1lOiBudW1iZXI7XG5cdH1cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIHNlbmQgZGF0YSB0byB0aGUgd2Vic29ja2V0LlxuXHQgKiBAcGFyYW0gaWRcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICovXG5cdHNlbmQoaWQ6IHN0cmluZywgcGF5bG9hZDogUGF5bG9hZCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFNlYXJjaFBsYXRmb3JtID0gXCJkZWV6ZXJcIiB8IFwic291bmRjbG91ZFwiIHwgXCJ5b3V0dWJlIG11c2ljXCIgfCBcInlvdXR1YmVcIiB8IFwic3BvdGlmeVwiIHwgXCJqaW9zYWF2blwiIHwgXCJ0aWRhbFwiIHwgXCJhcHBsZW11c2ljXCIgfCBcImJhbmRjYW1wXCIgfCBcInRpa3Rva1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFF1ZXJ5IHtcblx0LyoqIFRoZSBzb3VyY2UgdG8gc2VhcmNoIGZyb20uICovXG5cdHNvdXJjZT86IFNlYXJjaFBsYXRmb3JtIHwgc3RyaW5nO1xuXHQvKiogVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuICovXG5cdHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF2YWxpbmtSZXNwb25zZSB7XG5cdGxvYWRUeXBlOiBMb2FkVHlwZTtcblx0ZGF0YTogVHJhY2tEYXRhW10gfCBQbGF5bGlzdFJhd0RhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcblx0LyoqIFRoZSBsb2FkIHR5cGUgb2YgdGhlIHJlc3VsdC4gKi9cblx0bG9hZFR5cGU6IExvYWRUeXBlO1xuXHQvKiogVGhlIGFycmF5IG9mIHRyYWNrcyBmcm9tIHRoZSByZXN1bHQuICovXG5cdHRyYWNrczogVHJhY2tbXTtcblx0LyoqIFRoZSBwbGF5bGlzdCBpbmZvIGlmIHRoZSBsb2FkIHR5cGUgaXMgJ3BsYXlsaXN0Jy4gKi9cblx0cGxheWxpc3Q/OiBQbGF5bGlzdERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheWxpc3RSYXdEYXRhIHtcblx0aW5mbzoge1xuXHRcdC8qKiBUaGUgcGxheWxpc3QgbmFtZS4gKi9cblx0XHRuYW1lOiBzdHJpbmc7XG5cdH07XG5cdC8qKiBBZGRpdGlvbiBpbmZvIHByb3ZpZGVkIGJ5IHBsdWdpbnMuICovXG5cdHBsdWdpbkluZm86IG9iamVjdDtcblx0LyoqIFRoZSB0cmFja3Mgb2YgdGhlIHBsYXlsaXN0ICovXG5cdHRyYWNrczogVHJhY2tEYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheWxpc3REYXRhIHtcblx0LyoqIFRoZSBwbGF5bGlzdCBuYW1lLiAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUgbGVuZ3RoIG9mIHRoZSBwbGF5bGlzdC4gKi9cblx0ZHVyYXRpb246IG51bWJlcjtcblx0LyoqIFRoZSBzb25ncyBvZiB0aGUgcGxheWxpc3QuICovXG5cdHRyYWNrczogVHJhY2tbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VyRXZlbnRzIHtcblx0Tm9kZUNyZWF0ZTogKG5vZGU6IE5vZGUpID0+IHZvaWQ7XG5cdE5vZGVEZXN0cm95OiAobm9kZTogTm9kZSkgPT4gdm9pZDtcblx0Tm9kZUNvbm5lY3Q6IChub2RlOiBOb2RlKSA9PiB2b2lkO1xuXHROb2RlUmVjb25uZWN0OiAobm9kZTogTm9kZSkgPT4gdm9pZDtcblx0Tm9kZURpc2Nvbm5lY3Q6IChub2RlOiBOb2RlLCByZWFzb246IHsgY29kZT86IG51bWJlcjsgcmVhc29uPzogc3RyaW5nIH0pID0+IHZvaWQ7XG5cdE5vZGVFcnJvcjogKG5vZGU6IE5vZGUsIGVycm9yOiBFcnJvcikgPT4gdm9pZDtcblx0Tm9kZVJhdzogKHBheWxvYWQ6IHVua25vd24pID0+IHZvaWQ7XG5cdFBsYXllckNyZWF0ZTogKHBsYXllcjogUGxheWVyKSA9PiB2b2lkO1xuXHRQbGF5ZXJEZXN0cm95OiAocGxheWVyOiBQbGF5ZXIpID0+IHZvaWQ7XG5cdFBsYXllclN0YXRlVXBkYXRlOiAob2xkUGxheWVyOiBQbGF5ZXIsIG5ld1BsYXllcjogUGxheWVyKSA9PiB2b2lkO1xuXHRQbGF5ZXJNb3ZlOiAocGxheWVyOiBQbGF5ZXIsIGluaXRDaGFubmVsOiBzdHJpbmcsIG5ld0NoYW5uZWw6IHN0cmluZykgPT4gdm9pZDtcblx0UGxheWVyRGlzY29ubmVjdDogKHBsYXllcjogUGxheWVyLCBvbGRDaGFubmVsOiBzdHJpbmcpID0+IHZvaWQ7XG5cdFF1ZXVlRW5kOiAocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjayB8IFVucmVzb2x2ZWRUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCkgPT4gdm9pZDtcblx0U29ja2V0Q2xvc2VkOiAocGxheWVyOiBQbGF5ZXIsIHBheWxvYWQ6IFdlYlNvY2tldENsb3NlZEV2ZW50KSA9PiB2b2lkO1xuXHRUcmFja1N0YXJ0OiAocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tTdGFydEV2ZW50KSA9PiB2b2lkO1xuXHRUcmFja0VuZDogKHBsYXllcjogUGxheWVyLCB0cmFjazogVHJhY2ssIHBheWxvYWQ6IFRyYWNrRW5kRXZlbnQpID0+IHZvaWQ7XG5cdFRyYWNrU3R1Y2s6IChwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrLCBwYXlsb2FkOiBUcmFja1N0dWNrRXZlbnQpID0+IHZvaWQ7XG5cdFRyYWNrRXJyb3I6IChwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrLCBwYXlsb2FkOiBUcmFja0V4Y2VwdGlvbkV2ZW50KSA9PiB2b2lkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFjQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFJQSxJQUFBRSxhQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBSSxpQkFBQSxHQUFBSixPQUFBO0FBQWtELFNBQUFHLHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLG9CQUFBLGtCQXBCbEQscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFSLENBQUEsU0FBQVMsQ0FBQSxFQUFBVCxDQUFBLE9BQUFVLENBQUEsR0FBQUMsTUFBQSxDQUFBSixTQUFBLEVBQUFLLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxjQUFBLEVBQUFWLENBQUEsR0FBQVEsTUFBQSxDQUFBRyxjQUFBLGNBQUFMLENBQUEsRUFBQVQsQ0FBQSxFQUFBVSxDQUFBLElBQUFELENBQUEsQ0FBQVQs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
|