Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

417 lines
45KB

  1. (self["webpackChunk"] = self["webpackChunk"] || []).push([["adminlte-index"],{
  2. /***/ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/app.index.js":
  3. /*!**********************************************************************************!*\
  4. !*** ../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/app.index.js ***!
  5. \**********************************************************************************/
  6. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7. "use strict";
  8. __webpack_require__.r(__webpack_exports__);
  9. /* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.js");
  10. /* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_index_js__WEBPACK_IMPORTED_MODULE_0__);
  11. /* harmony import */ var _index_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.scss */ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.scss");
  12. /***/ }),
  13. /***/ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.js":
  14. /*!******************************************************************************!*\
  15. !*** ../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.js ***!
  16. \******************************************************************************/
  17. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  18. __webpack_require__(/*! core-js/modules/es.date.to-string.js */ "./node_modules/core-js/modules/es.date.to-string.js");
  19. __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
  20. __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js");
  21. __webpack_require__(/*! core-js/modules/es.array.find.js */ "./node_modules/core-js/modules/es.array.find.js");
  22. __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ "./node_modules/core-js/modules/es.regexp.exec.js");
  23. __webpack_require__(/*! core-js/modules/es.string.split.js */ "./node_modules/core-js/modules/es.string.split.js");
  24. __webpack_require__(/*! core-js/modules/es.array.index-of.js */ "./node_modules/core-js/modules/es.array.index-of.js");
  25. __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js");
  26. __webpack_require__(/*! core-js/modules/es.array.join.js */ "./node_modules/core-js/modules/es.array.join.js");
  27. __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js");
  28. $(document).ready(function () {
  29. lcCrudIndexToggle();
  30. lcCrudIndexBatchActions();
  31. lcCrudIndexInitFilter();
  32. });
  33. function lcCrudIndexToggle() {
  34. var toggles = document.querySelectorAll('.custom-switch input[type="checkbox"]');
  35. for (i = 0; i < toggles.length; i++) {
  36. toggles[i].addEventListener('change', function () {
  37. var toggle = this;
  38. var newValue = this.checked;
  39. var oldValue = !newValue;
  40. var toggleUrl = this.closest('.custom-switch').dataset.url + "&newValue=" + newValue.toString();
  41. var toggleRequest = $.ajax({
  42. type: "POST",
  43. url: toggleUrl,
  44. data: {},
  45. dataType: 'json'
  46. });
  47. toggleRequest.done(function (response) {
  48. SovNotification.add('success', 'La propriété a bien été mise à jour.');
  49. });
  50. toggleRequest.fail(function () {
  51. toggle.checked = oldValue;
  52. toggle.disabled = true;
  53. toggle.closest('.checkbox-switch').classList.add('disabled');
  54. SovNotification.add('error', 'Une erreur est survenue.');
  55. });
  56. });
  57. }
  58. }
  59. function lcCrudIndexBatchActions() {
  60. var titleContent = $('.content-header-title > .title').html();
  61. $(document).on('click', '.deselect-batch-button', function () {
  62. $(this).closest('.content').find(':checkbox.form-batch-checkbox-all').prop('checked', false).trigger('change');
  63. });
  64. $(document).on('change', '.form-batch-checkbox-all', function () {
  65. $(this).closest('.content').find(':checkbox.form-batch-checkbox').prop('checked', $(this).prop('checked')).trigger('change');
  66. });
  67. $(document).on('change', '.form-batch-checkbox', function () {
  68. var $content = $(this).closest('.content-wrapper');
  69. var $input = $content.find(':hidden#batch_form_entityIds');
  70. var ids = $input.val() ? $input.val().split(',') : [];
  71. var id = $(this).val();
  72. if ($(this).prop('checked')) {
  73. $(this).closest('tr').addClass('selected-row');
  74. if (-1 === ids.indexOf(id)) {
  75. ids.push(id);
  76. }
  77. } else {
  78. $(this).closest('tr').removeClass('selected-row');
  79. ids = ids.filter(function (value) {
  80. return value !== id;
  81. });
  82. $content.find(':checkbox.form-batch-checkbox-all').prop('checked', false);
  83. }
  84. if (0 === ids.length) {
  85. $content.find('.global-actions').show();
  86. $content.find('.batch-actions').hide();
  87. $content.find('table').removeClass('table-batch');
  88. } else {
  89. $content.find('.batch-actions').show();
  90. $content.find('.global-actions').hide();
  91. $content.find('table').addClass('table-batch');
  92. }
  93. $input.val(ids.join(','));
  94. $content.find('.content-header-title > .title').html(0 === ids.length ? titleContent : '');
  95. });
  96. var modalTitle = $('#batch-action-confirmation-title');
  97. var titleContentWithPlaceholders = modalTitle.text();
  98. $('[data-action-batch]').on('click', function (event) {
  99. event.preventDefault();
  100. event.stopPropagation();
  101. var $actionElement = $(this);
  102. var actionName = $actionElement.attr('data-action-name');
  103. var selectedItems = $('input[type="checkbox"].form-batch-checkbox:checked');
  104. modalTitle.text(titleContentWithPlaceholders.replace('%action_name%', actionName).replace('%num_items%', selectedItems.length));
  105. $('#modal-batch-action').modal({
  106. backdrop: true,
  107. keyboard: true
  108. }).off('click', '#modal-batch-action-button').on('click', '#modal-batch-action-button', function () {
  109. $actionElement.unbind('click');
  110. $form = document.createElement('form');
  111. $form.setAttribute('action', $actionElement.attr('data-action-url'));
  112. $form.setAttribute('method', 'POST');
  113. $actionNameInput = document.createElement('input');
  114. $actionNameInput.setAttribute('type', 'hidden');
  115. $actionNameInput.setAttribute('name', 'batchActionName');
  116. $actionNameInput.setAttribute('value', $actionElement.attr('data-action-name'));
  117. $form.appendChild($actionNameInput);
  118. $entityFqcnInput = document.createElement('input');
  119. $entityFqcnInput.setAttribute('type', 'hidden');
  120. $entityFqcnInput.setAttribute('name', 'entityFqcn');
  121. $entityFqcnInput.setAttribute('value', $actionElement.attr('data-entity-fqcn'));
  122. $form.appendChild($entityFqcnInput);
  123. $actionUrlInput = document.createElement('input');
  124. $actionUrlInput.setAttribute('type', 'hidden');
  125. $actionUrlInput.setAttribute('name', 'batchActionUrl');
  126. $actionUrlInput.setAttribute('value', $actionElement.attr('data-action-url'));
  127. $form.appendChild($actionUrlInput);
  128. $csrfTokenInput = document.createElement('input');
  129. $csrfTokenInput.setAttribute('type', 'hidden');
  130. $csrfTokenInput.setAttribute('name', 'batchActionCsrfToken');
  131. $csrfTokenInput.setAttribute('value', $actionElement.attr('data-action-csrf-token'));
  132. $form.appendChild($csrfTokenInput);
  133. selectedItems.each(function (i, item) {
  134. $entityIdInput = document.createElement('input');
  135. $entityIdInput.setAttribute('type', 'hidden');
  136. $entityIdInput.setAttribute('name', "batchActionEntityIds[".concat(i, "]"));
  137. $entityIdInput.setAttribute('value', item.value);
  138. $form.appendChild($entityIdInput);
  139. });
  140. document.body.appendChild($form); //modalTitle.text(titleContentWithPlaceholders);
  141. $form.submit();
  142. });
  143. });
  144. }
  145. function lcCrudIndexInitFilter() {
  146. $('#filters_form_reset').val('');
  147. $('.lc-reset-filters').on('click', function (e) {
  148. //e.preventDefault();
  149. $(this).parents('.table-filters-line').find('select,input').val('').trigger('change');
  150. $('#filters_form_reset').val('clearAll');
  151. Tools.log($(this).prop('form'));
  152. $(this).prop('form').submit(); //$(this).parents('form').submit();
  153. });
  154. }
  155. /***/ }),
  156. /***/ "./node_modules/core-js/internals/array-method-is-strict.js":
  157. /*!******************************************************************!*\
  158. !*** ./node_modules/core-js/internals/array-method-is-strict.js ***!
  159. \******************************************************************/
  160. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  161. "use strict";
  162. var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
  163. module.exports = function (METHOD_NAME, argument) {
  164. var method = [][METHOD_NAME];
  165. return !!method && fails(function () {
  166. // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing
  167. method.call(null, argument || function () { throw 1; }, 1);
  168. });
  169. };
  170. /***/ }),
  171. /***/ "./node_modules/core-js/internals/classof.js":
  172. /*!***************************************************!*\
  173. !*** ./node_modules/core-js/internals/classof.js ***!
  174. \***************************************************/
  175. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  176. var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js");
  177. var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");
  178. var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
  179. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  180. // ES3 wrong here
  181. var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
  182. // fallback for IE11 Script Access Denied error
  183. var tryGet = function (it, key) {
  184. try {
  185. return it[key];
  186. } catch (error) { /* empty */ }
  187. };
  188. // getting tag from ES6+ `Object.prototype.toString`
  189. module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  190. var O, tag, result;
  191. return it === undefined ? 'Undefined' : it === null ? 'Null'
  192. // @@toStringTag case
  193. : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
  194. // builtinTag case
  195. : CORRECT_ARGUMENTS ? classofRaw(O)
  196. // ES3 arguments fallback
  197. : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
  198. };
  199. /***/ }),
  200. /***/ "./node_modules/core-js/internals/object-to-string.js":
  201. /*!************************************************************!*\
  202. !*** ./node_modules/core-js/internals/object-to-string.js ***!
  203. \************************************************************/
  204. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  205. "use strict";
  206. var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js");
  207. var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js/internals/classof.js");
  208. // `Object.prototype.toString` method implementation
  209. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  210. module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
  211. return '[object ' + classof(this) + ']';
  212. };
  213. /***/ }),
  214. /***/ "./node_modules/core-js/internals/to-string-tag-support.js":
  215. /*!*****************************************************************!*\
  216. !*** ./node_modules/core-js/internals/to-string-tag-support.js ***!
  217. \*****************************************************************/
  218. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  219. var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
  220. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  221. var test = {};
  222. test[TO_STRING_TAG] = 'z';
  223. module.exports = String(test) === '[object z]';
  224. /***/ }),
  225. /***/ "./node_modules/core-js/modules/es.array.index-of.js":
  226. /*!***********************************************************!*\
  227. !*** ./node_modules/core-js/modules/es.array.index-of.js ***!
  228. \***********************************************************/
  229. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  230. "use strict";
  231. /* eslint-disable es/no-array-prototype-indexof -- required for testing */
  232. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  233. var $indexOf = __webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js/internals/array-includes.js").indexOf;
  234. var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ "./node_modules/core-js/internals/array-method-is-strict.js");
  235. var nativeIndexOf = [].indexOf;
  236. var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;
  237. var STRICT_METHOD = arrayMethodIsStrict('indexOf');
  238. // `Array.prototype.indexOf` method
  239. // https://tc39.es/ecma262/#sec-array.prototype.indexof
  240. $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {
  241. indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
  242. return NEGATIVE_ZERO
  243. // convert -0 to +0
  244. ? nativeIndexOf.apply(this, arguments) || 0
  245. : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);
  246. }
  247. });
  248. /***/ }),
  249. /***/ "./node_modules/core-js/modules/es.array.join.js":
  250. /*!*******************************************************!*\
  251. !*** ./node_modules/core-js/modules/es.array.join.js ***!
  252. \*******************************************************/
  253. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  254. "use strict";
  255. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  256. var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js");
  257. var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");
  258. var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ "./node_modules/core-js/internals/array-method-is-strict.js");
  259. var nativeJoin = [].join;
  260. var ES3_STRINGS = IndexedObject != Object;
  261. var STRICT_METHOD = arrayMethodIsStrict('join', ',');
  262. // `Array.prototype.join` method
  263. // https://tc39.es/ecma262/#sec-array.prototype.join
  264. $({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {
  265. join: function join(separator) {
  266. return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);
  267. }
  268. });
  269. /***/ }),
  270. /***/ "./node_modules/core-js/modules/es.object.to-string.js":
  271. /*!*************************************************************!*\
  272. !*** ./node_modules/core-js/modules/es.object.to-string.js ***!
  273. \*************************************************************/
  274. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  275. var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js");
  276. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  277. var toString = __webpack_require__(/*! ../internals/object-to-string */ "./node_modules/core-js/internals/object-to-string.js");
  278. // `Object.prototype.toString` method
  279. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  280. if (!TO_STRING_TAG_SUPPORT) {
  281. redefine(Object.prototype, 'toString', toString, { unsafe: true });
  282. }
  283. /***/ }),
  284. /***/ "./node_modules/core-js/modules/es.regexp.to-string.js":
  285. /*!*************************************************************!*\
  286. !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***!
  287. \*************************************************************/
  288. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  289. "use strict";
  290. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  291. var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
  292. var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
  293. var flags = __webpack_require__(/*! ../internals/regexp-flags */ "./node_modules/core-js/internals/regexp-flags.js");
  294. var TO_STRING = 'toString';
  295. var RegExpPrototype = RegExp.prototype;
  296. var nativeToString = RegExpPrototype[TO_STRING];
  297. var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
  298. // FF44- RegExp#toString has a wrong name
  299. var INCORRECT_NAME = nativeToString.name != TO_STRING;
  300. // `RegExp.prototype.toString` method
  301. // https://tc39.es/ecma262/#sec-regexp.prototype.tostring
  302. if (NOT_GENERIC || INCORRECT_NAME) {
  303. redefine(RegExp.prototype, TO_STRING, function toString() {
  304. var R = anObject(this);
  305. var p = String(R.source);
  306. var rf = R.flags;
  307. var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);
  308. return '/' + p + '/' + f;
  309. }, { unsafe: true });
  310. }
  311. /***/ }),
  312. /***/ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.scss":
  313. /*!********************************************************************************!*\
  314. !*** ../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.scss ***!
  315. \********************************************************************************/
  316. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  317. "use strict";
  318. __webpack_require__.r(__webpack_exports__);
  319. // extracted by mini-css-extract-plugin
  320. /***/ })
  321. },
  322. /******/ __webpack_require__ => { // webpackRuntimeModules
  323. /******/ "use strict";
  324. /******/
  325. /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
  326. /******/ __webpack_require__.O(0, ["vendors-node_modules_core-js_internals_export_js","vendors-node_modules_core-js_modules_es_string_replace_js","vendors-node_modules_core-js_modules_es_array_filter_js-node_modules_core-js_modules_es_array-ca58f0"], () => (__webpack_exec__("../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/app.index.js")));
  327. /******/ var __webpack_exports__ = __webpack_require__.O();
  328. /******/ }
  329. ]);
  330. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vTGFDbGljQnVuZGxlL1NvdkJ1bmRsZS9SZXNvdXJjZXMvYXNzZXRzL2FwcC9hZG1pbmx0ZS9pbmRleC9hcHAuaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL0xhQ2xpY0J1bmRsZS9Tb3ZCdW5kbGUvUmVzb3VyY2VzL2Fzc2V0cy9hcHAvYWRtaW5sdGUvaW5kZXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uLi9MYUNsaWNCdW5kbGUvU292QnVuZGxlL1Jlc291cmNlcy9hc3NldHMvYXBwL2FkbWlubHRlL2luZGV4L2luZGV4LnNjc3MiXSwibmFtZXMiOlsiJCIsImRvY3VtZW50IiwicmVhZHkiLCJsY0NydWRJbmRleFRvZ2dsZSIsImxjQ3J1ZEluZGV4QmF0Y2hBY3Rpb25zIiwibGNDcnVkSW5kZXhJbml0RmlsdGVyIiwidG9nZ2xlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpIiwibGVuZ3RoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInRvZ2dsZSIsIm5ld1ZhbHVlIiwiY2hlY2tlZCIsIm9sZFZhbHVlIiwidG9nZ2xlVXJsIiwiY2xvc2VzdCIsImRhdGFzZXQiLCJ1cmwiLCJ0b1N0cmluZyIsInRvZ2dsZVJlcXVlc3QiLCJhamF4IiwidHlwZSIsImRhdGEiLCJkYXRhVHlwZSIsImRvbmUiLCJyZXNwb25zZSIsIlNvdk5vdGlmaWNhdGlvbiIsImFkZCIsImZhaWwiLCJkaXNhYmxlZCIsImNsYXNzTGlzdCIsInRpdGxlQ29udGVudCIsImh0bWwiLCJvbiIsImZpbmQiLCJwcm9wIiwidHJpZ2dlciIsIiRjb250ZW50IiwiJGlucHV0IiwiaWRzIiwidmFsIiwic3BsaXQiLCJpZCIsImFkZENsYXNzIiwiaW5kZXhPZiIsInB1c2giLCJyZW1vdmVDbGFzcyIsImZpbHRlciIsInZhbHVlIiwic2hvdyIsImhpZGUiLCJqb2luIiwibW9kYWxUaXRsZSIsInRpdGxlQ29udGVudFdpdGhQbGFjZWhvbGRlcnMiLCJ0ZXh0IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIiRhY3Rpb25FbGVtZW50IiwiYWN0aW9uTmFtZSIsImF0dHIiLCJzZWxlY3RlZEl0ZW1zIiwicmVwbGFjZSIsIm1vZGFsIiwiYmFja2Ryb3AiLCJrZXlib2FyZCIsIm9mZiIsInVuYmluZCIsIiRmb3JtIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIiRhY3Rpb25OYW1lSW5wdXQiLCJhcHBlbmRDaGlsZCIsIiRlbnRpdHlGcWNuSW5wdXQiLCIkYWN0aW9uVXJsSW5wdXQiLCIkY3NyZlRva2VuSW5wdXQiLCJlYWNoIiwiaXRlbSIsIiRlbnRpdHlJZElucHV0IiwiYm9keSIsInN1Ym1pdCIsImUiLCJwYXJlbnRzIiwiVG9vbHMiLCJsb2ciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQTs7Ozs7Ozs7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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsR0FBRyxlQUFlO0FBQ3JCOzs7Ozs7Ozs7Ozs7O0FDeEJBIiwiZmlsZSI6ImFkbWlubHRlLWluZGV4LmMwNWU5ZWJhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgJy4vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcyciLCJcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgbGNDcnVkSW5kZXhUb2dnbGUoKSA7XG4gICAgbGNDcnVkSW5kZXhCYXRjaEFjdGlvbnMoKSA7XG4gICAgbGNDcnVkSW5kZXhJbml0RmlsdGVyKCk7XG59KSA7XG5cbmZ1bmN0aW9uIGxjQ3J1ZEluZGV4VG9nZ2xlKCkge1xuICAgIGNvbnN0IHRvZ2dsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3VzdG9tLXN3aXRjaCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdG9nZ2xlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b2dnbGVzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gIW5ld1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdG9nZ2xlVXJsID0gdGhpcy5jbG9zZXN0KCcuY3VzdG9tLXN3aXRjaCcpLmRhdGFzZXQudXJsICsgXCImbmV3VmFsdWU9XCIgKyBuZXdWYWx1ZS50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBsZXQgdG9nZ2xlUmVxdWVzdCA9ICQuYWpheCh7dHlwZTogXCJQT1NUXCIsIHVybDogdG9nZ2xlVXJsLCBkYXRhOiB7fSwgZGF0YVR5cGU6ICdqc29uJ30pO1xuXG4gICAgICAgICAgICB0b2dnbGVSZXF1ZXN0LmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgU292Tm90aWZpY2F0aW9uLmFkZCgnc3VjY2VzcycsICdMYSBwcm9wcmnDqXTDqSBhIGJpZW4gw6l0w6kgbWlzZSDDoCBqb3VyLicpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVJlcXVlc3QuZmFpbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLmNoZWNrZWQgPSBvbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0b2dnbGUuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5jbG9zZXN0KCcuY2hlY2tib3gtc3dpdGNoJykuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICBTb3ZOb3RpZmljYXRpb24uYWRkKCdlcnJvcicsICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxjQ3J1ZEluZGV4QmF0Y2hBY3Rpb25zKCkge1xuICAgIGNvbnN0IHRpdGxlQ29udGVudCA9ICQoJy5jb250ZW50LWhlYWRlci10aXRsZSA+IC50aXRsZScpLmh0bWwoKTtcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmRlc2VsZWN0LWJhdGNoLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuY29udGVudCcpLmZpbmQoJzpjaGVja2JveC5mb3JtLWJhdGNoLWNoZWNrYm94LWFsbCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfSk7XG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcuZm9ybS1iYXRjaC1jaGVja2JveC1hbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQodGhpcykuY2xvc2VzdCgnLmNvbnRlbnQnKS5maW5kKCc6Y2hlY2tib3guZm9ybS1iYXRjaC1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnKSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfSk7XG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcuZm9ybS1iYXRjaC1jaGVja2JveCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgJGNvbnRlbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5jb250ZW50LXdyYXBwZXInKTtcbiAgICAgICAgbGV0ICRpbnB1dCA9ICRjb250ZW50LmZpbmQoJzpoaWRkZW4jYmF0Y2hfZm9ybV9lbnRpdHlJZHMnKTtcbiAgICAgICAgbGV0IGlkcyA9ICRpbnB1dC52YWwoKSA/ICRpbnB1dC52YWwoKS5zcGxpdCgnLCcpIDogW107XG4gICAgICAgIGNvbnN0IGlkID0gJCh0aGlzKS52YWwoKTtcblxuICAgICAgICBpZiAoJCh0aGlzKS5wcm9wKCdjaGVja2VkJykpIHtcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5hZGRDbGFzcygnc2VsZWN0ZWQtcm93Jyk7XG4gICAgICAgICAgICBpZiAoLTEgPT09IGlkcy5pbmRleE9mKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQtcm93Jyk7XG4gICAgICAgICAgICBpZHMgPSBpZHMuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJGNvbnRlbnQuZmluZCgnOmNoZWNrYm94LmZvcm0tYmF0Y2gtY2hlY2tib3gtYWxsJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgwID09PSBpZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAkY29udGVudC5maW5kKCcuZ2xvYmFsLWFjdGlvbnMnKS5zaG93KCk7XG4gICAgICAgICAgICAkY29udGVudC5maW5kKCcuYmF0Y2gtYWN0aW9ucycpLmhpZGUoKTtcbiAgICAgICAgICAgICRjb250ZW50LmZpbmQoJ3RhYmxlJykucmVtb3ZlQ2xhc3MoJ3RhYmxlLWJhdGNoJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkY29udGVudC5maW5kKCcuYmF0Y2gtYWN0aW9ucycpLnNob3coKTtcbiAgICAgICAgICAgICRjb250ZW50LmZpbmQoJy5nbG9iYWwtYWN0aW9ucycpLmhpZGUoKTtcbiAgICAgICAgICAgICRjb250ZW50LmZpbmQoJ3RhYmxlJykuYWRkQ2xhc3MoJ3RhYmxlLWJhdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkaW5wdXQudmFsKGlkcy5qb2luKCcsJykpO1xuICAgICAgICAkY29udGVudC5maW5kKCcuY29udGVudC1oZWFkZXItdGl0bGUgPiAudGl0bGUnKS5odG1sKDAgPT09IGlkcy5sZW5ndGggPyB0aXRsZUNvbnRlbnQgOiAnJyk7XG4gICAgfSk7XG5cbiAgICBsZXQgbW9kYWxUaXRsZSA9ICQoJyNiYXRjaC1hY3Rpb24tY29uZmlybWF0aW9uLXRpdGxlJyk7XG4gICAgY29uc3QgdGl0bGVDb250ZW50V2l0aFBsYWNlaG9sZGVycyA9IG1vZGFsVGl0bGUudGV4dCgpO1xuXG4gICAgJCgnW2RhdGEtYWN0aW9uLWJhdGNoXScpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgbGV0ICRhY3Rpb25FbGVtZW50ID0gJCh0aGlzKTtcblxuICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gJGFjdGlvbkVsZW1lbnQuYXR0cignZGF0YS1hY3Rpb24tbmFtZScpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gJCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmZvcm0tYmF0Y2gtY2hlY2tib3g6Y2hlY2tlZCcpO1xuICAgICAgICBtb2RhbFRpdGxlLnRleHQodGl0bGVDb250ZW50V2l0aFBsYWNlaG9sZGVyc1xuICAgICAgICAgICAgLnJlcGxhY2UoJyVhY3Rpb25fbmFtZSUnLCBhY3Rpb25OYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoJyVudW1faXRlbXMlJywgc2VsZWN0ZWRJdGVtcy5sZW5ndGgpKTtcblxuICAgICAgICAkKCcjbW9kYWwtYmF0Y2gtYWN0aW9uJykubW9kYWwoe2JhY2tkcm9wOiB0cnVlLCBrZXlib2FyZDogdHJ1ZX0pXG4gICAgICAgICAgICAub2ZmKCdjbGljaycsICcjbW9kYWwtYmF0Y2gtYWN0aW9uLWJ1dHRvbicpXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgJyNtb2RhbC1iYXRjaC1hY3Rpb24tYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICRhY3Rpb25FbGVtZW50LnVuYmluZCgnY2xpY2snKTtcblxuICAgICAgICAgICAgICAgICRmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuICAgICAgICAgICAgICAgICRmb3JtLnNldEF0dHJpYnV0ZSgnYWN0aW9uJywgJGFjdGlvbkVsZW1lbnQuYXR0cignZGF0YS1hY3Rpb24tdXJsJykpO1xuICAgICAgICAgICAgICAgICRmb3JtLnNldEF0dHJpYnV0ZSgnbWV0aG9kJywgJ1BPU1QnKTtcblxuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2JhdGNoQWN0aW9uTmFtZScpO1xuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsICRhY3Rpb25FbGVtZW50LmF0dHIoJ2RhdGEtYWN0aW9uLW5hbWUnKSk7XG4gICAgICAgICAgICAgICAgJGZvcm0uYXBwZW5kQ2hpbGQoJGFjdGlvbk5hbWVJbnB1dCk7XG5cbiAgICAgICAgICAgICAgICAkZW50aXR5RnFjbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAkZW50aXR5RnFjbklucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAkZW50aXR5RnFjbklucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsICdlbnRpdHlGcWNuJyk7XG4gICAgICAgICAgICAgICAgJGVudGl0eUZxY25JbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJGFjdGlvbkVsZW1lbnQuYXR0cignZGF0YS1lbnRpdHktZnFjbicpKTtcbiAgICAgICAgICAgICAgICAkZm9ybS5hcHBlbmRDaGlsZCgkZW50aXR5RnFjbklucHV0KTtcblxuICAgICAgICAgICAgICAgICRhY3Rpb25VcmxJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgJGFjdGlvblVybElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAkYWN0aW9uVXJsSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2JhdGNoQWN0aW9uVXJsJyk7XG4gICAgICAgICAgICAgICAgJGFjdGlvblVybElucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAkYWN0aW9uRWxlbWVudC5hdHRyKCdkYXRhLWFjdGlvbi11cmwnKSk7XG4gICAgICAgICAgICAgICAgJGZvcm0uYXBwZW5kQ2hpbGQoJGFjdGlvblVybElucHV0KTtcblxuICAgICAgICAgICAgICAgICRjc3JmVG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgJGNzcmZUb2tlbklucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAkY3NyZlRva2VuSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2JhdGNoQWN0aW9uQ3NyZlRva2VuJyk7XG4gICAgICAgICAgICAgICAgJGNzcmZUb2tlbklucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAkYWN0aW9uRWxlbWVudC5hdHRyKCdkYXRhLWFjdGlvbi1jc3JmLXRva2VuJykpO1xuICAgICAgICAgICAgICAgICRmb3JtLmFwcGVuZENoaWxkKCRjc3JmVG9rZW5JbnB1dCk7XG5cbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmVhY2goKGksIGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJGVudGl0eUlkSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICAkZW50aXR5SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICRlbnRpdHlJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGBiYXRjaEFjdGlvbkVudGl0eUlkc1ske2l9XWApO1xuICAgICAgICAgICAgICAgICAgICAkZW50aXR5SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICRmb3JtLmFwcGVuZENoaWxkKCRlbnRpdHlJZElucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoJGZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy9tb2RhbFRpdGxlLnRleHQodGl0bGVDb250ZW50V2l0aFBsYWNlaG9sZGVycyk7XG4gICAgICAgICAgICAgICAgJGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbGNDcnVkSW5kZXhJbml0RmlsdGVyKCkge1xuICAgICQoJyNmaWx0ZXJzX2Zvcm1fcmVzZXQnKS52YWwoJycpO1xuXG4gICAgJCgnLmxjLXJlc2V0LWZpbHRlcnMnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcudGFibGUtZmlsdGVycy1saW5lJykuZmluZCgnc2VsZWN0LGlucHV0JykudmFsKCcnKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgJCgnI2ZpbHRlcnNfZm9ybV9yZXNldCcpLnZhbCgnY2xlYXJBbGwnKTtcbiAgICAgICAgVG9vbHMubG9nKCQodGhpcykucHJvcCgnZm9ybScpKTtcbiAgICAgICAgJCh0aGlzKS5wcm9wKCdmb3JtJykuc3VibWl0KCk7XG4gICAgICAgIC8vJCh0aGlzKS5wYXJlbnRzKCdmb3JtJykuc3VibWl0KCk7XG4gICAgfSlcblxufSIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsLG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHRocm93IDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnaW5kZXhPZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogTkVHQVRJVkVfWkVSTyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyBuYXRpdmVJbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IFtdLmpvaW47XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT0gT2JqZWN0O1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmpvaW5cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEVTM19TVFJJTkdTIHx8ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbmF0aXZlSm9pbi5jYWxsKHRvSW5kZXhlZE9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgcmVkZWZpbmUoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBmbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBuYXRpdmVUb1N0cmluZy5uYW1lICE9IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwID0gU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgcmYgPSBSLmZsYWdzO1xuICAgIHZhciBmID0gU3RyaW5nKHJmID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGZsYWdzLmNhbGwoUikgOiByZik7XG4gICAgcmV0dXJuICcvJyArIHAgKyAnLycgKyBmO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyJdLCJzb3VyY2VSb290IjoiIn0=