PageSourceSearch

https://www.xanten.de/themes/custom/m190_www_theme/js/base.js?tluvz3

js xanten.de collected 2026-09-24 22:25:20 UTC 3,099,013 bytes, 24,510 lines download raw bytes

1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2(function (global){(function (){
3"use strict";
4
5var _stickybits = _interopRequireDefault(require("./polyfills/stickybits.js"));
6
7var _lazysizes = _interopRequireDefault(require("lazysizes"));
8
9require("lazysizes/plugins/native-loading/ls.native-loading");
10
11var _pxEasyExpand = _interopRequireDefault(require("./modules/pxEasyExpand.js"));
12
13var _webcam = _interopRequireDefault(require("./modules/webcam.js"));
14
15var _swiper = _interopRequireDefault(require("./modules/swiper.js"));
16
17var _leaflet = _interopRequireDefault(require("./modules/leaflet/leaflet.js"));
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21(function (l) {
22  var i,
23      s = {
24    touchend: function touchend() {}
25  };
26
27  for (i in s) {
28    l.addEventListener(i, s);
29  }
30})(document);
31
32global.ready = function (fn) {
33  if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading") {
34    fn();
35  } else {
36    document.addEventListener('DOMContentLoaded', fn);
37  }
38};
39
40require('./scripts/high-contrast-mode.js');
41
42global.createElement = function (domString) {
43  return new DOMParser().parseFromString(domString, 'text/html').body.firstChild;
44};
45
46global.hasParent = function (el, selector) {
47  if (el) {
48    do {
49      if (el == document.querySelector(selector)) {
50        return true;
51      }
52
53      if (el.nodeType === 9) {
54        break;
55      }
56    } while (el = el.parentNode);
57  }
58
59  return false;
60};
61
62ready(function () {
63  (0, _stickybits.default)('.nav-trail', {
64    useStickyClasses: true
65  });
66});
67_lazysizes.default.cfg.nativeLoading = {
68  setLoadingAttribute: true,
69  disableListeners: {
70    scroll: true
71  }
72};
73_lazysizes.default.cfg.lazyClass = 'js-load';
74_lazysizes.default.cfg.loadingClass = 'js-loading';
75_lazysizes.default.cfg.loadedClass = 'js-loaded';
76_lazysizes.default.cfg.autosizesClass = 'js-autosizes';
77
78require('./partials/scrollstart.js');
79
80require('./partials/lightbox.js');
81
82require('./modules/mmenu.js');
83
84require('./partials/mmenu.js');
85
86global.pxEasyExpand = _pxEasyExpand.default;
87
88require('./partials/hamburger.js');
89
90require('./partials/searchform.js');
91
92require('./partials/meta.js');
93
94require('./partials/toggle.js');
95
96require('./partials/form-infobutton.js');
97
98ready(function () {
99  var webcam = new _webcam.default('.webcam');
100});
101global.Swiper = _swiper.default;
102
103require('./partials/swiper.js');
104
105require('./modules/leaflet/leaflet.control.fullscreen.js');
106
107require('./modules/leaflet/leaflet.sleep.js');
108
109require('./scripts/leaflet.js');
110
111ready(function () {
112  var mapCE = document.querySelectorAll('.a5-map:not([data-consent-ready])');
113
114  for (var i = 0; i < mapCE.length; i++) {
115    window.initLeaflet(mapCE[i]);
116  }
117});
118
119require('./scripts/leaflet-extended.js');
120
121ready(function () {
122  var mapCE = document.querySelectorAll('.a5-map-with-marker:not([data-consent-ready])');
123
124  for (var i = 0; i < mapCE.length; i++) {
125    window.initLeafletExtended(mapCE[i]);
126  }
127});
128
129}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
130
131},{"./modules/leaflet/leaflet.control.fullscreen.js":3,"./modules/leaflet/leaflet.js":4,"./modules/leaflet/leaflet.sleep.js":5,"./modules/mmenu.js":6,"./modules/pxEasyExpand.js":7,"./modules/swiper.js":8,"./modules/webcam.js":9,"./partials/form-infobutton.js":10,"./partials/hamburger.js":11,"./partials/lightbox.js":12,"./partials/meta.js":13,"./partials/mmenu.js":14,"./partials/scrollstart.js":15,"./partials/searchform.js":16,"./partials/swiper.js":17,"./partials/toggle.js":18,"./polyfills/stickybits.js":19,"./scripts/high-contrast-mode.js":20,"./scripts/leaflet-extended.js":21,"./scripts/leaflet.js":22,"lazysizes":23,"lazysizes/plugins/native-loading/ls.native-loading":24}],2:[function(require,module,exports){
132"use strict";
133
134function _typeof2(obj) { "@babel/helpers - typeof"; return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof2(obj); }
135
136(function (global, factory) {
137  (typeof exports === "undefined" ? "undefined" : _typeof2(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.GLightbox = factory());
138})(void 0, function () {
139  'use strict';
140
141  function _typeof(obj) {
142    "@babel/helpers - typeof";
143
144    if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
145      _typeof = function _typeof(obj) {
146        return typeof obj;
147      };
148    } else {
149      _typeof = function _typeof(obj) {
150        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
151      };
152    }
153
154    return _typeof(obj);
155  }
156
157  function _classCallCheck(instance, Constructor) {
158    if (!(instance instanceof Constructor)) {
159      throw new TypeError("Cannot call a class as a function");
160    }
161  }
162
163  function _defineProperties(target, props) {
164    for (var i = 0; i < props.length; i++) {
165      var descriptor = props[i];
166      descriptor.enumerable = descriptor.enumerable || false;
167      descriptor.configurable = true;
168      if ("value" in descriptor) descriptor.writable = true;
169      Object.defineProperty(target, descriptor.key, descriptor);
170    }
171  }
172
173  function _createClass(Constructor, protoProps, staticProps) {
174    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
175    if (staticProps) _defineProperties(Constructor, staticProps);
176    return Constructor;
177  }
178
179  var uid = Date.now();
180
181  function extend() {
182    var extended = {};
183    var deep = true;
184    var i = 0;
185    var length = arguments.length;
186
187    if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {
188      deep = arguments[0];
189      i++;
190    }
191
192    var merge = function merge(obj) {
193      for (var prop in obj) {
194        if (Object.prototype.hasOwnProperty.call(obj, prop)) {
195          if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {
196            extended[prop] = extend(true, extended[prop], obj[prop]);
197          } else {
198            extended[prop] = obj[prop];
199          }
200        }
201      }
202    };
203
204    for (; i < length; i++) {
205      var obj = arguments[i];
206      merge(obj);
207    }
208
209    return extended;
210  }
211
212  function each(collection, callback) {
213    if (isNode(collection) || collection === window || collection === document) {
214      collection = [collection];
215    }
216
217    if (!isArrayLike(collection) && !isObject(collection)) {
218      collection = [collection];
219    }
220
221    if (size(collection) == 0) {
222      return;
223    }
224
225    if (isArrayLike(collection) && !isObject(collection)) {
226      var l = collection.length,
227          i = 0;
228
229      for (; i < l; i++) {
230        if (callback.call(collection[i], collection[i], i, collection) === false) {
231          break;
232        }
233      }
234    } else if (isObject(collection)) {
235      for (var key in collection) {
236        if (has(collection, key)) {
237          if (callback.call(collection[key], collection[key], key, collection) === false) {
238            break;
239          }
240        }
241      }
242    }
243  }
244
245  function getNodeEvents(node) {
246    var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
247    var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
248    var cache = node[uid] = node[uid] || [];
249    var data = {
250      all: cache,
251      evt: null,
252      found: null
253    };
254
255    if (name && fn && size(cache) > 0) {
256      each(cache, function (cl, i) {
257        if (cl.eventName == name && cl.fn.toString() == fn.toString()) {
258          data.found = true;
259          data.evt = i;
260          return false;
vendor: 44,866 bytes, lines 261-1867
261        }
262      });
263    }
264
265    return data;
266  }
267
268  function addEvent(eventName) {
269    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
270        onElement = _ref.onElement,
271        withCallback = _ref.withCallback,
272        _ref$avoidDuplicate = _ref.avoidDuplicate,
273        avoidDuplicate = _ref$avoidDuplicate === void 0 ? true : _ref$avoidDuplicate,
274        _ref$once = _ref.once,
275        once = _ref$once === void 0 ? false : _ref$once,
276        _ref$useCapture = _ref.useCapture,
277        useCapture = _ref$useCapture === void 0 ? false : _ref$useCapture;
278
279    var thisArg = arguments.length > 2 ? arguments[2] : undefined;
280    var element = onElement || [];
281
282    if (isString(element)) {
283      element = document.querySelectorAll(element);
284    }
285
286    function handler(event) {
287      if (isFunction(withCallback)) {
288        withCallback.call(thisArg, event, this);
289      }
290
291      if (once) {
292        handler.destroy();
293      }
294    }
295
296    handler.destroy = function () {
297      each(element, function (el) {
298        var events = getNodeEvents(el, eventName, handler);
299
300        if (events.found) {
301          events.all.splice(events.evt, 1);
302        }
303
304        if (el.removeEventListener) {
305          el.removeEventListener(eventName, handler, useCapture);
306        }
307      });
308    };
309
310    each(element, function (el) {
311      var events = getNodeEvents(el, eventName, handler);
312
313      if (el.addEventListener && avoidDuplicate && !events.found || !avoidDuplicate) {
314        el.addEventListener(eventName, handler, useCapture);
315        events.all.push({
316          eventName: eventName,
317          fn: handler
318        });
319      }
320    });
321    return handler;
322  }
323
324  function addClass(node, name) {
325    each(name.split(' '), function (cl) {
326      return node.classList.add(cl);
327    });
328  }
329
330  function removeClass(node, name) {
331    each(name.split(' '), function (cl) {
332      return node.classList.remove(cl);
333    });
334  }
335
336  function hasClass(node, name) {
337    return node.classList.contains(name);
338  }
339
340  function closest(elem, selector) {
341    while (elem !== document.body) {
342      elem = elem.parentElement;
343
344      if (!elem) {
345        return false;
346      }
347
348      var matches = typeof elem.matches == 'function' ? elem.matches(selector) : elem.msMatchesSelector(selector);
349
350      if (matches) {
351        return elem;
352      }
353    }
354  }
355
356  function animateElement(element) {
357    var animation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
358    var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
359
360    if (!element || animation === '') {
361      return false;
362    }
363
364    if (animation == 'none') {
365      if (isFunction(callback)) {
366        callback();
367      }
368
369      return false;
370    }
371
372    var animationEnd = whichAnimationEvent();
373    var animationNames = animation.split(' ');
374    each(animationNames, function (name) {
375      addClass(element, 'g' + name);
376    });
377    addEvent(animationEnd, {
378      onElement: element,
379      avoidDuplicate: false,
380      once: true,
381      withCallback: function withCallback(event, target) {
382        each(animationNames, function (name) {
383          removeClass(target, 'g' + name);
384        });
385
386        if (isFunction(callback)) {
387          callback();
388        }
389      }
390    });
391  }
392
393  function cssTransform(node) {
394    var translate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
395
396    if (translate == '') {
397      node.style.webkitTransform = '';
398      node.style.MozTransform = '';
399      node.style.msTransform = '';
400      node.style.OTransform = '';
401      node.style.transform = '';
402      return false;
403    }
404
405    node.style.webkitTransform = translate;
406    node.style.MozTransform = translate;
407    node.style.msTransform = translate;
408    node.style.OTransform = translate;
409    node.style.transform = translate;
410  }
411
412  function show(element) {
413    element.style.display = 'block';
414  }
415
416  function hide(element) {
417    element.style.display = 'none';
418  }
419
420  function createHTML(htmlStr) {
421    var frag = document.createDocumentFragment(),
422        temp = document.createElement('div');
423    temp.innerHTML = htmlStr;
424
425    while (temp.firstChild) {
426      frag.appendChild(temp.firstChild);
427    }
428
429    return frag;
430  }
431
432  function windowSize() {
433    return {
434      width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
435      height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
436    };
437  }
438
439  function whichAnimationEvent() {
440    var t,
441        el = document.createElement('fakeelement');
442    var animations = {
443      animation: 'animationend',
444      OAnimation: 'oAnimationEnd',
445      MozAnimation: 'animationend',
446      WebkitAnimation: 'webkitAnimationEnd'
447    };
448
449    for (t in animations) {
450      if (el.style[t] !== undefined) {
451        return animations[t];
452      }
453    }
454  }
455
456  function whichTransitionEvent() {
457    var t,
458        el = document.createElement('fakeelement');
459    var transitions = {
460      transition: 'transitionend',
461      OTransition: 'oTransitionEnd',
462      MozTransition: 'transitionend',
463      WebkitTransition: 'webkitTransitionEnd'
464    };
465
466    for (t in transitions) {
467      if (el.style[t] !== undefined) {
468        return transitions[t];
469      }
470    }
471  }
472
473  function createIframe(config) {
474    var url = config.url,
475        allow = config.allow,
476        callback = config.callback,
477        appendTo = config.appendTo;
478    var iframe = document.createElement('iframe');
479    iframe.className = 'vimeo-video gvideo';
480    iframe.src = url;
481    iframe.style.width = '100%';
482    iframe.style.height = '100%';
483
484    if (allow) {
485      iframe.setAttribute('allow', allow);
486    }
487
488    iframe.onload = function () {
489      addClass(iframe, 'node-ready');
490
491      if (isFunction(callback)) {
492        callback();
493      }
494    };
495
496    if (appendTo) {
497      appendTo.appendChild(iframe);
498    }
499
500    return iframe;
501  }
502
503  function waitUntil(check, onComplete, delay, timeout) {
504    if (check()) {
505      onComplete();
506      return;
507    }
508
509    if (!delay) {
510      delay = 100;
511    }
512
513    var timeoutPointer;
514    var intervalPointer = setInterval(function () {
515      if (!check()) {
516        return;
517      }
518
519      clearInterval(intervalPointer);
520
521      if (timeoutPointer) {
522        clearTimeout(timeoutPointer);
523      }
524
525      onComplete();
526    }, delay);
527
528    if (timeout) {
529      timeoutPointer = setTimeout(function () {
530        clearInterval(intervalPointer);
531      }, timeout);
532    }
533  }
534
535  function injectAssets(url, waitFor, callback) {
536    if (isNil(url)) {
537      console.error('Inject assets error');
538      return;
539    }
540
541    if (isFunction(waitFor)) {
542      callback = waitFor;
543      waitFor = false;
544    }
545
546    if (isString(waitFor) && waitFor in window) {
547      if (isFunction(callback)) {
548        callback();
549      }
550
551      return;
552    }
553
554    var found;
555
556    if (url.indexOf('.css') !== -1) {
557      found = document.querySelectorAll('link[href="' + url + '"]');
558
559      if (found && found.length > 0) {
560        if (isFunction(callback)) {
561          callback();
562        }
563
564        return;
565      }
566
567      var head = document.getElementsByTagName('head')[0];
568      var headStyles = head.querySelectorAll('link[rel="stylesheet"]');
569      var link = document.createElement('link');
570      link.rel = 'stylesheet';
571      link.type = 'text/css';
572      link.href = url;
573      link.media = 'all';
574
575      if (headStyles) {
576        head.insertBefore(link, headStyles[0]);
577      } else {
578        head.appendChild(link);
579      }
580
581      if (isFunction(callback)) {
582        callback();
583      }
584
585      return;
586    }
587
588    found = document.querySelectorAll('script[src="' + url + '"]');
589
590    if (found && found.length > 0) {
591      if (isFunction(callback)) {
592        if (isString(waitFor)) {
593          waitUntil(function () {
594            return typeof window[waitFor] !== 'undefined';
595          }, function () {
596            callback();
597          });
598          return false;
599        }
600
601        callback();
602      }
603
604      return;
605    }
606
607    var script = document.createElement('script');
608    script.type = 'text/javascript';
609    script.src = url;
610
611    script.onload = function () {
612      if (isFunction(callback)) {
613        if (isString(waitFor)) {
614          waitUntil(function () {
615            return typeof window[waitFor] !== 'undefined';
616          }, function () {
617            callback();
618          });
619          return false;
620        }
621
622        callback();
623      }
624    };
625
626    document.body.appendChild(script);
627    return;
628  }
629
630  function isMobile() {
631    return 'navigator' in window && window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i);
632  }
633
634  function isTouch() {
635    return isMobile() !== null || document.createTouch !== undefined || 'ontouchstart' in window || 'onmsgesturechange' in window || navigator.msMaxTouchPoints;
636  }
637
638  function isFunction(f) {
639    return typeof f === 'function';
640  }
641
642  function isString(s) {
643    return typeof s === 'string';
644  }
645
646  function isNode(el) {
647    return !!(el && el.nodeType && el.nodeType == 1);
648  }
649
650  function isArray(ar) {
651    return Array.isArray(ar);
652  }
653
654  function isArrayLike(ar) {
655    return ar && ar.length && isFinite(ar.length);
656  }
657
658  function isObject(o) {
659    var type = _typeof(o);
660
661    return type === 'object' && o != null && !isFunction(o) && !isArray(o);
662  }
663
664  function isNil(o) {
665    return o == null;
666  }
667
668  function has(obj, key) {
669    return obj !== null && hasOwnProperty.call(obj, key);
670  }
671
672  function size(o) {
673    if (isObject(o)) {
674      if (o.keys) {
675        return o.keys().length;
676      }
677
678      var l = 0;
679
680      for (var k in o) {
681        if (has(o, k)) {
682          l++;
683        }
684      }
685
686      return l;
687    } else {
688      return o.length;
689    }
690  }
691
692  function isNumber(n) {
693    return !isNaN(parseFloat(n)) && isFinite(n);
694  }
695
696  function getNextFocusElement() {
697    var current = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
698    var btns = document.querySelectorAll('.gbtn[data-taborder]:not(.disabled)');
699
700    if (!btns.length) {
701      return false;
702    }
703
704    if (btns.length == 1) {
705      return btns[0];
706    }
707
708    if (typeof current == 'string') {
709      current = parseInt(current);
710    }
711
712    var newIndex = current < 0 ? 1 : current + 1;
713
714    if (newIndex > btns.length) {
715      newIndex = '1';
716    }
717
718    var orders = [];
719    each(btns, function (btn) {
720      orders.push(btn.getAttribute('data-taborder'));
721    });
722    var nextOrders = orders.filter(function (el) {
723      return el >= parseInt(newIndex);
724    });
725    var nextFocus = nextOrders.sort()[0];
726    return document.querySelector(".gbtn[data-taborder=\"".concat(nextFocus, "\"]"));
727  }
728
729  function keyboardNavigation(instance) {
730    if (instance.events.hasOwnProperty('keyboard')) {
731      return false;
732    }
733
734    instance.events['keyboard'] = addEvent('keydown', {
735      onElement: window,
736      withCallback: function withCallback(event, target) {
737        event = event || window.event;
738        var key = event.keyCode;
739
740        if (key == 9) {
741          var focusedButton = document.querySelector('.gbtn.focused');
742
743          if (!focusedButton) {
744            var activeElement = document.activeElement && document.activeElement.nodeName ? document.activeElement.nodeName.toLocaleLowerCase() : false;
745
746            if (activeElement == 'input' || activeElement == 'textarea' || activeElement == 'button') {
747              return;
748            }
749          }
750
751          event.preventDefault();
752          var btns = document.querySelectorAll('.gbtn[data-taborder]');
753
754          if (!btns || btns.length <= 0) {
755            return;
756          }
757
758          if (!focusedButton) {
759            var first = getNextFocusElement();
760
761            if (first) {
762              first.focus();
763              addClass(first, 'focused');
764            }
765
766            return;
767          }
768
769          var currentFocusOrder = focusedButton.getAttribute('data-taborder');
770          var nextFocus = getNextFocusElement(currentFocusOrder);
771          removeClass(focusedButton, 'focused');
772
773          if (nextFocus) {
774            nextFocus.focus();
775            addClass(nextFocus, 'focused');
776          }
777        }
778
779        if (key == 39) {
780          instance.nextSlide();
781        }
782
783        if (key == 37) {
784          instance.prevSlide();
785        }
786
787        if (key == 27) {
788          instance.close();
789        }
790      }
791    });
792  }
793
794  function getLen(v) {
795    return Math.sqrt(v.x * v.x + v.y * v.y);
796  }
797
798  function dot(v1, v2) {
799    return v1.x * v2.x + v1.y * v2.y;
800  }
801
802  function getAngle(v1, v2) {
803    var mr = getLen(v1) * getLen(v2);
804
805    if (mr === 0) {
806      return 0;
807    }
808
809    var r = dot(v1, v2) / mr;
810
811    if (r > 1) {
812      r = 1;
813    }
814
815    return Math.acos(r);
816  }
817
818  function cross(v1, v2) {
819    return v1.x * v2.y - v2.x * v1.y;
820  }
821
822  function getRotateAngle(v1, v2) {
823    var angle = getAngle(v1, v2);
824
825    if (cross(v1, v2) > 0) {
826      angle *= -1;
827    }
828
829    return angle * 180 / Math.PI;
830  }
831
832  var EventsHandlerAdmin = function () {
833    function EventsHandlerAdmin(el) {
834      _classCallCheck(this, EventsHandlerAdmin);
835
836      this.handlers = [];
837      this.el = el;
838    }
839
840    _createClass(EventsHandlerAdmin, [{
841      key: "add",
842      value: function add(handler) {
843        this.handlers.push(handler);
844      }
845    }, {
846      key: "del",
847      value: function del(handler) {
848        if (!handler) {
849          this.handlers = [];
850        }
851
852        for (var i = this.handlers.length; i >= 0; i--) {
853          if (this.handlers[i] === handler) {
854            this.handlers.splice(i, 1);
855          }
856        }
857      }
858    }, {
859      key: "dispatch",
860      value: function dispatch() {
861        for (var i = 0, len = this.handlers.length; i < len; i++) {
862          var handler = this.handlers[i];
863
864          if (typeof handler === 'function') {
865            handler.apply(this.el, arguments);
866          }
867        }
868      }
869    }]);
870
871    return EventsHandlerAdmin;
872  }();
873
874  function wrapFunc(el, handler) {
875    var EventshandlerAdmin = new EventsHandlerAdmin(el);
876    EventshandlerAdmin.add(handler);
877    return EventshandlerAdmin;
878  }
879
880  var TouchEvents = function () {
881    function TouchEvents(el, option) {
882      _classCallCheck(this, TouchEvents);
883
884      this.element = typeof el == 'string' ? document.querySelector(el) : el;
885      this.start = this.start.bind(this);
886      this.move = this.move.bind(this);
887      this.end = this.end.bind(this);
888      this.cancel = this.cancel.bind(this);
889      this.element.addEventListener('touchstart', this.start, false);
890      this.element.addEventListener('touchmove', this.move, false);
891      this.element.addEventListener('touchend', this.end, false);
892      this.element.addEventListener('touchcancel', this.cancel, false);
893      this.preV = {
894        x: null,
895        y: null
896      };
897      this.pinchStartLen = null;
898      this.zoom = 1;
899      this.isDoubleTap = false;
900
901      var noop = function noop() {};
902
903      this.rotate = wrapFunc(this.element, option.rotate || noop);
904      this.touchStart = wrapFunc(this.element, option.touchStart || noop);
905      this.multipointStart = wrapFunc(this.element, option.multipointStart || noop);
906      this.multipointEnd = wrapFunc(this.element, option.multipointEnd || noop);
907      this.pinch = wrapFunc(this.element, option.pinch || noop);
908      this.swipe = wrapFunc(this.element, option.swipe || noop);
909      this.tap = wrapFunc(this.element, option.tap || noop);
910      this.doubleTap = wrapFunc(this.element, option.doubleTap || noop);
911      this.longTap = wrapFunc(this.element, option.longTap || noop);
912      this.singleTap = wrapFunc(this.element, option.singleTap || noop);
913      this.pressMove = wrapFunc(this.element, option.pressMove || noop);
914      this.twoFingerPressMove = wrapFunc(this.element, option.twoFingerPressMove || noop);
915      this.touchMove = wrapFunc(this.element, option.touchMove || noop);
916      this.touchEnd = wrapFunc(this.element, option.touchEnd || noop);
917      this.touchCancel = wrapFunc(this.element, option.touchCancel || noop);
918      this.translateContainer = this.element;
919      this._cancelAllHandler = this.cancelAll.bind(this);
920      window.addEventListener('scroll', this._cancelAllHandler);
921      this.delta = null;
922      this.last = null;
923      this.now = null;
924      this.tapTimeout = null;
925      this.singleTapTimeout = null;
926      this.longTapTimeout = null;
927      this.swipeTimeout = null;
928      this.x1 = this.x2 = this.y1 = this.y2 = null;
929      this.preTapPosition = {
930        x: null,
931        y: null
932      };
933    }
934
935    _createClass(TouchEvents, [{
936      key: "start",
937      value: function start(evt) {
938        if (!evt.touches) {
939          return;
940        }
941
942        var ignoreDragFor = ['a', 'button', 'input'];
943
944        if (evt.target && evt.target.nodeName && ignoreDragFor.indexOf(evt.target.nodeName.toLowerCase()) >= 0) {
945          console.log('ignore drag for this touched element', evt.target.nodeName.toLowerCase());
946          return;
947        }
948
949        this.now = Date.now();
950        this.x1 = evt.touches[0].pageX;
951        this.y1 = evt.touches[0].pageY;
952        this.delta = this.now - (this.last || this.now);
953        this.touchStart.dispatch(evt, this.element);
954
955        if (this.preTapPosition.x !== null) {
956          this.isDoubleTap = this.delta > 0 && this.delta <= 250 && Math.abs(this.preTapPosition.x - this.x1) < 30 && Math.abs(this.preTapPosition.y - this.y1) < 30;
957
958          if (this.isDoubleTap) {
959            clearTimeout(this.singleTapTimeout);
960          }
961        }
962
963        this.preTapPosition.x = this.x1;
964        this.preTapPosition.y = this.y1;
965        this.last = this.now;
966        var preV = this.preV,
967            len = evt.touches.length;
968
969        if (len > 1) {
970          this._cancelLongTap();
971
972          this._cancelSingleTap();
973
974          var v = {
975            x: evt.touches[1].pageX - this.x1,
976            y: evt.touches[1].pageY - this.y1
977          };
978          preV.x = v.x;
979          preV.y = v.y;
980          this.pinchStartLen = getLen(preV);
981          this.multipointStart.dispatch(evt, this.element);
982        }
983
984        this._preventTap = false;
985        this.longTapTimeout = setTimeout(function () {
986          this.longTap.dispatch(evt, this.element);
987          this._preventTap = true;
988        }.bind(this), 750);
989      }
990    }, {
991      key: "move",
992      value: function move(evt) {
993        if (!evt.touches) {
994          return;
995        }
996
997        var preV = this.preV,
998            len = evt.touches.length,
999            currentX = evt.touches[0].pageX,
1000            currentY = evt.touches[0].pageY;
1001        this.isDoubleTap = false;
1002
1003        if (len > 1) {
1004          var sCurrentX = evt.touches[1].pageX,
1005              sCurrentY = evt.touches[1].pageY;
1006          var v = {
1007            x: evt.touches[1].pageX - currentX,
1008            y: evt.touches[1].pageY - currentY
1009          };
1010
1011          if (preV.x !== null) {
1012            if (this.pinchStartLen > 0) {
1013              evt.zoom = getLen(v) / this.pinchStartLen;
1014              this.pinch.dispatch(evt, this.element);
1015            }
1016
1017            evt.angle = getRotateAngle(v, preV);
1018            this.rotate.dispatch(evt, this.element);
1019          }
1020
1021          preV.x = v.x;
1022          preV.y = v.y;
1023
1024          if (this.x2 !== null && this.sx2 !== null) {
1025            evt.deltaX = (currentX - this.x2 + sCurrentX - this.sx2) / 2;
1026            evt.deltaY = (currentY - this.y2 + sCurrentY - this.sy2) / 2;
1027          } else {
1028            evt.deltaX = 0;
1029            evt.deltaY = 0;
1030          }
1031
1032          this.twoFingerPressMove.dispatch(evt, this.element);
1033          this.sx2 = sCurrentX;
1034          this.sy2 = sCurrentY;
1035        } else {
1036          if (this.x2 !== null) {
1037            evt.deltaX = currentX - this.x2;
1038            evt.deltaY = currentY - this.y2;
1039            var movedX = Math.abs(this.x1 - this.x2),
1040                movedY = Math.abs(this.y1 - this.y2);
1041
1042            if (movedX > 10 || movedY > 10) {
1043              this._preventTap = true;
1044            }
1045          } else {
1046            evt.deltaX = 0;
1047            evt.deltaY = 0;
1048          }
1049
1050          this.pressMove.dispatch(evt, this.element);
1051        }
1052
1053        this.touchMove.dispatch(evt, this.element);
1054
1055        this._cancelLongTap();
1056
1057        this.x2 = currentX;
1058        this.y2 = currentY;
1059
1060        if (len > 1) {
1061          evt.preventDefault();
1062        }
1063      }
1064    }, {
1065      key: "end",
1066      value: function end(evt) {
1067        if (!evt.changedTouches) {
1068          return;
1069        }
1070
1071        this._cancelLongTap();
1072
1073        var self = this;
1074
1075        if (evt.touches.length < 2) {
1076          this.multipointEnd.dispatch(evt, this.element);
1077          this.sx2 = this.sy2 = null;
1078        }
1079
1080        if (this.x2 && Math.abs(this.x1 - this.x2) > 30 || this.y2 && Math.abs(this.y1 - this.y2) > 30) {
1081          evt.direction = this._swipeDirection(this.x1, this.x2, this.y1, this.y2);
1082          this.swipeTimeout = setTimeout(function () {
1083            self.swipe.dispatch(evt, self.element);
1084          }, 0);
1085        } else {
1086          this.tapTimeout = setTimeout(function () {
1087            if (!self._preventTap) {
1088              self.tap.dispatch(evt, self.element);
1089            }
1090
1091            if (self.isDoubleTap) {
1092              self.doubleTap.dispatch(evt, self.element);
1093              self.isDoubleTap = false;
1094            }
1095          }, 0);
1096
1097          if (!self.isDoubleTap) {
1098            self.singleTapTimeout = setTimeout(function () {
1099              self.singleTap.dispatch(evt, self.element);
1100            }, 250);
1101          }
1102        }
1103
1104        this.touchEnd.dispatch(evt, this.element);
1105        this.preV.x = 0;
1106        this.preV.y = 0;
1107        this.zoom = 1;
1108        this.pinchStartLen = null;
1109        this.x1 = this.x2 = this.y1 = this.y2 = null;
1110      }
1111    }, {
1112      key: "cancelAll",
1113      value: function cancelAll() {
1114        this._preventTap = true;
1115        clearTimeout(this.singleTapTimeout);
1116        clearTimeout(this.tapTimeout);
1117        clearTimeout(this.longTapTimeout);
1118        clearTimeout(this.swipeTimeout);
1119      }
1120    }, {
1121      key: "cancel",
1122      value: function cancel(evt) {
1123        this.cancelAll();
1124        this.touchCancel.dispatch(evt, this.element);
1125      }
1126    }, {
1127      key: "_cancelLongTap",
1128      value: function _cancelLongTap() {
1129        clearTimeout(this.longTapTimeout);
1130      }
1131    }, {
1132      key: "_cancelSingleTap",
1133      value: function _cancelSingleTap() {
1134        clearTimeout(this.singleTapTimeout);
1135      }
1136    }, {
1137      key: "_swipeDirection",
1138      value: function _swipeDirection(x1, x2, y1, y2) {
1139        return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? 'Left' : 'Right' : y1 - y2 > 0 ? 'Up' : 'Down';
1140      }
1141    }, {
1142      key: "on",
1143      value: function on(evt, handler) {
1144        if (this[evt]) {
1145          this[evt].add(handler);
1146        }
1147      }
1148    }, {
1149      key: "off",
1150      value: function off(evt, handler) {
1151        if (this[evt]) {
1152          this[evt].del(handler);
1153        }
1154      }
1155    }, {
1156      key: "destroy",
1157      value: function destroy() {
1158        if (this.singleTapTimeout) {
1159          clearTimeout(this.singleTapTimeout);
1160        }
1161
1162        if (this.tapTimeout) {
1163          clearTimeout(this.tapTimeout);
1164        }
1165
1166        if (this.longTapTimeout) {
1167          clearTimeout(this.longTapTimeout);
1168        }
1169
1170        if (this.swipeTimeout) {
1171          clearTimeout(this.swipeTimeout);
1172        }
1173
1174        this.element.removeEventListener('touchstart', this.start);
1175        this.element.removeEventListener('touchmove', this.move);
1176        this.element.removeEventListener('touchend', this.end);
1177        this.element.removeEventListener('touchcancel', this.cancel);
1178        this.rotate.del();
1179        this.touchStart.del();
1180        this.multipointStart.del();
1181        this.multipointEnd.del();
1182        this.pinch.del();
1183        this.swipe.del();
1184        this.tap.del();
1185        this.doubleTap.del();
1186        this.longTap.del();
1187        this.singleTap.del();
1188        this.pressMove.del();
1189        this.twoFingerPressMove.del();
1190        this.touchMove.del();
1191        this.touchEnd.del();
1192        this.touchCancel.del();
1193        this.preV = this.pinchStartLen = this.zoom = this.isDoubleTap = this.delta = this.last = this.now = this.tapTimeout = this.singleTapTimeout = this.longTapTimeout = this.swipeTimeout = this.x1 = this.x2 = this.y1 = this.y2 = this.preTapPosition = this.rotate = this.touchStart = this.multipointStart = this.multipointEnd = this.pinch = this.swipe = this.tap = this.doubleTap = this.longTap = this.singleTap = this.pressMove = this.touchMove = this.touchEnd = this.touchCancel = this.twoFingerPressMove = null;
1194        window.removeEventListener('scroll', this._cancelAllHandler);
1195        return null;
1196      }
1197    }]);
1198
1199    return TouchEvents;
1200  }();
1201
1202  function resetSlideMove(slide) {
1203    var transitionEnd = whichTransitionEvent();
1204    var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
1205    var media = hasClass(slide, 'gslide-media') ? slide : slide.querySelector('.gslide-media');
1206    var container = closest(media, '.ginner-container');
1207    var desc = slide.querySelector('.gslide-description');
1208
1209    if (windowWidth > 769) {
1210      media = container;
1211    }
1212
1213    addClass(media, 'greset');
1214    cssTransform(media, 'translate3d(0, 0, 0)');
1215    addEvent(transitionEnd, {
1216      onElement: media,
1217      once: true,
1218      withCallback: function withCallback(event, target) {
1219        removeClass(media, 'greset');
1220      }
1221    });
1222    media.style.opacity = '';
1223
1224    if (desc) {
1225      desc.style.opacity = '';
1226    }
1227  }
1228
1229  function touchNavigation(instance) {
1230    if (instance.events.hasOwnProperty('touch')) {
1231      return false;
1232    }
1233
1234    var winSize = windowSize();
1235    var winWidth = winSize.width;
1236    var winHeight = winSize.height;
1237    var process = false;
1238    var currentSlide = null;
1239    var media = null;
1240    var mediaImage = null;
1241    var doingMove = false;
1242    var initScale = 1;
1243    var maxScale = 4.5;
1244    var currentScale = 1;
1245    var doingZoom = false;
1246    var imageZoomed = false;
1247    var zoomedPosX = null;
1248    var zoomedPosY = null;
1249    var lastZoomedPosX = null;
1250    var lastZoomedPosY = null;
1251    var hDistance;
1252    var vDistance;
1253    var hDistancePercent = 0;
1254    var vDistancePercent = 0;
1255    var vSwipe = false;
1256    var hSwipe = false;
1257    var startCoords = {};
1258    var endCoords = {};
1259    var xDown = 0;
1260    var yDown = 0;
1261    var isInlined;
1262    var sliderWrapper = document.getElementById('glightbox-slider');
1263    var overlay = document.querySelector('.goverlay');
1264    var touchInstance = new TouchEvents(sliderWrapper, {
1265      touchStart: function touchStart(e) {
1266        process = true;
1267
1268        if (hasClass(e.targetTouches[0].target, 'ginner-container') || closest(e.targetTouches[0].target, '.gslide-desc') || e.targetTouches[0].target.nodeName.toLowerCase() == 'a') {
1269          process = false;
1270        }
1271
1272        if (closest(e.targetTouches[0].target, '.gslide-inline') && !hasClass(e.targetTouches[0].target.parentNode, 'gslide-inline')) {
1273          process = false;
1274        }
1275
1276        if (process) {
1277          endCoords = e.targetTouches[0];
1278          startCoords.pageX = e.targetTouches[0].pageX;
1279          startCoords.pageY = e.targetTouches[0].pageY;
1280          xDown = e.targetTouches[0].clientX;
1281          yDown = e.targetTouches[0].clientY;
1282          currentSlide = instance.activeSlide;
1283          media = currentSlide.querySelector('.gslide-media');
1284          isInlined = currentSlide.querySelector('.gslide-inline');
1285          mediaImage = null;
1286
1287          if (hasClass(media, 'gslide-image')) {
1288            mediaImage = media.querySelector('img');
1289          }
1290
1291          var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
1292
1293          if (windowWidth > 769) {
1294            media = currentSlide.querySelector('.ginner-container');
1295          }
1296
1297          removeClass(overlay, 'greset');
1298
1299          if (e.pageX > 20 && e.pageX < window.innerWidth - 20) {
1300            return;
1301          }
1302
1303          e.preventDefault();
1304        }
1305      },
1306      touchMove: function touchMove(e) {
1307        if (!process) {
1308          return;
1309        }
1310
1311        endCoords = e.targetTouches[0];
1312
1313        if (doingZoom || imageZoomed) {
1314          return;
1315        }
1316
1317        if (isInlined && isInlined.offsetHeight > winHeight) {
1318          var moved = startCoords.pageX - endCoords.pageX;
1319
1320          if (Math.abs(moved) <= 13) {
1321            return false;
1322          }
1323        }
1324
1325        doingMove = true;
1326        var xUp = e.targetTouches[0].clientX;
1327        var yUp = e.targetTouches[0].clientY;
1328        var xDiff = xDown - xUp;
1329        var yDiff = yDown - yUp;
1330
1331        if (Math.abs(xDiff) > Math.abs(yDiff)) {
1332          vSwipe = false;
1333          hSwipe = true;
1334        } else {
1335          hSwipe = false;
1336          vSwipe = true;
1337        }
1338
1339        hDistance = endCoords.pageX - startCoords.pageX;
1340        hDistancePercent = hDistance * 100 / winWidth;
1341        vDistance = endCoords.pageY - startCoords.pageY;
1342        vDistancePercent = vDistance * 100 / winHeight;
1343        var opacity;
1344
1345        if (vSwipe && mediaImage) {
1346          opacity = 1 - Math.abs(vDistance) / winHeight;
1347          overlay.style.opacity = opacity;
1348
1349          if (instance.settings.touchFollowAxis) {
1350            hDistancePercent = 0;
1351          }
1352        }
1353
1354        if (hSwipe) {
1355          opacity = 1 - Math.abs(hDistance) / winWidth;
1356          media.style.opacity = opacity;
1357
1358          if (instance.settings.touchFollowAxis) {
1359            vDistancePercent = 0;
1360          }
1361        }
1362
1363        if (!mediaImage) {
1364          return cssTransform(media, "translate3d(".concat(hDistancePercent, "%, 0, 0)"));
1365        }
1366
1367        cssTransform(media, "translate3d(".concat(hDistancePercent, "%, ").concat(vDistancePercent, "%, 0)"));
1368      },
1369      touchEnd: function touchEnd() {
1370        if (!process) {
1371          return;
1372        }
1373
1374        doingMove = false;
1375
1376        if (imageZoomed || doingZoom) {
1377          lastZoomedPosX = zoomedPosX;
1378          lastZoomedPosY = zoomedPosY;
1379          return;
1380        }
1381
1382        var v = Math.abs(parseInt(vDistancePercent));
1383        var h = Math.abs(parseInt(hDistancePercent));
1384
1385        if (v > 29 && mediaImage) {
1386          instance.close();
1387          return;
1388        }
1389
1390        if (v < 29 && h < 25) {
1391          addClass(overlay, 'greset');
1392          overlay.style.opacity = 1;
1393          return resetSlideMove(media);
1394        }
1395      },
1396      multipointEnd: function multipointEnd() {
1397        setTimeout(function () {
1398          doingZoom = false;
1399        }, 50);
1400      },
1401      multipointStart: function multipointStart() {
1402        doingZoom = true;
1403        initScale = currentScale ? currentScale : 1;
1404      },
1405      pinch: function pinch(evt) {
1406        if (!mediaImage || doingMove) {
1407          return false;
1408        }
1409
1410        doingZoom = true;
1411        mediaImage.scaleX = mediaImage.scaleY = initScale * evt.zoom;
1412        var scale = initScale * evt.zoom;
1413        imageZoomed = true;
1414
1415        if (scale <= 1) {
1416          imageZoomed = false;
1417          scale = 1;
1418          lastZoomedPosY = null;
1419          lastZoomedPosX = null;
1420          zoomedPosX = null;
1421          zoomedPosY = null;
1422          mediaImage.setAttribute('style', '');
1423          return;
1424        }
1425
1426        if (scale > maxScale) {
1427          scale = maxScale;
1428        }
1429
1430        mediaImage.style.transform = "scale3d(".concat(scale, ", ").concat(scale, ", 1)");
1431        currentScale = scale;
1432      },
1433      pressMove: function pressMove(e) {
1434        if (imageZoomed && !doingZoom) {
1435          var mhDistance = endCoords.pageX - startCoords.pageX;
1436          var mvDistance = endCoords.pageY - startCoords.pageY;
1437
1438          if (lastZoomedPosX) {
1439            mhDistance = mhDistance + lastZoomedPosX;
1440          }
1441
1442          if (lastZoomedPosY) {
1443            mvDistance = mvDistance + lastZoomedPosY;
1444          }
1445
1446          zoomedPosX = mhDistance;
1447          zoomedPosY = mvDistance;
1448          var style = "translate3d(".concat(mhDistance, "px, ").concat(mvDistance, "px, 0)");
1449
1450          if (currentScale) {
1451            style += " scale3d(".concat(currentScale, ", ").concat(currentScale, ", 1)");
1452          }
1453
1454          cssTransform(mediaImage, style);
1455        }
1456      },
1457      swipe: function swipe(evt) {
1458        if (imageZoomed) {
1459          return;
1460        }
1461
1462        if (doingZoom) {
1463          doingZoom = false;
1464          return;
1465        }
1466
1467        if (evt.direction == 'Left') {
1468          if (instance.index == instance.elements.length - 1) {
1469            return resetSlideMove(media);
1470          }
1471
1472          instance.nextSlide();
1473        }
1474
1475        if (evt.direction == 'Right') {
1476          if (instance.index == 0) {
1477            return resetSlideMove(media);
1478          }
1479
1480          instance.prevSlide();
1481        }
1482      }
1483    });
1484    instance.events['touch'] = touchInstance;
1485  }
1486
1487  var ZoomImages = function () {
1488    function ZoomImages(el, slide) {
1489      var _this = this;
1490
1491      var onclose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1492
1493      _classCallCheck(this, ZoomImages);
1494
1495      this.img = el;
1496      this.slide = slide;
1497      this.onclose = onclose;
1498
1499      if (this.img.setZoomEvents) {
1500        return false;
1501      }
1502
1503      this.active = false;
1504      this.zoomedIn = false;
1505      this.dragging = false;
1506      this.currentX = null;
1507      this.currentY = null;
1508      this.initialX = null;
1509      this.initialY = null;
1510      this.xOffset = 0;
1511      this.yOffset = 0;
1512      this.img.addEventListener('mousedown', function (e) {
1513        return _this.dragStart(e);
1514      }, false);
1515      this.img.addEventListener('mouseup', function (e) {
1516        return _this.dragEnd(e);
1517      }, false);
1518      this.img.addEventListener('mousemove', function (e) {
1519        return _this.drag(e);
1520      }, false);
1521      this.img.addEventListener('click', function (e) {
1522        if (_this.slide.classList.contains('dragging-nav')) {
1523          _this.zoomOut();
1524
1525          return false;
1526        }
1527
1528        if (!_this.zoomedIn) {
1529          return _this.zoomIn();
1530        }
1531
1532        if (_this.zoomedIn && !_this.dragging) {
1533          _this.zoomOut();
1534        }
1535      }, false);
1536      this.img.setZoomEvents = true;
1537    }
1538
1539    _createClass(ZoomImages, [{
1540      key: "zoomIn",
1541      value: function zoomIn() {
1542        var winWidth = this.widowWidth();
1543
1544        if (this.zoomedIn || winWidth <= 768) {
1545          return;
1546        }
1547
1548        var img = this.img;
1549        img.setAttribute('data-style', img.getAttribute('style'));
1550        img.style.maxWidth = img.naturalWidth + 'px';
1551        img.style.maxHeight = img.naturalHeight + 'px';
1552
1553        if (img.naturalWidth > winWidth) {
1554          var centerX = winWidth / 2 - img.naturalWidth / 2;
1555          this.setTranslate(this.img.parentNode, centerX, 0);
1556        }
1557
1558        this.slide.classList.add('zoomed');
1559        this.zoomedIn = true;
1560      }
1561    }, {
1562      key: "zoomOut",
1563      value: function zoomOut() {
1564        this.img.parentNode.setAttribute('style', '');
1565        this.img.setAttribute('style', this.img.getAttribute('data-style'));
1566        this.slide.classList.remove('zoomed');
1567        this.zoomedIn = false;
1568        this.currentX = null;
1569        this.currentY = null;
1570        this.initialX = null;
1571        this.initialY = null;
1572        this.xOffset = 0;
1573        this.yOffset = 0;
1574
1575        if (this.onclose && typeof this.onclose == 'function') {
1576          this.onclose();
1577        }
1578      }
1579    }, {
1580      key: "dragStart",
1581      value: function dragStart(e) {
1582        e.preventDefault();
1583
1584        if (!this.zoomedIn) {
1585          this.active = false;
1586          return;
1587        }
1588
1589        if (e.type === 'touchstart') {
1590          this.initialX = e.touches[0].clientX - this.xOffset;
1591          this.initialY = e.touches[0].clientY - this.yOffset;
1592        } else {
1593          this.initialX = e.clientX - this.xOffset;
1594          this.initialY = e.clientY - this.yOffset;
1595        }
1596
1597        if (e.target === this.img) {
1598          this.active = true;
1599          this.img.classList.add('dragging');
1600        }
1601      }
1602    }, {
1603      key: "dragEnd",
1604      value: function dragEnd(e) {
1605        var _this2 = this;
1606
1607        e.preventDefault();
1608        this.initialX = this.currentX;
1609        this.initialY = this.currentY;
1610        this.active = false;
1611        setTimeout(function () {
1612          _this2.dragging = false;
1613          _this2.img.isDragging = false;
1614
1615          _this2.img.classList.remove('dragging');
1616        }, 100);
1617      }
1618    }, {
1619      key: "drag",
1620      value: function drag(e) {
1621        if (this.active) {
1622          e.preventDefault();
1623
1624          if (e.type === 'touchmove') {
1625            this.currentX = e.touches[0].clientX - this.initialX;
1626            this.currentY = e.touches[0].clientY - this.initialY;
1627          } else {
1628            this.currentX = e.clientX - this.initialX;
1629            this.currentY = e.clientY - this.initialY;
1630          }
1631
1632          this.xOffset = this.currentX;
1633          this.yOffset = this.currentY;
1634          this.img.isDragging = true;
1635          this.dragging = true;
1636          this.setTranslate(this.img, this.currentX, this.currentY);
1637        }
1638      }
1639    }, {
1640      key: "onMove",
1641      value: function onMove(e) {
1642        if (!this.zoomedIn) {
1643          return;
1644        }
1645
1646        var xOffset = e.clientX - this.img.naturalWidth / 2;
1647        var yOffset = e.clientY - this.img.naturalHeight / 2;
1648        this.setTranslate(this.img, xOffset, yOffset);
1649      }
1650    }, {
1651      key: "setTranslate",
1652      value: function setTranslate(node, xPos, yPos) {
1653        node.style.transform = 'translate3d(' + xPos + 'px, ' + yPos + 'px, 0)';
1654      }
1655    }, {
1656      key: "widowWidth",
1657      value: function widowWidth() {
1658        return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
1659      }
1660    }]);
1661
1662    return ZoomImages;
1663  }();
1664
1665  var DragSlides = function () {
1666    function DragSlides() {
1667      var _this = this;
1668
1669      var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1670
1671      _classCallCheck(this, DragSlides);
1672
1673      var dragEl = config.dragEl,
1674          _config$toleranceX = config.toleranceX,
1675          toleranceX = _config$toleranceX === void 0 ? 40 : _config$toleranceX,
1676          _config$toleranceY = config.toleranceY,
1677          toleranceY = _config$toleranceY === void 0 ? 65 : _config$toleranceY,
1678          _config$slide = config.slide,
1679          slide = _config$slide === void 0 ? null : _config$slide,
1680          _config$instance = config.instance,
1681          instance = _config$instance === void 0 ? null : _config$instance;
1682      this.el = dragEl;
1683      this.active = false;
1684      this.dragging = false;
1685      this.currentX = null;
1686      this.currentY = null;
1687      this.initialX = null;
1688      this.initialY = null;
1689      this.xOffset = 0;
1690      this.yOffset = 0;
1691      this.direction = null;
1692      this.lastDirection = null;
1693      this.toleranceX = toleranceX;
1694      this.toleranceY = toleranceY;
1695      this.toleranceReached = false;
1696      this.dragContainer = this.el;
1697      this.slide = slide;
1698      this.instance = instance;
1699      this.el.addEventListener('mousedown', function (e) {
1700        return _this.dragStart(e);
1701      }, false);
1702      this.el.addEventListener('mouseup', function (e) {
1703        return _this.dragEnd(e);
1704      }, false);
1705      this.el.addEventListener('mousemove', function (e) {
1706        return _this.drag(e);
1707      }, false);
1708    }
1709
1710    _createClass(DragSlides, [{
1711      key: "dragStart",
1712      value: function dragStart(e) {
1713        if (this.slide.classList.contains('zoomed')) {
1714          this.active = false;
1715          return;
1716        }
1717
1718        if (e.type === 'touchstart') {
1719          this.initialX = e.touches[0].clientX - this.xOffset;
1720          this.initialY = e.touches[0].clientY - this.yOffset;
1721        } else {
1722          this.initialX = e.clientX - this.xOffset;
1723          this.initialY = e.clientY - this.yOffset;
1724        }
1725
1726        var clicked = e.target.nodeName.toLowerCase();
1727        var exludeClicks = ['input', 'select', 'textarea', 'button', 'a'];
1728
1729        if (e.target.classList.contains('nodrag') || closest(e.target, '.nodrag') || exludeClicks.indexOf(clicked) !== -1) {
1730          this.active = false;
1731          return;
1732        }
1733
1734        e.preventDefault();
1735
1736        if (e.target === this.el || clicked !== 'img' && closest(e.target, '.gslide-inline')) {
1737          this.active = true;
1738          this.el.classList.add('dragging');
1739          this.dragContainer = closest(e.target, '.ginner-container');
1740        }
1741      }
1742    }, {
1743      key: "dragEnd",
1744      value: function dragEnd(e) {
1745        var _this2 = this;
1746
1747        e && e.preventDefault();
1748        this.initialX = 0;
1749        this.initialY = 0;
1750        this.currentX = null;
1751        this.currentY = null;
1752        this.initialX = null;
1753        this.initialY = null;
1754        this.xOffset = 0;
1755        this.yOffset = 0;
1756        this.active = false;
1757
1758        if (this.doSlideChange) {
1759          this.instance.preventOutsideClick = true;
1760          this.doSlideChange == 'right' && this.instance.prevSlide();
1761          this.doSlideChange == 'left' && this.instance.nextSlide();
1762        }
1763
1764        if (this.doSlideClose) {
1765          this.instance.close();
1766        }
1767
1768        if (!this.toleranceReached) {
1769          this.setTranslate(this.dragContainer, 0, 0, true);
1770        }
1771
1772        setTimeout(function () {
1773          _this2.instance.preventOutsideClick = false;
1774          _this2.toleranceReached = false;
1775          _this2.lastDirection = null;
1776          _this2.dragging = false;
1777          _this2.el.isDragging = false;
1778
1779          _this2.el.classList.remove('dragging');
1780
1781          _this2.slide.classList.remove('dragging-nav');
1782
1783          _this2.dragContainer.style.transform = '';
1784          _this2.dragContainer.style.transition = '';
1785        }, 100);
1786      }
1787    }, {
1788      key: "drag",
1789      value: function drag(e) {
1790        if (this.active) {
1791          e.preventDefault();
1792          this.slide.classList.add('dragging-nav');
1793
1794          if (e.type === 'touchmove') {
1795            this.currentX = e.touches[0].clientX - this.initialX;
1796            this.currentY = e.touches[0].clientY - this.initialY;
1797          } else {
1798            this.currentX = e.clientX - this.initialX;
1799            this.currentY = e.clientY - this.initialY;
1800          }
1801
1802          this.xOffset = this.currentX;
1803          this.yOffset = this.currentY;
1804          this.el.isDragging = true;
1805          this.dragging = true;
1806          this.doSlideChange = false;
1807          this.doSlideClose = false;
1808          var currentXInt = Math.abs(this.currentX);
1809          var currentYInt = Math.abs(this.currentY);
1810
1811          if (currentXInt > 0 && currentXInt >= Math.abs(this.currentY) && (!this.lastDirection || this.lastDirection == 'x')) {
1812            this.yOffset = 0;
1813            this.lastDirection = 'x';
1814            this.setTranslate(this.dragContainer, this.currentX, 0);
1815            var doChange = this.shouldChange();
1816
1817            if (!this.instance.settings.dragAutoSnap && doChange) {
1818              this.doSlideChange = doChange;
1819            }
1820
1821            if (this.instance.settings.dragAutoSnap && doChange) {
1822              this.instance.preventOutsideClick = true;
1823              this.toleranceReached = true;
1824              this.active = false;
1825              this.instance.preventOutsideClick = true;
1826              this.dragEnd(null);
1827              doChange == 'right' && this.instance.prevSlide();
1828              doChange == 'left' && this.instance.nextSlide();
1829              return;
1830            }
1831          }
1832
1833          if (this.toleranceY > 0 && currentYInt > 0 && currentYInt >= currentXInt && (!this.lastDirection || this.lastDirection == 'y')) {
1834            this.xOffset = 0;
1835            this.lastDirection = 'y';
1836            this.setTranslate(this.dragContainer, 0, this.currentY);
1837            var doClose = this.shouldClose();
1838
1839            if (!this.instance.settings.dragAutoSnap && doClose) {
1840              this.doSlideClose = true;
1841            }
1842
1843            if (this.instance.settings.dragAutoSnap && doClose) {
1844              this.instance.close();
1845            }
1846
1847            return;
1848          }
1849        }
1850      }
1851    }, {
1852      key: "shouldChange",
1853      value: function shouldChange() {
1854        var doChange = false;
1855        var currentXInt = Math.abs(this.currentX);
1856
1857        if (currentXInt >= this.toleranceX) {
1858          var dragDir = this.currentX > 0 ? 'right' : 'left';
1859
1860          if (dragDir == 'left' && this.slide !== this.slide.parentNode.lastChild || dragDir == 'right' && this.slide !== this.slide.parentNode.firstChild) {
1861            doChange = dragDir;
1862          }
1863        }
1864
1865        return doChange;
1866      }
1867    }, {
1868      key: "shouldClose",
1869      value: function shouldClose() {
1870        var doClose = false;
1871        var currentYInt = Math.abs(this.currentY);
1872
1873        if (currentYInt >= this.toleranceY) {
1874          doClose = true;
1875        }
1876
1877        return doClose;
1878      }
1879    }, {
1880      key: "setTranslate",
1881      value: function setTranslate(node, xPos, yPos) {
1882        var animated = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1883
1884        if (animated) {
1885          node.style.transition = 'all .2s ease';
1886        } else {
1887          node.style.transition = '';
1888        }
1889
1890        node.style.transform = "translate3d(".concat(xPos, "px, ").concat(yPos, "px, 0)");
1891      }
1892    }]);
1893
1894    return DragSlides;
1895  }();
1896
1897  function slideImage(slide, data, index, callback) {
1898    var slideMedia = slide.querySelector('.gslide-media');
1899    var img = new Image();
1900    var titleID = 'gSlideTitle_' + index;
1901    var textID = 'gSlideDesc_' + index;
1902    img.addEventListener('load', function () {
1903      if (isFunction(callback)) {
1904        callback();
1905      }
1906    }, false);
1907    img.src = data.href;
1908
1909    if (data.sizes != '' && data.srcset != '') {
1910      img.sizes = data.sizes;
1911      img.srcset = data.srcset;
1912    }
1913
1914    img.alt = '';
1915
1916    if (!isNil(data.alt) && data.alt !== '') {
1917      img.alt = data.alt;
1918    }
1919
1920    if (data.title !== '') {
1921      img.setAttribute('aria-labelledby', titleID);
1922    }
1923
1924    if (data.description !== '') {
1925      img.setAttribute('aria-describedby', textID);
1926    }
1927
1928    if (data.hasOwnProperty('_hasCustomWidth') && data._hasCustomWidth) {
1929      img.style.width = data.width;
1930    }
1931
1932    if (data.hasOwnProperty('_hasCustomHeight') && data._hasCustomHeight) {
1933      img.style.height = data.height;
1934    }
1935
1936    slideMedia.insertBefore(img, slideMedia.firstChild);
1937    return;
1938  }
1939
1940  function slideVideo(slide, data, index, callback) {
1941    var _this = this;
1942
1943    var slideContainer = slide.querySelector('.ginner-container');
1944    var videoID = 'gvideo' + index;
1945    var slideMedia = slide.querySelector('.gslide-media');
1946    var videoPlayers = this.getAllPlayers();
1947    addClass(slideContainer, 'gvideo-container');
1948    slideMedia.insertBefore(createHTML('<div class="gvideo-wrapper"></div>'), slideMedia.firstChild);
1949    var videoWrapper = slide.querySelector('.gvideo-wrapper');
1950    injectAssets(this.settings.plyr.css, 'Plyr');
1951    var url = data.href;
1952    var protocol = location.protocol.replace(':', '');
1953    var videoSource = '';
1954    var embedID = '';
1955    var customPlaceholder = false;
1956
1957    if (protocol == 'file') {
1958      protocol = 'http';
1959    }
1960
1961    slideMedia.style.maxWidth = data.width;
1962    injectAssets(this.settings.plyr.js, 'Plyr', function () {
1963      if (url.match(/vimeo\.com\/([0-9]*)/)) {
1964        var vimeoID = /vimeo.*\/(\d+)/i.exec(url);
1965        videoSource = 'vimeo';
1966        embedID = vimeoID[1];
1967      }
1968
1969      if (url.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || url.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/) || url.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)) {
1970        var youtubeID = getYoutubeID(url);
1971        videoSource = 'youtube';
1972        embedID = youtubeID;
1973      }
1974
1975      if (url.match(/\.(mp4|ogg|webm|mov)$/) !== null) {
1976        videoSource = 'local';
1977        var html = '<video id="' + videoID + '" ';
1978        html += "style=\"background:#000; max-width: ".concat(data.width, ";\" ");
1979        html += 'preload="metadata" ';
1980        html += 'x-webkit-airplay="allow" ';
1981        html += 'playsinline ';
1982        html += 'controls ';
1983        html += 'class="gvideo-local">';
1984        var format = url.toLowerCase().split('.').pop();
1985        var sources = {
1986          mp4: '',
1987          ogg: '',
1988          webm: ''
1989        };
1990        format = format == 'mov' ? 'mp4' : format;
1991        sources[format] = url;
1992
1993        for (var key in sources) {
1994          if (sources.hasOwnProperty(key)) {
1995            var videoFile = sources[key];
1996
1997            if (data.hasOwnProperty(key)) {
1998              videoFile = data[key];
1999            }
2000
2001            if (videoFile !== '') {
2002              html += "<source src=\"".concat(videoFile, "\" type=\"video/").concat(key, "\">");
2003            }
2004          }
2005        }
2006
2007        html += '</video>';
2008        customPlaceholder = createHTML(html);
2009      }
2010
2011      var placeholder = customPlaceholder ? customPlaceholder : createHTML("<div id=\"".concat(videoI
2011D, "\" data-plyr-provider=\"").concat(videoSource, "\" data-plyr-embed-id=\"").concat(embedID, "\"></div>"));
2012      addClass(videoWrapper, "".concat(videoSource, "-video gvideo"));
2013      videoWrapper.appendChild(placeholder);
2014      videoWrapper.setAttribute('data-id', videoID);
2015      videoWrapper.setAttribute('data-index', index);
2016      var playerConfig = has(_this.settings.plyr, 'config') ? _this.settings.plyr.config : {};
2017      var player = new Plyr('#' + videoID, playerConfig);
2018      player.on('ready', function (event) {
2019        var instance = event.detail.plyr;
2020        videoPlayers[videoID] = instance;
2021
2022        if (isFunction(callback)) {
2023          callback();
2024        }
2025      });
2026      waitUntil(function () {
2027        return slide.querySelector('iframe') && slide.querySelector('iframe').dataset.ready == 'true';
2028      }, function () {
2029        _this.resize(slide);
2030      });
2031      player.on('enterfullscreen', handleMediaFullScreen);
2032      player.on('exitfullscreen', handleMediaFullScreen);
2033    });
2034  }
2035
2036  function getYoutubeID(url) {
2037    var videoID = '';
2038    url = url.replace(/(>|<)/gi, '').split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/);
2039
2040    if (url[2] !== undefined) {
2041      videoID = url[2].split(/[^0-9a-z_\-]/i);
2042      videoID = videoID[0];
2043    } else {
2044      videoID = url;
2045    }
2046
2047    return videoID;
2048  }
2049
2050  function handleMediaFullScreen(event) {
2051    var media = closest(event.target, '.gslide-media');
2052
2053    if (event.type == 'enterfullscreen') {
2054      addClass(media, 'fullscreen');
2055    }
2056
2057    if (event.type == 'exitfullscreen') {
2058      removeClass(media, 'fullscreen');
2059    }
2060  }
2061
2062  function slideInline(slide, data, index, callback) {
2063    var _this = this;
2064
2065    var slideMedia = slide.querySelector('.gslide-media');
2066    var hash = has(data, 'href') && data.href ? data.href.split('#').pop().trim() : false;
2067    var content = has(data, 'content') && data.content ? data.content : false;
2068    var innerContent;
2069
2070    if (content) {
2071      if (isString(content)) {
2072        innerContent = createHTML("<div class=\"ginlined-content\">".concat(content, "</div>"));
2073      }
2074
2075      if (isNode(content)) {
2076        if (content.style.display == 'none') {
2077          content.style.display = 'block';
2078        }
2079
2080        var container = document.createElement('div');
2081        container.className = 'ginlined-content';
2082        container.appendChild(content);
2083        innerContent = container;
2084      }
2085    }
2086
2087    if (hash) {
2088      var div = document.getElementById(hash);
2089
2090      if (!div) {
2091        return false;
2092      }
2093
2094      var cloned = div.cloneNode(true);
2095      cloned.style.height = data.height;
2096      cloned.style.maxWidth = data.width;
2097      addClass(cloned, 'ginlined-content');
2098      innerContent = cloned;
2099    }
2100
2101    if (!innerContent) {
2102      console.error('Unable to append inline slide content', data);
2103      return false;
2104    }
2105
2106    slideMedia.style.height = data.height;
2107    slideMedia.style.width = data.width;
2108    slideMedia.appendChild(innerContent);
2109    this.events['inlineclose' + hash] = addEvent('click', {
2110      onElement: slideMedia.querySelectorAll('.gtrigger-close'),
2111      withCallback: function withCallback(e) {
2112        e.preventDefault();
2113
2114        _this.close();
2115      }
2116    });
2117
2118    if (isFunction(callback)) {
2119      callback();
2120    }
2121
2122    return;
2123  }
2124
2125  function slideIframe(slide, data, index, callback) {
2126    var slideMedia = slide.querySelector('.gslide-media');
2127    var iframe = createIframe({
2128      url: data.href,
2129      callback: callback
2130    });
2131    slideMedia.parentNode.style.maxWidth = data.width;
2132    slideMedia.parentNode.style.height = data.height;
2133    slideMedia.appendChild(iframe);
2134    return;
2135  }
2136
2137  var SlideConfigParser = function () {
2138    function SlideConfigParser() {
2139      var slideParamas = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2140
2141      _classCallCheck(this, SlideConfigParser);
2142
2143      this.defaults = {
2144        href: '',
2145        sizes: '',
2146        srcset: '',
2147        title: '',
2148        type: '',
2149        description: '',
2150        alt: '',
2151        descPosition: 'bottom',
2152        effect: '',
2153        width: '',
2154        height: '',
2155        content: false,
2156        zoomable: true,
2157        draggable: true
2158      };
2159
2160      if (isObject(slideParamas)) {
2161        this.defaults = extend(this.defaults, slideParamas);
2162      }
2163    }
2164
2165    _createClass(SlideConfigParser, [{
2166      key: "sourceType",
2167      value: function sourceType(url) {
2168        var origin = url;
2169        url = url.toLowerCase();
2170
2171        if (url.match(/\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/) !== null) {
2172          return 'image';
2173        }
2174
2175        if (url.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || url.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/) || url.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)) {
2176          return 'video';
2177        }
2178
2179        if (url.match(/vimeo\.com\/([0-9]*)/)) {
2180          return 'video';
2181        }
2182
2183        if (url.match(/\.(mp4|ogg|webm|mov)/) !== null) {
2184          return 'video';
2185        }
2186
2187        if (url.match(/\.(mp3|wav|wma|aac|ogg)/) !== null) {
2188          return 'audio';
2189        }
2190
2191        if (url.indexOf('#') > -1) {
2192          var hash = origin.split('#').pop();
2193
2194          if (hash.trim() !== '') {
2195            return 'inline';
2196          }
2197        }
2198
2199        if (url.indexOf('goajax=true') > -1) {
2200          return 'ajax';
2201        }
2202
2203        return 'external';
2204      }
2205    }, {
vendor: 52,042 bytes, lines 2206-3822
2206      key: "parseConfig",
2207      value: function parseConfig(element, settings) {
2208        var _this = this;
2209
2210        var data = extend({
2211          descPosition: settings.descPosition
2212        }, this.defaults);
2213
2214        if (isObject(element) && !isNode(element)) {
2215          if (!has(element, 'type')) {
2216            if (has(element, 'content') && element.content) {
2217              element.type = 'inline';
2218            } else if (has(element, 'href')) {
2219              element.type = this.sourceType(element.href);
2220            }
2221          }
2222
2223          var objectData = extend(data, element);
2224          this.setSize(objectData, settings);
2225          return objectData;
2226        }
2227
2228        var url = '';
2229        var config = element.getAttribute('data-glightbox');
2230        var nodeType = element.nodeName.toLowerCase();
2231
2232        if (nodeType === 'a') {
2233          url = element.href;
2234        }
2235
2236        if (nodeType === 'img') {
2237          url = element.src;
2238          data.alt = element.alt;
2239        }
2240
2241        data.href = url;
2242        each(data, function (val, key) {
2243          if (has(settings, key) && key !== 'width') {
2244            data[key] = settings[key];
2245          }
2246
2247          var nodeData = element.dataset[key];
2248
2249          if (!isNil(nodeData)) {
2250            data[key] = _this.sanitizeValue(nodeData);
2251          }
2252        });
2253
2254        if (data.content) {
2255          data.type = 'inline';
2256        }
2257
2258        if (!data.type && url) {
2259          data.type = this.sourceType(url);
2260        }
2261
2262        if (!isNil(config)) {
2263          var cleanKeys = [];
2264          each(data, function (v, k) {
2265            cleanKeys.push(';\\s?' + k);
2266          });
2267          cleanKeys = cleanKeys.join('\\s?:|');
2268
2269          if (config.trim() !== '') {
2270            each(data, function (val, key) {
2271              var str = config;
2272              var match = 's?' + key + 's?:s?(.*?)(' + cleanKeys + 's?:|$)';
2273              var regex = new RegExp(match);
2274              var matches = str.match(regex);
2275
2276              if (matches && matches.length && matches[1]) {
2277                var value = matches[1].trim().replace(/;\s*$/, '');
2278                data[key] = _this.sanitizeValue(value);
2279              }
2280            });
2281          }
2282        } else {
2283          if (!data.title && nodeType == 'a') {
2284            var title = element.title;
2285
2286            if (!isNil(title) && title !== '') {
2287              data.title = title;
2288            }
2289          }
2290
2291          if (!data.title && nodeType == 'img') {
2292            var alt = element.alt;
2293
2294            if (!isNil(alt) && alt !== '') {
2295              data.title = alt;
2296            }
2297          }
2298        }
2299
2300        if (data.description && data.description.substring(0, 1) === '.') {
2301          var description;
2302
2303          try {
2304            description = document.querySelector(data.description).innerHTML;
2305          } catch (error) {
2306            if (!(error instanceof DOMException)) {
2307              throw error;
2308            }
2309          }
2310
2311          if (description) {
2312            data.description = description;
2313          }
2314        }
2315
2316        if (!data.description) {
2317          var nodeDesc = element.querySelector('.glightbox-desc');
2318
2319          if (nodeDesc) {
2320            data.description = nodeDesc.innerHTML;
2321          }
2322        }
2323
2324        this.setSize(data, settings, element);
2325        this.slideConfig = data;
2326        return data;
2327      }
2328    }, {
2329      key: "setSize",
2330      value: function setSize(data, settings) {
2331        var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
2332        var defaultWith = data.type == 'video' ? this.checkSize(settings.videosWidth) : this.checkSize(settings.width);
2333        var defaultHeight = this.checkSize(settings.height);
2334        data.width = has(data, 'width') && data.width !== '' ? this.checkSize(data.width) : defaultWith;
2335        data.height = has(data, 'height') && data.height !== '' ? this.checkSize(data.height) : defaultHeight;
2336
2337        if (element && data.type == 'image') {
2338          data._hasCustomWidth = element.dataset.width ? true : false;
2339          data._hasCustomHeight = element.dataset.height ? true : false;
2340        }
2341
2342        return data;
2343      }
2344    }, {
2345      key: "checkSize",
2346      value: function checkSize(size) {
2347        return isNumber(size) ? "".concat(size, "px") : size;
2348      }
2349    }, {
2350      key: "sanitizeValue",
2351      value: function sanitizeValue(val) {
2352        if (val !== 'true' && val !== 'false') {
2353          return val;
2354        }
2355
2356        return val === 'true';
2357      }
2358    }]);
2359
2360    return SlideConfigParser;
2361  }();
2362
2363  var Slide = function () {
2364    function Slide(el, instance, index) {
2365      _classCallCheck(this, Slide);
2366
2367      this.element = el;
2368      this.instance = instance;
2369      this.index = index;
2370    }
2371
2372    _createClass(Slide, [{
2373      key: "setContent",
2374      value: function setContent() {
2375        var _this = this;
2376
2377        var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
2378        var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2379
2380        if (hasClass(slide, 'loaded')) {
2381          return false;
2382        }
2383
2384        var settings = this.instance.settings;
2385        var slideConfig = this.slideConfig;
2386        var isMobileDevice = isMobile();
2387
2388        if (isFunction(settings.beforeSlideLoad)) {
2389          settings.beforeSlideLoad({
2390            index: this.index,
2391            slide: slide,
2392            player: false
2393          });
2394        }
2395
2396        var type = slideConfig.type;
2397        var position = slideConfig.descPosition;
2398        var slideMedia = slide.querySelector('.gslide-media');
2399        var slideTitle = slide.querySelector('.gslide-title');
2400        var slideText = slide.querySelector('.gslide-desc');
2401        var slideDesc = slide.querySelector('.gdesc-inner');
2402        var finalCallback = callback;
2403        var titleID = 'gSlideTitle_' + this.index;
2404        var textID = 'gSlideDesc_' + this.index;
2405
2406        if (isFunction(settings.afterSlideLoad)) {
2407          finalCallback = function finalCallback() {
2408            if (isFunction(callback)) {
2409              callback();
2410            }
2411
2412            settings.afterSlideLoad({
2413              index: _this.index,
2414              slide: slide,
2415              player: _this.instance.getSlidePlayerInstance(_this.index)
2416            });
2417          };
2418        }
2419
2420        if (slideConfig.title == '' && slideConfig.description == '') {
2421          if (slideDesc) {
2422            slideDesc.parentNode.parentNode.removeChild(slideDesc.parentNode);
2423          }
2424        } else {
2425          if (slideTitle && slideConfig.title !== '') {
2426            slideTitle.id = titleID;
2427            slideTitle.innerHTML = slideConfig.title;
2428          } else {
2429            slideTitle.parentNode.removeChild(slideTitle);
2430          }
2431
2432          if (slideText && slideConfig.description !== '') {
2433            slideText.id = textID;
2434
2435            if (isMobileDevice && settings.moreLength > 0) {
2436              slideConfig.smallDescription = this.slideShortDesc(slideConfig.description, settings.moreLength, settings.moreText);
2437              slideText.innerHTML = slideConfig.smallDescription;
2438              this.descriptionEvents(slideText, slideConfig);
2439            } else {
2440              slideText.innerHTML = slideConfig.description;
2441            }
2442          } else {
2443            slideText.parentNode.removeChild(slideText);
2444          }
2445
2446          addClass(slideMedia.parentNode, "desc-".concat(position));
2447          addClass(slideDesc.parentNode, "description-".concat(position));
2448        }
2449
2450        addClass(slideMedia, "gslide-".concat(type));
2451        addClass(slide, 'loaded');
2452
2453        if (type === 'video') {
2454          slideVideo.apply(this.instance, [slide, slideConfig, this.index, finalCallback]);
2455          return;
2456        }
2457
2458        if (type === 'external') {
2459          slideIframe.apply(this, [slide, slideConfig, this.index, finalCallback]);
2460          return;
2461        }
2462
2463        if (type === 'inline') {
2464          slideInline.apply(this.instance, [slide, slideConfig, this.index, finalCallback]);
2465
2466          if (slideConfig.draggable) {
2467            new DragSlides({
2468              dragEl: slide.querySelector('.gslide-inline'),
2469              toleranceX: settings.dragToleranceX,
2470              toleranceY: settings.dragToleranceY,
2471              slide: slide,
2472              instance: this.instance
2473            });
2474          }
2475
2476          return;
2477        }
2478
2479        if (type === 'image') {
2480          slideImage(slide, slideConfig, this.index, function () {
2481            var img = slide.querySelector('img');
2482
2483            if (slideConfig.draggable) {
2484              new DragSlides({
2485                dragEl: img,
2486                toleranceX: settings.dragToleranceX,
2487                toleranceY: settings.dragToleranceY,
2488                slide: slide,
2489                instance: _this.instance
2490              });
2491            }
2492
2493            if (slideConfig.zoomable && img.naturalWidth > img.offsetWidth) {
2494              addClass(img, 'zoomable');
2495              new ZoomImages(img, slide, function () {
2496                _this.instance.resize();
2497              });
2498            }
2499
2500            if (isFunction(finalCallback)) {
2501              finalCallback();
2502            }
2503          });
2504          return;
2505        }
2506
2507        if (isFunction(finalCallback)) {
2508          finalCallback();
2509        }
2510      }
2511    }, {
2512      key: "slideShortDesc",
2513      value: function slideShortDesc(string) {
2514        var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;
2515        var wordBoundary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
2516        var div = document.createElement('div');
2517        div.innerHTML = string;
2518        var cleanedString = div.innerText;
2519        var useWordBoundary = wordBoundary;
2520        string = cleanedString.trim();
2521
2522        if (string.length <= n) {
2523          return string;
2524        }
2525
2526        var subString = string.substr(0, n - 1);
2527
2528        if (!useWordBoundary) {
2529          return subString;
2530        }
2531
2532        div = null;
2533        return subString + '... <a href="#" class="desc-more">' + wordBoundary + '</a>';
2534      }
2535    }, {
2536      key: "descriptionEvents",
2537      value: function descriptionEvents(desc, data) {
2538        var _this2 = this;
2539
2540        var moreLink = desc.querySelector('.desc-more');
2541
2542        if (!moreLink) {
2543          return false;
2544        }
2545
2546        addEvent('click', {
2547          onElement: moreLink,
2548          withCallback: function withCallback(event, target) {
2549            event.preventDefault();
2550            var body = document.body;
2551            var desc = closest(target, '.gslide-desc');
2552
2553            if (!desc) {
2554              return false;
2555            }
2556
2557            desc.innerHTML = data.description;
2558            addClass(body, 'gdesc-open');
2559            var shortEvent = addEvent('click', {
2560              onElement: [body, closest(desc, '.gslide-description')],
2561              withCallback: function withCallback(event, target) {
2562                if (event.target.nodeName.toLowerCase() !== 'a') {
2563                  removeClass(body, 'gdesc-open');
2564                  addClass(body, 'gdesc-closed');
2565                  desc.innerHTML = data.smallDescription;
2566
2567                  _this2.descriptionEvents(desc, data);
2568
2569                  setTimeout(function () {
2570                    removeClass(body, 'gdesc-closed');
2571                  }, 400);
2572                  shortEvent.destroy();
2573                }
2574              }
2575            });
2576          }
2577        });
2578      }
2579    }, {
2580      key: "create",
2581      value: function create() {
2582        return createHTML(this.instance.settings.slideHTML);
2583      }
2584    }, {
2585      key: "getConfig",
2586      value: function getConfig() {
2587        if (!isNode(this.element) && !this.element.hasOwnProperty('draggable')) {
2588          this.element.draggable = this.instance.settings.draggable;
2589        }
2590
2591        var parser = new SlideConfigParser(this.instance.settings.slideExtraAttributes);
2592        this.slideConfig = parser.parseConfig(this.element, this.instance.settings);
2593        return this.slideConfig;
2594      }
2595    }]);
2596
2597    return Slide;
2598  }();
2599
2600  var _version = '3.1.1';
2601  var isMobile$1 = isMobile();
2602  var isTouch$1 = isTouch();
2603  var html = document.getElementsByTagName('html')[0];
2604  var defaults = {
2605    selector: '.glightbox',
2606    elements: null,
2607    skin: 'clean',
2608    theme: 'clean',
2609    closeButton: true,
2610    startAt: null,
2611    autoplayVideos: true,
2612    autofocusVideos: true,
2613    descPosition: 'bottom',
2614    width: '900px',
2615    height: '506px',
2616    videosWidth: '960px',
2617    beforeSlideChange: null,
2618    afterSlideChange: null,
2619    beforeSlideLoad: null,
2620    afterSlideLoad: null,
2621    slideInserted: null,
2622    slideRemoved: null,
2623    slideExtraAttributes: null,
2624    onOpen: null,
2625    onClose: null,
2626    loop: false,
2627    zoomable: true,
2628    draggable: true,
2629    dragAutoSnap: false,
2630    dragToleranceX: 40,
2631    dragToleranceY: 65,
2632    preload: true,
2633    oneSlidePerOpen: false,
2634    touchNavigation: true,
2635    touchFollowAxis: true,
2636    keyboardNavigation: true,
2637    closeOnOutsideClick: true,
2638    plugins: false,
2639    plyr: {
2640      css: 'https://cdn.plyr.io/3.6.8/plyr.css',
2641      js: 'https://cdn.plyr.io/3.6.8/plyr.js',
2642      config: {
2643        ratio: '16:9',
2644        fullscreen: {
2645          enabled: true,
2646          iosNative: true
2647        },
2648        youtube: {
2649          noCookie: true,
2650          rel: 0,
2651          showinfo: 0,
2652          iv_load_policy: 3
2653        },
2654        vimeo: {
2655          byline: false,
2656          portrait: false,
2657          title: false,
2658          transparent: false
2659        }
2660      }
2661    },
2662    openEffect: 'zoom',
2663    closeEffect: 'zoom',
2664    slideEffect: 'slide',
2665    moreText: 'See more',
2666    moreLength: 60,
2667    cssEfects: {
2668      fade: {
2669        "in": 'fadeIn',
2670        out: 'fadeOut'
2671      },
2672      zoom: {
2673        "in": 'zoomIn',
2674        out: 'zoomOut'
2675      },
2676      slide: {
2677        "in": 'slideInRight',
2678        out: 'slideOutLeft'
2679      },
2680      slideBack: {
2681        "in": 'slideInLeft',
2682        out: 'slideOutRight'
2683      },
2684      none: {
2685        "in": 'none',
2686        out: 'none'
2687      }
2688    },
2689    svg: {
2690      close: '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" xml:space="preserve"><g><g><path d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306C514.019,27.23,514.019,14.135,505.943,6.058z"/></g></g><g><g><path d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"/></g></g></svg>',
2691      next: '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 477.175 477.175" xml:space="preserve"> <g><path d="M360.731,229.075l-225.1-225.1c-5.3-5.3-13.8-5.3-19.1,0s-5.3,13.8,0,19.1l215.5,215.5l-215.5,215.5c-5.3,5.3-5.3,13.8,0,19.1c2.6,2.6,6.1,4,9.5,4c3.4,0,6.9-1.3,9.5-4l225.1-225.1C365.931,242.875,365.931,234.275,360.731,229.075z"/></g></svg>',
2692      prev: '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 477.175 477.175" xml:space="preserve"><g><path d="M145.188,238.575l215.5-215.5c5.3-5.3,5.3-13.8,0-19.1s-13.8-5.3-19.1,0l-225.1,225.1c-5.3,5.3-5.3,13.8,0,19.1l225.1,225c2.6,2.6,6.1,4,9.5,4s6.9-1.3,9.5-4c5.3-5.3,5.3-13.8,0-19.1L145.188,238.575z"/></g></svg>'
2693    }
2694  };
2695  defaults.slideHTML = "<div class=\"gslide\">\n    <div class=\"gslide-inner-content\">\n        <div class=\"ginner-container\">\n            <div class=\"gslide-media\">\n            </div>\n            <div class=\"gslide-description\">\n                <div class=\"gdesc-inner\">\n                    <h4 class=\"gslide-title\"></h4>\n                    <div class=\"gslide-desc\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>";
2696  defaults.lightboxHTML = "<div id=\"glightbox-body\" class=\"glightbox-container\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"false\">\n    <div class=\"gloader visible\"></div>\n    <div class=\"goverlay\"></div>\n    <div class=\"gcontainer\">\n    <div id=\"glightbox-slider\" class=\"gslider\"></div>\n    <button class=\"gclose gbtn\" aria-label=\"Close\" data-taborder=\"3\">{closeSVG}</button>\n    <button class=\"gprev gbtn\" aria-label=\"Previous\" data-taborder=\"2\">{prevSVG}</button>\n    <button class=\"gnext gbtn\" aria-label=\"Next\" data-taborder=\"1\">{nextSVG}</button>\n</div>\n</div>";
2697
2698  var GlightboxInit = function () {
2699    function GlightboxInit() {
2700      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2701
2702      _classCallCheck(this, GlightboxInit);
2703
2704      this.customOptions = options;
2705      this.settings = extend(defaults, options);
2706      this.effectsClasses = this.getAnimationClasses();
2707      this.videoPlayers = {};
2708      this.apiEvents = [];
2709      this.fullElementsList = false;
2710    }
2711
2712    _createClass(GlightboxInit, [{
2713      key: "init",
2714      value: function init() {
2715        var _this = this;
2716
2717        var selector = this.getSelector();
2718
2719        if (selector) {
2720          this.baseEvents = addEvent('click', {
2721            onElement: selector,
2722            withCallback: function withCallback(e, target) {
2723              e.preventDefault();
2724
2725              _this.open(target);
2726            }
2727          });
2728        }
2729
2730        this.elements = this.getElements();
2731      }
2732    }, {
2733      key: "open",
2734      value: function open() {
2735        var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
2736        var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
2737
2738        if (this.elements.length == 0) {
2739          return false;
2740        }
2741
2742        this.activeSlide = null;
2743        this.prevActiveSlideIndex = null;
2744        this.prevActiveSlide = null;
2745        var index = isNumber(startAt) ? startAt : this.settings.startAt;
2746
2747        if (isNode(element)) {
2748          var gallery = element.getAttribute('data-gallery');
2749
2750          if (gallery) {
2751            this.fullElementsList = this.elements;
2752            this.elements = this.getGalleryElements(this.elements, gallery);
2753          }
2754
2755          if (isNil(index)) {
2756            index = this.getElementIndex(element);
2757
2758            if (index < 0) {
2759              index = 0;
2760            }
2761          }
2762        }
2763
2764        if (!isNumber(index)) {
2765          index = 0;
2766        }
2767
2768        this.build();
2769        animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade["in"]);
2770        var body = document.body;
2771        var scrollBar = window.innerWidth - document.documentElement.clientWidth;
2772
2773        if (scrollBar > 0) {
2774          var styleSheet = document.createElement('style');
2775          styleSheet.type = 'text/css';
2776          styleSheet.className = 'gcss-styles';
2777          styleSheet.innerText = ".gscrollbar-fixer {margin-right: ".concat(scrollBar, "px}");
2778          document.head.appendChild(styleSheet);
2779          addClass(body, 'gscrollbar-fixer');
2780        }
2781
2782        addClass(body, 'glightbox-open');
2783        addClass(html, 'glightbox-open');
2784
2785        if (isMobile$1) {
2786          addClass(document.body, 'glightbox-mobile');
2787          this.settings.slideEffect = 'slide';
2788        }
2789
2790        this.showSlide(index, true);
2791
2792        if (this.elements.length == 1) {
2793          addClass(this.prevButton, 'glightbox-button-hidden');
2794          addClass(this.nextButton, 'glightbox-button-hidden');
2795        } else {
2796          removeClass(this.prevButton, 'glightbox-button-hidden');
2797          removeClass(this.nextButton, 'glightbox-button-hidden');
2798        }
2799
2800        this.lightboxOpen = true;
2801        this.trigger('open');
2802
2803        if (isFunction(this.settings.onOpen)) {
2804          this.settings.onOpen();
2805        }
2806
2807        if (isTouch$1 && this.settings.touchNavigation) {
2808          touchNavigation(this);
2809        }
2810
2811        if (this.settings.keyboardNavigation) {
2812          keyboardNavigation(this);
2813        }
2814      }
2815    }, {
2816      key: "openAt",
2817      value: function openAt() {
2818        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
2819        this.open(null, index);
2820      }
2821    }, {
2822      key: "showSlide",
2823      value: function showSlide() {
2824        var _this2 = this;
2825
2826        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
2827        var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2828        show(this.loader);
2829        this.index = parseInt(index);
2830        var current = this.slidesContainer.querySelector('.current');
2831
2832        if (current) {
2833          removeClass(current, 'current');
2834        }
2835
2836        this.slideAnimateOut();
2837        var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index];
2838
2839        if (hasClass(slideNode, 'loaded')) {
2840          this.slideAnimateIn(slideNode, first);
2841          hide(this.loader);
2842        } else {
2843          show(this.loader);
2844          var slide = this.elements[index];
2845          var slideData = {
2846            index: this.index,
2847            slide: slideNode,
2848            slideNode: slideNode,
2849            slideConfig: slide.slideConfig,
2850            slideIndex: this.index,
2851            trigger: slide.node,
2852            player: null
2853          };
2854          this.trigger('slide_before_load', slideData);
2855          slide.instance.setContent(slideNode, function () {
2856            hide(_this2.loader);
2857
2858            _this2.resize();
2859
2860            _this2.slideAnimateIn(slideNode, first);
2861
2862            _this2.trigger('slide_after_load', slideData);
2863          });
2864        }
2865
2866        this.slideDescription = slideNode.querySelector('.gslide-description');
2867        this.slideDescriptionContained = this.slideDescription && hasClass(this.slideDescription.parentNode, 'gslide-media');
2868
2869        if (this.settings.preload) {
2870          this.preloadSlide(index + 1);
2871          this.preloadSlide(index - 1);
2872        }
2873
2874        this.updateNavigationClasses();
2875        this.activeSlide = slideNode;
2876      }
2877    }, {
2878      key: "preloadSlide",
2879      value: function preloadSlide(index) {
2880        var _this3 = this;
2881
2882        if (index < 0 || index > this.elements.length - 1) {
2883          return false;
2884        }
2885
2886        if (isNil(this.elements[index])) {
2887          return false;
2888        }
2889
2890        var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index];
2891
2892        if (hasClass(slideNode, 'loaded')) {
2893          return false;
2894        }
2895
2896        var slide = this.elements[index];
2897        var type = slide.type;
2898        var slideData = {
2899          index: index,
2900          slide: slideNode,
2901          slideNode: slideNode,
2902          slideConfig: slide.slideConfig,
2903          slideIndex: index,
2904          trigger: slide.node,
2905          player: null
2906        };
2907        this.trigger('slide_before_load', slideData);
2908
2909        if (type == 'video' || type == 'external') {
2910          setTimeout(function () {
2911            slide.instance.setContent(slideNode, function () {
2912              _this3.trigger('slide_after_load', slideData);
2913            });
2914          }, 200);
2915        } else {
2916          slide.instance.setContent(slideNode, function () {
2917            _this3.trigger('slide_after_load', slideData);
2918          });
2919        }
2920      }
2921    }, {
2922      key: "prevSlide",
2923      value: function prevSlide() {
2924        this.goToSlide(this.index - 1);
2925      }
2926    }, {
2927      key: "nextSlide",
2928      value: function nextSlide() {
2929        this.goToSlide(this.index + 1);
2930      }
2931    }, {
2932      key: "goToSlide",
2933      value: function goToSlide() {
2934        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
2935        this.prevActiveSlide = this.activeSlide;
2936        this.prevActiveSlideIndex = this.index;
2937
2938        if (!this.loop() && (index < 0 || index > this.elements.length - 1)) {
2939          return false;
2940        }
2941
2942        if (index < 0) {
2943          index = this.elements.length - 1;
2944        } else if (index >= this.elements.length) {
2945          index = 0;
2946        }
2947
2948        this.showSlide(index);
2949      }
2950    }, {
2951      key: "insertSlide",
2952      value: function insertSlide() {
2953        var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2954        var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
2955
2956        if (index < 0) {
2957          index = this.elements.length;
2958        }
2959
2960        var slide = new Slide(config, this, index);
2961        var data = slide.getConfig();
2962        var slideInfo = extend({}, data);
2963        var newSlide = slide.create();
2964        var totalSlides = this.elements.length - 1;
2965        slideInfo.index = index;
2966        slideInfo.node = false;
2967        slideInfo.instance = slide;
2968        slideInfo.slideConfig = data;
2969        this.elements.splice(index, 0, slideInfo);
2970        var addedSlideNode = null;
2971        var addedSlidePlayer = null;
2972
2973        if (this.slidesContainer) {
2974          if (index > totalSlides) {
2975            this.slidesContainer.appendChild(newSlide);
2976          } else {
2977            var existingSlide = this.slidesContainer.querySelectorAll('.gslide')[index];
2978            this.slidesContainer.insertBefore(newSlide, existingSlide);
2979          }
2980
2981          if (this.settings.preload && this.index == 0 && index == 0 || this.index - 1 == index || this.index + 1 == index) {
2982            this.preloadSlide(index);
2983          }
2984
2985          if (this.index == 0 && index == 0) {
2986            this.index = 1;
2987          }
2988
2989          this.updateNavigationClasses();
2990          addedSlideNode = this.slidesContainer.querySelectorAll('.gslide')[index];
2991          addedSlidePlayer = this.getSlidePlayerInstance(index);
2992          slideInfo.slideNode = addedSlideNode;
2993        }
2994
2995        this.trigger('slide_inserted', {
2996          index: index,
2997          slide: addedSlideNode,
2998          slideNode: addedSlideNode,
2999          slideConfig: data,
3000          slideIndex: index,
3001          trigger: null,
3002          player: addedSlidePlayer
3003        });
3004
3005        if (isFunction(this.settings.slideInserted)) {
3006          this.settings.slideInserted({
3007            index: index,
3008            slide: addedSlideNode,
3009            player: addedSlidePlayer
3010          });
3011        }
3012      }
3013    }, {
3014      key: "removeSlide",
3015      value: function removeSlide() {
3016        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
3017
3018        if (index < 0 || index > this.elements.length - 1) {
3019          return false;
3020        }
3021
3022        var slide = this.slidesContainer && this.slidesContainer.querySelectorAll('.gslide')[index];
3023
3024        if (slide) {
3025          if (this.getActiveSlideIndex() == index) {
3026            if (index == this.elements.length - 1) {
3027              this.prevSlide();
3028            } else {
3029              this.nextSlide();
3030            }
3031          }
3032
3033          slide.parentNode.removeChild(slide);
3034        }
3035
3036        this.elements.splice(index, 1);
3037        this.trigger('slide_removed', index);
3038
3039        if (isFunction(this.settings.slideRemoved)) {
3040          this.settings.slideRemoved(index);
3041        }
3042      }
3043    }, {
3044      key: "slideAnimateIn",
3045      value: function slideAnimateIn(slide, first) {
3046        var _this4 = this;
3047
3048        var slideMedia = slide.querySelector('.gslide-media');
3049        var slideDesc = slide.querySelector('.gslide-description');
3050        var prevData = {
3051          index: this.prevActiveSlideIndex,
3052          slide: this.prevActiveSlide,
3053          slideNode: this.prevActiveSlide,
3054          slideIndex: this.prevActiveSlide,
3055          slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig,
3056          trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node,
3057          player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)
3058        };
3059        var nextData = {
3060          index: this.index,
3061          slide: this.activeSlide,
3062          slideNode: this.activeSlide,
3063          slideConfig: this.elements[this.index].slideConfig,
3064          slideIndex: this.index,
3065          trigger: this.elements[this.index].node,
3066          player: this.getSlidePlayerInstance(this.index)
3067        };
3068
3069        if (slideMedia.offsetWidth > 0 && slideDesc) {
3070          hide(slideDesc);
3071          slideDesc.style.display = '';
3072        }
3073
3074        removeClass(slide, this.effectsClasses);
3075
3076        if (first) {
3077          animateElement(slide, this.settings.cssEfects[this.settings.openEffect]["in"], function () {
3078            if (_this4.settings.autoplayVideos) {
3079              _this4.slidePlayerPlay(slide);
3080            }
3081
3082            _this4.trigger('slide_changed', {
3083              prev: prevData,
3084              current: nextData
3085            });
3086
3087            if (isFunction(_this4.settings.afterSlideChange)) {
3088              _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]);
3089            }
3090          });
3091        } else {
3092          var effectName = this.settings.slideEffect;
3093          var animIn = effectName !== 'none' ? this.settings.cssEfects[effectName]["in"] : effectName;
3094
3095          if (this.prevActiveSlideIndex > this.index) {
3096            if (this.settings.slideEffect == 'slide') {
3097              animIn = this.settings.cssEfects.slideBack["in"];
3098            }
3099          }
3100
3101          animateElement(slide, animIn, function () {
3102            if (_this4.settings.autoplayVideos) {
3103              _this4.slidePlayerPlay(slide);
3104            }
3105
3106            _this4.trigger('slide_changed', {
3107              prev: prevData,
3108              current: nextData
3109            });
3110
3111            if (isFunction(_this4.settings.afterSlideChange)) {
3112              _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]);
3113            }
3114          });
3115        }
3116
3117        setTimeout(function () {
3118          _this4.resize(slide);
3119        }, 100);
3120        addClass(slide, 'current');
3121      }
3122    }, {
3123      key: "slideAnimateOut",
3124      value: function slideAnimateOut() {
3125        if (!this.prevActiveSlide) {
3126          return false;
3127        }
3128
3129        var prevSlide = this.prevActiveSlide;
3130        removeClass(prevSlide, this.effectsClasses);
3131        addClass(prevSlide, 'prev');
3132        var animation = this.settings.slideEffect;
3133        var animOut = animation !== 'none' ? this.settings.cssEfects[animation].out : animation;
3134        this.slidePlayerPause(prevSlide);
3135        this.trigger('slide_before_change', {
3136          prev: {
3137            index: this.prevActiveSlideIndex,
3138            slide: this.prevActiveSlide,
3139            slideNode: this.prevActiveSlide,
3140            slideIndex: this.prevActiveSlideIndex,
3141            slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig,
3142            trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node,
3143            player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)
3144          },
3145          current: {
3146            index: this.index,
3147            slide: this.activeSlide,
3148            slideNode: this.activeSlide,
3149            slideIndex: this.index,
3150            slideConfig: this.elements[this.index].slideConfig,
3151            trigger: this.elements[this.index].node,
3152            player: this.getSlidePlayerInstance(this.index)
3153          }
3154        });
3155
3156        if (isFunction(this.settings.beforeSlideChange)) {
3157          this.settings.beforeSlideChange.apply(this, [{
3158            index: this.prevActiveSlideIndex,
3159            slide: this.prevActiveSlide,
3160            player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)
3161          }, {
3162            index: this.index,
3163            slide: this.activeSlide,
3164            player: this.getSlidePlayerInstance(this.index)
3165          }]);
3166        }
3167
3168        if (this.prevActiveSlideIndex > this.index && this.settings.slideEffect == 'slide') {
3169          animOut = this.settings.cssEfects.slideBack.out;
3170        }
3171
3172        animateElement(prevSlide, animOut, function () {
3173          var container = prevSlide.querySelector('.ginner-container');
3174          var media = prevSlide.querySelector('.gslide-media');
3175          var desc = prevSlide.querySelector('.gslide-description');
3176          container.style.transform = '';
3177          media.style.transform = '';
3178          removeClass(media, 'greset');
3179          media.style.opacity = '';
3180
3181          if (desc) {
3182            desc.style.opacity = '';
3183          }
3184
3185          removeClass(prevSlide, 'prev');
3186        });
3187      }
3188    }, {
3189      key: "getAllPlayers",
3190      value: function getAllPlayers() {
3191        return this.videoPlayers;
3192      }
3193    }, {
3194      key: "getSlidePlayerInstance",
3195      value: function getSlidePlayerInstance(index) {
3196        var id = 'gvideo' + index;
3197        var videoPlayers = this.getAllPlayers();
3198
3199        if (has(videoPlayers, id) && videoPlayers[id]) {
3200          return videoPlayers[id];
3201        }
3202
3203        return false;
3204      }
3205    }, {
3206      key: "stopSlideVideo",
3207      value: function stopSlideVideo(slide) {
3208        if (isNode(slide)) {
3209          var node = slide.querySelector('.gvideo-wrapper');
3210
3211          if (node) {
3212            slide = node.getAttribute('data-index');
3213          }
3214        }
3215
3216        console.log('stopSlideVideo is deprecated, use slidePlayerPause');
3217        var player = this.getSlidePlayerInstance(slide);
3218
3219        if (player && player.playing) {
3220          player.pause();
3221        }
3222      }
3223    }, {
3224      key: "slidePlayerPause",
3225      value: function slidePlayerPause(slide) {
3226        if (isNode(slide)) {
3227          var node = slide.querySelector('.gvideo-wrapper');
3228
3229          if (node) {
3230            slide = node.getAttribute('data-index');
3231          }
3232        }
3233
3234        var player = this.getSlidePlayerInstance(slide);
3235
3236        if (player && player.playing) {
3237          player.pause();
3238        }
3239      }
3240    }, {
3241      key: "playSlideVideo",
3242      value: function playSlideVideo(slide) {
3243        if (isNode(slide)) {
3244          var node = slide.querySelector('.gvideo-wrapper');
3245
3246          if (node) {
3247            slide = node.getAttribute('data-index');
3248          }
3249        }
3250
3251        console.log('playSlideVideo is deprecated, use slidePlayerPlay');
3252        var player = this.getSlidePlayerInstance(slide);
3253
3254        if (player && !player.playing) {
3255          player.play();
3256        }
3257      }
3258    }, {
3259      key: "slidePlayerPlay",
3260      value: function slidePlayerPlay(slide) {
3261        if (isNode(slide)) {
3262          var node = slide.querySelector('.gvideo-wrapper');
3263
3264          if (node) {
3265            slide = node.getAttribute('data-index');
3266          }
3267        }
3268
3269        var player = this.getSlidePlayerInstance(slide);
3270
3271        if (player && !player.playing) {
3272          player.play();
3273
3274          if (this.settings.autofocusVideos) {
3275            player.elements.container.focus();
3276          }
3277        }
3278      }
3279    }, {
3280      key: "setElements",
3281      value: function setElements(elements) {
3282        var _this5 = this;
3283
3284        this.settings.elements = false;
3285        var newElements = [];
3286
3287        if (elements && elements.length) {
3288          each(elements, function (el, i) {
3289            var slide = new Slide(el, _this5, i);
3290            var data = slide.getConfig();
3291            var slideInfo = extend({}, data);
3292            slideInfo.slideConfig = data;
3293            slideInfo.instance = slide;
3294            slideInfo.index = i;
3295            newElements.push(slideInfo);
3296          });
3297        }
3298
3299        this.elements = newElements;
3300
3301        if (this.lightboxOpen) {
3302          this.slidesContainer.innerHTML = '';
3303
3304          if (this.elements.length) {
3305            each(this.elements, function () {
3306              var slide = createHTML(_this5.settings.slideHTML);
3307
3308              _this5.slidesContainer.appendChild(slide);
3309            });
3310            this.showSlide(0, true);
3311          }
3312        }
3313      }
3314    }, {
3315      key: "getElementIndex",
3316      value: function getElementIndex(node) {
3317        var index = false;
3318        each(this.elements, function (el, i) {
3319          if (has(el, 'node') && el.node == node) {
3320            index = i;
3321            return true;
3322          }
3323        });
3324        return index;
3325      }
3326    }, {
3327      key: "getElements",
3328      value: function getElements() {
3329        var _this6 = this;
3330
3331        var list = [];
3332        this.elements = this.elements ? this.elements : [];
3333
3334        if (!isNil(this.settings.elements) && isArray(this.settings.elements) && this.settings.elements.length) {
3335          each(this.settings.elements, function (el, i) {
3336            var slide = new Slide(el, _this6, i);
3337            var elData = slide.getConfig();
3338            var slideInfo = extend({}, elData);
3339            slideInfo.node = false;
3340            slideInfo.index = i;
3341            slideInfo.instance = slide;
3342            slideInfo.slideConfig = elData;
3343            list.push(slideInfo);
3344          });
3345        }
3346
3347        var nodes = false;
3348        var selector = this.getSelector();
3349
3350        if (selector) {
3351          nodes = document.querySelectorAll(this.getSelector());
3352        }
3353
3354        if (!nodes) {
3355          return list;
3356        }
3357
3358        each(nodes, function (el, i) {
3359          var slide = new Slide(el, _this6, i);
3360          var elData = slide.getConfig();
3361          var slideInfo = extend({}, elData);
3362          slideInfo.node = el;
3363          slideInfo.index = i;
3364          slideInfo.instance = slide;
3365          slideInfo.slideConfig = elData;
3366          slideInfo.gallery = el.getAttribute('data-gallery');
3367          list.push(slideInfo);
3368        });
3369        return list;
3370      }
3371    }, {
3372      key: "getGalleryElements",
3373      value: function getGalleryElements(list, gallery) {
3374        return list.filter(function (el) {
3375          return el.gallery == gallery;
3376        });
3377      }
3378    }, {
3379      key: "getSelector",
3380      value: function getSelector() {
3381        if (this.settings.elements) {
3382          return false;
3383        }
3384
3385        if (this.settings.selector && this.settings.selector.substring(0, 5) == 'data-') {
3386          return "*[".concat(this.settings.selector, "]");
3387        }
3388
3389        return this.settings.selector;
3390      }
3391    }, {
3392      key: "getActiveSlide",
3393      value: function getActiveSlide() {
3394        return this.slidesContainer.querySelectorAll('.gslide')[this.index];
3395      }
3396    }, {
3397      key: "getActiveSlideIndex",
3398      value: function getActiveSlideIndex() {
3399        return this.index;
3400      }
3401    }, {
3402      key: "getAnimationClasses",
3403      value: function getAnimationClasses() {
3404        var effects = [];
3405
3406        for (var key in this.settings.cssEfects) {
3407          if (this.settings.cssEfects.hasOwnProperty(key)) {
3408            var effect = this.settings.cssEfects[key];
3409            effects.push("g".concat(effect["in"]));
3410            effects.push("g".concat(effect.out));
3411          }
3412        }
3413
3414        return effects.join(' ');
3415      }
3416    }, {
3417      key: "build",
3418      value: function build() {
3419        var _this7 = this;
3420
3421        if (this.built) {
3422          return false;
3423        }
3424
3425        var children = document.body.childNodes;
3426        var bodyChildElms = [];
3427        each(children, function (el) {
3428          if (el.parentNode == document.body && el.nodeName.charAt(0) !== '#' && el.hasAttribute && !el.hasAttribute('aria-hidden')) {
3429            bodyChildElms.push(el);
3430            el.setAttribute('aria-hidden', 'true');
3431          }
3432        });
3433        var nextSVG = has(this.settings.svg, 'next') ? this.settings.svg.next : '';
3434        var prevSVG = has(this.settings.svg, 'prev') ? this.settings.svg.prev : '';
3435        var closeSVG = has(this.settings.svg, 'close') ? this.settings.svg.close : '';
3436        var lightboxHTML = this.settings.lightboxHTML;
3437        lightboxHTML = lightboxHTML.replace(/{nextSVG}/g, nextSVG);
3438        lightboxHTML = lightboxHTML.replace(/{prevSVG}/g, prevSVG);
3439        lightboxHTML = lightboxHTML.replace(/{closeSVG}/g, closeSVG);
3440        lightboxHTML = createHTML(lightboxHTML);
3441        document.body.appendChild(lightboxHTML);
3442        var modal = document.getElementById('glightbox-body');
3443        this.modal = modal;
3444        var closeButton = modal.querySelector('.gclose');
3445        this.prevButton = modal.querySelector('.gprev');
3446        this.nextButton = modal.querySelector('.gnext');
3447        this.overlay = modal.querySelector('.goverlay');
3448        this.loader = modal.querySelector('.gloader');
3449        this.slidesContainer = document.getElementById('glightbox-slider');
3450        this.bodyHiddenChildElms = bodyChildElms;
3451        this.events = {};
3452        addClass(this.modal, 'glightbox-' + this.settings.skin);
3453
3454        if (this.settings.closeButton && closeButton) {
3455          this.events['close'] = addEvent('click', {
3456            onElement: closeButton,
3457            withCallback: function withCallback(e, target) {
3458              e.preventDefault();
3459
3460              _this7.close();
3461            }
3462          });
3463        }
3464
3465        if (closeButton && !this.settings.closeButton) {
3466          closeButton.parentNode.removeChild(closeButton);
3467        }
3468
3469        if (this.nextButton) {
3470          this.events['next'] = addEvent('click', {
3471            onElement: this.nextButton,
3472            withCallback: function withCallback(e, target) {
3473              e.preventDefault();
3474
3475              _this7.nextSlide();
3476            }
3477          });
3478        }
3479
3480        if (this.prevButton) {
3481          this.events['prev'] = addEvent('click', {
3482            onElement: this.prevButton,
3483            withCallback: function withCallback(e, target) {
3484              e.preventDefault();
3485
3486              _this7.prevSlide();
3487            }
3488          });
3489        }
3490
3491        if (this.settings.closeOnOutsideClick) {
3492          this.events['outClose'] = addEvent('click', {
3493            onElement: modal,
3494            withCallback: function withCallback(e, target) {
3495              if (!_this7.preventOutsideClick && !hasClass(document.body, 'glightbox-mobile') && !closest(e.target, '.ginner-container')) {
3496                if (!closest(e.target, '.gbtn') && !hasClass(e.target, 'gnext') && !hasClass(e.target, 'gprev')) {
3497                  _this7.close();
3498                }
3499              }
3500            }
3501          });
3502        }
3503
3504        each(this.elements, function (slide, i) {
3505          _this7.slidesContainer.appendChild(slide.instance.create());
3506
3507          slide.slideNode = _this7.slidesContainer.querySelectorAll('.gslide')[i];
3508        });
3509
3510        if (isTouch$1) {
3511          addClass(document.body, 'glightbox-touch');
3512        }
3513
3514        this.events['resize'] = addEvent('resize', {
3515          onElement: window,
3516          withCallback: function withCallback() {
3517            _this7.resize();
3518          }
3519        });
3520        this.built = true;
3521      }
3522    }, {
3523      key: "resize",
3524      value: function resize() {
3525        var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
3526        slide = !slide ? this.activeSlide : slide;
3527
3528        if (!slide || hasClass(slide, 'zoomed')) {
3529          return;
3530        }
3531
3532        var winSize = windowSize();
3533        var video = slide.querySelector('.gvideo-wrapper');
3534        var image = slide.querySelector('.gslide-image');
3535        var description = this.slideDescription;
3536        var winWidth = winSize.width;
3537        var winHeight = winSize.height;
3538
3539        if (winWidth <= 768) {
3540          addClass(document.body, 'glightbox-mobile');
3541        } else {
3542          removeClass(document.body, 'glightbox-mobile');
3543        }
3544
3545        if (!video && !image) {
3546          return;
3547        }
3548
3549        var descriptionResize = false;
3550
3551        if (description && (hasClass(description, 'description-bottom') || hasClass(description, 'description-top')) && !hasClass(description, 'gabsolute')) {
3552          descriptionResize = true;
3553        }
3554
3555        if (image) {
3556          if (winWidth <= 768) {
3557            var imgNode = image.querySelector('img');
3558          } else if (descriptionResize) {
3559            var descHeight = description.offsetHeight;
3560
3561            var _imgNode = image.querySelector('img');
3562
3563            _imgNode.setAttribute('style', "max-height: calc(100vh - ".concat(descHeight, "px)"));
3564
3565            description.setAttribute('style', "max-width: ".concat(_imgNode.offsetWidth, "px;"));
3566          }
3567        }
3568
3569        if (video) {
3570          var ratio = has(this.settings.plyr.config, 'ratio') ? this.settings.plyr.config.ratio : '';
3571
3572          if (!ratio) {
3573            var containerWidth = video.clientWidth;
3574            var containerHeight = video.clientHeight;
3575            var divisor = containerWidth / containerHeight;
3576            ratio = "".concat(containerWidth / divisor, ":").concat(containerHeight / divisor);
3577          }
3578
3579          var videoRatio = ratio.split(':');
3580          var videoWidth = this.settings.videosWidth;
3581          var maxWidth = this.settings.videosWidth;
3582
3583          if (isNumber(videoWidth) || videoWidth.indexOf('px') !== -1) {
3584            maxWidth = parseInt(videoWidth);
3585          } else {
3586            if (videoWidth.indexOf('vw') !== -1) {
3587              maxWidth = winWidth * parseInt(videoWidth) / 100;
3588            } else if (videoWidth.indexOf('vh') !== -1) {
3589              maxWidth = winHeight * parseInt(videoWidth) / 100;
3590            } else if (videoWidth.indexOf('%') !== -1) {
3591              maxWidth = winWidth * parseInt(videoWidth) / 100;
3592            } else {
3593              maxWidth = parseInt(video.clientWidth);
3594            }
3595          }
3596
3597          var maxHeight = maxWidth / (parseInt(videoRatio[0]) / parseInt(videoRatio[1]));
3598          maxHeight = Math.floor(maxHeight);
3599
3600          if (descriptionResize) {
3601            winHeight = winHeight - description.offsetHeight;
3602          }
3603
3604          if (maxWidth > winWidth || maxHeight > winHeight || winHeight < maxHeight && winWidth > maxWidth) {
3605            var vwidth = video.offsetWidth;
3606            var vheight = video.offsetHeight;
3607
3608            var _ratio = winHeight / vheight;
3609
3610            var vsize = {
3611              width: vwidth * _ratio,
3612              height: vheight * _ratio
3613            };
3614            video.parentNode.setAttribute('style', "max-width: ".concat(vsize.width, "px"));
3615
3616            if (descriptionResize) {
3617              description.setAttribute('style', "max-width: ".concat(vsize.width, "px;"));
3618            }
3619          } else {
3620            video.parentNode.style.maxWidth = "".concat(videoWidth);
3621
3622            if (descriptionResize) {
3623              description.setAttribute('style', "max-width: ".concat(videoWidth, ";"));
3624            }
3625          }
3626        }
3627      }
3628    }, {
3629      key: "reload",
3630      value: function reload() {
3631        this.init();
3632      }
3633    }, {
3634      key: "updateNavigationClasses",
3635      value: function updateNavigationClasses() {
3636        var loop = this.loop();
3637        removeClass(this.nextButton, 'disabled');
3638        removeClass(this.prevButton, 'disabled');
3639
3640        if (this.index == 0 && this.elements.length - 1 == 0) {
3641          addClass(this.prevButton, 'disabled');
3642          addClass(this.nextButton, 'disabled');
3643        } else if (this.index === 0 && !loop) {
3644          addClass(this.prevButton, 'disabled');
3645        } else if (this.index === this.elements.length - 1 && !loop) {
3646          addClass(this.nextButton, 'disabled');
3647        }
3648      }
3649    }, {
3650      key: "loop",
3651      value: function loop() {
3652        var loop = has(this.settings, 'loopAtEnd') ? this.settings.loopAtEnd : null;
3653        loop = has(this.settings, 'loop') ? this.settings.loop : loop;
3654        return loop;
3655      }
3656    }, {
3657      key: "close",
3658      value: function close() {
3659        var _this8 = this;
3660
3661        if (!this.lightboxOpen) {
3662          if (this.events) {
3663            for (var key in this.events) {
3664              if (this.events.hasOwnProperty(key)) {
3665                this.events[key].destroy();
3666              }
3667            }
3668
3669            this.events = null;
3670          }
3671
3672          return false;
3673        }
3674
3675        if (this.closing) {
3676          return false;
3677        }
3678
3679        this.closing = true;
3680        this.slidePlayerPause(this.activeSlide);
3681
3682        if (this.fullElementsList) {
3683          this.elements = this.fullElementsList;
3684        }
3685
3686        if (this.bodyHiddenChildElms.length) {
3687          each(this.bodyHiddenChildElms, function (el) {
3688            el.removeAttribute('aria-hidden');
3689          });
3690        }
3691
3692        addClass(this.modal, 'glightbox-closing');
3693        animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade.out);
3694        animateElement(this.activeSlide, this.settings.cssEfects[this.settings.closeEffect].out, function () {
3695          _this8.activeSlide = null;
3696          _this8.prevActiveSlideIndex = null;
3697          _this8.prevActiveSlide = null;
3698          _this8.built = false;
3699
3700          if (_this8.events) {
3701            for (var _key in _this8.events) {
3702              if (_this8.events.hasOwnProperty(_key)) {
3703                _this8.events[_key].destroy();
3704              }
3705            }
3706
3707            _this8.events = null;
3708          }
3709
3710          var body = document.body;
3711          removeClass(html, 'glightbox-open');
3712          removeClass(body, 'glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer');
3713
3714          _this8.modal.parentNode.removeChild(_this8.modal);
3715
3716          _this8.trigger('close');
3717
3718          if (isFunction(_this8.settings.onClose)) {
3719            _this8.settings.onClose();
3720          }
3721
3722          var styles = document.querySelector('.gcss-styles');
3723
3724          if (styles) {
3725            styles.parentNode.removeChild(styles);
3726          }
3727
3728          _this8.lightboxOpen = false;
3729          _this8.closing = null;
3730        });
3731      }
3732    }, {
3733      key: "destroy",
3734      value: function destroy() {
3735        this.close();
3736        this.clearAllEvents();
3737
3738        if (this.baseEvents) {
3739          this.baseEvents.destroy();
3740        }
3741      }
3742    }, {
3743      key: "on",
3744      value: function on(evt, callback) {
3745        var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
3746
3747        if (!evt || !isFunction(callback)) {
3748          throw new TypeError('Event name and callback must be defined');
3749        }
3750
3751        this.apiEvents.push({
3752          evt: evt,
3753          once: once,
3754          callback: callback
3755        });
3756      }
3757    }, {
3758      key: "once",
3759      value: function once(evt, callback) {
3760        this.on(evt, callback, true);
3761      }
3762    }, {
3763      key: "trigger",
3764      value: function trigger(eventName) {
3765        var _this9 = this;
3766
3767        var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
3768        var onceTriggered = [];
3769        each(this.apiEvents, function (event, i) {
3770          var evt = event.evt,
3771              once = event.once,
3772              callback = event.callback;
3773
3774          if (evt == eventName) {
3775            callback(data);
3776
3777            if (once) {
3778              onceTriggered.push(i);
3779            }
3780          }
3781        });
3782
3783        if (onceTriggered.length) {
3784          each(onceTriggered, function (i) {
3785            return _this9.apiEvents.splice(i, 1);
3786          });
3787        }
3788      }
3789    }, {
3790      key: "clearAllEvents",
3791      value: function clearAllEvents() {
3792        this.apiEvents.splice(0, this.apiEvents.length);
3793      }
3794    }, {
3795      key: "version",
3796      value: function version() {
3797        return _version;
3798      }
3799    }]);
3800
3801    return GlightboxInit;
3802  }();
3803
3804  function glightbox() {
3805    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3806    var instance = new GlightboxInit(options);
3807    instance.init();
3808    return instance;
3809  }
3810
3811  return glightbox;
3812});
3813
3814},{}],3:[function(require,module,exports){
3815"use strict";
3816
3817(function () {
3818  L.Control.FullScreen = L.Control.extend({
3819    options: {
3820      position: 'topleft',
3821      title: 'Full Screen',
3822      titleCancel: 'Exit Full Screen',
3823      forceSeparateButton: false,
3824      forcePseudoFullscreen: false,
3825      fullscreenElement: false
3826    },
3827    onAdd: function onAdd(map) {
3828      var className = 'leaflet-control-zoom-fullscreen',
3829          container,
3830          content = '';
3831
3832      if (map.zoomControl && !this.options.forceSeparateButton) {
3833        container = map.zoomControl._container;
3834      } else {
3835        container = L.DomUtil.create('div', 'leaflet-bar');
3836      }
3837
3838      if (this.options.content) {
3839        content = this.options.content;
3840      } else {
3841        className += ' fullscreen-icon';
3842      }
3843
3844      this._createButton(this.options.title, className, content, container, this.toggleFullScreen, this);
3845
3846      this._map.fullscreenControl = this;
3847
3848      this._map.on('enterFullscreen exitFullscreen', this._toggleTitle, this);
3849
3850      return container;
3851    },
3852    onRemove: function onRemove(map) {
3853      L.DomEvent.off(this.link, 'click', L.DomEvent.stopPropagation).off(this.link, 'click', L.DomEvent.preventDefault).off(this.link, 'click', this.toggleFullScreen, this);
3854      L.DomEvent.off(this._container, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).off(this._container, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).off(this._container, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, this);
3855      L.DomEvent.off(document, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).off(document, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).off(document, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, this);
3856    },
3857    _createButton: function _createButton(title, className, content, container, fn, context) {
3858      this.link = L.DomUtil.create('a', className, container);
3859      this.link.href = '#';
3860      this.link.title = title;
3861      this.link.innerHTML = content;
3862      this.link.setAttribute('role', 'button');
3863      this.link.setAttribute('aria-label', title);
3864      L.DomEvent.on(this.link, 'click', L.DomEvent.stopPropagation).on(this.link, 'click', L.DomEvent.preventDefault).on(this.link, 'click', fn, context);
3865      L.DomEvent.on(container, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).on(container, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).on(container, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, context);
3866      L.DomEvent.on(document, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).on(document, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).on(document, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, context);
3867      return this.link;
3868    },
3869    toggleFullScreen: function toggleFullScreen() {
3870      var map = this._map;
3871      map._exitFired = false;
3872
3873      if (map._isFullscreen) {
3874        if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) {
3875          fullScreenApi.cancelFullScreen();
3876        } else {
3877          L.DomUtil.removeClass(this.options.fullscreenElement ? this.options.fullscreenElement : map._container, 'leaflet-pseudo-fullscreen');
3878        }
3879
3880        map.fire('exitFullscreen');
3881        map._exitFired = true;
3882        map._isFullscreen = false;
3883      } else {
3884        if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) {
3885          fullScreenApi.requestFullScreen(this.options.fullscreenElement ? this.options.fullscreenElement : map._container);
3886        } else {
3887          L.DomUtil.addClass(this.options.fullscreenElement ? this.options.fullscreenElement : map._container, 'leaflet-pseudo-fullscreen');
3888        }
3889
3890        map.fire('enterFullscreen');
3891        map._isFullscreen = true;
3892      }
3893    },
3894    _toggleTitle: function _toggleTitle() {
3895      this.link.title = this._map._isFullscreen ? this.options.title : this.options.titleCancel;
3896    },
3897    _handleFullscreenChange: function _handleFullscreenChange() {
3898      var map = this._map;
3899      map.invalidateSize();
3900
3901      if (!fullScreenApi.isFullScreen() && !map._exitFired) {
3902        map.fire('exitFullscreen');
3903        map._exitFired = true;
3904        map._isFullscreen = false;
3905      }
3906    }
3907  });
3908  L.Map.include({
3909    toggleFullscreen: function toggleFullscreen() {
3910      this.fullscreenControl.toggleFullScreen();
3911    }
3912  });
3913  L.Map.addInitHook(function () {
3914    if (this.options.fullscreenControl) {
3915      this.addControl(L.control.fullscreen(this.options.fullscreenControlOptions));
3916    }
3917  });
3918
3919  L.control.fullscreen = function (options) {
3920    return new L.Control.FullScreen(options);
3921  };
3922
3923  var fullScreenApi = {
3924    supportsFullScreen: false,
3925    isFullScreen: function isFullScreen() {
3926      return false;
3927    },
3928    requestFullScreen: function requestFullScreen() {},
3929    cancelFullScreen: function cancelFullScreen() {},
3930    fullScreenEventName: '',
3931    prefix: ''
3932  },
3933      browserPrefixes = 'webkit moz o ms khtml'.split(' ');
3934
3935  if (typeof document.exitFullscreen !== 'undefined') {
3936    fullScreenApi.supportsFullScreen = true;
3937  } else {
3938    for (var i = 0, il = browserPrefixes.length; i < il; i++) {
3939      fullScreenApi.prefix = browserPrefixes[i];
3940
3941      if (typeof document[fullScreenApi.prefix + 'CancelFullScreen'] !== 'undefined') {
3942        fullScreenApi.supportsFullScreen = true;
3943        break;
3944      }
3945    }
3946
3947    if (typeof document['msExitFullscreen'] !== 'undefined') {
3948      fullScreenApi.prefix = 'ms';
3949      fullScreenApi.supportsFullScreen = true;
3950    }
3951  }
3952
3953  if (fullScreenApi.supportsFullScreen) {
3954    if (fullScreenApi.prefix === 'ms') {
3955      fullScreenApi.fullScreenEventName = 'MSFullscreenChange';
3956    } else {
3957      fullScreenApi.fullScreenEventName = fullScreenApi.prefix + 'fullscreenchange';
3958    }
3959
3960    fullScreenApi.isFullScreen = function () {
3961      switch (this.prefix) {
3962        case '':
3963          return document.fullscreen;
3964
3965        case 'webkit':
3966          return document.webkitIsFullScreen;
3967
3968        case 'ms':
3969          return document.msFullscreenElement;
3970
3971        default:
3972          return document[this.prefix + 'FullScreen'];
3973      }
3974    };
3975
3976    fullScreenApi.requestFullScreen = function (el) {
3977      switch (this.prefix) {
3978        case '':
3979          return el.requestFullscreen();
3980
3981        case 'ms':
3982          return el.msRequestFullscreen();
3983
3984        default:
3985          return el[this.prefix + 'RequestFullScreen']();
3986      }
3987    };
3988
3989    fullScreenApi.cancelFullScreen = function () {
3990      switch (this.prefix) {
3991        case '':
3992          return document.exitFullscreen();
3993
3994        case 'ms':
3995          return document.msExitFullscreen();
3996
3997        default:
3998          return document[this.prefix + 'CancelFullScreen']();
3999      }
4000    };
4001  }
4002
4003  if (typeof jQuery !== 'undefined') {
4004    jQuery.fn.requestFullScreen = function () {
4005      return this.each(function () {
4006        var el = jQuery(this);
4007
4008        if (fullScreenApi.supportsFullScreen) {
4009          fullScreenApi.requestFullScreen(el);
4010        }
4011      });
4012    };
4013  }
4014
4015  window.fullScreenApi = fullScreenApi;
4016})();
4017
4018},{}],4:[function(require,module,exports){
4019"use strict";
4020
4021function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4022
4023/* @preserve
4024 * Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com
4025 * (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade
4026 */
4027!function (t, i) {
4028  "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && "undefined" != typeof module ? i(exports) : "function" == typeof define && define.amd ? define(["exports"], i) : i(t.L = {});
4029}(void 0, function (t) {
4030  "use strict";
4031
4032  function h(t) {
4033    for (var i, e, n = 1, o = arguments.length; n < o; n++) {
4034      for (i in e = arguments[n]) {
4035        t[i] = e[i];
4036      }
4037    }
4038
4039    return t;
4040  }
4041
4042  var s = Object.create || function (t) {
4043    return i.prototype = t, new i();
4044  };
4045
4046  function i() {}
4047
4048  function p(t, i) {
4049    var e = Array.prototype.slice;
4050    if (t.bind) return t.bind.apply(t, e.call(arguments, 1));
4051    var n = e.call(arguments, 2);
4052    return function () {
4053      return t.apply(i, n.length ? n.concat(e.call(arguments)) : arguments);
4054    };
4055  }
4056
4057  var e = 0;
4058
4059  function m(t) {
4060    return t._leaflet_id = t._leaflet_id || ++e, t._leaflet_id;
4061  }
4062
4063  function n(t, i, e) {
4064    var n,
4065        o,
4066        s = function s() {
4067      n = !1, o && (r.apply(e, o), o = !1);
4068    },
4069        r = function r() {
4070      n ? o = arguments : (t.apply(e, arguments), setTimeout(s, i), n = !0);
4071    };
4072
4073    return r;
4074  }
4075
4076  function o(t, i, e) {
4077    var n = i[1],
4078        o = i[0],
4079        s = n - o;
4080    return t === n && e ? t : ((t - o) % s + s) % s + o;
4081  }
4082
4083  function a() {
4084    return !1;
4085  }
4086
4087  function r(t, i) {
4088    var e = Math.pow(10, void 0 === i ? 6 : i);
4089    return Math.round(t * e) / e;
4090  }
4091
4092  function u(t) {
4093    return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "");
4094  }
4095
4096  function l(t) {
4097    return u(t).split(/\s+/);
4098  }
4099
4100  function c(t, i) {
4101    for (var e in Object.prototype.hasOwnProperty.call(t, "options") || (t.options = t.options ? s(t.options) : {}), i) {
4102      t.options[e] = i[e];
4103    }
4104
4105    return t.options;
4106  }
4107
4108  function _(t, i, e) {
4109    var n = [];
4110
4111    for (var o in t) {
4112      n.push(encodeURIComponent(e ? o.toUpperCase() : o) + "=" + encodeURIComponent(t[o]));
4113    }
4114
4115    return (i && -1 !== i.indexOf("?") ? "&" : "?") + n.join("&");
4116  }
4117
4118  var d = /\{ *([\w_-]+) *\}/g;
4119
4120  function f(t, n) {
4121    return t.replace(d, function (t, i) {
4122      var e = n[i];
4123      if (void 0 === e) throw new Error("No value provided for variable " + t);
4124      return "function" == typeof e && (e = e(n)), e;
4125    });
4126  }
4127
4128  var g = Array.isArray || function (t) {
4129    return "[object Array]" === Object.prototype.toString.call(t);
4130  };
4131
4132  function v(t, i) {
4133    for (var e = 0; e < t.length; e++) {
4134      if (t[e] === i) return e;
4135    }
4136
4137    return -1;
4138  }
4139
4140  var y = "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";
4141
4142  function x(t) {
4143    return window["webkit" + t] || window["moz" + t] || window["ms" + t];
4144  }
4145
4146  var w = 0;
4147
4148  function P(t) {
4149    var i = +new Date(),
4150        e = Math.max(0, 16 - (i - w));
4151    return w = i + e, window.setTimeout(t, e);
4152  }
4153
4154  var b = window.requestAnimationFrame || x("RequestAnimationFrame") || P,
4155      T = window.cancelAnimationFrame || x("CancelAnimationFrame") || x("CancelRequestAnimationFrame") || function (t) {
4156    window.clearTimeout(t);
4157  };
4158
4159  function M(t, i, e) {
4160    if (!e || b !== P) return b.call(window, p(t, i));
4161    t.call(i);
4162  }
4163
4164  function z(t) {
4165    t && T.call(window, t);
4166  }
4167
4168  var C = {
4169    extend: h,
4170    create: s,
4171    bind: p,
4172    lastId: e,
4173    stamp: m,
4174    throttle: n,
4175    wrapNum: o,
4176    falseFn: a,
4177    formatNum: r,
4178    trim: u,
4179    splitWords: l,
4180    setOptions: c,
4181    getParamString: _,
4182    template: f,
4183    isArray: g,
4184    indexOf: v,
4185    emptyImageUrl: y,
4186    requestFn: b,
4187    cancelFn: T,
4188    requestAnimFrame: M,
4189    cancelAnimFrame: z
4190  };
4191
4192  function S() {}
4193
4194  S.extend = function (t) {
4195    function i() {
4196      this.initialize && this.initialize.apply(this, arguments), this.callInitHooks();
4197    }
4198
4199    var e = i.__super__ = this.prototype,
4200        n = s(e);
4201
4202    for (var o in (n.constructor = i).prototype = n, this) {
4203      Object.prototype.hasOwnProperty.call(this, o) && "prototype" !== o && "__super__" !== o && (i[o] = this[o]);
4204    }
4205
4206    return t.statics && (h(i, t.statics), delete t.statics), t.includes && (function (t) {
4207      if ("undefined" == typeof L || !L || !L.Mixin) return;
4208      t = g(t) ? t : [t];
4209
4210      for (var i = 0; i < t.length; i++) {
4211        t[i] === L.Mixin.Events && console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.", new Error().stack);
4212      }
4213    }(t.includes), h.apply(null, [n].concat(t.includes)), delete t.includes), n.options && (t.options = h(s(n.options), t.options)), h(n, t), n._initHooks = [], n.callInitHooks = function () {
4214      if (!this._initHooksCalled) {
4215        e.callInitHooks && e.callInitHooks.call(this), this._initHooksCalled = !0;
4216
4217        for (var t = 0, i = n._initHooks.length; t < i; t++) {
4218          n._initHooks[t].call(this);
4219        }
4220      }
4221    }, i;
4222  }, S.include = function (t) {
4223    return h(this.prototype, t), this;
4224  }, S.mergeOptions = function (t) {
4225    return h(this.prototype.options, t), this;
4226  }, S.addInitHook = function (t) {
4227    var i = Array.prototype.slice.call(arguments, 1),
4228        e = "function" == typeof t ? t : function () {
4229      this[t].apply(this, i);
4230    };
4231    return this.prototype._initHooks = this.prototype._initHooks || [], this.prototype._initHooks.push(e), this;
4232  };
4233  var Z = {
4234    on: function on(t, i, e) {
4235      if ("object" == _typeof(t)) for (var n in t) {
4236        this._on(n, t[n], i);
4237      } else for (var o = 0, s = (t = l(t)).length; o < s; o++) {
4238        this._on(t[o], i, e);
4239      }
4240      return this;
4241    },
4242    off: function off(t, i, e) {
4243      if (t) {
4244        if ("object" == _typeof(t)) for (var n in t) {
4245          this._off(n, t[n], i);
4246        } else for (var o = 0, s = (t = l(t)).length; o < s; o++) {
4247          this._off(t[o], i, e);
4248        }
4249      } else delete this._events;
4250      return this;
4251    },
4252    _on: function _on(t, i, e) {
4253      this._events = this._events || {};
4254      var n = this._events[t];
4255      n || (n = [], this._events[t] = n), e === this && (e = void 0);
4256
4257      for (var o = {
4258        fn: i,
4259        ctx: e
4260      }, s = n, r = 0, a = s.length; r < a; r++) {
4261        if (s[r].fn === i && s[r].ctx === e) return;
4262      }
4263
4264      s.push(o);
4265    },
4266    _off: function _off(t, i, e) {
4267      var n, o, s;
4268      if (this._events && (n = this._events[t])) if (i) {
4269        if (e === this && (e = void 0), n) for (o = 0, s = n.length; o < s; o++) {
4270          var r = n[o];
4271          if (r.ctx === e && r.fn === i) return r.fn = a, this._firingCount && (this._events[t] = n = n.slice()), void n.splice(o, 1);
4272        }
4273      } else {
4274        for (o = 0, s = n.length; o < s; o++) {
4275          n[o].fn = a;
4276        }
4277
4278        delete this._events[t];
4279      }
4280    },
4281    fire: function fire(t, i, e) {
4282      if (!this.listens(t, e)) return this;
4283      var n = h({}, i, {
4284        type: t,
4285        target: this,
4286        sourceTarget: i && i.sourceTarget || this
4287      });
4288
4289      if (this._events) {
4290        var o = this._events[t];
4291
4292        if (o) {
4293          this._firingCount = this._firingCount + 1 || 1;
4294
4295          for (var s = 0, r = o.length; s < r; s++) {
4296            var a = o[s];
4297            a.fn.call(a.ctx || this, n);
4298          }
4299
4300          this._firingCount--;
4301        }
4302      }
4303
4304      return e && this._propagateEvent(n), this;
4305    },
4306    listens: function listens(t, i) {
4307      var e = this._events && this._events[t];
4308      if (e && e.length) return !0;
4309      if (i) for (var n in this._eventParents) {
4310        if (this._eventParents[n].listens(t, i)) return !0;
4311      }
4312      return !1;
4313    },
4314    once: function once(t, i, e) {
4315      if ("object" == _typeof(t)) {
4316        for (var n in t) {
4317          this.once(n, t[n], i);
4318        }
4319
4320        return this;
4321      }
4322
4323      var o = p(function () {
4324        this.off(t, i, e).off(t, o, e);
4325      }, this);
4326      return this.on(t, i, e).on(t, o, e);
4327    },
4328    addEventParent: function addEventParent(t) {
4329      return this._eventParents = this._eventParents || {}, this._eventParents[m(t)] = t, this;
4330    },
4331    removeEventParent: function removeEventParent(t) {
4332      return this._eventParents && delete this._eventParents[m(t)], this;
4333    },
4334    _propagateEvent: function _propagateEvent(t) {
4335      for (var i in this._eventParents) {
4336        this._eventParents[i].fire(t.type, h({
4337          layer: t.target,
4338          propagatedFrom: t.target
4339        }, t), !0);
4340      }
4341    }
4342  };
4343  Z.addEventListener = Z.on, Z.removeEventListener = Z.clearAllEventListeners = Z.off, Z.addOneTimeEventListener = Z.once, Z.fireEvent = Z.fire, Z.hasEventListeners = Z.listens;
4344  var E = S.extend(Z);
4345
4346  function k(t, i, e) {
4347    this.x = e ? Math.round(t) : t, this.y = e ? Math.round(i) : i;
4348  }
4349
4350  var B = Math.trunc || function (t) {
4351    return 0 < t ? Math.floor(t) : Math.ceil(t);
4352  };
4353
4354  function A(t, i, e) {
4355    return t instanceof k ? t : g(t) ? new k(t[0], t[1]) : null == t ? t : "object" == _typeof(t) && "x" in t && "y" in t ? new k(t.x, t.y) : new k(t, i, e);
4356  }
4357
4358  function I(t, i) {
4359    if (t) for (var e = i ? [t, i] : t, n = 0, o = e.length; n < o; n++) {
4360      this.extend(e[n]);
4361    }
4362  }
4363
4364  function O(t, i) {
4365    return !t || t instanceof I ? t : new I(t, i);
4366  }
4367
4368  function R(t, i) {
4369    if (t) for (var e = i ? [t, i] : t, n = 0, o = e.length; n < o; n++) {
4370      this.extend(e[n]);
4371    }
4372  }
4373
4374  function N(t, i) {
4375    return t instanceof R ? t : new R(t, i);
4376  }
4377
4378  function D(t, i, e) {
4379    if (isNaN(t) || isNaN(i)) throw new Error("Invalid LatLng object: (" + t + ", " + i + ")");
4380    this.lat = +t, this.lng = +i, void 0 !== e && (this.alt = +e);
4381  }
4382
4383  function j(t, i, e) {
4384    return t instanceof D ? t : g(t) && "object" != _typeof(t[0]) ? 3 === t.length ? new D(t[0], t[1], t[2]) : 2 === t.length ? new D(t[0], t[1]) : null : null == t ? t : "object" == _typeof(t) && "lat" in t ? new D(t.lat, "lng" in t ? t.lng : t.lon, t.alt) : void 0 === i ? null : new D(t, i, e);
4385  }
4386
4387  k.prototype = {
4388    clone: function clone() {
4389      return new k(this.x, this.y);
4390    },
4391    add: function add(t) {
4392      return this.clone()._add(A(t));
4393    },
4394    _add: function _add(t) {
4395      return this.x += t.x, this.y += t.y, this;
4396    },
4397    subtract: function subtract(t) {
4398      return this.clone()._subtract(A(t));
4399    },
4400    _subtract: function _subtract(t) {
4401      return this.x -= t.x, this.y -= t.y, this;
4402    },
4403    divideBy: function divideBy(t) {
4404      return this.clone()._divideBy(t);
4405    },
4406    _divideBy: function _divideBy(t) {
4407      return this.x /= t, this.y /= t, this;
4408    },
4409    multiplyBy: function multiplyBy(t) {
4410      return this.clone()._multiplyBy(t);
4411    },
4412    _multiplyBy: function _multiplyBy(t) {
4413      return this.x *= t, this.y *= t, this;
4414    },
4415    scaleBy: function scaleBy(t) {
4416      return new k(this.x * t.x, this.y * t.y);
4417    },
4418    unscaleBy: function unscaleBy(t) {
4419      return new k(this.x / t.x, this.y / t.y);
4420    },
4421    round: function round() {
4422      return this.clone()._round();
4423    },
4424    _round: function _round() {
4425      return this.x = Math.round(this.x), this.y = Math.round(this.y), this;
4426    },
4427    floor: function floor() {
4428      return this.clone()._floor();
4429    },
4430    _floor: function _floor() {
4431      return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this;
4432    },
4433    ceil: function ceil() {
4434      return this.clone()._ceil();
4435    },
4436    _ceil: function _ceil() {
4437      return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this;
4438    },
4439    trunc: function trunc() {
4440      return this.clone()._trunc();
4441    },
4442    _trunc: function _trunc() {
4443      return this.x = B(this.x), this.y = B(this.y), this;
4444    },
4445    distanceTo: function distanceTo(t) {
4446      var i = (t = A(t)).x - this.x,
4447          e = t.y - this.y;
4448      return Math.sqrt(i * i + e * e);
4449    },
4450    equals: function equals(t) {
4451      return (t = A(t)).x === this.x && t.y === this.y;
4452    },
4453    contains: function contains(t) {
4454      return t = A(t), Math.abs(t.x) <= Math.abs(this.x) && Math.abs(t.y) <= Math.abs(this.y);
4455    },
4456    toString: function toString() {
4457      return "Point(" + r(this.x) + ", " + r(this.y) + ")";
4458    }
4459  }, I.prototype = {
4460    extend: function extend(t) {
4461      return t = A(t), this.min || this.max ? (this.min.x = Math.min(t.x, this.min.x), this.max.x = Math.max(t.x, this.max.x), this.min.y = Math.min(t.y, this.min.y), this.max.y = Math.max(t.y, this.max.y)) : (this.min = t.clone(), this.max = t.clone()), this;
4462    },
4463    getCenter: function getCenter(t) {
4464      return new k((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, t);
4465    },
4466    getBottomLeft: function getBottomLeft() {
4467      return new k(this.min.x, this.max.y);
4468    },
4469    getTopRight: function getTopRight() {
4470      return new k(this.max.x, this.min.y);
4471    },
4472    getTopLeft: function getTopLeft() {
4473      return this.min;
4474    },
4475    getBottomRight: function getBottomRight() {
4476      return this.max;
4477    },
4478    getSize: function getSize() {
4479      return this.max.subtract(this.min);
4480    },
4481    contains: function contains(t) {
4482      var i, e;
4483      return (t = ("number" == typeof t[0] || t instanceof k ? A : O)(t)) instanceof I ? (i = t.min, e = t.max) : i = e = t, i.x >= this.min.x && e.x <= this.max.x && i.y >= this.min.y && e.y <= this.max.y;
4484    },
4485    intersects: function intersects(t) {
4486      t = O(t);
4487      var i = this.min,
4488          e = this.max,
4489          n = t.min,
4490          o = t.max,
4491          s = o.x >= i.x && n.x <= e.x,
4492          r = o.y >= i.y && n.y <= e.y;
4493      return s && r;
4494    },
4495    overlaps: function overlaps(t) {
4496      t = O(t);
4497      var i = this.min,
4498          e = this.max,
4499          n = t.min,
4500          o = t.max,
4501          s = o.x > i.x && n.x < e.x,
4502          r = o.y > i.y && n.y < e.y;
4503      return s && r;
4504    },
4505    isValid: function isValid() {
4506      return !(!this.min || !this.max);
4507    }
4508  }, R.prototype = {
4509    extend: function extend(t) {
4510      var i,
4511          e,
4512          n = this._southWest,
4513          o = this._northEast;
4514      if (t instanceof D) e = i = t;else {
4515        if (!(t instanceof R)) return t ? this.extend(j(t) || N(t)) : this;
4516        if (i = t._southWest, e = t._northEast, !i || !e) return this;
4517      }
4518      return n || o ? (n.lat = Math.min(i.lat, n.lat), n.lng = Math.min(i.lng, n.lng), o.lat = Math.max(e.lat, o.lat), o.lng = Math.max(e.lng, o.lng)) : (this._southWest = new D(i.lat, i.lng), this._northEast = new D(e.lat, e.lng)), this;
4519    },
4520    pad: function pad(t) {
4521      var i = this._southWest,
4522          e = this._northEast,
4523          n = Math.abs(i.lat - e.lat) * t,
4524          o = Math.abs(i.lng - e.lng) * t;
4525      return new R(new D(i.lat - n, i.lng - o), new D(e.lat + n, e.lng + o));
4526    },
4527    getCenter: function getCenter() {
4528      return new D((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2);
4529    },
4530    getSouthWest: function getSouthWest() {
4531      return this._southWest;
4532    },
4533    getNorthEast: function getNorthEast() {
4534      return this._northEast;
4535    },
4536    getNorthWest: function getNorthWest() {
4537      return new D(this.getNorth(), this.getWest());
4538    },
4539    getSouthEast: function getSouthEast() {
4540      return new D(this.getSouth(), this.getEast());
4541    },
4542    getWest: function getWest() {
4543      return this._southWest.lng;
4544    },
4545    getSouth: function getSouth() {
4546      return this._southWest.lat;
4547    },
4548    getEast: function getEast() {
4549      return this._northEast.lng;
4550    },
4551    getNorth: function getNorth() {
4552      return this._northEast.lat;
4553    },
4554    contains: function contains(t) {
4555      t = ("number" == typeof t[0] || t instanceof D || "lat" in t ? j : N)(t);
4556      var i,
4557          e,
4558          n = this._southWest,
4559          o = this._northEast;
4560      return t instanceof R ? (i = t.getSouthWest(), e = t.getNorthEast()) : i = e = t, i.lat >= n.lat && e.lat <= o.lat && i.lng >= n.lng && e.lng <= o.lng;
4561    },
4562    intersects: function intersects(t) {
4563      t = N(t);
4564      var i = this._southWest,
4565          e = this._northEast,
4566          n = t.getSouthWest(),
4567          o = t.getNorthEast(),
4568          s = o.lat >= i.lat && n.lat <= e.lat,
4569          r = o.lng >= i.lng && n.lng <= e.lng;
4570      return s && r;
4571    },
4572    overlaps: function overlaps(t) {
4573      t = N(t);
4574      var i = this._southWest,
4575          e = this._northEast,
4576          n = t.getSouthWest(),
4577          o = t.getNorthEast(),
4578          s = o.lat > i.lat && n.lat < e.lat,
4579          r = o.lng > i.lng && n.lng < e.lng;
4580      return s && r;
4581    },
4582    toBBoxString: function toBBoxString() {
4583      return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(",");
4584    },
4585    equals: function equals(t, i) {
4586      return !!t && (t = N(t), this._southWest.equals(t.getSouthWest(), i) && this._northEast.equals(t.getNorthEast(), i));
4587    },
4588    isValid: function isValid() {
4589      return !(!this._southWest || !this._northEast);
4590    }
4591  };
4592  var W,
4593      H = {
4594    latLngToPoint: function latLngToPoint(t, i) {
4595      var e = this.projection.project(t),
4596          n = this.scale(i);
4597      return this.transformation._transform(e, n);
4598    },
4599    pointToLatLng: function pointToLatLng(t, i) {
4600      var e = this.scale(i),
4601          n = this.transformation.untransform(t, e);
4602      return this.projection.unproject(n);
4603    },
4604    project: function project(t) {
4605      return this.projection.project(t);
4606    },
4607    unproject: function unproject(t) {
4608      return this.projection.unproject(t);
4609    },
4610    scale: function scale(t) {
4611      return 256 * Math.pow(2, t);
4612    },
4613    zoom: function zoom(t) {
4614      return Math.log(t / 256) / Math.LN2;
4615    },
4616    getProjectedBounds: function getProjectedBounds(t) {
4617      if (this.infinite) return null;
4618      var i = this.projection.bounds,
4619          e = this.scale(t);
4620      return new I(this.transformation.transform(i.min, e), this.transformation.transform(i.max, e));
4621    },
4622    infinite: !(D.prototype = {
4623      equals: function equals(t, i) {
4624        return !!t && (t = j(t), Math.max(Math.abs(this.lat - t.lat), Math.abs(this.lng - t.lng)) <= (void 0 === i ? 1e-9 : i));
4625      },
4626      toString: function toString(t) {
4627        return "LatLng(" + r(this.lat, t) + ", " + r(this.lng, t) + ")";
4628      },
4629      distanceTo: function distanceTo(t) {
4630        return F.distance(this, j(t));
4631      },
4632      wrap: function wrap() {
4633        return F.wrapLatLng(this);
4634      },
4635      toBounds: function toBounds(t) {
4636        var i = 180 * t / 40075017,
4637            e = i / Math.cos(Math.PI / 180 * this.lat);
4638        return N([this.lat - i, this.lng - e], [this.lat + i, this.lng + e]);
4639      },
4640      clone: function clone() {
4641        return new D(this.lat, this.lng, this.alt);
4642      }
4643    }),
4644    wrapLatLng: function wrapLatLng(t) {
4645      var i = this.wrapLng ? o(t.lng, this.wrapLng, !0) : t.lng;
4646      return new D(this.wrapLat ? o(t.lat, this.wrapLat, !0) : t.lat, i, t.alt);
4647    },
4648    wrapLatLngBounds: function wrapLatLngBounds(t) {
4649      var i = t.getCenter(),
4650          e = this.wrapLatLng(i),
4651          n = i.lat - e.lat,
4652          o = i.lng - e.lng;
4653      if (0 == n && 0 == o) return t;
4654      var s = t.getSouthWest(),
4655          r = t.getNorthEast();
4656      return new R(new D(s.lat - n, s.lng - o), new D(r.lat - n, r.lng - o));
4657    }
4658  },
4659      F = h({}, H, {
4660    wrapLng: [-180, 180],
4661    R: 6371e3,
4662    distance: function distance(t, i) {
4663      var e = Math.PI / 180,
4664          n = t.lat * e,
4665          o = i.lat * e,
4666          s = Math.sin((i.lat - t.lat) * e / 2),
4667          r = Math.sin((i.lng - t.lng) * e / 2),
4668          a = s * s + Math.cos(n) * Math.cos(o) * r * r,
4669          h = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
4670      return this.R * h;
4671    }
4672  }),
4673      U = 6378137,
4674      V = {
4675    R: U,
4676    MAX_LATITUDE: 85.0511287798,
4677    project: function project(t) {
4678      var i = Math.PI / 180,
4679          e = this.MAX_LATITUDE,
4680          n = Math.max(Math.min(e, t.lat), -e),
4681          o = Math.sin(n * i);
4682      return new k(this.R * t.lng * i, this.R * Math.log((1 + o) / (1 - o)) / 2);
4683    },
4684    unproject: function unproject(t) {
4685      var i = 180 / Math.PI;
4686      return new D((2 * Math.atan(Math.exp(t.y / this.R)) - Math.PI / 2) * i, t.x * i / this.R);
4687    },
4688    bounds: new I([-(W = U * Math.PI), -W], [W, W])
4689  };
4690
4691  function q(t, i, e, n) {
4692    if (g(t)) return this._a = t[0], this._b = t[1], this._c = t[2], void (this._d = t[3]);
4693    this._a = t, this._b = i, this._c = e, this._d = n;
4694  }
4695
4696  function G(t, i, e, n) {
4697    return new q(t, i, e, n);
4698  }
4699
4700  q.prototype = {
4701    transform: function transform(t, i) {
4702      return this._transform(t.clone(), i);
4703    },
4704    _transform: function _transform(t, i) {
4705      return i = i || 1, t.x = i * (this._a * t.x + this._b), t.y = i * (this._c * t.y + this._d), t;
4706    },
4707    untransform: function untransform(t, i) {
4708      return i = i || 1, new k((t.x / i - this._b) / this._a, (t.y / i - this._d) / this._c);
4709    }
4710  };
4711  var K,
4712      Y = h({}, F, {
4713    code: "EPSG:3857",
4714    projection: V,
4715    transformation: G(K = .5 / (Math.PI * V.R), .5, -K, .5)
4716  }),
4717      X = h({}, Y, {
4718    code: "EPSG:900913"
4719  });
4720
4721  function J(t) {
4722    return document.createElementNS("http://www.w3.org/2000/svg", t);
4723  }
4724
4725  function $(t, i) {
4726    for (var e, n, o, s, r = "", a = 0, h = t.length; a < h; a++) {
4727      for (e = 0, n = (o = t[a]).length; e < n; e++) {
4728        r += (e ? "L" : "M") + (s = o[e]).x + " " + s.y;
4729      }
4730
4731      r += i ? Zt ? "z" : "x" : "";
4732    }
4733
4734    return r || "M0 0";
4735  }
4736
4737  var Q = document.documentElement.style,
4738      tt = ("ActiveXObject" in window),
4739      it = tt && !document.addEventListener,
4740      et = "msLaunchUri" in navigator && !("documentMode" in document),
4741      nt = kt("webkit"),
4742      ot = kt("android"),
4743      st = kt("android 2") || kt("android 3"),
4744      rt = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10),
4745      at = ot && kt("Google") && rt < 537 && !("AudioNode" in window),
4746      ht = !!window.opera,
4747      ut = !et && kt("chrome"),
4748      lt = kt("gecko") && !nt && !ht && !tt,
4749      ct = !ut && kt("safari"),
4750      _t = kt("phantom"),
4751      dt = ("OTransition" in Q),
4752      pt = 0 === navigator.platform.indexOf("Win"),
4753      mt = tt && "transition" in Q,
4754      ft = "WebKitCSSMatrix" in window && "m11" in new window.WebKitCSSMatrix() && !st,
4755      gt = ("MozPerspective" in Q),
4756      vt = !window.L_DISABLE_3D && (mt || ft || gt) && !dt && !_t,
4757      yt = "undefined" != typeof orientation || kt("mobile"),
4758      xt = yt && nt,
4759      wt = yt && ft,
4760      Pt = !window.PointerEvent && window.MSPointerEvent,
4761      Lt = !(!window.PointerEvent && !Pt),
4762      bt = !window.L_NO_TOUCH && (Lt || "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch),
4763      Tt = yt && ht,
4764      Mt = yt && lt,
4765      zt = 1 < (window.devicePixelRatio || window.screen.deviceXDPI / window.screen.logicalXDPI),
4766      Ct = function () {
4767    var t = !1;
4768
4769    try {
4770      var i = Object.defineProperty({}, "passive", {
4771        get: function get() {
4772          t = !0;
4773        }
4774      });
4775      window.addEventListener("testPassiveEventSupport", a, i), window.removeEventListener("testPassiveEventSupport", a, i);
4776    } catch (t) {}
4777
4778    return t;
4779  }(),
4780      St = !!document.createElement("canvas").getContext,
4781      Zt = !(!document.createElementNS || !J("svg").createSVGRect),
4782      Et = !Zt && function () {
4783    try {
4784      var t = document.createElement("div");
4785      t.innerHTML = '<v:shape adj="1"/>';
4786      var i = t.firstChild;
4787      return i.style.behavior = "url(#default#VML)", i && "object" == _typeof(i.adj);
4788    } catch (t) {
4789      return !1;
4790    }
4791  }();
4792
4793  function kt(t) {
4794    return 0 <= navigator.userAgent.toLowerCase().indexOf(t);
4795  }
4796
4797  var Bt = {
4798    ie: tt,
4799    ielt9: it,
4800    edge: et,
4801    webkit: nt,
4802    android: ot,
4803    android23: st,
4804    androidStock: at,
4805    opera: ht,
4806    chrome: ut,
4807    gecko: lt,
4808    safari: ct,
4809    phantom: _t,
4810    opera12: dt,
4811    win: pt,
4812    ie3d: mt,
4813    webkit3d: ft,
4814    gecko3d: gt,
4815    any3d: vt,
4816    mobile: yt,
4817    mobileWebkit: xt,
4818    mobileWebkit3d: wt,
4819    msPointer: Pt,
4820    pointer: Lt,
4821    touch: bt,
4822    mobileOpera: Tt,
4823    mobileGecko: Mt,
4824    retina: zt,
4825    passiveEvents: Ct,
4826    canvas: St,
4827    svg: Zt,
4828    vml: Et
4829  },
4830      At = Pt ? "MSPointerDown" : "pointerdown",
4831      It = Pt ? "MSPointerMove" : "pointermove",
4832      Ot = Pt ? "MSPointerUp" : "pointerup",
4833      Rt = Pt ? "MSPointerCancel" : "pointercancel",
4834      Nt = {},
4835      Dt = !1;
4836
4837  function jt(t, i, e, n) {
4838    function o(t) {
4839      Ut(t, r);
4840    }
4841
4842    var s, r, a, h, u, l, c, _;
4843
4844    function d(t) {
4845      t.pointerType === (t.MSPOINTER_TYPE_MOUSE || "mouse") && 0 === t.buttons || Ut(t, h);
4846    }
4847
4848    return "touchstart" === i ? (u = t, l = e, c = n, _ = p(function (t) {
4849      t.MSPOINTER_TYPE_TOUCH && t.pointerType === t.MSPOINTER_TYPE_TOUCH && Ri(t), Ut(t, l);
4850    }), u["_leaflet_touchstart" + c] = _, u.addEventListener(At, _, !1), Dt || (document.addEventListener(At, Wt, !0), document.addEventListener(It, Ht, !0), document.addEventListener(Ot, Ft, !0), document.addEventListener(Rt, Ft, !0), Dt = !0)) : "touchmove" === i ? (h = e, (a = t)["_leaflet_touchmove" + n] = d, a.addEventListener(It, d, !1)) : "touchend" === i && (r = e, (s = t)["_leaflet_touchend" + n] = o, s.addEventListener(Ot, o, !1), s.addEventListener(Rt, o, !1)), this;
4851  }
4852
4853  function Wt(t) {
4854    Nt[t.pointerId] = t;
4855  }
4856
4857  function Ht(t) {
4858    Nt[t.pointerId] && (Nt[t.pointerId] = t);
4859  }
4860
4861  function Ft(t) {
4862    delete Nt[t.pointerId];
4863  }
4864
4865  function Ut(t, i) {
4866    for (var e in t.touches = [], Nt) {
4867      t.touches.push(Nt[e]);
4868    }
4869
4870    t.changedTouches = [t], i(t);
4871  }
4872
4873  var Vt = Pt ? "MSPointerDown" : Lt ? "pointerdown" : "touchstart",
4874      qt = Pt ? "MSPointerUp" : Lt ? "pointerup" : "touchend",
4875      Gt = "_leaflet_";
4876  var Kt,
4877      Yt,
4878      Xt,
4879      Jt,
4880      $t,
4881      Qt,
4882      ti = fi(["transform", "webkitTransform", "OTransform", "MozTransform", "msTransform"]),
4883      ii = fi(["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]),
4884      ei = "webkitTransition" === ii || "OTransition" === ii ? ii + "End" : "transitionend";
4885
4886  function ni(t) {
4887    return "string" == typeof t ? document.getElementById(t) : t;
4888  }
4889
4890  function oi(t, i) {
4891    var e,
4892        n = t.style[i] || t.currentStyle && t.currentStyle[i];
4893    return n && "auto" !== n || !document.defaultView || (n = (e = document.defaultView.getComputedStyle(t, null)) ? e[i] : null), "auto" === n ? null : n;
4894  }
4895
4896  function si(t, i, e) {
4897    var n = document.createElement(t);
4898    return n.className = i || "", e && e.appendChild(n), n;
4899  }
4900
4901  function ri(t) {
4902    var i = t.parentNode;
4903    i && i.removeChild(t);
4904  }
4905
4906  function ai(t) {
4907    for (; t.firstChild;) {
4908      t.removeChild(t.firstChild);
4909    }
4910  }
4911
4912  function hi(t) {
4913    var i = t.parentNode;
4914    i && i.lastChild !== t && i.appendChild(t);
4915  }
4916
4917  function ui(t) {
4918    var i = t.parentNode;
4919    i && i.firstChild !== t && i.insertBefore(t, i.firstChild);
4920  }
4921
4922  function li(t, i) {
4923    if (void 0 !== t.classList) return t.classList.contains(i);
4924    var e = pi(t);
4925    return 0 < e.length && new RegExp("(^|\\s)" + i + "(\\s|$)").test(e);
4926  }
4927
4928  function ci(t, i) {
4929    var e;
4930    if (void 0 !== t.classList) for (var n = l(i), o = 0, s = n.length; o < s; o++) {
4931      t.classList.add(n[o]);
4932    } else li(t, i) || di(t, ((e = pi(t)) ? e + " " : "") + i);
4933  }
4934
4935  function _i(t, i) {
4936    void 0 !== t.classList ? t.classList.remove(i) : di(t, u((" " + pi(t) + " ").replace(" " + i + " ", " ")));
4937  }
4938
4939  function di(t, i) {
4940    void 0 === t.className.baseVal ? t.className = i : t.className.baseVal = i;
4941  }
4942
4943  function pi(t) {
4944    return t.correspondingElement && (t = t.correspondingElement), void 0 === t.className.baseVal ? t.className : t.className.baseVal;
4945  }
4946
4947  function mi(t, i) {
4948    "opacity" in t.style ? t.style.opacity = i : "filter" in t.style && function (t, i) {
4949      var e = !1,
4950          n = "DXImageTransform.Microsoft.Alpha";
4951
4952      try {
4953        e = t.filters.item(n);
4954      } catch (t) {
4955        if (1 === i) return;
4956      }
4957
4958      i = Math.round(100 * i), e ? (e.Enabled = 100 !== i, e.Opacity = i) : t.style.filter += " progid:" + n + "(opacity=" + i + ")";
4959    }(t, i);
4960  }
4961
4962  function fi(t) {
4963    for (var i = document.documentElement.style, e = 0; e < t.length; e++) {
4964      if (t[e] in i) return t[e];
4965    }
4966
4967    return !1;
4968  }
4969
4970  function gi(t, i, e) {
4971    var n = i || new k(0, 0);
4972    t.style[ti] = (mt ? "translate(" + n.x + "px," + n.y + "px)" : "translate3d(" + n.x + "px," + n.y + "px,0)") + (e ? " scale(" + e + ")" : "");
4973  }
4974
4975  function vi(t, i) {
4976    t._leaflet_pos = i, vt ? gi(t, i) : (t.style.left = i.x + "px", t.style.top = i.y + "px");
4977  }
4978
4979  function yi(t) {
4980    return t._leaflet_pos || new k(0, 0);
4981  }
4982
4983  function xi() {
4984    zi(window, "dragstart", Ri);
4985  }
4986
4987  function wi() {
4988    Si(window, "dragstart", Ri);
4989  }
4990
4991  function Pi(t) {
4992    for (; -1 === t.tabIndex;) {
4993      t = t.parentNode;
4994    }
4995
4996    t.style && (Li(), Qt = ($t = t).style.outline, t.style.outline = "none", zi(window, "keydown", Li));
4997  }
4998
4999  function Li() {
5000    $t && ($t.style.outline = Qt, Qt = $t = void 0, Si(window, "keydown", Li));
5001  }
5002
5003  function bi(t) {
5004    for (; !((t = t.parentNode).offsetWidth && t.offsetHeight || t === document.body);) {
5005      ;
5006    }
5007
5008    return t;
5009  }
5010
5011  function Ti(t) {
5012    var i = t.getBoundingClientRect();
5013    return {
5014      x: i.width / t.offsetWidth || 1,
5015      y: i.height / t.offsetHeight || 1,
5016      boundingClientRect: i
5017    };
5018  }
5019
5020  Jt = "onselectstart" in document ? (Xt = function Xt() {
5021    zi(window, "selectstart", Ri);
5022  }, function () {
5023    Si(window, "selectstart", Ri);
5024  }) : (Yt = fi(["userSelect", "WebkitUserSelect", "OUserSelect", "MozUserSelect", "msUserSelect"]), Xt = function Xt() {
5025    var t;
5026    Yt && (t = document.documentElement.style, Kt = t[Yt], t[Yt] = "none");
5027  }, function () {
5028    Yt && (document.documentElement.style[Yt] = Kt, Kt = void 0);
5029  });
5030  var Mi = {
5031    TRANSFORM: ti,
5032    TRANSITION: ii,
5033    TRANSITION_END: ei,
5034    get: ni,
5035    getStyle: oi,
5036    create: si,
5037    remove: ri,
5038    empty: ai,
5039    toFront: hi,
5040    toBack: ui,
5041    hasClass: li,
5042    addClass: ci,
5043    removeClass: _i,
5044    setClass: di,
5045    getClass: pi,
5046    setOpacity: mi,
5047    testProp: fi,
5048    setTransform: gi,
5049    setPosition: vi,
5050    getPosition: yi,
5051    disableTextSelection: Xt,
5052    enableTextSelection: Jt,
5053    disableImageDrag: xi,
5054    enableImageDrag: wi,
5055    preventOutline: Pi,
5056    restoreOutline: Li,
5057    getSizedParentNode: bi,
5058    getScale: Ti
5059  };
5060
5061  function zi(t, i, e, n) {
5062    if ("object" == _typeof(i)) for (var o in i) {
5063      ki(t, o, i[o], e);
5064    } else for (var s = 0, r = (i = l(i)).length; s < r; s++) {
5065      ki(t, i[s], e, n);
5066    }
5067    return this;
5068  }
5069
5070  var Ci = "_leaflet_events";
5071
5072  function Si(t, i, e, n) {
5073    if ("object" == _typeof(i)) for (var o in i) {
5074      Bi(t, o, i[o], e);
5075    } else if (i) for (var s = 0, r = (i = l(i)).length; s < r; s++) {
5076      Bi(t, i[s], e, n);
5077    } else {
5078      for (var a in t[Ci]) {
5079        Bi(t, a, t[Ci][a]);
5080      }
5081
5082      delete t[Ci];
5083    }
5084    return this;
5085  }
5086
5087  function Zi() {
5088    return Lt && !et && !ct;
5089  }
5090
5091  var Ei = {
5092    mouseenter: "mouseover",
5093    mouseleave: "mouseout",
5094    wheel: !("onwheel" in window) && "mousewheel"
5095  };
5096
5097  function ki(i, t, e, n) {
5098    var o = t + m(e) + (n ? "_" + m(n) : "");
5099    if (i[Ci] && i[Ci][o]) return this;
5100
5101    var s,
5102        r,
5103        a,
5104        h,
5105        u,
5106        l,
5107        c = function c(t) {
5108      return e.call(n || i, t || window.event);
5109    },
5110        _ = c;
5111
5112    function d(t) {
5113      if (Lt) {
5114        if (!t.isPrimary) return;
5115        if ("mouse" === t.pointerType) return;
5116      } else if (1 < t.touches.length) return;
5117
5118      var i = Date.now(),
5119          e = i - (h || i);
5120      u = t.touches ? t.touches[0] : t, l = 0 < e && e <= 250, h = i;
5121    }
5122
5123    function p(t) {
5124      if (l && !u.cancelBubble) {
5125        if (Lt) {
5126          if ("mouse" === t.pointerType) return;
5127          var i,
5128              e,
5129              n = {};
5130
5131          for (e in u) {
5132            i = u[e], n[e] = i && i.bind ? i.bind(u) : i;
5133          }
5134
5135          u = n;
5136        }
5137
5138        u.type = "dblclick", u.button = 0, r(u), h = null;
5139      }
5140    }
5141
5142    Lt && 0 === t.indexOf("touch") ? jt(i, t, c, o) : bt && "dblclick" === t && !Zi() ? (r = c, l = !1, (s = i)[Gt + Vt + (a = o)] = d, s[Gt + qt + a] = p, s[Gt + "dblclick" + a] = r, s.addEventListener(Vt, d, !!Ct && {
5143      passive: !1
5144    }), s.addEventListener(qt, p, !!Ct && {
5145      passive: !1
5146    }), s.addEventListener("dblclick", r, !1)) : "addEventListener" in i ? "touchstart" === t || "touchmove" === t || "wheel" === t || "mousewheel" === t ? i.addEventListener(Ei[t] || t, c, !!Ct && {
5147      passive: !1
5148    }) : "mouseenter" === t || "mouseleave" === t ? (c = function c(t) {
5149      t = t || window.event, Vi(i, t) && _(t);
5150    }, i.addEventListener(Ei[t], c, !1)) : i.addEventListener(t, _, !1) : "attachEvent" in i && i.attachEvent("on" + t, c), i[Ci] = i[Ci] || {}, i[Ci][o] = c;
5151  }
5152
5153  function Bi(t, i, e, n) {
5154    var o,
5155        s,
5156        r,
5157        a,
5158        h,
5159        u,
5160        l,
5161        c,
5162        _ = i + m(e) + (n ? "_" + m(n) : ""),
5163        d = t[Ci] && t[Ci][_];
5164
5165    if (!d) return this;
5166    Lt && 0 === i.indexOf("touch") ? (c = (u = t)["_leaflet_" + (l = i) + _], "touchstart" === l ? u.removeEventListener(At, c, !1) : "touchmove" === l ? u.removeEventListener(It, c, !1) : "touchend" === l && (u.removeEventListener(Ot, c, !1), u.removeEventListener(Rt, c, !1))) : bt && "dblclick" === i && !Zi() ? (r = (o = t)[Gt + Vt + (s = _)], a = o[Gt + qt + s], h = o[Gt + "dblclick" + s], o.removeEventListener(Vt, r, !!Ct && {
5167      passive: !1
5168    }), o.removeEventListener(qt, a, !!Ct && {
5169      passive: !1
5170    }), o.removeEventListener("dblclick", h, !1)) : "removeEventListener" in t ? t.removeEventListener(Ei[i] || i, d, !1) : "detachEvent" in t && t.detachEvent("on" + i, d), t[Ci][_] = null;
5171  }
5172
5173  function Ai(t) {
5174    return t.stopPropagation ? t.stopPropagation() : t.originalEvent ? t.originalEvent._stopped = !0 : t.cancelBubble = !0, Ui(t), this;
5175  }
5176
5177  function Ii(t) {
5178    return ki(t, "wheel", Ai), this;
5179  }
5180
5181  function Oi(t) {
5182    return zi(t, "mousedown touchstart dblclick", Ai), ki(t, "click", Fi), this;
5183  }
5184
5185  function Ri(t) {
5186    return t.preventDefault ? t.preventDefault() : t.returnValue = !1, this;
5187  }
5188
5189  function Ni(t) {
5190    return Ri(t), Ai(t), this;
5191  }
5192
5193  function Di(t, i) {
5194    if (!i) return new k(t.clientX, t.clientY);
5195    var e = Ti(i),
5196        n = e.boundingClientRect;
5197    return new k((t.clientX - n.left) / e.x - i.clientLeft, (t.clientY - n.top) / e.y - i.clientTop);
5198  }
5199
5200  var ji = pt && ut ? 2 * window.devicePixelRatio : lt ? window.devicePixelRatio : 1;
5201
5202  function Wi(t) {
5203    return et ? t.wheelDeltaY / 2 : t.deltaY && 0 === t.deltaMode ? -t.deltaY / ji : t.deltaY && 1 === t.deltaMode ? 20 * -t.deltaY : t.deltaY && 2 === t.deltaMode ? 60 * -t.deltaY : t.deltaX || t.deltaZ ? 0 : t.wheelDelta ? (t.wheelDeltaY || t.wheelDelta) / 2 : t.detail && Math.abs(t.detail) < 32765 ? 20 * -t.detail : t.detail ? t.detail / -32765 * 60 : 0;
5204  }
5205
5206  var Hi = {};
5207
5208  function Fi(t) {
5209    Hi[t.type] = !0;
5210  }
5211
5212  function Ui(t) {
5213    var i = Hi[t.type];
5214    return Hi[t.type] = !1, i;
5215  }
5216
5217  function Vi(t, i) {
5218    var e = i.relatedTarget;
5219    if (!e) return !0;
5220
5221    try {
5222      for (; e && e !== t;) {
5223        e = e.parentNode;
5224      }
5225    } catch (t) {
5226      return !1;
5227    }
5228
5229    return e !== t;
5230  }
5231
5232  var qi = {
5233    on: zi,
5234    off: Si,
5235    stopPropagation: Ai,
5236    disableScrollPropagation: Ii,
5237    disableClickPropagation: Oi,
5238    preventDefault: Ri,
5239    stop: Ni,
5240    getMousePosition: Di,
5241    getWheelDelta: Wi,
5242    fakeStop: Fi,
5243    skipped: Ui,
5244    isExternalTarget: Vi,
5245    addListener: zi,
5246    removeListener: Si
5247  },
5248      Gi = E.extend({
5249    run: function run(t, i, e, n) {
5250      this.stop(), this._el = t, this._inProgress = !0, this._duration = e || .25, this._easeOutPower = 1 / Math.max(n || .5, .2), this._startPos = yi(t), this._offset = i.subtract(this._startPos), this._startTime = +new Date(), this.fire("start"), this._animate();
5251    },
5252    stop: function stop() {
5253      this._inProgress && (this._step(!0), this._complete());
5254    },
5255    _animate: function _animate() {
5256      this._animId = M(this._animate, this), this._step();
5257    },
5258    _step: function _step(t) {
5259      var i = new Date() - this._startTime,
5260          e = 1e3 * this._duration;
5261      i < e ? this._runFrame(this._easeOut(i / e), t) : (this._runFrame(1), this._complete());
5262    },
5263    _runFrame: function _runFrame(t, i) {
5264      var e = this._startPos.add(this._offset.multiplyBy(t));
5265
5266      i && e._round(), vi(this._el, e), this.fire("step");
5267    },
5268    _complete: function _complete() {
5269      z(this._animId), this._inProgress = !1, this.fire("end");
5270    },
5271    _easeOut: function _easeOut(t) {
5272      return 1 - Math.pow(1 - t, this._easeOutPower);
5273    }
5274  }),
5275      Ki = E.extend({
5276    options: {
5277      crs: Y,
5278      center: void 0,
5279      zoom: void 0,
5280      minZoom: void 0,
5281      maxZoom: void 0,
5282      layers: [],
5283      maxBounds: void 0,
5284      renderer: void 0,
5285      zoomAnimation: !0,
5286      zoomAnimationThreshold: 4,
5287      fadeAnimation: !0,
5288      markerZoomAnimation: !0,
5289      transform3DLimit: 8388608,
5290      zoomSnap: 1,
5291      zoomDelta: 1,
5292      trackResize: !0
5293    },
5294    initialize: function initialize(t, i) {
5295      i = c(this, i), this._handlers = [], this._layers = {}, this._zoomBoundLayers = {}, this._sizeChanged = !0, this._initContainer(t), this._initLayout(), this._onResize = p(this._onResize, this), this._initEvents(), i.maxBounds && this.setMaxBounds(i.maxBounds), void 0 !== i.zoom && (this._zoom = this._limitZoom(i.zoom)), i.center && void 0 !== i.zoom && this.setView(j(i.center), i.zoom, {
5296        reset: !0
5297      }), this.callInitHooks(), this._zoomAnimated = ii && vt && !Tt && this.options.zoomAnimation, this._zoomAnimated && (this._createAnimProxy(), zi(this._proxy, ei, this._catchTransitionEnd, this)), this._addLayers(this.options.layers);
5298    },
5299    setView: function setView(t, i, e) {
5300      if ((i = void 0 === i ? this._zoom : this._limitZoom(i), t = this._limitCenter(j(t), i, this.options.maxBounds), e = e || {}, this._stop(), this._loaded && !e.reset && !0 !== e) && (void 0 !== e.animate && (e.zoom = h({
5301        animate: e.animate
5302      }, e.zoom), e.pan = h({
5303        animate: e.animate,
5304        duration: e.duration
5305      }, e.pan)), this._zoom !== i ? this._tryAnimatedZoom && this._tryAnimatedZoom(t, i, e.zoom) : this._tryAnimatedPan(t, e.pan))) return clearTimeout(this._sizeTimer), this;
5306      return this._resetView(t, i), this;
5307    },
5308    setZoom: function setZoom(t, i) {
5309      return this._loaded ? this.setView(this.getCenter(), t, {
5310        zoom: i
5311      }) : (this._zoom = t, this);
5312    },
5313    zoomIn: function zoomIn(t, i) {
5314      return t = t || (vt ? this.options.zoomDelta : 1), this.setZoom(this._zoom + t, i);
5315    },
5316    zoomOut: function zoomOut(t, i) {
5317      return t = t || (vt ? this.options.zoomDelta : 1), this.setZoom(this._zoom - t, i);
5318    },
5319    setZoomAround: function setZoomAround(t, i, e) {
5320      var n = this.getZoomScale(i),
5321          o = this.getSize().divideBy(2),
5322          s = (t instanceof k ? t : this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1 - 1 / n),
5323          r = this.containerPointToLatLng(o.add(s));
5324      return this.setView(r, i, {
5325        zoom: e
5326      });
5327    },
5328    _getBoundsCenterZoom: function _getBoundsCenterZoom(t, i) {
5329      i = i || {}, t = t.getBounds ? t.getBounds() : N(t);
5330      var e = A(i.paddingTopLeft || i.padding || [0, 0]),
5331          n = A(i.paddingBottomRight || i.padding || [0, 0]),
5332          o = this.getBoundsZoom(t, !1, e.add(n));
5333      if ((o = "number" == typeof i.maxZoom ? Math.min(i.maxZoom, o) : o) === 1 / 0) return {
5334        center: t.getCenter(),
5335        zoom: o
5336      };
5337      var s = n.subtract(e).divideBy(2),
5338          r = this.project(t.getSouthWest(), o),
5339          a = this.project(t.getNorthEast(), o);
5340      return {
5341        center: this.unproject(r.add(a).divideBy(2).add(s), o),
5342        zoom: o
5343      };
5344    },
5345    fitBounds: function fitBounds(t, i) {
5346      if (!(t = N(t)).isValid()) throw new Error("Bounds are not valid.");
5347
5348      var e = this._getBoundsCenterZoom(t, i);
5349
5350      return this.setView(e.center, e.zoom, i);
5351    },
5352    fitWorld: function fitWorld(t) {
5353      return this.fitBounds([[-90, -180], [90, 180]], t);
5354    },
5355    panTo: function panTo(t, i) {
5356      return this.setView(t, this._zoom, {
5357        pan: i
5358      });
5359    },
5360    panBy: function panBy(t, i) {
5361      return i = i || {}, (t = A(t).round()).x || t.y ? (!0 === i.animate || this.getSize().contains(t) ? (this._panAnim || (this._panAnim = new Gi(), this._panAnim.on({
5362        step: this._onPanTransitionStep,
5363        end: this._onPanTransitionEnd
5364      }, this)), i.noMoveStart || this.fire("movestart"), !1 !== i.animate ? (ci(this._mapPane, "leaflet-pan-anim"), e = this._getMapPanePos().subtract(t).round(), this._panAnim.run(this._mapPane, e, i.duration || .25, i.easeLinearity)) : (this._rawPanBy(t), this.fire("move").fire("moveend"))) : this._resetView(this.unproject(this.project(this.getCenter()).add(t)), this.getZoom()), this) : this.fire("moveend");
5365      var e;
5366    },
5367    flyTo: function flyTo(s, r, t) {
5368      if (!1 === (t = t || {}).animate || !vt) return this.setView(s, r, t);
5369
5370      this._stop();
5371
5372      var a = this.project(this.getCenter()),
5373          h = this.project(s),
5374          i = this.getSize(),
5375          u = this._zoom;
5376      s = j(s), r = void 0 === r ? u : r;
5377      var l = Math.max(i.x, i.y),
5378          n = l * this.getZoomScale(u, r),
5379          c = h.distanceTo(a) || 1,
5380          _ = 1.42,
5381          o = _ * _;
5382
5383      function e(t) {
5384        var i = (n * n - l * l + (t ? -1 : 1) * o * o * c * c) / (2 * (t ? n : l) * o * c),
5385            e = Math.sqrt(i * i + 1) - i;
5386        return e < 1e-9 ? -18 : Math.log(e);
5387      }
5388
5389      function d(t) {
5390        return (Math.exp(t) - Math.exp(-t)) / 2;
5391      }
5392
5393      function p(t) {
5394        return (Math.exp(t) + Math.exp(-t)) / 2;
5395      }
5396
5397      var m = e(0);
5398
5399      function f(t) {
5400        return l * (p(m) * (d(i = m + _ * t) / p(i)) - d(m)) / o;
5401        var i;
5402      }
5403
5404      var g = Date.now(),
5405          v = (e(1) - m) / _,
5406          y = t.duration ? 1e3 * t.duration : 1e3 * v * .8;
5407
5408      return this._moveStart(!0, t.noMoveStart), function t() {
5409        var i,
5410            e,
5411            n = (Date.now() - g) / y,
5412            o = (i = n, (1 - Math.pow(1 - i, 1.5)) * v);
5413        n <= 1 ? (this._flyToFrame = M(t, this), this._move(this.unproject(a.add(h.subtract(a).multiplyBy(f(o) / c)), u), this.getScaleZoom(l / (e = o, l * (p(m) / p(m + _ * e))), u), {
5414          flyTo: !0
5415        })) : this._move(s, r)._moveEnd(!0);
5416      }.call(this), this;
5417    },
5418    flyToBounds: function flyToBounds(t, i) {
5419      var e = this._getBoundsCenterZoom(t, i);
5420
5421      return this.flyTo(e.center, e.zoom, i);
5422    },
5423    setMaxBounds: function setMaxBounds(t) {
5424      return (t = N(t)).isValid() ? (this.options.maxBounds && this.off("moveend", this._panInsideMaxBounds), this.options.maxBounds = t, this._loaded && this._panInsideMaxBounds(), this.on("moveend", this._panInsideMaxBounds)) : (this.options.maxBounds = null, this.off("moveend", this._panInsideMaxBounds));
5425    },
5426    setMinZoom: function setMinZoom(t) {
5427      var i = this.options.minZoom;
5428      return this.options.minZoom = t, this._loaded && i !== t && (this.fire("zoomlevelschange"), this.getZoom() < this.options.minZoom) ? this.setZoom(t) : this;
5429    },
5430    setMaxZoom: function setMaxZoom(t) {
5431      var i = this.options.maxZoom;
5432      return this.options.maxZoom = t, this._loaded && i !== t && (this.fire("zoomlevelschange"), this.getZoom() > this.options.maxZoom) ? this.setZoom(t) : this;
5433    },
5434    panInsideBounds: function panInsideBounds(t, i) {
5435      this._enforcingBounds = !0;
5436
5437      var e = this.getCenter(),
5438          n = this._limitCenter(e, this._zoom, N(t));
5439
5440      return e.equals(n) || this.panTo(n, i), this._enforcingBounds = !1, this;
5441    },
5442    panInside: function panInside(t, i) {
5443      var e,
5444          n,
5445          o = A((i = i || {}).paddingTopLeft || i.padding || [0, 0]),
5446          s = A(i.paddingBottomRight || i.padding || [0, 0]),
5447          r = this.getCenter(),
5448          a = this.project(r),
5449          h = this.project(t),
5450          u = this.getPixelBounds(),
5451          l = u.getSize().divideBy(2),
5452          c = O([u.min.add(o), u.max.subtract(s)]);
5453      return c.contains(h) || (this._enforcingBounds = !0, e = a.subtract(h), n = A(h.x + e.x, h.y + e.y), (h.x < c.min.x || h.x > c.max.x) && (n.x = a.x - e.x, 0 < e.x ? n.x += l.x - o.x : n.x -= l.x - s.x), (h.y < c.min.y || h.y > c.max.y) && (n.y = a.y - e.y, 0 < e.y ? n.y += l.y - o.y : n.y -= l.y - s.y), this.panTo(this.unproject(n), i), this._enforcingBounds = !1), this;
5454    },
5455    invalidateSize: function invalidateSize(t) {
5456      if (!this._loaded) return this;
5457      t = h({
5458        animate: !1,
5459        pan: !0
5460      }, !0 === t ? {
5461        animate: !0
5462      } : t);
5463      var i = this.getSize();
5464      this._sizeChanged = !0, this._lastCenter = null;
5465      var e = this.getSize(),
5466          n = i.divideBy(2).round(),
5467          o = e.divideBy(2).round(),
5468          s = n.subtract(o);
5469      return s.x || s.y ? (t.animate && t.pan ? this.panBy(s) : (t.pan && this._rawPanBy(s), this.fire("move"), t.debounceMoveend ? (clearTimeout(this._sizeTimer), this._sizeTimer = setTimeout(p(this.fire, this, "moveend"), 200)) : this.fire("moveend")), this.fire("resize", {
5470        oldSize: i,
5471        newSize: e
5472      })) : this;
5473    },
5474    stop: function stop() {
5475      return this.setZoom(this._limitZoom(this._zoom)), this.options.zoomSnap || this.fire("viewreset"), this._stop();
5476    },
5477    locate: function locate(t) {
5478      if (t = this._locateOptions = h({
5479        timeout: 1e4,
5480        watch: !1
5481      }, t), !("geolocation" in navigator)) return this._handleGeolocationError({
5482        code: 0,
5483        message: "Geolocation not supported."
5484      }), this;
5485      var i = p(this._handleGeolocationResponse, this),
5486          e = p(this._handleGeolocationError, this);
5487      return t.watch ? this._locationWatchId = navigator.geolocation.watchPosition(i, e, t) : navigator.geolocation.getCurrentPosition(i, e, t), this;
5488    },
5489    stopLocate: function stopLocate() {
5490      return navigator.geolocation && navigator.geolocation.clearWatch && navigator.geolocation.clearWatch(this._locationWatchId), this._locateOptions && (this._locateOptions.setView = !1), this;
5491    },
5492    _handleGeolocationError: function _handleGeolocationError(t) {
5493      var i = t.code,
5494          e = t.message || (1 === i ? "permission denied" : 2 === i ? "position unavailable" : "timeout");
5495      this._locateOptions.setView && !this._loaded && this.fitWorld(), this.fire("locationerror", {
5496        code: i,
5497        message: "Geolocation error: " + e + "."
5498      });
5499    },
5500    _handleGeolocationResponse: function _handleGeolocationResponse(t) {
5501      var i,
5502          e = new D(t.coords.latitude, t.coords.longitude),
5503          n = e.toBounds(2 * t.coords.accuracy),
5504          o = this._locateOptions;
5505      o.setView && (i = this.getBoundsZoom(n), this.setView(e, o.maxZoom ? Math.min(i, o.maxZoom) : i));
5506      var s = {
5507        latlng: e,
5508        bounds: n,
5509        timestamp: t.timestamp
5510      };
5511
5512      for (var r in t.coords) {
5513        "number" == typeof t.coords[r] && (s[r] = t.coords[r]);
5514      }
5515
5516      this.fire("locationfound", s);
5517    },
5518    addHandler: function addHandler(t, i) {
5519      if (!i) return this;
5520      var e = this[t] = new i(this);
5521      return this._handlers.push(e), this.options[t] && e.enable(), this;
5522    },
5523    remove: function remove() {
5524      if (this._initEvents(!0), this.off("moveend", this._panInsideMaxBounds), this._containerId !== this._container._leaflet_id) throw new Error("Map container is being reused by another instance");
5525
5526      try {
5527        delete this._container._leaflet_id, delete this._containerId;
5528      } catch (t) {
5529        this._container._leaflet_id = void 0, this._containerId = void 0;
5530      }
5531
5532      var t;
5533
5534      for (t in void 0 !== this._locationWatchId && this.stopLocate(), this._stop(), ri(this._mapPane), this._clearControlPos && this._clearControlPos(), this._resizeRequest && (z(this._resizeRequest), this._resizeRequest = null), this._clearHandlers(), this._loaded && this.fire("unload"), this._layers) {
5535        this._layers[t].remove();
5536      }
5537
5538      for (t in this._panes) {
5539        ri(this._panes[t]);
5540      }
5541
5542      return this._layers = [], this._panes = [], delete this._mapPane, delete this._renderer, this;
5543    },
5544    createPane: function createPane(t, i) {
5545      var e = si("div", "leaflet-pane" + (t ? " leaflet-" + t.replace("Pane", "") + "-pane" : ""), i || this._mapPane);
5546      return t && (this._panes[t] = e), e;
5547    },
5548    getCenter: function getCenter() {
5549      return this._checkIfLoaded(), this._lastCenter && !this._moved() ? this._lastCenter : this.layerPointToLatLng(this._getCenterLayerPoint());
5550    },
5551    getZoom: function getZoom() {
5552      return this._zoom;
5553    },
5554    getBounds: function getBounds() {
5555      var t = this.getPixelBounds();
5556      return new R(this.unproject(t.getBottomLeft()), this.unproject(t.getTopRight()));
5557    },
5558    getMinZoom: function getMinZoom() {
5559      return void 0 === this.options.minZoom ? this._layersMinZoom || 0 : this.options.minZoom;
5560    },
5561    getMaxZoom: function getMaxZoom() {
5562      return void 0 === this.options.maxZoom ? void 0 === this._layersMaxZo
5562om ? 1 / 0 : this._layersMaxZoom : this.options.maxZoom;
5563    },
5564    getBoundsZoom: function getBoundsZoom(t, i, e) {
5565      t = N(t), e = A(e || [0, 0]);
5566
5567      var n = this.getZoom() || 0,
5568          o = this.getMinZoom(),
5569          s = this.getMaxZoom(),
5570          r = t.getNorthWest(),
5571          a = t.getSouthEast(),
5572          h = this.getSize().subtract(e),
5573          u = O(this.project(a, n), this.project(r, n)).getSize(),
5574          l = vt ? this.options.zoomSnap : 1,
5575          c = h.x / u.x,
5576          _ = h.y / u.y,
5577          d = i ? Math.max(c, _) : Math.min(c, _),
5578          n = this.getScaleZoom(d, n);
5579
5580      return l && (n = Math.round(n / (l / 100)) * (l / 100), n = i ? Math.ceil(n / l) * l : Math.floor(n / l) * l), Math.max(o, Math.min(s, n));
5581    },
5582    getSize: function getSize() {
5583      return this._size && !this._sizeChanged || (this._size = new k(this._container.clientWidth || 0, this._container.clientHeight || 0), this._sizeChanged = !1), this._size.clone();
5584    },
5585    getPixelBounds: function getPixelBounds(t, i) {
5586      var e = this._getTopLeftPoint(t, i);
5587
5588      return new I(e, e.add(this.getSize()));
5589    },
5590    getPixelOrigin: function getPixelOrigin() {
5591      return this._checkIfLoaded(), this._pixelOrigin;
5592    },
5593    getPixelWorldBounds: function getPixelWorldBounds(t) {
5594      return this.options.crs.getProjectedBounds(void 0 === t ? this.getZoom() : t);
5595    },
5596    getPane: function getPane(t) {
5597      return "string" == typeof t ? this._panes[t] : t;
5598    },
5599    getPanes: function getPanes() {
5600      return this._panes;
5601    },
5602    getContainer: function getContainer() {
5603      return this._container;
5604    },
5605    getZoomScale: function getZoomScale(t, i) {
5606      var e = this.options.crs;
5607      return i = void 0 === i ? this._zoom : i, e.scale(t) / e.scale(i);
5608    },
5609    getScaleZoom: function getScaleZoom(t, i) {
5610      var e = this.options.crs;
5611      i = void 0 === i ? this._zoom : i;
5612      var n = e.zoom(t * e.scale(i));
5613      return isNaN(n) ? 1 / 0 : n;
5614    },
5615    project: function project(t, i) {
5616      return i = void 0 === i ? this._zoom : i, this.options.crs.latLngToPoint(j(t), i);
5617    },
5618    unproject: function unproject(t, i) {
5619      return i = void 0 === i ? this._zoom : i, this.options.crs.pointToLatLng(A(t), i);
5620    },
5621    layerPointToLatLng: function layerPointToLatLng(t) {
5622      var i = A(t).add(this.getPixelOrigin());
5623      return this.unproject(i);
5624    },
5625    latLngToLayerPoint: function latLngToLayerPoint(t) {
5626      return this.project(j(t))._round()._subtract(this.getPixelOrigin());
5627    },
5628    wrapLatLng: function wrapLatLng(t) {
5629      return this.options.crs.wrapLatLng(j(t));
5630    },
5631    wrapLatLngBounds: function wrapLatLngBounds(t) {
5632      return this.options.crs.wrapLatLngBounds(N(t));
5633    },
5634    distance: function distance(t, i) {
5635      return this.options.crs.distance(j(t), j(i));
5636    },
5637    containerPointToLayerPoint: function containerPointToLayerPoint(t) {
5638      return A(t).subtract(this._getMapPanePos());
5639    },
5640    layerPointToContainerPoint: function layerPointToContainerPoint(t) {
5641      return A(t).add(this._getMapPanePos());
5642    },
5643    containerPointToLatLng: function containerPointToLatLng(t) {
5644      var i = this.containerPointToLayerPoint(A(t));
5645      return this.layerPointToLatLng(i);
5646    },
5647    latLngToContainerPoint: function latLngToContainerPoint(t) {
5648      return this.layerPointToContainerPoint(this.latLngToLayerPoint(j(t)));
5649    },
5650    mouseEventToContainerPoint: function mouseEventToContainerPoint(t) {
5651      return Di(t, this._container);
5652    },
5653    mouseEventToLayerPoint: function mouseEventToLayerPoint(t) {
5654      return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t));
5655    },
5656    mouseEventToLatLng: function mouseEventToLatLng(t) {
5657      return this.layerPointToLatLng(this.mouseEventToLayerPoint(t));
5658    },
5659    _initContainer: function _initContainer(t) {
5660      var i = this._container = ni(t);
5661      if (!i) throw new Error("Map container not found.");
5662      if (i._leaflet_id) throw new Error("Map container is already initialized.");
5663      zi(i, "scroll", this._onScroll, this), this._containerId = m(i);
5664    },
5665    _initLayout: function _initLayout() {
5666      var t = this._container;
5667      this._fadeAnimated = this.options.fadeAnimation && vt, ci(t, "leaflet-container" + (bt ? " leaflet-touch" : "") + (zt ? " leaflet-retina" : "") + (it ? " leaflet-oldie" : "") + (ct ? " leaflet-safari" : "") + (this._fadeAnimated ? " leaflet-fade-anim" : ""));
5668      var i = oi(t, "position");
5669      "absolute" !== i && "relative" !== i && "fixed" !== i && (t.style.position = "relative"), this._initPanes(), this._initControlPos && this._initControlPos();
5670    },
5671    _initPanes: function _initPanes() {
5672      var t = this._panes = {};
5673      this._paneRenderers = {}, this._mapPane = this.createPane("mapPane", this._container), vi(this._mapPane, new k(0, 0)), this.createPane("tilePane"), this.createPane("shadowPane"), this.createPane("overlayPane"), this.createPane("markerPane"), this.createPane("tooltipPane"), this.createPane("popupPane"), this.options.markerZoomAnimation || (ci(t.markerPane, "leaflet-zoom-hide"), ci(t.shadowPane, "leaflet-zoom-hide"));
5674    },
5675    _resetView: function _resetView(t, i) {
5676      vi(this._mapPane, new k(0, 0));
5677      var e = !this._loaded;
5678      this._loaded = !0, i = this._limitZoom(i), this.fire("viewprereset");
5679      var n = this._zoom !== i;
5680      this._moveStart(n, !1)._move(t, i)._moveEnd(n), this.fire("viewreset"), e && this.fire("load");
5681    },
5682    _moveStart: function _moveStart(t, i) {
5683      return t && this.fire("zoomstart"), i || this.fire("movestart"), this;
5684    },
5685    _move: function _move(t, i, e) {
5686      void 0 === i && (i = this._zoom);
5687      var n = this._zoom !== i;
5688      return this._zoom = i, this._lastCenter = t, this._pixelOrigin = this._getNewPixelOrigin(t), (n || e && e.pinch) && this.fire("zoom", e), this.fire("move", e);
5689    },
5690    _moveEnd: function _moveEnd(t) {
5691      return t && this.fire("zoomend"), this.fire("moveend");
5692    },
5693    _stop: function _stop() {
5694      return z(this._flyToFrame), this._panAnim && this._panAnim.stop(), this;
5695    },
5696    _rawPanBy: function _rawPanBy(t) {
5697      vi(this._mapPane, this._getMapPanePos().subtract(t));
5698    },
5699    _getZoomSpan: function _getZoomSpan() {
5700      return this.getMaxZoom() - this.getMinZoom();
5701    },
5702    _panInsideMaxBounds: function _panInsideMaxBounds() {
5703      this._enforcingBounds || this.panInsideBounds(this.options.maxBounds);
5704    },
5705    _checkIfLoaded: function _checkIfLoaded() {
5706      if (!this._loaded) throw new Error("Set map center and zoom first.");
5707    },
5708    _initEvents: function _initEvents(t) {
5709      this._targets = {};
5710      var i = t ? Si : zi;
5711      i((this._targets[m(this._container)] = this)._container, "click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup", this._handleDOMEvent, this), this.options.trackResize && i(window, "resize", this._onResize, this), vt && this.options.transform3DLimit && (t ? this.off : this.on).call(this, "moveend", this._onMoveEnd);
5712    },
5713    _onResize: function _onResize() {
5714      z(this._resizeRequest), this._resizeRequest = M(function () {
5715        this.invalidateSize({
5716          debounceMoveend: !0
5717        });
5718      }, this);
5719    },
5720    _onScroll: function _onScroll() {
5721      this._container.scrollTop = 0, this._container.scrollLeft = 0;
5722    },
5723    _onMoveEnd: function _onMoveEnd() {
5724      var t = this._getMapPanePos();
5725
5726      Math.max(Math.abs(t.x), Math.abs(t.y)) >= this.options.transform3DLimit && this._resetView(this.getCenter(), this.getZoom());
5727    },
5728    _findEventTargets: function _findEventTargets(t, i) {
5729      for (var e, n = [], o = "mouseout" === i || "mouseover" === i, s = t.target || t.srcElement, r = !1; s;) {
5730        if ((e = this._targets[m(s)]) && ("click" === i || "preclick" === i) && !t._simulated && this._draggableMoved(e)) {
5731          r = !0;
5732          break;
5733        }
5734
5735        if (e && e.listens(i, !0)) {
5736          if (o && !Vi(s, t)) break;
5737          if (n.push(e), o) break;
5738        }
5739
5740        if (s === this._container) break;
5741        s = s.parentNode;
5742      }
5743
5744      return n.length || r || o || !Vi(s, t) || (n = [this]), n;
5745    },
5746    _handleDOMEvent: function _handleDOMEvent(t) {
5747      var i;
5748      this._loaded && !Ui(t) && ("mousedown" !== (i = t.type) && "keypress" !== i && "keyup" !== i && "keydown" !== i || Pi(t.target || t.srcElement), this._fireDOMEvent(t, i));
5749    },
5750    _mouseEvents: ["click", "dblclick", "mouseover", "mouseout", "contextmenu"],
5751    _fireDOMEvent: function _fireDOMEvent(t, i, e) {
5752      var n;
5753
5754      if ("click" === t.type && ((n = h({}, t)).type = "preclick", this._fireDOMEvent(n, n.type, e)), !t._stopped && (e = (e || []).concat(this._findEventTargets(t, i))).length) {
5755        var o = e[0];
5756        "contextmenu" === i && o.listens(i, !0) && Ri(t);
5757        var s,
5758            r = {
5759          originalEvent: t
5760        };
5761        "keypress" !== t.type && "keydown" !== t.type && "keyup" !== t.type && (s = o.getLatLng && (!o._radius || o._radius <= 10), r.containerPoint = s ? this.latLngToContainerPoint(o.getLatLng()) : this.mouseEventToContainerPoint(t), r.layerPoint = this.containerPointToLayerPoint(r.containerPoint), r.latlng = s ? o.getLatLng() : this.layerPointToLatLng(r.layerPoint));
5762
5763        for (var a = 0; a < e.length; a++) {
5764          if (e[a].fire(i, r, !0), r.originalEvent._stopped || !1 === e[a].options.bubblingMouseEvents && -1 !== v(this._mouseEvents, i)) return;
5765        }
5766      }
5767    },
5768    _draggableMoved: function _draggableMoved(t) {
5769      return (t = t.dragging && t.dragging.enabled() ? t : this).dragging && t.dragging.moved() || this.boxZoom && this.boxZoom.moved();
5770    },
5771    _clearHandlers: function _clearHandlers() {
5772      for (var t = 0, i = this._handlers.length; t < i; t++) {
5773        this._handlers[t].disable();
5774      }
5775    },
5776    whenReady: function whenReady(t, i) {
5777      return this._loaded ? t.call(i || this, {
5778        target: this
5779      }) : this.on("load", t, i), this;
5780    },
5781    _getMapPanePos: function _getMapPanePos() {
5782      return yi(this._mapPane) || new k(0, 0);
5783    },
5784    _moved: function _moved() {
5785      var t = this._getMapPanePos();
5786
5787      return t && !t.equals([0, 0]);
5788    },
5789    _getTopLeftPoint: function _getTopLeftPoint(t, i) {
5790      return (t && void 0 !== i ? this._getNewPixelOrigin(t, i) : this.getPixelOrigin()).subtract(this._getMapPanePos());
5791    },
5792    _getNewPixelOrigin: function _getNewPixelOrigin(t, i) {
5793      var e = this.getSize()._divideBy(2);
5794
5795      return this.project(t, i)._subtract(e)._add(this._getMapPanePos())._round();
5796    },
5797    _latLngToNewLayerPoint: function _latLngToNewLayerPoint(t, i, e) {
5798      var n = this._getNewPixelOrigin(e, i);
5799
5800      return this.project(t, i)._subtract(n);
5801    },
5802    _latLngBoundsToNewLayerBounds: function _latLngBoundsToNewLayerBounds(t, i, e) {
5803      var n = this._getNewPixelOrigin(e, i);
5804
5805      return O([this.project(t.getSouthWest(), i)._subtract(n), this.project(t.getNorthWest(), i)._subtract(n), this.project(t.getSouthEast(), i)._subtract(n), this.project(t.getNorthEast(), i)._subtract(n)]);
5806    },
5807    _getCenterLayerPoint: function _getCenterLayerPoint() {
5808      return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
5809    },
5810    _getCenterOffset: function _getCenterOffset(t) {
5811      return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint());
5812    },
5813    _limitCenter: function _limitCenter(t, i, e) {
5814      if (!e) return t;
5815
5816      var n = this.project(t, i),
5817          o = this.getSize().divideBy(2),
5818          s = new I(n.subtract(o), n.add(o)),
5819          r = this._getBoundsOffset(s, e, i);
5820
5821      return r.round().equals([0, 0]) ? t : this.unproject(n.add(r), i);
5822    },
5823    _limitOffset: function _limitOffset(t, i) {
5824      if (!i) return t;
5825      var e = this.getPixelBounds(),
5826          n = new I(e.min.add(t), e.max.add(t));
5827      return t.add(this._getBoundsOffset(n, i));
5828    },
5829    _getBoundsOffset: function _getBoundsOffset(t, i, e) {
5830      var n = O(this.project(i.getNorthEast(), e), this.project(i.getSouthWest
5830(), e)),
5831          o = n.min.subtract(t.min),
5832          s = n.max.subtract(t.max);
5833      return new k(this._rebound(o.x, -s.x), this._rebound(o.y, -s.y));
5834    },
5835    _rebound: function _rebound(t, i) {
5836      return 0 < t + i ? Math.round(t - i) / 2 : Math.max(0, Math.ceil(t)) - Math.max(0, Math.floor(i));
5837    },
5838    _limitZoom: function _limitZoom(t) {
5839      var i = this.getMinZoom(),
5840          e = this.getMaxZoom(),
5841          n = vt ? this.options.zoomSnap : 1;
5842      return n && (t = Math.round(t / n) * n), Math.max(i, Math.min(e, t));
5843    },
5844    _onPanTransitionStep: function _onPanTransitionStep() {
5845      this.fire("move");
5846    },
5847    _onPanTransitionEnd: function _onPanTransitionEnd() {
5848      _i(this._mapPane, "leaflet-pan-anim"), this.fire("moveend");
5849    },
5850    _tryAnimatedPan: function _tryAnimatedPan(t, i) {
5851      var e = this._getCenterOffset(t)._trunc();
5852
5853      return !(!0 !== (i && i.animate) && !this.getSize().contains(e)) && (this.panBy(e, i), !0);
5854    },
5855    _createAnimProxy: function _createAnimProxy() {
5856      var t = this._proxy = si("div", "leaflet-proxy leaflet-zoom-animated");
5857      this._panes.mapPane.appendChild(t), this.on("zoomanim", function (t) {
5858        var i = ti,
5859            e = this._proxy.style[i];
5860        gi(this._proxy, this.project(t.center, t.zoom), this.getZoomScale(t.zoom, 1)), e === this._proxy.style[i] && this._animatingZoom && this._onZoomTransitionEnd();
5861      }, this), this.on("load moveend", this._animMoveEnd, this), this._on("unload", this._destroyAnimProxy, this);
5862    },
5863    _destroyAnimProxy: function _destroyAnimProxy() {
5864      ri(this._proxy), this.off("load moveend", this._animMoveEnd, this), delete this._proxy;
5865    },
5866    _animMoveEnd: function _animMoveEnd() {
5867      var t = this.getCenter(),
5868          i = this.getZoom();
5869      gi(this._proxy, this.project(t, i), this.getZoomScale(i, 1));
5870    },
5871    _catchTransitionEnd: function _catchTransitionEnd(t) {
5872      this._animatingZoom && 0 <= t.propertyName.indexOf("transform") && this._onZoomTransitionEnd();
5873    },
5874    _nothingToAnimate: function _nothingToAnimate() {
5875      return !this._container.getElementsByClassName("leaflet-zoom-animated").length;
5876    },
5877    _tryAnimatedZoom: function _tryAnimatedZoom(t, i, e) {
5878      if (this._animatingZoom) return !0;
5879      if (e = e || {}, !this._zoomAnimated || !1 === e.animate || this._nothingToAnimate() || Math.abs(i - this._zoom) > this.options.zoomAnimationThreshold) return !1;
5880
5881      var n = this.getZoomScale(i),
5882          o = this._getCenterOffset(t)._divideBy(1 - 1 / n);
5883
5884      return !(!0 !== e.animate && !this.getSize().contains(o)) && (M(function () {
5885        this._moveStart(!0, !1)._animateZoom(t, i, !0);
5886      }, this), !0);
5887    },
5888    _animateZoom: function _animateZoom(t, i, e, n) {
5889      this._mapPane && (e && (this._animatingZoom = !0, this._animateToCenter = t, this._animateToZoom = i, ci(this._mapPane, "leaflet-zoom-anim")), this.fire("zoomanim", {
5890        center: t,
5891        zoom: i,
5892        noUpdate: n
5893      }), setTimeout(p(this._onZoomTransitionEnd, this), 250));
5894    },
5895    _onZoomTransitionEnd: function _onZoomTransitionEnd() {
5896      this._animatingZoom && (this._mapPane && _i(this._mapPane, "leaflet-zoom-anim"), this._animatingZoom = !1, this._move(this._animateToCenter, this._animateToZoom), M(function () {
5897        this._moveEnd(!0);
5898      }, this));
5899    }
5900  });
5901
5902  function Yi(t) {
5903    return new Xi(t);
5904  }
5905
5906  var Xi = S.extend({
5907    options: {
5908      position: "topright"
5909    },
5910    initialize: function initialize(t) {
5911      c(this, t);
5912    },
5913    getPosition: function getPosition() {
5914      return this.options.position;
5915    },
5916    setPosition: function setPosition(t) {
5917      var i = this._map;
5918      return i && i.removeControl(this), this.options.position = t, i && i.addControl(this), this;
5919    },
5920    getContainer: function getContainer() {
5921      return this._container;
5922    },
5923    addTo: function addTo(t) {
5924      this.remove(), this._map = t;
5925      var i = this._container = this.onAdd(t),
5926          e = this.getPosition(),
5927          n = t._controlCorners[e];
5928      return ci(i, "leaflet-control"), -1 !== e.indexOf("bottom") ? n.insertBefore(i, n.firstChild) : n.appendChild(i), this._map.on("unload", this.remove, this), this;
5929    },
5930    remove: function remove() {
5931      return this._map && (ri(this._container), this.onRemove && this.onRemove(this._map), this._map.off("unload", this.remove, this), this._map = null), this;
5932    },
5933    _refocusOnMap: function _refocusOnMap(t) {
5934      this._map && t && 0 < t.screenX && 0 < t.screenY && this._map.getContainer().focus();
5935    }
5936  });
5937  Ki.include({
5938    addControl: function addControl(t) {
5939      return t.addTo(this), this;
5940    },
5941    removeControl: function removeControl(t) {
5942      return t.remove(), this;
5943    },
5944    _initControlPos: function _initControlPos() {
5945      var n = this._controlCorners = {},
5946          o = "leaflet-",
5947          s = this._controlContainer = si("div", o + "control-container", this._container);
5948
5949      function t(t, i) {
5950        var e = o + t + " " + o + i;
5951        n[t + i] = si("div", e, s);
5952      }
5953
5954      t("top", "left"), t("top", "right"), t("bottom", "left"), t("bottom", "right");
5955    },
5956    _clearControlPos: function _clearControlPos() {
5957      for (var t in this._controlCorners) {
5958        ri(this._controlCorners[t]);
5959      }
5960
5961      ri(this._controlContainer), delete this._controlCorners, delete this._controlContainer;
5962    }
5963  });
5964  var Ji = Xi.extend({
5965    options: {
5966      collapsed: !0,
5967      position: "topright",
5968      autoZIndex: !0,
5969      hideSingleBase: !1,
5970      sortLayers: !1,
5971      sortFunction: function sortFunction(t, i, e, n) {
5972        return e < n ? -1 : n < e ? 1 : 0;
5973      }
5974    },
5975    initialize: function initialize(t, i, e) {
5976      for (var n in c(this, e), this._layerControlInputs = [], this._layers = [], this._lastZIndex = 0, this._handlingClick = !1, t) {
5977        this._addLayer(t[n], n);
5978      }
5979
5980      for (n in i) {
5981        this._addLayer(i[n], n, !0);
5982      }
5983    },
5984    onAdd: function onAdd(t) {
5985      this._initLayout(), this._update(), (this._map = t).on("zoomend", this._checkDisabledLayers, this);
5986
5987      for (var i = 0; i < this._layers.length; i++) {
5988        this._layers[i].layer.on("add remove", this._onLayerChange, this);
5989      }
5990
5991      return this._container;
5992    },
5993    addTo: function addTo(t) {
5994      return Xi.prototype.addTo.call(this, t), this._expandIfNotCollapsed();
5995    },
5996    onRemove: function onRemove() {
5997      this._map.off("zoomend", this._checkDisabledLayers, this);
5998
5999      for (var t = 0; t < this._layers.length; t++) {
6000        this._layers[t].layer.off("add remove", this._onLayerChange, this);
6001      }
6002    },
6003    addBaseLayer: function addBaseLayer(t, i) {
6004      return this._addLayer(t, i), this._map ? this._update() : this;
6005    },
6006    addOverlay: function addOverlay(t, i) {
6007      return this._addLayer(t, i, !0), this._map ? this._update() : this;
6008    },
6009    removeLayer: function removeLayer(t) {
6010      t.off("add remove", this._onLayerChange, this);
6011
6012      var i = this._getLayer(m(t));
6013
6014      return i && this._layers.splice(this._layers.indexOf(i), 1), this._map ? this._update() : this;
6015    },
6016    expand: function expand() {
6017      ci(this._container, "leaflet-control-layers-expanded"), this._section.style.height = null;
6018      var t = this._map.getSize().y - (this._container.offsetTop + 50);
6019      return t < this._section.clientHeight ? (ci(this._section, "leaflet-control-layers-scrollbar"), this._section.style.height = t + "px") : _i(this._section, "leaflet-control-layers-scrollbar"), this._checkDisabledLayers(), this;
6020    },
6021    collapse: function collapse() {
6022      return _i(this._container, "leaflet-control-layers-expanded"), this;
6023    },
6024    _initLayout: function _initLayout() {
6025      var t = "leaflet-control-layers",
6026          i = this._container = si("div", t),
6027          e = this.options.collapsed;
6028      i.setAttribute("aria-haspopup", !0), Oi(i), Ii(i);
6029      var n = this._section = si("section", t + "-list");
6030      e && (this._map.on("click", this.collapse, this), ot || zi(i, {
6031        mouseenter: this.expand,
6032        mouseleave: this.collapse
6033      }, this));
6034      var o = this._layersLink = si("a", t + "-toggle", i);
6035      o.href = "#", o.title = "Layers", bt ? (zi(o, "click", Ni), zi(o, "click", this.expand, this)) : zi(o, "focus", this.expand, this), e || this.expand(), this._baseLayersList = si("div", t + "-base", n), this._separator = si("div", t + "-separator", n), this._overlaysList = si("div", t + "-overlays", n), i.appendChild(n);
6036    },
6037    _getLayer: function _getLayer(t) {
6038      for (var i = 0; i < this._layers.length; i++) {
6039        if (this._layers[i] && m(this._layers[i].layer) === t) return this._layers[i];
6040      }
6041    },
6042    _addLayer: function _addLayer(t, i, e) {
6043      this._map && t.on("add remove", this._onLayerChange, this), this._layers.push({
6044        layer: t,
6045        name: i,
6046        overlay: e
6047      }), this.options.sortLayers && this._layers.sort(p(function (t, i) {
6048        return this.options.sortFunction(t.layer, i.layer, t.name, i.name);
6049      }, this)), this.options.autoZIndex && t.setZIndex && (this._lastZIndex++, t.setZIndex(this._lastZIndex)), this._expandIfNotCollapsed();
6050    },
6051    _update: function _update() {
6052      if (!this._container) return this;
6053      ai(this._baseLayersList), ai(this._overlaysList), this._layerControlInputs = [];
6054
6055      for (var t, i, e, n = 0, o = 0; o < this._layers.length; o++) {
6056        e = this._layers[o], this._addItem(e), i = i || e.overlay, t = t || !e.overlay, n += e.overlay ? 0 : 1;
6057      }
6058
6059      return this.options.hideSingleBase && (t = t && 1 < n, this._baseLayersList.style.display = t ? "" : "none"), this._separator.style.display = i && t ? "" : "none", this;
6060    },
6061    _onLayerChange: function _onLayerChange(t) {
6062      this._handlingClick || this._update();
6063
6064      var i = this._getLayer(m(t.target)),
6065          e = i.overlay ? "add" === t.type ? "overlayadd" : "overlayremove" : "add" === t.type ? "baselayerchange" : null;
6066
6067      e && this._map.fire(e, i);
6068    },
6069    _createRadioElement: function _createRadioElement(t, i) {
6070      var e = '<input type="radio" class="leaflet-control-layers-selector" name="' + t + '"' + (i ? ' checked="checked"' : "") + "/>",
6071          n = document.createElement("div");
6072      return n.innerHTML = e, n.firstChild;
6073    },
6074    _addItem: function _addItem(t) {
6075      var i,
6076          e = document.createElement("label"),
6077          n = this._map.hasLayer(t.layer);
6078
6079      t.overlay ? ((i = document.createElement("input")).type = "checkbox", i.className = "leaflet-control-layers-selector", i.defaultChecked = n) : i = this._createRadioElement("leaflet-base-layers_" + m(this), n), this._layerControlInputs.push(i), i.layerId = m(t.layer), zi(i, "click", this._onInputClick, this);
6080      var o = document.createElement("span");
6081      o.innerHTML = " " + t.name;
6082      var s = document.createElement("div");
6083      return e.appendChild(s), s.appendChild(i), s.appendChild(o), (t.overlay ? this._overlaysList : this._baseLayersList).appendChild(e), this._checkDisabledLayers(), e;
6084    },
6085    _onInputClick: function _onInputClick() {
6086      var t,
6087          i,
6088          e = this._layerControlInputs,
6089          n = [],
6090          o = [];
6091      this._handlingClick = !0;
6092
6093      for (var s = e.length - 1; 0 <= s; s--) {
6094        t = e[s], i = this._getLayer(t.layerId).layer, t.checked ? n.push(i) : t.checked || o.push(i);
6095      }
6096
6097      for (s = 0; s < o.length; s++) {
6098        this._map.hasLayer(o[s]) && this._map.removeLayer(o[s]);
6099      }
6100
6101      for (s = 0; s < n.length; s++) {
6102        this._map.hasLayer(n[s]) || this._map.addLayer(n[s]);
6103      }
6104
6105      this._handlingClick = !1, this._refocusOnMap();
6106    },
6107    _checkDisabledLayers: function _checkDisabledLayers() {
6108      for (var t, i, e = this._layerControlInputs, n = this._map.getZoom(), o = e.length - 1; 0 <= o; o--) {
6109        t = e[o], i = this._getLayer(t.layerId).layer, t.disabled = void 0 !== i.options.minZoom && n < i.options.minZoom || void 0 !== i.options.maxZoom && n > i.options.maxZoom;
6110      }
6111    },
6112    _expandIfNotCollapsed: function _expandIfNotCollapsed() {
6113      return this._map && !this.options.collapsed && this.expand(), this;
6114    },
6115    _expand: function _expand() {
6116      return this.expand();
6117    },
6118    _collapse: function _collapse() {
6119      return this.collapse();
6120    }
6121  }),
6122      $i = Xi.extend({
6123    options: {
6124      position: "topleft",
6125      zoomInText: "+",
6126      zoomInTitle: "Zoom in",
6127      zoomOutText: "&#x2212;",
6128      zoomOutTitle: "Zoom out"
6129    },
6130    onAdd: function onAdd(t) {
6131      var i = "leaflet-control-zoom",
6132          e = si("div", i + " leaflet-bar"),
6133          n = this.options;
6134      return this._zoomInButton = this._createButton(n.zoomInText, n.zoomInTitle, i + "-in", e, this._zoomIn), this._zoomOutButton = this._createButton(n.zoomOutText, n.zoomOutTitle, i + "-out", e, this._zoomOut), this._updateDisabled(), t.on("zoomend zoomlevelschange", this._updateDisabled, this), e;
6135    },
6136    onRemove: function onRemove(t) {
6137      t.off("zoomend zoomlevelschange", this._updateDisabled, this);
6138    },
6139    disable: function disable() {
6140      return this._disabled = !0, this._updateDisabled(), this;
6141    },
6142    enable: function enable() {
6143      return this._disabled = !1, this._updateDisabled(), this;
6144    },
6145    _zoomIn: function _zoomIn(t) {
6146      !this._disabled && this._map._zoom < this._map.getMaxZoom() && this._map.zoomIn(this._map.options.zoomDelta * (t.shiftKey ? 3 : 1));
6147    },
6148    _zoomOut: function _zoomOut(t) {
6149      !this._disabled && this._map._zoom > this._map.getMinZoom() && this._map.zoomOut(this._map.options.zoomDelta * (t.shiftKey ? 3 : 1));
6150    },
6151    _createButton: function _createButton(t, i, e, n, o) {
6152      var s = si("a", e, n);
6153      return s.innerHTML = t, s.href = "#", s.title = i, s.setAttribute("role", "button"), s.setAttribute("aria-label", i), Oi(s), zi(s, "click", Ni), zi(s, "click", o, this), zi(s, "click", this._refocusOnMap, this), s;
6154    },
6155    _updateDisabled: function _updateDisabled() {
6156      var t = this._map,
6157          i = "leaflet-disabled";
6158      _i(this._zoomInButton, i), _i(this._zoomOutButton, i), !this._disabled && t._zoom !== t.getMin
6158Zoom() || ci(this._zoomOutButton, i), !this._disabled && t._zoom !== t.getMaxZoom() || ci(this._zoomInButton, i);
6159    }
6160  });
6161  Ki.mergeOptions({
6162    zoomControl: !0
6163  }), Ki.addInitHook(function () {
6164    this.options.zoomControl && (this.zoomControl = new $i(), this.addControl(this.zoomControl));
6165  });
6166  var Qi = Xi.extend({
6167    options: {
6168      position: "bottomleft",
6169      maxWidth: 100,
6170      metric: !0,
6171      imperial: !0
6172    },
6173    onAdd: function onAdd(t) {
6174      var i = "leaflet-control-scale",
6175          e = si("div", i),
6176          n = this.options;
6177      return this._addScales(n, i + "-line", e), t.on(n.updateWhenIdle ? "moveend" : "move", this._update, this), t.whenReady(this._update, this), e;
6178    },
6179    onRemove: function onRemove(t) {
6180      t.off(this.options.updateWhenIdle ? "moveend" : "move", this._update, this);
6181    },
6182    _addScales: function _addScales(t, i, e) {
6183      t.metric && (this._mScale = si("div", i, e)), t.imperial && (this._iScale = si("div", i, e));
6184    },
6185    _update: function _update() {
6186      var t = this._map,
6187          i = t.getSize().y / 2,
6188          e = t.distance(t.containerPointToLatLng([0, i]), t.containerPointToLatLng([this.options.maxWidth, i]));
6189
6190      this._updateScales(e);
6191    },
6192    _updateScales: function _updateScales(t) {
6193      this.options.metric && t && this._updateMetric(t), this.options.imperial && t && this._updateImperial(t);
6194    },
6195    _updateMetric: function _updateMetric(t) {
6196      var i = this._getRoundNum(t),
6197          e = i < 1e3 ? i + " m" : i / 1e3 + " km";
6198
6199      this._updateScale(this._mScale, e, i / t);
6200    },
6201    _updateImperial: function _updateImperial(t) {
6202      var i,
6203          e,
6204          n,
6205          o = 3.2808399 * t;
6206      5280 < o ? (i = o / 5280, e = this._getRoundNum(i), this._updateScale(this._iScale, e + " mi", e / i)) : (n = this._getRoundNum(o), this._updateScale(this._iScale, n + " ft", n / o));
6207    },
6208    _updateScale: function _updateScale(t, i, e) {
6209      t.style.width = Math.round(this.options.maxWidth * e) + "px", t.innerHTML = i;
6210    },
6211    _getRoundNum: function _getRoundNum(t) {
6212      var i = Math.pow(10, (Math.floor(t) + "").length - 1),
6213          e = t / i;
6214      return i * (e = 10 <= e ? 10 : 5 <= e ? 5 : 3 <= e ? 3 : 2 <= e ? 2 : 1);
6215    }
6216  }),
6217      te = Xi.extend({
6218    options: {
6219      position: "bottomright",
6220      prefix: '<a href="https://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'
6221    },
6222    initialize: function initialize(t) {
6223      c(this, t), this._attributions = {};
6224    },
6225    onAdd: function onAdd(t) {
6226      for (var i in (t.attributionControl = this)._container = si("div", "leaflet-control-attribution"), Oi(this._container), t._layers) {
6227        t._layers[i].getAttribution && this.addAttribution(t._layers[i].getAttribution());
6228      }
6229
6230      return this._update(), this._container;
6231    },
6232    setPrefix: function setPrefix(t) {
6233      return this.options.prefix = t, this._update(), this;
6234    },
6235    addAttribution: function addAttribution(t) {
6236      return t && (this._attributions[t] || (this._attributions[t] = 0), this._attributions[t]++, this._update()), this;
6237    },
6238    removeAttribution: function removeAttribution(t) {
6239      return t && this._attributions[t] && (this._attributions[t]--, this._update()), this;
6240    },
6241    _update: function _update() {
6242      if (this._map) {
6243        var t = [];
6244
6245        for (var i in this._attributions) {
6246          this._attributions[i] && t.push(i);
6247        }
6248
6249        var e = [];
6250        this.options.prefix && e.push(this.options.prefix), t.length && e.push(t.join(", ")), this._container.innerHTML = e.join(" | ");
6251      }
6252    }
6253  });
6254  Ki.mergeOptions({
6255    attributionControl: !0
6256  }), Ki.addInitHook(function () {
6257    this.options.attributionControl && new te().addTo(this);
6258  });
6259  Xi.Layers = Ji, Xi.Zoom = $i, Xi.Scale = Qi, Xi.Attribution = te, Yi.layers = function (t, i, e) {
6260    return new Ji(t, i, e);
6261  }, Yi.zoom = function (t) {
6262    return new $i(t);
6263  }, Yi.scale = function (t) {
6264    return new Qi(t);
6265  }, Yi.attribution = function (t) {
6266    return new te(t);
6267  };
6268  var ie = S.extend({
6269    initialize: function initialize(t) {
6270      this._map = t;
6271    },
6272    enable: function enable() {
6273      return this._enabled || (this._enabled = !0, this.addHooks()), this;
6274    },
6275    disable: function disable() {
6276      return this._enabled && (this._enabled = !1, this.removeHooks()), this;
6277    },
6278    enabled: function enabled() {
6279      return !!this._enabled;
6280    }
6281  });
6282
6283  ie.addTo = function (t, i) {
6284    return t.addHandler(i, this), this;
6285  };
6286
6287  var ee,
6288      ne = {
6289    Events: Z
6290  },
6291      oe = bt ? "touchstart mousedown" : "mousedown",
6292      se = {
6293    mousedown: "mouseup",
6294    touchstart: "touchend",
6295    pointerdown: "touchend",
6296    MSPointerDown: "touchend"
6297  },
6298      re = {
6299    mousedown: "mousemove",
6300    touchstart: "touchmove",
6301    pointerdown: "touchmove",
6302    MSPointerDown: "touchmove"
6303  },
6304      ae = E.extend({
6305    options: {
6306      clickTolerance: 3
6307    },
6308    initialize: function initialize(t, i, e, n) {
6309      c(this, n), this._element = t, this._dragStartTarget = i || t, this._preventOutline = e;
6310    },
6311    enable: function enable() {
6312      this._enabled || (zi(this._dragStartTarget, oe, this._onDown, this), this._enabled = !0);
6313    },
6314    disable: function disable() {
6315      this._enabled && (ae._dragging === this && this.finishDrag(), Si(this._dragStartTarget, oe, this._onDown, this), this._enabled = !1, this._moved = !1);
6316    },
6317    _onDown: function _onDown(t) {
6318      var i, e;
6319      !t._simulated && this._enabled && (this._moved = !1, li(this._element, "leaflet-zoom-anim") || ae._dragging || t.shiftKey || 1 !== t.which && 1 !== t.button && !t.touches || ((ae._dragging = this)._preventOutline && Pi(this._element), xi(), Xt(), this._moving || (this.fire("down"), i = t.touches ? t.touches[0] : t, e = bi(this._element), this._startPoint = new k(i.clientX, i.clientY), this._parentScale = Ti(e), zi(document, re[t.type], this._onMove, this), zi(document, se[t.type], this._onUp, this))));
6320    },
6321    _onMove: function _onMove(t) {
6322      var i, e;
6323      !t._simulated && this._enabled && (t.touches && 1 < t.touches.length ? this._moved = !0 : ((e = new k((i = t.touches && 1 === t.touches.length ? t.touches[0] : t).clientX, i.clientY)._subtract(this._startPoint)).x || e.y) && (Math.abs(e.x) + Math.abs(e.y) < this.options.clickTolerance || (e.x /= this._parentScale.x, e.y /= this._parentScale.y, Ri(t), this._moved || (this.fire("dragstart"), this._moved = !0, this._startPos = yi(this._element).subtract(e), ci(document.body, "leaflet-dragging"), this._lastTarget = t.target || t.srcElement, window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance && (this._lastTarget = this._lastTarget.correspondingUseElement), ci(this._lastTarget, "leaflet-drag-target")), this._newPos = this._startPos.add(e), this._moving = !0, z(this._animRequest), this._lastEvent = t, this._animRequest = M(this._updatePosition, this, !0))));
6324    },
6325    _updatePosition: function _updatePosition() {
6326      var t = {
6327        originalEvent: this._lastEvent
6328      };
6329      this.fire("predrag", t), vi(this._element, this._newPos), this.fire("drag", t);
6330    },
6331    _onUp: function _onUp(t) {
6332      !t._simulated && this._enabled && this.finishDrag();
6333    },
6334    finishDrag: function finishDrag() {
6335      for (var t in _i(document.body, "leaflet-dragging"), this._lastTarget && (_i(this._lastTarget, "leaflet-drag-target"), this._lastTarget = null), re) {
6336        Si(document, re[t], this._onMove, this), Si(document, se[t], this._onUp, this);
6337      }
6338
6339      wi(), Jt(), this._moved && this._moving && (z(this._animRequest), this.fire("dragend", {
6340        distance: this._newPos.distanceTo(this._startPos)
6341      })), this._moving = !1, ae._dragging = !1;
6342    }
6343  });
6344
6345  function he(t, i) {
6346    if (!i || !t.length) return t.slice();
6347    var e = i * i;
6348    return t = function (t, i) {
6349      var e = t.length,
6350          n = new ((typeof Uint8Array === "undefined" ? "undefined" : _typeof(Uint8Array)) != void 0 + "" ? Uint8Array : Array)(e);
6351      n[0] = n[e - 1] = 1, function t(i, e, n, o, s) {
6352        var r,
6353            a,
6354            h,
6355            u = 0;
6356
6357        for (a = o + 1; a <= s - 1; a++) {
6358          h = de(i[a], i[o], i[s], !0), u < h && (r = a, u = h);
6359        }
6360
6361        n < u && (e[r] = 1, t(i, e, n, o, r), t(i, e, n, r, s));
6362      }(t, n, i, 0, e - 1);
6363      var o,
6364          s = [];
6365
6366      for (o = 0; o < e; o++) {
6367        n[o] && s.push(t[o]);
6368      }
6369
6370      return s;
6371    }(t = function (t, i) {
6372      for (var e = [t[0]], n = 1, o = 0, s = t.length; n < s; n++) {
6373        (function (t, i) {
6374          var e = i.x - t.x,
6375              n = i.y - t.y;
6376          return e * e + n * n;
6377        })(t[n], t[o]) > i && (e.push(t[n]), o = n);
6378      }
6379
6380      o < s - 1 && e.push(t[s - 1]);
6381      return e;
6382    }(t, e), e);
6383  }
6384
6385  function ue(t, i, e) {
6386    return Math.sqrt(de(t, i, e, !0));
6387  }
6388
6389  function le(t, i, e, n, o) {
6390    var s,
6391        r,
6392        a,
6393        h = n ? ee : _e(t, e),
6394        u = _e(i, e);
6395
6396    for (ee = u;;) {
6397      if (!(h | u)) return [t, i];
6398      if (h & u) return !1;
6399      a = _e(r = ce(t, i, s = h || u, e, o), e), s === h ? (t = r, h = a) : (i = r, u = a);
6400    }
6401  }
6402
6403  function ce(t, i, e, n, o) {
6404    var s,
6405        r,
6406        a = i.x - t.x,
6407        h = i.y - t.y,
6408        u = n.min,
6409        l = n.max;
6410    return 8 & e ? (s = t.x + a * (l.y - t.y) / h, r = l.y) : 4 & e ? (s = t.x + a * (u.y - t.y) / h, r = u.y) : 2 & e ? (s = l.x, r = t.y + h * (l.x - t.x) / a) : 1 & e && (s = u.x, r = t.y + h * (u.x - t.x) / a), new k(s, r, o);
6411  }
6412
6413  function _e(t, i) {
6414    var e = 0;
6415    return t.x < i.min.x ? e |= 1 : t.x > i.max.x && (e |= 2), t.y < i.min.y ? e |= 4 : t.y > i.max.y && (e |= 8), e;
6416  }
6417
6418  function de(t, i, e, n) {
6419    var o,
6420        s = i.x,
6421        r = i.y,
6422        a = e.x - s,
6423        h = e.y - r,
6424        u = a * a + h * h;
6425    return 0 < u && (1 < (o = ((t.x - s) * a + (t.y - r) * h) / u) ? (s = e.x, r = e.y) : 0 < o && (s += a * o, r += h * o)), a = t.x - s, h = t.y - r, n ? a * a + h * h : new k(s, r);
6426  }
6427
6428  function pe(t) {
6429    return !g(t[0]) || "object" != _typeof(t[0][0]) && void 0 !== t[0][0];
6430  }
6431
6432  function me(t) {
6433    return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."), pe(t);
6434  }
6435
6436  var fe = {
6437    simplify: he,
6438    pointToSegmentDistance: ue,
6439    closestPointOnSegment: function closestPointOnSegment(t, i, e) {
6440      return de(t, i, e);
6441    },
6442    clipSegment: le,
6443    _getEdgeIntersection: ce,
6444    _getBitCode: _e,
6445    _sqClosestPointOnSegment: de,
6446    isFlat: pe,
6447    _flat: me
6448  };
6449
6450  function ge(t, i, e) {
6451    for (var n, o, s, r, a, h, u, l = [1, 4, 2, 8], c = 0, _ = t.length; c < _; c++) {
6452      t[c]._code = _e(t[c], i);
6453    }
6454
6455    for (s = 0; s < 4; s++) {
6456      for (h = l[s], n = [], c = 0, o = (_ = t.length) - 1; c < _; o = c++) {
6457        r = t[c], a = t[o], r._code & h ? a._code & h || ((u = ce(a, r, h, i, e))._code = _e(u, i), n.push(u)) : (a._code & h && ((u = ce(a, r, h, i, e))._code = _e(u, i), n.push(u)), n.push(r));
6458      }
6459
6460      t = n;
6461    }
6462
6463    return t;
6464  }
6465
6466  var ve,
6467      ye = {
6468    clipPolygon: ge
6469  },
6470      xe = {
6471    project: function project(t) {
6472      return new k(t.lng, t.lat);
6473    },
6474    unproject: function unproject(t) {
6475      return new D(t.y, t.x);
6476    },
6477    bounds: new I([-180, -90], [180, 90])
6478  },
6479      we = {
6480    R: 6378137,
6481    R_MINOR: 6356752.314245179,
6482    bounds: new I([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),
6483    project: function project(t) {
6484      var i = Math.PI / 180,
6485          e = this.R,
6486          n = t.lat * i,
6487          o = this.R_MINOR / e,
6488          s = Math.sqrt(1 - o * o),
6489          r = s * Math.sin(n),
6490          a = Math.tan(Math.PI / 4 - n / 2) / Math.pow((1 - r) / (1 + r), s / 2),
6491          n = -e * Math.log(Math.max(a, 1e-10));
6492      return new k(t.lng * i * e, n);
6493    },
6494    unproject: function unproject(t) {
6495      for (var i, e = 180 / Math.PI, n = this.R, o = this.R_MINOR / n, s = Math.sqrt(1 - o * o), r = Math.exp(-t.y / n), a = Math.PI / 2 - 2 * Math.atan(r), h = 0, u = .1; h < 15 && 1e-7 < Math.abs(u); h++) {
6496        i = s * Math.sin(a), i = Math.pow((1 - i) / (1 + i), s / 2), a += u = Math.PI / 2 - 2 * Math.atan(r * i) - a;
6497      }
6498
6499      return new D(a * e, t.x * e / n);
6500    }
6501  },
6502      Pe = {
6503    LonLat: xe,
6504    Mercator: we,
6505    SphericalMercator: V
6506  },
6507      Le = h({}, F, {
6508    code: "EPSG:3395",
6509    projection: we,
6510    transformation: G(ve = .5 / (Math.PI * we.R), .5, -ve, .5)
6511  }),
6512      be = h({}, F, {
6513    code: "EPSG:4326",
6514    projection: xe,
6515    transformation: G(1 / 180, 1, -1 / 180, .5)
6516  }),
6517      Te = h({}, H, {
6518    projection: xe,
6519    transformation: G(1, 0, -1, 0),
6520    scale: function scale(t) {
6521      return Math.pow(2, t);
6522    },
6523    zoom: function zoom(t) {
6524      return Math.log(t) / Math.LN2;
6525    },
6526    distance: function distance(t, i) {
6527      var e = i.lng - t.lng,
6528          n = i.lat - t.lat;
6529      return Math.sqrt(e * e + n * n);
6530    },
6531    infinite: !0
6532  });
6533  H.Earth = F, H.EPSG3395 = Le, H.EPSG3857 = Y, H.EPSG900913 = X, H.EPSG4326 = be, H.Simple = Te;
6534  var Me = E.extend({
6535    options: {
6536      pane: "overlayPane",
6537      attribution: null,
6538      bubblingMouseEvents: !0
6539    },
6540    addTo: function addTo(t) {
6541      return t.addLayer(this), this;
6542    },
6543    remove: function remove() {
6544      return this.removeFrom(this._map || this._mapToAdd);
6545    },
6546    removeFrom: function removeFrom(t) {
6547      return t && t.removeLayer(this), this;
6548    },
6549    getPane: function getPane(t) {
6550      return this._map.getPane(t ? this.options[t] || t : this.options.pane);
6551    },
6552    addInteractiveTarget: function addInteractiveTarget(t) {
6553      return this._map._targets[m(t)] = this;
6554    },
6555    removeInteractiveTarget: function removeInteractiveTarget(t) {
6556      return delete this._map._targets[m(t)], this;
6557    },
6558    getAttribution: function getAttribution() {
6559      return this.options.attribution;
6560    },
6561    _layerAdd: function _layerAdd(t) {
6562      var i,
6563          e = t.target;
6564      e.hasLayer(this) && (this._map = e, this._zoomAnimated = e._zoomAnimated, this.getEvents && (i = this.getEvents(), e.on(i, this), this.once("remove", function () {
6565        e.off(i, this);
6566      }, this)), this.onAdd(e), this.getAttribution && e.attributionControl && e.attributionControl.addAttribution(this.getAttribution()), this.fire("add"), e.fire("layeradd", {
6567        layer: this
6568      }));
6569    }
6570  });
6571  Ki.include({
6572    addLayer: function addLayer(t) {
6573      if (!t._layerAdd) throw new Error("The provided object is not a Layer.");
6574      var i = m(t);
6575      return this._layers[i] || ((this._layers[i] = t)._mapToAdd = this, t.beforeAdd && t.beforeAdd(this), this.whenReady(t._layerAdd, t)), this;
6576    },
6577    removeLayer: function removeLayer(t) {
6578      var i = m(t);
6579      return this._layers[i] && (this._loaded && t.onRemove(this), t.getAttribution && this.attributionControl && this.attributionControl.removeAttribution(t.getAttribution()), delete this._layers[i], this._loaded && (this.fire("layerremove", {
6580        layer: t
6581      }), t.fire("remove")), t._map = t._mapToAdd = null), this;
6582    },
6583    hasLayer: function hasLayer(t) {
6584      return !!t && m(t) in this._layers;
6585    },
6586    eachLayer: function eachLayer(t, i) {
6587      for (var e in this._layers) {
6588        t.call(i, this._layers[e]);
6589      }
6590
6591      return this;
6592    },
6593    _addLayers: function _addLayers(t) {
6594      for (var i = 0, e = (t = t ? g(t) ? t : [t] : []).length; i < e; i++) {
6595        this.addLayer(t[i]);
6596      }
6597    },
6598    _addZoomLimit: function _addZoomLimit(t) {
6599      !isNaN(t.options.maxZoom) && isNaN(t.options.minZoom) || (this._zoomBoundLayers[m(t)] = t, this._updateZoomLevels());
6600    },
6601    _removeZoomLimit: function _removeZoomLimit(t) {
6602      var i = m(t);
6603      this._zoomBoundLayers[i] && (delete this._zoomBoundLayers[i], this._updateZoomLevels());
6604    },
6605    _updateZoomLevels: function _updateZoomLevels() {
6606      var t = 1 / 0,
6607          i = -1 / 0,
6608          e = this._getZoomSpan();
6609
6610      for (var n in this._zoomBoundLayers) {
6611        var o = this._zoomBoundLayers[n].options,
6612            t = void 0 === o.minZoom ? t : Math.min(t, o.minZoom),
6613            i = void 0 === o.maxZoom ? i : Math.max(i, o.maxZoom);
6614      }
6615
6616      this._layersMaxZoom = i === -1 / 0 ? void 0 : i, this._layersMinZoom = t === 1 / 0 ? void 0 : t, e !== this._getZoomSpan() && this.fire("zoomlevelschange"), void 0 === this.options.maxZoom && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom && this.setZoom(this._layersMaxZoom), void 0 === this.options.minZoom && this._layersMinZoom && this.getZoom() < this._layersMinZoom && this.setZoom(this._layersMinZoom);
6617    }
6618  });
6619  var ze = Me.extend({
6620    initialize: function initialize(t, i) {
6621      var e, n;
6622      if (c(this, i), this._layers = {}, t) for (e = 0, n = t.length; e < n; e++) {
6623        this.addLayer(t[e]);
6624      }
6625    },
6626    addLayer: function addLayer(t) {
6627      var i = this.getLayerId(t);
6628      return this._layers[i] = t, this._map && this._map.addLayer(t), this;
6629    },
6630    removeLayer: function removeLayer(t) {
6631      var i = t in this._layers ? t : this.getLayerId(t);
6632      return this._map && this._layers[i] && this._map.removeLayer(this._layers[i]), delete this._layers[i], this;
6633    },
6634    hasLayer: function hasLayer(t) {
6635      return !!t && ("number" == typeof t ? t : this.getLayerId(t)) in this._layers;
6636    },
6637    clearLayers: function clearLayers() {
6638      return this.eachLayer(this.removeLayer, this);
6639    },
6640    invoke: function invoke(t) {
6641      var i,
6642          e,
6643          n = Array.prototype.slice.call(arguments, 1);
6644
6645      for (i in this._layers) {
6646        (e = this._layers[i])[t] && e[t].apply(e, n);
6647      }
6648
6649      return this;
6650    },
6651    onAdd: function onAdd(t) {
6652      this.eachLayer(t.addLayer, t);
6653    },
6654    onRemove: function onRemove(t) {
6655      this.eachLayer(t.removeLayer, t);
6656    },
6657    eachLayer: function eachLayer(t, i) {
6658      for (var e in this._layers) {
6659        t.call(i, this._layers[e]);
6660      }
6661
6662      return this;
6663    },
6664    getLayer: function getLayer(t) {
6665      return this._layers[t];
6666    },
6667    getLayers: function getLayers() {
6668      var t = [];
6669      return this.eachLayer(t.push, t), t;
6670    },
6671    setZIndex: function setZIndex(t) {
6672      return this.invoke("setZIndex", t);
6673    },
6674    getLayerId: m
6675  }),
6676      Ce = ze.extend({
6677    addLayer: function addLayer(t) {
6678      return this.hasLayer(t) ? this : (t.addEventParent(this), ze.prototype.addLayer.call(this, t), this.fire("layeradd", {
6679        layer: t
6680      }));
6681    },
6682    removeLayer: function removeLayer(t) {
6683      return this.hasLayer(t) ? (t in this._layers && (t = this._layers[t]), t.removeEventParent(this), ze.prototype.removeLayer.call(this, t), this.fire("layerremove", {
6684        layer: t
6685      })) : this;
6686    },
6687    setStyle: function setStyle(t) {
6688      return this.invoke("setStyle", t);
6689    },
6690    bringToFront: function bringToFront() {
6691      return this.invoke("bringToFront");
6692    },
6693    bringToBack: function bringToBack() {
6694      return this.invoke("bringToBack");
6695    },
6696    getBounds: function getBounds() {
6697      var t = new R();
6698
6699      for (var i in this._layers) {
6700        var e = this._layers[i];
6701        t.extend(e.getBounds ? e.getBounds() : e.getLatLng());
6702      }
6703
6704      return t;
6705    }
6706  }),
6707      Se = S.extend({
6708    options: {
6709      popupAnchor: [0, 0],
6710      tooltipAnchor: [0, 0]
6711    },
6712    initialize: function initialize(t) {
6713      c(this, t);
6714    },
6715    createIcon: function createIcon(t) {
6716      return this._createIcon("icon", t);
6717    },
6718    createShadow: function createShadow(t) {
6719      return this._createIcon("shadow", t);
6720    },
6721    _createIcon: function _createIcon(t, i) {
6722      var e = this._getIconUrl(t);
6723
6724      if (!e) {
6725        if ("icon" === t) throw new Error("iconUrl not set in Icon options (see the docs).");
6726        return null;
6727      }
6728
6729      var n = this._createImg(e, i && "IMG" === i.tagName ? i : null);
6730
6731      return this._setIconStyles(n, t), n;
6732    },
6733    _setIconStyles: function _setIconStyles(t, i) {
6734      var e = this.options,
6735          n = e[i + "Size"];
6736      "number" == typeof n && (n = [n, n]);
6737      var o = A(n),
6738          s = A("shadow" === i && e.shadowAnchor || e.iconAnchor || o && o.divideBy(2, !0));
6739      t.className = "leaflet-marker-" + i + " " + (e.className || ""), s && (t.style.marginLeft = -s.x + "px", t.style.marginTop = -s.y + "px"), o && (t.style.width = o.x + "px", t.style.height = o.y + "px");
6740    },
6741    _createImg: function _createImg(t, i) {
6742      return (i = i || document.createElement("img")).src = t, i;
6743    },
6744    _getIconUrl: function _getIconUrl(t) {
6745      return zt && this.options[t + "RetinaUrl"] || this.options[t + "Url"];
6746    }
6747  });
6748  var Ze = Se.extend({
6749    options: {
6750      iconUrl: "marker-icon.png",
6751      iconRetinaUrl: "marker-icon-2x.png",
6752      shadowUrl: "marker-shadow.png",
6753      iconSize: [25, 41],
6754      iconAnchor: [12, 41],
6755      popupAnchor: [1, -34],
6756      tooltipAnchor: [16, -28],
6757      shadowSize: [41, 41]
6758    },
6759    _getIconUrl: function _getIconUrl(t) {
6760      return Ze.imagePath || (Ze.imagePath = this._detectIconPath()), (this.options.imagePath || Ze.imagePath) + Se.prototype._getIconUrl.call(this, t);
6761    },
6762    _detectIconPath: function _detectIconPath() {
6763      var t = si("div", "leaflet-default-icon-path", document.body),
6764          i = oi(t, "background-image") || oi(t, "backgroundImage");
6765      return document.body.removeChild(t), i = null === i || 0 !== i.indexOf("url") ? "" : i.replace(/^url\(["']?/, "").replace(/marker-icon\.png["']?\)$/, "");
6766    }
6767  }),
6768      Ee = ie.extend({
6769    initialize: function initialize(t) {
6770      this._marker = t;
6771    },
6772    addHooks: function addHooks() {
6773      var t = this._marker._icon;
6774      this._draggable || (this._draggable = new ae(t, t, !0)), this._draggable.on({
6775        dragstart: this._onDragStart,
6776        predrag: this._onPreDrag,
6777        drag: this._onDrag,
6778        dragend: this._onDragEnd
6779      }, this).enable(), ci(t, "leaflet-marker-draggable");
6780    },
6781    removeHooks: function removeHooks() {
6782      this._draggable.off({
6783        dragstart: this._onDragStart,
6784        predrag: this._onPreDrag,
6785        drag: this._onDrag,
6786        dragend: this._onDragEnd
6787      }, this).disable(), this._marker._icon && _i(this._marker._icon, "leaflet-marker-draggable");
6788    },
6789    moved: function moved() {
6790      return this._draggable && this._draggable._moved;
6791    },
6792    _adjustPan: function _adjustPan(t) {
6793      var i,
6794          e = this._marker,
6795          n = e._map,
6796          o = this._marker.options.autoPanSpeed,
6797          s = this._marker.options.autoPanPadding,
6798          r = yi(e._icon),
6799          a = n.getPixelBounds(),
6800          h = n.getPixelOrigin(),
6801          u = O(a.min._subtract(h).add(s), a.max._subtract(h).subtract(s));
6802      u.contains(r) || (i = A((Math.max(u.max.x, r.x) - u.max.x) / (a.max.x - u.max.x) - (Math.min(u.min.x, r.x) - u.min.x) / (a.min.x - u.min.x), (Math.max(u.max.y, r.y) - u.max.y) / (a.max.y - u.max.y) - (Math.min(u.min.y, r.y) - u.min.y) / (a.min.y - u.min.y)).multiplyBy(o), n.panBy(i, {
6803        animate: !1
6804      }), this._draggable._newPos._add(i), this._draggable._startPos._add(i), vi(e._icon, this._draggable._newPos), this._onDrag(t), this._panRequest = M(this._adjustPan.bind(this, t)));
6805    },
6806    _onDragStart: function _onDragStart() {
6807      this._oldLatLng = this._marker.getLatLng(), this._marker.closePopup && this._marker.closePopup(), this._marker.fire("movestart").fire("dragstart");
6808    },
6809    _onPreDrag: function _onPreDrag(t) {
6810      this._marker.options.autoPan && (z(this._panRequest), this._panRequest = M(this._adjustPan.bind(this, t)));
6811    },
6812    _onDrag: function _onDrag(t) {
6813      var i = this._marker,
6814          e = i._shadow,
6815          n = yi(i._icon),
6816          o = i._map.layerPointToLatLng(n);
6817
6818      e && vi(e, n), i._latlng = o, t.latlng = o, t.oldLatLng = this._oldLatLng, i.fire("move", t).fire("drag", t);
6819    },
6820    _onDragEnd: function _onDragEnd(t) {
6821      z(this._panRequest), delete this._oldLatLng, this._marker.fire("moveend").fire("dragend", t);
6822    }
6823  }),
6824      ke = Me.extend({
6825    options: {
6826      icon: new Ze(),
6827      interactive: !0,
6828      keyboard: !0,
6829      title: "",
6830      alt: "",
6831      zIndexOffset: 0,
6832      opacity: 1,
6833      riseOnHover: !1,
6834      riseOffset: 250,
6835      pane: "markerPane",
6836      shadowPane: "shadowPane",
6837      bubblingMouseEvents: !1,
6838      draggable: !1,
6839      autoPan: !1,
6840      autoPanPadding: [50, 50],
6841      autoPanSpeed: 10
6842    },
6843    initialize: function initialize(t, i) {
6844      c(this, i), this._latlng = j(t);
6845    },
6846    onAdd: function onAdd(t) {
6847      this._zoomAnimated = this._zoomAnimated && t.options.markerZoomAnimation, this._zoomAnimated && t.on("zoomanim", this._animateZoom, this), this._initIcon(), this.update();
6848    },
6849    onRemove: function onRemove(t) {
6850      this.dragging && this.dragging.enabled() && (this.options.draggable = !0, this.dragging.removeHooks()), delete this.dragging, this._zoomAnimated && t.off("zoomanim", this._animateZoom, this), this._removeIcon(), this._removeShadow();
6851    },
6852    getEvents: function getEvents() {
6853      return {
6854        zoom: this.update,
6855        viewreset: this.update
6856      };
6857    },
6858    getLatLng: function getLatLng() {
6859      return this._latlng;
6860    },
6861    setLatLng: function setLatLng(t) {
6862      var i = this._latlng;
6863      return this._latlng = j(t), this.update(), this.fire("move", {
6864        oldLatLng: i,
6865        latlng: this._latlng
6866      });
6867    },
6868    setZIndexOffset: function setZIndexOffset(t) {
6869      return this.options.zIndexOffset = t, this.update();
6870    },
6871    getIcon: function getIcon() {
6872      return this.options.icon;
6873    },
6874    setIcon: function setIcon(t) {
6875      return this.options.icon = t, this._map && (this._initIcon(), this.update()), this._popup && this.bindPopup(this._popup, this._popup.options), this;
6876    },
6877    getElement: function getElement() {
6878      return this._icon;
6879    },
6880    update: function update() {
6881      var t;
6882      return this._icon && this._map && (t = this._map.latLngToLayerPoint(this._latlng).round(), this._setPos(t)), this;
6883    },
6884    _initIcon: function _initIcon() {
6885      var t = this.options,
6886          i = "leaflet-zoom-" + (this._zoomAnimated ? "animated" : "hide"),
6887          e = t.icon.createIcon(this._icon),
6888          n = !1;
6889      e !== this._icon && (this._icon && this._removeIcon(), n = !0, t.title && (e.title = t.title), "IMG" === e.tagName && (e.alt = t.alt || "")), ci(e, i), t.keyboard && (e.tabIndex = "0"), this._icon = e, t.riseOnHover && this.on({
6890        mouseover: this._bringToFront,
6891        mouseout: this._resetZIndex
6892      });
6893      var o = t.icon.createShadow(this._shadow),
6894          s = !1;
6895      o !== this._shadow && (this._removeShadow(), s = !0), o && (ci(o, i), o.alt = ""), this._shadow = o, t.opacity < 1 && this._updateOpacity(), n && this.getPane().appendChild(this._icon), this._initInteraction(), o && s && this.getPane(t.shadowPane).appendChild(this._shadow);
6896    },
6897    _removeIcon: function _removeIcon() {
6898      this.options.riseOnHover && this.off({
6899        mouseover: this._bringToFront,
6900        mouseout: this._resetZIndex
6901      }), ri(this._icon), this.removeInteractiveTarget(this._icon), this._icon = null;
6902    },
6903    _removeShadow: function _removeShadow() {
6904      this._shadow && ri(this._shadow), this._shadow = null;
6905    },
6906    _setPos: function _setPos(t) {
6907      this._icon && vi(this._icon, t), this._shadow && vi(this._shadow, t), this._zIndex = t.y + this.options.zIndexOffset, this._resetZIndex();
6908    },
6909    _updateZIndex: function _updateZIndex(t) {
6910      this._icon && (this._icon.style.zIndex = this._zIndex + t);
6911    },
6912    _animateZoom: function _animateZoom(t) {
6913      var i = this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center).round();
6914
6915      this._setPos(i);
6916    },
6917    _initInteraction: function _initInteraction() {
6918      var t;
6919      this.options.interactive && (ci(this._icon, "leaflet-interactive"), this.addInteractiveTarget(this._icon), Ee && (t = this.options.draggable, this.dragging && (t = this.dragging.enabled(), this.dragging.disable()), this.dragging = new Ee(this), t && this.dragging.enable()));
6920    },
6921    setOpacity: function setOpacity(t) {
6922      return this.options.opacity = t, this._map && this._updateOpacity(), this;
6923    },
6924    _updateOpacity: function _updateOpacity() {
6925      var t = this.options.opacity;
6926      this._icon && mi(this._icon, t), this._shadow && mi(this._shadow, t);
6927    },
6928    _bringToFront: function _bringToFront() {
6929      this._updateZIndex(this.options.riseOffset);
6930    },
6931    _resetZIndex: function _resetZIndex() {
6932      this._updateZIndex(0);
6933    },
6934    _getPopupAnchor: function _getPopupAnchor() {
6935      return this.options.icon.options.popupAnchor;
6936    },
6937    _getTooltipAnchor: function _getTooltipAnchor() {
6938      return this.options.icon.options.tooltipAnchor;
6939    }
6940  });
6941  var Be = Me.extend({
6942    options: {
6943      stroke: !0,
6944      color: "#3388ff",
6945      weight: 3,
6946      opacity: 1,
6947      lineCap: "round",
6948      lineJoin: "round",
6949      dashArray: null,
6950      dashOffset: null,
6951      fill: !1,
6952      fillColor: null,
6953      fillOpacity: .2,
6954      fillRule: "evenodd",
6955      interactive: !0,
6956      bubblingMouseEvents: !0
6957    },
6958    beforeAdd: function beforeAdd(t) {
6959      this._renderer = t.getRenderer(this);
6960    },
6961    onAdd: function onAdd() {
6962      this._renderer._initPath(this), this._reset(), this._renderer._addPath(this);
6963    },
6964    onRemove: function onRemove() {
6965      this._renderer._removePath(this);
6966    },
6967    redraw: function redraw() {
6968      return this._map && this._renderer._updatePath(this), this;
6969    },
6970    setStyle: function setStyle(t) {
6971      return c(this, t), this._renderer && (this._renderer._updateStyle(this), this.options.stroke && t && Object.prototype.hasOwnProperty.call(t, "weight") && this._updateBounds()), this;
6972    },
6973    bringToFront: function bringToFront() {
6974      return this._renderer && this._renderer._bringToFront(this), this;
6975    },
6976    bringToBack: function bringToBack() {
6977      return this._renderer && this._renderer._bringToBack(this), this;
6978    },
6979    getElement: function getElement() {
6980      return this._path;
6981    },
6982    _reset: function _reset() {
6983      this._project(), this._update();
6984    },
6985    _clickTolerance: function _clickTolerance() {
6986      return (this.options.stroke ? this.options.weight / 2 : 0) + this._renderer.options.tolerance;
6987    }
6988  }),
6989      Ae = Be.extend({
6990    options: {
6991      fill: !0,
6992      radius: 10
6993    },
6994    initialize: function initialize(t, i) {
6995      c(this, i), this._latlng = j(t), this._radius = this.options.radius;
6996    },
6997    setLatLng: function setLatLng(t) {
6998      var i = this._latlng;
6999      return this._latlng = j(t), this.redraw(), this.fire("move", {
7000        oldLatLng: i,
7001        latlng: this._latlng
7002      });
7003    },
7004    getLatLng: function getLatLng() {
7005      return this._latlng;
7006    },
7007    setRadius: function setRadius(t) {
7008      return this.options.radius = this._radius = t, this.redraw();
7009    },
7010    getRadius: function getRadius() {
7011      return this._radius;
7012    },
7013    setStyle: function setStyle(t) {
7014      var i = t && t.radius || this._radius;
7015      return Be.prototype.setStyle.call(this, t), this.setRadius(i), this;
7016    },
7017    _project: function _project() {
7018      this._point = this._map.latLngToLayerPoint(this._latlng), this._updateBounds();
7019    },
7020    _updateBounds: function _updateBounds() {
7021      var t = this._radius,
7022          i = this._radiusY || t,
7023          e = this._clickTolerance(),
7024          n = [t + e, i + e];
7025
7026      this._pxBounds = new I(this._point.subtract(n), this._point.add(n));
7027    },
7028    _update: function _update() {
7029      this._map && this._updatePath();
7030    },
7031    _updatePath: function _updatePath() {
7032      this._renderer._updateCircle(this);
7033    },
7034    _empty: function _empty() {
7035      return this._radius && !this._renderer._bounds.intersects(this._pxBounds);
7036    },
7037    _containsPoint: function _containsPoint(t) {
7038      return t.distanceTo(this._point) <= this._radius + this._clickTolerance();
7039    }
7040  });
7041  var Ie = Ae.extend({
7042    initialize: function initialize(t, i, e) {
7043      if ("number" == typeof i && (i = h({}, e, {
7044        radius: i
7045      })), c(this, i), this._latlng = j(t), isNaN(this.options.radius)) throw new Error("Circle radius cannot be NaN");
7046      this._mRadius = this.options.radius;
7047    },
7048    setRadius: function setRadius(t) {
7049      return this._mRadius = t, this.redraw();
7050    },
7051    getRadius: function getRadius() {
7052      return this._mRadius;
7053    },
7054    getBounds: function getBounds() {
7055      var t = [this._radius, this._radiusY || this._radius];
7056      return new R(this._map.layerPointToLatLng(this._point.subtract(t)), this._map.layerPointToLatLng(this._point.add(t)));
7057    },
7058    setStyle: Be.prototype.setStyle,
7059    _project: function _project() {
7060      var t,
7061          i,
7062          e,
7063          n,
7064          o,
7065          s,
7066          r,
7067          a,
7068          h = this._latlng.lng,
7069          u = this._latlng.lat,
7070          l = this._map,
7071          c = l.options.crs;
7072      c.distance === F.distance ? (t = Math.PI / 180, i = this._mRadius / F.R / t, e = l.project([u + i, h]), n = l.project([u - i, h]), o = e.add(n).divideBy(2), s = l.unproject(o).lat, r = Math.acos((Math.cos(i * t) - Math.sin(u * t) * Math.sin(s * t)) / (Math.cos(u * t) * Math.cos(s * t))) / t, !isNaN(r) && 0 !== r || (r = i / Math.cos(Math.PI / 180 * u)), this._point = o.subtract(l.getPixelOrigin()), this._radius = isNaN(r) ? 0 : o.x - l.project([s, h - r]).x, this._radiusY = o.y - e.y) : (a = c.unproject(c.project(this._latlng).subtract([this._mRadius, 0])), this._point = l.latLngToLayerPoint(this._latlng), this._radius = this._point.x - l.latLngToLayerPoint(a).x), this._updateBounds();
7073    }
7074  });
7075  var Oe = Be.extend({
7076    options: {
7077      smoothFactor: 1,
7078      noClip: !1
7079    },
7080    initialize: function initialize(t, i) {
7081      c(this, i), this._setLatLngs(t);
7082    },
7083    getLatLngs: function getLatLngs() {
7084      return this._latlngs;
7085    },
7086    setLatLngs: function setLatLngs(t) {
7087      return this._setLatLngs(t), this.redraw();
7088    },
7089    isEmpty: function isEmpty() {
7090      return !this._latlngs.length;
7091    },
7092    closestLayerPoint: function closestLayerPoint(t) {
7093      for (var i, e, n = 1 / 0, o = null, s = de, r = 0, a = this._parts.length; r < a; r++) {
7094        for (var h = this._parts[r], u = 1, l = h.length; u < l; u++) {
7095          var c = s(t, i = h[u - 1], e = h[u], !0);
7096          c < n && (n = c, o = s(t, i, e));
7097        }
7098      }
7099
7100      return o && (o.distance = Math.sqrt(n)), o;
7101    },
7102    getCenter: function getCenter() {
7103      if (!this._map) throw new Error("Must add layer to map before using getCenter()");
7104      var t,
7105          i,
7106          e,
7107          n,
7108          o,
7109          s,
7110          r,
7111          a = this._rings[0],
7112          h = a.length;
7113      if (!h) return null;
7114
7115      for (i = t = 0; t < h - 1; t++) {
7116        i += a[t].distanceTo(a[t + 1]) / 2;
7117      }
7118
7119      if (0 === i) return this._map.layerPointToLatLng(a[0]);
7120
7121      for (n = t = 0; t < h - 1; t++) {
7122        if (o = a[t], s = a[t + 1], i < (n += e = o.distanceTo(s))) return r = (n - i) / e, this._map.layerPointToLatLng([s.x - r * (s.x - o.x), s.y - r * (s.y - o.y)]);
7123      }
7124    },
7125    getBounds: function getBounds() {
7126      return this._bounds;
7127    },
7128    addLatLng: function addLatLng(t, i) {
7129      return i = i || this._defaultShape(), t = j(t), i.push(t), this._bounds.extend(t), this.redraw();
7130    },
7131    _setLatLngs: function _setLatLngs(t) {
7132      this._bounds = new R(), this._latlngs = this._convertLatLngs(t);
7133    },
7134    _defaultShape: function _defaultShape() {
7135      return pe(this._latlngs) ? this._latlngs : this._latlngs[0];
7136    },
7137    _convertLatLngs: function _convertLatLngs(t) {
7138      for (var i = [], e = pe(t), n = 0, o = t.length; n < o; n++) {
7139        e ? (i[n] = j(t[n]), this._bounds.extend(i[n])) : i[n] = this._convertLatLngs(t[n]);
7140      }
7141
7142      return i;
7143    },
7144    _project: function _project() {
7145      var t = new I();
7146      this._rings = [], this._projectLatlngs(this._latlngs, this._rings, t), this._bounds.isValid() && t.isValid() && (this._rawPxBounds = t, this._updateBounds());
7147    },
7148    _updateBounds: function _updateBounds() {
7149      var t = this._clickTolerance(),
7150          i = new k(t, t);
7151
7152      this._pxBounds = new I([this._rawPxBounds.min.subtract(i), this._rawPxBounds.max.add(i)]);
7153    },
7154    _projectLatlngs: function _projectLatlngs(t, i, e) {
7155      var n,
7156          o,
7157          s = t[0] instanceof D,
7158          r = t.length;
7159
7160      if (s) {
7161        for (o = [], n = 0; n < r; n++) {
7162          o[n] = this._map.latLngToLayerPoint(t[n]), e.extend(o[n]);
7163        }
7164
7165        i.push(o);
7166      } else for (n = 0; n < r; n++) {
7167        this._projectLatlngs(t[n], i, e);
7168      }
7169    },
7170    _clipPoints: function _clipPoints() {
7171      var t = this._renderer._bounds;
7172      if (this._parts = [], this._pxBounds && this._pxBounds.intersects(t)) if (this.options.noClip) this._parts = this._rings;else for (var i, e, n, o, s = this._parts, r = 0, a = 0, h = this._rings.length; r < h; r++) {
7173        for (i = 0, e = (o = this._rings[r]).length; i < e - 1; i++) {
7174          (n = le(o[i], o[i + 1], t, i, !0)) && (s[a] = s[a] || [], s[a].push(n[0]), n[1] === o[i + 1] && i !== e - 2 || (s[a].push(n[1]), a++));
7175        }
7176      }
7177    },
7178    _simplifyPoints: function _simplifyPoints() {
7179      for (var t = this._parts, i = this.options.smoothFactor, e = 0, n = t.length; e < n; e++) {
7180        t[e] = he(t[e], i);
7181      }
7182    },
7183    _update: function _update() {
7184      this._map && (this._clipPoints(), this._simplifyPoints(), this._updatePath());
7185    },
7186    _updatePath: function _updatePath() {
7187      this._renderer._updatePoly(this);
7188    },
7189    _containsPoint: function _containsPoint(t, i) {
7190      var e,
7191          n,
7192          o,
7193          s,
7194          r,
7195          a,
7196          h = this._clickTolerance();
7197
7198      if (!this._pxBounds || !this._pxBounds.contains(t)) return !1;
7199
7200      for (e = 0, s = this._parts.length; e < s; e++) {
7201        for (n = 0, o = (r = (a = this._parts[e]).length) - 1; n < r; o = n++) {
7202          if ((i || 0 !== n) && ue(t, a[o], a[n]) <= h) return !0;
7203        }
7204      }
7205
7206      return !1;
7207    }
7208  });
7209  Oe._flat = me;
7210  var Re = Oe.extend({
7211    options: {
7212      fill: !0
7213    },
7214    isEmpty: function isEmpty() {
7215      return !this._latlngs.length || !this._latlngs[0].length;
7216    },
7217    getCenter: function getCenter() {
7218      if (!this._map) throw new Error("Must add layer to map before using getCenter()");
7219      var t,
7220          i,
7221          e,
7222          n,
7223          o,
7224          s,
7225          r,
7226          a,
7227          h,
7228          u = this._rings[0],
7229          l = u.length;
7230      if (!l) return null;
7231
7232      for (t = s = r = a = 0, i = l - 1; t < l; i = t++) {
7233        e = u[t], n = u[i], o = e.y * n.x - n.y * e.x, r += (e.x + n.x) * o, a += (e.y + n.y) * o, s += 3 * o;
7234      }
7235
7236      return h = 0 === s ? u[0] : [r / s, a / s], this._map.layerPointToLatLng(h);
7237    },
7238    _convertLatLngs: function _convertLatLngs(t) {
7239      var i = Oe.prototype._convertLatLngs.call(this, t),
7240          e = i.length;
7241
7242      return 2 <= e && i[0] instanceof D && i[0].equals(i[e - 1]) && i.pop(), i;
7243    },
7244    _setLatLngs: function _setLatLngs(t) {
7245      Oe.prototype._setLatLngs.call(this, t), pe(this._latlngs) && (this._latlngs = [this._latlngs]);
7246    },
7247    _defaultShape: function _defaultShape() {
7248      return pe(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];
7249    },
7250    _clipPoints: function _clipPoints() {
7251      var t = this._renderer._bounds,
7252          i = this.options.weight,
7253          e = new k(i, i),
7254          t = new I(t.min.subtract(e), t.max.add(e));
7255      if (this._parts = [], this._pxBounds && this._pxBounds.intersects(t)) if (this.options.noClip) this._parts = this._rings;else for (var n, o = 0, s = this._rings.length; o < s; o++) {
7256        (n = ge(this._rings[o], t, !0)).length && this._parts.push(n);
7257      }
7258    },
7259    _updatePath: function _updatePath() {
7260      this._renderer._updatePoly(this, !0);
7261    },
7262    _containsPoint: function _containsPoint(t) {
7263      var i,
7264          e,
7265          n,
7266          o,
7267          s,
7268          r,
7269          a,
7270          h,
7271          u = !1;
7272      if (!this._pxBounds || !this._pxBounds.contains(t)) return !1;
7273
7274      for (o = 0, a = this._parts.length; o < a; o++) {
7275        for (s = 0, r = (h = (i = this._parts[o]).length) - 1; s < h; r = s++) {
7276          e = i[s], n = i[r], e.y > t.y != n.y > t.y && t.x < (n.x - e.x) * (t.y - e.y) / (n.y - e.y) + e.x && (u = !u);
7277        }
7278      }
7279
7280      return u || Oe.prototype._containsPoint.call(this, t, !0);
7281    }
7282  });
7283  var Ne = Ce.extend({
7284    initialize: function initialize(t, i) {
7285      c(this, i), this._layers = {}, t && this.addData(t);
7286    },
7287    addData: function addData(t) {
7288      var i,
7289          e,
7290          n,
7291          o = g(t) ? t : t.features;
7292
7293      if (o) {
7294        for (i = 0, e = o.length; i < e; i++) {
7295          ((n = o[i]).geometries || n.geometry || n.features || n.coordinates) && this.addData(n);
7296        }
7297
7298        return this;
7299      }
7300
7301      var s = this.options;
7302      if (s.filter && !s.filter(t)) return this;
7303      var r = De(t, s);
7304      return r ? (r.feature = qe(t), r.defaultOptions = r.options, this.resetStyle(r), s.onEachFeature && s.onEachFeature(t, r), this.addLayer(r)) : this;
7305    },
7306    resetStyle: function resetStyle(t) {
7307      return void 0 === t ? this.eachLayer(this.resetStyle, this) : (t.options = h({}, t.defaultOptions), this._setLayerStyle(t, this.options.style), this);
7308    },
7309    setStyle: function setStyle(i) {
7310      return this.eachLayer(function (t) {
7311        this._setLayerStyle(t, i);
7312      }, this);
7313    },
7314    _setLayerStyle: function _setLayerStyle(t, i) {
7315      t.setStyle && ("function" == typeof i && (i = i(t.feature)), t.setStyle(i));
7316    }
7317  });
7318
7319  function De(t, i) {
7320    var e,
7321        n,
7322        o,
7323        s,
7324        r = "Feature" === t.type ? t.geometry : t,
7325        a = r ? r.coordinates : null,
7326        h = [],
7327        u = i && i.pointToLayer,
7328        l = i && i.coordsToLatLng || We;
7329    if (!a && !r) return null;
7330
7331    switch (r.type) {
7332      case "Point":
7333        return je(u, t, e = l(a), i);
7334
7335      case "MultiPoint":
7336        for (o = 0, s = a.length; o < s; o++) {
7337          e = l(a[o]), h.push(je(u, t, e, i));
7338        }
7339
7340        return new Ce(h);
7341
7342      case "LineString":
7343      case "MultiLineString":
7344        return n = He(a, "LineString" === r.type ? 0 : 1, l), new Oe(n, i);
7345
7346      case "Polygon":
7347      case "MultiPolygon":
7348        return n = He(a, "Polygon" === r.type ? 1 : 2, l), new Re(n, i);
7349
7350      case "GeometryCollection":
7351        for (o = 0, s = r.geometries.length; o < s; o++) {
7352          var c = De({
7353            geometry: r.geometries[o],
7354            type: "Feature",
7355            properties: t.properties
7356          }, i);
7357          c && h.push(c);
7358        }
7359
7360        return new Ce(h);
7361
7362      default:
7363        throw new Error("Invalid GeoJSON object.");
7364    }
7365  }
7366
7367  function je(t, i, e, n) {
7368    return t ? t(i, e) : new ke(e, n && n.markersInheritOptions && n);
7369  }
7370
7371  function We(t) {
7372    return new D(t[1], t[0], t[2]);
7373  }
7374
7375  function He(t, i, e) {
7376    for (var n, o = [], s = 0, r = t.length; s < r; s++) {
7377      n = i ? He(t[s], i - 1, e) : (e || We)(t[s]), o.push(n);
7378    }
7379
7380    return o;
7381  }
7382
7383  function Fe(t, i) {
7384    return i = "number" == typeof i ? i : 6, void 0 !== t.alt ? [r(t.lng, i), r(t.lat, i), r(t.alt, i)] : [r(t.lng, i), r(t.lat, i)];
7385  }
7386
7387  function Ue(t, i, e, n) {
7388    for (var o = [], s = 0, r = t.length; s < r; s++) {
7389      o.push(i ? Ue(t[s], i - 1, e, n) : Fe(t[s], n));
7390    }
7391
7392    return !i && e && o.push(o[0]), o;
7393  }
7394
7395  function Ve(t, i) {
7396    return t.feature ? h({}, t.feature, {
7397      geometry: i
7398    }) : qe(i);
7399  }
7400
7401  function qe(t) {
7402    return "Feature" === t.type || "FeatureCollection" === t.type ? t : {
7403      type: "Feature",
7404      properties: {},
7405      geometry: t
7406    };
7407  }
7408
7409  var Ge = {
7410    toGeoJSON: function toGeoJSON(t) {
7411      return Ve(this, {
7412        type: "Point",
7413        coordinates: Fe(this.getLatLng(), t)
7414      });
7415    }
7416  };
7417
7418  function Ke(t, i) {
7419    return new Ne(t, i);
7420  }
7421
7422  ke.include(Ge), Ie.include(Ge), Ae.include(Ge), Oe.include({
7423    toGeoJSON: function toGeoJSON(t) {
7424      var i = !pe(this._latlngs);
7425      return Ve(this, {
7426        type: (i ? "Multi" : "") + "LineString",
7427        coordinates: Ue(this._latlngs, i ? 1 : 0, !1, t)
7428      });
7429    }
7430  }), Re.include({
7431    toGeoJSON: function toGeoJSON(t) {
7432      var i = !pe(this._latlngs),
7433          e = i && !pe(this._latlngs[0]),
7434          n = Ue(this._latlngs, e ? 2 : i ? 1 : 0, !0, t);
7435      return i || (n = [n]), Ve(this, {
7436        type: (e ? "Multi" : "") + "Polygon",
7437        coordinates: n
7438      });
7439    }
7440  }), ze.include({
7441    toMultiPoint: function toMultiPoint(i) {
7442      var e = [];
7443      return this.eachLayer(function (t) {
7444        e.push(t.toGeoJSON(i).geometry.coordinates);
7445      }), Ve(this, {
7446        type: "MultiPoint",
7447        coordinates: e
7448      });
7449    },
7450    toGeoJSON: function toGeoJSON(n) {
7451      var t = this.feature && this.feature.geometry && this.feature.geometry.type;
7452      if ("MultiPoint" === t) return this.toMultiPoint(n);
7453      var o = "GeometryCollection" === t,
7454          s = [];
7455      return this.eachLayer(function (t) {
7456        var i, e;
7457        t.toGeoJSON && (i = t.toGeoJSON(n), o ? s.push(i.geometry) : "FeatureCollection" === (e = qe(i)).type ? s.push.apply(s, e.features) : s.push(e));
7458      }), o ? Ve(this, {
7459        geometries: s,
7460        type: "GeometryCollection"
7461      }) : {
7462        type: "FeatureCollection",
7463        features: s
7464      };
7465    }
7466  });
7467  var Ye = Ke,
7468      Xe = Me.extend({
7469    options: {
7470      opacity: 1,
7471      alt: "",
7472      interactive: !1,
7473      crossOrigin: !1,
7474      errorOverlayUrl: "",
7475      zIndex: 1,
7476      className: ""
7477    },
7478    initialize: function initialize(t, i, e) {
7479      this._url = t, this._bounds = N(i), c(this, e);
7480    },
7481    onAdd: function onAdd() {
7482      this._image || (this._initImage(), this.options.opacity < 1 && this._updateOpacity()), this.options.interactive && (ci(this._image, "leaflet-interactive"), this.addInteractiveTarget(this._image)), this.getPane().appendChild(this._image), this._reset();
7483    },
7484    onRemove: function onRemove() {
7485      ri(this._image), this.options.interactive && this.removeInteractiveTarget(this._image);
7486    },
7487    setOpacity: function setOpacity(t) {
7488      return this.options.opacity = t, this._image && this._updateOpacity(), this;
7489    },
7490    setStyle: function setStyle(t) {
7491      return t.opacity && this.setOpacity(t.opacity), this;
7492    },
7493    bringToFront: function bringToFront() {
7494      return this._map && hi(this._image), this;
7495    },
7496    bringToBack: function bringToBack() {
7497      return this._map && ui(this._image), this;
7498    },
7499    setUrl: function setUrl(t) {
7500      return this._url = t, this._image && (this._image.src = t), this;
7501    },
7502    setBounds: function setBounds(t) {
7503      return this._bounds = N(t), this._map && this._reset(), this;
7504    },
7505    getEvents: function getEvents() {
7506      var t = {
7507        zoom: this._reset,
7508        viewreset: this._reset
7509      };
7510      return this._zoomAnimated && (t.zoomanim = this._animateZoom), t;
7511    },
7512    setZIndex: function setZIndex(t) {
7513      return this.options.zIndex = t, this._updateZIndex(), this;
7514    },
7515    getBounds: function getBounds() {
7516      return this._bounds;
7517    },
7518    getElement: function getElement() {
7519      return this._image;
7520    },
7521    _initImage: function _initImage() {
7522      var t = "IMG" === this._url.tagName,
7523          i = this._image = t ? this._url : si("img");
7524      ci(i, "leaflet-image-layer"), this._zoomAnimated && ci(i, "leaflet-zoom-animated"), this.options.className && ci(i, this.options.className), i.onselectstart = a, i.onmousemove = a, i.onload = p(this.fire, this, "load"), i.onerror = p(this._overlayOnError, this, "error"), !this.options.crossOrigin && "" !== this.options.crossOrigin || (i.crossOrigin = !0 === this.options.crossOrigin ? "" : this.options.crossOrigin), this.options.zIndex && this._updateZIndex(), t ? this._url = i.src : (i.src = this._url, i.alt = this.options.alt);
7525    },
7526    _animateZoom: function _animateZoom(t) {
7527      var i = this._map.getZoomScale(t.zoom),
7528          e = this._map._latLngBoundsToNewLayerBounds(this._bounds, t.zoom, t.center).min;
7529
7530      gi(this._image, e, i);
7531    },
7532    _reset: function _reset() {
7533      var t = this._image,
7534          i = new I(this._map.latLngToLayerPoint(this._bounds.getNorthWest()), this._map.latLngToLayerPoint(this._bounds.getSouthEast())),
7535          e = i.getSize();
7536      vi(t, i.min), t.style.width = e.x + "px", t.style.height = e.y + "px";
7537    },
7538    _updateOpacity: function _updateOpacity() {
7539      mi(this._image, this.options.opacity);
7540    },
7541    _updateZIndex: function _updateZIndex() {
7542      this._image && void 0 !== this.options.zIndex && null !== this.options.zIndex && (this._image.style.zIndex = this.options.zIndex);
7543    },
7544    _overlayOnError: function _overlayOnError() {
7545      this.fire("error");
7546      var t = this.options.errorOverlayUrl;
7547      t && this._url !== t && (this._url = t, this._image.src = t);
7548    }
7549  }),
7550      Je = Xe.extend({
7551    options: {
7552      autoplay: !0,
7553      loop: !0,
7554      keepAspectRatio: !0,
7555      muted: !1
7556    },
7557    _initImage: function _initImage() {
7558      var t = "VIDEO" === this._url.tagName,
7559          i = this._image = t ? this._url : si("video");
7560
7561      if (ci(i, "leaflet-image-layer"), this._zoomAnimated && ci(i, "leaflet-zoom-animated"), this.options.className && ci(i, this.options.className), i.onselectstart = a, i.onmousemove = a, i.onloadeddata = p(this.fire, this, "load"), t) {
7562        for (var e = i.getElementsByTagName("source"), n = [], o = 0; o < e.length; o++) {
7563          n.push(e[o].src);
7564        }
7565
7566        this._url = 0 < e.length ? n : [i.src];
7567      } else {
7568        g(this._url) || (this._url = [this._url]), !this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(i.style, "objectFit") && (i.style.objectFit = "fill"), i.autoplay = !!this.options.autoplay, i.loop = !!this.options.loop, i.muted = !!this.options.muted;
7569
7570        for (var s = 0; s < this._url.length; s++) {
7571          var r = si("source");
7572          r.src = this._url[s], i.appendChild(r);
7573        }
7574      }
7575    }
7576  });
7577  var $e = Xe.extend({
7578    _initImage: function _initImage() {
7579      var t = this._image = this._url;
7580      ci(t, "leaflet-image-layer"), this._zoomAnimated && ci(t, "leaflet-zoom-animated"), this.options.className && ci(t, this.options.className), t.onselectstart = a, t.onmousemove = a;
7581    }
7582  });
7583  var Qe = Me.extend({
7584    options: {
7585      offset: [0, 7],
7586      className: "",
7587      pane: "popupPane"
7588    },
7589    initialize: function initialize(t, i) {
7590      c(this, t), this._source = i;
7591    },
7592    onAdd: function onAdd(t) {
7593      this._zoomAnimated = t._zoomAnimated, this._container || this._initLayout(), t._fadeAnimated && mi(this._container, 0), clearTimeout(this._removeTimeout), this.getPane().appendChild(this._container), this.update(), t._fadeAnimated && mi(this._container, 1), this.bringToFront();
7594    },
7595    onRemove: function onRemove(t) {
7596      t._fadeAnimated ? (mi(this._container, 0), this._removeTimeout = setTimeout(p(ri, void 0, this._container), 200)) : ri(this._container);
7597    },
7598    getLatLng: function getLatLng() {
7599      return this._latlng;
7600    },
7601    setLatLng: function setLatLng(t) {
7602      return this._latlng = j(t), this._map && (this._updatePosition(), this._adjustPan()), this;
7603    },
7604    getContent: function getContent() {
7605      return this._content;
7606    },
7607    setContent: function setContent(t) {
7608      return this._content = t, this.update(), this;
7609    },
7610    getElement: function getElement() {
7611      return this._container;
7612    },
7613    update: function update() {
7614      this._map && (this._container.style.visibility = "hidden", this._updateContent(), this._updateLayout(), this._updatePosition(), this._container.style.visibility = "", this._adjustPan());
7615    },
7616    getEvents: function getEvents() {
7617      var t = {
7618        zoom: this._updatePosition,
7619        viewreset: this._updatePosition
7620      };
7621      return this._zoomAnimated && (t.zoomanim = this._animateZoom), t;
7622    },
7623    isOpen: function isOpen() {
7624      return !!this._map && this._map.hasLayer(this);
7625    },
7626    bringToFront: function bringToFront() {
7627      return this._map && hi(this._container), this;
7628    },
7629    bringToBack: function bringToBack() {
7630      return this._map && ui(this._container), this;
7631    },
7632    _prepareOpen: function _prepareOpen(t, i, e) {
7633      if (i instanceof Me || (e = i, i = t), i instanceof Ce) for (var n in t._layers) {
7634        i = t._layers[n];
7635        break;
7636      }
7637      if (!e) if (i.getCenter) e = i.getCenter();else {
7638        if (!i.getLatLng) throw new Error("Unable to get source layer LatLng.");
7639        e = i.getLatLng();
7640      }
7641      return this._source = i, this.update(), e;
7642    },
7643    _updateContent: function _updateContent() {
7644      if (this._content) {
7645        var t = this._contentNode,
7646            i = "function" == typeof this._content ? this._content(this._source || this) : this._content;
7647        if ("string" == typeof i) t.innerHTML = i;else {
7648          for (; t.hasChildNodes();) {
7649            t.removeChild(t.firstChild);
7650          }
7651
7652          t.appendChild(i);
7653        }
7654        this.fire("contentupdate");
7655      }
7656    },
7657    _updatePosition: function _updatePosition() {
7658      var t, i, e, n, o;
7659      this._map && (t = this._map.latLngToLayerPoint(this._latlng), i = A(this.options.offset), e = this._getAnchor(), this._zoomAnimated ? vi(this._container, t.add(e)) : i = i.add(t).add(e), n = this._containerBottom = -i.y, o = this._containerLeft = -Math.round(this._containerWidth / 2) + i.x, this._container.style.bottom = n + "px", this._container.style.left = o + "px");
7660    },
7661    _getAnchor: function _getAnchor() {
7662      return [0, 0];
7663    }
7664  }),
7665      tn = Qe.extend({
7666    options: {
7667      maxWidth: 300,
7668      minWidth: 50,
7669      maxHeight: null,
7670      autoPan: !0,
7671      autoPanPaddingTopLeft: null,
7672      autoPanPaddingBottomRight: null,
7673      autoPanPadding: [5, 5],
7674      keepInView: !1,
7675      closeButton: !0,
7676      autoClose: !0,
7677      closeOnEscapeKey: !0,
7678      className: ""
7679    },
7680    openOn: function openOn(t) {
7681      return t.openPopup(this), this;
7682    },
7683    onAdd: function onAdd(t) {
7684      Qe.prototype.onAdd.call(this, t), t.fire("popupopen", {
7685        popup: this
7686      }), this._source && (this._source.fire("popupopen", {
7687        popup: this
7688      }, !0), this._source instanceof Be || this._source.on("preclick", Ai));
7689    },
7690    onRemove: function onRemove(t) {
7691      Qe.prototype.onRemove.call(this, t), t.fire("popupclose", {
7692        popup: this
7693      }), this._source && (this._source.fire("popupclose", {
7694        popup: this
7695      }, !0), this._source instanceof Be || this._source.off("preclick", Ai));
7696    },
7697    getEvents: function getEvents() {
7698      var t = Qe.prototype.getEvents.call(this);
7699      return (void 0 !== this.options.closeOnClick ? this.options.closeOnClick : this._map.options.closePopupOnClick) && (t.preclick = this._close), this.options.keepInView && (t.moveend = this._adjustPan), t;
7700    },
7701    _close: function _close() {
7702      this._map && this._map.closePopup(this);
7703    },
7704    _initLayout: function _initLayout() {
7705      var t,
7706          i = "leaflet-popup",
7707          e = this._container = si("div", i + " " + (this.options.className || "") + " leaflet-zoom-animated"),
7708          n = this._wrapper = si("div", i + "-content-wrapper", e);
7709      this._contentNode = si("div", i + "-content", n), Oi(e), Ii(this._contentNode), zi(e, "contextmenu", Ai), this._tipContainer = si("div", i + "-tip-container", e), this._tip = si("div", i + "-tip", this._tipContainer), this.options.closeButton && ((t = this._closeButton = si("a", i + "-close-button", e)).href = "#close", t.innerHTML = "&#215;", zi(t, "click", this._onCloseButtonClick, this));
7710    },
7711    _updateLayout: function _updateLayout() {
7712      var t = this._contentNode,
7713          i = t.style;
7714      i.width = "", i.whiteSpace = "nowrap";
7715      var e = t.offsetWidth,
7716          e = Math.min(e, this.options.maxWidth);
7717      e = Math.max(e, this.options.minWidth), i.width = e + 1 + "px", i.whiteSpace = "", i.height = "";
7718      var n = t.offsetHeight,
7719          o = this.options.maxHeight,
7720          s = "leaflet-popup-scrolled";
7721      o && o < n ? (i.height = o + "px", ci(t, s)) : _i(t, s), this._containerWidth = this._container.offsetWidth;
7722    },
7723    _animateZoom: function _animateZoom(t) {
7724      var i = this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center),
7725          e = this._getAnchor();
7726
7727      vi(this._container, i.add(e));
7728    },
7729    _adjustPan: function _adjustPan() {
7730      var t, i, e, n, o, s, r, a, h, u, l, c;
7731      this.options.autoPan && (this._map._panAnim && this._map._panAnim.stop(), t = this._map, i = parseInt(oi(this._container, "marginBottom"), 10) || 0, e = this._container.offsetHeight + i, n = this._containerWidth, (o = new k(this._containerLeft, -e - this._containerBottom))._add(yi(this._container)), s = t.layerPointToContainerPoint(o), r = A(this.options.autoPanPadding), a = A(this.options.autoPanPaddingTopLeft || r), h = A(this.options.autoPanPaddingBottomRight || r), u = t.getSize(), c = l = 0, s.x + n + h.x > u.x && (l = s.x + n - u.x + h.x), s.x - l - a.x < 0 && (l = s.x - a.x), s.y + e + h.y > u.y && (c = s.y + e - u.y + h.y), s.y - c - a.y < 0 && (c = s.y - a.y), (l || c) && t.fire("autopanstart").panBy([l, c]));
7732    },
7733    _onCloseButtonClick: function _onCloseButtonClick(t) {
7734      this._close(), Ni(t);
7735    },
7736    _getAnchor: function _getAnchor() {
7737      return A(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);
7738    }
7739  });
7740  Ki.mergeOptions({
7741    closePopupOnClick: !0
7742  }), Ki.include({
7743    openPopup: function openPopup(t, i, e) {
7744      return t instanceof tn || (t = new tn(e).setContent(t)), i && t.setLatLng(i), this.hasLayer(t) ? this 
7744: (this._popup && this._popup.options.autoClose && this.closePopup(), this._popup = t, this.addLayer(t));
7745    },
7746    closePopup: function closePopup(t) {
7747      return t && t !== this._popup || (t = this._popup, this._popup = null), t && this.removeLayer(t), this;
7748    }
7749  }), Me.include({
7750    bindPopup: function bindPopup(t, i) {
7751      return t instanceof tn ? (c(t, i), (this._popup = t)._source = this) : (this._popup && !i || (this._popup = new tn(i, this)), this._popup.setContent(t)), this._popupHandlersAdded || (this.on({
7752        click: this._openPopup,
7753        keypress: this._onKeyPress,
7754        remove: this.closePopup,
7755        move: this._movePopup
7756      }), this._popupHandlersAdded = !0), this;
7757    },
7758    unbindPopup: function unbindPopup() {
7759      return this._popup && (this.off({
7760        click: this._openPopup,
7761        keypress: this._onKeyPress,
7762        remove: this.closePopup,
7763        move: this._movePopup
7764      }), this._popupHandlersAdded = !1, this._popup = null), this;
7765    },
7766    openPopup: function openPopup(t, i) {
7767      return this._popup && this._map && (i = this._popup._prepareOpen(this, t, i), this._map.openPopup(this._popup, i)), this;
7768    },
7769    closePopup: function closePopup() {
7770      return this._popup && this._popup._close(), this;
7771    },
7772    togglePopup: function togglePopup(t) {
7773      return this._popup && (this._popup._map ? this.closePopup() : this.openPopup(t)), this;
7774    },
7775    isPopupOpen: function isPopupOpen() {
7776      return !!this._popup && this._popup.isOpen();
7777    },
7778    setPopupContent: function setPopupContent(t) {
7779      return this._popup && this._popup.setContent(t), this;
7780    },
7781    getPopup: function getPopup() {
7782      return this._popup;
7783    },
7784    _openPopup: function _openPopup(t) {
7785      var i = t.layer || t.target;
7786      this._popup && this._map && (Ni(t), i instanceof Be ? this.openPopup(t.layer || t.target, t.latlng) : this._map.hasLayer(this._popup) && this._popup._source === i ? this.closePopup() : this.openPopup(i, t.latlng));
7787    },
7788    _movePopup: function _movePopup(t) {
7789      this._popup.setLatLng(t.latlng);
7790    },
7791    _onKeyPress: function _onKeyPress(t) {
7792      13 === t.originalEvent.keyCode && this._openPopup(t);
7793    }
7794  });
7795  var en = Qe.extend({
7796    options: {
7797      pane: "tooltipPane",
7798      offset: [0, 0],
7799      direction: "auto",
7800      permanent: !1,
7801      sticky: !1,
7802      interactive: !1,
7803      opacity: .9
7804    },
7805    onAdd: function onAdd(t) {
7806      Qe.prototype.onAdd.call(this, t), this.setOpacity(this.options.opacity), t.fire("tooltipopen", {
7807        tooltip: this
7808      }), this._source && this._source.fire("tooltipopen", {
7809        tooltip: this
7810      }, !0);
7811    },
7812    onRemove: function onRemove(t) {
7813      Qe.prototype.onRemove.call(this, t), t.fire("tooltipclose", {
7814        tooltip: this
7815      }), this._source && this._source.fire("tooltipclose", {
7816        tooltip: this
7817      }, !0);
7818    },
7819    getEvents: function getEvents() {
7820      var t = Qe.prototype.getEvents.call(this);
7821      return bt && !this.options.permanent && (t.preclick = this._close), t;
7822    },
7823    _close: function _close() {
7824      this._map && this._map.closeTooltip(this);
7825    },
7826    _initLayout: function _initLayout() {
7827      var t = "leaflet-tooltip " + (this.options.className || "") + " leaflet-zoom-" + (this._zoomAnimated ? "animated" : "hide");
7828      this._contentNode = this._container = si("div", t);
7829    },
7830    _updateLayout: function _updateLayout() {},
7831    _adjustPan: function _adjustPan() {},
7832    _setPosition: function _setPosition(t) {
7833      var i,
7834          e = this._map,
7835          n = this._container,
7836          o = e.latLngToContainerPoint(e.getCenter()),
7837          s = e.layerPointToContainerPoint(t),
7838          r = this.options.direction,
7839          a = n.offsetWidth,
7840          h = n.offsetHeight,
7841          u = A(this.options.offset),
7842          l = this._getAnchor(),
7843          c = "top" === r ? (i = a / 2, h) : "bottom" === r ? (i = a / 2, 0) : (i = "center" === r ? a / 2 : "right" === r ? 0 : "left" === r ? a : s.x < o.x ? (r = "right", 0) : (r = "left", a + 2 * (u.x + l.x)), h / 2);
7844
7845      t = t.subtract(A(i, c, !0)).add(u).add(l), _i(n, "leaflet-tooltip-right"), _i(n, "leaflet-tooltip-left"), _i(n, "leaflet-tooltip-top"), _i(n, "leaflet-tooltip-bottom"), ci(n, "leaflet-tooltip-" + r), vi(n, t);
7846    },
7847    _updatePosition: function _updatePosition() {
7848      var t = this._map.latLngToLayerPoint(this._latlng);
7849
7850      this._setPosition(t);
7851    },
7852    setOpacity: function setOpacity(t) {
7853      this.options.opacity = t, this._container && mi(this._container, t);
7854    },
7855    _animateZoom: function _animateZoom(t) {
7856      var i = this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center);
7857
7858      this._setPosition(i);
7859    },
7860    _getAnchor: function _getAnchor() {
7861      return A(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
7862    }
7863  });
7864  Ki.include({
7865    openTooltip: function openTooltip(t, i, e) {
7866      return t instanceof en || (t = new en(e).setContent(t)), i && t.setLatLng(i), this.hasLayer(t) ? this 
7866: this.addLayer(t);
7867    },
7868    closeTooltip: function closeTooltip(t) {
7869      return t && this.removeLayer(t), this;
7870    }
7871  }), Me.include({
7872    bindTooltip: function bindTooltip(t, i) {
7873      return t instanceof en ? (c(t, i), (this._tooltip = t)._source = this) : (this._tooltip && !i || (this._tooltip = new en(i, this)), this._tooltip.setContent(t)), this._initTooltipInteractions(), this._tooltip.options.permanent && this._map && this._map.hasLayer(this) && this.openTooltip(), this;
7874    },
7875    unbindTooltip: function unbindTooltip() {
7876      return this._tooltip && (this._initTooltipInteractions(!0), this.closeTooltip(), this._tooltip = null), this;
7877    },
7878    _initTooltipInteractions: function _initTooltipInteractions(t) {
7879      var i, e;
7880      !t && this._tooltipHandlersAdded || (i = t ? "off" : "on", e = {
7881        remove: this.closeTooltip,
7882        move: this._moveTooltip
7883      }, this._tooltip.options.permanent ? e.add = this._openTooltip : (e.mouseover = this._openTooltip, e.mouseout = this.closeTooltip, this._tooltip.options.sticky && (e.mousemove = this._moveTooltip), bt && (e.click = this._openTooltip)), this[i](e), this._tooltipHandlersAdded = !t);
7884    },
7885    openTooltip: function openTooltip(t, i) {
7886      return this._tooltip && this._map && (i = this._tooltip._prepareOpen(this, t, i), this._map.openTooltip(this._tooltip, i), this._tooltip.options.interactive && this._tooltip._container && (ci(this._tooltip._container, "leaflet-clickable"), this.addInteractiveTarget(this._tooltip._container))), this;
7887    },
7888    closeTooltip: function closeTooltip() {
7889      return this._tooltip && (this._tooltip._close(), this._tooltip.options.interactive && this._tooltip._container && (_i(this._tooltip._container, "leaflet-clickable"), this.removeInteractiveTarget(this._tooltip._container))), this;
7890    },
7891    toggleTooltip: function toggleTooltip(t) {
7892      return this._tooltip && (this._tooltip._map ? this.closeTooltip() : this.openTooltip(t)), this;
7893    },
7894    isTooltipOpen: function isTooltipOpen() {
7895      return this._tooltip.isOpen();
7896    },
7897    setTooltipContent: function setTooltipContent(t) {
7898      return this._tooltip && this._tooltip.setContent(t), this;
7899    },
7900    getTooltip: function getTooltip() {
7901      return this._tooltip;
7902    },
7903    _openTooltip: function _openTooltip(t) {
7904      var i = t.layer || t.target;
7905      this._tooltip && this._map && this.openTooltip(i, this._tooltip.options.sticky ? t.latlng : void 0);
7906    },
7907    _moveTooltip: function _moveTooltip(t) {
7908      var i,
7909          e,
7910          n = t.latlng;
7911      this._tooltip.options.sticky && t.originalEvent && (i = this._map.mouseEventToContainerPoint(t.originalEvent), e = this._map.containerPointToLayerPoint(i), n = this._map.layerPointToLatLng(e)), this._tooltip.setLatLng(n);
7912    }
7913  });
7914  var nn = Se.extend({
7915    options: {
7916      iconSize: [12, 12],
7917      html: !1,
7918      bgPos: null,
7919      className: "leaflet-div-icon"
7920    },
7921    createIcon: function createIcon(t) {
7922      var i,
7923          e = t && "DIV" === t.tagName ? t : document.createElement("div"),
7924          n = this.options;
7925      return n.html instanceof Element ? (ai(e), e.appendChild(n.html)) : e.innerHTML = !1 !== n.html ? n.html : "", n.bgPos && (i = A(n.bgPos), e.style.backgroundPosition = -i.x + "px " + -i.y + "px"), this._setIconStyles(e, "icon"), e;
7926    },
7927    createShadow: function createShadow() {
7928      return null;
7929    }
7930  });
7931  Se.Default = Ze;
7932  var on = Me.extend({
7933    options: {
7934      tileSize: 256,
7935      opacity: 1,
7936      updateWhenIdle: yt,
7937      updateWhenZooming: !0,
7938      updateInterval: 200,
7939      zIndex: 1,
7940      bounds: null,
7941      minZoom: 0,
7942      maxZoom: void 0,
7943      maxNativeZoom: void 0,
7944      minNativeZoom: void 0,
7945      noWrap: !1,
7946      pane: "tilePane",
7947      className: "",
7948      keepBuffer: 2
7949    },
7950    initialize: function initialize(t) {
7951      c(this, t);
7952    },
7953    onAdd: function onAdd() {
7954      this._initContainer(), this._levels = {}, this._tiles = {}, this._resetView(), this._update();
7955    },
7956    beforeAdd: function beforeAdd(t) {
7957      t._addZoomLimit(this);
7958    },
7959    onRemove: function onRemove(t) {
7960      this._removeAllTiles(), ri(this._container), t._removeZoomLimit(this), this._container = null, this._tileZoom = void 0;
7961    },
7962    bringToFront: function bringToFront() {
7963      return this._map && (hi(this._container), this._setAutoZIndex(Math.max)), this;
7964    },
7965    bringToBack: function bringToBack() {
7966      return this._map && (ui(this._container), this._setAutoZIndex(Math.min)), this;
7967    },
7968    getContainer: function getContainer() {
7969      return this._container;
7970    },
7971    setOpacity: function setOpacity(t) {
7972      return this.options.opacity = t, this._updateOpacity(), this;
7973    },
7974    setZIndex: function setZIndex(t) {
7975      return this.options.zIndex = t, this._updateZIndex(), this;
7976    },
7977    isLoading: function isLoading() {
7978      return this._loading;
7979    },
7980    redraw: function redraw() {
7981      return this._map && (this._removeAllTiles(), this._update()), this;
7982    },
7983    getEvents: function getEvents() {
7984      var t = {
7985        viewprereset: this._invalidateAll,
7986        viewreset: this._resetView,
7987        zoom: this._resetView,
7988        moveend: this._onMoveEnd
7989      };
7990      return this.options.updateWhenIdle || (this._onMove || (this._onMove = n(this._onMoveEnd, this.options.updateInterval, this)), t.move = this._onMove), this._zoomAnimated && (t.zoomanim = this._animateZoom), t;
7991    },
7992    createTile: function createTile() {
7993      return document.createElement("div");
7994    },
7995    getTileSize: function getTileSize() {
7996      var t = this.options.tileSize;
7997      return t instanceof k ? t : new k(t, t);
7998    },
7999    _updateZIndex: function _updateZIndex() {
8000      this._container && void 0 !== this.options.zIndex && null !== this.options.zIndex && (this._container.style.zIndex = this.options.zIndex);
8001    },
8002    _setAutoZIndex: function _setAutoZIndex(t) {
8003      for (var i, e = this.getPane().children, n = -t(-1 / 0, 1 / 0), o = 0, s = e.length; o < s; o++) {
8004        i = e[o].style.zIndex, e[o] !== this._container && i && (n = t(n, +i));
8005      }
8006
8007      isFinite(n) && (this.options.zIndex = n + t(-1, 1), this._updateZIndex());
8008    },
8009    _updateOpacity: function _updateOpacity() {
8010      if (this._map && !it) {
8011        mi(this._container, this.options.opacity);
8012        var t = +new Date(),
8013            i = !1,
8014            e = !1;
8015
8016        for (var n in this._tiles) {
8017          var o,
8018              s = this._tiles[n];
8019          s.current && s.loaded && (o = Math.min(1, (t - s.loaded) / 200), mi(s.el, o), o < 1 ? i = !0 : (s.active ? e = !0 : this._onOpaqueTile(s), s.active = !0));
8020        }
8021
8022        e && !this._noPrune && this._pruneTiles(), i && (z(this._fadeFrame), this._fadeFrame = M(this._updateOpacity, this));
8023      }
8024    },
8025    _onOpaqueTile: a,
8026    _initContainer: function _initContainer() {
8027      this._container || (this._container = si("div", "leaflet-layer " + (this.options.className || "")), this._updateZIndex(), this.options.opacity < 1 && this._updateOpacity(), this.getPane().appendChild(this._container));
8028    },
8029    _updateLevels: function _updateLevels() {
8030      var t = this._tileZoom,
8031          i = this.options.maxZoom;
8032
8033      if (void 0 !== t) {
8034        for (var e in this._levels) {
8035          e = Number(e), this._levels[e].el.children.length || e === t ? (this._levels[e].el.style.zIndex = i - Math.abs(t - e), this._onUpdateLevel(e)) : (ri(this._levels[e].el), this._removeTilesAtZoom(e), this._onRemoveLevel(e), delete this._levels[e]);
8036        }
8037
8038        var n = this._levels[t],
8039            o = this._map;
8040        return n || ((n = this._levels[t] = {}).el = si("div", "leaflet-tile-container leaflet-zoom-animated", this._container), n.el.style.zIndex = i, n.origin = o.project(o.unproject(o.getPixelOrigin()), t).round(), n.zoom = t, this._setZoomTransform(n, o.getCenter(), o.getZoom()), a(n.el.offsetWidth), this._onCreateLevel(n)), this._level = n;
8041      }
8042    },
8043    _onUpdateLevel: a,
8044    _onRemoveLevel: a,
8045    _onCreateLevel: a,
8046    _pruneTiles: function _pruneTiles() {
8047      if (this._map) {
8048        var t,
8049            i,
8050            e,
8051            n = this._map.getZoom();
8052
8053        if (n > this.options.maxZoom || n < this.options.minZoom) this._removeAllTiles();else {
8054          for (t in this._tiles) {
8055            (e = this._tiles[t]).retain = e.current;
8056          }
8057
8058          for (t in this._tiles) {
8059            (e = this._tiles[t]).current && !e.active && (i = e.coords, this._retainParent(i.x, i.y, i.z, i.z - 5) || this._retainChildren(i.x, i.y, i.z, i.z + 2));
8060          }
8061
8062          for (t in this._tiles) {
8063            this._tiles[t].retain || this._removeTile(t);
8064          }
8065        }
8066      }
8067    },
8068    _removeTilesAtZoom: function _removeTilesAtZoom(t) {
8069      for (var i in this._tiles) {
8070        this._tiles[i].coords.z === t && this._removeTile(i);
8071      }
8072    },
8073    _removeAllTiles: function _removeAllTiles() {
8074      for (var t in this._tiles) {
8075        this._removeTile(t);
8076      }
8077    },
8078    _invalidateAll: function _invalidateAll() {
8079      for (var t in this._levels) {
8080        ri(this._levels[t].el), this._onRemoveLevel(Number(t)), delete this._levels[t];
8081      }
8082
8083      this._removeAllTiles(), this._tileZoom = void 0;
8084    },
8085    _retainParent: function _retainParent(t, i, e, n) {
8086      var o = Math.floor(t / 2),
8087          s = Math.floor(i / 2),
8088          r = e - 1,
8089          a = new k(+o, +s);
8090      a.z = +r;
8091
8092      var h = this._tileCoordsToKey(a),
8093          u = this._tiles[h];
8094
8095      return u && u.active ? u.retain = !0 : (u && u.loaded && (u.retain = !0), n < r && this._retainParent(o, s, r, n));
8096    },
8097    _retainChildren: function _retainChildren(t, i, e, n) {
8098      for (var o = 2 * t; o < 2 * t + 2; o++) {
8099        for (var s = 2 * i; s < 2 * i + 2; s++) {
8100          var r = new k(o, s);
8101          r.z = e + 1;
8102
8103          var a = this._tileCoordsToKey(r),
8104              h = this._tiles[a];
8105
8106          h && h.active ? h.retain = !0 : (h && h.loaded && (h.retain = !0), e + 1 < n && this._retainChildren(o, s, e + 1, n));
8107        }
8108      }
8109    },
8110    _resetView: function _resetView(t) {
8111      var i = t && (t.pinch || t.flyTo);
8112
8113      this._setView(this._map.getCenter(), this._map.getZoom(), i, i);
8114    },
8115    _animateZoom: function _animateZoom(t) {
8116      this._setView(t.center, t.zoom, !0, t.noUpdate);
8117    },
8118    _clampZoom: function _clampZoom(t) {
8119      var i = this.options;
8120      return void 0 !== i.minNativeZoom && t < i.minNativeZoom ? i.minNativeZoom : void 0 !== i.maxNativeZoom && i.maxNativeZoom < t ? i.maxNativeZoom : t;
8121    },
8122    _setView: function _setView(t, i, e, n) {
8123      var o = Math.round(i),
8124          o = void 0 !== this.options.maxZoom && o > this.options.maxZoom || void 0 !== this.options.minZoom && o < this.options.minZoom ? void 0 : this._clampZoom(o),
8125          s = this.options.updateWhenZooming && o !== this._tileZoom;
8126      n && !s || (this._tileZoom = o, this._abortLoading && this._abortLoading(), this._updateLevels(), this._resetGrid(), void 0 !== o && this._update(t), e || this._pruneTiles(), this._noPrune = !!e), this._setZoomTransforms(t, i);
8127    },
8128    _setZoomTransforms: function _setZoomTransforms(t, i) {
8129      for (var e in this._levels) {
8130        this._setZoomTransform(this._levels[e], t, i);
8131      }
8132    },
8133    _setZoomTransform: function _setZoomTransform(t, i, e) {
8134      var n = this._map.getZoomScale(e, t.zoom),
8135          o = t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i, e)).round();
8136
8137      vt ? gi(t.el, o, n) : vi(t.el, o);
8138    },
8139    _resetGrid: function _resetGrid() {
8140      var t = this._map,
8141          i = t.options.crs,
8142          e = this._tileSize = this.getTileSize(),
8143          n = this._tileZoom,
8144          o = this._map.getPixelWorldBounds(this._tileZoom);
8145
8146      o && (this._globalTileRange = this._pxBoundsToTileRange(o)), this._wrapX = i.wrapLng && !this.options.noWrap && [Math.floor(t.project([0, i.wrapLng[0]], n).x / e.x), Math.ceil(t.project([0, i.wrapLng[1]], n).x / e.y)], this._wrapY = i.wrapLat && !this.options.noWrap && [Math.floor(t.project([i.wrapLat[0], 0], n).y / e.x), Math.ceil(t.project([i.wrapLat[1], 0], n).y / e.y)];
8147    },
8148    _onMoveEnd: function _onMoveEnd() {
8149      this._map && !this._map._animatingZoom && this._update();
8150    },
8151    _getTiledPixelBounds: function _getTiledPixelBounds(t) {
8152      var i = this._map,
8153          e = i._animatingZoom ? Math.max(i._animateToZoom, i.getZoom()) : i.getZoom(),
8154          n = i.getZoomScale(e, this._tileZoom),
8155          o = i.project(t, this._tileZoom).floor(),
8156          s = i.getSize().divideBy(2 * n);
8157      return new I(o.subtract(s), o.add(s));
8158    },
8159    _update: function _update(t) {
8160      var i = this._map;
8161
8162      if (i) {
8163        var e = this._clampZoom(i.getZoom());
8164
8165        if (void 0 === t && (t = i.getCenter()), void 0 !== this._tileZoom) {
8166          var n = this._getTiledPixelBounds(t),
8167              o = this._pxBoundsToTileRange(n),
8168              s = o.getCenter(),
8169              r = [],
8170              a = this.options.keepBuffer,
8171              h = new I(o.getBottomLeft().subtract([a, -a]), o.getTopRight().add([a, -a]));
8172
8173          if (!(isFinite(o.min.x) && isFinite(o.min.y) && isFinite(o.max.x) && isFinite(o.max.y))) throw new Error("Attempted to load an infinite number of tiles");
8174
8175          for (var u in this._tiles) {
8176            var l = this._tiles[u].coords;
8177            l.z === this._tileZoom && h.contains(new k(l.x, l.y)) || (this._tiles[u].current = !1);
8178          }
8179
8180          if (1 < Math.abs(e - this._tileZoom)) this._setView(t, e);else {
8181            for (var c = o.min.y; c <= o.max.y; c++) {
8182              for (var _ = o.min.x; _ <= o.max.x; _++) {
8183                var d,
8184                    p = new k(_, c);
8185                p.z = this._tileZoom, this._isValidTile(p) && ((d = this._tiles[this._tileCoordsToKey(p)]) ? d.current = !0 : r.push(p));
8186              }
8187            }
8188
8189            if (r.sort(function (t, i) {
8190              return t.distanceTo(s) - i.distanceTo(s);
8191            }), 0 !== r.length) {
8192              this._loading || (this._loading = !0, this.fire("loading"));
8193
8194              for (var m = document.createDocumentFragment(), _ = 0; _ < r.length; _++) {
8195                this._addTile(r[_], m);
8196              }
8197
8198              this._level.el.appendChild(m);
8199            }
8200          }
8201        }
8202      }
8203    },
8204    _isValidTile: function _isValidTile(t) {
8205      var i = this._map.options.crs;
8206
8207      if (!i.infinite) {
8208        var e = this._globalTileRange;
8209        if (!i.wrapLng && (t.x < e.min.x || t.x > e.max.x) || !i.wrapLat && (t.y < e.min.y || t.y > e.max.y)) return !1;
8210      }
8211
8212      if (!this.options.bounds) return !0;
8213
8214      var n = this._tileCoordsToBounds(t);
8215
8216      return N(this.options.bounds).overlaps(n);
8217    },
8218    _keyToBounds: function _keyToBounds(t) {
8219      return this._tileCoordsToBounds(this._keyToTileCoords(t));
8220    },
8221    _tileCoordsToNwSe: function _tileCoordsToNwSe(t) {
8222      var i = this._map,
8223          e = this.getTileSize(),
8224          n = t.scaleBy(e),
8225          o = n.add(e);
8226      return [i.unproject(n, t.z), i.unproject(o, t.z)];
8227    },
8228    _tileCoordsToBounds: function _tileCoordsToBounds(t) {
8229      var i = this._tileCoordsToNwSe(t),
8230          e = new R(i[0], i[1]);
8231
8232      return this.options.noWrap || (e = this._map.wrapLatLngBounds(e)), e;
8233    },
8234    _tileCoordsToKey: function _tileCoordsToKey(t) {
8235      return t.x + ":" + t.y + ":" + t.z;
8236    },
8237    _keyToTileCoords: function _keyToTileCoords(t) {
8238      var i = t.split(":"),
8239          e = new k(+i[0], +i[1]);
8240      return e.z = +i[2], e;
8241    },
8242    _removeTile: function _removeTile(t) {
8243      var i = this._tiles[t];
8244      i && (ri(i.el), delete this._tiles[t], this.fire("tileunload", {
8245        tile: i.el,
8246        coords: this._keyToTileCoords(t)
8247      }));
8248    },
8249    _initTile: function _initTile(t) {
8250      ci(t, "leaflet-tile");
8251      var i = this.getTileSize();
8252      t.style.width = i.x + "px", t.style.height = i.y + "px", t.onselectstart = a, t.onmousemove = a, it && this.options.opacity < 1 && mi(t, this.options.opacity), ot && !st && (t.style.WebkitBackfaceVisibility = "hidden");
8253    },
8254    _addTile: function _addTile(t, i) {
8255      var e = this._getTilePos(t),
8256          n = this._tileCoordsToKey(t),
8257          o = this.createTile(this._wrapCoords(t), p(this._tileReady, this, t));
8258
8259      this._initTile(o), this.createTile.length < 2 && M(p(this._tileReady, this, t, null, o)), vi(o, e), this._tiles[n] = {
8260        el: o,
8261        coords: t,
8262        current: !0
8263      }, i.appendChild(o), this.fire("tileloadstart", {
8264        tile: o,
8265        coords: t
8266      });
8267    },
8268    _tileReady: function _tileReady(t, i, e) {
8269      i && this.fire("tileerror", {
8270        error: i,
8271        tile: e,
8272        coords: t
8273      });
8274
8275      var n = this._tileCoordsToKey(t);
8276
8277      (e = this._tiles[n]) && (e.loaded = +new Date(), this._map._fadeAnimated ? (mi(e.el, 0), z(this._fadeFrame), this._fadeFrame = M(this._updateOpacity, this)) : (e.active = !0, this._pruneTiles()), i || (ci(e.el, "leaflet-tile-loaded"), this.fire("tileload", {
8278        tile: e.el,
8279        coords: t
8280      })), this._noTilesToLoad() && (this._loading = !1, this.fire("load"), it || !this._map._fadeAnimated ? M(this._pruneTiles, this) : setTimeout(p(this._pruneTiles, this), 250)));
8281    },
8282    _getTilePos: function _getTilePos(t) {
8283      return t.scaleBy(this.getTileSize()).subtract(this._level.origin);
8284    },
8285    _wrapCoords: function _wrapCoords(t) {
8286      var i = new k(this._wrapX ? o(t.x, this._wrapX) : t.x, this._wrapY ? o(t.y, this._wrapY) : t.
8286y);
8287      return i.z = t.z, i;
8288    },
8289    _pxBoundsToTileRange: function _pxBoundsToTileRange(t) {
8290      var i = this.getTileSize();
8291      return new I(t.min.unscaleBy(i).floor(), t.max.unscaleBy(i).ceil().subtract([1, 1]));
8292    },
8293    _noTilesToLoad: function _noTilesToLoad() {
8294      for (var t in this._tiles) {
8295        if (!this._tiles[t].loaded) return !1;
8296      }
8297
8298      return !0;
8299    }
8300  });
8301  var sn = on.extend({
8302    options: {
8303      minZoom: 0,
8304      maxZoom: 18,
8305      subdomains: "abc",
8306      errorTileUrl: "",
8307      zoomOffset: 0,
8308      tms: !1,
8309      zoomReverse: !1,
8310      detectRetina: !1,
8311      crossOrigin: !1
8312    },
8313    initialize: function initialize(t, i) {
8314      this._url = t, (i = c(this, i)).detectRetina && zt && 0 < i.maxZoom && (i.tileSize = Math.floor(i.tileSize / 2), i.zoomReverse ? (i.zoomOffset--, i.minZoom++) : (i.zoomOffset++, i.maxZoom--), i.minZoom = Math.max(0, i.minZoom)), "string" == typeof i.subdomains && (i.subdomains = i.subdomains.split("")), ot || this.on("tileunload", this._onTileRemove);
8315    },
8316    setUrl: function setUrl(t, i) {
8317      return this._url === t && void 0 === i && (i = !0), this._url = t, i || this.redraw(), this;
8318    },
8319    createTile: function createTile(t, i) {
8320      var e = document.createElement("img");
8321      return zi(e, "load", p(this._tileOnLoad, this, i, e)), zi(e, "error", p(this._tileOnError, this, i, e)), !this.options.crossOrigin && "" !== this.options.crossOrigin || (e.crossOrigin = !0 === this.options.crossOrigin ? "" : this.options.crossOrigin), e.alt = "", e.setAttribute("role", "presentation"), e.src = this.getTileUrl(t), e;
8322    },
8323    getTileUrl: function getTileUrl(t) {
8324      var i,
8325          e = {
8326        r: zt ? "@2x" : "",
8327        s: this._getSubdomain(t),
8328        x: t.x,
8329        y: t.y,
8330        z: this._getZoomForUrl()
8331      };
8332      return this._map && !this._map.options.crs.infinite && (i = this._globalTileRange.max.y - t.y, this.options.tms && (e.y = i), e["-y"] = i), f(this._url, h(e, this.options));
8333    },
8334    _tileOnLoad: function _tileOnLoad(t, i) {
8335      it ? setTimeout(p(t, this, null, i), 0) : t(null, i);
8336    },
8337    _tileOnError: function _tileOnError(t, i, e) {
8338      var n = this.options.errorTileUrl;
8339      n && i.getAttribute("src") !== n && (i.src = n), t(e, i);
8340    },
8341    _onTileRemove: function _onTileRemove(t) {
8342      t.tile.onload = null;
8343    },
8344    _getZoomForUrl: function _getZoomForUrl() {
8345      var t = this._tileZoom,
8346          i = this.options.maxZoom;
8347      return this.options.zoomReverse && (t = i - t), t + this.options.zoomOffset;
8348    },
8349    _getSubdomain: function _getSubdomain(t) {
8350      var i = Math.abs(t.x + t.y) % this.options.subdomains.length;
8351      return this.options.subdomains[i];
8352    },
8353    _abortLoading: function _abortLoading() {
8354      var t, i;
8355
8356      for (t in this._tiles) {
8357        this._tiles[t].coords.z !== this._tileZoom && ((i = this._tiles[t].el).onload = a, i.onerror = a, i.complete || (i.src = y, ri(i), delete this._tiles[t]));
8358      }
8359    },
8360    _removeTile: function _removeTile(t) {
8361      var i = this._tiles[t];
8362      if (i) return at || i.el.setAttribute("src", y), on.prototype._removeTile.call(this, t);
8363    },
8364    _tileReady: function _tileReady(t, i, e) {
8365      if (this._map && (!e || e.getAttribute("src") !== y)) return on.prototype._tileReady.call(this, t, i, e);
8366    }
8367  });
8368
8369  function rn(t, i) {
8370    return new sn(t, i);
8371  }
8372
8373  var an = sn.extend({
8374    defaultWmsParams: {
8375      service: "WMS",
8376      request: "GetMap",
8377      layers: "",
8378      styles: "",
8379      format: "image/jpeg",
8380      transparent: !1,
8381      version: "1.1.1"
8382    },
8383    options: {
8384      crs: null,
8385      uppercase: !1
8386    },
8387    initialize: function initialize(t, i) {
8388      this._url = t;
8389      var e = h({}, this.defaultWmsParams);
8390
8391      for (var n in i) {
8392        n in this.options || (e[n] = i[n]);
8393      }
8394
8395      var o = (i = c(this, i)).detectRetina && zt ? 2 : 1,
8396          s = this.getTileSize();
8397      e.width = s.x * o, e.height = s.y * o, this.wmsParams = e;
8398    },
8399    onAdd: function onAdd(t) {
8400      this._crs = this.options.crs || t.options.crs, this._wmsVersion = parseFloat(this.wmsParams.version);
8401      var i = 1.3 <= this._wmsVersion ? "crs" : "srs";
8402      this.wmsParams[i] = this._crs.code, sn.prototype.onAdd.call(this, t);
8403    },
8404    getTileUrl: function getTileUrl(t) {
8405      var i = this._tileCoordsToNwSe(t),
8406          e = this._crs,
8407          n = O(e.project(i[0]), e.project(i[1])),
8408          o = n.min,
8409          s = n.max,
8410          r = (1.3 <= this._wmsVersion && this._crs === be ? [o.y, o.x, s.y, s.x] : [o.x, o.y, s.x, s.y]).join(","),
8411          a = sn.prototype.getTileUrl.call(this, t);
8412
8413      return a + _(this.wmsParams, a, this.options.uppercase) + (this.options.uppercase ? "&BBOX=" : "&bbox=") + r;
8414    },
8415    setParams: function setParams(t, i) {
8416      return h(this.wmsParams, t), i || this.redraw(), this;
8417    }
8418  });
8419  sn.WMS = an, rn.wms = function (t, i) {
8420    return new an(t, i);
8421  };
8422  var hn = Me.extend({
8423    options: {
8424      padding: .1,
8425      tolerance: 0
8426    },
8427    initialize: function initialize(t) {
8428      c(this, t), m(this), this._layers = this._layers || {};
8429    },
8430    onAdd: function onAdd() {
8431      this._container || (this._initContainer(), this._zoomAnimated && ci(this._container, "leaflet-zoom-animated")), this.getPane().appendChild(this._container), this._update(), this.on("update", this._updatePaths, this);
8432    },
8433    onRemove: function onRemove() {
8434      this.off("update", this._updatePaths, this), this._destroyContainer();
8435    },
8436    getEvents: function getEvents() {
8437      var t = {
8438        viewreset: this._reset,
8439        zoom: this._onZoom,
8440        moveend: this._update,
8441        zoomend: this._onZoomEnd
8442      };
8443      return this._zoomAnimated && (t.zoomanim = this._onAnimZoom), t;
8444    },
8445    _onAnimZoom: function _onAnimZoom(t) {
8446      this._updateTransform(t.center, t.zoom);
8447    },
8448    _onZoom: function _onZoom() {
8449      this._updateTransform(this._map.getCenter(), this._map.getZoom());
8450    },
8451    _updateTransform: function _updateTransform(t, i) {
8452      var e = this._map.getZoomScale(i, this._zoom),
8453          n = yi(this._container),
8454          o = this._map.getSize().multiplyBy(.5 + this.options.padding),
8455          s = this._map.project(this._center, i),
8456          r = this._map.project(t, i).subtract(s),
8457          a = o.multiplyBy(-e).add(n).add(o).subtract(r);
8458
8459      vt ? gi(this._container, a, e) : vi(this._container, a);
8460    },
8461    _reset: function _reset() {
8462      for (var t in this._update(), this._updateTransform(this._center, this._zoom), this._layers) {
8463        this._layers[t]._reset();
8464      }
8465    },
8466    _onZoomEnd: function _onZoomEnd() {
8467      for (var t in this._layers) {
8468        this._layers[t]._project();
8469      }
8470    },
8471    _updatePaths: function _updatePaths() {
8472      for (var t in this._layers) {
8473        this._layers[t]._update();
8474      }
8475    },
8476    _update: function _update() {
8477      var t = this.options.padding,
8478          i = this._map.getSize(),
8479          e = this._map.containerPointToLayerPoint(i.multiplyBy(-t)).roun
8479d();
8480
8481      this._bounds = new I(e, e.add(i.multiplyBy(1 + 2 * t)).round()), this._center = this._map.getCenter(), this._zoom = this._map.getZoom();
8482    }
8483  }),
8484      un = hn.extend({
8485    getEvents: function getEvents() {
8486      var t = hn.prototype.getEvents.call(this);
8487      return t.viewprereset = this._onViewPreReset, t;
8488    },
8489    _onViewPreReset: function _onViewPreReset() {
8490      this._postponeUpdatePaths = !0;
8491    },
8492    onAdd: function onAdd() {
8493      hn.prototype.onAdd.call(this), this._draw();
8494    },
8495    _initContainer: function _initContainer() {
8496      var t = this._container = document.createElement("canvas");
8497      zi(t, "mousemove", this._onMouseMove, this), zi(t, "click dblclick mousedown mouseup contextmenu", this._onClick, this), zi(t, "mouseout", this._handleMouseOut, this), this._ctx = t.getContext("2d");
8498    },
8499    _destroyContainer: function _destroyContainer() {
8500      z(this._redrawRequest), delete this._ctx, ri(this._container), Si(this._container), delete this._container;
8501    },
8502    _updatePaths: function _updatePaths() {
8503      if (!this._postponeUpdatePaths) {
8504        for (var t in this._redrawBounds = null, this._layers) {
8505          this._layers[t]._update();
8506        }
8507
8508        this._redraw();
8509      }
8510    },
8511    _update: function _update() {
8512      var t, i, e, n;
8513      this._map._animatingZoom && this._bounds || (hn.prototype._update.call(this), t = this._bounds, i = this._container, e = t.getSize(), n = zt ? 2 : 1, vi(i, t.min), i.width = n * e.x, i.height = n * e.y, i.style.width = e.x + "px", i.style.height = e.y + "px", zt && this._ctx.scale(2, 2), this._ctx.translate(-t.min.x, -t.min.y), this.fire("update"));
8514    },
8515    _reset: function _reset() {
8516      hn.prototype._reset.call(this), this._postponeUpdatePaths && (this._postponeUpdatePaths = !1, this._updatePaths());
8517    },
8518    _initPath: function _initPath(t) {
8519      this._updateDashArray(t);
8520
8521      var i = (this._layers[m(t)] = t)._order = {
8522        layer: t,
8523        prev: this._drawLast,
8524        next: null
8525      };
8526      this._drawLast && (this._drawLast.next = i), this._drawLast = i, this._drawFirst = this._drawFirst || this._drawLast;
8527    },
8528    _addPath: function _addPath(t) {
8529      this._requestRedraw(t);
8530    },
8531    _removePath: function _removePath(t) {
8532      var i = t._order,
8533          e = i.next,
8534          n = i.prev;
8535      e ? e.prev = n : this._drawLast = n, n ? n.next = e : this._drawFirst = e, delete t._order, delete this._layers[m(t)], this._requestRedraw(t);
8536    },
8537    _updatePath: function _updatePath(t) {
8538      this._extendRedrawBounds(t), t._project(), t._update(), this._requestRedraw(t);
8539    },
8540    _updateStyle: function _updateStyle(t) {
8541      this._updateDashArray(t), this._requestRedraw(t);
8542    },
8543    _updateDashArray: function _updateDashArray(t) {
8544      if ("string" == typeof t.options.dashArray) {
8545        for (var i, e = t.options.dashArray.split(/[, ]+/), n = [], o = 0; o < e.length; o++) {
8546          if (i = Number(e[o]), isNaN(i)) return;
8547          n.push(i);
8548        }
8549
8550        t.options._dashArray = n;
8551      } else t.options._dashArray = t.options.dashArray;
8552    },
8553    _requestRedraw: function _requestRedraw(t) {
8554      this._map && (this._extendRedrawBounds(t), this._redrawRequest = this._redrawRequest || M(this._redraw, this));
8555    },
8556    _extendRedrawBounds: function _extendRedrawBounds(t) {
8557      var i;
8558      t._pxBounds && (i = (t.options.weight || 0) + 1, this._redrawBounds = this._redrawBounds || new I(), this._redrawBounds.extend(t._pxBounds.min.subtract([i, i])), this._redrawBounds.extend(t._pxBounds.max.add([i, i])));
8559    },
8560    _redraw: function _redraw() {
8561      this._redrawRequest = null, this._redrawBounds && (this._redrawBounds.min._floor(), this._redrawBounds.max._ceil()), this._clear(), this._draw(), this._redrawBounds = null;
8562    },
8563    _clear: function _clear() {
8564      var t,
8565          i = this._redrawBounds;
8566      i ? (t = i.getSize(), this._ctx.clearRect(i.min.x, i.min.y, t.x, t.y)) : (this._ctx.save(), this._ctx.setTransform(1, 0, 0, 1, 0, 0), this._ctx.clearRect(0, 0, this._container.width, this._container.height), this._ctx.restore(
8566));
8567    },
8568    _draw: function _draw() {
8569      var t,
8570          i,
8571          e = this._redrawBounds;
8572      this._ctx.save(), e && (i = e.getSize(), this._ctx.beginPath(), this._ctx.rect(e.min.x, e.min.y, i.x, i.y), this._ctx.clip()), this._drawing = !0;
8573
8574      for (var n = this._drawFirst; n; n = n.next) {
8575        t = n.layer, (!e || t._pxBounds && t._pxBounds.intersects(e)) && t._updatePath();
8576      }
8577
8578      this._drawing = !1, this._ctx.restore();
8579    },
8580    _updatePoly: function _updatePoly(t, i) {
8581      if (this._drawing) {
8582        var e,
8583            n,
8584            o,
8585            s,
8586            r = t._parts,
8587            a = r.length,
8588            h = this._ctx;
8589
8590        if (a) {
8591          for (h.beginPath(), e = 0; e < a; e++) {
8592            for (n = 0, o = r[e].length; n < o; n++) {
8593              s = r[e][n], h[n ? "lineTo" : "moveTo"](s.x, s.y);
8594            }
8595
8596            i && h.closePath();
8597          }
8598
8599          this._fillStroke(h, t);
8600        }
8601      }
8602    },
8603    _updateCircle: function _updateCircle(t) {
8604      var i, e, n, o;
8605      this._drawing && !t._empty() && (i = t._point, e = this._ctx, n = Math.max(Math.round(t._radius), 1), 1 != (o = (Math.max(Math.round(t._radiusY), 1) || n) / n) && (e.save(), e.scale(1, o)), e.beginPath(), e.arc(i.x, i.y / o, n, 0, 2 * Math.PI, !1), 1 != o && e.restore(), this._fillStroke(e, t));
8606    },
8607    _fillStroke: function _fillStroke(t, i) {
8608      var e = i.options;
8609      e.fill && (t.globalAlpha = e.fillOpacity, t.fillStyle = e.fillColor || e.color, t.fill(e.fillRule || "evenodd")), e.stroke && 0 !== e.weight && (t.setLineDash && t.setLineDash(i.options && i.options._dashArray || []), t.globalAlpha = e.opacity, t.lineWidth = e.weight, t.strokeStyle = e.color, t.lineCap = e.lineCap, t.lineJoin = e.lineJoin, t.stroke());
8610    },
8611    _onClick: function _onClick(t) {
8612      for (var i, e, n = this._map.mouseEventToLayerPoint(t), o = this._drawFirst; o; o = o.next) {
8613        (i = o.layer).options.interactive && i._containsPoint(n) && (("click" === t.type || "preclick" !== t.type) && this._map._draggableMoved(i) || (e = i));
8614      }
8615
8616      e && (Fi(t), this._fireEvent([e], t));
8617    },
8618    _onMouseMove: function _onMouseMove(t) {
8619      var i;
8620      !this._map || this._map.dragging.moving() || this._map._animatingZoom || (i = this._map.mouseEventToLayerPoint(t), this._handleMouseHover(t, i));
8621    },
8622    _handleMouseOut: function _handleMouseOut(t) {
8623      var i = this._hoveredLayer;
8624      i && (_i(this._container, "leaflet-interactive"), this._fireEvent([i], t, "mouseout"), this._hoveredLayer = null, this._mouseHoverThrottled = !1);
8625    },
8626    _handleMouseHover: function _handleMouseHover(t, i) {
8627      if (!this._mouseHoverThrottled) {
8628        for (var e, n, o = this._drawFirst; o; o = o.next) {
8629          (e = o.layer).options.interactive && e._containsPoint(i) && (n = e);
8630        }
8631
8632        n !== this._hoveredLayer && (this._handleMouseOut(t), n && (ci(this._container, "leaflet-interactive"), this._fireEvent([n], t, "mouseover"), this._hoveredLayer = n)), this._hoveredLayer && this._fireEvent([this._hoveredLayer], t), this._mouseHoverThrottled = !0, setTimeout(p(function () {
8633          this._mouseHoverThrottled = !1;
8634        }, this), 32);
8635      }
8636    },
8637    _fireEvent: function _fireEvent(t, i, e) {
8638      this._map._fireDOMEvent(i, e || i.type, t);
8639    },
8640    _bringToFront: function _bringToFront(t) {
8641      var i,
8642          e,
8643          n = t._order;
8644      n && (i = n.next, e = n.prev, i && ((i.prev = e) ? e.next = i : i && (this._drawFirst = i), n.prev = this._drawLast, (this._drawLast.next = n).next = null, this._drawLast = n, this._requestRedraw(t)));
8645    },
8646    _bringToBack: function _bringToBack(t) {
8647      var i,
8648          e,
8649          n = t._order;
8650      n && (i = n.next, (e = n.prev) && ((e.next = i) ? i.prev = e : e && (this._drawLast = e), n.prev = null, n.next = this._drawFirst, this._drawFirst.prev = n, this._drawFirst = n, this._requestRedraw(t)));
8651    }
8652  });
8653
8654  function ln(t) {
8655    return St ? new un(t) : null;
8656  }
8657
8658  var cn = function () {
8659    try {
8660      return document.namespaces.add("lvml", "urn:schemas-microsoft-com:vml"), function (t) {
8661        return document.createElement("<lvml:" + t + ' class="lvml">');
8662      };
8663    } catch (t) {
8664      return function (t) {
8665        return document.createElement("<" + t + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
8666      };
8667    }
8668  }(),
8669      _n = {
8670    _initContainer: function _initContainer() {
8671      this._container = si("div", "leaflet-vml-container");
8672    },
8673    _update: function _update() {
8674      this._map._animatingZoom || (hn.prototype._update.call(this), this.fire("update"));
8675    },
8676    _initPath: function _initPath(t) {
8677      var i = t._container = cn("shape");
8678      ci(i, "leaflet-vml-shape " + (this.options.className || "")), i.coordsize = "1 1", t._path = cn("path"), i.appendChild(t._path), this._updateStyle(t), this._layers[m(t)] = t;
8679    },
8680    _addPath: function _addPath(t) {
8681      var i = t._container;
8682      this._container.appendChild(i), t.options.interactive && t.addInteractiveTarget(i);
8683    },
8684    _removePath: function _removePath(t) {
8685      var i = t._container;
8686      ri(i), t.removeInteractiveTarget(i), delete this._layers[m(t)];
8687    },
8688    _updateStyle: function _updateStyle(t) {
8689      var i = t._stroke,
8690          e = t._fill,
8691          n = t.options,
8692          o = t._container;
8693      o.stroked = !!n.stroke, o.filled = !!n.fill, n.stroke ? (i = i || (t._stroke = cn("stroke")), o.appendChild(i), i.weight = n.weight + "px", i.color = n.color, i.opacity = n.opacity, n.dashArray ? i.dashStyle = g(n.dashArray) ? n.dashArray.join(" ") : n.dashArray.replace(/( *, *)/g, " ") : i.dashStyle = "", i.endcap = n.lineCap.replace("butt", "flat"), i.joinstyle = n.lineJoin) : i && (o.removeChild(i), t._stroke = null), n.fill ? (e = e || (t._fill = cn("fill")), o.appendChild(e), e.color = n.fillColor || n.color, e.opacity = n.fillOpacity) : e && (o.removeChild(e), t._fill = null);
8694    },
8695    _updateCircle: function _updateCircle(t) {
8696      var i = t._point.round(),
8697          e = Math.round(t._radius),
8698          n = Math.round(t._radiusY || e);
8699
8700      this._setPath(t, t._empty() ? "M0 0" : "AL " + i.x + "," + i.y + " " + e + "," + n + " 0,23592600");
8701    },
8702    _setPath: function _setPath(t, i) {
8703      t._path.v = i;
8704    },
8705    _bringToFront: function _bringToFront(t) {
8706      hi(t._container);
8707    },
8708    _bringToBack: function _bringToBack(t) {
8709      ui(t._container);
8710    }
8711  },
8712      dn = Et ? cn : J,
8713      pn = hn.extend({
8714    getEvents: function getEvents() {
8715      var t = hn.prototype.getEvents.call(this);
8716      return t.zoomstart = this._onZoomStart, t;
8717    },
8718    _initContainer: function _initContainer() {
8719      this._container = dn("svg"), this._container.setAttribute("pointer-events", "none"), this._rootGroup = dn("g"), this._container.appendChild(this._rootGroup);
8720    },
8721    _destroyContainer: function _destroyContainer() {
8722      ri(this._container), Si(this._container), delete this._container, delete this._rootGroup, delete this._svgSize;
8723    },
8724    _onZoomStart: function _onZoomStart() {
8725      this._update();
8726    },
8727    _update: function _update() {
8728      var t, i, e;
8729      this._map._animatingZoom && this._bounds || (hn.prototype._update.call(this), i = (t = this._bounds).getSize(), e = this._container, this._svgSize && this._svgSize.equals(i) || (this._svgSize = i, e.setAttribute("width", i.x), e.setAttribute("height", i.y)), vi(e, t.min), e.setAttribute("viewBox", [t.min.x, t.min.y, i.x, i.y].join(" ")), this.fire("update"));
8730    },
8731    _initPath: function _initPath(t) {
8732      var i = t._path = dn("path");
8733      t.options.className && ci(i, t.options.className), t.options.interactive && ci(i, "leaflet-interactive"), this._updateStyle(t), this._layers[m(t)] = t;
8734    },
8735    _addPath: function _addPath(t) {
8736      this._rootGroup || this._initContainer(), this._rootGroup.appendChild(t._path), t.addInteractiveTarget(t._path);
8737    },
8738    _removePath: function _removePath(t) {
8739      ri(t._path), t.removeInteractiveTarget(t._path), delete this._layers[m(t)];
8740    },
8741    _updatePath: function _updatePath(t) {
8742      t._project(), t._update();
8743    },
8744    _updateStyle: function _updateStyle(t) {
8745      var i = t._path,
8746          e = t.options;
8747      i && (e.stroke ? (i.setAttribute("stroke", e.color), i.setAttribute("stroke-opacity", e.opacity), i.setAttribute("stroke-width", e.weight), i.setAttribute("stroke-linecap", e.lineCap), i.setAttribute("stroke-linejoin", e.lineJoin), e.dashArray ? i.setAttribute("stroke-dasharray", e.dashArray) : i.removeAttribute("stroke-dasharray"), e.dashOffset ? i.setAttribute("stroke-dashoffset", e.dashOffset) 
8747: i.removeAttribute("stroke-dashoffset")) : i.setAttribute("stroke", "none"), e.fill ? (i.setAttribute("fill", e.fillColor || e.color), i.setAttribute("fill-opacity", e.fillOpacity), i.setAttribute("fill-rule", e.fillRule || "evenodd")) : i.setAttribute("fill", "none"));
8748    },
8749    _updatePoly: function _updatePoly(t, i) {
8750      this._setPath(t, $(t._parts, i));
8751    },
8752    _updateCircle: function _updateCircle(t) {
8753      var i = t._point,
8754          e = Math.max(Math.round(t._radius), 1),
8755          n = "a" + e + "," + (Math.max(Math.round(t._radiusY), 1) || e) + " 0 1,0 ",
8756          o = t._empty() ? "M0 0" : "M" + (i.x - e) + "," + i.y + n + 2 * e + ",0 " + n + 2 * -e + ",0 ";
8757
8758      this._setPath(t, o);
8759    },
8760    _setPath: function _setPath(t, i) {
8761      t._path.setAttribute("d", i);
8762    },
8763    _bringToFront: function _bringToFront(t) {
8764      hi(t._path);
8765    },
8766    _bringToBack: function _bringToBack(t) {
8767      ui(t._path);
8768    }
8769  });
8770
8771  function mn(t) {
8772    return Zt || Et ? new pn(t) : null;
8773  }
8774
8775  Et && pn.include(_n), Ki.include({
8776    getRenderer: function getRenderer(t) {
8777      var i = (i = t.options.renderer || this._getPaneRenderer(t.options.pane) || this.options.renderer || this._renderer) || (this._renderer = this._createRenderer());
8778
8779      return this.hasLayer(i) || this.addLayer(i), i;
8780    },
8781    _getPaneRenderer: function _getPaneRenderer(t) {
8782      if ("overlayPane" === t || void 0 === t) return !1;
8783      var i = this._paneRenderers[t];
8784      return void 0 === i && (i = this._createRenderer({
8785        pane: t
8786      }), this._paneRenderers[t] = i), i;
8787    },
8788    _createRenderer: function _createRenderer(t) {
8789      return this.options.preferCanvas && ln(t) || mn(t);
8790    }
8791  });
8792  var fn = Re.extend({
8793    initialize: function initialize(t, i) {
8794      Re.prototype.initialize.call(this, this._boundsToLatLngs(t), i);
8795    },
8796    setBounds: function setBounds(t) {
8797      return this.setLatLngs(this._boundsToLatLngs(t));
8798    },
8799    _boundsToLatLngs: function _boundsToLatLngs(t) {
8800      return [(t = N(t)).getSouthWest(), t.getNorthWest(), t.getNorthEast(), t.getSouthEast()];
8801    }
8802  });
8803  pn.create = dn, pn.pointsToPath = $, Ne.geometryToLayer = De, Ne.coordsToLatLng = We, Ne.coordsToLatLngs = He, Ne.latLngToCoords = Fe, Ne.latLngsToCoords = Ue, Ne.getFeature = Ve, Ne.asFeature = qe, Ki.mergeOptions({
8804    boxZoom: !0
8805  });
8806  var gn = ie.extend({
8807    initialize: function initialize(t) {
8808      this._map = t, this._container = t._container, this._pane = t._panes.overlayPane, this._resetStateTimeout = 0, t.on("unload", this._destroy, this);
8809    },
8810    addHooks: function addHooks() {
8811      zi(this._container, "mousedown", this._onMouseDown, this);
8812    },
8813    removeHooks: function removeHooks() {
8814      Si(this._container, "mousedown", this._onMouseDown, this);
8815    },
8816    moved: function moved() {
8817      return this._moved;
8818    },
8819    _destroy: function _destroy() {
8820      ri(this._pane), delete this._pane;
8821    },
8822    _resetState: function _resetState() {
8823      this._resetStateTimeout = 0, this._moved = !1;
8824    },
8825    _clearDeferredResetState: function _clearDeferredResetState() {
8826      0 !== this._resetStateTimeout && (clearTimeout(this._resetStateTimeout), this._resetStateTimeout = 0);
8827    },
8828    _onMouseDown: function _onMouseDown(t) {
8829      if (!t.shiftKey || 1 !== t.which && 1 !== t.button) return !1;
8830      this._clearDeferredResetState(), this._resetState(), Xt(), xi(), this._startPoint = this._map.mouseEventToContainerPoint(t), zi(document, {
8831        contextmenu: Ni,
8832        mousemove: this._onMouseMove,
8833        mouseup: this._onMouseUp,
8834        keydown: this._onKeyDown
8835      }, this);
8836    },
8837    _onMouseMove: function _onMouseMove(t) {
8838      this._moved || (this._moved = !0, this._box = si("div", "leaflet-zoom-box", this._container), ci(this._container, "leaflet-crosshair"), this._map.fire("boxzoomstart")), this._point = this._map.mouseEventToContainerPoint(t);
8839      var i = new I(this._point, this._startPoint),
8840          e = i.getSize();
8841      vi(this._box, i.min), this._box.style.width = e.x + "px", this._box.style.height = e.y + "px";
8842    },
8843    _finish: function _finish() {
8844      this._moved && (ri(this._box), _i(this._container, "leaflet-crosshair")), Jt(), wi(), Si(document, {
8845        contextmenu: Ni,
8846        mousemove: this._onMouseMove,
8847        mouseup: this._onMouseUp,
8848        keydown: this._onKeyDown
8849      }, this);
8850    },
8851    _onMouseUp: function _onMouseUp(t) {
8852      var i;
8853      1 !== t.which && 1 !== t.button || (this._finish(), this._moved && (this._clearDeferredResetState(), this._resetStateTimeout = setTimeout(p(this._resetState, this), 0), i = new R(this._map.containerPointToLatLng(this._startPoint), this._map.containerPointToLatLng(this._point)), this._map.fitBounds(i).fire("boxzoomend", {
8854        boxZoomBounds: i
8855      })));
8856    },
8857    _onKeyDown: function _onKeyDown(t) {
8858      27 === t.keyCode && this._finish();
8859    }
8860  });
8861  Ki.addInitHook("addHandler", "boxZoom", gn), Ki.mergeOptions({
8862    doubleClickZoom: !0
8863  });
8864  var vn = ie.extend({
8865    addHooks: function addHooks() {
8866      this._map.on("dblclick", this._onDoubleClick, this);
8867    },
8868    removeHooks: function removeHooks() {
8869      this._map.off("dblclick", this._onDoubleClick, this);
8870    },
8871    _onDoubleClick: function _onDoubleClick(t) {
8872      var i = this._map,
8873          e = i.getZoom(),
8874          n = i.options.zoomDelta,
8875          o = t.originalEvent.shiftKey ? e - n : e + n;
8876      "center" === i.options.doubleClickZoom ? i.setZoom(o) : i.setZoomAround(t.containerPoint, o);
8877    }
8878  });
8879  Ki.addInitHook("addHandler", "doubleClickZoom", vn), Ki.mergeOptions({
8880    dragging: !0,
8881    inertia: !st,
8882    inertiaDeceleration: 3400,
8883    inertiaMaxSpeed: 1 / 0,
8884    easeLinearity: .2,
8885    worldCopyJump: !1,
8886    maxBoundsViscosity: 0
8887  });
8888  var yn = ie.extend({
8889    addHooks: function addHooks() {
8890      var t;
8891      this._draggable || (t = this._map, this._draggable = new ae(t._mapPane, t._container), this._draggable.on({
8892        dragstart: this._onDragStart,
8893        drag: this._onDrag,
8894        dragend: this._onDragEnd
8895      }, this), this._draggable.on("predrag", this._onPreDragLimit, this), t.options.worldCopyJump && (this._draggable.on("predrag", this._onPreDragWrap, this), t.on("zoomend", this._onZoomEnd, this), t.whenReady(this._onZoomEnd, this))), ci(this._map._container, "leaflet-grab leaflet-touch-drag"), this._draggable.enable(), this._positions = [], this._times = [];
8896    },
8897    removeHooks: function removeHooks() {
8898      _i(this._map._container, "leaflet-grab"), _i(this._map._container, "leaflet-touch-drag"), this._draggable.disable();
8899    },
8900    moved: function moved() {
8901      return this._draggable && this._draggable._moved;
8902    },
8903    moving: function moving() {
8904      return this._draggable && this._draggable._moving;
8905    },
8906    _onDragStart: function _onDragStart() {
8907      var t,
8908          i = this._map;
8909      i._stop(), this._map.options.maxBounds && this._map.options.maxBoundsViscosity ? (t = N(this._map.options.maxBounds), this._offsetLimit = O(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1), this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())), this._viscosity = Math.min(1, Math.max(0, this._map.options.maxBoundsViscosity))) : this._offsetLimit = null, i.fire("movestart").fire("dragstart"), i.options.inertia && (this._positions = [], this._times = []);
8910    },
8911    _onDrag: function _onDrag(t) {
8912      var i, e;
8913      this._map.options.inertia && (i = this._lastTime = +new Date(), e = this._lastPos = this._draggable._absPos || this._draggable._newPos, this._positions.push(e), this._times.push(i), this._prunePositions(i)), this._map.fire("move", t).fire("drag", t);
8914    },
8915    _prunePositions: function _prunePositions(t) {
8916      for (; 1 < this._positions.length && 50 < t - this._times[0];) {
8917        this._positions.shift(), this._times.shift();
8918      }
8919    },
8920    _onZoomEnd: function _onZoomEnd() {
8921      var t = this._map.getSize().divideBy(2),
8922          i = this._map.latLngToLayerPoint([0, 0]);
8923
8924      this._initialWorldOffset = i.subtract(t).x, this._worldWidth = this._map.getPixelWorldBounds().getSize().x;
8925    },
8926    _viscousLimit: function _viscousLimit(t, i) {
8927      return t - (t - i) * this._viscosity;
8928    },
8929    _onPreDragLimit: function _onPreDragLimit() {
8930      var t, i;
8931      this._viscosity && this._offsetLimit && (t = this._draggable._newPos.subtract(this._draggable._startPos), i = this._offsetLimit, t.x < i.min.x && (t.x = this._viscousLimit(t.x, i.min.x)), t.y < i.min.y && (t.y = this._viscousLimit(t.y, i.min.y)), t.x > i.max.x && (t.x = this._viscousLimit(t.x, i.max.x)), t.y > i.max.y && (t.y = this._viscousLimit(t.y, i.max.y)), this._draggable._newPos = this._draggable._startPos.add(t));
8932    },
8933    _onPreDragWrap: function _onPreDragWrap() {
8934      var t = this._worldWidth,
8935          i = Math.round(t / 2),
8936          e = this._initialWorldOffset,
8937          n = this._draggable._newPos.x,
8938          o = (n - i + e) % t + i - e,
8939          s = (n + i + e) % t - i - e,
8940          r = Math.abs(o + e) < Math.abs(s + e) ? o : s;
8941      this._draggable._absPos = this._draggable._newPos.clone(), this._draggable._newPos.x = r;
8942    },
8943    _onDragEnd: function _onDragEnd(t) {
8944      var i,
8945          e,
8946          n,
8947          o,
8948          s,
8949          r,
8950          a,
8951          h,
8952          u,
8953          l = this._map,
8954          c = l.options,
8955          _ = !c.inertia || this._times.length < 2;
8956
8957      l.fire("dragend", t), _ ? l.fire("moveend") : (this._prunePositions(+new Date()), i = this._lastPos.subtract(this._positions[0]), e = (this._lastTime - this._times[0]) / 1e3, n = c.easeLinearity, s = (o = i.multiplyBy(n / e)).distanceTo([0, 0]), r = Math.min(c.inertiaMaxSpeed, s), a = o.multiplyBy(r / s), h = r / (c.inertiaDeceleration * n), (u = a.multiplyBy(-h / 2).round()).x || u.y ? (u = l._limitOffset(u, l.options.maxBounds), M(function () {
8958        l.panBy(u, {
8959          duration: h,
8960          easeLinearity: n,
8961          noMoveStart: !0,
8962          animate: !0
8963        });
8964      })) : l.fire("moveend"));
8965    }
8966  });
8967  Ki.addInitHook("addHandler", "dragging", yn), Ki.mergeOptions({
8968    keyboard: !0,
8969    keyboardPanDelta: 80
8970  });
8971  var xn = ie.extend({
8972    keyCodes: {
8973      left: [37],
8974      right: [39],
8975      down: [40],
8976      up: [38],
8977      zoomIn: [187, 107, 61, 171],
8978      zoomOut: [189, 109, 54, 173]
8979    },
8980    initialize: function initialize(t) {
8981      this._map = t, this._setPanDelta(t.options.keyboardPanDelta), this._setZoomDelta(t.options.zoomDelta);
8982    },
8983    addHooks: function addHooks() {
8984      var t = this._map._container;
8985      t.tabIndex <= 0 && (t.tabIndex = "0"), zi(t, {
8986        focus: this._onFocus,
8987        blur: this._onBlur,
8988        mousedown: this._onMouseDown
8989      }, this), this._map.on({
8990        focus: this._addHooks,
8991        blur: this._removeHooks
8992      }, this);
8993    },
8994    removeHooks: function removeHooks() {
8995      this._removeHooks(), Si(this._map._container, {
8996        focus: this._onFocus,
8997        blur: this._onBlur,
8998        mousedown: this._onMouseDown
8999      }, this), this._map.off({
9000        focus: this._addHooks,
9001        blur: this._removeHooks
9002      }, this);
9003    },
9004    _onMouseDown: function _onMouseDown() {
9005      var t, i, e, n;
9006      this._focused || (t = document.body, i = document.documentElement, e = t.scrollTop || i.scrollTop, n = t.scrollLeft || i.scrollLeft, this._map._container.focus(), window.scrollTo(n, e));
9007    },
9008    _onFocus: function _onFocus() {
9009      this._focused = !0, this._map.fire("focus");
9010    },
9011    _onBlur: function _onBlur() {
9012      this._focused = !1, this._map.fire("blur");
9013    },
9014    _setPanDelta: function _setPanDelta(t) {
9015      for (var i = this._panKeys = {}, e = this.keyCodes, n = 0, o = e.left.length; n < o; n++) {
9016        i[e.left[n]] = [-1 * t, 0];
9017      }
9018
9019      for (n = 0, o = e.right.length; n < o; n++) {
9020        i[e.right[n]] = [t, 0];
9021      }
9022
9023      for (n = 0, o = e.down.length; n < o; n++) {
9024        i[e.down[n]] = [0, t];
9025      }
9026
9027      for (n = 0, o = e.up.length; n < o; n++) {
9028        i[e.up[n]] = [0, -1 * t];
9029      }
9030    },
9031    _setZoomDelta: function _setZoomDelta(t) {
9032      for (var i = this._zoomKeys = {}, e = this.keyCodes, n = 0, o = e.zoomIn.length; n < o; n++) {
9033        i[e.zoomIn[n]] = t;
9034      }
9035
9036      for (n = 0, o = e.zoomOut.length; n < o; n++) {
9037        i[e.zoomOut[n]] = -t;
9038      }
9039    },
9040    _addHooks: function _addHooks() {
9041      zi(document, "keydown", this._onKeyDown, this);
9042    },
9043    _removeHooks: function _removeHooks() {
9044      Si(document, "keydown", this._onKeyDown, this);
9045    },
9046    _onKeyDown: function _onKeyDown(t) {
9047      if (!(t.altKey || t.ctrlKey || t.metaKey)) {
9048        var i,
9049            e = t.keyCode,
9050            n = this._map;
9051        if (e in this._panKeys) n._panAnim && n._panAnim._inProgress || (i = this._panKeys[e], t.shiftKey && (i = A(i).multiplyBy(3)), n.panBy(i), n.options.maxBounds && n.panInsideBounds(n.options.maxBounds));else if (e in this._zoomKeys) n.setZoom(n.getZoom() + (t.shiftKey ? 3 : 1) * this._zoomKeys[e]);else {
9052          if (27 !== e || !n._popup || !n._popup.options.closeOnEscapeKey) return;
9053          n.closePopup();
9054        }
9055        Ni(t);
9056      }
9057    }
9058  });
9059  Ki.addInitHook("addHandler", "keyboard", xn), Ki.mergeOptions({
9060    scrollWheelZoom: !0,
9061    wheelDebounceTime: 40,
9062    wheelPxPerZoomLevel: 60
9063  });
9064  var wn = ie.extend({
9065    addHooks: function addHooks() {
9066      zi(this._map._container, "wheel", this._onWheelScroll, this), this._delta = 0;
9067    },
9068    removeHooks: function removeHooks() {
9069      Si(this._map._container, "wheel", this._onWheelScroll, this);
9070    },
9071    _onWheelScroll: function _onWheelScroll(t) {
9072      var i = Wi(t),
9073          e = this._map.options.wheelDebounceTime;
9074      this._delta += i, this._lastMousePos = this._map.mouseEventToContainerPoint(t), this._startTime || (this._startTime = +new Date());
9075      var n = Math.max(e - (new Date() - this._startTime), 0);
9076      clearTimeout(this._timer), this._timer = setTimeout(p(this._performZoom, this), n), Ni(t);
9077    },
9078    _performZoom: function _performZoom() {
9079      var t = this._map,
9080          i = t.getZoom(),
9081          e = this._map.options.zoomSnap || 0;
9082
9083      t._stop();
9084
9085      var n = this._delta / (4 * this._map.options.wheelPxPerZoomLevel),
9086          o = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(n)))) / Math.LN2,
9087          s = e ? Math.ceil(o / e) * e : o,
9088          r = t._limitZoom(i + (0 < this._delta ? s : -s)) - i;
9089      this._delta = 0, this._startTime = null, r && ("center" === t.options.scrollWheelZoom ? t.setZoom(i + r) : t.setZoomAround(this._lastMousePos, i + r));
9090    }
9091  });
9092  Ki.addInitHook("addHandler", "scrollWheelZoom", wn), Ki.mergeOptions({
9093    tap: !0,
9094    tapTolerance: 15
9095  });
9096  var Pn = ie.extend({
9097    addHooks: function addHooks() {
9098      zi(this._map._container, "touchstart", this._onDown, this);
9099    },
9100    removeHooks: function removeHooks() {
9101      Si(this._map._container, "touchstart", this._onDown, this);
9102    },
9103    _onDown: function _onDown(t) {
9104      if (t.touches) {
9105        if (Ri(t), this._fireClick = !0, 1 < t.touches.length) return this._fireClick = !1, void clearTimeout(this._holdTimeout);
9106        var i = t.touches[0],
9107            e = i.target;
9108        this._startPos = this._newPos = new k(i.clientX, i.clientY), e.tagName && "a" === e.tagName.toLowerCase() && ci(e, "leaflet-active"), this._holdTimeout = setTimeout(p(function () {
9109          this._isTapValid() && (this._fireClick = !1, this._onUp(), this._simulateEvent("contextmenu", i));
9110        }, this), 1e3), this._simulateEvent("mousedown", i), zi(document, {
9111          touchmove: this._onMove,
9112          touchend: this._onUp
9113        }, this);
9114      }
9115    },
9116    _onUp: function _onUp(t) {
9117      var i, e;
9118      clearTimeout(this._holdTimeout), Si(document, {
9119        touchmove: this._onMove,
9120        touchend: this._onUp
9121      }, this), this._fireClick && t && t.changedTouches && ((e = (i = t.changedTouches[0]).target) && e.tagName && "a" === e.tagName.toLowerCase() && _i(e, "leaflet-active"), this._simulateEvent("mouseup", i), this._isTapValid() && this._simulateEvent("click", i));
9122    },
9123    _isTapValid: function _isTapValid() {
9124      return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
9125    },
9126    _onMove: function _onMove(t) {
9127      var i = t.touches[0];
9128      this._newPos = new k(i.clientX, i.clientY), this._simulateEvent("mousemove", i);
9129    },
9130    _simulateEvent: function _simulateEvent(t, i) {
9131      var e = document.createEvent("MouseEvents");
9132      e._simulated = !0, i.target._simulatedClick = !0, e.initMouseEvent(t, !0, !0, window, 1, i.screenX, i.screenY, i.clientX, i.clientY, !1, !1, !1, !1, 0, null), i.target.dispatchEvent(e);
9133    }
9134  });
9135  !bt || Lt && !ct || Ki.addInitHook("addHandler", "tap", Pn), Ki.mergeOptions({
9136    touchZoom: bt && !st,
9137    bounceAtZoomLimits: !0
9138  });
9139  var Ln = ie.extend({
9140    addHooks: function addHooks() {
9141      ci(this._map._container, "leaflet-touch-zoom"), zi(this._map._container, "touchstart", this._onTouchStart, this);
9142    },
9143    removeHooks: function removeHooks() {
9144      _i(this._map._container, "leaflet-touch-zoom"), Si(this._map._container, "touchstart", this._onTouchStart, this);
9145    },
9146    _onTouchStart: function _onTouchStart(t) {
9147      var i,
9148          e,
9149          n = this._map;
9150      !t.touches || 2 !== t.touches.length || n._animatingZoom || this._zooming || (i = n.mouseEventToContainerPoint(t.touches[0]), e = n.mouseEventToContainerPoint(t.touches[1]), this._centerPoint = n.getSize()._divideBy(2), this._startLatLng = n.containerPointToLatLng(this._centerPoint), "center" !== n.options.touchZoom && (this._pinchStartLatLng = n.containerPointToLatLng(i.add(e)._divideBy(2))), this._startDist = i.distanceTo(e), this._startZoom = n.getZoom(), this._moved = !1, this._zooming = !0, n._stop(), zi(document, "touchmove", this._onTouchMove, this), zi(document, "touchend", this._onTouchEnd, this), Ri(t));
9151    },
9152    _onTouchMove: function _onTouchMove(t) {
9153      if (t.touches && 2 === t.touches.length && this._zooming) {
9154        var i = this._map,
9155            e = i.mouseEventToContainerPoint(t.touches[0]),
9156            n = i.mouseEventToContainerPoint(t.touches[1]),
9157            o = e.distanceTo(n) / this._startDist;
9158
9159        if (this._zoom = i.getScaleZoom(o, this._startZoom), !i.options.bounceAtZoomLimits && (this._zoom < i.getMinZoom() && o < 1 || this._zoom > i.getMaxZoom() && 1 < o) && (this._zoom = i._limitZoom(this._zoom)), "center" === i.options.touchZoom) {
9160          if (this._center = this._startLatLng, 1 == o) return;
9161        } else {
9162          var s = e._add(n)._divideBy(2)._subtract(this._centerPoint);
9163
9164          if (1 == o && 0 === s.x && 0 === s.y) return;
9165          this._center = i.unproject(i.project(this._pinchStartLatLng, this._zoom).subtract(s), this._zoom);
9166        }
9167
9168        this._moved || (i._moveStart(!0, !1), this._moved = !0), z(this._animRequest);
9169        var r = p(i._move, i, this._center, this._zoom, {
9170          pinch: !0,
9171          round: !1
9172        });
9173        this._animRequest = M(r, this, !0), Ri(t);
9174      }
9175    },
9176    _onTouchEnd: function _onTouchEnd() {
9177      this._moved && this._zooming ? (this._zooming = !1, z(this._animRequest), Si(document, "touchmove", this._onTouchMove, this), Si(document, "touchend", this._onTouchEnd, this), this._map.options.zoomAnimation ? this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), !0, this._map.options.zoomSnap) : this._map._resetView(this._center, this._map._limitZoom(this._zoom))) : this._zooming = !1;
9178    }
9179  });
9180  Ki.addInitHook("addHandler", "touchZoom", Ln), Ki.BoxZoom = gn, Ki.DoubleClickZoom = vn, Ki.Drag = yn, Ki.Keyboard = xn, Ki.ScrollWheelZoom = wn, Ki.Tap = Pn, Ki.TouchZoom = Ln, t.version = "1.7.1", t.Control = Xi, t.control = Yi, t.Browser = Bt, t.Evented = E, t.Mixin = ne, t.Util = C, t.Class = S, t.Handler = ie, t.extend = h, t.bind = p, t.stamp = m, t.setOptions = c, t.DomEvent = qi, t.DomUtil = Mi, t.PosAnimation = Gi, t.Draggable = ae, t.LineUtil = fe, t.PolyUtil = ye, t.Point = k, t.point = A, t.Bounds = I, t.bounds = O, t.Transformation = q, t.transformation = G, t.Projection = Pe, t.LatLng = D, t.latLng = j, t.LatLngBounds = R, t.latLngBounds = N, t.CRS = H, t.GeoJSON = Ne, t.geoJSON = Ke, t.geoJson = Ye, t.Layer = Me, t.LayerGroup = ze, t.layerGroup = function (t, i) {
9181    return new ze(t, i);
9182  }, t.FeatureGroup = Ce, t.featureGroup = function (t, i) {
9183    return new Ce(t, i);
9184  }, t.ImageOverlay = Xe, t.imageOverlay = function (t, i, e) {
9185    return new Xe(t, i, e);
9186  }, t.VideoOverlay = Je, t.videoOverlay = function (t, i, e) {
9187    return new Je(t, i, e);
9188  }, t.SVGOverlay = $e, t.svgOverlay = function (t, i, e) {
9189    return new $e(t, i, e);
9190  }, t.DivOverlay = Qe, t.Popup = tn, t.popup = function (t, i) {
9191    return new tn(t, i);
9192  }, t.Tooltip = en, t.tooltip = function (t, i) {
9193    return new en(t, i);
9194  }, t.Icon = Se, t.icon = function (t) {
9195    return new Se(t);
9196  }, t.DivIcon = nn, t.divIcon = function (t) {
9197    return new nn(t);
9198  }, t.Marker = ke, t.marker = function (t, i) {
9199    return new ke(t, i);
9200  }, t.TileLayer = sn, t.tileLayer = rn, t.GridLayer = on, t.gridLayer = function (t) {
9201    return new on(t);
9202  }, t.SVG = pn, t.svg = mn, t.Renderer = hn, t.Canvas = un, t.canvas = ln, t.Path = Be, t.CircleMarker = Ae, t.circleMarker = function (t, i) {
9203    return new Ae(t, i);
9204  }, t.Circle = Ie, t.circle = function (t, i, e) {
9205    return new Ie(t, i, e);
9206  }, t.Polyline = Oe, t.polyline = function (t, i) {
9207    return new Oe(t, i);
9208  }, t.Polygon = Re, t.polygon = function (t, i) {
9209    return new Re(t, i);
9210  }, t.Rectangle = fn, t.rectangle = function (t, i) {
9211    return new fn(t, i);
9212  }, t.Map = Ki, t.map = function (t, i) {
9213    return new Ki(t, i);
9214  };
9215  var bn = window.L;
9216  t.noConflict = function () {
9217    return window.L = bn, this;
9218  }, window.L = t;
9219});
9220
9221},{}],5:[function(require,module,exports){
9222"use strict";
9223
9224L.Control.SleepMapControl = L.Control.extend({
9225  initialize: function initialize(opts) {
9226    L.setOptions(this, opts);
9227  },
9228  options: {
9229    position: 'topright',
9230    prompt: 'disable map',
9231    styles: {
9232      'backgroundColor': 'white',
9233      'padding': '5px',
9234      'border': '2px solid gray'
9235    }
9236  },
9237  buildContainer: function buildContainer() {
9238    var self = this;
9239    var container = L.DomUtil.create('p', 'sleep-button');
9240
9241    var boundEvent = this._nonBoundEvent.bind(this);
9242
9243    container.innerHTML = this.options.prompt;
9244    L.DomEvent.addListener(container, 'click', boundEvent);
9245    L.DomEvent.addListener(container, 'touchstart', boundEvent);
9246    Object.keys(this.options.styles).map(function (key) {
9247      container.style[key] = self.options.styles[key];
9248    });
9249    return this._container = container;
9250  },
9251  onAdd: function onAdd() {
9252    return this._container || this.buildContainer();
9253  },
9254  _nonBoundEvent: function _nonBoundEvent(e) {
9255    L.DomEvent.stop(e);
9256    if (this._map) this._map.sleep._sleepMap();
9257    return false;
9258  }
9259});
9260
9261L.Control.sleepMapControl = function () {
9262  return new L.Control.SleepMapControl();
9263};
9264
9265L.Map.mergeOptions({
9266  sleep: true,
9267  sleepTime: 750,
9268  wakeTime: 750,
9269  wakeMessageTouch: 'Touch to Wake',
9270  sleepNote: true,
9271  hoverToWake: true,
9272  sleepOpacity: .7,
9273  sleepButton: L.Control.sleepMapControl
9274});
9275L.Map.Sleep = L.Handler.extend({
9276  addHooks: function addHooks() {
9277    var self = this;
9278    this.sleepNote = L.DomUtil.create('p', 'sleep-note', this._map._container);
9279    this._enterTimeout = null;
9280    this._exitTimeout = null;
9281    this._sleepButton = this._map.options.sleepButton();
9282
9283    if (this._map.tap) {
9284      this._map.addControl(this._sleepButton);
9285    }
9286
9287    var mapStyle = this._map._container.style;
9288    mapStyle.WebkitTransition += 'opacity .5s';
9289    mapStyle.MozTransition += 'opacity .5s';
9290
9291    this._setSleepNoteStyle();
9292
9293    this._sleepMap();
9294  },
9295  removeHooks: function removeHooks() {
9296    if (!this._map.scrollWheelZoom.enabled()) {
9297      this._map.scrollWheelZoom.enable();
9298    }
9299
9300    if (this._map.tap) {
9301      this._map.touchZoom.enable();
9302
9303      this._map.dragging.enable();
9304
9305      this._map.tap.enable();
9306    }
9307
9308    L.DomUtil.setOpacity(this._map._container, 1);
9309    L.DomUtil.setOpacity(this.sleepNote, 0);
9310
9311    this._removeSleepingListeners();
9312
9313    this._removeAwakeListeners();
9314  },
9315  _setSleepNoteStyle: function _setSleepNoteStyle() {
9316    var noteString = '';
9317    var style = this.sleepNote.style;
9318
9319    if (this._map.tap) {
9320      noteString = this._map.options.wakeMessageTouch;
9321    } else if (this._map.options.wakeMessage) {
9322      noteString = this._map.options.wakeMessage;
9323    } else if (this._map.options.hoverToWake) {
9324      noteString = 'click or hover to wake';
9325    } else {
9326      noteString = 'click to wake';
9327    }
9328
9329    if (this._map.options.sleepNote) {
9330      this.sleepNote.innerHTML = noteString;
9331      style.pointerEvents = 'none';
9332      style.maxWidth = '150px';
9333      style.transitionDuration = '.2s';
9334      style.zIndex = 5000;
9335      style.margin = 'auto';
9336      style.textAlign = 'center';
9337      style.borderRadius = '4px';
9338      style.top = '50%';
9339      style.position = 'relative';
9340      style.padding = '5px';
9341      style.border = 'solid 2px black';
9342      style.background = 'white';
9343
9344      if (this._map.options.sleepNoteStyle) {
9345        var noteStyleOverrides = this._map.options.sleepNoteStyle;
9346        Object.keys(noteStyleOverrides).map(function (key) {
9347          style[key] = noteStyleOverrides[key];
9348        });
9349      }
9350    }
9351  },
9352  _wakeMap: function _wakeMap(e) {
9353    this._stopWaiting();
9354
9355    this._map.scrollWheelZoom.enable();
9356
9357    if (this._map.tap) {
9358      this._map.touchZoom.enable();
9359
9360      this._map.dragging.enable();
9361
9362      this._map.addControl(this._sleepButton);
9363    }
9364
9365    L.DomUtil.setOpacity(this._map._container, 1);
9366    this.sleepNote.style.opacity = 0;
9367
9368    this._addAwakeListeners();
9369  },
9370  _sleepMap: function _sleepMap() {
9371    this._stopWaiting();
9372
9373    this._map.scrollWheelZoom.disable();
9374
9375    if (this._map.tap) {
9376      this._map.touchZoom.disable();
9377
9378      this._map.dragging.disable();
9379
9380      this._map.tap.disable();
9381
9382      this._map.removeControl(this._sleepButton);
9383    }
9384
9385    L.DomUtil.setOpacity(this._map._container, this._map.options.sleepOpacity);
9386    this.sleepNote.style.opacity = this._map.options.sleepNoteStyle && this._map.options.sleepNoteStyle.opacity ? this._map.options.sleepNoteStyle.opacity : .6;
9387
9388    this._addSleepingListeners();
9389  },
9390  _wakePending: function _wakePending() {
9391    this._map.once('mousedown', this._wakeMap, this);
9392
9393    if (this._map.options.hoverToWake) {
9394      var self = this;
9395
9396      this._map.once('mouseout', this._sleepMap, this);
9397
9398      self._enterTimeout = setTimeout(function () {
9399        self._map.off('mouseout', self._sleepMap, self);
9400
9401        self._wakeMap();
9402      }, self._map.options.wakeTime);
9403    }
9404  },
9405  _sleepPending: function _sleepPending() {
9406    var self = this;
9407
9408    self._map.once('mouseover', self._wakeMap, self);
9409
9410    self._exitTimeout = setTimeout(function () {
9411      self._map.off('mouseover', self._wakeMap, self);
9412
9413      self._sleepMap();
9414    }, self._map.options.sleepTime);
9415  },
9416  _addSleepingListeners: function _addSleepingListeners() {
9417    this._map.once('mouseover', this._wakePending, this);
9418
9419    this._map.tap && this._map.once('click', this._wakeMap, this);
9420  },
9421  _addAwakeListeners: function _addAwakeListeners() {
9422    this._map.once('mouseout', this._sleepPending, this);
9423  },
9424  _removeSleepingListeners: function _removeSleepingListeners() {
9425    this._map.options.hoverToWake && this._map.off('mouseover', this._wakePending, this);
9426
9427    this._map.off('mousedown', this._wakeMap, this);
9428
9429    this._map.tap && this._map.off('click', this._wakeMap, this);
9430  },
9431  _removeAwakeListeners: function _removeAwakeListeners() {
9432    this._map.off('mouseout', this._sleepPending, this);
9433  },
9434  _stopWaiting: function _stopWaiting() {
9435    this._removeSleepingListeners();
9436
9437    this._removeAwakeListeners();
9438
9439    var self = this;
9440    if (this._enterTimeout) clearTimeout(self._enterTimeout);
9441    if (this._exitTimeout) clearTimeout(self._exitTimeout);
9442    this._enterTimeout = null;
9443    this._exitTimeout = null;
9444  }
9445});
9446L.Map.addInitHook('addHandler', 'sleep', L.Map.Sleep);
9447
9448},{}],6:[function(require,module,exports){
9449"use strict";
9450
9451function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
9452
9453!function (e) {
9454  var t = {};
9455
9456  function n(i) {
9457    if (t[i]) return t[i].exports;
9458    var s = t[i] = {
9459      i: i,
9460      l: !1,
9461      exports: {}
9462    };
9463    return e[i].call(s.exports, s, s.exports, n), s.l = !0, s.exports;
9464  }
9465
9466  n.m = e, n.c = t, n.d = function (e, t, i) {
9467    n.o(e, t) || Object.defineProperty(e, t, {
9468      enumerable: !0,
9469      get: i
9470    });
9471  }, n.r = function (e) {
9472    "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
9473      value: "Module"
9474    }), Object.defineProperty(e, "__esModule", {
9475      value: !0
9476    });
9477  }, n.t = function (e, t) {
9478    if (1 & t && (e = n(e)), 8 & t) return e;
9479    if (4 & t && "object" == _typeof(e) && e && e.__esModule) return e;
9480    var i = Object.create(null);
9481    if (n.r(i), Object.defineProperty(i, "default", {
9482      enumerable: !0,
9483      value: e
9484    }), 2 & t && "string" != typeof e) for (var s in e) {
9485      n.d(i, s, function (t) {
9486        return e[t];
9487      }.bind(null, s));
9488    }
9489    return i;
9490  }, n.n = function (e) {
9491    var t = e && e.__esModule ? function () {
9492      return e.default;
9493    } : function () {
9494      return e;
9495    };
9496    return n.d(t, "a", t), t;
9497  }, n.o = function (e, t) {
9498    return Object.prototype.hasOwnProperty.call(e, t);
9499  }, n.p = "", n(n.s = 1);
9500}([function (e) {
9501  e.exports = JSON.parse('{"a":"8.5.20"}');
9502}, function (e, t, n) {
9503  "use strict";
9504
9505  n.r(t);
9506  var i = n(0),
9507      s = {
9508    hooks: {},
9509    extensions: [],
9510    wrappers: [],
9511    navbar: {
9512      add: !0,
9513      sticky: !0,
9514      title: "Menu",
9515      titleLink: "parent"
9516    },
9517    onClick: {
9518      close: null,
9519      preventDefault: null,
9520      setSelected: !0
9521    },
9522    slidingSubmenus: !0
9523  },
9524      a = {
9525    classNames: {
9526      inset: "Inset",
9527      nolistview: "NoListview",
9528      nopanel: "NoPanel",
9529      panel: "Panel",
9530      selected: "Selected",
9531      vertical: "Vertical"
9532    },
9533    language: null,
9534    openingInterval: 25,
9535    panelNodetype: ["ul", "ol", "div"],
9536    transitionDuration: 400
9537  };
9538
9539  function o(e, t) {
9540    for (var n in "object" != r(e) && (e = {}), "object" != r(t) && (t = {}), t) {
9541      t.hasOwnProperty(n) && (void 0 === e[n] ? e[n] = t[n] : "object" == r(e[n]) && o(e[n], t[n]));
9542    }
9543
9544    return e;
9545  }
9546
9547  function r(e) {
9548    return {}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
9549  }
9550
9551  function c(e, t, n) {
9552    if ("function" == typeof t) {
9553      var i = t.call(e);
9554      if (void 0 !== i) return i;
9555    }
9556
9557    return null !== t && "function" != typeof t && void 0 !== t || void 0 === n ? t : n;
9558  }
9559
9560  function m(e, t, n) {
9561    var i = !1,
9562        s = function s(n) {
9563      void 0 !== n && n.target !== e || (i || (e.removeEventListener("transitionend", s), e.removeEventListener("webkitTransitionEnd", s), t.call(e)), i = !0);
9564    };
9565
9566    e.addEventListener("transitionend", s), e.addEventListener("webkitTransitionEnd", s), setTimeout(s, 1.1 * n);
9567  }
9568
9569  function l() {
9570    return "mm-" + d++;
9571  }
9572
9573  var d = 0;
9574
9575  function p(e) {
9576    return "mm-" == e.slice(0, 3) ? e.slice(3) : e;
9577  }
9578
9579  var u = {};
9580
9581  function f(e, t) {
9582    void 0 === u[t] && (u[t] = {}), o(u[t], e);
9583  }
9584
9585  var h = {
9586    Menu: "منو"
9587  },
9588      v = {
9589    Menu: "Menü"
9590  },
9591      b = {
9592    Menu: "Меню"
9593  };
9594
9595  function g(e) {
9596    var t = e.split("."),
9597        n = document.createElement(t.shift());
9598    return t.forEach(function (e) {
9599      n.classList.add(e);
9600    }), n;
9601  }
9602
9603  function _(e, t) {
9604    return Array.prototype.slice.call(e.querySelectorAll(t));
9605  }
9606
9607  function y(e, t) {
9608    var n = Array.prototype.slice.call(e.children);
9609    return t ? n.filter(function (e) {
9610      return e.matches(t);
9611    }) : n;
9612  }
9613
9614  function L(e, t) {
9615    for (var n = [], i = e.parentElement; i;) {
9616      n.push(i), i = i.parentElement;
9617    }
9618
9619    return t ? n.filter(function (e) {
9620      return e.matches(t);
9621    }) : n;
9622  }
9623
9624  function w(e) {
9625    return e.filter(function (e) {
9626      return !e.matches(".mm-hidden");
9627    });
9628  }
9629
9630  function E(e) {
9631    var t = [];
9632    return w(e).forEach(function (e) {
9633      t.push.apply(t, y(e, "a.mm-listitem__text"));
9634    }), t.filter(function (e) {
9635      return !e.matches(".mm-btn_next");
9636    });
9637  }
9638
9639  function x(e, t, n) {
9640    e.matches("." + t) && (e.classList.remove(t), e.classList.add(n));
9641  }
9642
9643  var P = {};
9644
9645  function k(e, t, n) {
9646    "number" == typeof e && (e = "(min-width: " + e + "px)"), P[e] = P[e] || [], P[e].push({
9647      yes: t,
9648      no: n
9649    });
9650  }
9651
9652  function S(e, t) {
9653    for (var n = t.matches ? "yes" : "no", i = 0; i < P[e].length; i++) {
9654      P[e][i][n]();
9655    }
9656  }
9657
9658  f({
9659    Menu: "Menu"
9660  }, "nl"), f(h, "fa"), f(v, "de"), f(b, "ru");
9661
9662  var M = function () {
9663    function e(t, n, i) {
9664      return this.opts = o(n, e.options), this.conf = o(i, e.configs), this._api = ["bind", "initPanel", "initListview", "openPanel", "closePanel", "closeAllPanels", "setSelected"], this.node = {}, this.vars = {}, this.hook = {}, this.clck = [], this.node.menu = "string" == typeof t ? document.querySelector(t) : t, "function" == typeof this._deprecatedWarnings && this._deprecatedWarnings(), this._initWrappers(), this._initAddons(), this._initExtensions(), this._initHooks(), this._initAPI(), this._initMenu(), this._initPanels(), this._initOpened(), this._initAnchors(), function () {
9665        var e = function e(_e2) {
9666          var t = window.matchMedia(_e2);
9667          S(_e2, t), t.onchange = function (n) {
9668            S(_e2, t);
9669          };
9670        };
9671
9672        for (var t in P) {
9673          e(t);
9674        }
9675      }(), this;
9676    }
9677
9678    return e.prototype.openPanel = function (e, t) {
9679      var n = this;
9680
9681      if (this.trigger("openPanel:before", [e]), e && (e.matches(".mm-panel") || (e = e.closest(".mm-panel")), e)) {
9682        if ("boolean" != typeof t && (t = !0), e.parentElement.matches(".mm-listitem_vertical")) {
9683          L(e, ".mm-listitem_vertical").forEach(function (e) {
9684            e.classList.add("mm-listitem_opened"), y(e, ".mm-panel").forEach(function (e) {
9685              e.classList.remove("mm-hidden");
9686            });
9687          });
9688          var i = L(e, ".mm-panel").filter(function (e) {
9689            return !e.parentElement.matches(".mm-listitem_vertical");
9690          });
9691          this.trigger("openPanel:start", [e]), i.length && this.openPanel
9691(i[0]), this.trigger("openPanel:finish", [e]);
9692        } else {
9693          if (e.matches(".mm-panel_opened")) return;
9694          var s = y(this.node.pnls, ".mm-panel"),
9695              a = y(this.node.pnls, ".mm-panel_opened")[0];
9696          s.filter(function (t) {
9697            return t !== e;
9698          }).forEach(function (e) {
9699            e.classList.remove("mm-panel_opened-parent");
9700          });
9701
9702          for (var o = e.mmParent; o;) {
9703            (o = o.closest(".mm-panel")) && (o.parentElement.matches(".mm-listitem_vertical") || o.classList.add("mm-panel_opened-parent"), o = o.mmParent);
9704          }
9705
9706          s.forEach(function (e) {
9707            e.classList.remove("mm-panel_highest");
9708          }), s.filter(function (e) {
9709            return e !== a;
9710          }).filter(function (t) {
9711            return t !== e;
9712          }).forEach(function (e) {
9713            e.classList.add("mm-hidden");
9714          }), e.classList.remove("mm-hidden");
9715
9716          var r = function r() {
9717            a && a.classList.remove("mm-panel_opened"), e.classList.add("mm-panel_opened"), e.matches(".mm-panel_opened-parent") ? (a && a.classList.add("mm-panel_highest"), e.classList.remove("mm-panel_opened-parent")) : (a && a.classList.add("mm-panel_opened-parent"), e.classList.add("mm-panel_highest")), n.trigger("openPanel:start", [e]);
9718          },
9719              c = function c() {
9720            a && (a.classList.remove("mm-panel_highest"), a.classList.add("mm-hidden")), e.classList.remove("mm-panel_highest"), n.trigger("openPanel:finish", [e]);
9721          };
9722
9723          t && !e.matches(".mm-panel_noanimation") ? setTimeout(function () {
9724            m(e, function () {
9725              c();
9726            }, n.conf.transitionDuration), r();
9727          }, this.conf.openingInterval) : (r(), c());
9728        }
9729
9730        this.trigger("openPanel:after", [e]);
9731      }
9732    }, e.prototype.closePanel = function (e) {
9733      this.trigger("closePanel:before", [e]);
9734      var t = e.parentElement;
9735      t.matches(".mm-listitem_vertical") && (t.classList.remove("mm-listitem_opened"), e.classList.add("mm-hidden"), this.trigger("closePanel", [e])), this.trigger("closePanel:after", [e]);
9736    }, e.prototype.closeAllPanels = function (e) {
9737      this.trigger("closeAllPanels:before"), this.node.pnls.querySelectorAll(".mm-listitem").forEach(function (e) {
9738        e.classList.remove("mm-listitem_selected"), e.classList.remove("mm-listitem_opened");
9739      });
9740      var t = y(this.node.pnls, ".mm-panel"),
9741          n = e || t[0];
9742      y(this.node.pnls, ".mm-panel").forEach(function (e) {
9743        e !== n && (e.classList.remove("mm-panel_opened"), e.classList.remove("mm-panel_opened-parent"), e.classList.remove("mm-panel_highest"), e.classList.add("mm-hidden"));
9744      }), this.openPanel(n, !1), this.trigger("closeAllPanels:after");
9745    }, e.prototype.togglePanel = function (e) {
9746      var t = e.parentElement;
9747      t.matches(".mm-listitem_vertical") && this[t.matches(".mm-listitem_opened") ? "closePanel" : "openPanel"](e);
9748    }, e.prototype.setSelected = function (e) {
9749      this.trigger("setSelected:before", [e]), _(this.node.menu, ".mm-listitem_selected").forEach(function (e) {
9750        e.classList.remove("mm-listitem_selected");
9751      }), e.classList.add("mm-listitem_selected"), this.trigger("setSelected:after", [e]);
9752    }, e.prototype.bind = function (e, t) {
9753      this.hook[e] = this.hook[e] || [], this.hook[e].push(t);
9754    }, e.prototype.trigger = function (e, t) {
9755      if (this.hook[e]) for (var n = 0, i = this.hook[e].length; n < i; n++) {
9756        this.hook[e][n].apply(this, t);
9757      }
9758    }, e.prototype._initAPI = function () {
9759      var e = this,
9760          t = this;
9761      this.API = {}, this._api.forEach(function (n) {
9762        e.API[n] = function () {
9763          var e = t[n].apply(t, arguments);
9764          return void 0 === e ? t.API : e;
9765        };
9766      }), this.node.menu.mmApi = this.API;
9767    }, e.prototype._initHooks = function () {
9768      for (var e in this.opts.hooks) {
9769        this.bind(e, this.opts.hooks[e]);
9770      }
9771    }, e.prototype._initWrappers = function () {
9772      this.trigger("initWrappers:before");
9773
9774      for (var t = 0; t < this.opts.wrappers.length; t++) {
9775        var n = e.wrappers[this.opts.wrappers[t]];
9776        "function" == typeof n && n.call(this);
9777      }
9778
9779      this.trigger("initWrappers:after");
9780    }, e.prototype._initAddons = function () {
9781      for (var t in this.trigger("initAddons:before"), e.addons) {
9782        e.addons[t].call(this);
9783      }
9784
9785      this.trigger("initAddons:after");
9786    }, e.prototype._initExtensions = function () {
9787      var e = this;
9788      this.trigger("initExtensions:before"), "array" == r(this.opts.extensions) && (this.opts.extensions = {
9789        all: this.opts.extensions
9790      }
9790), Object.keys(this.opts.extensions).forEach(function (t) {
9791        var n = e.opts.extensions[t].map(function (e) {
9792          return "mm-menu_" + e;
9793        });
9794        n.length && k(t, function () {
9795          n.forEach(function (t) {
9796            e.node.menu.classList.add(t);
9797          });
9798        }, function () {
9799          n.forEach(function (t) {
9800            e.node.menu.classList.remove(t);
9801          });
9802        });
9803      }), this.trigger("initExtensions:after");
9804    }, e.prototype._initMenu = function () {
9805      var e = this;
9806      this.trigger("initMenu:before"), this.node.wrpr = this.node.wrpr || this.node.menu.parentElement, this.node.wrpr.classList.add("mm-wrapper"), this.node.menu.id = this.node.menu.id || l();
9807      var t = g("div.mm-panels");
9808      y(this.node.menu).forEach(function (n) {
9809        e.conf.panelNodetype.indexOf(n.nodeName.toLowerCase()) > -1 && t.append(n);
9810      }), this.node.menu.append(t), this.node.pnls = t, this.node.menu.classList.add("mm-menu"), this.trigger("initMenu:after");
9811    }, e.prototype._initPanels = function () {
9812      var e = this;
9813      this.trigger("initPanels:before"), this.clck.push(function (t, n) {
9814        if (n.inMenu) {
9815          var i = t.getAttribute("href");
9816          if (i && i.length > 1 && "#" == i.slice(0, 1)) try {
9817            var s = _(e.node.menu, i)[0];
9818
9819            if (s && s.matches(".mm-panel")) return t.parentElement.matches(".mm-listitem_vertical") ? e.togglePanel(s) : e.openPanel(s), !0;
9820          } catch (e) {}
9821        }
9822      }), y(this.node.pnls).forEach(function (t) {
9823        e.initPanel(t);
9824      }), this.trigger("initPanels:after");
9825    }, e.prototype.initPanel = function (e) {
9826      var t = this,
9827          n = this.conf.panelNodetype.join(", ");
9828
9829      if (e.matches(n) && (e.matches(".mm-panel") || (e = this._initPanel(e)), e)) {
9830        var i = [];
9831        i.push.apply(i, y(e, "." + this.conf.classNames.panel)), y(e, ".mm-listview").forEach(function (e) {
9832          y(e, ".mm-listitem").forEach(function (e) {
9833            i.push.apply(i, y(e, n));
9834          });
9835        }), i.forEach(function (e) {
9836          t.initPanel(e);
9837        });
9838      }
9839    }, e.prototype._initPanel = function (e) {
9840      var t = this;
9841      if (this.trigger("initPanel:before", [e]), x(e, this.conf.classNames.panel, "mm-panel"), x(e, this.conf.classNames.nopanel, "mm-nopanel"), x(e, this.conf.classNames.inset, "mm-listview_inset"), e.matches(".mm-listview_inset") && e.classList.add("mm-nopanel"), e.matches(".mm-nopanel")) return null;
9842      var n = e.id || l(),
9843          i = e.matches("." + this.conf.classNames.vertical) || !this.opts.slidingSubmenus;
9844
9845      if (e.classList.remove(this.conf.classNames.vertical), e.matches("ul, ol")) {
9846        e.removeAttribute("id");
9847        var s = g("div");
9848        e.before(s), s.append(e), e = s;
9849      }
9850
9851      e.id = n, e.classList.add("mm-panel"), e.classList.add("mm-hidden");
9852      var a = [e.parentElement].filter(function (e) {
9853        return e.matches("li");
9854      })[0];
9855
9856      if (i ? a && a.classList.add("mm-listitem_vertical") : this.node.pnls.append(e), a && (a.mmChild = e, e.mmParent = a, a && a.matches(".mm-listitem") && !y(a, ".mm-btn").length)) {
9857        var o = y(a, ".mm-listitem__text")[0];
9858
9859        if (o) {
9860          var r = g("a.mm-btn.mm-btn_next.mm-listitem__btn");
9861          r.setAttribute("href", "#" + e.id), o.matches("span") ? (r.classList.add("mm-listitem__text"), r.innerHTML = o.innerHTML, a.insertBefore(r, o.nextElementSibling), o.remove()) : a.insertBefore(r, y(a, ".mm-panel")[0]);
9862        }
9863      }
9864
9865      return this._initNavbar(e), y(e, "ul, ol").forEach(function (e) {
9866        t.initListview(e);
9867      }), this.trigger("initPanel:after", [e]), e;
9868    }, e.prototype._initNavbar = function (e) {
9869      if (this.trigger("initNavbar:before", [e]), !y(e, ".mm-navbar").length) {
9870        var t = null,
9871            n = null;
9872
9873        if (e.getAttribute("data-mm-parent") ? n = _(this.node.pnls, e.getAttribute("data-mm-parent"))[0] : (t = e.mmParent) && (n = t.closest(".mm-panel")), !t || !t.matches(".mm-listitem_vertical")) {
9874          var i = g("div.mm-navbar");
9875
9876          if (this.opts.navbar.add ? this.opts.navbar.sticky && i.classList.add("mm-navbar_sticky") : i.classList.add("mm-hidden"), n) {
9877            var s = g("a.mm-btn.mm-btn_prev.mm-navbar__btn");
9878            s.setAttribute("href", "#" + n.id), i.append(s);
9879          }
9880
9881          var a = null;
9882          t ? a = y(t, ".mm-listitem__text")[0] : n && (a = _(n, 'a[href="#' + e.id + '"]')[0]);
9883          var o = g("a.mm-navbar__title"),
9884              r = g("span");
9885
9886          switch (o.append(r), r.innerHTML = e.getAttribute("data-mm-title") || (a ? a.textContent : "") || this.i18n(this.opts.navbar.title) || this.i18n("Menu"), this.opts.navbar.titleLink) {
9887            case "anchor":
9888              a && o.setAttribute("href", a.getAttribute("href"));
9889              break;
9890
9891            case "parent":
9892              n && o.setAttribute("href", "#" + n.id);
9893          }
9894
9895          i.append(o), e.prepend(i), this.trigger("initNavbar:after", [e]);
9896        }
9897      }
9898    }, e.prototype.initListview = function (e) {
9899      var t = this;
9900      this.trigger("initListview:before", [e]), x(e, this.conf.classNames.nolistview, "mm-nolistview"), e.matches(".mm-nolistview") || (e.classList.add("mm-listview"), y(e).forEach(function (e) {
9901        e.classList.add("mm-listitem"), x(e, t.conf.classNames.selected, "mm-listitem_selected"), y(e, "a, span").forEach(function (e) {
9902          e.matches(".mm-btn") || e.classList.add("mm-listitem__text");
9903        });
9904      })), this.trigger("initListview:after", [e]);
9905    }, e.prototype._initOpened = function () {
9906      this.trigger("initOpened:before");
9907      var e = this.node.pnls.querySelectorAll(".mm-listitem_selected"),
9908          t = null;
9909      e.forEach(function (e) {
9910        t = e, e.classList.remove("mm-listitem_selected");
9911      }), t && t.classList.add("mm-listitem_selected");
9912      var n = t ? t.closest(".mm-panel") : y(this.node.pnls, ".mm-panel")[0];
9913      this.openPanel(n, !1), this.trigger("initOpened:after");
9914    }, e.prototype._initAnchors = function () {
9915      var e = this;
9916      this.trigger("initAnchors:before"), document.addEventListener("click", function (t) {
9917        var n = t.target.closest("a[href]");
9918
9919        if (n) {
9920          for (var i = {
9921            inMenu: n.closest(".mm-menu") === e.node.menu,
9922            inListview: n.matches(".mm-listitem > a"),
9923            toExternal: n.matches('[rel="external"]') || n.matches('[target="_blank"]')
9924          }, s = {
9925            close: null,
9926            setSelected: null,
9927            preventDefault: "#" == n.getAttribute("href").slice(0, 1)
9928          }, a = 0; a < e.clck.length; a++) {
9929            var m = e.clck[a].call(e, n, i);
9930
9931            if (m) {
9932              if ("boolean" == typeof m) return void t.preventDefault();
9933              "object" == r(m) && (s = o(m, s));
9934            }
9935          }
9936
9937          i.inMenu && i.inListview && !i.toExternal && (c(n, e.opts.onClick.setSelected, s.setSelected) && e.setSelected(n.parentElement), c(n, e.opts.onClick.preventDefault, s.preventDefault) && t.preventDefault(), c(n, e.opts.onClick.close, s.close) && e.opts.offCanvas && "function" == typeof e.close && e.close());
9938        }
9939      }, !0), this.trigger("initAnchors:after");
9940    }, e.prototype.i18n = function (e) {
9941      return function (e, t) {
9942        return "string" == typeof t && void 0 !== u[t] && u[t][e] || e;
9943      }(e, this.conf.language);
9944    }, e.version = i.a, e.options = s, e.configs = a, e.addons = {}, e.wrappers = {}, e.node = {}, e.vars = {}, e;
9945  }(),
9946      A = {
9947    blockUI: !0,
9948    moveBackground: !0
9949  };
9950
9951  var T = {
9952    clone: !1,
9953    menu: {
9954      insertMethod: "prepend",
9955      insertSelector: "body"
9956    },
9957    page: {
9958      nodetype: "div",
9959      selector: null,
9960      noSelector: []
9961    }
9962  };
9963
9964  function C(e) {
9965    return e ? e.charAt(0).toUpperCase() + e.slice(1) : "";
9966  }
9967
9968  function N(e, t, n) {
9969    var i = t.split(".");
9970    e[t = "mmEvent" + C(i[0]) + C(i[1])] = e[t] || [], e[t].push(n), e.addEventListener(i[0], n);
9971  }
9972
9973  function H(e, t) {
9974    var n = t.split(".");
9975    t = "mmEvent" + C(n[0]) + C(n[1]), (e[t] || []).forEach(function (t) {
9976      e.removeEventListener(n[0], t);
9977    });
9978  }
9979
9980  M.options.offCanvas = A, M.configs.offCanvas = T;
9981  M.prototype.open = function () {
9982    var e = this;
9983    this.trigger("open:before"), this.vars.opened || (this._openSetup(), setTimeout(function () {
9984      e._openStart();
9985    }, this.conf.openingInterval), this.trigger("open:after"));
9986  }, M.prototype._openSetup = function () {
9987    var e = this,
9988        t = this.opts.offCanvas;
9989    this.closeAllOthers(), function (e, t, n) {
9990      var i = t.split(".");
9991      (e[t = "mmEvent" + C(i[0]) + C(i[1])] || []).forEach(function (e) {
9992        e(n || {});
9993      });
9994    }(window, "resize.page", {
9995      force: !0
9996    });
9997    var n = ["mm-wrapper_opened"];
9998    t.blockUI && n.push("mm-wrapper_blocking"), "modal" == t.blockUI && n.push("mm-wrapper_modal"), t.moveBackground && n.push("mm-wrapper_background"), n.forEach(function (t) {
9999      e.node.wrpr.classList.add(t);
10000    }), setTimeout(function () {
10001      e.vars.opened = !0;
10002    }, this.conf.openingInterval), this.node.menu.classList.add("mm-menu_opened");
10003  }, M.prototype._openStart = function () {
10004    var e = this;
10005    m(M.node.page, function () {
10006      e.trigger("open:finish");
10007    }, this.conf.transitionDuration), this.trigger("open:start"), this.node.wrpr.classList.add("mm-wrapper_opening");
10008  }, M.prototype.close = function () {
10009    var e = this;
10010    this.trigger("close:before"), this.vars.opened && (m(M.node.page, function () {
10011      e.node.menu.classList.remove("mm-menu_opened");
10012      ["mm-wrapper_opened", "mm-wrapper_blocking", "mm-wrapper_modal", "mm-wrapper_background"].forEach(function (t) {
10013        e.node.wrpr.classList.remove(t);
10014      }), e.vars.opened = !1, e.trigger("close:finish");
10015    }, this.conf.transitionDuration), this.trigger("close:start"), this.node.wrpr.classList.remove("mm-wrapper_opening"), this.trigger("close:after"));
10016  }, M.prototype.closeAllOthers = function () {
10017    var e = this;
10018
10019    _(document.body, ".mm-menu_offcanvas").forEach(function (t) {
10020      if (t !== e.node.menu) {
10021        var n = t.mmApi;
10022        n && n.close && n.close();
10023      }
10024    });
10025  }, M.prototype.setPage = function (e) {
10026    this.trigger("setPage:before", [e]);
10027    var t = this.conf.offCanvas;
10028
10029    if (!e) {
10030      var n = "string" == typeof t.page.selector ? _(document.body, t.page.selector) : y(document.body, t.page.nodetype);
10031
10032      if (n = n.filter(function (e) {
10033        return !e.matches(".mm-menu, .mm-wrapper__blocker");
10034      }), t.page.noSelector.length && (n = n.filter(function (e) {
10035        return !e.matches(t.page.noSelector.join(", "));
10036      })), n.length > 1) {
10037        var i = g("div");
10038        n[0].before(i), n.forEach(function (e) {
10039          i.append(e);
10040        }), n = [i];
10041      }
10042
10043      e = n[0];
10044    }
10045
10046    e.classList.add("mm-page"), e.classList.add("mm-slideout"), e.id = e.id || l(), M.node.page = e, this.trigger("setPage:after", [e]);
10047  };
10048
10049  var j = function j() {
10050    var e = this;
10051    H(document.body, "keydown.tabguard"), N(document.body, "keydown.tabguard", function (t) {
10052      9 == t.keyCode && e.node.wrpr.matches(".mm-wrapper_opened") && t.preventDefault();
10053    });
10054  },
10055      D = function D() {
10056    var e = this;
10057    this.trigger("initBlocker:before");
10058    var t = this.opts.offCanvas,
10059        n = this.conf.offCanvas;
10060
10061    if (t.blockUI) {
10062      if (!M.node.blck) {
10063        var i = g("div.mm-wrapper__blocker.mm-slideout");
10064        i.innerHTML = "<a></a>", document.querySelector(n.menu.insertSelector).append(i), M.node.blck = i;
10065      }
10066
10067      var s = function s(t) {
10068        t.preventDefault(), t.stopPropagation(), e.node.wrpr.matches(".mm-wrapper_modal") || e.close();
10069      };
10070
10071      M.node.blck.addEventListener("mousedown", s), M.node.blck.addEventListener("touchstart", s), M.node.blck.addEventListener("touchmove", s), this.trigger("initBlocker:after");
10072    }
10073  },
10074      O = {
10075    aria: !0,
10076    text: !0
10077  };
10078
10079  var I = {
10080    text: {
10081      closeMenu: "Close menu",
10082      closeSubmenu: "Close submenu",
10083      openSubmenu: "Open submenu",
10084      toggleSubmenu: "Toggle submenu"
10085    }
10086  },
10087      q = {
10088    "Close menu": "بستن منو",
10089    "Close submenu": "بستن زیرمنو",
10090    "Open submenu": "بازکردن زیرمنو",
10091    "Toggle submenu": "سوییچ زیرمنو"
10092  },
10093      B = {
10094    "Close menu": "Menü schließen",
10095    "Close submenu": "Untermenü schließen",
10096    "Open submenu": "Untermenü öffnen",
10097    "Toggle submenu": "Untermenü wechseln"
10098  },
10099      z = {
10100    "Close menu": "Закрыть меню",
10101    "Close submenu": "Закрыть подменю",
10102    "Open submenu": "Открыть подменю",
10103    "Toggle submenu": "Переключить подменю"
10104  };
10105  f({
10106    "Close menu": "Menu sluiten",
10107    "Close submenu": "Submenu sluiten",
10108    "Open submenu": "Submenu openen",
10109    "Toggle submenu": "Submenu wisselen"
10110  }, "nl"), f(q, "fa"), f(B, "de"), f(z, "ru"), M.options.screenReader = O, M.configs.screenReader = I;
10111  var R;
10112  R = function R(e, t, n) {
10113    e[t] = n, n ? e.setAttribute(t, n.toString()) : e.removeAttribute(t);
10114  }, M.sr_aria = function (e, t, n) {
10115    R(e, "aria-" + t, n);
10116  }, M.sr_role = function (e, t) {
10117    R(e, "role", t);
10118  }, M.sr_text = function (e) {
10119    return '<span class="mm-sronly">' + e + "</span>";
10120  };
10121  var U = {
10122    fix: !0
10123  };
10124  var W = "ontouchstart" in window || !!navigator.msMaxTouchPoints || !1;
10125  M.options.scrollBugFix = U;
10126  var Y = {
10127    height: "default"
10128  };
10129  M.options.autoHeight = Y;
10130  var F = {
10131    close: !1,
10132    open: !1
10133  };
10134  M.options.backButton = F;
10135  var X = {
10136    add: !1,
10137    visible: {
10138      min: 1,
10139      max: 3
10140    }
10141  };
10142  M.options.columns = X;
10143  var V = {
10144    add: !1,
10145    addTo: "panels",
10146    count: !1
10147  };
10148  M.options.counters = V, M.configs.classNames.counters = {
10149    counter: "Counter"
10150  };
10151  var Z = {
10152    add: !1,
10153    addTo: "panels"
10154  };
10155  M.options.dividers = Z, M.configs.classNames.divider = "Divider";
10156  var G = {
10157    open: !1,
10158    node: null
10159  };
10160
10161  var J = "ontouchstart" in window || !!navigator.msMaxTouchPoints || !1,
10162      K = {
10163    top: 0,
10164    right: 0,
10165    bottom: 0,
10166    left: 0
10167  },
10168      Q = {
10169    start: 15,
10170    swipe: 15
10171  },
10172      $ = {
10173    x: ["Right", "Left"],
10174    y: ["Down", "Up"]
10175  },
10176      ee = 0,
10177      te = 1,
10178      ne = 2,
10179      ie = function ie(e, t) {
10180    return "string" == typeof e && "%" == e.slice(-1) && (e = t * ((e = parseInt(e.slice(0, -1), 10)) / 100)), e;
10181  },
10182      se = function () {
10183    function e(e, t, n) {
10184      this.surface = e, this.area = o(t, K), this.treshold = o(n, Q), this.surface.mmHasDragEvents || (this.surface.addEventListener(J ? "touchstart" : "mousedown", this.start.bind(this)), this.surface.addEventListener(J ? "touchend" : "mouseup", this.stop.bind(this)), this.surface.addEventListener(J ? "touchleave" : "mouseleave", this.stop.bind(this)), this.surface.addEventListener(J ? "touchmove" : "mousemove", this.move.bind(this))), this.surface.mmHasDragEvents = !0;
10185    }
10186
10187    return e.prototype.start = function (e) {
10188      this.currentPosition = {
10189        x: e.touches ? e.touches[0].pageX : e.pageX || 0,
10190        y: e.touches ? e.touches[0].pageY : e.pageY || 0
10191      };
10192      var t = this.surface.clientWidth,
10193          n = this.surface.clientHeight,
10194          i = ie(this.area.top, n);
10195
10196      if (!("number" == typeof i && this.currentPosition.y < i)) {
10197        var s = ie(this.area.right, t);
10198
10199        if (!("number" == typeof s && (s = t - s, this.currentPosition.x > s))) {
10200          var a = ie(this.area.bottom, n);
10201
10202          if (!("number" == typeof a && (a = n - a, this.currentPosition.y > a))) {
10203            var o = ie(this.area.left, t);
10204            "number" == typeof o && this.currentPosition.x < o || (this.startPosition = {
10205              x: this.currentPosition.x,
10206              y: this.currentPosition.y
10207            }, this.state = te);
10208          }
10209        }
10210      }
10211    }, e.prototype.stop = function (e) {
10212      if (this.state == ne) {
10213        var t = this._dragDirection(),
10214            n = this._eventDetail(t);
10215
10216        if (this._dispatchEvents("drag*End", n), Math.abs(this.movement[this.axis]) > this.treshold.swipe) {
10217          var i = this._swipeDirection();
10218
10219          n.direction = i, this._dispatchEvents("swipe*", n);
10220        }
10221      }
10222
10223      this.state = ee;
10224    }, e.prototype.move = function (e) {
10225      switch (this.state) {
10226        case te:
10227        case ne:
10228          var t = {
10229            x: e.changedTouches ? e.touches[0].pageX : e.pageX || 0,
10230            y: e.changedTouches ? e.touches[0].pageY : e.pageY || 0
10231          };
10232          this.movement = {
10233            x: t.x - this.currentPosition.x,
10234            y: t.y - this.currentPosition.y
10235          }, this.distance = {
10236            x: t.x - this.startPosition.x,
10237            y: t.y - this.startPosition.y
10238          }, this.currentPosition = {
10239            x: t.x,
10240            y: t.y
10241          }, this.axis = Math.abs(this.distance.x) > Math.abs(this.distance.y) ? "x" : "y";
10242
10243          var n = this._dragDirection(),
10244              i = this._eventDetail(n);
10245
10246          this.state == te && Math.abs(this.distance[this.axis]) > this.treshold.start && (this._dispatchEvents("drag*Start", i), this.state = ne), this.state == ne && this._dispatchEvents("drag*Move", i);
10247      }
10248    }, e.prototype._eventDetail = function (e) {
10249      var t = this.distance.x,
10250          n = this.distance.y;
10251      return "x" == this.axis && (t -= t > 0 ? this.treshold.start : 0 - this.treshold.start), "y" == this.axis && (n -= n > 0 ? this.treshold.start : 0 - this.treshold.start), {
10252        axis: this.axis,
10253        direction: e,
10254        movementX: this.movement.x,
10255        movementY: this.movement.y,
10256        distanceX: t,
10257        distanceY: n
10258      };
10259    }, e.prototype._dispatchEvents = function (e, t) {
10260      var n = new CustomEvent(e.replace("*", ""), {
10261        detail: t
10262      });
10263      this.surface.dispatchEvent(n);
10264      var i = new CustomEvent(e.replace("*", this.axis.toUpperCase()), {
10265        detail: t
10266      });
10267      this.surface.dispatchEvent(i);
10268      var s = new CustomEvent(e.replace("*", t.direction), {
10269        detail: t
10270      });
10271      this.surface.dispatchEvent(s);
10272    }, e.prototype._dragDirection = function () {
10273      return $[this.axis][this.distance[this.axis] > 0 ? 0 : 1];
10274    }, e.prototype._swipeDirection = function () {
10275      return $[this.axis][this.movement[this.axis] > 0 ? 0 : 1];
10276    }, e;
10277  }(),
10278      ae = null,
10279      oe = null,
10280      re = 0,
10281      ce = function ce(e) {
10282    var t = this,
10283        n = {},
10284        i = !1,
10285        s = function s() {
10286      var e = Object.keys(t.opts.extensions);
10287      e.length ? (k(e.join(", "), function () {}, function () {
10288        n = me(n, [], t.node.menu);
10289      }), e.forEach(function (e) {
10290        k(e, function () {
10291          n = me(n, t.opts.extensions[e], t.node.menu);
10292        }, function () {});
10293      })) : n = me(n, [], t.node.menu);
10294    };
10295
10296    oe && (H(oe, "dragStart"), H(oe, "dragMove"), H(oe, "dragEnd")), ae = new se(oe = e), s(), s = function s() {}, oe && (N(oe, "dragStart", function (e) {
10297      e.detail.direction == n.direction && (i = !0, t.node.wrpr.classList.add("mm-wrapper_dragging"), t._openSetup(), t.trigger("open:start"), re = t.node.menu["x" == n.axis ? "clientWidth" : "clientHeight"]);
10298    }), N(oe, "dragMove", function (e) {
10299      if (e.detail.axis == n.axis && i) {
10300        var t = e.detail["distance" + n.axis.toUpperCase()];
10301
10302        switch (n.position) {
10303          case "right":
10304          case "bottom":
10305            t = Math.min(Math.max(t, -re), 0);
10306            break;
10307
10308          default:
10309            t = Math.max(Math.min(t, re), 0);
10310        }
10311
10312        if ("front" == n.zposition) switch (n.position) {
10313          case "right":
10314          case "bottom":
10315            t += re;
10316            break;
10317
10318          default:
10319            t -= re;
10320        }
10321        n.slideOutNodes.forEach(function (e) {
10322          e.style.transform = "translate" + n.axis.toUpperCase() + "(" + t + "px)";
10323        });
10324      }
10325    }), N(oe, "dragEnd", function (e) {
10326      if (e.detail.axis == n.axis && i) {
10327        i = !1, t.node.wrpr.classList.remove("mm-wrapper_dragging"), n.slideOutNodes.forEach(function (e) {
10328          e.style.transform = "";
10329        });
10330        var s = Math.abs(e.detail["distance" + n.axis.toUpperCase()]) >= .75 * re;
10331
10332        if (!s) {
10333          var a = e.detail["movement" + n.axis.toUpperCase()];
10334
10335          switch (n.position) {
10336            case "right":
10337            case "bottom":
10338              s = a <= 0;
10339              break;
10340
10341            default:
10342              s = a >= 0;
10343          }
10344        }
10345
10346        s ? t._openStart() : t.close();
10347      }
10348    }));
10349  },
10350      me = function me(e, t, n) {
10351    switch (e.position = "left", e.zposition = "back", ["right", "top", "bottom"].forEach(function (n) {
10352      t.indexOf("position-" + n) > -1 && (e.position = n);
10353    }), ["front", "top", "bottom"].forEach(function (n) {
10354      t.indexOf("position-" + n) > -1 && (e.zposition = "front");
10355    }), ae.area = {
10356      top: "bottom" == e.position ? "75%" : 0,
10357      right: "left" == e.position ? "75%" : 0,
10358      bottom: "top" == e.position ? "75%" : 0,
10359      left: "right" == e.position ? "75%" : 0
10360    }, e.position) {
10361      case "top":
10362      case "bottom":
10363        e.axis = "y";
10364        break;
10365
10366      default:
10367        e.axis = "x";
10368    }
10369
10370    switch (e.position) {
10371      case "top":
10372        e.direction = "Down";
10373        break;
10374
10375      case "right":
10376        e.direction = "Left";
10377        break;
10378
10379      case "bottom":
10380        e.direction = "Up";
10381        break;
10382
10383      default:
10384        e.direction = "Right";
10385    }
10386
10387    switch (e.zposition) {
10388      case "front":
10389        e.slideOutNodes = [n];
10390        break;
10391
10392      default:
10393        e.slideOutNodes = _(document.body, ".mm-slideout");
10394    }
10395
10396    return e;
10397  };
10398
10399  M.options.drag = G;
10400  var le = {
10401    drop: !1,
10402    fitViewport: !0,
10403    event: "click",
10404    position: {},
10405    tip: !0
10406  };
10407  var de = {
10408    offset: {
10409      button: {
10410        x: -5,
10411        y: 5
10412      },
10413      viewport: {
10414        x: 20,
10415        y: 20
10416      }
10417    },
10418    height: {
10419      max: 880
10420    },
10421    width: {
10422      max: 440
10423    }
10424  };
10425  M.options.dropdown = le, M.configs.dropdown = de;
10426  var pe = {
10427    insertMethod: "append",
10428    insertSelector: "body"
10429  };
10430  M.configs.fixedElements = pe, M.configs.classNames.fixedElements = {
10431    fixed: "Fixed"
10432  };
10433  var ue = {
10434    use: !1,
10435    top: [],
10436    bottom: [],
10437    position: "left",
10438    type: "default"
10439  };
10440  M.options.iconbar = ue;
10441  var fe = {
10442    add: !1,
10443    blockPanel: !0,
10444    hideDivider: !1,
10445    hideNavbar: !0,
10446    visible: 3
10447  };
10448  M.options.iconPanels = fe;
10449  var he = {
10450    enable: !1,
10451    enhance: !1
10452  };
10453  M.options.keyboardNavigation = he;
10454
10455  var ve = function ve(e) {
10456    var t = this;
10457    H(document.body, "keydown.tabguard"), H(document.body, "focusin.tabguard"), N(document.body, "focusin.tabguard", function (e) {
10458      if (t.node.wrpr.matches(".mm-wrapper_opened")) {
10459        var n = e.target;
10460
10461        if (n.matches(".mm-tabend")) {
10462          var i = void 0;
10463          n.parentElement.matches(".mm-menu") && M.node.blck && (i = M.node.blck), n.parentElement.matches(".mm-wrapper__blocker") && (i = _(document.body, ".mm-menu_offcanvas.mm-menu_opened")[0]), i || (i = n.parentElement), i && y(i, ".mm-tabstart")[0].focus();
10464        }
10465      }
10466    }), H(document.body, "keydown.navigate"), N(document.body, "keydown.navigate", function (t) {
10467      var n = t.target,
10468          i = n.closest(".mm-menu");
10469
10470      if (i) {
10471        i.mmApi;
10472        if (!n.matches("input, textarea")) switch (t.keyCode) {
10473          case 13:
10474            (n.matches(".mm-toggle") || n.matches(".mm-check")) && n.dispatchEvent(new Event("click"));
10475            break;
10476
10477          case 32:
10478          case 37:
10479          case 38:
10480          case 39:
10481          case 40:
10482            t.preventDefault();
10483        }
10484        if (e) if (n.matches("input")) switch (t.keyCode) {
10485          case 27:
10486            n.value = "";
10487        } else {
10488          var s = i.mmApi;
10489
10490          switch (t.keyCode) {
10491            case 8:
10492              var a = _(i, ".mm-panel_opened")[0].mmParent;
10493
10494              a && s.openPanel(a.closest(".mm-panel"));
10495              break;
10496
10497            case 27:
10498              i.matches(".mm-menu_offcanvas") && s.close();
10499          }
10500        }
10501      }
10502    });
10503  },
10504      be = {
10505    load: !1
10506  };
10507
10508  M.options.lazySubmenus = be;
10509  var ge = [];
10510  var _e = {
10511    breadcrumbs: {
10512      separator: "/",
10513      removeFirst: !1
10514    }
10515  };
10516
10517  function ye() {
10518    var e = this,
10519        t = this.opts.navbars;
10520
10521    if (void 0 !== t) {
10522      t instanceof Array || (t = [t]);
10523      var n = {};
10524      t.length && (t.forEach(function (t) {
10525        if (!(t = function (e) {
10526          return "boolean" == typeof e && e && (e = {}), "object" != _typeof(e) && (e = {}), void 0 === e.content && (e.content = ["prev", "title"]), e.content instanceof Array || (e.content = [e.content]), void 0 === e.use && (e.use = !0), "boolean" == typeof e.use && e.use && (e.use = !0), e;
10527        }(t)).use) return !1;
10528        var i = g("div.mm-navbar"),
10529            s = t.position;
10530        "bottom" !== s && (s = "top"), n[s] || (n[s] = g("div.mm-navbars_" + s)), n[s].append(i);
10531
10532        for (var a = 0, o = t.content.length; a < o; a++) {
10533          var r,
10534              c = t.content[a];
10535          if ("string" == typeof c) {
10536            if ("function" == typeof (r = ye.navbarContents[c])) r.call(e, i);else {
10537              var m = g("span");
10538              m.innerHTML = c;
10539              var l = y(m);
10540              1 == l.length && (m = l[0]), i.append(m);
10541            }
10542          } else i.append(c);
10543        }
10544
10545        "string" == typeof t.type && "function" == typeof (r = ye.navbarTypes[t.type]) && r.call(e, i);
10546        "boolean" != typeof t.use && k(t.use, function () {
10547          i.classList.remove("mm-hidden"), M.sr_aria(i, "hidden", !1);
10548        }, function () {
10549          i.classList.add("mm-hidden"), M.sr_aria(i, "hidden", !0);
10550        });
10551      }), this.bind("initMenu:after", function () {
10552        for (var t in n) {
10553          e.node.menu["bottom" == t ? "append" : "prepend"](n[t]);
10554        }
10555      }));
10556    }
10557  }
10558
10559  M.options.navbars = ge, M.configs.navbars = _e, M.configs.classNames.navbars = {
10560    panelPrev: "Prev",
10561    panelTitle: "Title"
10562  }
10562, ye.navbarContents = {
10563    breadcrumbs: function breadcrumbs(e) {
10564      var t = this,
10565          n = g("div.mm-navbar__breadcrumbs");
10566      e.append(n), this.bind("initNavbar:after", function (e) {
10567        if (!e.querySelector(".mm-navbar__breadcrumbs")) {
10568          y(e, ".mm-navbar")[0].classList.add("mm-hidden");
10569
10570          for (var n = [], i = g("span.mm-navbar__breadcrumbs"), s = e, a = !0; s;) {
10571            if (!(s = s.closest(".mm-panel")).parentElement.matches(".mm-listitem_vertical")) {
10572              var o = _(s, ".mm-navbar__title span")[0];
10573
10574              if (o) {
10575                var r = o.textContent;
10576                r.length && n.unshift(a ? "<span>" + r + "</span>" : '<a href="#' + s.id + '">' + r + "</a>");
10577              }
10578
10579              a = !1;
10580            }
10581
10582            s = s.mmParent;
10583          }
10584
10585          t.conf.navbars.breadcrumbs.removeFirst && n.shift(), i.innerHTML = n.join('<span class="mm-separator">' + t.conf.navbars.breadcrumbs.separator + "</span>"), y(e, ".mm-navbar")[0].append(i);
10586        }
10587      }), this.bind("openPanel:start", function (e) {
10588        var t = e.querySelector(".mm-navbar__breadcrumbs");
10589        n.innerHTML = t ? t.innerHTML : "";
10590      }), this.bind("initNavbar:after:sr-aria", function (e) {
10591        _(e, ".mm-breadcrumbs a").forEach(function (e) {
10592          M.sr_aria(e, "owns", e.getAttribute("href").slice(1));
10593        });
10594      });
10595    },
10596    close: function close(e) {
10597      var t = this,
10598          n = g("a.mm-btn.mm-btn_close.mm-navbar__btn");
10599      e.append(n), this.bind("setPage:after", function (e) {
10600        n.setAttribute("href", "#" + e.id);
10601      }), this.bind("setPage:after:sr-text", function () {
10602        n.innerHTML = M.sr_text(t.i18n(t.conf.screenReader.text.closeMenu));
10603      });
10604    },
10605    prev: function prev(e) {
10606      var t,
10607          n,
10608          i,
10609          s = this,
10610          a = g("a.mm-btn.mm-btn_prev.mm-navbar__btn");
10611      e.append(a), this.bind("initNavbar:after", function (e) {
10612        y(e, ".mm-navbar")[0].classList.add("mm-hidden");
10613      }), this.bind("openPanel:start", function (e) {
10614        e.parentElement.matches(".mm-listitem_vertical") || ((t = e.querySelector("." + s.conf.classNames.navbars.panelPrev)) || (t = e.querySelector(".mm-navbar__btn.mm-btn_prev")), n = t ? t.getAttribute("href") : "", i = t ? t.innerHTML : "", n ? a.setAttribute("href", n) : a.removeAttribute("href"), a.classList[n || i ? "remove" : "add"]("mm-hidden"), a.innerHTML = i);
10615      }), this.bind("initNavbar:after:sr-aria", function (e) {
10616        M.sr_aria(e.querySelector(".mm-navbar"), "hidden", !0);
10617      }), this.bind("openPanel:start:sr-aria", function (e) {
10618        M.sr_aria(a, "hidden", a.matches(".mm-hidden")), M.sr_aria(a, "owns", (a.getAttribute("href") || "").slice(1));
10619      });
10620    },
10621    searchfield: function searchfield(e) {
10622      "object" != r(this.opts.searchfield) && (this.opts.searchfield = {});
10623      var t = g("div.mm-navbar__searchfield");
10624      e.append(t), this.opts.searchfield.add = !0, this.opts.searchfield.addTo = [t];
10625    },
10626    title: function title(e) {
10627      var t,
10628          n,
10629          i,
10630          s,
10631          a = this,
10632          o = g("a.mm-navbar__title"),
10633          r = g("span");
10634      o.append(r), e.append(o), this.bind("openPanel:start", function (e) {
10635        e.parentElement.matches(".mm-listitem_vertical") || ((i = e.querySelector("." + a.conf.classNames.navbars.panelTitle)) || (i = e.querySelector(".mm-navbar__title span")), (t = i && i.closest("a") ? i.closest("a").getAttribute("href") : "") ? o.setAttribute("href", t) : o.removeAttribute("href"), n = i ? i.innerHTML : "", r.innerHTML = n);
10636      }), this.bind("openPanel:start:sr-aria", function (e) {
10637        if (a.opts.screenReader.text) {
10638          if (!s) y(a.node.menu, ".mm-navbars_top, .mm-navbars_bottom").forEach(function (e) {
10639            var t = e.querySelector(".mm-btn_prev");
10640            t && (s = t);
10641          });
10642
10643          if (s) {
10644            var t = !0;
10645            "parent" == a.opts.navbar.titleLink && (t = !s.matches(".mm-hidden")), M.sr_aria(o, "hidden", t);
10646          }
10647        }
10648      });
10649    }
10650  }
10650, ye.navbarTypes = {
10651    tabs: function tabs(e) {
10652      var t = this;
10653      e.classList.add("mm-navbar_tabs"), e.parentElement.classList.add("mm-navbars_has-tabs");
10654      var n = y(e, "a");
10655      e.addEventListener("click", function (e) {
10656        var n = e.target;
10657        if (n.matches("a")) if (n.matches(".mm-navbar__tab_selected")) e.stopImmediatePropagation();else try {
10658          t.openPanel(t.node.menu.querySelector(n.getAttribute("href")), !1), e.stopImmediatePropagation();
10659        } catch (e) {}
10660      }), this.bind("openPanel:start", function e(t) {
10661        n.forEach(function (e) {
10662          e.classList.remove("mm-navbar__tab_selected");
10663        });
10664        var i = n.filter(function (e) {
10665          return e.matches('[href="#' + t.id + '"]');
10666        })[0];
10667        if (i) i.classList.add("mm-navbar__tab_selected");else {
10668          var s = t.mmParent;
10669          s && e.call(this, s.closest(".mm-panel"));
10670        }
10671      });
10672    }
10673  };
10674  var Le = {
10675    scroll: !1,
10676    update: !1
10677  };
10678  var we = {
10679    scrollOffset: 0,
10680    updateOffset: 50
10681  };
10682  M.options.pageScroll = Le, M.configs.pageScroll = we;
10683  var Ee = {
10684    add: !1,
10685    addTo: "panels",
10686    cancel: !1,
10687    noResults: "No results found.",
10688    placeholder: "Search",
10689    panel: {
10690      add: !1,
10691      dividers: !0,
10692      fx: "none",
10693      id: null,
10694      splash: null,
10695      title: "Search"
10696    },
10697    search: !0,
10698    showTextItems: !1,
10699    showSubPanels: !0
10700  };
10701
10702  var xe = {
10703    clear: !1,
10704    form: !1,
10705    input: !1,
10706    submit: !1
10707  },
10708      Pe = {
10709    Search: "جستجو",
10710    "No results found.": "نتیجه‌ای یافت نشد.",
10711    cancel: "انصراف"
10712  },
10713      ke = {
10714    Search: "Suche",
10715    "No results found.": "Keine Ergebnisse gefunden.",
10716    cancel: "beenden"
10717  },
10718      Se = {
10719    Search: "Найти",
10720    "No results found.": "Ничего не найдено.",
10721    cancel: "отменить"
10722  },
10723      Me = function Me() {
10724    for (var e = 0, t = 0, n = arguments.length; t < n; t++) {
10725      e += arguments[t].length;
10726    }
10727
10728    var i = Array(e),
10729        s = 0;
10730
10731    for (t = 0; t < n; t++) {
10732      for (var a = arguments[t], o = 0, r = a.length; o < r; o++, s++) {
10733        i[s] = a[o];
10734      }
10735    }
10736
10737    return i;
10738  };
10739
10740  f({
10741    Search: "Zoeken",
10742    "No results found.": "Geen resultaten gevonden.",
10743    cancel: "annuleren"
10744  }, "nl"), f(Pe, "fa"), f(ke, "de"), f(Se, "ru"), M.options.searchfield = Ee, M.configs.searchfield = xe;
10745
10746  var Ae = function Ae() {
10747    var e = this.opts.searchfield,
10748        t = (this.conf.searchfield, y(this.node.pnls, ".mm-panel_search")[0]);
10749    if (t) return t;
10750    t = g("div.mm-panel.mm-panel_search.mm-hidden"), e.panel.id && (t.id = e.panel.id), e.panel.title && t.setAttribute("data-mm-title", e.panel.title);
10751    var n = g("ul");
10752
10753    switch (t.append(n), this.node.pnls.append(t), this.initListview(n), this._initNavbar(t), e.panel.fx) {
10754      case !1:
10755        break;
10756
10757      case "none":
10758        t.classList.add("mm-panel_noanimation");
10759        break;
10760
10761      default:
10762        t.classList.add("mm-panel_fx-" + e.panel.fx);
10763    }
10764
10765    if (e.panel.splash) {
10766      var i = g("div.mm-panel__content");
10767      i.innerHTML = e.panel.splash, t.append(i);
10768    }
10769
10770    return t.classList.add("mm-panel"), t.classList.add("mm-hidden"), this.node.pnls.append(t), t;
10771  },
10772      Te = function Te(e) {
10773    var t = this.opts.searchfield,
10774        n = this.conf.searchfield;
10775    if (e.parentElement.matches(".mm-listitem_vertical")) return null;
10776    if (a = _(e, ".mm-searchfield")[0]) return a;
10777
10778    function i(e, t) {
10779      if (t) for (var n in t) {
10780        e.setAttribute(n, t[n]);
10781      }
10782    }
10783
10784    var s,
10785        a = g((n.form ? "form" : "div") + ".mm-searchfield"),
10786        o = g("div.mm-searchfield__input"),
10787        r = g("input");
10788    (r.type = "text", r.autocomplete = "off", r.placeholder = this.i18n(t.placeholder), o.append(r), a.append(o), e.prepend(a), i(r, n.input), n.clear) && ((s = g("a.mm-btn.mm-btn_close.mm-searchfield__btn")).setAttribute("href", "#"), o.append(s));
10789    (i(a, n.form), n.form && n.submit && !n.clear) && ((s = g("a.mm-btn.mm-btn_next.mm-searchfield__btn")).setAttribute("href", "#"), o.append(s));
10790    t.cancel && ((s = g("a.mm-searchfield__cancel")).setAttribute("href", "#"), s.textContent = this.i18n("cancel"), a.append(s));
10791    return a;
10792  },
10793      Ce = function Ce(e) {
10794    var t = this,
10795        n = this.opts.searchfield,
10796        i = (this.conf.searchfield, {});
10797    e.closest(".mm-panel_search") ? (i.panels = _(this.node.pnls, ".mm-panel"), i.noresults = [e.closest(".mm-panel")]) : e.closest(".mm-panel") ? (i.panels = [e.closest(".mm-panel")], i.noresults = i.panels) : (i.panels = _(this.node.pnls, ".mm-panel"), i.noresults = [this.node.menu]), i.panels = i.panels.filter(function (e) {
10798      return !e.matches(".mm-panel_search");
10799    }), i.panels = i.panels.filter(function (e) {
10800      return !e.parentElement.matches(".mm-listitem_vertical");
10801    }
10801), i.listitems = [], i.dividers = [], i.panels.forEach(function (e) {
10802      var t, n;
10803      (t = i.listitems).push.apply(t, _(e, ".mm-listitem")), (n = i.dividers).push.apply(n, _(e, ".mm-divider"));
10804    });
10805
10806    var s = y(this.node.pnls, ".mm-panel_search")[0],
10807        a = _(e, "input")[0],
10808        o = _(e, ".mm-searchfield__cancel")[0];
10809
10810    a.mmSearchfield = i, n.panel.add && n.panel.splash && (H(a, "focus.splash"), N(a, "focus.splash", function (e) {
10811      t.openPanel(s);
10812    })), n.cancel && (H(a, "focus.cancel"), N(a, "focus.cancel", function (e) {
10813      o.classList.add("mm-searchfield__cancel-active");
10814    }), H(o, "click.splash"), N(o, "click.splash", function (e) {
10815      if (e.preventDefault(), o.classList.remove("mm-searchfield__cancel-active"), s.matches(".mm-panel_opened")) {
10816        var n = y(t.node.pnls, ".mm-panel_opened-parent");
10817        n.length && t.openPanel(n[n.length - 1]);
10818      }
10819    })), n.panel.add && "panel" == n.addTo && this.bind("openPanel:finish", function (e) {
10820      e === s && a.focus();
10821    }), H(a, "input.search"), N(a, "input.search", function (e) {
10822      switch (e.keyCode) {
10823        case 9:
10824        case 16:
10825        case 17:
10826        case 18:
10827        case 37:
10828        case 38:
10829        case 39:
10830        case 40:
10831          break;
10832
10833        default:
10834          t.search(a);
10835      }
10836    }), this.search(a);
10837  },
10838      Ne = function Ne(e) {
10839    if (e) {
10840      var t = this.opts.searchfield;
10841      this.conf.searchfield;
10842
10843      if (e.closest(".mm-panel") || (e = y(this.node.pnls, ".mm-panel")[0]), !y(e, ".mm-panel__noresultsmsg").length) {
10844        var n = g("div.mm-panel__noresultsmsg.mm-hidden");
10845        n.innerHTML = this.i18n(t.noResults), e.append(n);
10846      }
10847    }
10848  };
10849
10850  M.prototype.search = function (e, t) {
10851    var n,
10852        i = this,
10853        s = this.opts.searchfield;
10854    this.conf.searchfield;
10855    t = (t = t || "" + e.value).toLowerCase().trim();
10856
10857    var a = e.mmSearchfield,
10858        o = _(e.closest(".mm-searchfield"), ".mm-btn"),
10859        r = y(this.node.pnls, ".mm-panel_search")[0],
10860        c = a.panels,
10861        m = a.noresults,
10862        l = a.listitems,
10863        d = a.dividers;
10864
10865    if (l.forEach(function (e) {
10866      e.classList.remove("mm-listitem_nosubitems"), e.classList.remove("mm-listitem_onlysubitems"), e.classList.remove("mm-hidden");
10867    }), r && (y(r, ".mm-listview")[0].innerHTML = ""), c.forEach(function (e) {
10868      e.scrollTop = 0;
10869    }), t.length) {
10870      d.forEach(function (e) {
10871        e.classList.add("mm-hidden");
10872      }), l.forEach(function (e) {
10873        var n,
10874            i = y(e, ".mm-listitem__text")[0],
10875            a = !1;
10876        i && (n = i, Array.prototype.slice.call(n.childNodes).filter(function (e) {
10877          return 3 == e.nodeType;
10878        }).map(function (e) {
10879          return e.textContent;
10880        }).join(" ")).toLowerCase().indexOf(t) > -1 && (i.matches(".mm-listitem__btn") ? s.showSubPanels && (a = !0) : (i.matches("a") || s.showTextItems) && (a = !0)), a || e.classList.add("mm-hidden");
10881      });
10882      var p = l.filter(function (e) {
10883        return !e.matches(".mm-hidden");
10884      }).length;
10885
10886      if (s.panel.add) {
10887        var u = [];
10888        c.forEach(function (e) {
10889          var t = w(_(e, ".mm-listitem"));
10890
10891          if ((t = t.filter(function (e) {
10892            return !e.matches(".mm-hidden");
10893          })).length) {
10894            if (s.panel.dividers) {
10895              var n = g("li.mm-divider"),
10896                  i = _(e, ".mm-navbar__title")[0];
10897
10898              i && (n.innerHTML = i.innerHTML, u.push(n));
10899            }
10900
10901            t.forEach(function (e) {
10902              u.push(e.cloneNode(!0));
10903            });
10904          }
10905        }), u.forEach(function (e) {
10906          e.querySelectorAll(".mm-toggle, .mm-check").forEach(function (e) {
10907            e.remove();
10908          });
10909        }), (n = y(r, ".mm-listview")[0]).append.apply(n, u), this.openPanel(r);
10910      } else s.showSubPanels && c.forEach(function (e) {
10911        w(_(e, ".mm-listitem")).forEach(function (e) {
10912          var t = e.mmChild;
10913          t && _(t, ".mm-listitem").forEach(function (e) {
10914            e.classList.remove("mm-hidden");
10915          });
10916        });
10917      }
10917), Me(c).reverse().forEach(function (t, n) {
10918        var s = t.mmParent;
10919        s && (w(_(t, ".mm-listitem")).length ? (s.matches(".mm-hidden") && s.classList.remove("mm-hidden"), s.classList.add("mm-listitem_onlysubitems")) : e.closest(".mm-panel") || ((t.matches(".mm-panel_opened") || t.matches(".mm-panel_opened-parent")) && setTimeout(function () {
10920          i.openPanel(s.closest(".mm-panel"));
10921        }, (n + 1) * (1.5 * i.conf.openingInterval)), s.classList.add("mm-listitem_nosubitems")));
10922      }), c.forEach(function (e) {
10923        w(_(e, ".mm-listitem")).forEach(function (e) {
10924          L(e, ".mm-listitem_vertical").forEach(function (e) {
10925            e.matches(".mm-hidden") && (e.classList.remove("mm-hidden"), e.classList.add("mm-listitem_onlysubitems"));
10926          });
10927        });
10928      }), c.forEach(function (e) {
10929        w(_(e, ".mm-listitem")).forEach(function (e) {
10930          var t = function (e, t) {
10931            for (var n = [], i = e.previousElementSibling; i;) {
10932              t && !i.matches(t) || n.push(i), i = i.previousElementSibling;
10933            }
10934
10935            return n;
10936          }(e, ".mm-divider")[0];
10937
10938          t && t.classList.remove("mm-hidden");
10939        });
10940      });
10941
10942      o.forEach(function (e) {
10943        return e.classList.remove("mm-hidden");
10944      }), m.forEach(function (e) {
10945        _(e, ".mm-panel__noresultsmsg").forEach(function (e) {
10946          return e.classList[p ? "add" : "remove"]("mm-hidden");
10947        });
10948      }), s.panel.add && (s.panel.splash && _(r, ".mm-panel__content").forEach(function (e) {
10949        return e.classList.add("mm-hidden");
10950      }), l.forEach(function (e) {
10951        return e.classList.remove("mm-hidden");
10952      }), d.forEach(function (e) {
10953        return e.classList.remove("mm-hidden");
10954      }));
10955    } else if (l.forEach(function (e) {
10956      return e.classList.remove("mm-hidden");
10957    }), d.forEach(function (e) {
10958      return e.classList.remove("mm-hidden");
10959    }), o.forEach(function (e) {
10960      return e.classList.add("mm-hidden");
10961    }), m.forEach(function (e) {
10962      _(e, ".mm-panel__noresultsmsg").forEach(function (e) {
10963        return e.classList.add("mm-hidden");
10964      });
10965    }), s.panel.add) if (s.panel.splash) _(r, ".mm-panel__content").forEach(function (e) {
10966      return e.classList.remove("mm-hidden");
10967    });else if (!e.closest(".mm-panel_search")) {
10968      var f = y(this.node.pnls, ".mm-panel_opened-parent");
10969      this.openPanel(f.slice(-1)[0]);
10970    }
10971
10972    this.trigger("updateListview");
10973  };
10974
10975  var He = {
10976    add: !1,
10977    addTo: "panels"
10978  };
10979  M.options.sectionIndexer = He;
10980  var je = {
10981    current: !0,
10982    hover: !1,
10983    parent: !1
10984  };
10985  M.options.setSelected = je;
10986  var De = {
10987    collapsed: {
10988      use: !1,
10989      blockMenu: !0,
10990      hideDivider: !1,
10991      hideNavbar: !0
10992    },
10993    expanded: {
10994      use: !1,
10995      initial: "open"
10996    }
10997  };
10998  M.options.sidebar = De;
10999  M.configs.classNames.toggles = {
11000    toggle: "Toggle",
11001    check: "Check"
11002  };
11003  M.addons = {
11004    offcanvas: function offcanvas() {
11005      var e = this;
11006
11007      if (this.opts.offCanvas) {
11008        var t = function (e) {
11009          return "object" != _typeof(e) && (e = {}), e;
11010        }(this.opts.offCanvas);
11011
11012        this.opts.offCanvas = o(t, M.options.offCanvas);
11013        var n = this.conf.offCanvas;
11014        this._api.push("open", "close", "setPage"), this.vars.opened = !1, this.bind("initMenu:before", function () {
11015          n.clone && (e.node.menu = e.node.menu.cloneNode(!0), e.node.menu.id && (e.node.menu.id = "mm-" + e.node.menu.id), _(e.node.menu, "[id]").forEach(function (e) {
11016            e.id = "mm-" + e.id;
11017          })), e.node.wrpr = document.body, document.querySelector(n.menu.insertSelector)[n.menu.insertMethod](e.node.menu);
11018        }), this.bind("initMenu:after", function () {
11019          D.call(e), e.setPage(M.node.page), j.call(e), e.node.menu.classList.add("mm-menu_offcanvas");
11020          var t = window.location.hash;
11021
11022          if (t) {
11023            var n = p(e.node.menu.id);
11024            n && n == t.slice(1) && setTimeout(function () {
11025              e.open();
11026            }, 1e3);
11027          }
11028        }), this.bind("setPage:after", function (e) {
11029          M.node.blck && y(M.node.blck, "a").forEach(function (t) {
11030            t.setAttribute("href", "#" + e.id);
11031          });
11032        }), this.bind("open:start:sr-aria", function () {
11033          M.sr_aria(e.node.menu, "hidden", !1);
11034        }), this.bind("close:finish:sr-aria", function () {
11035          M.sr_aria(e.node.menu, "hidden", !0);
11036        }), this.bind("initMenu:after:sr-aria", function () {
11037          M.sr_aria(e.node.menu, "hidden", !0);
11038        }), this.bind("initBlocker:after:sr-text", function () {
11039          y(M.node.blck, "a").forEach(function (t) {
11040            t.innerHTML = M.sr_text(e.i18n(e.conf.screenReader.text.closeMenu));
11041          });
11042        }), this.clck.push(function (t, n) {
11043          var i = p(e.node.menu.id);
11044
11045          if (i && t.matches('[href="#' + i + '"]')) {
11046            if (n.inMenu) return e.open(), !0;
11047            var s = t.closest(".mm-menu");
11048
11049            if (s) {
11050              var a = s.mmApi;
11051              if (a && a.close) return a.close(), m(s, function () {
11052                e.open();
11053              }, e.conf.transitionDuration), !0;
11054            }
11055
11056            return e.open(), !0;
11057          }
11058
11059          if ((i = M.node.page.id) && t.matches('[href="#' + i + '"]')) return e.close(), !0;
11060        });
11061      }
11062    },
11063    screenReader: function screenReader() {
11064      var e = this,
11065          t = function (e) {
11066        return "boolean" == typeof e && (e = {
11067          aria: e,
11068          text: e
11069        }), "object" != _typeof(e) && (e = {}), e;
11070      }(this.opts.screenReader);
11071
11072      this.opts.screenReader = o(t, M.options.screenReader);
11073      var n = this.conf.screenReader;
11074      t.aria && (this.bind("initAddons:after", function () {
11075        e.bind("initMenu:after", function () {
11076          this.trigger("initMenu:after:sr-aria", [].slice.call(arguments));
11077        }), e.bind("initNavbar:after", function () {
11078          this.trigger("initNavbar:after:sr-aria", [].slice.call(arguments));
11079        }), e.bind("openPanel:start", function () {
11080          this.trigger("openPanel:start:sr-aria", [].slice.call(arguments));
11081        }), e.bind("close:start", function () {
11082          this.trigger("close:start:sr-aria", [].slice.call(arguments));
11083        }), e.bind("close:finish", function () {
11084          this.trigger("close:finish:sr-aria", [].slice.call(arguments));
11085        }), e.bind("open:start", function () {
11086          this.trigger("open:start:sr-aria", [].slice.call(arguments));
11087        }), e.bind("initOpened:after", function () {
11088          this.trigger("initOpened:after:sr-aria", [].slice.call(arguments));
11089        });
11090      }), this.bind("updateListview", function () {
11091        e.node.pnls.querySelectorAll(".mm-listitem").forEach(function (e) {
11092          M.sr_aria(e, "hidden", e.matches(".mm-hidden"));
11093        });
11094      }), this.bind("openPanel:start", function (t) {
11095        var n = _(e.node.pnls, ".mm-panel").filter(function (e) {
11096          return e !== t;
11097        }).filter(function (e) {
11098          return !e.parentElement.matches(".mm-panel");
11099        }),
11100            i = [t];
11101
11102        _(t, ".mm-listitem_vertical .mm-listitem_opened").forEach(function (e) {
11103          i.push.apply(i, y(e, ".mm-panel"));
11104        }), n.forEach(function (e) {
11105          M.sr_aria(e, "hidden", !0);
11106        }), i.forEach(function (e) {
11107          M.sr_aria(e, "hidden", !1);
11108        });
11109      }), this.bind("closePanel", function (e) {
11110        M.sr_aria(e, "hidden", !0);
11111      }), this.bind("initPanel:after", function (e) {
11112        _(e, ".mm-btn").forEach(function (e) {
11113          M.sr_aria(e, "haspopup", !0);
11114          var t = e.getAttribute("href");
11115          t && M.sr_aria(e, "owns", t.replace("#", ""));
11116        });
11117      }), this.bind("initNavbar:after", function (e) {
11118        var t = y(e, ".mm-navbar")[0],
11119            n = t.matches(".mm-hidden");
11120        M.sr_aria(t, "hidden", n);
11121      }), t.text && "parent" == this.opts.navbar.titleLink && this.bind("initNavbar:after", function (e) {
11122        var t = y(e, ".mm-navbar")[0],
11123            n = !!t.querySelector(".mm-btn_prev");
11124        M.sr_aria(_(t, ".mm-navbar__title")[0], "hidden", n);
11125      })), t.text && (this.bind("initAddons:after", function () {
11126        e.bind("setPage:after", function () {
11127          this.trigger("setPage:after:sr-text", [].slice.call(arguments));
11128        }), e.bind("initBlocker:after", function () {
11129          this.trigger("initBlocker:after:sr-text", [].slice.call(arguments));
11130        });
11131      }), this.bind("initNavbar:after", function (t) {
11132        var i = y(t, ".mm-navbar")[0];
11133
11134        if (i) {
11135          var s = y(i, ".mm-btn_prev")[0];
11136          s && (s.innerHTML = M.sr_text(e.i18n(n.text.closeSubmenu)));
11137        }
11138      }), this.bind("initListview:after", function (t) {
11139        var i = t.closest(".mm-panel").mmParent;
11140
11141        if (i) {
11142          var s = y(i, ".mm-btn_next")[0];
11143
11144          if (s) {
11145            var a = e.i18n(n.text[s.parentElement.matches(".mm-listitem_vertical") ? "toggleSubmenu" : "openSubmenu"]);
11146            s.innerHTML += M.sr_text(a);
11147          }
11148        }
11149      }));
11150    },
11151    scrollBugFix: function scrollBugFix() {
11152      var e = this;
11153
11154      if (W && this.opts.offCanvas && this.opts.offCanvas.blockUI) {
11155        var t = function (e) {
11156          return "boolean" == typeof e && (e = {
11157            fix: e
11158          }), "object" != _typeof(e) && (e = {}), e;
11159        }(this.opts.scrollBugFix);
11160
11161        if (this.opts.scrollBugFix = o(t, M.options.scrollBugFix), t.fix) {
11162          var n,
11163              i,
11164              s = (n = this.node.menu, i = "", n.addEventListener("touchmove", function (e) {
11165            i = "", e.movementY > 0 ? i = "down" : e.movementY < 0 && (i = "up");
11166          }), {
11167            get: function get() {
11168              return i;
11169            }
11170          });
11171          this.node.menu.addEventListener("scroll", a, {
11172            passive: !1
11173          }), this.node.menu.addEventListener("touchmove", function (e) {
11174            var t = e.target.closest(".mm-panel, .mm-iconbar__top, .mm-iconbar__bottom");
11175            t && t.closest(".mm-listitem_vertical") && (t = L(t, ".mm-panel").pop()), t ? (t.scrollHeight === t.offsetHeight || 0 == t.scrollTop && "down" == s.get() || t.scrollHeight == t.scrollTop + t.offsetHeight && "up" == s.get()) && a(e) : a(e);
11176          }, {
11177            passive: !1
11178          }), this.bind("open:start", function () {
11179            var t = y(e.node.pnls, ".mm-panel_opened")[0];
11180            t && (t.scrollTop = 0);
11181          }), window.addEventListener("orientationchange", function (t) {
11182            var n = y(e.node.pnls, ".mm-panel_opened")[0];
11183            n && (n.scrollTop = 0, n.style["-webkit-overflow-scrolling"] = "auto", n.style["-webkit-overflow-scrolling"] = "touch");
11184          });
11185        }
11186      }
11187
11188      function a(e) {
11189        e.preventDefault(), e.stopPropagation();
11190      }
11191    },
11192    autoHeight: function autoHeight() {
11193      var e = this,
11194          t = function (e) {
11195        return "boolean" == typeof e && e && (e = {
11196          height: "auto"
11197        }), "string" == typeof e && (e = {
11198          height: e
11199        }), "object" != _typeof(e) && (e = {}), e;
11200      }(this.opts.autoHeight);
11201
11202      if (this.opts.autoHeight = o(t, M.options.autoHeight), "auto" == t.height || "highest" == t.height) {
11203        var n,
11204            i = (n = function n(e) {
11205          return e.parentElement.matches(".mm-listitem_vertical") && (e = L(e, ".mm-panel").filter(function (e) {
11206            return !e.parentElement.matches(".mm-listitem_vertical");
11207          })[0]), e;
11208        }, function () {
11209          if (!e.opts.offCanvas || e.vars.opened) {
11210            var i,
11211                s,
11212                a = 0,
11213                o = e.node.menu.offsetHeight - e.node.pnls.offsetHeight;
11214            e.node.menu.classList.add("mm-menu_autoheight-measuring"), "auto" == t.height ? ((s = y(e.node.pnls, ".mm-panel_opened")[0]) && (s = n(s)), s || (s = y(e.node.pnls, ".mm-panel")[0]), a = s.scrollHeight) : "highest" == t.height && (i = 0, y(e.node.pnls, ".mm-panel").forEach(function (e) {
11215              e = n(e), i = Math.max(i, e.scrollHeight);
11216            }), a = i), e.node.menu.style.height = a + o + "px", e.node.menu.classList.remove("mm-menu_autoheight-measuring");
11217          }
11218        });
11219        this.bind("initMenu:after", function () {
11220          e.node.menu.classList.add("mm-menu_autoheight");
11221        }), this.opts.offCanvas && this.bind("open:start", i), "highest" == t.height && this.bind("initPanels:after", i), "auto" == t.height && (this.bind("updateListview", i), this.bind("openPanel:start", i));
11222      }
11223    },
11224    backButton: function backButton() {
11225      var e = this;
11226
11227      if (this.opts.offCanvas) {
11228        var t = function (e) {
11229          return "boolean" == typeof e && (e = {
11230            close: e
11231          }), "object" != _typeof(e) && (e = {}), e;
11232        }(this.opts.backButton);
11233
11234        this.opts.backButton = o(t, M.options.backButton);
11235        var n = "#" + this.node.menu.id;
11236
11237        if (t.close) {
11238          var i = [],
11239              s = function s() {
11240            i = [n], y(e.node.pnls, ".mm-panel_opened, .mm-panel_opened-parent").forEach(function (e) {
11241              i.push("#" + e.id);
11242            });
11243          };
11244
11245          this.bind("open:finish", function () {
11246            history.pushState(null, document.title, n);
11247          }), this.bind("open:finish", s), this.bind("openPanel:finish", s), this.bind("close:finish", function () {
11248            i = [], history.back(), history.pushState(null, document.title, location.pathname + location.search);
11249          }), window.addEventListener("popstate", function (t) {
11250            if (e.vars.opened && i.length) {
11251              var s = (i = i.slice(0, -1))[i.length - 1];
11252              s == n ? e.close() : (e.openPanel(e.node.menu.querySelector(s)), history.pushState(null, document.title, n));
11253            }
11254          });
11255        }
11256
11257        t.open && window.addEventListener("popstate", function (t) {
11258          e.vars.opened || location.hash != n || e.open();
11259        });
11260      }
11261    },
11262    columns: function columns() {
11263      var e = this,
11264          t = function (e) {
11265        return "boolean" == typeof e && (e = {
11266          add: e
11267        }), "number" == typeof e && (e = {
11268          add: !0,
11269          visible: e
11270        }), "object" != _typeof(e) && (e = {}), "number" == typeof e.visible && (e.visible = {
11271          min: e.visible,
11272          max: e.visible
11273        }), e;
11274      }(this.opts.columns);
11275
11276      if (this.opts.columns = o(t, M.options.columns), t.add) {
11277        t.visible.min = Math.max(1, Math.min(6, t.visible.min)), t.visible.max = Math.max(t.visible.min, Math.min(6, t.visible.max));
11278
11279        for (var n = [], i = [], s = ["mm-panel_opened", "mm-panel_opened-parent", "mm-panel_highest"], a = 0; a <= t.visible.max; a++) {
11280          n.push("mm-menu_columns-" + a), i.push("mm-panel_columns-" + a);
11281        }
11282
11283        s.push.apply(s, i), this.bind("openPanel:before", function (t) {
11284          var n;
11285
11286          if (t && (n = t.mmParent), n && !n.classList.contains("mm-listitem_vertical") && (n = n.closest(".mm-panel"))) {
11287            var i = n.className;
11288            if (i.length && (i = i.split("mm-panel_columns-")[1])) for (var a = parseInt(i.split(" ")[0], 10) + 1; a > 0;) {
11289              if (!(t = y(e.node.pnls, ".mm-panel_columns-" + a)[0])) {
11290                a = -1;
11291                break;
11292              }
11293
11294              a++, t.classList.add("mm-hidden"), s.forEach(function (e) {
11295                t.classList.remove(e);
11296              });
11297            }
11298          }
11299        }), this.bind("openPanel:start", function (s) {
11300          if (s) {
11301            var a = s.mmParent;
11302            if (a && a.classList.contains("mm-listitem_vertical")) return;
11303          }
11304
11305          var o = y(e.node.pnls, ".mm-panel_opened-parent").length;
11306          s.matches(".mm-panel_opened-parent") || o++, o = Math.min(t.visible.max, Math.max(t.visible.min, o)), n.forEac
11306h(function (t) {
11307            e.node.menu.classList.remove(t);
11308          }), e.node.menu.classList.add("mm-menu_columns-" + o);
11309          var r = [];
11310          y(e.node.pnls, ".mm-panel").forEach(function (e) {
11311            i.forEach(function (t) {
11312              e.classList.remove(t);
11313            }), e.matches(".mm-panel_opened-parent") && r.push(e);
11314          }), r.push(s), r.slice(-t.visible.max).forEach(function (e, t) {
11315            e.classList.add("mm-panel_columns-" + t);
11316          });
11317        });
11318      }
11319    },
11320    counters: function counters() {
11321      var e = this,
11322          t = function (e) {
11323        return "boolean" == typeof e && (e = {
11324          add: e,
11325          addTo: "panels",
11326          count: e
11327        }), "object" != _typeof(e) && (e = {}), "panels" == e.addTo && (e.addTo = ".mm-listview"), e;
11328      }(this.opts.counters);
11329
11330      if (this.opts.counters = o(t, M.options.counters), this.bind("initListview:after", function (t) {
11331        var n = e.conf.classNames.counters.counter;
11332
11333        _(t, "." + n).forEach(function (e) {
11334          x(e, n, "mm-counter");
11335        });
11336      }), t.add && this.bind("initListview:after", function (e) {
11337        if (e.matches(t.addTo)) {
11338          var n = e.closest(".mm-panel").mmParent;
11339
11340          if (n && !_(n, ".mm-counter").length) {
11341            var i = y(n, ".mm-btn")[0];
11342            i && i.prepend(g("span.mm-counter"));
11343          }
11344        }
11345      }), t.count) {
11346        var n = function n(t) {
11347          (t ? [t.closest(".mm-panel")] : y(e.node.pnls, ".mm-panel")).forEac
11347h(function (e) {
11348            var t = e.mmParent;
11349
11350            if (t) {
11351              var n = _(t, ".mm-counter")[0];
11352
11353              if (n) {
11354                var i = [];
11355                y(e, ".mm-listview").forEach(function (e) {
11356                  i.push.apply(i, y(e));
11357                }), n.innerHTML = w(i).length.toString();
11358              }
11359            }
11360          });
11361        };
11362
11363        this.bind("initListview:after", n), this.bind("updateListview", n);
11364      }
11365    },
11366    dividers: function dividers() {
11367      var e = this,
11368          t = function (e) {
11369        return "boolean" == typeof e && (e = {
11370          add: e
11371        }), "object" != _typeof(e) && (e = {}), "panels" == e.addTo && (e.addTo = ".mm-listview"), e;
11372      }(this.opts.dividers);
11373
11374      this.opts.dividers = o(t, M.options.dividers), this.bind("initListview:after", function (t) {
11375        y(t).forEach(function (t) {
11376          x(t, e.conf.classNames.divider, "mm-divider"), t.matches(".mm-divider") && t.classList.remove("mm-listitem");
11377        });
11378      }), t.add && this.bind("initListview:after", function (e) {
11379        if (e.matches(t.addTo)) {
11380          _(e, ".mm-divider").forEach(function (e) {
11381            e.remove();
11382          });
11383
11384          var n = "";
11385          w(y(e)).forEach(function (t) {
11386            var i = y(t, ".mm-listitem__text")[0].textContent.trim().toLowerCase()[0];
11387
11388            if (i.length && i != n) {
11389              n = i;
11390              var s = g("li.mm-divider");
11391              s.textContent = i, e.insertBefore(s, t);
11392            }
11393          });
11394        }
11395      });
11396    },
11397    drag: function drag() {
11398      var e = this;
11399
11400      if (this.opts.offCanvas) {
11401        var t = function (e) {
11402          return "boolean" == typeof e && (e = {
11403            open: e
11404          }), "object" != _typeof(e) && (e = {}), e;
11405        }(this.opts.drag);
11406
11407        this.opts.drag = o(t, M.options.drag), t.open && this.bind("setPage:after", function (n) {
11408          ce.call(e, t.node || n);
11409        });
11410      }
11411    },
11412    dropdown: function dropdown() {
11413      var e = this;
11414
11415      if (this.opts.offCanvas) {
11416        var t = function (e) {
11417          return "boolean" == typeof e && e && (e = {
11418            drop: e
11419          }), "object" != _typeof(e) && (e = {}), "string" == typeof e.position && (e.position = {
11420            of: e.position
11421          }), e;
11422        }(this.opts.dropdown);
11423
11424        this.opts.dropdown = o(t, M.options.dropdown);
11425        var n = this.conf.dropdown;
11426
11427        if (t.drop) {
11428          var i;
11429          this.bind("initMenu:after", function () {
11430            if (e.node.menu.classList.add("mm-menu_dropdown"), "string" != typeof t.position.of) {
11431              var n = p(e.node.menu.id);
11432              n && (t.position.of = '[href="#' + n + '"]');
11433            }
11434
11435            if ("string" == typeof t.position.of) {
11436              i = _(document.body, t.position.of)[0];
11437              var s = t.event.split(" ");
11438              1 == s.length && (s[1] = s[0]), "hover" == s[0] && i.addEventListener("mouseenter", function () {
11439                e.open();
11440              }, {
11441                passive: !0
11442              }), "hover" == s[1] && e.node.menu.addEventListener("mouseleave", function () {
11443                e.close();
11444              }, {
11445                passive: !0
11446              });
11447            }
11448          }), this.bind("open:start", function () {
11449            e.node.menu.mmStyle = e.node.menu.getAttribute("style"), e.node.wrpr.classList.add("mm-wrapper_dropdown");
11450          }), this.bind("close:finish", function () {
11451            e.node.menu.setAttribute("style", e.node.menu.mmStyle), e.node.wrpr.classList.remove("mm-wrapper_dropdown");
11452          });
11453
11454          var s = function s(e, _s) {
11455            var a,
11456                o,
11457                r,
11458                c = _s[0],
11459                m = _s[1],
11460                l = "x" == e ? "offsetWidth" : "offsetHeight",
11461                d = "x" == e ? "left" : "top",
11462                p = "x" == e ? "right" : "bottom",
11463                u = "x" == e ? "width" : "height",
11464                f = "x" == e ? "innerWidth" : "innerHeight",
11465                h = "x" == e ? "maxWidth" : "maxHeight",
11466                v = null,
11467                b = (a = d, i.getBoundingClientRect()[a] + document.body["left" === a ? "scrollLeft" : "scrollTop"]),
11468                g = b + i[l],
11469                _ = window[f],
11470                y = n.offset.button[e] + n.offset.viewport[e];
11471            if (t.position[e]) switch (t.position[e]) {
11472              case "left":
11473              case "bottom":
11474                v = "after";
11475                break;
11476
11477              case "right":
11478              case "top":
11479                v = "before";
11480            }
11481            return null === v && (v = b + (g - b) / 2 < _ / 2 ? "after" : "before"), "after" == v ? (r = _ - ((o = "x" == e ? b : g) + y), c[d] = o + n.offset.button[e] + "px", c[p] = "auto", t.tip && m.push("mm-menu_tip-" + ("x" == e ? "left" : "top"))) : (r = (o = "x" == e ? g : b) - y, c[p] = "calc( 100% - " + (o - n.offset.button[e]) + "px )", c[d] = "auto", t.tip && m.push("mm-menu_tip-" + ("x" == e ? "right" : "bottom"))), t.fitViewport && (c[h] = Math.min(n[u].max, r) + "px"), [c, m];
11482          };
11483
11484          this.bind("open:start", a), window.addEventListener("resize", function (t) {
11485            a.call(e);
11486          }, {
11487            passive: !0
11488          }), this.opts.offCanvas.blockUI || window.addEventListener("scroll", function (t) {
11489            a.call(e);
11490          }, {
11491            passive: !0
11492          });
11493        }
11494      }
11495
11496      function a() {
11497        var e = this;
11498
11499        if (this.vars.opened) {
11500          this.node.menu.setAttribute("style", this.node.menu.mmStyle);
11501          var n = [{}, []];
11502
11503          for (var i in n = s.call(this, "y", n), (n = s.call(this, "x", n))[0]) {
11504            this.node.menu.style[i] = n[0][i];
11505          }
11506
11507          if (t.tip) {
11508            ["mm-menu_tip-left", "mm-menu_tip-right", "mm-menu_tip-top", "mm-menu_tip-bottom"].forEach(function (t) {
11509              e.node.menu.classList.remove(t);
11510            }), n[1].forEach(function (t) {
11511              e.node.menu.classList.add(t);
11512            });
11513          }
11514        }
11515      }
11516    },
11517    fixedElements: function fixedElements() {
11518      var e = this;
11519
11520      if (this.opts.offCanvas) {
11521        var t,
11522            n,
11523            i = this.conf.fixedElements;
11524        this.bind("setPage:after", function (s) {
11525          t = e.conf.classNames.fixedElements.fixed, n = _(document, i.insertSelector)[0], _(s, "." + t).forEach(function (e) {
11526            x(e, t, "mm-slideout"), n[i.insertMethod](e);
11527          });
11528        });
11529      }
11530    },
11531    iconbar: function iconbar() {
11532      var e,
11533          t = this,
11534          n = function (e) {
11535        return "array" == r(e) && (e = {
11536          use: !0,
11537          top: e
11538        }), "object" != r(e) && (e = {}), void 0 === e.use && (e.use = !0), "boolean" == typeof e.use && e.use && (e.use = !0), e;
11539      }(this.opts.iconbar);
11540
11541      if ((this.opts.iconbar = o(n, M.options.iconbar), n.use) && (["top", "bottom"].forEach(function (t, i) {
11542        var s = n[t];
11543        "array" != r(s) && (s = [s]);
11544
11545        for (var a = g("div.mm-iconbar__" + t), o = 0, c = s.length; o < c; o++) {
11546          "string" == typeof s[o] ? a.innerHTML += s[o] : a.append(s[o]);
11547        }
11548
11549        a.children.length && (e || (e = g("div.mm-iconbar")), e.append(a));
11550      }), e)) {
11551        this.bind("initMenu:after", function () {
11552          t.node.menu.prepend(e);
11553        });
11554
11555        var i = "mm-menu_iconbar-" + n.position,
11556            s = function s() {
11557          t.node.menu.classList.add(i), M.sr_aria(e, "hidden", !1);
11558        };
11559
11560        if ("boolean" == typeof n.use ? this.bind("initMenu:after", s) : k(n.use, s, function () {
11561          t.node.menu.classList.remove(i), M.sr_aria(e, "hidden", !0);
11562        }), "tabs" == n.type) {
11563          e.classList.add("mm-iconbar_tabs"), e.addEventListener("click", function (e) {
11564            var n = e.target;
11565            if (n.matches("a")) if (n.matches(".mm-iconbar__tab_selected")) e.stopImmediatePropagation();else try {
11566              var i = t.node.menu.querySelector(n.getAttribute("href"))[0];
11567              i && i.matches(".mm-panel") && (e.preventDefault(), e.stopImmediatePropagation(), t.openPanel(i, !1));
11568            } catch (e) {}
11569          });
11570
11571          var a = function a(t) {
11572            _(e, "a").forEach(function (e) {
11573              e.classList.remove("mm-iconbar__tab_selected");
11574            });
11575
11576            var n = _(e, '[href="#' + t.id + '"]')[0];
11577
11578            if (n) n.classList.add("mm-iconbar__tab_selected");else {
11579              var i = t.mmParent;
11580              i && a(i.closest(".mm-panel"));
11581            }
11582          };
11583
11584          this.bind("openPanel:start", a);
11585        }
11586      }
11587    },
11588    iconPanels: function iconPanels() {
11589      var e = this,
11590          t = function (e) {
11591        return "boolean" == typeof e && (e = {
11592          add: e
11593        }), "number" != typeof e && "string" != typeof e || (e = {
11594          add: !0,
11595          visible: e
11596        }), "object" != _typeof(e) && (e = {}), e;
11597      }(this.opts.iconPanels);
11598
11599      this.opts.iconPanels = o(t, M.options.iconPanels);
11600      var n = !1;
11601
11602      if ("first" == t.visible && (n = !0, t.visible = 1), t.visible = Math.min(3, Math.max(1, t.visible)), t.visible++, t.add) {
11603        this.bind("initMenu:after", function () {
11604          var n = ["mm-menu_iconpanel"];
11605          t.hideNavbar && n.push("mm-menu_hidenavbar"), t.hideDivider && n.push("mm-menu_hidedivi
11605der"), n.forEach(function (t) {
11606            e.node.menu.classList.add(t);
11607          });
11608        });
11609        var i = [];
11610        if (!n) for (var s = 0; s <= t.visible; s++) {
11611          i.push("mm-panel_iconpanel-" + s);
11612        }
11613        this.bind("openPanel:start", function (s) {
11614          var a = y(e.node.pnls, ".mm-panel");
11615          if (!(s = s || a[0]).parentElement.matches(".mm-listitem_vertical")) if (n) a.forEach(function (e, t) {
11616            e.classList[0 == t ? "add" : "remove"]("mm-panel_iconpanel-first");
11617          });else {
11618            a.forEach(function (e) {
11619              i.forEach(function (t) {
11620                e.classList.remove(t);
11621              });
11622            }), a = a.filter(function (e) {
11623              return e.matches(".mm-panel_opened-parent");
11624            });
11625            var o = !1;
11626            a.forEach(function (e) {
11627              s === e && (o = !0);
11628            }), o || a.push(s), a.forEach(function (e) {
11629              e.classList.remove("mm-hidden");
11630            }), (a = a.slice(-t.visible)).forEach(function (e, t) {
11631              e.classList.add("mm-panel_iconpanel-" + t);
11632            });
11633          }
11634        }), this.bind("initPanel:after", function (e) {
11635          if (t.blockPanel && !e.parentElement.matches(".mm-listitem_vertical") && !y(e, ".mm-panel__blocker")[0]) {
11636            var n = g("a.mm-panel__blocker");
11637            n.setAttribute("href", "#" + e.closest(".mm-panel").id), e.prepend(n);
11638          }
11639        });
11640      }
11641    },
11642    keyboardNavigation: function keyboardNavigation() {
11643      var e = this;
11644
11645      if (!W) {
11646        var t = function (e) {
11647          return "boolean" != typeof e && "string" != typeof e || (e = {
11648            enable: e
11649          }), "object" != _typeof(e) && (e = {}), e;
11650        }(this.opts.keyboardNavigation);
11651
11652        if (this.opts.keyboardNavigation = o(t, M.options.keyboardNavigation), t.enable) {
11653          var n = g("button.mm-tabstart.mm-sronly"),
11654              i = g("button.mm-tabend.mm-sronly"),
11655              s = g("button.mm-tabend.mm-sronly");
11656          this.bind("initMenu:after", function () {
11657            t.enhance && e.node.menu.classList.add("mm-menu_keyboardfocus"), ve.call(e, t.enhance);
11658          }), this.bind("initOpened:before", function () {
11659            e.node.menu.prepend(n), e.node.menu.append(i), y(e.node.menu, ".mm-navbars-top, .mm-navbars-bottom").forEach(function (e) {
11660              e.querySelectorAll(".mm-navbar__title").forEach(function (e) {
11661                e.setAttribute("tabindex", "-1");
11662              });
11663            });
11664          }), this.bind("initBlocker:after", function () {
11665            M.node.blck.append(s), y(M.node.blck, "a")[0].classList.add("mm-tabstart");
11666          });
11667
11668          var a = "input, select, textarea, button, label, a[href]",
11669              r = function r(n) {
11670            n = n || y(e.node.pnls, ".mm-panel_opened")[0];
11671            var i = null,
11672                s = document.activeElement.closest(".mm-navbar");
11673
11674            if (!s || s.closest(".mm-menu") != e.node.menu) {
11675              if ("default" == t.enable && ((i = _(n, ".mm-listview a[href]:not(.mm-hidden)")[0]) || (i = _(n, a + ":not(.mm-hidden)")[0]), !i)) {
11676                var o = [];
11677                y(e.node.menu, ".mm-navbars_top, .mm-navbars_bottom").forEach(function (e) {
11678                  o.push.apply(o, _(e, a + ":not(.mm-hidden)"));
11679                }), i = o[0];
11680              }
11681
11682              i || (i = y(e.node.menu, ".mm-tabstart")[0]), i && i.focus();
11683            }
11684          };
11685
11686          this.bind("open:finish", r), this.bind("openPanel:finish", r), this.bind("initOpened:after:sr-aria", function () {
11687            [e.node.menu, M.node.blck].forEach(function (e) {
11688              y(e, ".mm-tabstart, .mm-tabend").forEach(function (e) {
11689                M.sr_aria(e, "hidden", !0), M.sr_role(e, "presentation");
11690              });
11691            });
11692          });
11693        }
11694      }
11695    },
11696    lazySubmenus: function lazySubmenus() {
11697      var e = this,
11698          t = function (e) {
11699        return "boolean" == typeof e && (e = {
11700          load: e
11701        }), "object" != _typeof(e) && (e = {}), e;
11702      }(this.opts.lazySubmenus);
11703
11704      this.opts.lazySubmenus = o(t, M.options.lazySubmenus), t.load && (this.bind("initPanels:before", function () {
11705        var t = [];
11706        _(e.node.pnls, "li").forEach(function (n) {
11707          t.push.apply(t, y(n, e.conf.panelNodetype.join(", ")));
11708        }), t.filter(function (e) {
11709          return !e.matches(".mm-listview_inset");
11710        }).filter(function (e) {
11711          return !e.matches(".mm-nolistview");
11712        }).filter(function (e) {
11713          return !e.matches(".mm-nopanel");
11714        }
11714).forEach(function (e) {
11715          ["mm-panel_lazysubmenu", "mm-nolistview", "mm-nopanel"].forEach(function (t) {
11716            e.classList.add(t);
11717          });
11718        });
11719      }), this.bind("initPanels:before", function () {
11720        var t = [];
11721        _(e.node.pnls, "." + e.conf.classNames.selected).forEach(function (e) {
11722          t.push.apply(t, L(e, ".mm-panel_lazysubmenu"));
11723        }), t.length && t.forEach(function (e) {
11724          console.log(e);
11725          ["mm-panel_lazysubmenu", "mm-nolistview", "mm-nopanel"].forEach(function (t) {
11726            e.classList.remove(t);
11727          });
11728        });
11729      }), this.bind("openPanel:before", function (t) {
11730        var n = _(t, ".mm-panel_lazysubmenu").filter(function (e) {
11731          return !e.matches(".mm-panel_lazysubmenu .mm-panel_lazysubmenu");
11732        });
11733
11734        t.matches(".mm-panel_lazysubmenu") && n.unshift(t), n.forEach(function (t) {
11735          ["mm-panel_lazysubmenu", "mm-nolistview", "mm-nopanel"].forEach(function (e) {
11736            t.classList.remove(e);
11737          }), e.initPanel(t);
11738        });
11739      }));
11740    },
11741    navbars: ye,
11742    pageScroll: function pageScroll() {
11743      var e = this,
11744          t = function (e) {
11745        return "boolean" == typeof e && (e = {
11746          scroll: e
11747        }), "object" != _typeof(e) && (e = {}), e;
11748      }(this.opts.pageScroll);
11749
11750      this.opts.pageScroll = o(t, M.options.pageScroll);
11751      var n,
11752          i = this.conf.pageScroll;
11753
11754      function s() {
11755        n && window.scrollTo({
11756          top: n.getBoundingClientRect().top + document.scrollingElement.scrollTop - i.scrollOffset,
11757          behavior: "smooth"
11758        }), n = null;
11759      }
11760
11761      function a(e) {
11762        try {
11763          return "#" != e && "#" == e.slice(0, 1) ? M.node.page.querySelector(e) : null;
11764        } catch (e) {
11765          return null;
11766        }
11767      }
11768
11769      if (t.scroll && this.bind("close:finish", function () {
11770        s();
11771      }), this.opts.offCanvas && t.scroll && this.clck.push(function (t, i) {
11772        if (n = null, i.inMenu) {
11773          var o = t.getAttribute("href");
11774          if (n = a(o)) return e.node.menu.matches(".mm-menu_sidebar-expanded") && e.node.wrpr.matches(".mm-wrapper_sidebar-expanded") ? void s() : {
11775            close: !0
11776          };
11777        }
11778      }), t.update) {
11779        var r = [];
11780        this.bind("initListview:after", function (e) {
11781          E(y(e, ".mm-listitem")).forEach(function (e) {
11782            var t = a(e.getAttribute("href"));
11783            t && r.unshift(t);
11784          });
11785        });
11786        var c = -1;
11787        window.addEventListener("scroll", function (t) {
11788          for (var n = window.scrollY, s = 0; s < r.length; s++) {
11789            if (r[s].offsetTop < n + i.updateOffset) {
11790              if (c !== s) {
11791                c = s;
11792                var a = E(_(y(e.node.pnls, ".mm-panel_opened")[0], ".mm-listitem"));
11793                (a = a.filter(function (e) {
11794                  return e.matches('[href="#' + r[s].id + '"]');
11795                })).length && e.setSelected(a[0].parentElement);
11796              }
11797
11798              break;
11799            }
11800          }
11801        });
11802      }
11803    },
11804    searchfield: function searchfield() {
11805      var e = this,
11806          t = function (e) {
11807        return "boolean" == typeof e && (e = {
11808          add: e
11809        }), "object" != _typeof(e) && (e = {}), "boolean" == typeof e.panel && (e.panel = {
11810          add: e.panel
11811        }), "object" != _typeof(e.panel) && (e.panel = {}), "panel" == e.addTo && (e.panel.add = !0), e.panel.add && (e.showSubPanels = !1, e.panel.splash && (e.cancel = !0)), e;
11812      }(this.opts.searchfield);
11813
11814      this.opts.searchfield = o(t, M.options.searchfield);
11815      this.conf.searchfield;
11816      t.add && (this.bind("close:start", function () {
11817        _(e.node.menu, ".mm-searchfield").forEach(function (e) {
11818          e.blur();
11819        });
11820      }), this.bind("initPanel:after", function (n) {
11821        var i = null;
11822        t.panel.add && (i = Ae.call(e));
11823        var s = null;
11824
11825        switch (t.addTo) {
11826          case "panels":
11827            s = [n];
11828            break;
11829
11830          case "panel":
11831            s = [i];
11832            break;
11833
11834          default:
11835            "string" == typeof t.addTo ? s = _(e.node.menu, t.addTo) : "array" == r(t.addTo) && (s = t.addTo);
11836        }
11837
11838        s.forEach(function (n) {
11839          n = Te.call(e, n), t.search && n && Ce.call(e, n);
11840        }), t.noResults && Ne.call(e, t.panel.add ? i : n);
11841      }), this.clck.push(function (t, n) {
11842        if (n.inMenu && t.matches(".mm-searchfield__btn")) {
11843          if (t.matches(".mm-btn_close")) {
11844            var i = _(s = t.closest(".mm-searchfield"), "input")[0];
11845
11846            return i.value = "", e.search(i), !0;
11847          }
11848
11849          var s;
11850          if (t.matches(".mm-btn_next")) return (s = t.closest("form")) && s.submit(), !0;
11851        }
11852      }));
11853    },
11854    sectionIndexer: function sectionIndexer() {
11855      var e = this,
11856          t = function (e) {
11857        return "boolean" == typeof e && (e = {
11858          add: e
11859        }), "object" != _typeof(e) && (e = {}), e;
11860      }(this.opts.sectionIndexer);
11861
11862      this.opts.sectionIndexer = o(t, M.options.sectionIndexer), t.add && this.bind("initPanels:after", function () {
11863        if (!e.node.indx) {
11864          var t = "";
11865          "abcdefghijklmnopqrstuvwxyz".split("").forEach(function (e) {
11866            t += '<a href="#">' + e + "</a>";
11867          });
11868          var n = g("div.mm-sectionindexer");
11869          n.innerHTML = t, e.node.pnls.prepend(n), e.node.indx = n, e.node.indx.addEventListener("click", function (e) {
11870            e.target.matches("a") && e.preventDefault();
11871          });
11872
11873          var i = function i(t) {
11874            if (t.target.matches("a")) {
11875              var n = t.target.textContent,
11876                  i = y(e.node.pnls, ".mm-panel_opened")[0],
11877                  s = -1,
11878                  a = i.scrollTop;
11879              i.scrollTop = 0, _(i, ".mm-divider").filter(function (e) {
11880                return !e.matches(".mm-hidden");
11881              }
11881).forEach(function (e) {
11882                s < 0 && n == e.textContent.trim().slice(0, 1).toLowerCase() && (s = e.offsetTop);
11883              }), i.scrollTop = s > -1 ? s : a;
11884            }
11885          };
11886
11887          W ? (e.node.indx.addEventListener("touchstart", i), e.node.indx.addEventListener("touchmove", i)) : e.node.indx.addEventListener("mouseover", i);
11888        }
11889
11890        e.bind("openPanel:start", function (t) {
11891          var n = _(t, ".mm-divider").filter(function (e) {
11892            return !e.matches(".mm-hidden");
11893          }).length;
11894
11895          e.node.indx.classList[n ? "add" : "remove"]("mm-sectionindexer_active");
11896        });
11897      });
11898    },
11899    setSelected: function setSelected() {
11900      var e = this,
11901          t = function (e) {
11902        return "boolean" == typeof e && (e = {
11903          hover: e,
11904          parent: e
11905        }), "object" != _typeof(e) && (e = {}), e;
11906      }(this.opts.setSelected);
11907
11908      if (this.opts.setSelected = o(t, M.options.setSelected), "detect" == t.current) {
11909        var n = function n(t) {
11910          t = t.split("?")[0].split("#")[0];
11911          var i = e.node.menu.querySelector('a[href="' + t + '"], a[href="' + t + '/"]');
11912          if (i) e.setSelected(i.parentElement);else {
11913            var s = t.split("/").slice(0, -1);
11914            s.length && n(s.join("/"));
11915          }
11916        };
11917
11918        this.bind("initMenu:after", function () {
11919          n.call(e, window.location.href);
11920        });
11921      } else t.current || this.bind("initListview:after", function (e) {
11922        y(e, ".mm-listitem_selected").forEach(function (e) {
11923          e.classList.remove("mm-listitem_selected");
11924        });
11925      });
11926
11927      t.hover && this.bind("initMenu:after", function () {
11928        e.node.menu.classList.add("mm-menu_selected-hover");
11929      }), t.parent && (this.bind("openPanel:finish", function (t) {
11930        _(e.node.pnls, ".mm-listitem_selected-parent").forEach(function (e) {
11931          e.classList.remove("mm-listitem_selected-parent");
11932        });
11933
11934        for (var n = t.mmParent; n;) {
11935          n.matches(".mm-listitem_vertical") || n.classList.add("mm-listitem_selected-parent"), n = (n = n.closest(".mm-panel")).mmParent;
11936        }
11937      }), this.bind("initMenu:after", function () {
11938        e.node.menu.classList.add("mm-menu_selected-parent");
11939      }));
11940    },
11941    sidebar: function sidebar() {
11942      var e = this;
11943
11944      if (this.opts.offCanvas) {
11945        var t = function (e) {
11946          return ("string" == typeof e || "boolean" == typeof e && e || "number" == typeof e) && (e = {
11947            expanded: e
11948          }), "object" != _typeof(e) && (e = {}), "boolean" == typeof e.collapsed && e.collapsed && (e.collapsed = {
11949            use: !0
11950          }), "string" != typeof e.collapsed && "number" != typeof e.collapsed || (e.collapsed = {
11951            use: e.collapsed
11952          }), "object" != _typeof(e.collapsed) && (e.collapsed = {}), "boolean" == typeof e.expanded && e.expanded && (e.expanded = {
11953            use: !0
11954          }), "string" != typeof e.expanded && "number" != typeof e.expanded || (e.expanded = {
11955            use: e.expanded
11956          }), "object" != _typeof(e.expanded) && (e.expanded = {}), e;
11957        }(this.opts.sidebar);
11958
11959        if (this.opts.sidebar = o(t, M.options.sidebar), t.collapsed.use) {
11960          this.bind("initMenu:after", function () {
11961            if (e.node.menu.classList.add("mm-menu_sidebar-collapsed"), t.collapsed.blockMenu && e.opts.offCanvas && !y(e.node.menu, ".mm-menu__blocker")[0]) {
11962              var n = g("a.mm-menu__blocker");
11963              n.setAttribute("href", "#" + e.node.menu.id), e.node.menu.prepend(n);
11964            }
11965
11966            t.collapsed.hideNavbar && e.node.menu.classList.add("mm-menu_hidenavbar"), t.collapsed.hideDivider && e.node.menu.classList.add("mm-menu_hidedivider");
11967          });
11968
11969          var n = function n() {
11970            e.node.wrpr.classList.add("mm-wrapper_sidebar-collapsed");
11971          },
11972              i = function i() {
11973            e.node.wrpr.classList.remove("mm-wrapper_sidebar-collapsed");
11974          };
11975
11976          "boolean" == typeof t.collapsed.use ? this.bind("initMenu:after", n) : k(t.collapsed.use, n, i);
11977        }
11978
11979        if (t.expanded.use) {
11980          this.bind("initMenu:after", function () {
11981            e.node.menu.classList.add("mm-menu_sidebar-expanded");
11982          });
11983          n = function n() {
11984            e.node.wrpr.classList.add("mm-wrapper_sidebar-expanded"), e.node.wrpr.matches(".mm-wrapper_sidebar-closed") || e.open();
11985          }, i = function i() {
11986            e.node.wrpr.classList.remove("mm-wrapper_sidebar-expanded"), e.close();
11987          };
11988          "boolean" == typeof t.expanded.use ? this.bind("initMenu:after", n) : k(t.expanded.use, n, i), this.bind("close:start", function () {
11989            e.node.wrpr.matches(".mm-wrapper_sidebar-expanded") && (e.node.wrpr.classList.add("mm-wrapper_sidebar-closed"), "remember" == t.expanded.initial && window.localStorage.setItem("mmenuExpandedState", "closed"));
11990          }), this.bind("open:start", function () {
11991            e.node.wrpr.matches(".mm-wrapper_sidebar-expanded") && (e.node.wrpr.classList.remove("mm-wrapper_sidebar-closed"), "remember" == t.expanded.initial && window.localStorage.setItem("mmenuExpandedState", "open"));
11992          });
11993          var s = t.expanded.initial;
11994
11995          if ("remember" == t.expanded.initial) {
11996            var a = window.localStorage.getItem("mmenuExpandedState");
11997
11998            switch (a) {
11999              case "open":
12000              case "closed":
12001                s = a;
12002            }
12003          }
12004
12005          "closed" == s && this.bind("initMenu:after", function () {
12006            e.node.wrpr.classList.add("mm-wrapper_sidebar-closed");
12007          }), this.clck.push(function (n, i) {
12008            if (i.inMenu && i.inListview && e.node.wrpr.matches(".mm-wrapper_sidebar-expanded")) return {
12009              close: "closed" == t.expanded.initial
12010            };
12011          });
12012        }
12013      }
12014    },
12015    toggles: function toggles() {
12016      var e = this;
12017      this.bind("initPanel:after", function (t) {
12018        _(t, "input").forEach(function (t) {
12019          x(t, e.conf.classNames.toggles.toggle, "mm-toggle"), x(t, e.conf.classNames.toggles.check, "mm-check");
12020        });
12021      });
12022    }
12023  }, M.wrappers = {
12024    angular: function angular() {
12025      this.opts.onClick = {
12026        close: !0,
12027        preventDefault: !1,
12028        setSelected: !0
12029      };
12030    },
12031    bootstrap: function bootstrap() {
12032      var e = this;
12033
12034      if (this.node.menu.matches(".navbar-collapse")) {
12035        this.conf.offCanvas && (this.conf.offCanvas.clone = !1);
12036        var t = g("nav"),
12037            n = g("div");
12038        t.append(n), y(this.node.menu).forEach(function (t) {
12039          switch (!0) {
12040            case t.matches(".navbar-nav"):
12041              n.append(function (e) {
12042                var t = g("ul");
12043                return _(e, ".nav-item").forEach(function (e) {
12044                  var n = g("li");
12045
12046                  if (e.matches(".active") && n.classList.add("Selected"), !e.matches(".nav-link")) {
12047                    var i = y(e, ".dropdown-menu")[0];
12048                    i && n.append(o(i)), e = y(e, ".nav-link")[0];
12049                  }
12050
12051                  n.prepend(a(e)), t.append(n);
12052                }), t;
12053              }(t));
12054              break;
12055
12056            case t.matches(".dropdown-menu"):
12057              n.append(o(t));
12058              break;
12059
12060            case t.matches(".form-inline"):
12061              e.conf.searchfield.form = {
12062                action: t.getAttribute("action") || null,
12063                method: t.getAttribute("method") || null
12064              }, e.conf.searchfield.input = {
12065                name: t.querySelector("input").getAttribute("name") || null
12066              }, e.conf.searchfield.clear = !1, e.conf.searchfield.submit = !0;
12067              break;
12068
12069            default:
12070              n.append(t.cloneNode(!0));
12071          }
12072        }), this.bind("initMenu:before", function () {
12073          document.body.prepend(t), e.node.menu = t;
12074        });
12075        var i = this.node.menu.parentElement;
12076
12077        if (i) {
12078          var s = i.querySelector(".navbar-toggler");
12079          s && (s.removeAttribute("data-target"), s.removeAttribute("aria-controls"), s.outerHTML = s.outerHTML, (s = i.querySelector(".navbar-toggler")).addEventListener("click", function (t) {
12080            t.preventDefault(), t.stopImmediatePropagation(), e[e.vars.opened ? "close" : "open"]();
12081          }));
12082        }
12083      }
12084
12085      function a(e) {
12086        for (var t = g(e.matches("a") ? "a" : "span"), n = ["href", "title", "target"], i = 0; i < n.length; i++) {
12087          e.getAttribute(n[i]) && t.setAttribute(n[i], e.getAttribute(n[i]));
12088        }
12089
12090        return t.innerHTML = e.innerHTML, _(t, ".sr-only").forEach(function (e) {
12091          e.remove();
12092        }), t;
12093      }
12094
12095      function o(e) {
12096        var t = g("ul");
12097        return y(e).forEach(function (e) {
12098          var n = g("li");
12099          e.matches(".dropdown-divider") ? n.classList.add("Divider") : e.matches(".dropdown-item") && n.append(a(e)), t.append(n);
12100        }), t;
12101      }
12102    },
12103    olark: function olark() {
12104      this.conf.offCanvas.page.noSelector.push("#olark");
12105    },
12106    turbolinks: function turbolinks() {
12107      var e;
12108      document.addEventListener("turbolinks:before-visit", function (t) {
12109        e = document.querySelector(".mm-wrapper").className.split(" ").filter(function (e) {
12110          return /mm-/.test(e);
12111        });
12112      }), document.addEventListener("turbolinks:load", function (t) {
12113        void 0 !== e && (document.querySelector(".mm-wrapper").className = e);
12114      });
12115    },
12116    wordpress: function wordpress() {
12117      this.conf.classNames.selected = "current-menu-item";
12118      var e = document.getElementById("wpadminbar");
12119      e && (e.style.position = "fixed", e.classList.add("mm-slideout"));
12120    }
12121  };
12122  var Oe;
12123  t.default = M;
12124  window && (window.Mmenu = M), (Oe = window.jQuery || window.Zepto || null) && (Oe.fn.mmenu = function (e, t) {
12125    var n = Oe();
12126    return this.each(function (i, s) {
12127      if (!s.mmApi) {
12128        var a = new M(s, e, t),
12129            o = Oe(a.node.menu);
12130        o.data("mmenu", a.API), n = n.add(o);
12131      }
12132    }), n;
12133  });
12134}]);
12135
12136},{}],7:[function(require,module,exports){
12137"use strict";
12138
12139Object.defineProperty(exports, "__esModule", {
12140  value: true
12141});
12142exports.default = void 0;
12143
12144function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12145
12146function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
12147
12148function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
12149
12150function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
12151
12152var pxEasyExpand = function () {
12153  function pxEasyExpand(button) {
12154    var _this = this;
12155
12156    var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12157    var buttonSettings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
12158
12159    _classCallCheck(this, pxEasyExpand);
12160
12161    this.defaults = {
12162      'setRootClass': false,
12163      'switchButtonHtml': false,
12164      'addCloseButton': false,
12165      'closeButtonPos': false,
12166      'closeWithEsc': false,
12167      'setFocusToElement': false,
12168      'setFocusToFirstElement': false,
12169      'keepFocusInTargetElement': false,
12170      'disableFocusHandling': false,
12171      'resetScrollPosition': false,
12172      'hiddenAttribute': 'aria-hidden',
12173      'hiddenWhenOpen': false
12174    };
12175    this.functions = {
12176      beforeToggle: function beforeToggle() {
12177        return null;
12178      },
12179      afterToggle: function afterToggle() {
12180        return null;
12181      }
12182    };
12183    this.config = Object.assign(this.defaults, settings);
12184    this.config.on = Object.assign(this.functions, settings.on);
12185    this.initButtons = [];
12186
12187    if (typeof button === 'string' || button instanceof String) {
12188      this.buttonObj = document.getElementById(button.replace('#', ''));
12189    } else {
12190      this.buttonObj = button;
12191    }
12192
12193    if (typeof this.buttonObj != 'undefined' && this.buttonObj != null) {
12194      this.buttonObj.controls = [];
12195      this.buttonObj.expanded = false;
12196    }
12197
12198    this.targetObj = [];
12199
12200    if (this.buttonObj && this.buttonObj.hasAttribute('data-controls')) {
12201      this.controls = this.buttonObj.getAttribute('data-controls');
12202      this.buttonObj.removeAttribute('data-controls');
12203    } else {
12204      this.controls = buttonSettings['controls'];
12205    }
12206
12207    if (this.controls) {
12208      var targetIds = this.controls.split(' ');
12209
12210      for (var i = 0; i < targetIds.length; i++) {
12211        this.targetObj[i] = document.getElementById(targetIds[i]);
12212        this.buttonObj.controls[i] = this.targetObj[i];
12213      }
12214    } else if (this.buttonObj && this.buttonObj.hasAttribute('href')) {
12215      this.targetObj[0] = document.getElementById(this.buttonObj.hash.replace('#', ''));
12216    }
12217
12218    if (this.targetObj.length < 1) {
12219      return;
12220    }
12221
12222    if (this.buttonObj.hasAttribute('data-label-open')) {
12223      this.labelOpen = this.buttonObj.getAttribute('data-label-open');
12224      this.buttonObj.removeAttribute('data-label-open');
12225    } else {
12226      this.labelOpen = buttonSettings['labelOpen'] ? buttonSettings['labelOpen'] : false;
12227    }
12228
12229    if (this.buttonObj.hasAttribute('data-label-close')) {
12230      this.labelClose = this.buttonObj.getAttribute('data-label-close');
12231      this.buttonObj.removeAttribute('data-label-close');
12232    } else {
12233      this.labelClose = buttonSettings['labelClose'] ? buttonSettings['labelClose'] : false;
12234    }
12235
12236    if (this.buttonObj.hasAttribute('data-text-open')) {
12237      this.textOpen = this.buttonObj.getAttribute('data-text-open');
12238      this.buttonObj.removeAttribute('data-text-open');
12239    } else {
12240      this.textOpen = buttonSettings['textOpen'] ? buttonSettings['textOpen'] : this.labelOpen;
12241    }
12242
12243    if (this.buttonObj.hasAttribute('data-text-close')) {
12244      this.textClose = this.buttonObj.getAttribute('data-text-close');
12245      this.buttonObj.removeAttribute('data-text-close');
12246    } else {
12247      this.textClose = buttonSettings['textClose'] ? buttonSettings['textClose'] : this.labelClose;
12248    }
12249
12250    if (this.buttonObj.hasAttribute('data-focus-helper-text')) {
12251      this.focusHelperText = this.buttonObj.getAttribute('data-focus-helper-text');
12252      this.buttonObj.removeAttribute('data-focus-helper-text');
12253    } else {
12254      this.focusHelperText = buttonSettings['focusHelperText'] ? buttonSettings['focusHelperText'] : this.labelClose;
12255    }
12256
12257    if (this.buttonObj) {
12258      this.initButton();
12259
12260      if (this.config.addCloseButton !== false) {
12261        this.closeButtonObj = document.createElement('button');
12262        this.closeButtonObj.innerHTML = '<span>' + this.textClose + '</span>';
12263        this.setAttributes(this.closeButtonObj, {
12264          'aria-controls': this.targetObj[0].id,
12265          'aria-expanded': 'true',
12266          'aria-label': this.labelClose,
12267          'class': 'js-close'
12268        });
12269        this.closeButtonObj.addEventListener('click', function (event) {
12270          event.preventDefault();
12271
12272          _this.toggleStates();
12273        }, false);
12274
12275        if (Number.isInteger(this.config.closeButtonPos)) {
12276          this.targetObj[0].insertBefore(this.closeButtonObj, this.targetObj[0].childNodes[this.config.closeButtonPos]);
12277        } else {
12278          this.targetObj[0].appendChild(this.closeButtonObj);
12279        }
12280      }
12281
12282      if (this.config.closeWithEsc === true) {
12283        this.targetObj[0].addEventListener('keyup', function (event) {
12284          if (event.defaultPrevented) {
12285            return;
12286          }
12287
12288          var key = event.key || event.keyCode;
12289
12290          if (key === 'Escape' || key === 'Esc' || key === 27) {
12291            event.preventDefault();
12292
12293            _this.toggleStates();
12294          }
12295        });
12296        this.buttonObj.addEventListener('keyup', function (event) {
12297          if (event.defaultPrevented || _this.buttonObj.getAttribute('aria-expanded') === 'false') {
12298            return;
12299          }
12300
12301          var key = event.key || event.keyCode;
12302
12303          if (key === 'Escape' || key === 'Esc' || key === 27) {
12304            event.preventDefault();
12305
12306            _this.toggleStates();
12307          }
12308        });
12309      }
12310
12311      if (this.config.keepFocusInTargetElement === true) {
12312        this.targetObj[0].addEventListener('keydown', function (event) {
12313          if (_this.config.disableFocusHandling === true || _this.isHidden(focusHelper) === true) {
12314            return;
12315          }
12316
12317          if (event.shiftKey === true && (event.which || event.keyCode) == 9) {
12318            var focusableElements = _this.targetObj[0].querySelectorAll('a[href]:not(.focus-helper),input,select,button');
12319
12320            var visibleFocusableElements = [];
12321
12322            for (var _i = 0; _i < focusableElements.length; _i++) {
12323              if (!_this.isHidden(focusableElements[_i])) {
12324                visibleFocusableElements.push(focusableElements[_i]);
12325              }
12326            }
12327
12328            if (visibleFocusableElements[0] == event.target) {
12329              if (_this.config.addCloseButton === true) {
12330                if (!_this.isHidden(_this.closeButtonObj)) {
12331                  event.preventDefault();
12332
12333                  _this.closeButtonObj.focus();
12334                }
12335              } else if (!_this.isHidden(_this.buttonObj)) {
12336                event.preventDefault();
12337
12338                _this.buttonObj.focus();
12339              }
12340            }
12341          }
12342        });
12343        var focusHelper = document.createElement('a');
12344        this.setAttributes(focusHelper, {
12345          'aria-label': this.focusHelperText,
12346          'href': '#' + this.buttonObj.id,
12347          'class': 'focus-helper'
12348        });
12349        focusHelper.innerHTML = '<span>' + this.focusHelperText + '</span>';
12350        focusHelper.addEventListener('focus', function (event) {
12351          event.preventDefault();
12352
12353          if (_this.config.addCloseButton === true) {
12354            var element = _this.targetObj[0].querySelector('a[href],input,select,button');
12355
12356            if (element !== null) {
12357              element.focus();
12358            }
12359          } else {
12360            _this.buttonObj.focus();
12361          }
12362        });
12363        this.targetObj[0].appendChild(focusHelper);
12364      }
12365    }
12366  }
12367
12368  _createClass(pxEasyExpand, [{
12369    key: "isHidden",
12370    value: function isHidden(element) {
12371      return element.offsetParent === null;
12372    }
12373  }, {
12374    key: "setAttributes",
12375    value: function setAttributes(element, attributes) {
12376      Object.keys(attributes).forEach(function (key) {
12377        return element.setAttribute(key, attributes[key]);
12378      });
12379    }
12380  }, {
12381    key: "setButton",
12382    value: function setButton(button) {
12383      var expanded = false;
12384
12385      if (this.buttonObj.getAttribute('aria-expanded') === 'true') {
12386        this.toggleStates();
12387        expanded = true;
12388      }
12389
12390      this.buttonObj = button;
12391
12392      if (this.initButtons.indexOf(this.buttonObj) < 0) {
12393        this.initButton();
12394      } else {
12395        this.addAria();
12396      }
12397
12398      if (expanded) {
12399        this.toggleStates();
12400      }
12401    }
12402  }, {
12403    key: "initButton",
12404    value: function initButton() {
12405      var _this2 = this;
12406
12407      this.addAria();
12408      this.buttonObj.addEventListener('click', function (event) {
12409        event.preventDefault();
12410
12411        _this2.toggleStates();
12412      }, false);
12413      this.buttonObj.addEventListener('keydown', function (event) {
12414        if (_this2.buttonObj.getAttribute('aria-expanded') === 'true' && (event.which || event.keyCode) == 9 && _this2.config.keepFocusInTargetElement === true) {
12415          if (_this2.config.disableFocusHandling === true) {
12416            return;
12417          }
12418
12419          if (_this2.config.addCloseButton === true) {
12420            if (_this2.isHidden(_this2.closeButtonObj)) {
12421              return;
12422            }
12423          } else {
12424            if (_this2.isHidden(_this2.buttonObj)) {
12425              return;
12426            }
12427          }
12428
12429          event.preventDefault();
12430
12431          var focusableElements = _this2.targetObj[0].querySelectorAll('a[href]:not(.focus-helper),input,select,button');
12432
12433          var visibleFocusableElements = [];
12434
12435          for (var i = 0; i < focusableElements.length; i++) {
12436            if (!_this2.isHidden(focusableElements[i])) {
12437              visibleFocusableElements.push(focusableElements[i]);
12438            }
12439          }
12440
12441          if (event.shiftKey === false && visibleFocusableElements.length > 0) {
12442            visibleFocusableElements[0].focus();
12443          } else if (event.shiftKey === true && visibleFocusableElements.length > 0) {
12444            visibleFocusableElements[visibleFocusableElements.length - 1].focus();
12445          }
12446        }
12447      });
12448      this.initButtons.push(this.buttonObj);
12449    }
12450  }, {
12451    key: "toggleStates",
12452    value: function toggleStates() {
12453      var _this3 = this;
12454
12455      var expanded = false;
12456
12457      if (this.buttonObj.getAttribute('aria-expanded') === 'true') {
12458        expanded = true;
12459      }
12460
12461      this.config.on.beforeToggle(this.buttonObj);
12462
12463      if (this.config.resetScrollPosition !== false) {
12464        if (expanded === false) {
12465          this.scrollPosition = Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop);
12466        } else {
12467          this.resetScrollPosition();
12468        }
12469      }
12470
12471      window.requestAnimationFrame(function () {
12472        if (_this3.config.setRootClass !== false) {
12473          document.getElementsByTagName('html')[0].classList.toggle(_this3.config.setRootClass);
12474        }
12475
12476        _this3.buttonObj.setAttribute('aria-expanded', !expanded);
12477
12478        _this3.buttonObj.expanded = !expanded;
12479
12480        if (_this3.labelOpen && _this3.labelClose) {
12481          _this3.buttonObj.setAttribute('aria-label', expanded ? _this3.labelOpen : _this3.labelClose);
12482        }
12483
12484        if (_this3.config.switchButtonHtml !== false) {
12485          _this3.buttonObj.innerHTML = expanded ? '<span>' + _this3.textOpen + '</span>' : '<span>' + _this3.textClose + '</span>';
12486        }
12487
12488        for (var _i2 = 0; _i2 < _this3.targetObj.length; _i2++) {
12489          _this3.targetObj[_i2].setAttribute(_this3.config.hiddenAttribute, expanded);
12490        }
12491
12492        _this3.config.on.afterToggle(_this3.buttonObj);
12493      });
12494      var hiddenElements = document.querySelectorAll(this.config.hiddenWhenOpen);
12495
12496      if (expanded) {
12497        if (this.config.disableFocusHandling !== true) {
12498          for (var i = 0; i < hiddenElements.length; i++) {
12499            hiddenElements[i].removeAttribute('aria-hidden');
12500          }
12501        }
12502
12503        setTimeout(function () {
12504          _this3.buttonObj.focus();
12505        }, 600);
12506      } else {
12507        if (this.config.disableFocusHandling !== true) {
12508          for (var i = 0; i < hiddenElements.length; i++) {
12509            hiddenElements[i].setAttribute('aria-hidden', true);
12510          }
12511        }
12512
12513        if (this.config.setFocusToElement !== false) {
12514          var element = this.targetObj[0].querySelector(this.config.setFocusToElement);
12515
12516          if (element.length !== null) {
12517            setTimeout(function () {
12518              element.focus();
12519            }, 100);
12520            return;
12521          }
12522        }
12523
12524        if (this.config.setFocusToFirstElement === true) {
12525          setTimeout(function () {
12526            (_this3.targetObj[0].querySelector('a[href],input,select,button') || _this3.targetObj[0]).focus();
12527          }, 100);
12528        }
12529      }
12530    }
12531  }, {
12532    key: "isInViewport",
12533    value: function isInViewport(element) {
12534      var rect = element.getBoundingClientRect();
12535      return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
12536    }
12537  }, {
12538    key: "resetScrollPosition",
12539    value: function resetScrollPosition() {
12540      if (!this.isInViewport(this.buttonObj)) {
12541        console.log('scroll');
12542        window.scroll({
12543          top: this.scrollPosition,
12544          behavior: 'smooth'
12545        });
12546      }
12547    }
12548  }, {
12549    key: "disableFocusHandling",
12550    value: function disableFocusHandling(status) {
12551      this.config.disableFocusHandling = status;
12552    }
12553  }, {
12554    key: "addAria",
12555    value: function addAria() {
12556      var controls = [];
12557      var hiddenAttribute = this.config.hiddenAttribute;
12558
12559      for (var i = 0; i < this.targetObj.length; i++) {
12560        this.setAttributes(this.targetObj[i], _defineProperty({}, hiddenAttribute, true));
12561        controls.push(this.targetObj[i].id);
12562      }
12563
12564      if (this.buttonObj.nodeName != 'BUTTON') {
12565        this.buttonObj.setAttribute('role', 'button');
12566      }
12567
12568      this.setAttributes(this.buttonObj, {
12569        'aria-controls': controls.join(' '),
12570        'aria-expanded': 'false'
12571      });
12572
12573      if (this.labelOpen) {
12574        this.buttonObj.setAttribute('aria-label', this.labelOpen);
12575      }
12576    }
12577  }]);
12578
12579  return pxEasyExpand;
12580}();
12581
12582var _default = pxEasyExpand;
12583exports.default = _default;
12584
12585},{}],8:[function(require,module,exports){
12586"use strict";
12587
12588function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
12589
12590(function (global, factory) {
12591  (typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());
12592})(void 0, function () {
12593  'use strict';
12594
12595  function _defineProperties(target, props) {
12596    for (var i = 0; i < props.length; i++) {
12597      var descriptor = props[i];
12598      descriptor.enumerable = descriptor.enumerable || false;
12599      descriptor.configurable = true;
12600      if ("value" in descriptor) descriptor.writable = true;
12601      Object.defineProperty(target, descriptor.key, descriptor);
12602    }
12603  }
12604
12605  function _createClass(Constructor, protoProps, staticProps) {
12606    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
12607    if (staticProps) _defineProperties(Constructor, staticProps);
12608    return Constructor;
12609  }
12610
12611  function _extends() {
12612    _extends = Object.assign || function (target) {
12613      for (var i = 1; i < arguments.length; i++) {
12614        var source = arguments[i];
12615
12616        for (var key in source) {
12617          if (Object.prototype.hasOwnProperty.call(source, key)) {
12618            target[key] = source[key];
12619          }
12620        }
12621      }
12622
12623      return target;
12624    };
12625
12626    return _extends.apply(this, arguments);
12627  }
12628
12629  function isObject$1(obj) {
12630    return obj !== null && _typeof(obj) === 'object' && 'constructor' in obj && obj.constructor === Object;
12631  }
12632
12633  function extend$1(target, src) {
12634    if (target === void 0) {
12635      target = {};
12636    }
12637
12638    if (src === void 0) {
12639      src = {};
12640    }
12641
12642    Object.keys(src).forEach(function (key) {
12643      if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {
12644        extend$1(target[key], src[key]);
12645      }
12646    });
12647  }
12648
12649  var ssrDocument = {
12650    body: {},
12651    addEventListener: function addEventListener() {},
12652    removeEventListener: function removeEventListener() {},
12653    activeElement: {
12654      blur: function blur() {},
12655      nodeName: ''
12656    },
12657    querySelector: function querySelector() {
12658      return null;
12659    },
12660    querySelectorAll: function querySelectorAll() {
12661      return [];
12662    },
12663    getElementById: function getElementById() {
12664      return null;
12665    },
12666    createEvent: function createEvent() {
12667      return {
12668        initEvent: function initEvent() {}
12669      };
12670    },
12671    createElement: function createElement() {
12672      return {
12673        children: [],
12674        childNodes: [],
12675        style: {},
12676        setAttribute: function setAttribute() {},
12677        getElementsByTagName: function getElementsByTagName() {
12678          return [];
12679        }
12680      };
12681    },
12682    createElementNS: function createElementNS() {
12683      return {};
12684    },
12685    importNode: function importNode() {
12686      return null;
12687    },
12688    location: {
12689      hash: '',
12690      host: '',
12691      hostname: '',
12692      href: '',
12693      origin: '',
12694      pathname: '',
12695      protocol: '',
12696      search: ''
12697    }
12698  };
12699
12700  function getDocument() {
12701    var doc = typeof document !== 'undefined' ? document : {};
12702    extend$1(doc, ssrDocument);
12703    return doc;
12704  }
12705
12706  var ssrWindow = {
12707    document: ssrDocument,
12708    navigator: {
12709      userAgent: ''
12710    },
12711    location: {
12712      hash: '',
12713      host: '',
12714      hostname: '',
12715      href: '',
12716      origin: '',
12717      pathname: '',
12718      protocol: '',
12719      search: ''
12720    },
12721    history: {
12722      replaceState: function replaceState() {},
12723      pushState: function pushState() {},
12724      go: function go() {},
12725      back: function back() {}
12726    },
12727    CustomEvent: function CustomEvent() {
12728      return this;
12729    },
12730    addEventListener: function addEventListener() {},
12731    removeEventListener: function removeEventListener() {},
12732    getComputedStyle: function getComputedStyle() {
12733      return {
12734        getPropertyValue: function getPropertyValue() {
12735          return '';
12736        }
12737      };
12738    },
12739    Image: function Image() {},
12740    Date: function Date() {},
12741    screen: {},
12742    setTimeout: function setTimeout() {},
12743    clearTimeout: function clearTimeout() {},
12744    matchMedia: function matchMedia() {
12745      return {};
12746    },
12747    requestAnimationFrame: function requestAnimationFrame(callback) {
12748      if (typeof setTimeout === 'undefined') {
12749        callback();
12750        return null;
12751      }
12752
12753      return setTimeout(callback, 0);
12754    },
12755    cancelAnimationFrame: function cancelAnimationFrame(id) {
12756      if (typeof setTimeout === 'undefined') {
12757        return;
12758      }
12759
12760      clearTimeout(id);
12761    }
12762  };
12763
12764  function getWindow() {
12765    var win = typeof window !== 'undefined' ? window : {};
12766    extend$1(win, ssrWindow);
12767    return win;
12768  }
12769
12770  function _inheritsLoose(subClass, superClass) {
12771    subClass.prototype = Object.create(superClass.prototype);
12772    subClass.prototype.constructor = subClass;
12773    subClass.__proto__ = superClass;
12774  }
12775
12776  function _getPrototypeOf(o) {
12777    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
12778      return o.__proto__ || Object.getPrototypeOf(o);
12779    };
12780    return _getPrototypeOf(o);
12781  }
12782
12783  function _setPrototypeOf(o, p) {
12784    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
12785      o.__proto__ = p;
12786      return o;
12787    };
12788
12789    return _setPrototypeOf(o, p);
12790  }
12791
12792  function _isNativeReflectConstruct() {
12793    if (typeof Reflect === "undefined" || !Reflect.construct) return false;
12794    if (Reflect.construct.sham) return false;
12795    if (typeof Proxy === "function") return true;
12796
12797    try {
12798      Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
12799      return true;
12800    } catch (e) {
12801      return false;
12802    }
12803  }
12804
12805  function _construct(Parent, args, Class) {
12806    if (_isNativeReflectConstruct()) {
12807      _construct = Reflect.construct;
12808    } else {
12809      _construct = function _construct(Parent, args, Class) {
12810        var a = [null];
12811        a.push.apply(a, args);
12812        var Constructor = Function.bind.apply(Parent, a);
12813        var instance = new Constructor();
12814        if (Class) _setPrototypeOf(instance, Class.prototype);
12815        return instance;
12816      };
12817    }
12818
12819    return _construct.apply(null, arguments);
12820  }
12821
12822  function _isNativeFunction(fn) {
12823    return Function.toString.call(fn).indexOf("[native code]") !== -1;
12824  }
12825
12826  function _wrapNativeSuper(Class) {
12827    var _cache = typeof Map === "function" ? new Map() : undefined;
12828
12829    _wrapNativeSuper = function _wrapNativeSuper(Class) {
12830      if (Class === null || !_isNativeFunction(Class)) return Class;
12831
12832      if (typeof Class !== "function") {
12833        throw new TypeError("Super expression must either be null or a function");
12834      }
12835
12836      if (typeof _cache !== "undefined") {
12837        if (_cache.has(Class)) return _cache.get(Class);
12838
12839        _cache.set(Class, Wrapper);
12840      }
12841
12842      function Wrapper() {
12843        return _construct(Class, arguments, _getPrototypeOf(this).constructor);
12844      }
12845
12846      Wrapper.prototype = Object.create(Class.prototype, {
12847        constructor: {
12848          value: Wrapper,
12849          enumerable: false,
12850          writable: true,
12851          configurable: true
12852        }
12853      });
12854      return _setPrototypeOf(Wrapper, Class);
12855    };
12856
12857    return _wrapNativeSuper(Class);
12858  }
12859
12860  function _assertThisInitialized(self) {
12861    if (self === void 0) {
12862      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
12863    }
12864
12865    return self;
12866  }
12867
12868  function makeReactive(obj) {
12869    var proto = obj.__proto__;
12870    Object.defineProperty(obj, '__proto__', {
12871      get: function get() {
12872        return proto;
12873      },
12874      set: function set(value) {
12875        proto.__proto__ = value;
12876      }
12877    });
12878  }
12879
12880  var Dom7 = function (_Array) {
12881    _inheritsLoose(Dom7, _Array);
12882
12883    function Dom7(items) {
12884      var _this;
12885
12886      _this = _Array.call.apply(_Array, [this].concat(items)) || this;
12887      makeReactive(_assertThisInitialized(_this));
12888      return _this;
12889    }
12890
12891    return Dom7;
12892  }(_wrapNativeSuper(Array));
12893
12894  function arrayFlat(arr) {
12895    if (arr === void 0) {
12896      arr = [];
12897    }
12898
12899    var res = [];
12900    arr.forEach(function (el) {
12901      if (Array.isArray(el)) {
12902        res.push.apply(res, arrayFlat(el));
12903      } else {
12904        res.push(el);
12905      }
12906    });
12907    return res;
12908  }
12909
12910  function arrayFilter(arr, callback) {
12911    return Array.prototype.filter.call(arr, callback);
12912  }
12913
12914  function arrayUnique(arr) {
12915    var uniqueArray = [];
12916
12917    for (var i = 0; i < arr.length; i += 1) {
12918      if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);
12919    }
12920
12921    return uniqueArray;
12922  }
12923
12924  function qsa(selector, context) {
12925    if (typeof selector !== 'string') {
12926      return [selector];
12927    }
12928
12929    var a = [];
12930    var res = context.querySelectorAll(selector);
12931
12932    for (var i = 0; i < res.length; i += 1) {
12933      a.push(res[i]);
12934    }
12935
12936    return a;
12937  }
12938
12939  function $(selector, context) {
12940    var window = getWindow();
12941    var document = getDocument();
12942    var arr = [];
12943
12944    if (!context && selector instanceof Dom7) {
12945      return selector;
12946    }
12947
12948    if (!selector) {
12949      return new Dom7(arr);
12950    }
12951
12952    if (typeof selector === 'string') {
12953      var html = selector.trim();
12954
12955      if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
12956        var toCreate = 'div';
12957        if (html.indexOf('<li') === 0) toCreate = 'ul';
12958        if (html.indexOf('<tr') === 0) toCreate = 'tbody';
12959        if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';
12960        if (html.indexOf('<tbody') === 0) toCreate = 'table';
12961        if (html.indexOf('<option') === 0) toCreate = 'select';
12962        var tempParent = document.createElement(toCreate);
12963        tempParent.innerHTML = html;
12964
12965        for (var i = 0; i < tempParent.childNodes.length; i += 1) {
12966          arr.push(tempParent.childNodes[i]);
12967        }
12968      } else {
12969        arr = qsa(selector.trim(), context || document);
12970      }
12971    } else if (selector.nodeType || selector === window || selector === document) {
12972      arr.push(selector);
12973    } else if (Array.isArray(selector)) {
12974      if (selector instanceof Dom7) return selector;
12975      arr = selector;
12976    }
12977
12978    return new Dom7(arrayUnique(arr));
12979  }
12980
12981  $.fn = Dom7.prototype;
12982
12983  function addClass() {
12984    for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {
12985      classes[_key] = arguments[_key];
12986    }
12987
12988    var classNames = arrayFlat(classes.map(function (c) {
12989      return c.split(' ');
12990    }));
12991    this.forEach(function (el) {
12992      var _el$classList;
12993
12994      (_el$classList = el.classList).add.apply(_el$classList, classNames);
12995    });
12996    return this;
12997  }
12998
12999  function removeClass() {
13000    for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
13001      classes[_key2] = arguments[_key2];
13002    }
13003
13004    var classNames = arrayFlat(classes.map(function (c) {
13005      return c.split(' ');
13006    }));
13007    this.forEach(function (el) {
13008      var _el$classList2;
13009
13010      (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames);
13011    });
13012    return this;
13013  }
13014
13015  function toggleClass() {
13016    for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
13017      classes[_key3] = arguments[_key3];
13018    }
13019
13020    var classNames = arrayFlat(classes.map(function (c) {
13021      return c.split(' ');
13022    }));
13023    this.forEach(function (el) {
13024      classNames.forEach(function (className) {
13025        el.classList.toggle(className);
13026      });
13027    });
13028  }
13029
13030  function hasClass() {
13031    for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
13032      classes[_key4] = arguments[_key4];
13033    }
13034
13035    var classNames = arrayFlat(classes.map(function (c) {
13036      return c.split(' ');
13037    }));
13038    return arrayFilter(this, function (el) {
13039      return classNames.filter(function (className) {
13040        return el.classList.contains(className);
13041      }).length > 0;
13042    }).length > 0;
13043  }
13044
13045  function attr(attrs, value) {
13046    if (arguments.length === 1 && typeof attrs === 'string') {
13047      if (this[0]) return this[0].getAttribute(attrs);
13048      return undefined;
13049    }
13050
13051    for (var i = 0; i < this.length; i += 1) {
13052      if (arguments.length === 2) {
13053        this[i].setAttribute(attrs, value);
13054      } else {
13055        for (var attrName in attrs) {
13056          this[i][attrName] = attrs[attrName];
13057          this[i].setAttribute(attrName, attrs[attrName]);
13058        }
13059      }
13060    }
13061
13062    return this;
13063  }
13064
13065  function removeAttr(attr) {
13066    for (var i = 0; i < this.length; i += 1) {
13067      this[i].removeAttribute(attr);
13068    }
13069
13070    return this;
13071  }
13072
13073  function transform(transform) {
13074    for (var i = 0; i < this.length; i += 1) {
13075      this[i].style.transform = transform;
13076    }
13077
13078    return this;
13079  }
13080
13081  function transition$1(duration) {
13082    for (var i = 0; i < this.length; i += 1) {
13083      this[i].style.transitionDuration = typeof duration !== 'string' ? duration + "ms" : duration;
13084    }
13085
13086    return this;
13087  }
13088
13089  function on() {
13090    for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
13091      args[_key5] = arguments[_key5];
13092    }
13093
13094    var eventType = args[0],
13095        targetSelector = args[1],
13096        listener = args[2],
13097        capture = args[3];
13098
13099    if (typeof args[1] === 'function') {
13100      eventType = args[0];
13101      listener = args[1];
13102      capture = args[2];
13103      targetSelector = undefined;
13104    }
13105
13106    if (!capture) capture = false;
13107
13108    function handleLiveEvent(e) {
13109      var target = e.target;
13110      if (!target) return;
13111      var eventData = e.target.dom7EventData || [];
13112
13113      if (eventData.indexOf(e) < 0) {
13114        eventData.unshift(e);
13115      }
13116
13117      if ($(target).is(targetSelector)) listener.apply(target, eventData);else {
13118        var _parents = $(target).parents();
13119
13120        for (var k = 0; k < _parents.length; k += 1) {
13121          if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);
13122        }
13123      }
13124    }
13125
13126    function handleEvent(e) {
13127      var eventData = e && e.target ? e.target.dom7EventData || [] : [];
13128
13129      if (eventData.indexOf(e) < 0) {
13130        eventData.unshift(e);
13131      }
13132
13133      listener.apply(this, eventData);
13134    }
13135
13136    var events = eventType.split(' ');
13137    var j;
13138
13139    for (var i = 0; i < this.length; i += 1) {
13140      var el = this[i];
13141
13142      if (!targetSelector) {
13143        for (j = 0; j < events.length; j += 1) {
13144          var event = events[j];
13145          if (!el.dom7Listeners) el.dom7Listeners = {};
13146          if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];
13147          el.dom7Listeners[event].push({
13148            listener: listener,
13149            proxyListener: handleEvent
13150          });
13151          el.addEventListener(event, handleEvent, capture);
13152        }
13153      } else {
13154        for (j = 0; j < events.length; j += 1) {
13155          var _event = events[j];
13156          if (!el.dom7LiveListeners) el.dom7LiveListeners = {};
13157          if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];
13158
13159          el.dom7LiveListeners[_event].push({
13160            listener: listener,
13161            proxyListener: handleLiveEvent
13162          });
13163
13164          el.addEventListener(_event, handleLiveEvent, capture);
13165        }
13166      }
13167    }
13168
13169    return this;
13170  }
13171
13172  function off() {
13173    for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
13174      args[_key6] = arguments[_key6];
13175    }
13176
13177    var eventType = args[0],
13178        targetSelector = args[1],
13179        listener = args[2],
13180        capture = args[3];
13181
13182    if (typeof args[1] === 'function') {
13183      eventType = args[0];
13184      listener = args[1];
13185      capture = args[2];
13186      targetSelector = undefined;
13187    }
13188
13189    if (!capture) capture = false;
13190    var events = eventType.split(' ');
13191
13192    for (var i = 0; i < events.length; i += 1) {
13193      var event = events[i];
13194
13195      for (var j = 0; j < this.length; j += 1) {
13196        var el = this[j];
13197        var handlers = void 0;
13198
13199        if (!targetSelector && el.dom7Listeners) {
13200          handlers = el.dom7Listeners[event];
13201        } else if (targetSelector && el.dom7LiveListeners) {
13202          handlers = el.dom7LiveListeners[event];
13203        }
13204
13205        if (handlers && handlers.length) {
13206          for (var k = handlers.length - 1; k >= 0; k -= 1) {
13207            var handler = handlers[k];
13208
13209            if (listener && handler.listener === listener) {
13210              el.removeEventListener(event, handler.proxyListener, capture);
13211              handlers.splice(k, 1);
13212            } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
13213              el.removeEventListener(event, handler.proxyListener, capture);
13214              handlers.splice(k, 1);
13215            } else if (!listener) {
13216              el.removeEventListener(event, handler.proxyListener, capture);
13217              handlers.splice(k, 1);
13218            }
13219          }
13220        }
13221      }
13222    }
13223
13224    return this;
13225  }
13226
13227  function trigger() {
13228    var window = getWindow();
13229
13230    for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
13231      args[_key9] = arguments[_key9];
13232    }
13233
13234    var events = args[0].split(' ');
13235    var eventData = args[1];
13236
13237    for (var i = 0; i < events.length; i += 1) {
13238      var event = events[i];
13239
13240      for (var j = 0; j < this.length; j += 1) {
13241        var el = this[j];
13242
13243        if (window.CustomEvent) {
13244          var evt = new window.CustomEvent(event, {
13245            detail: eventData,
13246            bubbles: true,
13247            cancelable: true
13248          });
13249          el.dom7EventData = args.filter(function (data, dataIndex) {
13250            return dataIndex > 0;
13251          });
13252          el.dispatchEvent(evt);
13253          el.dom7EventData = [];
13254          delete el.dom7EventData;
13255        }
13256      }
13257    }
13258
13259    return this;
13260  }
13261
13262  function transitionEnd$1(callback) {
13263    var dom = this;
13264
13265    function fireCallBack(e) {
13266      if (e.target !== this) return;
13267      callback.call(this, e);
13268      dom.off('transitionend', fireCallBack);
13269    }
13270
13271    if (callback) {
13272      dom.on('transitionend', fireCallBack);
13273    }
13274
13275    return this;
13276  }
13277
13278  function outerWidth(includeMargins) {
13279    if (this.length > 0) {
13280      if (includeMargins) {
13281        var _styles = this.styles();
13282
13283        return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));
13284      }
13285
13286      return this[0].offsetWidth;
13287    }
13288
13289    return null;
13290  }
13291
13292  function outerHeight(includeMargins) {
13293    if (this.length > 0) {
13294      if (includeMargins) {
13295        var _styles2 = this.styles();
13296
13297        return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));
13298      }
13299
13300      return this[0].offsetHeight;
13301    }
13302
13303    return null;
13304  }
13305
13306  function offset() {
13307    if (this.length > 0) {
13308      var window = getWindow();
13309      var document = getDocument();
13310      var el = this[0];
13311      var box = el.getBoundingClientRect();
13312      var body = document.body;
13313      var clientTop = el.clientTop || body.clientTop || 0;
13314      var clientLeft = el.clientLeft || body.clientLeft || 0;
13315      var scrollTop = el === window ? window.scrollY : el.scrollTop;
13316      var scrollLeft = el === window ? window.scrollX : el.scrollLeft;
13317      return {
13318        top: box.top + scrollTop - clientTop,
13319        left: box.left + scrollLeft - clientLeft
13320      };
13321    }
13322
13323    return null;
13324  }
13325
13326  function styles() {
13327    var window = getWindow();
13328    if (this[0]) return window.getComputedStyle(this[0], null);
13329    return {};
13330  }
13331
13332  function css(props, value) {
13333    var window = getWindow();
13334    var i;
13335
13336    if (arguments.length === 1) {
13337      if (typeof props === 'string') {
13338        if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);
13339      } else {
13340        for (i = 0; i < this.length; i += 1) {
13341          for (var _prop in props) {
13342            this[i].style[_prop] = props[_prop];
13343          }
13344        }
13345
13346        return this;
13347      }
13348    }
13349
13350    if (arguments.length === 2 && typeof props === 'string') {
13351      for (i = 0; i < this.length; i += 1) {
13352        this[i].style[props] = value;
13353      }
13354
13355      return this;
13356    }
13357
13358    return this;
13359  }
13360
13361  function each(callback) {
13362    if (!callback) return this;
13363    this.forEach(function (el, index) {
13364      callback.apply(el, [el, index]);
13365    });
13366    return this;
13367  }
13368
13369  function filter(callback) {
13370    var result = arrayFilter(this, callback);
13371    return $(result);
13372  }
13373
13374  function html(html) {
13375    if (typeof html === 'undefined') {
13376      return this[0] ? this[0].innerHTML : null;
13377    }
13378
13379    for (var i = 0; i < this.length; i += 1) {
13380      this[i].innerHTML = html;
13381    }
13382
13383    return this;
13384  }
13385
13386  function text(text) {
13387    if (typeof text === 'undefined') {
13388      return this[0] ? this[0].textContent.trim() : null;
13389    }
13390
13391    for (var i = 0; i < this.length; i += 1) {
13392      this[i].textContent = text;
13393    }
13394
13395    return this;
13396  }
13397
13398  function is(selector) {
13399    var window = getWindow();
13400    var document = getDocument();
13401    var el = this[0];
13402    var compareWith;
13403    var i;
13404    if (!el || typeof selector === 'undefined') return false;
13405
13406    if (typeof selector === 'string') {
13407      if (el.matches) return el.matches(selector);
13408      if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);
13409      if (el.msMatchesSelector) return el.msMatchesSelector(selector);
13410      compareWith = $(selector);
13411
13412      for (i = 0; i < compareWith.length; i += 1) {
13413        if (compareWith[i] === el) return true;
13414      }
13415
13416      return false;
13417    }
13418
13419    if (selector === document) {
13420      return el === document;
13421    }
13422
13423    if (selector === window) {
13424      return el === window;
13425    }
13426
13427    if (selector.nodeType || selector instanceof Dom7) {
13428      compareWith = selector.nodeType ? [selector] : selector;
13429
13430      for (i = 0; i < compareWith.length; i += 1) {
13431        if (compareWith[i] === el) return true;
13432      }
13433
13434      return false;
13435    }
13436
13437    return false;
13438  }
13439
13440  function index() {
13441    var child = this[0];
13442    var i;
13443
13444    if (child) {
13445      i = 0;
13446
13447      while ((child = child.previousSibling) !== null) {
13448        if (child.nodeType === 1) i += 1;
13449      }
13450
13451      return i;
13452    }
13453
13454    return undefined;
13455  }
13456
13457  function eq(index) {
13458    if (typeof index === 'undefined') return this;
13459    var length = this.length;
13460
13461    if (index > length - 1) {
13462      return $([]);
13463    }
13464
13465    if (index < 0) {
13466      var returnIndex = length + index;
13467      if (returnIndex < 0) return $([]);
13468      return $([this[returnIndex]]);
13469    }
13470
13471    return $([this[index]]);
13472  }
13473
13474  function append() {
13475    var newChild;
13476    var document = getDocument();
13477
13478    for (var k = 0; k < arguments.length; k += 1) {
13479      newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];
13480
13481      for (var i = 0; i < this.length; i += 1) {
13482        if (typeof newChild === 'string') {
13483          var tempDiv = document.createElement('div');
13484          tempDiv.innerHTML = newChild;
13485
13486          while (tempDiv.firstChild) {
13487            this[i].appendChild(tempDiv.firstChild);
13488          }
13489        } else if (newChild instanceof Dom7) {
13490          for (var j = 0; j < newChild.length; j += 1) {
13491            this[i].appendChild(newChild[j]);
13492          }
13493        } else {
13494          this[i].appendChild(newChild);
13495        }
13496      }
13497    }
13498
13499    return this;
13500  }
13501
13502  function prepend(newChild) {
13503    var document = getDocument();
13504    var i;
13505    var j;
13506
13507    for (i = 0; i < this.length; i += 1) {
13508      if (typeof newChild === 'string') {
13509        var tempDiv = document.createElement('div');
13510        tempDiv.innerHTML = newChild;
13511
13512        for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
13513          this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
13514        }
13515      } else if (newChild instanceof Dom7) {
13516        for (j = 0; j < newChild.length; j += 1) {
13517          this[i].insertBefore(newChild[j], this[i].childNodes[0]);
13518        }
13519      } else {
13520        this[i].insertBefore(newChild, this[i].childNodes[0]);
13521      }
13522    }
13523
13524    return this;
13525  }
13526
13527  function next(selector) {
13528    if (this.length > 0) {
13529      if (selector) {
13530        if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
13531          return $([this[0].nextElementSibling]);
13532        }
13533
13534        return $([]);
13535      }
13536
13537      if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);
13538      return $([]);
13539    }
13540
13541    return $([]);
13542  }
13543
13544  function nextAll(selector) {
13545    var nextEls = [];
13546    var el = this[0];
13547    if (!el) return $([]);
13548
13549    while (el.nextElementSibling) {
13550      var _next = el.nextElementSibling;
13551
13552      if (selector) {
13553        if ($(_next).is(selector)) nextEls.push(_next);
13554      } else nextEls.push(_next);
13555
13556      el = _next;
13557    }
13558
13559    return $(nextEls);
13560  }
13561
13562  function prev(selector) {
13563    if (this.length > 0) {
13564      var el = this[0];
13565
13566      if (selector) {
13567        if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
13568          return $([el.previousElementSibling]);
13569        }
13570
13571        return $([]);
13572      }
13573
13574      if (el.previousElementSibling) return $([el.previousElementSibling]);
13575      return $([]);
13576    }
13577
13578    return $([]);
13579  }
13580
13581  function prevAll(selector) {
13582    var prevEls = [];
13583    var el = this[0];
13584    if (!el) return $([]);
13585
13586    while (el.previousElementSibling) {
13587      var _prev = el.previousElementSibling;
13588
13589      if (selector) {
13590        if ($(_prev).is(selector)) prevEls.push(_prev);
13591      } else prevEls.push(_prev);
13592
13593      el = _prev;
13594    }
13595
13596    return $(prevEls);
13597  }
13598
13599  function parent(selector) {
13600    var parents = [];
13601
13602    for (var i = 0; i < this.length; i += 1) {
13603      if (this[i].parentNode !== null) {
13604        if (selector) {
13605          if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
13606        } else {
13607          parents.push(this[i].parentNode);
13608        }
13609      }
13610    }
13611
13612    return $(parents);
13613  }
13614
13615  function parents(selector) {
13616    var parents = [];
13617
13618    for (var i = 0; i < this.length; i += 1) {
13619      var _parent = this[i].parentNode;
13620
13621      while (_parent) {
13622        if (selector) {
13623          if ($(_parent).is(selector)) parents.push(_parent);
13624        } else {
13625          parents.push(_parent);
13626        }
13627
13628        _parent = _parent.parentNode;
13629      }
13630    }
13631
13632    return $(parents);
13633  }
13634
13635  function closest(selector) {
13636    var closest = this;
13637
13638    if (typeof selector === 'undefined') {
13639      return $([]);
13640    }
13641
13642    if (!closest.is(selector)) {
13643      closest = closest.parents(selector).eq(0);
13644    }
13645
13646    return closest;
13647  }
13648
13649  function find(selector) {
13650    var foundElements = [];
13651
13652    for (var i = 0; i < this.length; i += 1) {
13653      try {
13654        var found = this[i].querySelectorAll(selector);
13655      } catch (err) {
13656        console.log(selector);
13657      }
13658
13659      for (var j = 0; j < found.length; j += 1) {
13660        foundElements.push(found[j]);
13661      }
13662    }
13663
13664    return $(foundElements);
13665  }
13666
13667  function children(selector) {
13668    var children = [];
13669
13670    for (var i = 0; i < this.length; i += 1) {
13671      var childNodes = this[i].children;
13672
13673      for (var j = 0; j < childNodes.length; j += 1) {
13674        if (!selector || $(childNodes[j]).is(selector)) {
13675          children.push(childNodes[j]);
13676        }
13677      }
13678    }
13679
13680    return $(children);
13681  }
13682
13683  function remove() {
13684    for (var i = 0; i < this.length; i += 1) {
13685      if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
13686    }
13687
13688    return this;
13689  }
13690
13691  var Methods = {
13692    addClass: addClass,
13693    removeClass: removeClass,
13694    hasClass: hasClass,
13695    toggleClass: toggleClass,
13696    attr: attr,
13697    removeAttr: removeAttr,
13698    transform: transform,
13699    transition: transition$1,
13700    on: on,
13701    off: off,
13702    trigger: trigger,
13703    transitionEnd: transitionEnd$1,
13704    outerWidth: outerWidth,
13705    outerHeight: outerHeight,
13706    styles: styles,
13707    offset: offset,
13708    css: css,
13709    each: each,
13710    html: html,
13711    text: text,
13712    is: is,
13713    index: index,
13714    eq: eq,
13715    append: append,
13716    prepend: prepend,
13717    next: next,
13718    nextAll: nextAll,
13719    prev: prev,
13720    prevAll: prevAll,
13721    parent: parent,
13722    parents: parents,
13723    closest: closest,
13724    find: find,
13725    children: children,
13726    filter: filter,
13727    remove: remove
13728  };
13729  Object.keys(Methods).forEach(function (methodName) {
13730    Object.defineProperty($.fn, methodName, {
13731      value: Methods[methodName],
13732      writable: true
13733    });
13734  });
13735
13736  function deleteProps(obj) {
13737    var object = obj;
13738    Object.keys(object).forEach(function (key) {
13739      try {
13740        object[key] = null;
13741      } catch (e) {}
13742
13743      try {
13744        delete object[key];
13745      } catch (e) {}
13746    });
13747  }
13748
13749  function nextTick(callback, delay) {
13750    if (delay === void 0) {
13751      delay = 0;
13752    }
13753
13754    return setTimeout(callback, delay);
13755  }
13756
13757  function now() {
13758    return Date.now();
13759  }
13760
13761  function getComputedStyle$1(el) {
13762    var window = getWindow();
13763    var style;
13764
13765    if (window.getComputedStyle) {
13766      style = window.getComputedStyle(el, null);
13767    }
13768
13769    if (!style && el.currentStyle) {
13770      style = el.currentStyle;
13771    }
13772
13773    if (!style) {
13774      style = el.style;
13775    }
13776
13777    return style;
13778  }
13779
13780  function getTranslate(el, axis) {
13781    if (axis === void 0) {
13782      axis = 'x';
13783    }
13784
13785    var window = getWindow();
13786    var matrix;
13787    var curTransform;
13788    var transformMatrix;
13789    var curStyle = getComputedStyle$1(el);
13790
13791    if (window.WebKitCSSMatrix) {
13792      curTransform = curStyle.transform || curStyle.webkitTransform;
13793
13794      if (curTransform.split(',').length > 6) {
13795        curTransform = curTransform.split(', ').map(function (a) {
13796          return a.replace(',', '.');
13797        }).join(', ');
13798      }
13799
13800      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
13801    } else {
13802      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
13803      matrix = transformMatrix.toString().split(',');
13804    }
13805
13806    if (axis === 'x') {
13807      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);else curTransform = parseFloat(matrix[4]);
13808    }
13809
13810    if (axis === 'y') {
13811      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);else curTransform = parseFloat(matrix[5]);
13812    }
13813
13814    return curTransform || 0;
13815  }
13816
13817  function isObject(o) {
13818    return _typeof(o) === 'object' && o !== null && o.constructor && Ob
13818ject.prototype.toString.call(o).slice(8, -1) === 'Object';
13819  }
13820
13821  function extend() {
13822    var to = Object(arguments.length <= 0 ? undefined : arguments[0]);
13823    var noExtend = ['__proto__', 'constructor', 'prototype'];
13824
13825    for (var i = 1; i < arguments.length; i += 1) {
13826      var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
13827
13828      if (nextSource !== undefined && nextSource !== null) {
13829        var keysArray = Object.keys(Object(nextSource)).filter(function (key) {
13830          return noExtend.indexOf(key) < 0;
13831        });
13832
13833        for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
13834          var nextKey = keysArray[nextIndex];
13835          var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
13836
13837          if (desc !== undefined && desc.enumerable) {
13838            if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
13839              if (nextSource[nextKey].__swiper__) {
13840                to[nextKey] = nextSource[nextKey];
13841              } else {
13842                extend(to[nextKey], nextSource[nextKey]);
13843              }
13844            } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
13845              to[nextKey] = {};
13846
13847              if (nextSource[nextKey].__swiper__) {
13848                to[nextKey] = nextSource[nextKey];
13849              } else {
13850                extend(to[nextKey], nextSource[nextKey]);
13851              }
13852            } else {
13853              to[nextKey] = nextSource[nextKey];
13854            }
13855          }
13856        }
13857      }
13858    }
13859
13860    return to;
13861  }
13862
13863  function bindModuleMethods(instance, obj) {
13864    Object.keys(obj).forEach(function (key) {
13865      if (isObject(obj[key])) {
13866        Object.keys(obj[key]).forEach(function (subKey) {
13867          if (typeof obj[key][subKey] === 'function') {
13868            obj[key][subKey] = obj[key][subKey].bind(instance);
13869          }
13870        });
13871      }
13872
13873      instance[key] = obj[key];
13874    });
13875  }
13876
13877  function classesToSelector(classes) {
13878    if (classes === void 0) {
13879      classes = '';
13880    }
13881
13882    return "." + classes.trim().replace(/([\.:\/])/g, '\\$1').replace(/ /g, '.');
13883  }
13884
13885  function createElementIfNotDefined($container, params, createElements, checkProps) {
13886    var document = getDocument();
13887
13888    if (createElements) {
13889      Object.keys(checkProps).forEach(function (key) {
13890        if (!params[key] && params.auto === true) {
13891          var element = document.createElement('div');
13892          element.className = checkProps[key];
13893          $container.append(element);
13894          params[key] = element;
13895        }
13896      });
13897    }
13898
13899    return params;
13900  }
13901
13902  var support;
13903
13904  function calcSupport() {
13905    var window = getWindow();
13906    var document = getDocument();
13907    return {
13908      touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),
13909      pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0,
13910      observer: function checkObserver() {
13911        return 'MutationObserver' in window || 'WebkitMutationObserver' in window;
13912      }(),
13913      passiveListener: function checkPassiveListener() {
13914        var supportsPassive = false;
13915
13916        try {
13917          var opts = Object.defineProperty({}, 'passive', {
13918            get: function get() {
13919              supportsPassive = true;
13920            }
13921          });
13922          window.addEventListener('testPassiveListener', null, opts);
13923        } catch (e) {}
13924
13925        return supportsPassive;
13926      }(),
13927      gestures: function checkGestures() {
13928        return 'ongesturestart' in window;
13929      }()
13930    };
13931  }
13932
13933  function getSupport() {
13934    if (!support) {
13935      support = calcSupport();
13936    }
13937
13938    return support;
13939  }
13940
13941  var device;
13942
13943  function calcDevice(_temp) {
13944    var _ref = _temp === void 0 ? {} : _temp,
13945        userAgent = _ref.userAgent;
13946
13947    var support = getSupport();
13948    var window = getWindow();
13949    var platform = window.navigator.platform;
13950    var ua = userAgent || window.navigator.userAgent;
13951    var device = {
13952      ios: false,
13953      android: false
13954    };
13955    var screenWidth = window.screen.width;
13956    var screenHeight = window.screen.height;
13957    var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
13958    var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
13959    var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
13960    var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
13961    var windows = platform === 'Win32';
13962    var macos = platform === 'MacIntel';
13963    var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];
13964
13965    if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + "x" + screenHeight) >= 0) {
13966      ipad = ua.match(/(Version)\/([\d.]+)/);
13967      if (!ipad) ipad = [0, 1, '13_0_0'];
13968      macos = false;
13969    }
13970
13971    if (android && !windows) {
13972      device.os = 'android';
13973      device.android = true;
13974    }
13975
13976    if (ipad || iphone || ipod) {
13977      device.os = 'ios';
13978      device.ios = true;
13979    }
13980
13981    return device;
13982  }
13983
13984  function getDevice(overrides) {
13985    if (overrides === void 0) {
13986      overrides = {};
13987    }
13988
13989    if (!device) {
13990      device = calcDevice(overrides);
13991    }
13992
13993    return device;
13994  }
13995
13996  var browser;
13997
13998  function calcBrowser() {
13999    var window = getWindow();
14000
14001    function isSafari() {
14002      var ua = window.navigator.userAgent.toLowerCase();
14003      return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
14004    }
14005
14006    return {
14007      isEdge: !!window.navigator.userAgent.match(/Edge/g),
14008      isSafari: isSafari(),
14009      isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)
14010    };
14011  }
14012
14013  function getBrowser() {
14014    if (!browser) {
14015      browser = calcBrowser();
14016    }
14017
14018    return browser;
14019  }
14020
14021  var supportsResizeObserver = function supportsResizeObserver() {
14022    var window = getWindow();
14023    return typeof window.ResizeObserver !== 'undefined';
14024  };
14025
14026  var Resize = {
14027    name: 'resize',
14028    create: function create() {
14029      var swiper = this;
14030      extend(swiper, {
14031        resize: {
14032          observer: null,
14033          createObserver: function createObserver() {
14034            if (!swiper || swiper.destroyed || !swiper.initialized) return;
14035            swiper.resize.observer = new ResizeObserver(function (entries) {
14036              var width = swiper.width,
14037                  height = swiper.height;
14038              var newWidth = width;
14039              var newHeight = height;
14040              entries.forEach(function (_ref) {
14041                var contentBoxSize = _ref.contentBoxSize,
14042                    contentRect = _ref.contentRect,
14043                    target = _ref.target;
14044                if (target && target !== swiper.el) return;
14045                newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;
14046                newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;
14047              });
14048
14049              if (newWidth !== width || newHeight !== height) {
14050                swiper.resize.resizeHandler();
14051              }
14052            });
14053            swiper.resize.observer.observe(swiper.el);
14054          },
14055          removeObserver: function removeObserver() {
14056            if (swiper.resize.observer && swiper.resize.observer.unobserve && swiper.el) {
14057              swiper.resize.observer.unobserve(swiper.el);
14058              swiper.resize.observer = null;
14059            }
14060          },
14061          resizeHandler: function resizeHandler() {
14062            if (!swiper || swiper.destroyed || !swiper.initialized) return;
14063            swiper.emit('beforeResize');
14064            swiper.emit('resize');
14065          },
14066          orientationChangeHandler: function orientationChangeHandler() {
14067            if (!swiper || swiper.destroyed || !swiper.initialized) return;
14068            swiper.emit('orientationchange');
14069          }
14070        }
14071      });
14072    },
14073    on: {
14074      init: function init(swiper) {
14075        var window = getWindow();
14076
14077        if (swiper.params.resizeObserver && supportsResizeObserver()) {
14078          swiper.resize.createObserver();
14079          return;
14080        }
14081
14082        window.addEventListener('resize', swiper.resize.resizeHandler);
14083        window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
14084      },
14085      destroy: function destroy(swiper) {
14086        var window = getWindow();
14087        swiper.resize.removeObserver();
14088        window.removeEventListener('resize', swiper.resize.resizeHandler);
14089        window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
14090      }
14091    }
14092  };
14093  var Observer = {
14094    attach: function attach(target, options) {
14095      if (options === void 0) {
14096        options = {};
14097      }
14098
14099      var window = getWindow();
14100      var swiper = this;
14101      var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
14102      var observer = new ObserverFunc(function (mutations) {
14103        if (mutations.length === 1) {
14104          swiper.emit('observerUpdate', mutations[0]);
14105          return;
14106        }
14107
14108        var observerUpdate = function observerUpdate() {
14109          swiper.emit('observerUpdate', mutations[0]);
14110        };
14111
14112        if (window.requestAnimationFrame) {
14113          window.requestAnimationFrame(observerUpdate);
14114        } else {
14115          window.setTimeout(observerUpdate, 0);
14116        }
14117      });
14118      observer.observe(target, {
14119        attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
14120        childList: typeof options.childList === 'undefined' ? true : options.childList,
14121        characterData: typeof options.characterData === 'undefined' ? true : options.characterData
14122      });
14123      swiper.observer.observers.push(observer);
14124    },
14125    init: function init() {
14126      var swiper = this;
14127      if (!swiper.support.observer || !swiper.params.observer) return;
14128
14129      if (swiper.params.observeParents) {
14130        var containerParents = swiper.$el.parents();
14131
14132        for (var i = 0; i < containerParents.length; i += 1) {
14133          swiper.observer.attach(containerParents[i]);
14134        }
14135      }
14136
14137      swiper.observer.attach(swiper.$el[0], {
14138        childList: swiper.params.observeSlideChildren
14139      });
14140      swiper.observer.attach(swiper.$wrapperEl[0], {
14141        attributes: false
14142      });
14143    },
14144    destroy: function destroy() {
14145      var swiper = this;
14146      swiper.observer.observers.forEach(function (observer) {
14147        observer.disconnect();
14148      });
14149      swiper.observer.observers = [];
14150    }
14151  };
14152  var Observer$1 = {
14153    name: 'observer',
14154    params: {
14155      observer: false,
14156      observeParents: false,
14157      observeSlideChildren: false
14158    },
14159    create: function create() {
14160      var swiper = this;
14161      bindModuleMethods(swiper, {
14162        observer: _extends({}, Observer, {
14163          observers: []
14164        })
14165      });
14166    },
14167    on: {
14168      init: function init(swiper) {
14169        swiper.observer.init();
14170      },
14171      destroy: function destroy(swiper) {
14172        swiper.observer.destroy();
14173      }
14174    }
14175  };
14176  var modular = {
14177    useParams: function useParams(instanceParams) {
14178      var instance = this;
14179      if (!instance.modules) return;
14180      Object.keys(instance.modules).forEach(function (moduleName) {
14181        var module = instance.modules[moduleName];
14182
14183        if (module.params) {
14184          extend(instanceParams, module.params);
14185        }
14186      });
14187    },
14188    useModules: function useModules(modulesParams) {
14189      if (modulesParams === void 0) {
14190        modulesParams = {};
14191      }
14192
14193      var instance = this;
14194      if (!instance.modules) return;
14195      Object.keys(instance.modules).forEach(function (moduleName) {
14196        var module = instance.modules[moduleName];
14197        var moduleParams = modulesParams[moduleName] || {};
14198
14199        if (module.on && instance.on) {
14200          Object.keys(module.on).forEach(function (moduleEventName) {
14201            instance.on(moduleEventName, module.on[moduleEventName]);
14202          });
14203        }
14204
14205        if (module.create) {
14206          module.create.bind(instance)(moduleParams);
14207        }
14208      });
14209    }
14210  };
14211  var eventsEmitter = {
14212    on: function on(events, handler, priority) {
14213      var self = this;
14214      if (typeof handler !== 'function') return self;
14215      var method = priority ? 'unshift' : 'push';
14216      events.split(' ').forEach(function (event) {
14217        if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
14218        self.eventsListeners[event][method](handler);
14219      });
14220      return self;
14221    },
14222    once: function once(events, handler, priority) {
14223      var self = this;
14224      if (typeof handler !== 'function') return self;
14225
14226      function onceHandler() {
14227        self.off(events, onceHandler);
14228
14229        if (onceHandler.__emitterProxy) {
14230          delete onceHandler.__emitterProxy;
14231        }
14232
14233        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
14234          args[_key] = arguments[_key];
14235        }
14236
14237        handler.apply(self, args);
14238      }
14239
14240      onceHandler.__emitterProxy = handler;
14241      return self.on(events, onceHandler, priority);
14242    },
14243    onAny: function onAny(handler, priority) {
14244      var self = this;
14245      if (typeof handler !== 'function') return self;
14246      var method = priority ? 'unshift' : 'push';
14247
14248      if (self.eventsAnyListeners.indexOf(handler) < 0) {
14249        self.eventsAnyListeners[method](handler);
14250      }
14251
14252      return self;
14253    },
14254    offAny: function offAny(handler) {
14255      var self = this;
14256      if (!self.eventsAnyListeners) return self;
14257      var index = self.eventsAnyListeners.indexOf(handler);
14258
14259      if (index >= 0) {
14260        self.eventsAnyListeners.splice(index, 1);
14261      }
14262
14263      return self;
14264    },
14265    off: function off(events, handler) {
14266      var self = this;
14267      if (!self.eventsListeners) return self;
14268      events.split(' ').forEach(function (event) {
14269        if (typeof handler === 'undefined') {
14270          self.eventsListeners[event] = [];
14271        } else if (self.eventsListeners[event]) {
14272          self.eventsListeners[event].forEach(function (eventHandler, index) {
14273            if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
14274              self.eventsListeners[event].splice(index, 1);
14275            }
14276          });
14277        }
14278      });
14279      return self;
14280    },
14281    emit: function emit() {
14282      var self = this;
14283      if (!self.eventsListeners) return self;
14284      var events;
14285      var data;
14286      var context;
14287
14288      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14289        args[_key2] = arguments[_key2];
14290      }
14291
14292      if (typeof args[0] === 'string' || Array.isArray(args[0])) {
14293        events = args[0];
14294        data = args.slice(1, args.length);
14295        context = self;
14296      } else {
14297        events = args[0].events;
14298        data = args[0].data;
14299        context = args[0].context || self;
14300      }
14301
14302      data.unshift(context);
14303      var eventsArray = Array.isArray(events) ? events : events.split(' ');
14304      eventsArray.forEach(function (event) {
14305        if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
14306          self.eventsAnyListeners.forEach(function (eventHandler) {
14307            eventHandler.apply(context, [event].concat(data));
14308          });
14309        }
14310
14311        if (self.eventsListeners && self.eventsListeners[event]) {
14312          self.eventsListeners[event].forEach(function (eventHandler) {
14313            eventHandler.apply(context, data);
14314          });
14315        }
14316      });
14317      return self;
14318    }
14319  };
14320
14321  function updateSize() {
14322    var swiper = this;
14323    var width;
14324    var height;
14325    var $el = swiper.$el;
14326
14327    if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {
14328      width = swiper.params.width;
14329    } else {
14330      width = $el[0].clientWidth;
14331    }
14332
14333    if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {
14334      height = swiper.params.height;
14335    } else {
14336      height = $el[0].clientHeight;
14337    }
14338
14339    if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
14340      return;
14341    }
14342
14343    width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);
14344    height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);
14345    if (Number.isNaN(width)) width = 0;
14346    if (Number.isNaN(height)) height = 0;
14347    extend(swiper, {
14348      width: width,
14349      height: height,
14350      size: swiper.isHorizontal() ? width : height
14351    });
14352  }
14353
14354  function updateSlides() {
14355    var swiper = this;
14356
14357    function getDirectionLabel(property) {
14358      if (swiper.isHorizontal()) {
14359        return property;
14360      }
14361
14362      return {
14363        'width': 'height',
14364        'margin-top': 'margin-left',
14365        'margin-bottom ': 'margin-right',
14366        'margin-left': 'margin-top',
14367        'margin-right': 'margin-bottom',
14368        'padding-left': 'padding-top',
14369        'padding-right': 'padding-bottom',
14370        'marginRight': 'marginBottom'
14371      }[property];
14372    }
14373
14374    function getDirectionPropertyValue(node, label) {
14375      return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);
14376    }
14377
14378    var params = swiper.params;
14379    var $wrapperEl = swiper.$wrapperEl,
14380        swiperSize = swiper.size,
14381        rtl = swiper.rtlTranslate,
14382        wrongRTL = swiper.wrongRTL;
14383    var isVirtual = swiper.virtual && params.virtual.enabled;
14384    var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
14385    var slides = $wrapperEl.children("." + swiper.params.slideClass);
14386    var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
14387    var snapGrid = [];
14388    var slidesGrid = [];
14389    var slidesSizesGrid = [];
14390    var offsetBefore = params.slidesOffsetBefore;
14391
14392    if (typeof offsetBefore === 'function') {
14393      offsetBefore = params.slidesOffsetBefore.call(swiper);
14394    }
14395
14396    var offsetAfter = params.slidesOffsetAfter;
14397
14398    if (typeof offsetAfter === 'function') {
14399      offsetAfter = params.slidesOffsetAfter.call(swiper);
14400    }
14401
14402    var previousSnapGridLength = swiper.snapGrid.length;
14403    var previousSlidesGridLength = swiper.slidesGrid.length;
14404    var spaceBetween = params.spaceBetween;
14405    var slidePosition = -offsetBefore;
14406    var prevSlideSize = 0;
14407    var index = 0;
14408
14409    if (typeof swiperSize === 'undefined') {
14410      return;
14411    }
14412
14413    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
14414      spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
14415    }
14416
14417    swiper.virtualSize = -spaceBetween;
14418    if (rtl) slides.css({
14419      marginLeft: '',
14420      marginTop: ''
14421    });else slides.css({
14422      marginRight: '',
14423      marginBottom: ''
14424    });
14425    var slidesNumberEvenToRows;
14426
14427    if (params.slidesPerColumn > 1) {
14428      if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
14429        slidesNumberEvenToRows = slidesLength;
14430      } else {
14431        slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
14432      }
14433
14434      if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
14435        slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
14436      }
14437    }
14438
14439    var slideSize;
14440    var slidesPerColumn = params.slidesPerColumn;
14441    var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
14442    var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
14443
14444    for (var i = 0; i < slidesLength; i += 1) {
14445      slideSize = 0;
14446      var slide = slides.eq(i);
14447
14448      if (params.slidesPerColumn > 1) {
14449        var newSlideOrderIndex = void 0;
14450        var column = void 0;
14451        var row = void 0;
14452
14453        if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
14454          var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
14455          var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
14456          var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
14457          row = Math.floor(slideIndexInGroup / columnsInGroup);
14458          column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;
14459          newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
14460          slide.css({
14461            '-webkit-box-ordinal-group': newSlideOrderIndex,
14462            '-moz-box-ordinal-group': newSlideOrderIndex,
14463            '-ms-flex-order': newSlideOrderIndex,
14464            '-webkit-order': newSlideOrderIndex,
14465            order: newSlideOrderIndex
14466          });
14467        } else if (params.slidesPerColumnFill === 'column') {
14468          column = Math.floor(i / slidesPerColumn);
14469          row = i - column * slidesPerColumn;
14470
14471          if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {
14472            row += 1;
14473
14474            if (row >= slidesPerColumn) {
14475              row = 0;
14476              column += 1;
14477            }
14478          }
14479        } else {
14480          row = Math.floor(i / slidesPerRow);
14481          column = i - row * slidesPerRow;
14482        }
14483
14484        slide.css(getDirectionLabel('margin-top'), row !== 0 && params.spaceBetween && params.spaceBetween + "px");
14485      }
14486
14487      if (slide.css('display') === 'none') continue;
14488
14489      if (params.slidesPerView === 'auto') {
14490        var slideStyles = getComputedStyle(slide[0]);
14491        var currentTransform = slide[0].style.transform;
14492        var currentWebKitTransform = slide[0].style.webkitTransform;
14493
14494        if (currentTransform) {
14495          slide[0].style.transform = 'none';
14496        }
14497
14498        if (currentWebKitTransform) {
14499          slide[0].style.webkitTransform = 'none';
14500        }
14501
14502        if (params.roundLengths) {
14503          slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);
14504        } else {
14505          var width = getDirectionPropertyValue(slideStyles, 'width');
14506          var paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');
14507          var paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');
14508          var marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');
14509          var marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');
14510          var boxSizing = slideStyles.getPropertyValue('box-sizing');
14511
14512          if (boxSizing && boxSizing === 'border-box') {
14513            slideSize = width + marginLeft + marginRight;
14514          } else {
14515            var _slide$ = slide[0],
14516                clientWidth = _slide$.clientWidth,
14517                offsetWidth = _slide$.offsetWidth;
14518            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
14519          }
14520        }
14521
14522        if (currentTransform) {
14523          slide[0].style.transform = currentTransform;
14524        }
14525
14526        if (currentWebKitTransform) {
14527          slide[0].style.webkitTransform = currentWebKitTransform;
14528        }
14529
14530        if (params.roundLengths) slideSize = Math.floor(slideSize);
14531      } else {
14532        slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
14533        if (params.roundLengths) slideSize = Math.floor(slideSize);
14534
14535        if (slides[i]) {
14536          slides[i].style[getDirectionLabel('width')] = slideSize + "px";
14537        }
14538      }
14539
14540      if (slides[i]) {
14541        slides[i].swiperSlideSize = slideSize;
14542      }
14543
14544      slidesSizesGrid.push(slideSize);
14545
14546      if (params.centeredSlides) {
14547        slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
14548        if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
14549        if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
14550        if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
14551        if (params.roundLengths) slidePosition = Math.floor(slidePosition);
14552        if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
14553        slidesGrid.push(slidePosition);
14554      } else {
14555        if (params.roundLengths) slidePosition = Math.floor(slidePosition);
14556        if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
14557        slidesGrid.push(slidePosition);
14558        slidePosition = slidePosition + slideSize + spaceBetween;
14559      }
14560
14561      swiper.virtualSize += slideSize + spaceBetween;
14562      prevSlideSize = slideSize;
14563      index += 1;
14564    }
14565
14566    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
14567    var newSlidesGrid;
14568
14569    if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
14570      $wrapperEl.css({
14571        width: swiper.virtualSize + params.spaceBetween + "px"
14572      });
14573    }
14574
14575    if (params.setWrapperSize) {
14576      var _$wrapperEl$css;
14577
14578      $wrapperEl.css((_$wrapperEl$css = {}, _$wrapperEl$css[getDirectionLabel('width')] = swiper.virtualSize + params.spaceBetween + "px", _$wrapperEl$css));
14579    }
14580
14581    if (params.slidesPerColumn > 1) {
14582      var _$wrapperEl$css2;
14583
14584      swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumber
14584EvenToRows;
14585      swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
14586      $wrapperEl.css((_$wrapperEl$css2 = {}, _$wrapperEl$css2[getDirectionLabel('width')] = swiper.virtualSize + params.spaceBetween + "px", _$wrapperEl$css2));
14587
14588      if (params.centeredSlides) {
14589        newSlidesGrid = [];
14590
14591        for (var _i = 0; _i < snapGrid.length; _i += 1) {
14592          var slidesGridItem = snapGrid[_i];
14593          if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
14594          if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
14595        }
14596
14597        snapGrid = newSlidesGrid;
14598      }
14599    }
14600
14601    if (!params.centeredSlides) {
14602      newSlidesGrid = [];
14603
14604      for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {
14605        var _slidesGridItem = snapGrid[_i2];
14606        if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);
14607
14608        if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {
14609          newSlidesGrid.push(_slidesGridItem);
14610        }
14611      }
14612
14613      snapGrid = newSlidesGrid;
14614
14615      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
14616        snapGrid.push(swiper.virtualSize - swiperSize);
14617      }
14618    }
14619
14620    if (snapGrid.length === 0) snapGrid = [0];
14621
14622    if (params.spaceBetween !== 0) {
14623      var _slides$filter$css;
14624
14625      var key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');
14626      slides.filter(function (_, slideIndex) {
14627        if (!params.cssMode) return true;
14628
14629        if (slideIndex === slides.length - 1) {
14630          return false;
14631        }
14632
14633        return true;
14634      }).css((_slides$filter$css = {}, _slides$filter$css[key] = spaceBetween + "px", _slides$filter$css));
14635    }
14636
14637    if (params.centeredSlides && params.centeredSlidesBounds) {
14638      var allSlidesSize = 0;
14639      slidesSizesGrid.forEach(function (slideSizeValue) {
14640        allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
14641      });
14642      allSlidesSize -= params.spaceBetween;
14643      var maxSnap = allSlidesSize - swiperSize;
14644      snapGrid = snapGrid.map(function (snap) {
14645        if (snap < 0) return -offsetBefore;
14646        if (snap > maxSnap) return maxSnap + offsetAfter;
14647        return snap;
14648      });
14649    }
14650
14651    if (params.centerInsufficientSlides) {
14652      var _allSlidesSize = 0;
14653      slidesSizesGrid.forEach(function (slideSizeValue) {
14654        _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
14655      });
14656      _allSlidesSize -= params.spaceBetween;
14657
14658      if (_allSlidesSize < swiperSize) {
14659        var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;
14660        snapGrid.forEach(function (snap, snapIndex) {
14661          snapGrid[snapIndex] = snap - allSlidesOffset;
14662        });
14663        slidesGrid.forEach(function (snap, snapIndex) {
14664          slidesGrid[snapIndex] = snap + allSlidesOffset;
14665        });
14666      }
14667    }
14668
14669    extend(swiper, {
14670      slides: slides,
14671      snapGrid: snapGrid,
14672      slidesGrid: slidesGrid,
14673      slidesSizesGrid: slidesSizesGrid
14674    });
14675
14676    if (slidesLength !== previousSlidesLength) {
14677      swiper.emit('slidesLengthChange');
14678    }
14679
14680    if (snapGrid.length !== previousSnapGridLength) {
14681      if (swiper.params.watchOverflow) swiper.checkOverflow();
14682      swiper.emit('snapGridLengthChange');
14683    }
14684
14685    if (slidesGrid.length !== previousSlidesGridLength) {
14686      swiper.emit('slidesGridLengthChange');
14687    }
14688
14689    if (params.watchSlidesProgress || params.watchSlidesVisibility) {
14690      swiper.updateSlidesOffset();
14691    }
14692  }
14693
14694  function updateAutoHeight(speed) {
14695    var swiper = this;
14696    var activeSlides = [];
14697    var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
14698    var newHeight = 0;
14699    var i;
14700
14701    if (typeof speed === 'number') {
14702      swiper.setTransition(speed);
14703    } else if (speed === true) {
14704      swiper.setTransition(swiper.params.speed);
14705    }
14706
14707    var getSlideByIndex = function getSlideByIndex(index) {
14708      if (isVirtual) {
14709        return swiper.slides.filter(function (el) {
14710          return parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index;
14711        })[0];
14712      }
14713
14714      return swiper.slides.eq(index)[0];
14715    };
14716
14717    if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
14718      if (swiper.params.centeredSlides) {
14719        swiper.visibleSlides.each(function (slide) {
14720          activeSlides.push(slide);
14721        });
14722      } else {
14723        for (i = 0;
14723 i < Math.ceil(swiper.params.slidesPerView); i += 1) {
14724          var index = swiper.activeIndex + i;
14725          if (index > swiper.slides.length && !isVirtual) break;
14726          activeSlides.push(getSlideByIndex(index));
14727        }
14728      }
14729    } else {
14730      activeSlides.push(getSlideByIndex(swiper.activeIndex));
14731    }
14732
14733    for (i = 0; i < activeSlides.length; i += 1) {
14734      if (typeof activeSlides[i] !== 'undefined') {
14735        var height = activeSlides[i].offsetHeight;
14736        newHeight = height > newHeight ? height : newHeight;
14737      }
14738    }
14739
14740    if (newHeight) swiper.$wrapperEl.css('height', newHeight + "px");
14741  }
14742
14743  function updateSlidesOffset() {
14744    var swiper = this;
14745    var slides = swiper.slides;
14746
14747    for (var i = 0; i < slides.length; i += 1) {
14748      slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
14749    }
14750  }
14751
14752  function updateSlidesProgress(translate) {
14753    if (translate === void 0) {
14754      translate = this && this.translate || 0;
14755    }
14756
14757    var swiper = this;
14758    var params = swiper.params;
14759    var slides = swiper.slides,
14760        rtl = swiper.rtlTranslate;
14761    if (slides.length === 0) return;
14762    if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
14763    var offsetCenter = -translate;
14764    if (rtl) offsetCenter = translate;
14765    slides.removeClass(params.slideVisibleClass);
14766    swiper.visibleSlidesIndexes = [];
14767    swiper.visibleSlides = [];
14768
14769    for (var i = 0; i < slides.length; i += 1) {
14770      var slide = slides[i];
14771      var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);
14772
14773      if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {
14774        var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
14775        var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
14776        var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
14777
14778        if (isVisible) {
14779          swiper.visibleSlides.push(slide);
14780          swiper.visibleSlidesIndexes.push(i);
14781          slides.eq(i).addClass(params.slideVisibleClass);
14782        }
14783      }
14784
14785      slide.progress = rtl ? -slideProgress : slideProgress;
14786    }
14787
14788    swiper.visibleSlides = $(swiper.visibleSlides);
14789  }
14790
14791  function updateProgress(translate) {
14792    var swiper = this;
14793
14794    if (typeof translate === 'undefined') {
14795      var multiplier = swiper.rtlTranslate ? -1 : 1;
14796      translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
14797    }
14798
14799    var params = swiper.params;
14800    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
14801    var progress = swiper.progress,
14802        isBeginning = swiper.isBeginning,
14803        isEnd = swiper.isEnd;
14804    var wasBeginning = isBeginning;
14805    var wasEnd = isEnd;
14806
14807    if (translatesDiff === 0) {
14808      progress = 0;
14809      isBeginning = true;
14810      isEnd = true;
14811    } else {
14812      progress = (translate - swiper.minTranslate()) / translatesDiff;
14813      isBeginning = progress <= 0;
14814      isEnd = progress >= 1;
14815    }
14816
14817    extend(swiper, {
14818      progress: progress,
14819      isBeginning: isBeginning,
14820      isEnd: isEnd
14821    });
14822    if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);
14823
14824    if (isBeginning && !wasBeginning) {
14825      swiper.emit('reachBeginning toEdge');
14826    }
14827
14828    if (isEnd && !wasEnd) {
14829      swiper.emit('reachEnd toEdge');
14830    }
14831
14832    if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
14833      swiper.emit('fromEdge');
14834    }
14835
14836    swiper.emit('progress', progress);
14837  }
14838
14839  function updateSlidesClasses() {
14840    var swiper = this;
14841    var slides = swiper.slides,
14842        params = swiper.params,
14843        $wrapperEl = swiper.$wrapperEl,
14844        activeIndex = swiper.activeIndex,
14845        realIndex = swiper.realIndex;
14846    var isVirtual = swiper.virtual && params.virtual.enabled;
14847    slides.removeClass(params.slideActiveClass + " " + params.slideNextClass + " " + params.slidePrevClass + " " + params.slideDuplicateActiveClass + " " + params.slideDuplicateNextClass + " " + params.slideDuplicatePrevClass);
14848    var activeSlide;
14849
14850    if (isVirtual) {
14851      activeSlide = swiper.$wrapperEl.find("." + params.slideClass + "[data-swiper-slide-index=\"" + activeIndex + "\"]");
14852    } else {
14853      activeSlide = slides.eq(activeIndex);
14854    }
14855
14856    activeSlide.addClass(params.slideActiveClass);
14857
14858    if (params.loop) {
14859      if (activeSlide.hasClass(params.slideDuplicateClass)) {
14860        $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass);
14861      } else {
14862        $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass);
14863      }
14864    }
14865
14866    var nextSlide = activeSlide.nextAll("." + params.slideClass).eq(0).addClass(params.slideNextClass);
14867
14868    if (params.loop && nextSlide.length === 0) {
14869      nextSlide = slides.eq(0);
14870      nextSlide.addClass(params.slideNextClass);
14871    }
14872
14873    var prevSlide = activeSlide.prevAll("." + params.slideClass).eq(0).addClass(params.slidePrevClass);
14874
14875    if (params.loop && prevSlide.length === 0) {
14876      prevSlide = slides.eq(-1);
14877      prevSlide.addClass(params.slidePrevClass);
14878    }
14879
14880    if (params.loop) {
14881      if (nextSlide.hasClass(params.slideDuplicateClass)) {
14882        $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass);
14883      } else {
14884        $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass);
14885      }
14886
14887      if (prevSlide.hasClass(params.slideDuplicateClass)) {
14888        $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass);
14889      } else {
14890        $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass);
14891      }
14892    }
14893
14894    swiper.emitSlidesClasses();
14895  }
14896
14897  function updateActiveIndex(newActiveIndex) {
14898    var swiper = this;
14899    var translate = swiper.rtlTranslate ? swiper.translate : -swi
14899per.translate;
14900    var slidesGrid = swiper.slidesGrid,
14901        snapGrid = swiper.snapGrid,
14902        params = swiper.params,
14903        previousIndex = swiper.activeIndex,
14904        previousRealIndex = swiper.realIndex,
14905        previousSnapIndex = swiper.snapIndex;
14906    var activeIndex = newActiveIndex;
14907    var snapIndex;
14908
14909    if (typeof activeIndex === 'undefined') {
14910      for (var i = 0; i < slidesGrid.length; i += 1) {
14911        if (typeof slidesGrid[i + 1] !== 'undefined') {
14912          if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
14913            activeIndex = i;
14914          } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
14915            activeIndex = i + 1;
14916          }
14917        } else if (translate >= slidesGrid[i]) {
14918          activeIndex = i;
14919        }
14920      }
14921
14922      if (params.normalizeSlideIndex) {
14923        if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
14924      }
14925    }
14926
14927    if (snapGrid.indexOf(translate) >= 0) {
14928      snapIndex = snapGrid.indexOf(translate);
14929    } else {
14930      var skip = Math.min(params.slidesPerGroupSkip, activeIndex);
14931      snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
14932    }
14933
14934    if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
14935
14936    if (activeIndex === previousIndex) {
14937      if (snapIndex !== previousSnapIndex) {
14938        swiper.snapIndex = snapIndex;
14939        swiper.emit('snapIndexChange');
14940      }
14941
14942      return;
14943    }
14944
14945    var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
14946    extend(swiper, {
14947      snapIndex: snapIndex,
14948      realIndex: realIndex,
14949      previousIndex: previousIndex,
14950      activeIndex: activeIndex
14951    });
14952    swiper.emit('activeIndexChange');
14953    swiper.emit('snapIndexChange');
14954
14955    if (previousRealIndex !== realIndex) {
14956      swiper.emit('realIndexChange');
14957    }
14958
14959    if (swiper.initialized || swiper.params.runCallbacksOnInit) {
14960      swiper.emit('slideChange');
14961    }
14962  }
14963
14964  function updateClickedSlide(e) {
14965    var swiper = this;
14966    var params = swiper.params;
14967    var slide = $(e.target).closest("." + params.slideClass)[0];
14968    var slideFound = false;
14969    var slideIndex;
14970
14971    if (slide) {
14972      for (var i = 0; i < swiper.slides.length; i += 1) {
14973        if (swiper.slides[i] === slide) {
14974          slideFound = true;
14975          slideIndex = i;
14976          break;
14977        }
14978      }
14979    }
14980
14981    if (slide && slideFound) {
14982      swiper.clickedSlide = slide;
14983
14984      if (swiper.virtual && swiper.params.virtual.enabled) {
14985        swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
14986      } else {
14987        swiper.clickedIndex = slideIndex;
14988      }
14989    } else {
14990      swiper.clickedSlide = undefined;
14991      swiper.clickedIndex = undefined;
14992      return;
14993    }
14994
14995    if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
14996      swiper.slideToClickedSlide();
14997    }
14998  }
14999
15000  var update = {
15001    updateSize: updateSize,
15002    updateSlides: updateSlides,
15003    updateAutoHeight: updateAutoHeight,
15004    updateSlidesOffset: updateSlidesOffset,
15005    updateSlidesProgress: updateSlidesProgress,
15006    updateProgress: updateProgress,
15007    updateSlidesClasses: updateSlidesClasses,
15008    updateActiveIndex: updateActiveIndex,
15009    updateClickedSlide: updateClickedSlide
15010  };
15011
15012  function getSwiperTranslate(axis) {
15013    if (axis === void 0) {
15014      axis = this.isHorizontal() ? 'x' : 'y';
15015    }
15016
15017    var swiper = this;
15018    var params = swiper.params,
15019        rtl = swiper.rtlTranslate,
15020        translate = swiper.translate,
15021        $wrapperEl = swiper.$wrapperEl;
15022
15023    if (params.virtualTranslate) {
15024      return rtl ? -translate : translate;
15025    }
15026
15027    if (params.cssMode) {
15028      return translate;
15029    }
15030
15031    var currentTranslate = getTranslate($wrapperEl[0], axis);
15032    if (rtl) currentTranslate = -currentTranslate;
15033    return currentTranslate || 0;
15034  }
15035
15036  function setTranslate(translate, byController) {
15037    var swiper = this;
15038    var rtl = swiper.rtlTranslate,
15039        params = swiper.params,
15040        $wrapperEl = swiper.$wrapperEl,
15041        wrapperEl = swiper.wrapperEl,
15042        progress = swiper.progress;
15043    var x = 0;
15044    var y = 0;
15045    var z = 0;
15046
15047    if (swiper.isHorizontal()) {
15048      x = rtl ? -translate : translate;
15049    } else {
15050      y = translate;
15051    }
15052
15053    if (params.roundLengths) {
15054      x = Math.floor(x);
15055      y = Math.floor(y);
15056    }
15057
15058    if (params.cssMode) {
15059      wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
15060    } else if (!params.virtualTranslate) {
15061      $wrapperEl.transform("translate3d(" + x + "px, " + y + "px, " + z + "px)");
15062    }
15063
15064    swiper.previousTranslate = swiper.translate;
15065    swiper.translate = swiper.isHorizontal() ? x : y;
15066    var newProgress;
15067    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
15068
15069    if (translatesDiff === 0) {
15070      newProgress = 0;
15071    } else {
15072      newProgress = (translate - swiper.minTranslate()) / translatesDiff;
15073    }
15074
15075    if (newProgress !== progress) {
15076      swiper.updateProgress(translate);
15077    }
15078
15079    swiper.emit('setTranslate', swiper.translate, byController);
15080  }
15081
15082  function minTranslate() {
15083    return -this.snapGrid[0];
15084  }
15085
15086  function maxTranslate() {
15087    return -this.snapGrid[this.snapGrid.length - 1];
15088  }
15089
15090  function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
15091    if (translate === void 0) {
15092      translate = 0;
15093    }
15094
15095    if (speed === void 0) {
15096      speed = this.params.speed;
15097    }
15098
15099    if (runCallbacks === void 0) {
15100      runCallbacks = true;
15101    }
15102
15103    if (translateBounds === void 0) {
15104      translateBounds = true;
15105    }
15106
15107    var swiper = this;
15108    var params = swiper.params,
15109        wrapperEl = swiper.wrapperEl;
15110
15111    if (swiper.animating && params.preventInteractionOnTransition) {
15112      return false;
15113    }
15114
15115    var minTranslate = swiper.minTranslate();
15116    var maxTranslate = swiper.maxTranslate();
15117    var newTranslate;
15118    if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;
15119    swiper.updateProgress(newTranslate);
15120
15121    if (params.cssMode) {
15122      var isH = swiper.isHorizontal();
15123
15124      if (speed === 0) {
15125        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
15126      } else {
15127        if (wrapperEl.scrollTo) {
15128          var _wrapperEl$scrollTo;
15129
15130          wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));
15131        } else {
15132          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
15133        }
15134      }
15135
15136      return true;
15137    }
15138
15139    if (speed === 0) {
15140      swiper.setTransition(0);
15141      swiper.setTranslate(newTranslate);
15142
15143      if (runCallbacks) {
15144        swiper.emit('beforeTransitionStart', speed, internal);
15145        swiper.emit('transitionEnd');
15146      }
15147    } else {
15148      swiper.setTransition(speed);
15149      swiper.setTranslate(newTranslate);
15150
15151      if (runCallbacks) {
15152        swiper.emit('beforeTransitionStart', speed, internal);
15153        swiper.emit('transitionStart');
15154      }
15155
15156      if (!swiper.animating) {
15157        swiper.animating = true;
15158
15159        if (!swiper.onTranslateToWrapperTransitionEnd) {
15160          swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
15161            if (!swiper || swiper.destroyed) return;
15162            if (e.target !== this) return;
15163            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
15164            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
15165            swiper.onTranslateToWrapperTransitionEnd = null;
15166            delete swiper.onTranslateToWrapperTransitionEnd;
15167
15168            if (runCallbacks) {
15169              swiper.emit('transitionEnd');
15170            }
15171          };
15172        }
15173
15174        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
15175        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
15176      }
15177    }
15178
15179    return true;
15180  }
15181
15182  var translate = {
15183    getTranslate: getSwiperTranslate,
15184    setTranslate: setTranslate,
15185    minTranslate: minTranslate,
15186    maxTranslate: maxTranslate,
15187    translateTo: translateTo
15188  };
15189
15190  function setTransition(duration, byController) {
15191    var swiper = this;
15192
15193    if (!swiper.params.cssMode) {
15194      swiper.$wrapperEl.transition(duration);
15195    }
15196
15197    swiper.emit('setTransition', duration, byController);
15198  }
15199
15200  function transitionStart(runCallbacks, direction) {
15201    if (runCallbacks === void 0) {
15202      runCallbacks = true;
15203    }
15204
15205    var swiper = this;
15206    var activeIndex = swiper.activeIndex,
15207        params = swiper.params,
15208        previousIndex = swiper.previousIndex;
15209    if (params.cssMode) return;
15210
15211    if (params.autoHeight) {
15212      swiper.updateAutoHeight();
15213    }
15214
15215    var dir = direction;
15216
15217    if (!dir) {
15218      if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
15219    }
15220
15221    swiper.emit('transitionStart');
15222
15223    if (runCallbacks && activeIndex !== previousIndex) {
15224      if (dir === 'reset') {
15225        swiper.emit('slideResetTransitionStart');
15226        return;
15227      }
15228
15229      swiper.emit('slideChangeTransitionStart');
15230
15231      if (dir === 'next') {
15232        swiper.emit('slideNextTransitionStart');
15233      } else {
15234        swiper.emit('slidePrevTransitionStart');
15235      }
15236    }
15237  }
15238
15239  function transitionEnd(runCallbacks, direction) {
15240    if (runCallbacks === void 0) {
15241      runCallbacks = true;
15242    }
15243
15244    var swiper = this;
15245    var activeIndex = swiper.activeIndex,
15246        previousIndex = swiper.previousIndex,
15247        params = swiper.params;
15248    swiper.animating = false;
15249    if (params.cssMode) return;
15250    swiper.setTransition(0);
15251    var dir = direction;
15252
15253    if (!dir) {
15254      if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
15255    }
15256
15257    swiper.emit('transitionEnd');
15258
15259    if (runCallbacks && activeIndex !== previousIndex) {
15260      if (dir === 'reset') {
15261        swiper.emit('slideResetTransitionEnd');
15262        return;
15263      }
15264
15265      swiper.emit('slideChangeTransitionEnd');
15266
15267      if (dir === 'next') {
15268        swiper.emit('slideNextTransitionEnd');
15269      } else {
15270        swiper.emit('slidePrevTransitionEnd');
15271      }
15272    }
15273  }
15274
15275  var transition = {
15276    setTransition: setTransition,
15277    transitionStart: transitionStart,
15278    transitionEnd: transitionEnd
15279  };
15280
15281  function slideTo(index, speed, runCallbacks, internal, initial) {
15282    if (index === void 0) {
15283      index = 0;
15284    }
15285
15286    if (speed === void 0) {
15287      speed = this.params.speed;
15288    }
15289
15290    if (runCallbacks === void 0) {
15291      runCallbacks = true;
15292    }
15293
15294    if (typeof index !== 'number' && typeof index !== 'string') {
15295      throw new Error("The 'index' argument cannot have type other than 'number' or 'string'. [" + _typeof(index) + "] given.");
15296    }
15297
15298    if (typeof index === 'string') {
15299      var indexAsNumber = parseInt(index, 10);
15300      var isValidNumber = isFinite(indexAsNumber);
15301
15302      if (!isValidNumber) {
15303        throw new Error("The passed-in 'index' (string) couldn't be converted to 'number'. [" + index + "] given.");
15304      }
15305
15306      index = indexAsNumber;
15307    }
15308
15309    var swiper = this;
15310    var slideIndex = index;
15311    if (slideIndex < 0) slideIndex = 0;
15312    var params = swiper.params,
15313        snapGrid = swiper.snapGrid,
15314        slidesGrid = swiper.slidesGrid,
15315        previousIndex = swiper.previousIndex,
15316        activeIndex = swiper.activeIndex,
15317        rtl = swiper.rtlTranslate,
15318        wrapperEl = swiper.wrapperEl,
15319        enabled = swiper.enabled;
15320
15321    if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {
15322      return false;
15323    }
15324
15325    var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
15326    var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
15327    if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
15328
15329    if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
15330      swiper.emit('beforeSlideChangeStart');
15331    }
15332
15333    var translate = -snapGrid[snapIndex];
15334    swiper.updateProgress(translate);
15335
15336    if (params.normalizeSlideIndex) {
15337      for (var i = 0; i < slidesGrid.length; i += 1) {
15338        var normalizedTranslate = -Math.floor(translate * 100);
15339        var normalizedGird = Math.floor(slidesGrid[i] * 100);
15340        var normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
15341
15342        if (typeof slidesGrid[i + 1] !== 'undefined') {
15343          if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGird) / 2) {
15344            slideIndex = i;
15345          } else if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext) {
15346            slideIndex = i + 1;
15347          }
15348        } else if (normalizedTranslate >= normalizedGird) {
15349          slideIndex = i;
15350        }
15351      }
15352    }
15353
15354    if (swiper.initialized && slideIndex !== activeIndex) {
15355      if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
15356        return false;
15357      }
15358
15359      if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
15360        if ((activeIndex || 0) !== slideIndex) return false;
15361      }
15362    }
15363
15364    var direction;
15365    if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';
15366
15367    if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
15368      swiper.updateActiveIndex(slideIndex);
15369
15370      if (params.autoHeight) {
15371        swiper.updateAutoHeight();
15372      }
15373
15374      swiper.updateSlidesClasses();
15375
15376      if (params.effect !== 'slide') {
15377        swiper.setTranslate(translate);
15378      }
15379
15380      if (direction !== 'reset') {
15381        swiper.transitionStart(runCallbacks, direction);
15382        swiper.transitionEnd(runCallbacks, direction);
15383      }
15384
15385      return false;
15386    }
15387
15388    if (params.cssMode) {
15389      var isH = swiper.isHorizontal();
15390      var t = -translate;
15391
15392      if (rtl) {
15393        t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
15394      }
15395
15396      if (speed === 0) {
15397        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
15398      } else {
15399        if (wrapperEl.scrollTo) {
15400          var _wrapperEl$scrollTo;
15401
15402          wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));
15403        } else {
15404          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
15405        }
15406      }
15407
15408      return true;
15409    }
15410
15411    if (speed === 0) {
15412      swiper.setTransition(0);
15413      swiper.setTranslate(translate);
15414      swiper.updateActiveIndex(slideIndex);
15415      swiper.updateSlidesClasses();
15416      swiper.emit('beforeTransitionStart', speed, internal);
15417      swiper.transitionStart(runCallbacks, direction);
15418      swiper.transitionEnd(runCallbacks, direction);
15419    } else {
15420      swiper.setTransition(speed);
15421      swiper.setTranslate(translate);
15422      swiper.updateActiveIndex(slideIndex);
15423      swiper.updateSlidesClasses();
15424      swiper.emit('beforeTransitionStart', speed, internal);
15425      swiper.transitionStart(runCallbacks, direction);
15426
15427      if (!swiper.animating) {
15428        swiper.animating = true;
15429
15430        if (!swiper.onSlideToWrapperTransitionEnd) {
15431          swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
15432            if (!swiper || swiper.destroyed) return;
15433            if (e.target !== this) return;
15434            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
15435            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
15436            swiper.onSlideToWrapperTransitionEnd = null;
15437            delete swiper.onSlideToWrapperTransitionEnd;
15438            swiper.transitionEnd(runCallbacks, direction);
15439          };
15440        }
15441
15442        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
15443        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
15444      }
15445    }
15446
15447    return true;
15448  }
15449
15450  function slideToLoop(index, speed, runCallbacks, internal) {
15451    if (index === void 0) {
15452      index = 0;
15453    }
15454
15455    if (speed === void 0) {
15456      speed = this.params.speed;
15457    }
15458
15459    if (runCallbacks === void 0) {
15460      runCallbacks = true;
15461    }
15462
15463    var swiper = this;
15464    var newIndex = index;
15465
15466    if (swiper.params.loop) {
15467      newIndex += swiper.loopedSlides;
15468    }
15469
15470    return swiper.slideTo(newIndex, speed, runCallbacks, internal);
15471  }
15472
15473  function slideNext(speed, runCallbacks, internal) {
15474    if (speed === void 0) {
15475      speed = this.params.speed;
15476    }
15477
15478    if (runCallbacks === void 0) {
15479      runCallbacks = true;
15480    }
15481
15482    var swiper = this;
15483    var params = swiper.params,
15484        animating = swiper.animating,
15485        enabled = swiper.enabled;
15486    if (!enabled) return swiper;
15487    var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
15488
15489    if (params.loop) {
15490      if (animating && params.loopPreventsSlide) return false;
15491      swiper.loopFix();
15492      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
15493    }
15494
15495    return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
15496  }
15497
15498  function slidePrev(speed, runCallbacks, internal) {
15499    if (speed === void 0) {
15500      speed = this.params.speed;
15501    }
15502
15503    if (runCallbacks === void 0) {
15504      runCallbacks = true;
15505    }
15506
15507    var swiper = this;
15508    var params = swiper.params,
15509        animating = swiper.animating,
15510        snapGrid = swiper.snapGrid,
15511        slidesGrid = swiper.slidesGrid,
15512        rtlTranslate = swiper.rtlTranslate,
15513        enabled = swiper.enabled;
15514    if (!enabled) return swiper;
15515
15516    if (params.loop) {
15517      if (animating && params.loopPreventsSlide) return false;
15518      swiper.loopFix();
15519      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
15520    }
15521
15522    var translate = rtlTranslate ? swiper.translate : -swiper.translate;
15523
15524    function normalize(val) {
15525      if (val < 0) return -Math.floor(Math.abs(val));
15526      return Math.floor(val);
15527    }
15528
15529    var normalizedTranslate = normalize(translate);
15530    var normalizedSnapGrid = snapGrid.map(function (val) {
15531      return normalize(val);
15532    });
15533    snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
15534    var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
15535
15536    if (typeof prevSnap === 'undefined' && params.cssMode) {
15537      snapGrid.forEach(function (snap) {
15538        if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
15539      });
15540    }
15541
15542    var prevIndex;
15543
15544    if (typeof prevSnap !== 'undefined') {
15545      prevIndex = slidesGrid.indexOf(prevSnap);
15546      if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
15547    }
15548
15549    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
15550  }
15551
15552  function slideReset(speed, runCallbacks, internal) {
15553    if (speed === void 0) {
15554      speed = this.params.speed;
15555    }
15556
15557    if (runCallbacks === void 0) {
15558      runCallbacks = true;
15559    }
15560
15561    var swiper = this;
15562    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
15563  }
15564
15565  function slideToClosest(speed, runCallbacks, internal, threshold) {
15566    if (speed === void 0) {
15567      speed = this.params.speed;
15568    }
15569
15570    if (runCallbacks === void 0) {
15571      runCallbacks = true;
15572    }
15573
15574    if (threshold === void 0) {
15575      threshold = 0.5;
15576    }
15577
15578    var swiper = this;
15579    var index = swiper.activeIndex;
15580    var skip = Math.min(swiper.params.slidesPerGroupSkip, index);
15581    var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
15582    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
15583
15584    if (translate >= swiper.snapGrid[snapIndex]) {
15585      var currentSnap = swiper.snapGrid[snapIndex];
15586      var nextSnap = swiper.snapGrid[snapIndex + 1];
15587
15588      if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
15589        index += swiper.params.slidesPerGroup;
15590      }
15591    } else {
15592      var prevSnap = swiper.snapGrid[snapIndex - 1];
15593      var _currentSnap = swiper.snapGrid[snapIndex];
15594
15595      if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {
15596        index -= swiper.params.slidesPerGroup;
15597      }
15598    }
15599
15600    index = Math.max(index, 0);
15601    index = Math.min(index, swiper.slidesGrid.length - 1);
15602    return swiper.slideTo(index, speed, runCallbacks, internal);
15603  }
15604
15605  function slideToClickedSlide() {
15606    var swiper = this;
15607    var params = swiper.params,
15608        $wrapperEl = swiper.$wrapperEl;
15609    var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
15610    var slideToIndex = swiper.clickedIndex;
15611    var realIndex;
15612
15613    if (params.loop) {
15614      if (swiper.animating) return;
15615      realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
15616
15617      if (params.centeredSlides) {
15618        if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
15619          swiper.loopFix();
15620          slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index();
15621          nextTick(function () {
15622            swiper.slideTo(slideToIndex);
15623          });
15624        } else {
15625          swiper.slideTo(slideToIndex);
15626        }
15627      } else if (slideToIndex > swiper.slides.length - slidesPerView) {
15628        swiper.loopFix();
15629        slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index();
15630        nextTick(function () {
15631          swiper.slideTo(slideToIndex);
15632        });
15633      } else {
15634        swiper.slideTo(slideToIndex);
15635      }
15636    } else {
15637      swiper.slideTo(slideToIndex);
15638    }
15639  }
15640
15641  var slide = {
15642    slideTo: slideTo,
15643    slideToLoop: slideToLoop,
15644    slideNext: slideNext,
15645    slidePrev: slidePrev,
15646    slideReset: slideReset,
15647    slideToClosest: slideToClosest,
15648    slideToClickedSlide: slideToClickedSlide
15649  };
15650
15651  function loopCreate() {
15652    var swiper = this;
15653    var document = getDocument();
15654    var params = swiper.params,
15655        $wrapperEl = swiper.$wrapperEl;
15656    $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass).remove();
15657    var slides = $wrapperEl.children("." + params.slideClass);
15658
15659    if (params.loopFillGroupWithBlank) {
15660      var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;
15661
15662      if (blankSlidesNum !== params.slidesPerGroup) {
15663        for (var i = 0; i < blankSlidesNum; i += 1) {
15664          var blankNode = $(document.createElement('div')).addClass(params.slideClass + " " + params.slideBlankClass);
15665          $wrapperEl.append(blankNode);
15666        }
15667
15668        slides = $wrapperEl.children("." + params.slideClass);
15669      }
15670    }
15671
15672    if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
15673    swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
15674    swiper.loopedSlides += params.loopAdditionalSlides;
15675
15676    if (swiper.loopedSlides > slides.length) {
15677      swiper.loopedSlides = slides.length;
15678    }
15679
15680    var prependSlides = [];
15681    var appendSlides = [];
15682    slides.each(function (el, index) {
15683      var slide = $(el);
15684
15685      if (index < swiper.loopedSlides) {
15686        appendSlides.push(el);
15687      }
15688
15689      if (index < slides.length && index >= slides.length - swiper.loopedSlides) {
15690        prependSlides.push(el);
15691      }
15692
15693      slide.attr('data-swiper-slide-index', index);
15694    });
15695
15696    for (var _i = 0; _i < appendSlides.length; _i += 1) {
15697      $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass));
15698    }
15699
15700    for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) {
15701      $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass));
15702    }
15703  }
15704
15705  function loopFix() {
15706    var swiper = this;
15707    swiper.emit('beforeLoopFix');
15708    var activeIndex = swiper.activeIndex,
15709        slides = swiper.slides,
15710        loopedSlides = swiper.loopedSlides,
15711        allowSlidePrev = swiper.allowSlidePrev,
15712        allowSlideNext = swiper.allowSlideNext,
15713        snapGrid = swiper.snapGrid,
15714        rtl = swiper.rtlTranslate;
15715    var newIndex;
15716    swiper.allowSlidePrev = true;
15717    swiper.allowSlideNext = true;
15718    var snapTranslate = -snapGrid[activeIndex];
15719    var diff = snapTranslate - swiper.getTranslate();
15720
15721    if (activeIndex < loopedSlides) {
15722      newIndex = slides.length - loopedSlides * 3 + activeIndex;
15723      newIndex += loopedSlides;
15724      var slideChanged = swiper.slideTo(newIndex, 0, false, true);
15725
15726      if (slideChanged && diff !== 0) {
15727        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
15728      }
15729    } else if (activeIndex >= slides.length - loopedSlides) {
15730      newIndex = -slides.length + activeIndex + loopedSlides;
15731      newIndex += loopedSlides;
15732
15733      var _slideChanged = swiper.slideTo(newIndex, 0, false, true);
15734
15735      if (_slideChanged && diff !== 0) {
15736        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
15737      }
15738    }
15739
15740    swiper.allowSlidePrev = allowSlidePrev;
15741    swiper.allowSlideNext = allowSlideNext;
15742    swiper.emit('loopFix');
15743  }
15744
15745  function loopDestroy() {
15746    var swiper = this;
15747    var $wrapperEl = swiper.$wrapperEl,
15748        params = swiper.params,
15749        slides = swiper.slides;
15750    $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + ",." + params.slideClass + "." + params.slideBlankClass).remove();
15751    slides.removeAttr('data-swiper-slide-index');
15752  }
15753
15754  var loop = {
15755    loopCreate: loopCreate,
15756    loopFix: loopFix,
15757    loopDestroy: loopDestroy
15758  };
15759
15760  function setGrabCursor(moving) {
15761    var swiper = this;
15762    if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
15763    var el = swiper.el;
15764    el.style.cursor = 'move';
15765    el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
15766    el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
15767    el.style.cursor = moving ? 'grabbing' : 'grab';
15768  }
15769
15770  function unsetGrabCursor() {
15771    var swiper = this;
15772
15773    if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
15774      return;
15775    }
15776
15777    swiper.el.style.cursor = '';
15778  }
15779
15780  var grabCursor = {
15781    setGrabCursor: setGrabCursor,
15782    unsetGrabCursor: unsetGrabCursor
15783  };
15784
15785  function appendSlide(slides) {
15786    var swiper = this;
15787    var $wrapperEl = swiper.$wrapperEl,
15788        params = swiper.params;
15789
15790    if (params.loop) {
15791      swiper.loopDestroy();
15792    }
15793
15794    if (_typeof(slides) === 'object' && 'length' in slides) {
15795      for (var i = 0; i < slides.length; i += 1) {
15796        if (slides[i]) $wrapperEl.append(slides[i]);
15797      }
15798    } else {
15799      $wrapperEl.append(slides);
15800    }
15801
15802    if (params.loop) {
15803      swiper.loopCreate();
15804    }
15805
15806    if (!(params.observer && swiper.support.observer)) {
15807      swiper.update();
15808    }
15809  }
15810
15811  function prependSlide(slides) {
15812    var swiper = this;
15813    var params = swiper.params,
15814        $wrapperEl = swiper.$wrapperEl,
15815        activeIndex = swiper.activeIndex;
15816
15817    if (params.loop) {
15818      swiper.loopDestroy();
15819    }
15820
15821    var newActiveIndex = activeIndex + 1;
15822
15823    if (_typeof(slides) === 'object' && 'length' in slides) {
15824      for (var i = 0; i < slides.length; i += 1) {
15825        if (slides[i]) $wrapperEl.prepend(slides[i]);
15826      }
15827
15828      newActiveIndex = activeIndex + slides.length;
15829    } else {
15830      $wrapperEl.prepend(slides);
15831    }
15832
15833    if (params.loop) {
15834      swiper.loopCreate();
15835    }
15836
15837    if (!(params.observer && swiper.support.observer)) {
15838      swiper.update();
15839    }
15840
15841    swiper.slideTo(newActiveIndex, 0, false);
15842  }
15843
15844  function addSlide(index, slides) {
15845    var swiper = this;
15846    var $wrapperEl = swiper.$wrapperEl,
15847        params = swiper.params,
15848        activeIndex = swiper.activeIndex;
15849    var activeIndexBuffer = activeIndex;
15850
15851    if (params.loop) {
15852      activeIndexBuffer -= swiper.loopedSlides;
15853      swiper.loopDestroy();
15854      swiper.slides = $wrapperEl.children("." + params.slideClass);
15855    }
15856
15857    var baseLength = swiper.slides.length;
15858
15859    if (index <= 0) {
15860      swiper.prependSlide(slides);
15861      return;
15862    }
15863
15864    if (index >= baseLength) {
15865      swiper.appendSlide(slides);
15866      return;
15867    }
15868
15869    var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
15870    var slidesBuffer = [];
15871
15872    for (var i = baseLength - 1; i >= index; i -= 1) {
15873      var currentSlide = swiper.slides.eq(i);
15874      currentSlide.remove();
15875      slidesBuffer.unshift(currentSlide);
15876    }
15877
15878    if (_typeof(slides) === 'object' && 'length' in slides) {
15879      for (var _i = 0; _i < slides.length; _i += 1) {
15880        if (slides[_i]) $wrapperEl.append(slides[_i]);
15881      }
15882
15883      newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
15884    } else {
15885      $wrapperEl.append(slides);
15886    }
15887
15888    for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) {
15889      $wrapperEl.append(slidesBuffer[_i2]);
15890    }
15891
15892    if (params.loop) {
15893      swiper.loopCreate();
15894    }
15895
15896    if (!(params.observer && swiper.support.observer)) {
15897      swiper.update();
15898    }
15899
15900    if (params.loop) {
15901      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
15902    } else {
15903      swiper.slideTo(newActiveIndex, 0, false);
15904    }
15905  }
15906
15907  function removeSlide(slidesIndexes) {
15908    var swiper = this;
15909    var params = swiper.params,
15910        $wrapperEl = swiper.$wrapperEl,
15911        activeIndex = swiper.activeIndex;
15912    var activeIndexBuffer = activeIndex;
15913
15914    if (params.loop) {
15915      activeIndexBuffer -= swiper.loopedSlides;
15916      swiper.loopDestroy();
15917      swiper.slides = $wrapperEl.children("." + params.slideClass);
15918    }
15919
15920    var newActiveIndex = activeIndexBuffer;
15921    var indexToRemove;
15922
15923    if (_typeof(slidesIndexes) === 'object' && 'length' in slidesIndexes) {
15924      for (var i = 0; i < slidesIndexes.length; i += 1) {
15925        indexToRemove = slidesIndexes[i];
15926        if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
15927        if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
15928      }
15929
15930      newActiveIndex = Math.max(newActiveIndex, 0);
15931    } else {
15932      indexToRemove = slidesIndexes;
15933      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
15934      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
15935      newActiveIndex = Math.max(newActiveIndex, 0);
15936    }
15937
15938    if (params.loop) {
15939      swiper.loopCreate();
15940    }
15941
15942    if (!(params.observer && swiper.support.observer)) {
15943      swiper.update();
15944    }
15945
15946    if (params.loop) {
15947      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
15948    } else {
15949      swiper.slideTo(newActiveIndex, 0, false);
15950    }
15951  }
15952
15953  function removeAllSlides() {
15954    var swiper = this;
15955    var slidesIndexes = [];
15956
15957    for (var i = 0; i < swiper.slides.length; i += 1) {
15958      slidesIndexes.push(i);
15959    }
15960
15961    swiper.removeSlide(slidesIndexes);
15962  }
15963
15964  var manipulation = {
15965    appendSlide: appendSlide,
15966    prependSlide: prependSlide,
15967    addSlide: addSlide,
15968    removeSlide: removeSlide,
15969    removeAllSlides: removeAllSlides
15970  };
15971
15972  function onTouchStart(event) {
15973    var swiper = this;
15974    var document = getDocument();
15975    var window = getWindow();
15976    var data = swiper.touchEventsData;
15977    var params = swiper.params,
15978        touches = swiper.touches,
15979        enabled = swiper.enabled;
15980    if (!enabled) return;
15981
15982    if (swiper.animating && params.preventInteractionOnTransition) {
15983      return;
15984    }
15985
15986    var e = event;
15987    if (e.originalEvent) e = e.originalEvent;
15988    var $targetEl = $(e.target);
15989
15990    if (params.touchEventsTarget === 'wrapper') {
15991      if (!$targetEl.closest(swiper.wrapperEl).length) return;
15992    }
15993
15994    data.isTouchEvent = e.type === 'touchstart';
15995    if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
15996    if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
15997    if (data.isTouched && data.isMoved) return;
15998    var swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';
15999
16000    if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {
16001      $targetEl = $(event.path[0]);
16002    }
16003
16004    if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : "." + params.noSwipingClass)[0]) {
16005      swiper.allowClick = true;
16006      return;
16007    }
16008
16009    if (params.swipeHandler) {
16010      if (!$targetEl.closest(params.swipeHandler)[0]) return;
16011    }
16012
16013    touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
16014    touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
16015    var startX = touches.currentX;
16016    var startY = touches.currentY;
16017    var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
16018    var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
16019
16020    if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {
16021      if (edgeSwipeDetection === 'prevent') {
16022        event.preventDefault();
16023      } else {
16024        return;
16025      }
16026    }
16027
16028    extend(data, {
16029      isTouched: true,
16030      isMoved: false,
16031      allowTouchCallbacks: true,
16032      isScrolling: undefined,
16033      startMoving: undefined
16034    });
16035    touches.startX = startX;
16036    touches.startY = startY;
16037    data.touchStartTime = now();
16038    swiper.allowClick = true;
16039    swiper.updateSize();
16040    swiper.swipeDirection = undefined;
16041    if (params.threshold > 0) data.allowThresholdMove = false;
16042
16043    if (e.type !== 'touchstart') {
16044      var preventDefault = true;
16045      if ($targetEl.is(data.formElements)) preventDefault = false;
16046
16047      if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) {
16048        document.activeElement.blur();
16049      }
16050
16051      var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
16052
16053      if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {
16054        e.preventDefault();
16055      }
16056    }
16057
16058    swiper.emit('touchStart', e);
16059  }
16060
16061  function onTouchMove(event) {
16062    var document = getDocument();
16063    var swiper = this;
16064    var data = swiper.touchEventsData;
16065    var params = swiper.params,
16066        touches = swiper.touches,
16067        rtl = swiper.rtlTranslate,
16068        enabled = swiper.enabled;
16069    if (!enabled) return;
16070    var e = event;
16071    if (e.originalEvent) e = e.originalEvent;
16072
16073    if (!data.isTouched) {
16074      if (data.startMoving && data.isScrolling) {
16075        swiper.emit('touchMoveOpposite', e);
16076      }
16077
16078      return;
16079    }
16080
16081    if (data.isTouchEvent && e.type !== 'touchmove') return;
16082    var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
16083    var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
16084    var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
16085
16086    if (e.preventedByNestedSwiper) {
16087      touches.startX = pageX;
16088      touches.startY = pageY;
16089      return;
16090    }
16091
16092    if (!swiper.allowTouchMove) {
16093      swiper.allowClick = false;
16094
16095      if (data.isTouched) {
16096        extend(touches, {
16097          startX: pageX,
16098          startY: pageY,
16099          currentX: pageX,
16100          currentY: pageY
16101        });
16102        data.touchStartTime = now();
16103      }
16104
16105      return;
16106    }
16107
16108    if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
16109      if (swiper.isVertical()) {
16110        if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
16111          data.isTouched = false;
16112          data.isMoved = false;
16113          return;
16114        }
16115      } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
16116        return;
16117      }
16118    }
16119
16120    if (data.isTouchEvent && document.activeElement) {
16121      if (e.target === document.activeElement && $(e.target).is(data.formElements)) {
16122        data.isMoved = true;
16123        swiper.allowClick = false;
16124        return;
16125      }
16126    }
16127
16128    if (data.allowTouchCallbacks) {
16129      swiper.emit('touchMove', e);
16130    }
16131
16132    if (e.targetTouches && e.targetTouches.length > 1) return;
16133    touches.currentX = pageX;
16134    touches.currentY = pageY;
16135    var diffX = touches.currentX - touches.startX;
16136    var diffY = touches.currentY - touches.startY;
16137    if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;
16138
16139    if (typeof data.isScrolling === 'undefined') {
16140      var touchAngle;
16141
16142      if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
16143        data.isScrolling = false;
16144      } else {
16145        if (diffX * diffX + diffY * diffY >= 25) {
16146          touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
16147          data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
16148        }
16149      }
16150    }
16151
16152    if (data.isScrolling) {
16153      swiper.emit('touchMoveOpposite', e);
16154    }
16155
16156    if (typeof data.startMoving === 'undefined') {
16157      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
16158        data.startMoving = true;
16159      }
16160    }
16161
16162    if (data.isScrolling) {
16163      data.isTouched = false;
16164      return;
16165    }
16166
16167    if (!data.startMoving) {
16168      return;
16169    }
16170
16171    swiper.allowClick = false;
16172
16173    if (!params.cssMode && e.cancelable) {
16174      e.preventDefault();
16175    }
16176
16177    if (params.touchMoveStopPropagation && !params.nested) {
16178      e.stopPropagation();
16179    }
16180
16181    if (!data.isMoved) {
16182      if (params.loop) {
16183        swiper.loopFix();
16184      }
16185
16186      data.startTranslate = swiper.getTranslate();
16187      swiper.setTransition(0);
16188
16189      if (swiper.animating) {
16190        swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
16191      }
16192
16193      data.allowMomentumBounce = false;
16194
16195      if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
16196        swiper.setGrabCursor(true);
16197      }
16198
16199      swiper.emit('sliderFirstMove', e);
16200    }
16201
16202    swiper.emit('sliderMove', e);
16203    data.isMoved = true;
16204    var diff = swiper.isHorizontal() ? diffX : diffY;
16205    touches.diff = diff;
16206    diff *= params.touchRatio;
16207    if (rtl) diff = -diff;
16208    swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
16209    data.currentTranslate = diff + data.startTranslate;
16210    var disableParentSwiper = true;
16211    var resistanceRatio = params.resistanceRatio;
16212
16213    if (params.touchReleaseOnEdges) {
16214      resistanceRatio = 0;
16215    }
16216
16217    if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {
16218      disableParentSwiper = false;
16219      if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);
16220    } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
16221      disableParentSwiper = false;
16222      if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);
16223    }
16224
16225    if (disableParentSwiper) {
16226      e.preventedByNestedSwiper = true;
16227    }
16228
16229    if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
16230      data.currentTranslate = data.startTranslate;
16231    }
16232
16233    if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
16234      data.currentTranslate = data.startTranslate;
16235    }
16236
16237    if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
16238      data.currentTranslate = data.startTranslate;
16239    }
16240
16241    if (params.threshold > 0) {
16242      if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
16243        if (!data.allowThresholdMove) {
16244          data.allowThresholdMove = true;
16245          touches.startX = touches.currentX;
16246          touches.startY = touches.currentY;
16247          data.currentTranslate = data.startTranslate;
16248          touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
16249          return;
16250        }
16251      } else {
16252        data.currentTranslate = data.startTranslate;
16253        return;
16254      }
16255    }
16256
16257    if (!params.followFinger || params.cssMode) return;
16258
16259    if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
16260      swiper.updateActiveIndex();
16261      swiper.updateSlidesClasses();
16262    }
16263
16264    if (params.freeMode) {
16265      if (data.velocities.length === 0) {
16266        data.velocities.push({
16267          position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
16268          time: data.touchStartTime
16269        });
16270      }
16271
16272      data.velocities.push({
16273        position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
16274        time: now()
16275      });
16276    }
16277
16278    swiper.updateProgress(data.currentTranslate);
16279    swiper.setTranslate(data.currentTranslate);
16280  }
16281
16282  function onTouchEnd(event) {
16283    var swiper = this;
16284    var data = swiper.touchEventsData;
16285    var params = swiper.params,
16286        touches = swiper.touches,
16287        rtl = swiper.rtlTranslate,
16288        $wrapperEl = swiper.$wrapperEl,
16289        slidesGrid = swiper.slidesGrid,
16290        snapGrid = swiper.snapGrid,
16291        enabled = swiper.enabled;
16292    if (!enabled) return;
16293    var e = event;
16294    if (e.originalEvent) e = e.originalEvent;
16295
16296    if (data.allowTouchCallbacks) {
16297      swiper.emit('touchEnd', e);
16298    }
16299
16300    data.allowTouchCallbacks = false;
16301
16302    if (!data.isTouched) {
16303      if (data.isMoved && params.grabCursor) {
16304        swiper.setGrabCursor(false);
16305      }
16306
16307      data.isMoved = false;
16308      data.startMoving = false;
16309      return;
16310    }
16311
16312    if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
16313      swiper.setGrabCursor(false);
16314    }
16315
16316    var touchEndTime = now();
16317    var timeDiff = touchEndTime - data.touchStartTime;
16318
16319    if (swiper.allowClick) {
16320      swiper.updateClickedSlide(e);
16321      swiper.emit('tap click', e);
16322
16323      if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
16324        swiper.emit('doubleTap doubleClick', e);
16325      }
16326    }
16327
16328    data.lastClickTime = now();
16329    nextTick(function () {
16330      if (!swiper.destroyed) swiper.allowClick = true;
16331    });
16332
16333    if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
16334      data.isTouched = false;
16335      data.isMoved = false;
16336      data.startMoving = false;
16337      return;
16338    }
16339
16340    data.isTouched = false;
16341    data.isMoved = false;
16342    data.startMoving = false;
16343    var currentPos;
16344
16345    if (params.followFinger) {
16346      currentPos = rtl ? swiper.translate : -swiper.translate;
16347    } else {
16348      currentPos = -data.currentTranslate;
16349    }
16350
16351    if (params.cssMode) {
16352      return;
16353    }
16354
16355    if (params.freeMode) {
16356      if (currentPos < -swiper.minTranslate()) {
16357        swiper.slideTo(swiper.activeIndex);
16358        return;
16359      }
16360
16361      if (currentPos > -swiper.maxTranslate()) {
16362        if (swiper.slides.length < snapGrid.length) {
16363          swiper.slideTo(snapGrid.length - 1);
16364        } else {
16365          swiper.slideTo(swiper.slides.length - 1);
16366        }
16367
16368        return;
16369      }
16370
16371      if (params.freeModeMomentum) {
16372        if (data.velocities.length > 1) {
16373          var lastMoveEvent = data.velocities.pop();
16374          var velocityEvent = data.velocities.pop();
16375          var distance = lastMoveEvent.position - velocityEvent.position;
16376          var time = lastMoveEvent.time - velocityEvent.time;
16377          swiper.velocity = distance / time;
16378          swiper.velocity /= 2;
16379
16380          if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
16381            swiper.velocity = 0;
16382          }
16383
16384          if (time > 150 || now() - lastMoveEvent.time > 300) {
16385            swiper.velocity = 0;
16386          }
16387        } else {
16388          swiper.velocity = 0;
16389        }
16390
16391        swiper.velocity *= params.freeModeMomentumVelocityRatio;
16392        data.velocities.length = 0;
16393        var momentumDuration = 1000 * params.freeModeMomentumRatio;
16394        var momentumDistance = swiper.velocity * momentumDuration;
16395        var newPosition = swiper.translate + momentumDistance;
16396        if (rtl) newPosition = -newPosition;
16397        var doBounce = false;
16398        var afterBouncePosition;
16399        var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
16400        var needsLoopFix;
16401
16402        if (newPosition < swiper.maxTranslate()) {
16403          if (params.freeModeMomentumBounce) {
16404            if (newPosition + swiper.maxTranslate() < -bounceAmount) {
16405              newPosition = swiper.maxTranslate() - bounceAmount;
16406            }
16407
16408            afterBouncePosition = swiper.maxTranslate();
16409            doBounce = true;
16410            data.allowMomentumBounce = true;
16411          } else {
16412            newPosition = swiper.maxTranslate();
16413          }
16414
16415          if (params.loop && params.centeredSlides) needsLoopFix = true;
16416        } else if (newPosition > swiper.minTranslate()) {
16417          if (params.freeModeMomentumBounce) {
16418            if (newPosition - swiper.minTranslate() > bounceAmount) {
16419              newPosition = swiper.minTranslate() + bounceAmount;
16420            }
16421
16422            afterBouncePosition = swiper.minTranslate();
16423            doBounce = true;
16424            data.allowMomentumBounce = true;
16425          } else {
16426            newPosition = swiper.minTranslate();
16427          }
16428
16429          if (params.loop && params.centeredSlides) needsLoopFix = true;
16430        } else if (params.freeModeSticky) {
16431          var nextSlide;
16432
16433          for (var j = 0; j < snapGrid.length; j += 1) {
16434            if (snapGrid[j] > -newPosition) {
16435              nextSlide = j;
16436              break;
16437            }
16438          }
16439
16440          if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
16441            newPosition = snapGrid[nextSlide];
16442          } else {
16443            newPosition = snapGrid[nextSlide - 1];
16444          }
16445
16446          newPosition = -newPosition;
16447        }
16448
16449        if (needsLoopFix) {
16450          swiper.once('transitionEnd', function () {
16451            swiper.loopFix();
16452          });
16453        }
16454
16455        if (swiper.velocity !== 0) {
16456          if (rtl) {
16457            momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
16458          } else {
16459            momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
16460          }
16461
16462          if (params.freeModeSticky) {
16463            var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
16464            var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
16465
16466            if (moveDistance < currentSlideSize) {
16467              momentumDuration = params.speed;
16468            } else if (moveDistance < 2 * currentSlideSize) {
16469              momentumDuration = params.speed * 1.5;
16470            } else {
16471              momentumDuration = params.speed * 2.5;
16472            }
16473          }
16474        } else if (params.freeModeSticky) {
16475          swiper.slideToClosest();
16476          return;
16477        }
16478
16479        if (params.freeModeMomentumBounce && doBounce) {
16480          swiper.updateProgress(afterBouncePosition);
16481          swiper.setTransition(momentumDuration);
16482          swiper.setTranslate(newPosition);
16483          swiper.transitionStart(true, swiper.swipeDirection);
16484          swiper.animating = true;
16485          $wrapperEl.transitionEnd(function () {
16486            if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
16487            swiper.emit('momentumBounce');
16488            swiper.setTransition(params.speed);
16489            setTimeout(function () {
16490              swiper.setTranslate(afterBouncePosition);
16491              $wrapperEl.transitionEnd(function () {
16492                if (!swiper || swiper.destroyed) return;
16493                swiper.transitionEnd();
16494              });
16495            }, 0);
16496          });
16497        } else if (swiper.velocity) {
16498          swiper.updateProgress(newPosition);
16499          swiper.setTransition(momentumDuration);
16500          swiper.setTranslate(newPosition);
16501          swiper.transitionStart(true, swiper.swipeDirection);
16502
16503          if (!swiper.animating) {
16504            swiper.animating = true;
16505            $wrapperEl.transitionEnd(function () {
16506              if (!swiper || swiper.destroyed) return;
16507              swiper.transitionEnd();
16508            });
16509          }
16510        } else {
16511          swiper.emit('_freeModeNoMomentumRelease');
16512          swiper.updateProgress(newPosition);
16513        }
16514
16515        swiper.updateActiveIndex();
16516        swiper.updateSlidesClasses();
16517      } else if (params.freeModeSticky) {
16518        swiper.slideToClosest();
16519        return;
16520      } else if (params.freeMode) {
16521        swiper.emit('_freeModeNoMomentumRelease');
16522      }
16523
16524      if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
16525        swiper.updateProgress();
16526        swiper.updateActiveIndex();
16527        swiper.updateSlidesClasses();
16528      }
16529
16530      return;
16531    }
16532
16533    var stopIndex = 0;
16534    var groupSize = swiper.slidesSizesGrid[0];
16535
16536    for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
16537      var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
16538
16539      if (typeof slidesGrid[i + _increment] !== 'undefined') {
16540        if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {
16541          stopIndex = i;
16542          groupSize = slidesGrid[i + _increment] - slidesGrid[i];
16543        }
16544      } else if (currentPos >= slidesGrid[i]) {
16545        stopIndex = i;
16546        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
16547      }
16548    }
16549
16550    var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
16551    var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
16552
16553    if (timeDiff > params.longSwipesMs) {
16554      if (!params.longSwipes) {
16555        swiper.slideTo(swiper.activeIndex);
16556        return;
16557      }
16558
16559      if (swiper.swipeDirection === 'next') {
16560        if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);
16561      }
16562
16563      if (swiper.swipeDirection === 'prev') {
16564        if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);
16565      }
16566    } else {
16567      if (!params.shortSwipes) {
16568        swiper.slideTo(swiper.activeIndex);
16569        return;
16570      }
16571
16572      var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
16573
16574      if (!isNavButtonTarget) {
16575        if (swiper.swipeDirection === 'next') {
16576          swiper.slideTo(stopIndex + increment);
16577        }
16578
16579        if (swiper.swipeDirection === 'prev') {
16580          swiper.slideTo(stopIndex);
16581        }
16582      } else if (e.target === swiper.navigation.nextEl) {
16583        swiper.slideTo(stopIndex + increment);
16584      } else {
16585        swiper.slideTo(stopIndex);
16586      }
16587    }
16588  }
16589
16590  function onResize() {
16591    var swiper = this;
16592    var params = swiper.params,
16593        el = swiper.el;
16594    if (el && el.offsetWidth === 0) return;
16595
16596    if (params.breakpoints) {
16597      swiper.setBreakpoint();
16598    }
16599
16600    var allowSlideNext = swiper.allowSlideNext,
16601        allowSlidePrev = swiper.allowSlidePrev,
16602        snapGrid = swiper.snapGrid;
16603    swiper.allowSlideNext = true;
16604    swiper.allowSlidePrev = true;
16605    swiper.updateSize();
16606    swiper.updateSlides();
16607    swiper.updateSlidesClasses();
16608
16609    if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {
16610      swiper.slideTo(swiper.slides.length - 1, 0, false, true);
16611    } else {
16612      swiper.slideTo(swiper.activeIndex, 0, false, true);
16613    }
16614
16615    if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
16616      swiper.autoplay.run();
16617    }
16618
16619    swiper.allowSlidePrev = allowSlidePrev;
16620    swiper.allowSlideNext = allowSlideNext;
16621
16622    if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
16623      swiper.checkOverflow();
16624    }
16625  }
16626
16627  function onClick(e) {
16628    var swiper = this;
16629    if (!swiper.enabled) return;
16630
16631    if (!swiper.allowClick) {
16632      if (swiper.params.preventClicks) e.preventDefault();
16633
16634      if (swiper.params.preventClicksPropagation && swiper.animating) {
16635        e.stopPropagation();
16636        e.stopImmediatePropagation();
16637      }
16638    }
16639  }
16640
16641  function onScroll() {
16642    var swiper = this;
16643    var wrapperEl = swiper.wrapperEl,
16644        rtlTranslate = swiper.rtlTranslate,
16645        enabled = swiper.enabled;
16646    if (!enabled) return;
16647    swiper.previousTranslate = swiper.translate;
16648
16649    if (swiper.isHorizontal()) {
16650      if (rtlTranslate) {
16651        swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;
16652      } else {
16653        swiper.translate = -wrapperEl.scrollLeft;
16654      }
16655    } else {
16656      swiper.translate = -wrapperEl.scrollTop;
16657    }
16658
16659    if (swiper.translate === -0) swiper.translate = 0;
16660    swiper.updateActiveIndex();
16661    swiper.updateSlidesClasses();
16662    var newProgress;
16663    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
16664
16665    if (translatesDiff === 0) {
16666      newProgress = 0;
16667    } else {
16668      newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
16669    }
16670
16671    if (newProgress !== swiper.progress) {
16672      swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
16673    }
16674
16675    swiper.emit('setTranslate', swiper.translate, false);
16676  }
16677
16678  var dummyEventAttached = false;
16679
16680  function dummyEventListener() {}
16681
16682  function attachEvents() {
16683    var swiper = this;
16684    var document = getDocument();
16685    var params = swiper.params,
16686        touchEvents = swiper.touchEvents,
16687        el = swiper.el,
16688        wrapperEl = swiper.wrapperEl,
16689        device = swiper.device,
16690        support = swiper.support;
16691    swiper.onTouchStart = onTouchStart.bind(swiper);
16692    swiper.onTouchMove = onTouchMove.bind(swiper);
16693    swiper.onTouchEnd = onTouchEnd.bind(swiper);
16694
16695    if (params.cssMode) {
16696      swiper.onScroll = onScroll.bind(swiper);
16697    }
16698
16699    swiper.onClick = onClick.bind(swiper);
16700    var capture = !!params.nested;
16701
16702    if (!support.touch && support.pointerEvents) {
16703      el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
16704      document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
16705      document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
16706    } else {
16707      if (support.touch) {
16708        var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {
16709          passive: true,
16710          capture: false
16711        } : false;
16712        el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
16713        el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? {
16714          passive: false,
16715          capture: capture
16716        } : capture);
16717        el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
16718
16719        if (touchEvents.cancel) {
16720          el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
16721        }
16722
16723        if (!dummyEventAttached) {
16724          document.addEventListener('touchstart', dummyEventListener);
16725          dummyEventAttached = true;
16726        }
16727      }
16728
16729      if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {
16730        el.addEventListener('mousedown', swiper.onTouchStart, false);
16731        document.addEventListener('mousemove', swiper.onTouchMove, capture);
16732        document.addEventListener('mouseup', swiper.onTouchEnd, false);
16733      }
16734    }
16735
16736    if (params.preventClicks || params.preventClicksPropagation) {
16737      el.addEventListener('click', swiper.onClick, true);
16738    }
16739
16740    if (params.cssMode) {
16741      wrapperEl.addEventListener('scroll', swiper.onScroll);
16742    }
16743
16744    if (params.updateOnWindowResize) {
16745      swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
16746    } else {
16747      swiper.on('observerUpdate', onResize, true);
16748    }
16749  }
16750
16751  function detachEvents() {
16752    var swiper = this;
16753    var document = getDocument();
16754    var params = swiper.params,
16755        touchEvents = swiper.touchEvents,
16756        el = swiper.el,
16757        wrapperEl = swiper.wrapperEl,
16758        device = swiper.device,
16759        support = swiper.support;
16760    var capture = !!params.nested;
16761
16762    if (!support.touch && support.pointerEvents) {
16763      el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
16764      document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
16765      document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
16766    } else {
16767      if (support.touch) {
16768        var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? {
16769          passive: true,
16770          capture: false
16771        } : false;
16772        el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
16773        el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
16774        el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
16775
16776        if (touchEvents.cancel) {
16777          el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
16778        }
16779      }
16780
16781      if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {
16782        el.removeEventListener('mousedown', swiper.onTouchStart, false);
16783        document.removeEventListener('mousemove', swiper.onTouchMove, capture);
16784        document.removeEventListener('mouseup', swiper.onTouchEnd, false);
16785      }
16786    }
16787
16788    if (params.preventClicks || params.preventClicksPropagation) {
16789      el.removeEventListener('click', swiper.onClick, true);
16790    }
16791
16792    if (params.cssMode) {
16793      wrapperEl.removeEventListener('scroll', swiper.onScroll);
16794    }
16795
16796    swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);
16797  }
16798
16799  var events = {
16800    attachEvents: attachEvents,
16801    detachEvents: detachEvents
16802  };
16803
16804  function setBreakpoint() {
16805    var swiper = this;
16806    var activeIndex = swiper.activeIndex,
16807        initialized = swiper.initialized,
16808        _swiper$loopedSlides = swiper.loopedSlides,
16809        loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,
16810        params = swiper.params,
16811        $el = swiper.$el;
16812    var breakpoints = params.breakpoints;
16813    if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;
16814    var breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);
16815    if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;
16816    var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
16817
16818    if (breakpointOnlyParams) {
16819      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {
16820        var paramValue = breakpointOnlyParams[param];
16821        if (typeof paramValue === 'undefined') return;
16822
16823        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
16824          breakpointOnlyParams[param] = 'auto';
16825        } else if (param === 'slidesPerView') {
16826          breakpointOnlyParams[param] = parseFloat(paramValue);
16827        } else {
16828          breakpointOnlyParams[param] = parseInt(paramValue, 10);
16829        }
16830      });
16831    }
16832
16833    var breakpointParams = breakpointOnlyParams || swiper.originalParams;
16834    var wasMultiRow = params.slidesPerColumn > 1;
16835    var isMultiRow = breakpointParams.slidesPerColumn > 1;
16836    var wasEnabled = params.enabled;
16837
16838    if (wasMultiRow && !isMultiRow) {
16839      $el.removeClass(params.containerModifierClass + "multirow " + params.containerModifierClass + "multirow-column");
16840      swiper.emitContainerClasses();
16841    } else if (!wasMultiRow && isMultiRow) {
16842      $el.addClass(params.containerModifierClass + "multirow");
16843
16844      if (breakpointParams.slidesPerColumnFill === 'column') {
16845        $el.addClass(params.containerModifierClass + "multirow-column");
16846      }
16847
16848      swiper.emitContainerClasses();
16849    }
16850
16851    var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
16852    var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
16853
16854    if (directionChanged && initialized) {
16855      swiper.changeDirection();
16856    }
16857
16858    extend(swiper.params, breakpointParams);
16859    var isEnabled = swiper.params.enabled;
16860    extend(swiper, {
16861      allowTouchMove: swiper.params.allowTouchMove,
16862      allowSlideNext: swiper.params.allowSlideNext,
16863      allowSlidePrev: swiper.params.allowSlidePrev
16864    });
16865
16866    if (wasEnabled && !isEnabled) {
16867      swiper.disable();
16868    } else if (!wasEnabled && isEnabled) {
16869      swiper.enable();
16870    }
16871
16872    swiper.currentBreakpoint = breakpoint;
16873    swiper.emit('_beforeBreakpoint', breakpointParams);
16874
16875    if (needsReLoop && initialized) {
16876      swiper.loopDestroy();
16877      swiper.loopCreate();
16878      swiper.updateSlides();
16879      swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);
16880    }
16881
16882    swiper.emit('breakpoint', breakpointParams);
16883  }
16884
16885  function getBreakpoint(breakpoints, base, containerEl) {
16886    if (base === void 0) {
16887      base = 'window';
16888    }
16889
16890    if (!breakpoints || base === 'container' && !containerEl) return undefined;
16891    var breakpoint = false;
16892    var window = getWindow();
16893    var currentWidth = base === 'window' ? window.innerWidth : containerEl.clientWidth;
16894    var currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
16895    var points = Object.keys(breakpoints).map(function (point) {
16896      if (typeof point === 'string' && point.indexOf('@') === 0) {
16897        var minRatio = parseFloat(point.substr(1));
16898        var value = currentHeight * minRatio;
16899        return {
16900          value: value,
16901          point: point
16902        };
16903      }
16904
16905      return {
16906        value: point,
16907        point: point
16908      };
16909    });
16910    points.sort(function (a, b) {
16911      return parseInt(a.value, 10) - parseInt(b.value, 10);
16912    });
16913
16914    for (var i = 0; i < points.length; i += 1) {
16915      var _points$i = points[i],
16916          point = _points$i.point,
16917          value = _points$i.value;
16918
16919      if (value <= currentWidth) {
16920        breakpoint = point;
16921      }
16922    }
16923
16924    return breakpoint || 'max';
16925  }
16926
16927  var breakpoints = {
16928    setBreakpoint: setBreakpoint,
16929    getBreakpoint: getBreakpoint
16930  };
16931
16932  function prepareClasses(entries, prefix) {
16933    var resultClasses = [];
16934    entries.forEach(function (item) {
16935      if (_typeof(item) === 'object') {
16936        Object.keys(item).forEach(function (classNames) {
16937          if (item[classNames]) {
16938            resultClasses.push(prefix + classNames);
16939          }
16940        });
16941      } else if (typeof item === 'string') {
16942        resultClasses.push(prefix + item);
16943      }
16944    });
16945    return resultClasses;
16946  }
16947
16948  function addClasses() {
16949    var swiper = this;
16950    var classNames = swiper.classNames,
16951        params = swiper.params,
16952        rtl = swiper.rtl,
16953        $el = swiper.$el,
16954        device = swiper.device,
16955        support = swiper.support;
16956    var suffixes = prepareClasses(['initialized', params.direction, {
16957      'pointer-events': support.pointerEvents && !support.touch
16958    }, {
16959      'free-mode': params.freeMode
16960    }, {
16961      'autoheight': params.autoHeight
16962    }, {
16963      'rtl': rtl
16964    }, {
16965      'multirow': params.slidesPerColumn > 1
16966    }, {
16967      'multirow-column': params.slidesPerColumn > 1 && params.slidesPerColumnFill === 'column'
16968    }, {
16969      'android': device.android
16970    }, {
16971      'ios': device.ios
16972    }, {
16973      'css-mode': params.cssMode
16974    }], params.containerModifierClass);
16975    classNames.push.apply(classNames, suffixes);
16976    $el.addClass([].concat(classNames).join(' '));
16977    swiper.emitContainerClasses();
16978  }
16979
16980  function removeClasses() {
16981    var swiper = this;
16982    var $el = swiper.$el,
16983        classNames = swiper.classNames;
16984    $el.removeClass(classNames.join(' '));
16985    swiper.emitContainerClasses();
16986  }
16987
16988  var classes = {
16989    addClasses: addClasses,
16990    removeClasses: removeClasses
16991  };
16992
16993  function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {
16994    var window = getWindow();
16995    var image;
16996
16997    function onReady() {
16998      if (callback) callback();
16999    }
17000
17001    var isPicture = $(imageEl).parent('picture')[0];
17002
17003    if (!isPicture && (!imageEl.complete || !checkForComplete)) {
17004      if (src) {
17005        image = new window.Image();
17006        image.onload = onReady;
17007        image.onerror = onReady;
17008
17009        if (sizes) {
17010          image.sizes = sizes;
17011        }
17012
17013        if (srcset) {
17014          image.srcset = srcset;
17015        }
17016
17017        if (src) {
17018          image.src = src;
17019        }
17020      } else {
17021        onReady();
17022      }
17023    } else {
17024      onReady();
17025    }
17026  }
17027
17028  function preloadImages() {
17029    var swiper = this;
17030    swiper.imagesToLoad = swiper.$el.find('img');
17031
17032    function onReady() {
17033      if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
17034      if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
17035
17036      if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
17037        if (swiper.params.updateOnImagesReady) swiper.update();
17038        swiper.emit('imagesReady');
17039      }
17040    }
17041
17042    for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
17043      var imageEl = swiper.imagesToLoad[i];
17044      swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);
17045    }
17046  }
17047
17048  var images = {
17049    loadImage: loadImage,
17050    preloadImages: preloadImages
17051  };
17052
17053  function checkOverflow() {
17054    var swiper = this;
17055    var params = swiper.params;
17056    var wasLocked = swiper.isLocked;
17057    var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;
17058
17059    if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
17060      swiper.isLocked = lastSlidePosition <= swiper.size;
17061    } else {
17062      swiper.isLocked = swiper.snapGrid.length === 1;
17063    }
17064
17065    swiper.allowSlideNext = !swiper.isLocked;
17066    swiper.allowSlidePrev = !swiper.isLocked;
17067    if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
17068
17069    if (wasLocked && wasLocked !== swiper.isLocked) {
17070      swiper.isEnd = false;
17071      if (swiper.navigation) swiper.navigation.update();
17072    }
17073  }
17074
17075  var checkOverflow$1 = {
17076    checkOverflow: checkOverflow
17077  };
17078  var defaults = {
17079    init: true,
17080    direction: 'horizontal',
17081    touchEventsTarget: 'container',
17082    initialSlide: 0,
17083    speed: 300,
17084    cssMode: false,
17085    updateOnWindowResize: true,
17086    resizeObserver: false,
17087    nested: false,
17088    createElements: false,
17089    enabled: true,
17090    width: null,
17091    height: null,
17092    preventInteractionOnTransition: false,
17093    userAgent: null,
17094    url: null,
17095    edgeSwipeDetection: false,
17096    edgeSwipeThreshold: 20,
17097    freeMode: false,
17098    freeModeMomentum: true,
17099    freeModeMomentumRatio: 1,
17100    freeModeMomentumBounce: true,
17101    freeModeMomentumBounceRatio: 1,
17102    freeModeMomentumVelocityRatio: 1,
17103    freeModeSticky: false,
17104    freeModeMinimumVelocity: 0.02,
17105    autoHeight: false,
17106    setWrapperSize: false,
17107    virtualTranslate: false,
17108    effect: 'slide',
17109    breakpoints: undefined,
17110    breakpointsBase: 'window',
17111    spaceBetween: 0,
17112    slidesPerView: 1,
17113    slidesPerColumn: 1,
17114    slidesPerColumnFill: 'column',
17115    slidesPerGroup: 1,
17116    slidesPerGroupSkip: 0,
17117    centeredSlides: false,
17118    centeredSlidesBounds: false,
17119    slidesOffsetBefore: 0,
17120    slidesOffsetAfter: 0,
17121    normalizeSlideIndex: true,
17122    centerInsufficientSlides: false,
17123    watchOverflow: false,
17124    roundLengths: false,
17125    touchRatio: 1,
17126    touchAngle: 45,
17127    simulateTouch: true,
17128    shortSwipes: true,
17129    longSwipes: true,
17130    longSwipesRatio: 0.5,
17131    longSwipesMs: 300,
17132    followFinger: true,
17133    allowTouchMove: true,
17134    threshold: 0,
17135    touchMoveStopPropagation: false,
17136    touchStartPreventDefault: true,
17137    touchStartForcePreventDefault: false,
17138    touchReleaseOnEdges: false,
17139    uniqueNavElements: true,
17140    resistance: true,
17141    resistanceRatio: 0.85,
17142    watchSlidesProgress: false,
17143    watchSlidesVisibility: false,
17144    grabCursor: false,
17145    preventClicks: true,
17146    preventClicksPropagation: true,
17147    slideToClickedSlide: false,
17148    preloadImages: true,
17149    updateOnImagesReady: true,
17150    loop: false,
17151    loopAdditionalSlides: 0,
17152    loopedSlides: null,
17153    loopFillGroupWithBlank: false,
17154    loopPreventsSlide: true,
17155    allowSlidePrev: true,
17156    allowSlideNext: true,
17157    swipeHandler: null,
17158    noSwiping: true,
17159    noSwipingClass: 'swiper-no-swiping',
17160    noSwipingSelector: null,
17161    passiveListeners: true,
17162    containerModifierClass: 'swiper-container-',
17163    slideClass: 'swiper-slide',
17164    slideBlankClass: 'swiper-slide-invisible-blank',
17165    slideActiveClass: 'swiper-slide-active',
17166    slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
17167    slideVisibleClass: 'swiper-slide-visible',
17168    slideDuplicateClass: 'swiper-slide-duplicate',
17169    slideNextClass: 'swiper-slide-next',
17170    slideDuplicateNextClass: 'swiper-slide-duplicate-next',
17171    slidePrevClass: 'swiper-slide-prev',
17172    slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
17173    wrapperClass: 'swiper-wrapper',
17174    runCallbacksOnInit: true,
17175    _emitClasses: false
17176  };
17177  var prototypes = {
17178    modular: modular,
17179    eventsEmitter: eventsEmitter,
17180    update: update,
17181    translate: translate,
17182    transition: transition,
17183    slide: slide,
17184    loop: loop,
17185    grabCursor: grabCursor,
17186    manipulation: manipulation,
17187    events: events,
17188    breakpoints: breakpoints,
17189    checkOverflow: checkOverflow$1,
17190    classes: classes,
17191    images: images
17192  };
17193  var extendedDefaults = {};
17194
17195  var Swiper = function () {
17196    function Swiper() {
17197      var el;
17198      var params;
17199
17200      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
17201        args[_key] = arguments[_key];
17202      }
17203
17204      if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {
17205        params = args[0];
17206      } else {
17207        el = args[0];
17208        params = args[1];
17209      }
17210
17211      if (!params) params = {};
17212      params = extend({}, params);
17213      if (el && !params.el) params.el = el;
17214
17215      if (params.el && $(params.el).length > 1) {
17216        var swipers = [];
17217        $(params.el).each(function (containerEl) {
17218          var newParams = extend({}, params, {
17219            el: containerEl
17220          });
17221          swipers.push(new Swiper(newParams));
17222        });
17223        return swipers;
17224      }
17225
17226      var swiper = this;
17227      swiper.__swiper__ = true;
17228      swiper.support = getSupport();
17229      swiper.device = getDevice({
17230        userAgent: params.userAgent
17231      });
17232      swiper.browser = getBrowser();
17233      swiper.eventsListeners = {};
17234      swiper.eventsAnyListeners = [];
17235
17236      if (typeof swiper.modules === 'undefined') {
17237        swiper.modules = {};
17238      }
17239
17240      Object.keys(swiper.modules).forEach(function (moduleName) {
17241        var module = swiper.modules[moduleName];
17242
17243        if (module.params) {
17244          var moduleParamName = Object.keys(module.params)[0];
17245          var moduleParams = module.params[moduleParamName];
17246          if (_typeof(moduleParams) !== 'object' || moduleParams === null) return;
17247
17248          if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {
17249            params[moduleParamName] = {
17250              auto: true
17251            };
17252          }
17253
17254          if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
17255
17256          if (params[moduleParamName] === true) {
17257            params[moduleParamName] = {
17258              enabled: true
17259            };
17260          }
17261
17262          if (_typeof(params[moduleParamName]) === 'object' && !('enabled' in params[moduleParamName])) {
17263            params[moduleParamName].enabled = true;
17264          }
17265
17266          if (!params[moduleParamName]) params[moduleParamName] = {
17267            enabled: false
17268          };
17269        }
17270      });
17271      var swiperParams = extend({}, defaults);
17272      swiper.useParams(swiperParams);
17273      swiper.params = extend({}, swiperParams, extendedDefaults, params);
17274      swiper.originalParams = extend({}, swiper.params);
17275      swiper.passedParams = extend({}, params);
17276
17277      if (swiper.params && swiper.params.on) {
17278        Object.keys(swiper.params.on).forEach(function (eventName) {
17279          swiper.on(eventName, swiper.params.on[eventName]);
17280        });
17281      }
17282
17283      if (swiper.params && swiper.params.onAny) {
17284        swiper.onAny(swiper.params.onAny);
17285      }
17286
17287      swiper.$ = $;
17288      extend(swiper, {
17289        enabled: swiper.params.enabled,
17290        el: el,
17291        classNames: [],
17292        slides: $(),
17293        slidesGrid: [],
17294        snapGrid: [],
17295        slidesSizesGrid: [],
17296        isHorizontal: function isHorizontal() {
17297          return swiper.params.direction === 'horizontal';
17298        },
17299        isVertical: function isVertical() {
17300          return swiper.params.direction === 'vertical';
17301        },
17302        activeIndex: 0,
17303        realIndex: 0,
17304        isBeginning: true,
17305        isEnd: false,
17306        translate: 0,
17307        previousTranslate: 0,
17308        progress: 0,
17309        velocity: 0,
17310        animating: false,
17311        allowSlideNext: swiper.params.allowSlideNext,
17312        allowSlidePrev: swiper.params.allowSlidePrev,
17313        touchEvents: function touchEvents() {
17314          var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
17315          var desktop = ['mousedown', 'mousemove', 'mouseup'];
17316
17317          if (swiper.support.pointerEvents) {
17318            desktop = ['pointerdown', 'pointermove', 'pointerup'];
17319          }
17320
17321          swiper.touchEventsTouch = {
17322            start: touch[0],
17323            move: touch[1],
17324            end: touch[2],
17325            cancel: touch[3]
17326          };
17327          swiper.touchEventsDesktop = {
17328            start: desktop[0],
17329            move: desktop[1],
17330            end: desktop[2]
17331          };
17332          return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
17333        }(),
17334        touchEventsData: {
17335          isTouched: undefined,
17336          isMoved: undefined,
17337          allowTouchCallbacks: undefined,
17338          touchStartTime: undefined,
17339          isScrolling: undefined,
17340          currentTranslate: undefined,
17341          startTranslate: undefined,
17342          allowThresholdMove: undefined,
17343          formElements: 'input, select, option, textarea, button, video, label',
17344          lastClickTime: now(),
17345          clickTimeout: undefined,
17346          velocities: [],
17347          allowMomentumBounce: undefined,
17348          isTouchEvent: undefined,
17349          startMoving: undefined
17350        },
17351        allowClick: true,
17352        allowTouchMove: swiper.params.allowTouchMove,
17353        touches: {
17354          startX: 0,
17355          startY: 0,
17356          currentX: 0,
17357          currentY: 0,
17358          diff: 0
17359        },
17360        imagesToLoad: [],
17361        imagesLoaded: 0
17362      });
17363      swiper.useModules();
17364      swiper.emit('_swiper');
17365
17366      if (swiper.params.init) {
17367        swiper.init();
17368      }
17369
17370      return swiper;
17371    }
17372
17373    var _proto = Swiper.prototype;
17374
17375    _proto.enable = function enable() {
17376      var swiper = this;
17377      if (swiper.enabled) return;
17378      swiper.enabled = true;
17379
17380      if (swiper.params.grabCursor) {
17381        swiper.setGrabCursor();
17382      }
17383
17384      swiper.emit('enable');
17385    };
17386
17387    _proto.disable = function disable() {
17388      var swiper = this;
17389      if (!swiper.enabled) return;
17390      swiper.enabled = false;
17391
17392      if (swiper.params.grabCursor) {
17393        swiper.unsetGrabCursor();
17394      }
17395
17396      swiper.emit('disable');
17397    };
17398
17399    _proto.setProgress = function setProgress(progress, speed) {
17400      var swiper = this;
17401      progress = Math.min(Math.max(progress, 0), 1);
17402      var min = swiper.minTranslate();
17403      var max = swiper.maxTranslate();
17404      var current = (max - min) * progress + min;
17405      swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);
17406      swiper.updateActiveIndex();
17407      swiper.updateSlidesClasses();
17408    };
17409
17410    _proto.emitContainerClasses = function emitContainerClasses() {
17411      var swiper = this;
17412      if (!swiper.params._emitClasses || !swiper.el) return;
17413      var classes = swiper.el.className.split(' ').filter(function (className) {
17414        return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
17415      });
17416      swiper.emit('_containerClasses', classes.join(' '));
17417    };
17418
17419    _proto.getSlideClasses = function getSlideClasses(slideEl) {
17420      var swiper = this;
17421      return slideEl.className.split(' ').filter(function (className) {
17422        return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;
17423      }).join(' ');
17424    };
17425
17426    _proto.emitSlidesClasses = function emitSlidesClasses() {
17427      var swiper = this;
17428      if (!swiper.params._emitClasses || !swiper.el) return;
17429      var updates = [];
17430      swiper.slides.each(function (slideEl) {
17431        var classNames = swiper.getSlideClasses(slideEl);
17432        updates.push({
17433          slideEl: slideEl,
17434          classNames: classNames
17435        });
17436        swiper.emit('_slideClass', slideEl, classNames);
17437      });
17438      swiper.emit('_slideClasses', updates);
17439    };
17440
17441    _proto.slidesPerViewDynamic = function slidesPerViewDynamic() {
17442      var swiper = this;
17443      var params = swiper.params,
17444          slides = swiper.slides,
17445          slidesGrid = swiper.slidesGrid,
17446          swiperSize = swiper.size,
17447          activeIndex = swiper.activeIndex;
17448      var spv = 1;
17449
17450      if (params.centeredSlides) {
17451        var slideSize = slides[activeIndex].swiperSlideSize;
17452        var breakLoop;
17453
17454        for (var i = activeIndex + 1; i < slides.length; i += 1) {
17455          if (slides[i] && !breakLoop) {
17456            slideSize += slides[i].swiperSlideSize;
17457            spv += 1;
17458            if (slideSize > swiperSize) breakLoop = true;
17459          }
17460        }
17461
17462        for (var _i = activeIndex - 1; _i >= 0; _i -= 1) {
17463          if (slides[_i] && !breakLoop) {
17464            slideSize += slides[_i].swiperSlideSize;
17465            spv += 1;
17466            if (slideSize > swiperSize) breakLoop = true;
17467          }
17468        }
17469      } else {
17470        for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) {
17471          if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) {
17472            spv += 1;
17473          }
17474        }
17475      }
17476
17477      return spv;
17478    };
17479
17480    _proto.update = function update() {
17481      var swiper = this;
17482      if (!swiper || swiper.destroyed) return;
17483      var snapGrid = swiper.snapGrid,
17484          params = swiper.params;
17485
17486      if (params.breakpoints) {
17487        swiper.setBreakpoint();
17488      }
17489
17490      swiper.updateSize();
17491      swiper.updateSlides();
17492      swiper.updateProgress();
17493      swiper.updateSlidesClasses();
17494
17495      function setTranslate() {
17496        var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
17497        var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
17498        swiper.setTranslate(newTranslate);
17499        swiper.updateActiveIndex();
17500        swiper.updateSlidesClasses();
17501      }
17502
17503      var translated;
17504
17505      if (swiper.params.freeMode) {
17506        setTranslate();
17507
17508        if (swiper.params.autoHeight) {
17509          swiper.updateAutoHeight();
17510        }
17511      } else {
17512        if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
17513          translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
17514        } else {
17515          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
17516        }
17517
17518        if (!translated) {
17519          setTranslate();
17520        }
17521      }
17522
17523      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
17524        swiper.checkOverflow();
17525      }
17526
17527      swiper.emit('update');
17528    };
17529
17530    _proto.changeDirection = function changeDirection(newDirection, needUpdate) {
17531      if (needUpdate === void 0) {
17532        needUpdate = true;
17533      }
17534
17535      var swiper = this;
17536      var currentDirection = swiper.params.direction;
17537
17538      if (!newDirection) {
17539        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
17540      }
17541
17542      if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
17543        return swiper;
17544      }
17545
17546      swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection);
17547      swiper.emitContainerClasses();
17548      swiper.params.direction = newDirection;
17549      swiper.slides.each(function (slideEl) {
17550        if (newDirection === 'vertical') {
17551          slideEl.style.width = '';
17552        } else {
17553          slideEl.style.height = '';
17554        }
17555      });
17556      swiper.emit('changeDirection');
17557      if (needUpdate) swiper.update();
17558      return swiper;
17559    };
17560
17561    _proto.mount = function mount(el) {
17562      var swiper = this;
17563      if (swiper.mounted) return true;
17564      var $el = $(el || swiper.params.el);
17565      el = $el[0];
17566
17567      if (!el) {
17568        return false;
17569      }
17570
17571      el.swiper = swiper;
17572
17573      var getWrapper = function getWrapper() {
17574        if (el && el.shadowRoot && el.shadowRoot.querySelector) {
17575          var res = $(el.shadowRoot.querySelector("." + swiper.params.wrapperClass));
17576
17577          res.children = function (options) {
17578            return $el.children(options);
17579          };
17580
17581          return res;
17582        }
17583
17584        return $el.children("." + swiper.params.wrapperClass);
17585      };
17586
17587      var $wrapperEl = getWrapper();
17588
17589      if ($wrapperEl.length === 0 && swiper.params.createElements) {
17590        var document = getDocument();
17591        var wrapper = document.createElement('div');
17592        $wrapperEl = $(wrapper);
17593        wrapper.className = swiper.params.wrapperClass;
17594        $el.append(wrapper);
17595        $el.children("." + swiper.params.slideClass).each(function (slideEl) {
17596          $wrapperEl.append(slideEl);
17597        });
17598      }
17599
17600      extend(swiper, {
17601        $el: $el,
17602        el: el,
17603        $wrapperEl: $wrapperEl,
17604        wrapperEl: $wrapperEl[0],
17605        mounted: true,
17606        rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',
17607        rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
17608        wrongRTL: $wrapperEl.css('display') === '-webkit-box'
17609      });
17610      return true;
17611    };
17612
17613    _proto.init = function init(el) {
17614      var swiper = this;
17615      if (swiper.initialized) return swiper;
17616      var mounted = swiper.mount(el);
17617      if (mounted === false) return swiper;
17618      swiper.emit('beforeInit');
17619
17620      if (swiper.params.breakpoints) {
17621        swiper.setBreakpoint();
17622      }
17623
17624      swiper.addClasses();
17625
17626      if (swiper.params.loop) {
17627        swiper.loopCreate();
17628      }
17629
17630      swiper.updateSize();
17631      swiper.updateSlides();
17632
17633      if (swiper.params.watchOverflow) {
17634        swiper.checkOverflow();
17635      }
17636
17637      if (swiper.params.grabCursor && swiper.enabled) {
17638        swiper.setGrabCursor();
17639      }
17640
17641      if (swiper.params.preloadImages) {
17642        swiper.preloadImages();
17643      }
17644
17645      if (swiper.params.loop) {
17646        swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);
17647      } else {
17648        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
17649      }
17650
17651      swiper.attachEvents();
17652      swiper.initialized = true;
17653      swiper.emit('init');
17654      swiper.emit('afterInit');
17655      return swiper;
17656    };
17657
17658    _proto.destroy = function destroy(deleteInstance, cleanStyles) {
17659      if (deleteInstance === void 0) {
17660        deleteInstance = true;
17661      }
17662
17663      if (cleanStyles === void 0) {
17664        cleanStyles = true;
17665      }
17666
17667      var swiper = this;
17668      var params = swiper.params,
17669          $el = swiper.$el,
17670          $wrapperEl = swiper.$wrapperEl,
17671          slides = swiper.slides;
17672
17673      if (typeof swiper.params === 'undefined' || swiper.destroyed) {
17674        return null;
17675      }
17676
17677      swiper.emit('beforeDestroy');
17678      swiper.initialized = false;
17679      swiper.detachEvents();
17680
17681      if (params.loop) {
17682        swiper.loopDestroy();
17683      }
17684
17685      if (cleanStyles) {
17686        swiper.removeClasses();
17687        $el.removeAttr('style');
17688        $wrapperEl.removeAttr('style');
17689
17690        if (slides && slides.length) {
17691          slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');
17692        }
17693      }
17694
17695      swiper.emit('destroy');
17696      Object.keys(swiper.eventsListeners).forEach(function (eventName) {
17697        swiper.off(eventName);
17698      });
17699
17700      if (deleteInstance !== false) {
17701        swiper.$el[0].swiper = null;
17702        deleteProps(swiper);
17703      }
17704
17705      swiper.destroyed = true;
17706      return null;
17707    };
17708
17709    Swiper.extendDefaults = function extendDefaults(newDefaults) {
17710      extend(extendedDefaults, newDefaults);
17711    };
17712
17713    Swiper.installModule = function installModule(module) {
17714      if (!Swiper.prototype.modules) Swiper.prototype.modules = {};
17715      var name = module.name || Object.keys(Swiper.prototype.modules).length + "_" + now();
17716      Swiper.prototype.modules[name] = module;
17717    };
17718
17719    Swiper.use = function use(module) {
17720      if (Array.isArray(module)) {
17721        module.forEach(function (m) {
17722          return Swiper.installModule(m);
17723        });
17724        return Swiper;
17725      }
17726
17727      Swiper.installModule(module);
17728      return Swiper;
17729    };
17730
17731    _createClass(Swiper, null, [{
17732      key: "extendedDefaults",
17733      get: function get() {
17734        return extendedDefaults;
17735      }
17736    }, {
17737      key: "defaults",
17738      get: function get() {
17739        return defaults;
17740      }
17741    }]);
17742
17743    return Swiper;
17744  }();
17745
17746  Object.keys(prototypes).forEach(function (prototypeGroup) {
17747    Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
17748      Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
17749    });
17750  });
17751  Swiper.use([Resize, Observer$1]);
17752  var Virtual = {
17753    update: function update(force) {
17754      var swiper = this;
17755      var _swiper$params = swiper.params,
17756          slidesPerView = _swiper$params.slidesPerView,
17757          slidesPerGroup = _swiper$params.slidesPerGroup,
17758          centeredSlides = _swiper$params.centeredSlides;
17759      var _swiper$params$virtua = swiper.params.virtual,
17760          addSlidesBefore = _swiper$params$virtua.addSlidesBefore,
17761          addSlidesAfter = _swiper$params$virtua.addSlidesAfter;
17762      var _swiper$virtual = swiper.virtual,
17763          previousFrom = _swiper$virtual.from,
17764          previousTo = _swiper$virtual.to,
17765          slides = _swiper$virtual.slides,
17766          previousSlidesGrid = _swiper$virtual.slidesGrid,
17767          renderSlide = _swiper$virtual.renderSlide,
17768          previousOffset = _swiper$virtual.offset;
17769      swiper.updateActiveIndex();
17770      var activeIndex = swiper.activeIndex || 0;
17771      var offsetProp;
17772      if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
17773      var slidesAfter;
17774      var slidesBefore;
17775
17776      if (centeredSlides) {
17777        slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
17778        slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
17779      } else {
17780        slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
17781        slidesBefore = slidesPerGroup + addSlidesBefore;
17782      }
17783
17784      var from = Math.max((activeIndex || 0) - slidesBefore, 0);
17785      var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
17786      var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
17787      extend(swiper.virtual, {
17788        from: from,
17789        to: to,
17790        offset: offset,
17791        slidesGrid: swiper.slidesGrid
17792      });
17793
17794      function onRendered() {
17795        swiper.updateSlides();
17796        swiper.updateProgress();
17797        swiper.updateSlidesClasses();
17798
17799        if (swiper.lazy && swiper.params.lazy.enabled) {
17800          swiper.lazy.load();
17801        }
17802      }
17803
17804      if (previousFrom === from && previousTo === to && !force) {
17805        if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
17806          swiper.slides.css(offsetProp, offset + "px");
17807        }
17808
17809        swiper.updateProgress();
17810        return;
17811      }
17812
17813      if (swiper.params.virtual.renderExternal) {
17814        swiper.params.virtual.renderExternal.call(swiper, {
17815          offset: offset,
17816          from: from,
17817          to: to,
17818          slides: function getSlides() {
17819            var slidesToRender = [];
17820
17821            for (var i = from; i <= to; i += 1) {
17822              slidesToRender.push(slides[i]);
17823            }
17824
17825            return slidesToRender;
17826          }()
17827        });
17828
17829        if (swiper.params.virtual.renderExternalUpdate) {
17830          onRendered();
17831        }
17832
17833        return;
17834      }
17835
17836      var prependIndexes = [];
17837      var appendIndexes = [];
17838
17839      if (force) {
17840        swiper.$wrapperEl.find("." + swiper.params.slideClass).remove();
17841      } else {
17842        for (var i = previousFrom; i <= previousTo; i += 1) {
17843          if (i < from || i > to) {
17844            swiper.$wrapperEl.find("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + i + "\"]").remove();
17845          }
17846        }
17847      }
17848
17849      for (var _i = 0; _i < slides.length; _i += 1) {
17850        if (_i >= from && _i <= to) {
17851          if (typeof previousTo === 'undefined' || force) {
17852            appendIndexes.push(_i);
17853          } else {
17854            if (_i > previousTo) appendIndexes.push(_i);
17855            if (_i < previousFrom) prependIndexes.push(_i);
17856          }
17857        }
17858      }
17859
17860      appendIndexes.forEach(function (index) {
17861        swiper.$wrapperEl.append(renderSlide(slides[index], index));
17862      });
17863      prependIndexes.sort(function (a, b) {
17864        return b - a;
17865      }
17865).forEach(function (index) {
17866        swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
17867      });
17868      swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + "px");
17869      onRendered();
17870    },
17871    renderSlide: function renderSlide(slide, index) {
17872      var swiper = this;
17873      var params = swiper.params.virtual;
17874
17875      if (params.cache && swiper.virtual.cache[index]) {
17876        return swiper.virtual.cache[index];
17877      }
17878
17879      var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $("<div class=\"" + swiper.params.slideClass + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>");
17880      if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
17881      if (params.cache) swiper.virtual.cache[index] = $slideEl;
17882      return $slideEl;
17883    },
17884    appendSlide: function appendSlide(slides) {
17885      var swiper = this;
17886
17887      if (_typeof(slides) === 'object' && 'length' in slides) {
17888        for (var i = 0; i < slides.length; i += 1) {
17889          if (slides[i]) swiper.virtual.slides.push(slides[i]);
17890        }
17891      } else {
17892        swiper.virtual.slides.push(slides);
17893      }
17894
17895      swiper.virtual.update(true);
17896    },
17897    prependSlide: function prependSlide(slides) {
17898      var swiper = this;
17899      var activeIndex = swiper.activeIndex;
17900      var newActiveIndex = activeIndex + 1;
17901      var numberOfNewSlides = 1;
17902
17903      if (Array.isArray(slides)) {
17904        for (var i = 0; i < slides.length; i += 1) {
17905          if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
17906        }
17907
17908        newActiveIndex = activeIndex + slides.length;
17909        numberOfNewSlides = slides.length;
17910      } else {
17911        swiper.virtual.slides.unshift(slides);
17912      }
17913
17914      if (swiper.params.virtual.cache) {
17915        var cache = swiper.virtual.cache;
17916        var newCache = {};
17917        Object.keys(cache).forEach(function (cachedIndex) {
17918          var $cachedEl = cache[cachedIndex];
17919          var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
17920
17921          if (cachedElIndex) {
17922            $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
17923          }
17924
17925          newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
17926        });
17927        swiper.virtual.cache = newCache;
17928      }
17929
17930      swiper.virtual.update(true);
17931      swiper.slideTo(newActiveIndex, 0);
17932    },
17933    removeSlide: function removeSlide(slidesIndexes) {
17934      var swiper = this;
17935      if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
17936      var activeIndex = swiper.activeIndex;
17937
17938      if (Array.isArray(slidesIndexes)) {
17939        for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {
17940          swiper.virtual.slides.splice(slidesIndexes[i], 1);
17941
17942          if (swiper.params.virtual.cache) {
17943            delete swiper.virtual.cache[slidesIndexes[i]];
17944          }
17945
17946          if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
17947          activeIndex = Math.max(activeIndex, 0);
17948        }
17949      } else {
17950        swiper.virtual.slides.splice(slidesIndexes, 1);
17951
17952        if (swiper.params.virtual.cache) {
17953          delete swiper.virtual.cache[slidesIndexes];
17954        }
17955
17956        if (slidesIndexes < activeIndex) activeIndex -= 1;
17957        activeIndex = Math.max(activeIndex, 0);
17958      }
17959
17960      swiper.virtual.update(true);
17961      swiper.slideTo(activeIndex, 0);
17962    },
17963    removeAllSlides: function removeAllSlides() {
17964      var swiper = this;
17965      swiper.virtual.slides = [];
17966
17967      if (swiper.params.virtual.cache) {
17968        swiper.virtual.cache = {};
17969      }
17970
17971      swiper.virtual.update(true);
17972      swiper.slideTo(0, 0);
17973    }
17974  };
17975  var Virtual$1 = {
17976    name: 'virtual',
17977    params: {
17978      virtual: {
17979        enabled: false,
17980        slides: [],
17981        cache: true,
17982        renderSlide: null,
17983        renderExternal: null,
17984        renderExternalUpdate: true,
17985        addSlidesBefore: 0,
17986        addSlidesAfter: 0
17987      }
17988    },
17989    create: function create() {
17990      var swiper = this;
17991      bindModuleMethods(swiper, {
17992        virtual: _extends({}, Virtual, {
17993          slides: swiper.params.virtual.slides,
17994          cache: {}
17995        })
17996      });
17997    },
17998    on: {
17999      beforeInit: function beforeInit(swiper) {
18000        if (!swiper.params.virtual.enabled) return;
18001        swiper.classNames.push(swiper.params.containerModifierClass + "virtual");
18002        var overwriteParams = {
18003          watchSlidesProgress: true
18004        };
18005        extend(swiper.params, overwriteParams);
18006        extend(swiper.originalParams, overwriteParams);
18007
18008        if (!swiper.params.initialSlide) {
18009          swiper.virtual.update();
18010        }
18011      },
18012      setTranslate: function setTranslate(swiper) {
18013        if (!swiper.params.virtual.enabled) return;
18014        swiper.virtual.update();
18015      }
18016    }
18017  };
18018  var Keyboard = {
18019    handle: function handle(event) {
18020      var swiper = this;
18021      if (!swiper.enabled) return;
18022      var window = getWindow();
18023      var document = getDocument();
18024      var rtl = swiper.rtlTranslate;
18025      var e = event;
18026      if (e.originalEvent) e = e.originalEvent;
18027      var kc = e.keyCode || e.charCode;
18028      var pageUpDown = swiper.params.keyboard.pageUpDown;
18029      var isPageUp = pageUpDown && kc === 33;
18030      var isPageDown = pageUpDown && kc === 34;
18031      var isArrowLeft = kc === 37;
18032      var isArrowRight = kc === 39;
18033      var isArrowUp = kc === 38;
18034      var isArrowDown = kc === 40;
18035
18036      if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {
18037        return false;
18038      }
18039
18040      if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {
18041        return false;
18042      }
18043
18044      if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
18045        return undefined;
18046      }
18047
18048      if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
18049        return undefined;
18050      }
18051
18052      if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
18053        var inView = false;
18054
18055        if (swiper.$el.parents("." + swiper.params.slideClass).length > 0 && swiper.$el.parents("." + swiper.params.slideActiveClass).length === 0) {
18056          return undefined;
18057        }
18058
18059        var $el = swiper.$el;
18060        var swiperWidth = $el[0].clientWidth;
18061        var swiperHeight = $el[0].clientHeight;
18062        var windowWidth = window.innerWidth;
18063        var windowHeight = window.innerHeight;
18064        var swiperOffset = swiper.$el.offset();
18065        if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
18066        var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];
18067
18068        for (var i = 0; i < swiperCoord.length; i += 1) {
18069          var point = swiperCoord[i];
18070
18071          if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
18072            if (point[0] === 0 && point[1] === 0) continue;
18073            inView = true;
18074          }
18075        }
18076
18077        if (!inView) return undefined;
18078      }
18079
18080      if (swiper.isHorizontal()) {
18081        if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
18082          if (e.preventDefault) e.preventDefault();else e.returnValue = false;
18083        }
18084
18085        if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();
18086        if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();
18087      } else {
18088        if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
18089          if (e.preventDefault) e.preventDefault();else e.returnValue = false;
18090        }
18091
18092        if (isPageDown || isArrowDown) swiper.slideNext();
18093        if (isPageUp || isArrowUp) swiper.slidePrev();
18094      }
18095
18096      swiper.emit('keyPress', kc);
18097      return undefined;
18098    },
18099    enable: function enable() {
18100      var swiper = this;
18101      var document = getDocument();
18102      if (swiper.keyboard.enabled) return;
18103      $(document).on('keydown', swiper.keyboard.handle);
18104      swiper.keyboard.enabled = true;
18105    },
18106    disable: function disable() {
18107      var swiper = this;
18108      var document = getDocument();
18109      if (!swiper.keyboard.enabled) return;
18110      $(document).off('keydown', swiper.keyboard.handle);
18111      swiper.keyboard.enabled = false;
18112    }
18113  };
18114  var Keyboard$1 = {
18115    name: 'keyboard',
18116    params: {
18117      keyboard: {
18118        enabled: false,
18119        onlyInViewport: true,
18120        pageUpDown: true
18121      }
18122    },
18123    create: function create() {
18124      var swiper = this;
18125      bindModuleMethods(swiper, {
18126        keyboard: _extends({
18127          enabled: false
18128        }, Keyboard)
18129      });
18130    },
18131    on: {
18132      init: function init(swiper) {
18133        if (swiper.params.keyboard.enabled) {
18134          swiper.keyboard.enable();
18135        }
18136      },
18137      destroy: function destroy(swiper) {
18138        if (swiper.keyboard.enabled) {
18139          swiper.keyboard.disable();
18140        }
18141      }
18142    }
18143  };
18144
18145  function isEventSupported() {
18146    var document = getDocument();
18147    var eventName = 'onwheel';
18148    var isSupported = (eventName in document);
18149
18150    if (!isSupported) {
18151      var element = document.createElement('div');
18152      element.setAttribute(eventName, 'return;');
18153      isSupported = typeof element[eventName] === 'function';
18154    }
18155
18156    if (!isSupported && document.implementation && document.implementation.hasFeature && document.implementation.hasFeature('', '') !== true) {
18157      isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
18158    }
18159
18160    return isSupported;
18161  }
18162
18163  var Mousewheel = {
18164    lastScrollTime: now(),
18165    lastEventBeforeSnap: undefined,
18166    recentWheelEvents: [],
18167    event: function event() {
18168      var window = getWindow();
18169      if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
18170      return isEventSupported() ? 'wheel' : 'mousewheel';
18171    },
18172    normalize: function normalize(e) {
18173      var PIXEL_STEP = 10;
18174      var LINE_HEIGHT = 40;
18175      var PAGE_HEIGHT = 800;
18176      var sX = 0;
18177      var sY = 0;
18178      var pX = 0;
18179      var pY = 0;
18180
18181      if ('detail' in e) {
18182        sY = e.detail;
18183      }
18184
18185      if ('wheelDelta' in e) {
18186        sY = -e.wheelDelta / 120;
18187      }
18188
18189      if ('wheelDeltaY' in e) {
18190        sY = -e.wheelDeltaY / 120;
18191      }
18192
18193      if ('wheelDeltaX' in e) {
18194        sX = -e.wheelDeltaX / 120;
18195      }
18196
18197      if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
18198        sX = sY;
18199        sY = 0;
18200      }
18201
18202      pX = sX * PIXEL_STEP;
18203      pY = sY * PIXEL_STEP;
18204
18205      if ('deltaY' in e) {
18206        pY = e.deltaY;
18207      }
18208
18209      if ('deltaX' in e) {
18210        pX = e.deltaX;
18211      }
18212
18213      if (e.shiftKey && !pX) {
18214        pX = pY;
18215        pY = 0;
18216      }
18217
18218      if ((pX || pY) && e.deltaMode) {
18219        if (e.deltaMode === 1) {
18220          pX *= LINE_HEIGHT;
18221          pY *= LINE_HEIGHT;
18222        } else {
18223          pX *= PAGE_HEIGHT;
18224          pY *= PAGE_HEIGHT;
18225        }
18226      }
18227
18228      if (pX && !sX) {
18229        sX = pX < 1 ? -1 : 1;
18230      }
18231
18232      if (pY && !sY) {
18233        sY = pY < 1 ? -1 : 1;
18234      }
18235
18236      return {
18237        spinX: sX,
18238        spinY: sY,
18239        pixelX: pX,
18240        pixelY: pY
18241      };
18242    },
18243    handleMouseEnter: function handleMouseEnter() {
18244      var swiper = this;
18245      if (!swiper.enabled) return;
18246      swiper.mouseEntered = true;
18247    },
18248    handleMouseLeave: function handleMouseLeave() {
18249      var swiper = this;
18250      if (!swiper.enabled) return;
18251      swiper.mouseEntered = false;
18252    },
18253    handle: function handle(event) {
18254      var e = event;
18255      var disableParentSwiper = true;
18256      var swiper = this;
18257      if (!swiper.enabled) return;
18258      var params = swiper.params.mousewheel;
18259
18260      if (swiper.params.cssMode) {
18261        e.preventDefault();
18262      }
18263
18264      var target = swiper.$el;
18265
18266      if (swiper.params.mousewheel.eventsTarget !== 'container') {
18267        target = $(swiper.params.mousewheel.eventsTarget);
18268      }
18269
18270      if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
18271      if (e.originalEvent) e = e.originalEvent;
18272      var delta = 0;
18273      var rtlFactor = swiper.rtlTranslate ? -1 : 1;
18274      var data = Mousewheel.normalize(e);
18275
18276      if (params.forceToAxis) {
18277        if (swiper.isHorizontal()) {
18278          if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;
18279        } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;
18280      } else {
18281        delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
18282      }
18283
18284      if (delta === 0) return true;
18285      if (params.invert) delta = -delta;
18286      var positions = swiper.getTranslate() + delta * params.sensitivity;
18287      if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();
18288      if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();
18289      disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());
18290      if (disableParentSwiper && swiper.params.nested) e.stopPropagation();
18291
18292      if (!swiper.params.freeMode) {
18293        var newEvent = {
18294          time: now(),
18295          delta: Math.abs(delta),
18296          direction: Math.sign(delta),
18297          raw: event
18298        };
18299        var recentWheelEvents = swiper.mousewheel.recentWheelEvents;
18300
18301        if (recentWheelEvents.length >= 2) {
18302          recentWheelEvents.shift();
18303        }
18304
18305        var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
18306        recentWheelEvents.push(newEvent);
18307
18308        if (prevEvent) {
18309          if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
18310            swiper.mousewheel.animateSlider(newEvent);
18311          }
18312        } else {
18313          swiper.mousewheel.animateSlider(newEvent);
18314        }
18315
18316        if (swiper.mousewheel.releaseScroll(newEvent)) {
18317          return true;
18318        }
18319      } else {
18320        var _newEvent = {
18321          time: now(),
18322          delta: Math.abs(delta),
18323          direction: Math.sign(delta)
18324        };
18325        var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;
18326        var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;
18327
18328        if (!ignoreWheelEvents) {
18329          swiper.mousewheel.lastEventBeforeSnap = undefined;
18330
18331          if (swiper.params.loop) {
18332            swiper.loopFix();
18333          }
18334
18335          var position = swiper.getTranslate() + delta * params.sensitivity;
18336          var wasBeginning = swiper.isBeginning;
18337          var wasEnd = swiper.isEnd;
18338          if (position >= swiper.minTranslate()) position = swiper.minTranslate();
18339          if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
18340          swiper.setTransition(0);
18341          swiper.setTranslate(position);
18342          swiper.updateProgress();
18343          swiper.updateActiveIndex();
18344          swiper.updateSlidesClasses();
18345
18346          if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
18347            swiper.updateSlidesClasses();
18348          }
18349
18350          if (swiper.params.freeModeSticky) {
18351            clearTimeout(swiper.mousewheel.timeout);
18352            swiper.mousewheel.timeout = undefined;
18353            var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;
18354
18355            if (_recentWheelEvents.length >= 15) {
18356              _recentWheelEvents.shift();
18357            }
18358
18359            var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;
18360
18361            var firstEvent = _recentWheelEvents[0];
18362
18363            _recentWheelEvents.push(_newEvent);
18364
18365            if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) {
18366              _recentWheelEvents.splice(0);
18367            } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) {
18368              var snapToThreshold = delta > 0 ? 0.8 : 0.2;
18369              swiper.mousewheel.lastEventBeforeSnap = _newEvent;
18370
18371              _recentWheelEvents.splice(0);
18372
18373              swiper.mousewheel.timeout = nextTick(function () {
18374                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
18375              }, 0);
18376            }
18377
18378            if (!swiper.mousewheel.timeout) {
18379              swiper.mousewheel.timeout = nextTick(function () {
18380                var snapToThreshold = 0.5;
18381                swiper.mousewheel.lastEventBeforeSnap = _newEvent;
18382
18383                _recentWheelEvents.splice(0);
18384
18385                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
18386              }, 500);
18387            }
18388          }
18389
18390          if (!ignoreWheelEvents) swiper.emit('scroll', e);
18391          if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
18392          if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
18393        }
18394      }
18395
18396      if (e.preventDefault) e.preventDefault();else e.returnValue = false;
18397      return false;
18398    },
18399    animateSlider: function animateSlider(newEvent) {
18400      var swiper = this;
18401      var window = getWindow();
18402
18403      if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) {
18404        return false;
18405      }
18406
18407      if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) {
18408        return false;
18409      }
18410
18411      if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) {
18412        return true;
18413      }
18414
18415      if (newEvent.direction < 0) {
18416        if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
18417          swiper.slideNext();
18418          swiper.emit('scroll', newEvent.raw);
18419        }
18420      } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
18421        swiper.slidePrev();
18422        swiper.emit('scroll', newEvent.raw);
18423      }
18424
18425      swiper.mousewheel.lastScrollTime = new window.Date().getTime();
18426      return false;
18427    },
18428    releaseScroll: function releaseScroll(newEvent) {
18429      var swiper = this;
18430      var params = swiper.params.mousewheel;
18431
18432      if (newEvent.direction < 0) {
18433        if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
18434          return true;
18435        }
18436      } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
18437        return true;
18438      }
18439
18440      return false;
18441    },
18442    enable: function enable() {
18443      var swiper = this;
18444      var event = Mousewheel.event();
18445
18446      if (swiper.params.cssMode) {
18447        swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
18448        return true;
18449      }
18450
18451      if (!event) return false;
18452      if (swiper.mousewheel.enabled) return false;
18453      var target = swiper.$el;
18454
18455      if (swiper.params.mousewheel.eventsTarget !== 'container') {
18456        target = $(swiper.params.mousewheel.eventsTarget);
18457      }
18458
18459      target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
18460      target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
18461      target.on(event, swiper.mousewheel.handle);
18462      swiper.mousewheel.enabled = true;
18463      return true;
18464    },
18465    disable: function disable() {
18466      var swiper = this;
18467      var event = Mousewheel.event();
18468
18469      if (swiper.params.cssMode) {
18470        swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
18471        return true;
18472      }
18473
18474      if (!event) return false;
18475      if (!swiper.mousewheel.enabled) return false;
18476      var target = swiper.$el;
18477
18478      if (swiper.params.mousewheel.eventsTarget !== 'container') {
18479        target = $(swiper.params.mousewheel.eventsTarget);
18480      }
18481
18482      target.off(event, swiper.mousewheel.handle);
18483      swiper.mousewheel.enabled = false;
18484      return true;
18485    }
18486  };
18487  var Mousewheel$1 = {
18488    name: 'mousewheel',
18489    params: {
18490      mousewheel: {
18491        enabled: false,
18492        releaseOnEdges: false,
18493        invert: false,
18494        forceToAxis: false,
18495        sensitivity: 1,
18496        eventsTarget: 'container',
18497        thresholdDelta: null,
18498        thresholdTime: null
18499      }
18500    },
18501    create: function create() {
18502      var swiper = this;
18503      bindModuleMethods(swiper, {
18504        mousewheel: {
18505          enabled: false,
18506          lastScrollTime: now(),
18507          lastEventBeforeSnap: undefined,
18508          recentWheelEvents: [],
18509          enable: Mousewheel.enable,
18510          disable: Mousewheel.disable,
18511          handle: Mousewheel.handle,
18512          handleMouseEnter: Mousewheel.handleMouseEnter,
18513          handleMouseLeave: Mousewheel.handleMouseLeave,
18514          animateSlider: Mousewheel.animateSlider,
18515          releaseScroll: Mousewheel.releaseScroll
18516        }
18517      });
18518    },
18519    on: {
18520      init: function init(swiper) {
18521        if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
18522          swiper.mousewheel.disable();
18523        }
18524
18525        if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
18526      },
18527      destroy: function destroy(swiper) {
18528        if (swiper.params.cssMode) {
18529          swiper.mousewheel.enable();
18530        }
18531
18532        if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
18533      }
18534    }
18535  };
18536  var Navigation = {
18537    toggleEl: function toggleEl($el, disabled) {
18538      $el[disabled ? 'addClass' : 'removeClass'](this.params.navigation.disabledClass);
18539      if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;
18540    },
18541    update: function update() {
18542      var swiper = this;
18543      var params = swiper.params.navigation;
18544      var toggleEl = swiper.navigation.toggleEl;
18545      if (swiper.params.loop) return;
18546      var _swiper$navigation = swiper.navigation,
18547          $nextEl = _swiper$navigation.$nextEl,
18548          $prevEl = _swiper$navigation.$prevEl;
18549
18550      if ($prevEl && $prevEl.length > 0) {
18551        if (swiper.isBeginning) {
18552          toggleEl($prevEl, true);
18553        } else {
18554          toggleEl($prevEl, false);
18555        }
18556
18557        if (swiper.params.watchOverflow && swiper.enabled) {
18558          $prevEl[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
18559        }
18560      }
18561
18562      if ($nextEl && $nextEl.length > 0) {
18563        if (swiper.isEnd) {
18564          toggleEl($nextEl, true);
18565        } else {
18566          toggleEl($nextEl, false);
18567        }
18568
18569        if (swiper.params.watchOverflow && swiper.enabled) {
18570          $nextEl[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
18571        }
18572      }
18573    },
18574    onPrevClick: function onPrevClick(e) {
18575      var swiper = this;
18576      e.preventDefault();
18577      if (swiper.isBeginning && !swiper.params.loop) return;
18578      swiper.slidePrev();
18579    },
18580    onNextClick: function onNextClick(e) {
18581      var swiper = this;
18582      e.preventDefault();
18583      if (swiper.isEnd && !swiper.params.loop) return;
18584      swiper.slideNext();
18585    },
18586    init: function init() {
18587      var swiper = this;
18588      var params = swiper.params.navigation;
18589      swiper.params.navigation = createElementIfNotDefined(swiper.$el, swiper.params.navigation, swiper.params.createElements, {
18590        nextEl: 'swiper-button-next',
18591        prevEl: 'swiper-button-prev'
18592      });
18593      if (!(params.nextEl || params.prevEl)) return;
18594      var $nextEl;
18595      var $prevEl;
18596
18597      if (params.nextEl) {
18598        $nextEl = $(params.nextEl);
18599
18600        if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {
18601          $nextEl = swiper.$el.find(params.nextEl);
18602        }
18603      }
18604
18605      if (params.prevEl) {
18606        $prevEl = $(params.prevEl);
18607
18608        if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {
18609          $prevEl = swiper.$el.find(params.prevEl);
18610        }
18611      }
18612
18613      if ($nextEl && $nextEl.length > 0) {
18614        $nextEl.on('click', swiper.navigation.onNextClick);
18615      }
18616
18617      if ($prevEl && $prevEl.length > 0) {
18618        $prevEl.on('click', swiper.navigation.onPrevClick);
18619      }
18620
18621      extend(swiper.navigation, {
18622        $nextEl: $nextEl,
18623        nextEl: $nextEl && $nextEl[0],
18624        $prevEl: $prevEl,
18625        prevEl: $prevEl && $prevEl[0]
18626      });
18627
18628      if (!swiper.enabled) {
18629        if ($nextEl) $nextEl.addClass(params.lockClass);
18630        if ($prevEl) $prevEl.addClass(params.lockClass);
18631      }
18632    },
18633    destroy: function destroy() {
18634      var swiper = this;
18635      var _swiper$navigation2 = swiper.navigation,
18636          $nextEl = _swiper$navigation2.$nextEl,
18637          $prevEl = _swiper$navigation2.$prevEl;
18638
18639      if ($nextEl && $nextEl.length) {
18640        $nextEl.off('click', swiper.navigation.onNextClick);
18641        $nextEl.removeClass(swiper.params.navigation.disabledClass);
18642      }
18643
18644      if ($prevEl && $prevEl.length) {
18645        $prevEl.off('click', swiper.navigation.onPrevClick);
18646        $prevEl.removeClass(swiper.params.navigation.disabledClass);
18647      }
18648    }
18649  };
18650  var Navigation$1 = {
18651    name: 'navigation',
18652    params: {
18653      navigation: {
18654        nextEl: null,
18655        prevEl: null,
18656        hideOnClick: false,
18657        disabledClass: 'swiper-button-disabled',
18658        hiddenClass: 'swiper-button-hidden',
18659        lockClass: 'swiper-button-lock'
18660      }
18661    },
18662    create: function create() {
18663      var swiper = this;
18664      bindModuleMethods(swiper, {
18665        navigation: _extends({}, Navigation)
18666      });
18667    },
18668    on: {
18669      init: function init(swiper) {
18670        swiper.navigation.init();
18671        swiper.navigation.update();
18672      },
18673      toEdge: function toEdge(swiper) {
18674        swiper.navigation.update();
18675      },
18676      fromEdge: function fromEdge(swiper) {
18677        swiper.navigation.update();
18678      },
18679      destroy: function destroy(swiper) {
18680        swiper.navigation.destroy();
18681      },
18682      'enable disable': function enableDisable(swiper) {
18683        var _swiper$navigation3 = swiper.navigation,
18684            $nextEl = _swiper$navigation3.$nextEl,
18685            $prevEl = _swiper$navigation3.$prevEl;
18686
18687        if ($nextEl) {
18688          $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);
18689        }
18690
18691        if ($prevEl) {
18692          $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);
18693        }
18694      },
18695      click: function click(swiper, e) {
18696        var _swiper$navigation4 = swiper.navigation,
18697            $nextEl = _swiper$navigation4.$nextEl,
18698            $prevEl = _swiper$navigation4.$prevEl;
18699        var targetEl = e.target;
18700
18701        if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {
18702          if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;
18703          var isHidden;
18704
18705          if ($nextEl) {
18706            isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
18707          } else if ($prevEl) {
18708            isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
18709          }
18710
18711          if (isHidden === true) {
18712            swiper.emit('navigationShow');
18713          } else {
18714            swiper.emit('navigationHide');
18715          }
18716
18717          if ($nextEl) {
18718            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
18719          }
18720
18721          if ($prevEl) {
18722            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
18723          }
18724        }
18725      }
18726    }
18727  };
18728  var Pagination = {
18729    update: function update() {
18730      var swiper = this;
18731      var rtl = swiper.rtl;
18732      var params = swiper.params.pagination;
18733      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
18734      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
18735      var $el = swiper.pagination.$el;
18736      var current;
18737      var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
18738
18739      if (swiper.params.loop) {
18740        current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
18741
18742        if (current > slidesLength - 1 - swiper.loopedSlides * 2) {
18743          current -= slidesLength - swiper.loopedSlides * 2;
18744        }
18745
18746        if (current > total - 1) current -= total;
18747        if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
18748      } else if (typeof swiper.snapIndex !== 'undefined') {
18749        current = swiper.snapIndex;
18750      } else {
18751        current = swiper.activeIndex || 0;
18752      }
18753
18754      if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
18755        var bullets = swiper.pagination.bullets;
18756        var firstIndex;
18757        var lastIndex;
18758        var midIndex;
18759
18760        if (params.dynamicBullets) {
18761          swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
18762          $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + "px");
18763
18764          if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
18765            swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;
18766
18767            if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {
18768              swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
18769            } else if (swiper.pagination.dynamicBulletIndex < 0) {
18770              swiper.pagination.dynamicBulletIndex = 0;
18771            }
18772          }
18773
18774          firstIndex = current - swiper.pagination.dynamicBulletIndex;
18775          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
18776          midIndex = (lastIndex + firstIndex) / 2;
18777        }
18778
18779        bullets.removeClass(params.bulletActiveClass + " " + params.bulletActiveClass + "-next " + params.bulletActiveClass + "-next-next " + params.bulletActiveClass + "-prev " + params.bulletActiveClass + "-prev-prev " + params.bulletActiveClass + "-main");
18780
18781        if ($el.length > 1) {
18782          bullets.each(function (bullet) {
18783            var $bullet = $(bullet);
18784            var bulletIndex = $bullet.index();
18785
18786            if (bulletIndex === current) {
18787              $bullet.addClass(params.bulletActiveClass);
18788            }
18789
18790            if (params.dynamicBullets) {
18791              if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
18792                $bullet.addClass(params.bulletActiveClass + "-main");
18793              }
18794
18795              if (bulletIndex === firstIndex) {
18796                $bullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
18797              }
18798
18799              if (bulletIndex === lastIndex) {
18800                $bullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
18801              }
18802            }
18803          });
18804        } else {
18805          var $bullet = bullets.eq(current);
18806          var bulletIndex = $bullet.index();
18807          $bullet.addClass(params.bulletActiveClass);
18808
18809          if (params.dynamicBullets) {
18810            var $firstDisplayedBullet = bullets.eq(firstIndex);
18811            var $lastDisplayedBullet = bullets.eq(lastIndex);
18812
18813            for (var i = firstIndex; i <= lastIndex; i += 1) {
18814              bullets.eq(i).addClass(params.bulletActiveClass + "-main");
18815            }
18816
18817            if (swiper.params.loop) {
18818              if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
18819                for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) {
18820                  bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + "-main");
18821                }
18822
18823                bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + "-prev");
18824              } else {
18825                $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
18826                $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
18827              }
18828            } else {
18829              $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
18830              $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
18831            }
18832          }
18833        }
18834
18835        if (params.dynamicBullets) {
18836          var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
18837          var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;
18838          var offsetProp = rtl ? 'right' : 'left';
18839          bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + "px");
18840        }
18841      }
18842
18843      if (params.type === 'fraction') {
18844        $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));
18845        $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));
18846      }
18847
18848      if (params.type === 'progressbar') {
18849        var progressbarDirection;
18850
18851        if (params.progressbarOpposite) {
18852          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
18853        } else {
18854          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
18855        }
18856
18857        var scale = (current + 1) / total;
18858        var scaleX = 1;
18859        var scaleY = 1;
18860
18861        if (progressbarDirection === 'horizontal') {
18862          scaleX = scale;
18863        } else {
18864          scaleY = scale;
18865        }
18866
18867        $el.find(classesToSelector(params.progressbarFillClass)).transform("translate3d(0,
188670,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")").transition(swiper.params.speed);
18868      }
18869
18870      if (params.type === 'custom' && params.renderCustom) {
18871        $el.html(params.renderCustom(swiper, current + 1, total));
18872        swiper.emit('paginationRender', $el[0]);
18873      } else {
18874        swiper.emit('paginationUpdate', $el[0]);
18875      }
18876
18877      if (swiper.params.watchOverflow && swiper.enabled) {
18878        $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
18879      }
18880    },
18881    render: function render() {
18882      var swiper = this;
18883      var params = swiper.params.pagination;
18884      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
18885      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
18886      var $el = swiper.pagination.$el;
18887      var paginationHTML = '';
18888
18889      if (params.type === 'bullets') {
18890        var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
18891
18892        if (swiper.params.freeMode && !swiper.params.loop && numberOfBullets > slidesLength) {
18893          numberOfBullets = slidesLength;
18894        }
18895
18896        for (var i = 0; i < numberOfBullets; i += 1) {
18897          if (params.renderBullet) {
18898            paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
18899          } else {
18900            paginationHTML += "<" + params.bulletElement + " class=\"" + params.bulletClass + "\"></" + params.bulletElement + ">";
18901          }
18902        }
18903
18904        $el.html(paginationHTML);
18905        swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));
18906      }
18907
18908      if (params.type === 'fraction') {
18909        if (params.renderFraction) {
18910          paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
18911        } else {
18912          paginationHTML = "<span class=\"" + params.currentClass + "\"></span>" + ' / ' + ("<span class=\"" + params.totalClass + "\"></span>");
18913        }
18914
18915        $el.html(paginationHTML);
18916      }
18917
18918      if (params.type === 'progressbar') {
18919        if (params.renderProgressbar) {
18920          paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
18921        } else {
18922          paginationHTML = "<span class=\"" + params.progressbarFillClass + "\"></span>";
18923        }
18924
18925        $el.html(paginationHTML);
18926      }
18927
18928      if (params.type !== 'custom') {
18929        swiper.emit('paginationRender', swiper.pagination.$el[0]);
18930      }
18931    },
18932    init: function init() {
18933      var swiper = this;
18934      swiper.params.pagination = createElementIfNotDefined(swiper.$el, swiper.params.pagination, swiper.params.createElements, {
18935        el: 'swiper-pagination'
18936      });
18937      var params = swiper.params.pagination;
18938      if (!params.el) return;
18939      var $el = $(params.el);
18940      if ($el.length === 0) return;
18941
18942      if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {
18943        $el = swiper.$el.find(params.el);
18944      }
18945
18946      if (params.type === 'bullets' && params.clickable) {
18947        $el.addClass(params.clickableClass);
18948      }
18949
18950      $el.addClass(params.modifierClass + params.type);
18951
18952      if (params.type === 'bullets' && params.dynamicBullets) {
18953        $el.addClass("" + params.modifierClass + params.type + "-dynamic");
18954        swiper.pagination.dynamicBulletIndex = 0;
18955
18956        if (params.dynamicMainBullets < 1) {
18957          params.dynamicMainBullets = 1;
18958        }
18959      }
18960
18961      if (params.type === 'progressbar' && params.progressbarOpposite) {
18962        $el.addClass(params.progressbarOppositeClass);
18963      }
18964
18965      if (params.clickable) {
18966        $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {
18967          e.preventDefault();
18968          var index = $(this).index() * swiper.params.slidesPerGroup;
18969          if (swiper.params.loop) index += swiper.loopedSlides;
18970          swiper.slideTo(index);
18971        });
18972      }
18973
18974      extend(swiper.pagination, {
18975        $el: $el,
18976        el: $el[0]
18977      });
18978
18979      if (!swiper.enabled) {
18980        $el.addClass(params.lockClass);
18981      }
18982    },
18983    destroy: function destroy() {
18984      var swiper = this;
18985      var params = swiper.params.pagination;
18986      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
18987      var $el = swiper.pagination.$el;
18988      $el.removeClass(params.hiddenClass);
18989      $el.removeClass(params.modifierClass + params.type);
18990      if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
18991
18992      if (params.clickable) {
18993        $el.off('click', classesToSelector(params.bulletClass));
18994      }
18995    }
18996  };
18997  var Pagination$1 = {
18998    name: 'pagination',
18999    params: {
19000      pagination: {
19001        el: null,
19002        bulletElement: 'span',
19003        clickable: false,
19004        hideOnClick: false,
19005        renderBullet: null,
19006        renderProgressbar: null,
19007        renderFraction: null,
19008        renderCustom: null,
19009        progressbarOpposite: false,
19010        type: 'bullets',
19011        dynamicBullets: false,
19012        dynamicMainBullets: 1,
19013        formatFractionCurrent: function formatFractionCurrent(number) {
19014          return number;
19015        },
19016        formatFractionTotal: function formatFractionTotal(number) {
19017          return number;
19018        },
19019        bulletClass: 'swiper-pagination-bullet',
19020        bulletActiveClass: 'swiper-pagination-bullet-active',
19021        modifierClass: 'swiper-pagination-',
19022        currentClass: 'swiper-pagination-current',
19023        totalClass: 'swiper-pagination-total',
19024        hiddenClass: 'swiper-pagination-hidden',
19025        progressbarFillClass: 'swiper-pagination-progressbar-fill',
19026        progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
19027        clickableClass: 'swiper-pagination-clickable',
19028        lockClass: 'swiper-pagination-lock'
19029      }
19030    },
19031    create: function create() {
19032      var swiper = this;
19033      bindModuleMethods(swiper, {
19034        pagination: _extends({
19035          dynamicBulletIndex: 0
19036        }, Pagination)
19037      });
19038    },
19039    on: {
19040      init: function init(swiper) {
19041        swiper.pagination.init();
19042        swiper.pagination.render();
19043        swiper.pagination.update();
19044      },
19045      activeIndexChange: function activeIndexChange(swiper) {
19046        if (swiper.params.loop) {
19047          swiper.pagination.update();
19048        } else if (typeof swiper.snapIndex === 'undefined') {
19049          swiper.pagination.update();
19050        }
19051      },
19052      snapIndexChange: function snapIndexChange(swiper) {
19053        if (!swiper.params.loop) {
19054          swiper.pagination.update();
19055        }
19056      },
19057      slidesLengthChange: function slidesLengthChange(swiper) {
19058        if (swiper.params.loop) {
19059          swiper.pagination.render();
19060          swiper.pagination.update();
19061        }
19062      },
19063      snapGridLengthChange: function snapGridLengthChange(swiper) {
19064        if (!swiper.params.loop) {
19065          swiper.pagination.render();
19066          swiper.pagination.update();
19067        }
19068      },
19069      destroy: function destroy(swiper) {
19070        swiper.pagination.destroy();
19071      },
19072      'enable disable': function enableDisable(swiper) {
19073        var $el = swiper.pagination.$el;
19074
19075        if ($el) {
19076          $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);
19077        }
19078      },
19079      click: function click(swiper, e) {
19080        var targetEl = e.target;
19081
19082        if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {
19083          if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;
19084          var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
19085
19086          if (isHidden === true) {
19087            swiper.emit('paginationShow');
19088          } else {
19089            swiper.emit('paginationHide');
19090          }
19091
19092          swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
19093        }
19094      }
19095    }
19096  };
19097  var Scrollbar = {
19098    setTranslate: function setTranslate() {
19099      var swiper = this;
19100      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
19101      var scrollbar = swiper.scrollbar,
19102          rtl = swiper.rtlTranslate,
19103          progress = swiper.progress;
19104      var dragSize = scrollbar.dragSize,
19105          trackSize = scrollbar.trackSize,
19106          $dragEl = scrollbar.$dragEl,
19107          $el = scrollbar.$el;
19108      var params = swiper.params.scrollbar;
19109      var newSize = dragSize;
19110      var newPos = (trackSize - dragSize) * progress;
19111
19112      if (rtl) {
19113        newPos = -newPos;
19114
19115        if (newPos > 0) {
19116          newSize = dragSize - newPos;
19117          newPos = 0;
19118        } else if (-newPos + dragSize > trackSize) {
19119          newSize = trackSize + newPos;
19120        }
19121      } else if (newPos < 0) {
19122        newSize = dragSize + newPos;
19123        newPos = 0;
19124      } else if (newPos + dragSize > trackSize) {
19125        newSize = trackSize - newPos;
19126      }
19127
19128      if (swiper.isHorizontal()) {
19129        $dragEl.transform("translate3d(" + newPos + "px, 0, 0)");
19130        $dragEl[0].style.width = newSize + "px";
19131      } else {
19132        $dragEl.transform("translate3d(0px, " + newPos + "px, 0)");
19133        $dragEl[0].style.height = newSize + "px";
19134      }
19135
19136      if (params.hide) {
19137        clearTimeout(swiper.scrollbar.timeout);
19138        $el[0].style.opacity = 1;
19139        swiper.scrollbar.timeout = setTimeout(function () {
19140          $el[0].style.opacity = 0;
19141          $el.transition(400);
19142        }, 1000);
19143      }
19144    },
19145    setTransition: function setTransition(duration) {
19146      var swiper = this;
19147      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
19148      swiper.scrollbar.$dragEl.transition(duration);
19149    },
19150    updateSize: function updateSize() {
19151      var swiper = this;
19152      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
19153      var scrollbar = swiper.scrollbar;
19154      var $dragEl = scrollbar.$dragEl,
19155          $el = scrollbar.$el;
19156      $dragEl[0].style.width = '';
19157      $dragEl[0].style.height = '';
19158      var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
19159      var divider = swiper.size / swiper.virtualSize;
19160      var moveDivider = divider * (trackSize / swiper.size);
19161      var dragSize;
19162
19163      if (swiper.params.scrollbar.dragSize === 'auto') {
19164        dragSize = trackSize * divider;
19165      } else {
19166        dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
19167      }
19168
19169      if (swiper.isHorizontal()) {
19170        $dragEl[0].style.width = dragSize + "px";
19171      } else {
19172        $dragEl[0].style.height = dragSize + "px";
19173      }
19174
19175      if (divider >= 1) {
19176        $el[0].style.display = 'none';
19177      } else {
19178        $el[0].style.display = '';
19179      }
19180
19181      if (swiper.params.scrollbar.hide) {
19182        $el[0].style.opacity = 0;
19183      }
19184
19185      extend(scrollbar, {
19186        trackSize: trackSize,
19187        divider: divider,
19188        moveDivider: moveDivider,
19189        dragSize: dragSize
19190      });
19191
19192      if (swiper.params.watchOverflow && swiper.enabled) {
19193        scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
19194      }
19195    },
19196    getPointerPosition: function getPointerPosition(e) {
19197      var swiper = this;
19198
19199      if (swiper.isHorizontal()) {
19200        return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;
19201      }
19202
19203      return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;
19204    },
19205    setDragPosition: function setDragPosition(e) {
19206      var swiper = this;
19207      var scrollbar = swiper.scrollbar,
19208          rtl = swiper.rtlTranslate;
19209      var $el = scrollbar.$el,
19210          dragSize = scrollbar.dragSize,
19211          trackSize = scrollbar.trackSize,
19212          dragStartPos = scrollbar.dragStartPos;
19213      var positionRatio;
19214      positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
19215      positionRatio = Math.max(Math.min(positionRatio, 1), 0);
19216
19217      if (rtl) {
19218        positionRatio = 1 - positionRatio;
19219      }
19220
19221      var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
19222      swiper.updateProgress(position);
19223      swiper.setTranslate(position);
19224      swiper.updateActiveIndex();
19225      swiper.updateSlidesClasses();
19226    },
19227    onDragStart: function onDragStart(e) {
19228      var swiper = this;
19229      var params = swiper.params.scrollbar;
19230      var scrollbar = swiper.scrollbar,
19231          $wrapperEl = swiper.$wrapperEl;
19232      var $el = scrollbar.$el,
19233          $dragEl = scrollbar.$dragEl;
19234      swiper.scrollbar.isTouched = true;
19235      swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
19236      e.preventDefault();
19237      e.stopPropagation();
19238      $wrapperEl.transition(100);
19239      $dragEl.transition(100);
19240      scrollbar.setDragPosition(e);
19241      clearTimeout(swiper.scrollbar.dragTimeout);
19242      $el.transition(0);
19243
19244      if (params.hide) {
19245        $el.css('opacity', 1);
19246      }
19247
19248      if (swiper.params.cssMode) {
19249        swiper.$wrapperEl.css('scroll-snap-type', 'none');
19250      }
19251
19252      swiper.emit('scrollbarDragStart', e);
19253    },
19254    onDragMove: function onDragMove(e) {
19255      var swiper = this;
19256      var scrollbar = swiper.scrollbar,
19257          $wrapperEl = swiper.$wrapperEl;
19258      var $el = scrollbar.$el,
19259          $dragEl = scrollbar.$dragEl;
19260      if (!swiper.scrollbar.isTouched) return;
19261      if (e.preventDefault) e.preventDefault();else e.returnValue = false;
19262      scrollbar.setDragPosition(e);
19263      $wrapperEl.transition(0);
19264      $el.transition(0);
19265      $dragEl.transition(0);
19266      swiper.emit('scrollbarDragMove', e);
19267    },
19268    onDragEnd: function onDragEnd(e) {
19269      var swiper = this;
19270      var params = swiper.params.scrollbar;
19271      var scrollbar = swiper.scrollbar,
19272          $wrapperEl = swiper.$wrapperEl;
19273      var $el = scrollbar.$el;
19274      if (!swiper.scrollbar.isTouched) return;
19275      swiper.scrollbar.isTouched = false;
19276
19277      if (swiper.params.cssMode) {
19278        swiper.$wrapperEl.css('scroll-snap-type', '');
19279        $wrapperEl.transition('');
19280      }
19281
19282      if (params.hide) {
19283        clearTimeout(swiper.scrollbar.dragTimeout);
19284        swiper.scrollbar.dragTimeout = nextTick(function () {
19285          $el.css('opacity', 0);
19286          $el.transition(400);
19287        }, 1000);
19288      }
19289
19290      swiper.emit('scrollbarDragEnd', e);
19291
19292      if (params.snapOnRelease) {
19293        swiper.slideToClosest();
19294      }
19295    },
19296    enableDraggable: function enableDraggable() {
19297      var swiper = this;
19298      if (!swiper.params.scrollbar.el) return;
19299      var document = getDocument();
19300      var scrollbar = swiper.scrollbar,
19301          touchEventsTouch = swiper.touchEventsTouch,
19302          touchEventsDesktop = swiper.touchEventsDesktop,
19303          params = swiper.params,
19304          support = swiper.support;
19305      var $el = scrollbar.$el;
19306      var target = $el[0];
19307      var activeListener = support.passiveListener && params.passiveListeners ? {
19308        passive: false,
19309        capture: false
19310      } : false;
19311      var passiveListener = support.passiveListener && params.passiveListeners ? {
19312        passive: true,
19313        capture: false
19314      } : false;
19315      if (!target) return;
19316
19317      if (!support.touch) {
19318        target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
19319        document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
19320        document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
19321      } else {
19322        target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
19323        target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
19324        target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
19325      }
19326    },
19327    disableDraggable: function disableDraggable() {
19328      var swiper = this;
19329      if (!swiper.params.scrollbar.el) return;
19330      var document = getDocument();
19331      var scrollbar = swiper.scrollbar,
19332          touchEventsTouch = swiper.touchEventsTouch,
19333          touchEventsDesktop = swiper.touchEventsDesktop,
19334          params = swiper.params,
19335          support = swiper.support;
19336      var $el = scrollbar.$el;
19337      var target = $el[0];
19338      var activeListener = support.passiveListener && params.passiveListeners ? {
19339        passive: false,
19340        capture: false
19341      } : false;
19342      var passiveListener = support.passiveListener && params.passiveListeners ? {
19343        passive: true,
19344        capture: false
19345      } : false;
19346      if (!target) return;
19347
19348      if (!support.touch) {
19349        target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
19350        document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
19351        document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
19352      } else {
19353        target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
19354        target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
19355        target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
19356      }
19357    },
19358    init: function init() {
19359      var swiper = this;
19360      var scrollbar = swiper.scrollbar,
19361          $swiperEl = swiper.$el;
19362      swiper.params.scrollbar = createElementIfNotDefined($swiperEl, swiper.params.scrollbar, swiper.params.createElements, {
19363        el: 'swiper-scrollbar'
19364      });
19365      var params = swiper.params.scrollbar;
19366      if (!params.el) return;
19367      var $el = $(params.el);
19368
19369      if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
19370        $el = $swiperEl.find(params.el);
19371      }
19372
19373      var $dragEl = $el.find("." + swiper.params.scrollbar.dragClass);
19374
19375      if ($dragEl.length === 0) {
19376        $dragEl = $("<div class=\"" + swiper.params.scrollbar.dragClass + "\"></div>");
19377        $el.append($dragEl);
19378      }
19379
19380      extend(scrollbar, {
19381        $el: $el,
19382        el: $el[0],
19383        $dragEl: $dragEl,
19384        dragEl: $dragEl[0]
19385      });
19386
19387      if (params.draggable) {
19388        scrollbar.enableDraggable();
19389      }
19390
19391      if ($el) {
19392        $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);
19393      }
19394    },
19395    destroy: function destroy() {
19396      var swiper = this;
19397      swiper.scrollbar.disableDraggable();
19398    }
19399  };
19400  var Scrollbar$1 = {
19401    name: 'scrollbar',
19402    params: {
19403      scrollbar: {
19404        el: null,
19405        dragSize: 'auto',
19406        hide: false,
19407        draggable: false,
19408        snapOnRelease: true,
19409        lockClass: 'swiper-scrollbar-lock',
19410        dragClass: 'swiper-scrollbar-drag'
19411      }
19412    },
19413    create: function create() {
19414      var swiper = this;
19415      bindModuleMethods(swiper, {
19416        scrollbar: _extends({
19417          isTouched: false,
19418          timeout: null,
19419          dragTimeout: null
19420        }, Scrollbar)
19421      });
19422    },
19423    on: {
19424      init: function init(swiper) {
19425        swiper.scrollbar.init();
19426        swiper.scrollbar.updateSize();
19427        swiper.scrollbar.setTranslate();
19428      },
19429      update: function update(swiper) {
19430        swiper.scrollbar.updateSize();
19431      },
19432      resize: function resize(swiper) {
19433        swiper.scrollbar.updateSize();
19434      },
19435      observerUpdate: function observerUpdate(swiper) {
19436        swiper.scrollbar.updateSize();
19437      },
19438      setTranslate: function setTranslate(swiper) {
19439        swiper.scrollbar.setTranslate();
19440      },
19441      setTransition: function setTransition(swiper, duration) {
19442        swiper.scrollbar.setTransition(duration);
19443      },
19444      'enable disable': function enableDisable(swiper) {
19445        var $el = swiper.scrollbar.$el;
19446
19447        if ($el) {
19448          $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);
19449        }
19450      },
19451      destroy: function destroy(swiper) {
19452        swiper.scrollbar.destroy();
19453      }
19454    }
19455  };
19456  var Parallax = {
19457    setTransform: function setTransform(el, progress) {
19458      var swiper = this;
19459      var rtl = swiper.rtl;
19460      var $el = $(el);
19461      var rtlFactor = rtl ? -1 : 1;
19462      var p = $el.attr('data-swiper-parallax') || '0';
19463      var x = $el.attr('data-swiper-parallax-x');
19464      var y = $el.attr('data-swiper-parallax-y');
19465      var scale = $el.attr('data-swiper-parallax-scale');
19466      var opacity = $el.attr('data-swiper-parallax-opacity');
19467
19468      if (x || y) {
19469        x = x || '0';
19470        y = y || '0';
19471      } else if (swiper.isHorizontal()) {
19472        x = p;
19473        y = '0';
19474      } else {
19475        y = p;
19476        x = '0';
19477      }
19478
19479      if (x.indexOf('%') >= 0) {
19480        x = parseInt(x, 10) * progress * rtlFactor + "%";
19481      } else {
19482        x = x * progress * rtlFactor + "px";
19483      }
19484
19485      if (y.indexOf('%') >= 0) {
19486        y = parseInt(y, 10) * progress + "%";
19487      } else {
19488        y = y * progress + "px";
19489      }
19490
19491      if (typeof opacity !== 'undefined' && opacity !== null) {
19492        var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
19493        $el[0].style.opacity = currentOpacity;
19494      }
19495
19496      if (typeof scale === 'undefined' || scale === null) {
19497        $el.transform("translate3d(" + x + ", " + y + ", 0px)");
19498      } else {
19499        var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
19500        $el.transform("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")");
19501      }
19502    },
19503    setTranslate: function setTranslate() {
19504      var swiper = this;
19505      var $el = swiper.$el,
19506          slides = swiper.slides,
19507          progress = swiper.progress,
19508          snapGrid = swiper.snapGrid;
19509      $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {
19510        swiper.parallax.setTransform(el, progress);
19511      });
19512      slides.each(function (slideEl, slideIndex) {
19513        var slideProgress = slideEl.progress;
19514
19515        if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
19516          slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
19517        }
19518
19519        slideProgress = Math.min(Math.max(slideProgress, -1), 1);
19520        $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {
19521          swiper.parallax.setTransform(el, slideProgress);
19522        });
19523      });
19524    },
19525    setTransition: function setTransition(duration) {
19526      if (duration === void 0) {
19527        duration = this.params.speed;
19528      }
19529
19530      var swiper = this;
19531      var $el = swiper.$el;
19532      $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) {
19533        var $parallaxEl = $(parallaxEl);
19534        var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
19535        if (duration === 0) parallaxDuration = 0;
19536        $parallaxEl.transition(parallaxDuration);
19537      });
19538    }
19539  };
19540  var Parallax$1 = {
19541    name: 'parallax',
19542    params: {
19543      parallax: {
19544        enabled: false
19545      }
19546    },
19547    create: function create() {
19548      var swiper = this;
19549      bindModuleMethods(swiper, {
19550        parallax: _extends({}, Parallax)
19551      });
19552    },
19553    on: {
19554      beforeInit: function beforeInit(swiper) {
19555        if (!swiper.params.parallax.enabled) return;
19556        swiper.params.watchSlidesProgress = true;
19557        swiper.originalParams.watchSlidesProgress = true;
19558      },
19559      init: function init(swiper) {
19560        if (!swiper.params.parallax.enabled) return;
19561        swiper.parallax.setTranslate();
19562      },
19563      setTranslate: function setTranslate(swiper) {
19564        if (!swiper.params.parallax.enabled) return;
19565        swiper.parallax.setTranslate();
19566      },
19567      setTransition: function setTransition(swiper, duration) {
19568        if (!swiper.params.parallax.enabled) return;
19569        swiper.parallax.setTransition(duration);
19570      }
19571    }
19572  };
19573  var Zoom = {
19574    getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
19575      if (e.targetTouches.length < 2) return 1;
19576      var x1 = e.targetTouches[0].pageX;
19577      var y1 = e.targetTouches[0].pageY;
19578      var x2 = e.targetTouches[1].pageX;
19579      var y2 = e.targetTouches[1].pageY;
19580      var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
19581      return distance;
19582    },
19583    onGestureStart: function onGestureStart(e) {
19584      var swiper = this;
19585      var support = swiper.support;
19586      var params = swiper.params.zoom;
19587      var zoom = swiper.zoom;
19588      var gesture = zoom.gesture;
19589      zoom.fakeGestureTouched = false;
19590      zoom.fakeGestureMoved = false;
19591
19592      if (!support.gestures) {
19593        if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {
19594          return;
19595        }
19596
19597        zoom.fakeGestureTouched = true;
19598        gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
19599      }
19600
19601      if (!gesture.$slideEl || !gesture.$slideEl.length) {
19602        gesture.$slideEl = $(e.target).closest("." + swiper.params.slideClass);
19603        if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
19604        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
19605        gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
19606        gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
19607
19608        if (gesture.$imageWrapEl.length === 0) {
19609          gesture.$imageEl = undefined;
19610          return;
19611        }
19612      }
19613
19614      if (gesture.$imageEl) {
19615        gesture.$imageEl.transition(0);
19616      }
19617
19618      swiper.zoom.isScaling = true;
19619    },
19620    onGestureChange: function onGestureChange(e) {
19621      var swiper = this;
19622      var support = swiper.support;
19623      var params = swiper.params.zoom;
19624      var zoom = swiper.zoom;
19625      var gesture = zoom.gesture;
19626
19627      if (!support.gestures) {
19628        if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {
19629          return;
19630        }
19631
19632        zoom.fakeGestureMoved = true;
19633        gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
19634      }
19635
19636      if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
19637        if (e.type === 'gesturechange') zoom.onGestureStart(e);
19638        return;
19639      }
19640
19641      if (support.gestures) {
19642        zoom.scale = e.scale * zoom.currentScale;
19643      } else {
19644        zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;
19645      }
19646
19647      if (zoom.scale > gesture.maxRatio) {
19648        zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);
19649      }
19650
19651      if (zoom.scale < params.minRatio) {
19652        zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);
19653      }
19654
19655      gesture.$imageEl.transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
19656    },
19657    onGestureEnd: function onGestureEnd(e) {
19658      var swiper = this;
19659      var device = swiper.device;
19660      var support = swiper.support;
19661      var params = swiper.params.zoom;
19662      var zoom = swiper.zoom;
19663      var gesture = zoom.gesture;
19664
19665      if (!support.gestures) {
19666        if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
19667          return;
19668        }
19669
19670        if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {
19671          return;
19672        }
19673
19674        zoom.fakeGestureTouched = false;
19675        zoom.fakeGestureMoved = false;
19676      }
19677
19678      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
19679      zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
19680      gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
19681      zoom.currentScale = zoom.scale;
19682      zoom.isScaling = false;
19683      if (zoom.scale === 1) gesture.$slideEl = undefined;
19684    },
19685    onTouchStart: function onTouchStart(e) {
19686      var swiper = this;
19687      var device = swiper.device;
19688      var zoom = swiper.zoom;
19689      var gesture = zoom.gesture,
19690          image = zoom.image;
19691      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
19692      if (image.isTouched) return;
19693      if (device.android && e.cancelable) e.preventDefault();
19694      image.isTouched = true;
19695      image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
19696      image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
19697    },
19698    onTouchMove: function onTouchMove(e) {
19699      var swiper = this;
19700      var zoom = swiper.zoom;
19701      var gesture = zoom.gesture,
19702          image = zoom.image,
19703          velocity = zoom.velocity;
19704      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
19705      swiper.allowClick = false;
19706      if (!image.isTouched || !gesture.$slideEl) return;
19707
19708      if (!image.isMoved) {
19709        image.width = gesture.$imageEl[0].offsetWidth;
19710        image.height = gesture.$imageEl[0].offsetHeight;
19711        image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
19712        image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
19713        gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
19714        gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
19715        gesture.$imageWrapEl.transition(0);
19716
19717        if (swiper.rtl) {
19718          image.startX = -image.startX;
19719          image.startY = -image.startY;
19720        }
19721      }
19722
19723      var scaledWidth = image.width * zoom.scale;
19724      var scaledHeight = image.height * zoom.scale;
19725      if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
19726      image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
19727      image.maxX = -image.minX;
19728      image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
19729      image.maxY = -image.minY;
19730      image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
19731      image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
19732
19733      if (!image.isMoved && !zoom.isScaling) {
19734        if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
19735          image.isTouched = false;
19736          return;
19737        }
19738
19739        if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
19740          image.isTouched = false;
19741          return;
19742        }
19743      }
19744
19745      if (e.cancelable) {
19746        e.preventDefault();
19747      }
19748
19749      e.stopPropagation();
19750      image.isMoved = true;
19751      image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;
19752      image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;
19753
19754      if (image.currentX < image.minX) {
19755        image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);
19756      }
19757
19758      if (image.currentX > image.maxX) {
19759        image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);
19760      }
19761
19762      if (image.currentY < image.minY) {
19763        image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);
19764      }
19765
19766      if (image.currentY > image.maxY) {
19767        image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);
19768      }
19769
19770      if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
19771      if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
19772      if (!velocity.prevTime) velocity.prevTime = Date.now();
19773      velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
19774      velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
19775      if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
19776      if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
19777      velocity.prevPositionX = image.touchesCurrent.x;
19778      velocity.prevPositionY = image.touchesCurrent.y;
19779      velocity.prevTime = Date.now();
19780      gesture.$imageWrapEl.transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)");
19781    },
19782    onTouchEnd: function onTouchEnd() {
19783      var swiper = this;
19784      var zoom = swiper.zoom;
19785      var gesture = zoom.gesture,
19786          image = zoom.image,
19787          velocity = zoom.velocity;
19788      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
19789
19790      if (!image.isTouched || !image.isMoved) {
19791        image.isTouched = false;
19792        image.isMoved = false;
19793        return;
19794      }
19795
19796      image.isTouched = false;
19797      image.isMoved = false;
19798      var momentumDurationX = 300;
19799      var momentumDurationY = 300;
19800      var momentumDistanceX = velocity.x * momentumDurationX;
19801      var newPositionX = image.currentX + momentumDistanceX;
19802      var momentumDistanceY = velocity.y * momentumDurationY;
19803      var newPositionY = image.currentY + momentumDistanceY;
19804      if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
19805      if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
19806      var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
19807      image.currentX = newPositionX;
19808      image.currentY = newPositionY;
19809      var scaledWidth = image.width * zoom.scale;
19810      var scaledHeight = image.height * zoom.scale;
19811      image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
19812      image.maxX = -image.minX;
19813      image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
19814      image.maxY = -image.minY;
19815      image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
19816      image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
19817      gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)");
19818    },
19819    onTransitionEnd: function onTransitionEnd() {
19820      var swiper = this;
19821      var zoom = swiper.zoom;
19822      var gesture = zoom.gesture;
19823
19824      if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
19825        if (gesture.$imageEl) {
19826          gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
19827        }
19828
19829        if (gesture.$imageWrapEl) {
19830          gesture.$imageWrapEl.transform('translate3d(0,0,0)');
19831        }
19832
19833        zoom.scale = 1;
19834        zoom.currentScale = 1;
19835        gesture.$slideEl = undefined;
19836        gesture.$imageEl = undefined;
19837        gesture.$imageWrapEl = undefined;
19838      }
19839    },
19840    toggle: function toggle(e) {
19841      var swiper = this;
19842      var zoom = swiper.zoom;
19843
19844      if (zoom.scale && zoom.scale !== 1) {
19845        zoom.out();
19846      } else {
19847        zoom.in(e);
19848      }
19849    },
19850    in: function _in(e) {
19851      var swiper = this;
19852      var window = getWindow();
19853      var zoom = swiper.zoom;
19854      var params = swiper.params.zoom;
19855      var gesture = zoom.gesture,
19856          image = zoom.image;
19857
19858      if (!gesture.$slideEl) {
19859        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
19860          gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass);
19861        } else {
19862          gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
19863        }
19864
19865        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
19866        gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
19867      }
19868
19869      if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;
19870      gesture.$slideEl.addClass("" + params.zoomedSlideClass);
19871      var touchX;
19872      var touchY;
19873      var offsetX;
19874      var offsetY;
19875      var diffX;
19876      var diffY;
19877      var translateX;
19878      var translateY;
19879      var imageWidth;
19880      var imageHeight;
19881      var scaledWidth;
19882      var scaledHeight;
19883      var translateMinX;
19884      var translateMinY;
19885      var translateMaxX;
19886      var translateMaxY;
19887      var slideWidth;
19888      var slideHeight;
19889
19890      if (typeof image.touchesStart.x === 'undefined' && e) {
19891        touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
19892        touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
19893      } else {
19894        touchX = image.touchesStart.x;
19895        touchY = image.touchesStart.y;
19896      }
19897
19898      zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
19899      zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
19900
19901      if (e) {
19902        slideWidth = gesture.$slideEl[0].offsetWidth;
19903        slideHeight = gesture.$slideEl[0].offsetHeight;
19904        offsetX = gesture.$slideEl.offset().left + window.scrollX;
19905        offsetY = gesture.$slideEl.offset().top + window.scrollY;
19906        diffX = offsetX + slideWidth / 2 - touchX;
19907        diffY = offsetY + slideHeight / 2 - touchY;
19908        imageWidth = gesture.$imageEl[0].offsetWidth;
19909        imageHeight = gesture.$imageEl[0].offsetHeight;
19910        scaledWidth = imageWidth * zoom.scale;
19911        scaledHeight = imageHeight * zoom.scale;
19912        translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
19913        translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
19914        translateMaxX = -translateMinX;
19915        translateMaxY = -translateMinY;
19916        translateX = diffX * zoom.scale;
19917        translateY = diffY * zoom.scale;
19918
19919        if (translateX < translateMinX) {
19920          translateX = translateMinX;
19921        }
19922
19923        if (translateX > translateMaxX) {
19924          translateX = translateMaxX;
19925        }
19926
19927        if (translateY < translateMinY) {
19928          translateY = translateMinY;
19929        }
19930
19931        if (translateY > translateMaxY) {
19932          translateY = translateMaxY;
19933        }
19934      } else {
19935        translateX = 0;
19936        translateY = 0;
19937      }
19938
19939      gesture.$imageWrapEl.transition(300).transform("translate3d(" + translateX + "px, " + translateY + "px,0
19939)");
19940      gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
19941    },
19942    out: function out() {
19943      var swiper = this;
19944      var zoom = swiper.zoom;
19945      var params = swiper.params.zoom;
19946      var gesture = zoom.gesture;
19947
19948      if (!gesture.$slideEl) {
19949        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
19950          gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass);
19951        } else {
19952          gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
19953        }
19954
19955        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
19956        gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
19957      }
19958
19959      if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;
19960      zoom.scale = 1;
19961      zoom.currentScale = 1;
19962      gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
19963      gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
19964      gesture.$slideEl.removeClass("" + params.zoomedSlideClass);
19965      gesture.$slideEl = undefined;
19966    },
19967    toggleGestures: function toggleGestures(method) {
19968      var swiper = this;
19969      var zoom = swiper.zoom;
19970      var selector = zoom.slideSelector,
19971          passive = zoom.passiveListener;
19972      swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive);
19973      swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive);
19974      swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive);
19975    },
19976    enableGestures: function enableGestures() {
19977      if (this.zoom.gesturesEnabled) return;
19978      this.zoom.gesturesEnabled = true;
19979      this.zoom.toggleGestures('on');
19980    },
19981    disableGestures: function disableGestures() {
19982      if (!this.zoom.gesturesEnabled) return;
19983      this.zoom.gesturesEnabled = false;
19984      this.zoom.toggleGestures('off');
19985    },
19986    enable: function enable() {
19987      var swiper = this;
19988      var support = swiper.support;
19989      var zoom = swiper.zoom;
19990      if (zoom.enabled) return;
19991      zoom.enabled = true;
19992      var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {
19993        passive: true,
19994        capture: false
19995      } : false;
19996      var activeListenerWithCapture = support.passiveListener ? {
19997        passive: false,
19998        capture: true
19999      } : true;
20000      var slideSelector = "." + swiper.params.slideClass;
20001      swiper.zoom.passiveListener = passiveListener;
20002      swiper.zoom.slideSelector = slideSelector;
20003
20004      if (support.gestures) {
20005        swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);
20006        swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);
20007      } else if (swiper.touchEvents.start === 'touchstart') {
20008        swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
20009        swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
20010        swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
20011
20012        if (swiper.touchEvents.cancel) {
20013          swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
20014        }
20015      }
20016
20017      swiper.$wrapperEl.on(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);
20018    },
20019    disable: function disable() {
20020      var swiper = this;
20021      var zoom = swiper.zoom;
20022      if (!zoom.enabled) return;
20023      var support = swiper.support;
20024      swiper.zoom.enabled = false;
20025      var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {
20026        passive: true,
20027        capture: false
20028      } : false;
20029      var activeListenerWithCapture = support.passiveListener ? {
20030        passive: false,
20031        capture: true
20032      } : true;
20033      var slideSelector = "." + swiper.params.slideClass;
20034
20035      if (support.gestures) {
20036        swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);
20037        swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);
20038      } else if (swiper.touchEvents.start === 'touchstart') {
20039        swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
20040        swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
20041        swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
20042
20043        if (swiper.touchEvents.cancel) {
20044          swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
20045        }
20046      }
20047
20048      swiper.$wrapperEl.off(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);
20049    }
20050  };
20051  var Zoom$1 = {
20052    name: 'zoom',
20053    params: {
20054      zoom: {
20055        enabled: false,
20056        maxRatio: 3,
20057        minRatio: 1,
20058        toggle: true,
20059        containerClass: 'swiper-zoom-container',
20060        zoomedSlideClass: 'swiper-slide-zoomed'
20061      }
20062    },
20063    create: function create() {
20064      var swiper = this;
20065      bindModuleMethods(swiper, {
20066        zoom: _extends({
20067          enabled: false,
20068          scale: 1,
20069          currentScale: 1,
20070          isScaling: false,
20071          gesture: {
20072            $slideEl: undefined,
20073            slideWidth: undefined,
20074            slideHeight: undefined,
20075            $imageEl: undefined,
20076            $imageWrapEl: undefined,
20077            maxRatio: 3
20078          },
20079          image: {
20080            isTouched: undefined,
20081            isMoved: undefined,
20082            currentX: undefined,
20083            currentY: undefined,
20084            minX: undefined,
20085            minY: undefined,
20086            maxX: undefined,
20087            maxY: undefined,
20088            width: undefined,
20089            height: undefined,
20090            startX: undefined,
20091            startY: undefined,
20092            touchesStart: {},
20093            touchesCurrent: {}
20094          },
20095          velocity: {
20096            x: undefined,
20097            y: undefined,
20098            prevPositionX: undefined,
20099            prevPositionY: undefined,
20100            prevTime: undefined
20101          }
20102        }, Zoom)
20103      });
20104      var scale = 1;
20105      Object.defineProperty(swiper.zoom, 'scale', {
20106        get: function get() {
20107          return scale;
20108        },
20109        set: function set(value) {
20110          if (scale !== value) {
20111            var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
20112            var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
20113            swiper.emit('zoomChange', value, imageEl, slideEl);
20114          }
20115
20116          scale = value;
20117        }
20118      });
20119    },
20120    on: {
20121      init: function init(swiper) {
20122        if (swiper.params.zoom.enabled) {
20123          swiper.zoom.enable();
20124        }
20125      },
20126      destroy: function destroy(swiper) {
20127        swiper.zoom.disable();
20128      },
20129      touchStart: function touchStart(swiper, e) {
20130        if (!swiper.zoom.enabled) return;
20131        swiper.zoom.onTouchStart(e);
20132      },
20133      touchEnd: function touchEnd(swiper, e) {
20134        if (!swiper.zoom.enabled) return;
20135        swiper.zoom.onTouchEnd(e);
20136      },
20137      doubleTap: function doubleTap(swiper, e) {
20138        if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
20139          swiper.zoom.toggle(e);
20140        }
20141      },
20142      transitionEnd: function transitionEnd(swiper) {
20143        if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
20144          swiper.zoom.onTransitionEnd();
20145        }
20146      },
20147      slideChange: function slideChange(swiper) {
20148        if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
20149          swiper.zoom.onTransitionEnd();
20150        }
20151      }
20152    }
20153  };
20154  var Lazy = {
20155    loadInSlide: function loadInSlide(index, loadInDuplicate) {
20156      if (loadInDuplicate === void 0) {
20157        loadInDuplicate = true;
20158      }
20159
20160      var swiper = this;
20161      var params = swiper.params.lazy;
20162      if (typeof index === 'undefined') return;
20163      if (swiper.slides.length === 0) return;
20164      var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
20165      var $slideEl = isVirtual ? swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + index + "\"]") : swiper.slides.eq(index);
20166      var $images = $slideEl.find("." + params.elementClass + ":not(." + params.loadedClass + "):not(." + params.loadingClass + ")");
20167
20168      if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
20169        $images.push($slideEl[0]);
20170      }
20171
20172      if ($images.length === 0) return;
20173      $images.each(function (imageEl) {
20174        var $imageEl = $(imageEl);
20175        $imageEl.addClass(params.loadingClass);
20176        var background = $imageEl.attr('data-background');
20177        var src = $imageEl.attr('data-src');
20178        var srcset = $imageEl.attr('data-srcset');
20179        var sizes = $imageEl.attr('data-sizes');
20180        var $pictureEl = $imageEl.parent('picture');
20181        swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {
20182          if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;
20183
20184          if (background) {
20185            $imageEl.css('background-image', "url(\"" + background + "\")");
20186            $imageEl.removeAttr('data-background');
20187          } else {
20188            if (srcset) {
20189              $imageEl.attr('srcset', srcset);
20190              $imageEl.removeAttr('data-srcset');
20191            }
20192
20193            if (sizes) {
20194              $imageEl.attr('sizes', sizes);
20195              $imageEl.removeAttr('data-sizes');
20196            }
20197
20198            if ($pictureEl.length) {
20199              $pictureEl.children('source').each(function (sourceEl) {
20200                var $source = $(sourceEl);
20201
20202                if ($source.attr('data-srcset')) {
20203                  $source.attr('srcset', $source.attr('data-srcset'));
20204                  $source.removeAttr('data-srcset');
20205                }
20206              });
20207            }
20208
20209            if (src) {
20210              $imageEl.attr('src', src);
20211              $imageEl.removeAttr('data-src');
20212            }
20213          }
20214
20215          $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
20216          $slideEl.find("." + params.preloaderClass).remove();
20217
20218          if (swiper.params.loop && loadInDuplicate) {
20219            var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
20220
20221            if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
20222              var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + swiper.params.slideDuplicateClass + ")");
20223              swiper.lazy.loadInSlide(originalSlide.index(), false);
20224            } else {
20225              var duplicatedSlide = swiper.$wrapperEl.children("." + swiper.params.slideDuplicateClass + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]");
20226              swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
20227            }
20228          }
20229
20230          swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
20231
20232          if (swiper.params.autoHeight) {
20233            swiper.updateAutoHeight();
20234          }
20235        });
20236        swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
20237      });
20238    },
20239    load: function load() {
20240      var swiper = this;
20241      var $wrapperEl = swiper.$wrapperEl,
20242          swiperParams = swiper.params,
20243          slides = swiper.slides,
20244          activeIndex = swiper.activeIndex;
20245      var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
20246      var params = swiperParams.lazy;
20247      var slidesPerView = swiperParams.slidesPerView;
20248
20249      if (slidesPerView === 'auto') {
20250        slidesPerView = 0;
20251      }
20252
20253      function slideExist(index) {
20254        if (isVirtual) {
20255          if ($wrapperEl.children("." + swiperParams.slideClass + "[data-swiper-slide-index=\"" + index + "\"]").length) {
20256            return true;
20257          }
20258        } else if (slides[index]) return true;
20259
20260        return false;
20261      }
20262
20263      function slideIndex(slideEl) {
20264        if (isVirtual) {
20265          return $(slideEl).attr('data-swiper-slide-index');
20266        }
20267
20268        return $(slideEl).index();
20269      }
20270
20271      if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
20272
20273      if (swiper.params.watchSlidesVisibility) {
20274        $wrapperEl.children("." + swiperParams.slideVisibleClass).each(function (slideEl) {
20275          var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
20276          swiper.lazy.loadInSlide(index);
20277        });
20278      } else if (slidesPerView > 1) {
20279        for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
20280          if (slideExist(i)) swiper.lazy.loadInSlide(i);
20281        }
20282      } else {
20283        swiper.lazy.loadInSlide(activeIndex);
20284      }
20285
20286      if (params.loadPrevNext) {
20287        if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {
20288          var amount = params.loadPrevNextAmount;
20289          var spv = slidesPerView;
20290          var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
20291          var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
20292
20293          for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) {
20294            if (slideExist(_i)) swiper.lazy.loadInSlide(_i);
20295          }
20296
20297          for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) {
20298            if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2);
20299          }
20300        } else {
20301          var nextSlide = $wrapperEl.children("." + swiperParams.slideNextClass);
20302          if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
20303          var prevSlide = $wrapperEl.children("." + swiperParams.slidePrevClass);
20304          if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
20305        }
20306      }
20307    },
20308    checkInViewOnLoad: function checkInViewOnLoad() {
20309      var window = getWindow();
20310      var swiper = this;
20311      if (!swiper || swiper.destroyed) return;
20312      var $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);
20313      var isWindow = $scrollElement[0] === window;
20314      var scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;
20315      var scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;
20316      var swiperOffset = swiper.$el.offset();
20317      var rtl = swiper.rtlTranslate;
20318      var inView = false;
20319      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
20320      var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];
20321
20322      for (var i = 0; i < swiperCoord.length; i += 1) {
20323        var point = swiperCoord[i];
20324
20325        if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {
20326          if (point[0] === 0 && point[1] === 0) continue;
20327          inView = true;
20328        }
20329      }
20330
20331      var passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {
20332        passive: true,
20333        capture: false
20334      } : false;
20335
20336      if (inView) {
20337        swiper.lazy.load();
20338        $scrollElement.off('scroll', swiper.lazy.checkInViewOnLoad, passiveListener);
20339      } else if (!swiper.lazy.scrollHandlerAttached) {
20340        swiper.lazy.scrollHandlerAttached = true;
20341        $scrollElement.on('scroll', swiper.lazy.checkInViewOnLoad, passiveListener);
20342      }
20343    }
20344  };
20345  var Lazy$1 = {
20346    name: 'lazy',
20347    params: {
20348      lazy: {
20349        checkInView: false,
20350        enabled: false,
20351        loadPrevNext: false,
20352        loadPrevNextAmount: 1,
20353        loadOnTransitionStart: false,
20354        scrollingElement: '',
20355        elementClass: 'swiper-lazy',
20356        loadingClass: 'swiper-lazy-loading',
20357        loadedClass: 'swiper-lazy-loaded',
20358        preloaderClass: 'swiper-lazy-preloader'
20359      }
20360    },
20361    create: function create() {
20362      var swiper = this;
20363      bindModuleMethods(swiper, {
20364        lazy: _extends({
20365          initialImageLoaded: false
20366        }, Lazy)
20367      });
20368    },
20369    on: {
20370      beforeInit: function beforeInit(swiper) {
20371        if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
20372          swiper.params.preloadImages = false;
20373        }
20374      },
20375      init: function init(swiper) {
20376        if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
20377          if (swiper.params.lazy.checkInView) {
20378            swiper.lazy.checkInViewOnLoad();
20379          } else {
20380            swiper.lazy.load();
20381          }
20382        }
20383      },
20384      scroll: function scroll(swiper) {
20385        if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
20386          swiper.lazy.load();
20387        }
20388      },
20389      'scrollbarDragMove resize _freeModeNoMomentumRelease': function lazyLoad(swiper) {
20390        if (swiper.params.lazy.enabled) {
20391          swiper.lazy.load();
20392        }
20393      },
20394      transitionStart: function transitionStart(swiper) {
20395        if (swiper.params.lazy.enabled) {
20396          if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {
20397            swiper.lazy.load();
20398          }
20399        }
20400      },
20401      transitionEnd: function transitionEnd(swiper) {
20402        if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
20403          swiper.lazy.load();
20404        }
20405      },
20406      slideChange: function slideChange(swiper) {
20407        if (swiper.params.lazy.enabled && swiper.params.cssMode) {
20408          swiper.lazy.load();
20409        }
20410      }
20411    }
20412  };
20413  var Controller = {
20414    LinearSpline: function LinearSpline(x, y) {
20415      var binarySearch = function search() {
20416        var maxIndex;
20417        var minIndex;
20418        var guess;
20419        return function (array, val) {
20420          minIndex = -1;
20421          maxIndex = array.length;
20422
20423          while (maxIndex - minIndex > 1) {
20424            guess = maxIndex + minIndex >> 1;
20425
20426            if (array[guess] <= val) {
20427              minIndex = guess;
20428            } else {
20429              maxIndex = guess;
20430            }
20431          }
20432
20433          return maxIndex;
20434        };
20435      }();
20436
20437      this.x = x;
20438      this.y = y;
20439      this.lastIndex = x.length - 1;
20440      var i1;
20441      var i3;
20442
20443      this.interpolate = function interpolate(x2) {
20444        if (!x2) return 0;
20445        i3 = binarySearch(this.x, x2);
20446        i1 = i3 - 1;
20447        return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
20448      };
20449
20450      return this;
20451    },
20452    getInterpolateFunction: function getInterpolateFunction(c) {
20453      var swiper = this;
20454
20455      if (!swiper.controller.spline) {
20456        swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
20457      }
20458    },
20459    setTranslate: function setTranslate(_setTranslate, byController) {
20460      var swiper = this;
20461      var controlled = swiper.controller.control;
20462      var multiplier;
20463      var controlledTranslate;
20464      var Swiper = swiper.constructor;
20465
20466      function setControlledTranslate(c) {
20467        var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
20468
20469        if (swiper.params.controller.by === 'slide') {
20470          swiper.controller.getInterpolateFunction(c);
20471          controlledTranslate = -swiper.controller.spline.interpolate(-translate);
20472        }
20473
20474        if (!controlledTranslate || swiper.params.controller.by === 'container') {
20475          multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
20476          controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
20477        }
20478
20479        if (swiper.params.controller.inverse) {
20480          controlledTranslate = c.maxTranslate() - controlledTranslate;
20481        }
20482
20483        c.updateProgress(controlledTranslate);
20484        c.setTranslate(controlledTranslate, swiper);
20485        c.updateActiveIndex();
20486        c.updateSlidesClasses();
20487      }
20488
20489      if (Array.isArray(controlled)) {
20490        for (var i = 0; i < controlled.length; i += 1) {
20491          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
20492            setControlledTranslate(controlled[i]);
20493          }
20494        }
20495      } else if (controlled instanceof Swiper && byController !== controlled) {
20496        setControlledTranslate(controlled);
20497      }
20498    },
20499    setTransition: function setTransition(duration, byController) {
20500      var swiper = this;
20501      var Swiper = swiper.constructor;
20502      var controlled = swiper.controller.control;
20503      var i;
20504
20505      function setControlledTransition(c) {
20506        c.setTransition(duration, swiper);
20507
20508        if (duration !== 0) {
20509          c.transitionStart();
20510
20511          if (c.params.autoHeight) {
20512            nextTick(function () {
20513              c.updateAutoHeight();
20514            });
20515          }
20516
20517          c.$wrapperEl.transitionEnd(function () {
20518            if (!controlled) return;
20519
20520            if (c.params.loop && swiper.params.controller.by === 'slide') {
20521              c.loopFix();
20522            }
20523
20524            c.transitionEnd();
20525          });
20526        }
20527      }
20528
20529      if (Array.isArray(controlled)) {
20530        for (i = 0; i < controlled.length; i += 1) {
20531          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
20532            setControlledTransition(controlled[i]);
20533          }
20534        }
20535      } else if (controlled instanceof Swiper && byController !== controlled) {
20536        setControlledTransition(controlled);
20537      }
20538    }
20539  };
20540  var Controller$1 = {
20541    name: 'controller',
20542    params: {
20543      controller: {
20544        control: undefined,
20545        inverse: false,
20546        by: 'slide'
20547      }
20548    },
20549    create: function create() {
20550      var swiper = this;
20551      bindModuleMethods(swiper, {
20552        controller: _extends({
20553          control: swiper.params.controller.control
20554        }, Controller)
20555      });
20556    },
20557    on: {
20558      update: function update(swiper) {
20559        if (!swiper.controller.control) return;
20560
20561        if (swiper.controller.spline) {
20562          swiper.controller.spline = undefined;
20563          delete swiper.controller.spline;
20564        }
20565      },
20566      resize: function resize(swiper) {
20567        if (!swiper.controller.control) return;
20568
20569        if (swiper.controller.spline) {
20570          swiper.controller.spline = undefined;
20571          delete swiper.controller.spline;
20572        }
20573      },
20574      observerUpdate: function observerUpdate(swiper) {
20575        if (!swiper.controller.control) return;
20576
20577        if (swiper.controller.spline) {
20578          swiper.controller.spline = undefined;
20579          delete swiper.controller.spline;
20580        }
20581      },
20582      setTranslate: function setTranslate(swiper, translate, byController) {
20583        if (!swiper.controller.control) return;
20584        swiper.controller.setTranslate(translate, byController);
20585      },
20586      setTransition: function setTransition(swiper, duration, byController) {
20587        if (!swiper.controller.control) return;
20588        swiper.controller.setTransition(duration, byController);
20589      }
20590    }
20591  };
20592  var A11y = {
20593    getRandomNumber: function getRandomNumber(size) {
20594      if (size === void 0) {
20595        size = 16;
20596      }
20597
20598      var randomChar = function randomChar() {
20599        return Math.round(16 * Math.random()).toString(16);
20600      };
20601
20602      return 'x'.repeat(size).replace(/x/g, randomChar);
20603    },
20604    makeElFocusable: function makeElFocusable($el) {
20605      $el.attr('tabIndex', '0');
20606      return $el;
20607    },
20608    makeElNotFocusable: function makeElNotFocusable($el) {
20609      $el.attr('tabIndex', '-1');
20610      return $el;
20611    },
20612    addElRole: function addElRole($el, role) {
20613      $el.attr('role', role);
20614      return $el;
20615    },
20616    addElRoleDescription: function addElRoleDescription($el, description) {
20617      $el.attr('aria-roledescription', description);
20618      return $el;
20619    },
20620    addElControls: function addElControls($el, controls) {
20621      $el.attr('aria-controls', controls);
20622      return $el;
20623    },
20624    addElLabel: function addElLabel($el, label) {
20625      $el.attr('aria-label', label);
20626      return $el;
20627    },
20628    addElId: function addElId($el, id) {
20629      $el.attr('id', id);
20630      return $el;
20631    },
20632    addElLive: function addElLive($el, live) {
20633      $el.attr('aria-live', live);
20634      return $el;
20635    },
20636    disableEl: function disableEl($el) {
20637      $el.attr('aria-disabled', true);
20638      return $el;
20639    },
20640    enableEl: function enableEl($el) {
20641      $el.attr('aria-disabled', false);
20642      return $el;
20643    },
20644    onEnterOrSpaceKey: function onEnterOrSpaceKey(e) {
20645      if (e.keyCode !== 13 && e.keyCode !== 32) return;
20646      var swiper = this;
20647      var params = swiper.params.a11y;
20648      var $targetEl = $(e.target);
20649
20650      if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
20651        if (!(swiper.isEnd && !swiper.params.loop)) {
20652          swiper.slideNext();
20653        }
20654
20655        if (swiper.isEnd) {
20656          swiper.a11y.notify(params.lastSlideMessage);
20657        } else {
20658          swiper.a11y.notify(params.nextSlideMessage);
20659        }
20660      }
20661
20662      if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
20663        if (!(swiper.isBeginning && !swiper.params.loop)) {
20664          swiper.slidePrev();
20665        }
20666
20667        if (swiper.isBeginning) {
20668          swiper.a11y.notify(params.firstSlideMessage);
20669        } else {
20670          swiper.a11y.notify(params.prevSlideMessage);
20671        }
20672      }
20673
20674      if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {
20675        $targetEl[0].click();
20676      }
20677    },
20678    notify: function notify(message) {
20679      var swiper = this;
20680      var notification = swiper.a11y.liveRegion;
20681      if (notification.length === 0) return;
20682      notification.html('');
20683      notification.html(message);
20684    },
20685    updateNavigation: function updateNavigation() {
20686      var swiper = this;
20687      if (swiper.params.loop || !swiper.navigation) return;
20688      var _swiper$navigation = swiper.navigation,
20689          $nextEl = _swiper$navigation.$nextEl,
20690          $prevEl = _swiper$navigation.$prevEl;
20691
20692      if ($prevEl && $prevEl.length > 0) {
20693        if (swiper.isBeginning) {
20694          swiper.a11y.disableEl($prevEl);
20695          swiper.a11y.makeElNotFocusable($prevEl);
20696        } else {
20697          swiper.a11y.enableEl($prevEl);
20698          swiper.a11y.makeElFocusable($prevEl);
20699        }
20700      }
20701
20702      if ($nextEl && $nextEl.length > 0) {
20703        if (swiper.isEnd) {
20704          swiper.a11y.disableEl($nextEl);
20705          swiper.a11y.makeElNotFocusable($nextEl);
20706        } else {
20707          swiper.a11y.enableEl($nextEl);
20708          swiper.a11y.makeElFocusable($nextEl);
20709        }
20710      }
20711    },
20712    updatePagination: function updatePagination() {
20713      var swiper = this;
20714      var params = swiper.params.a11y;
20715
20716      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
20717        swiper.pagination.bullets.each(function (bulletEl) {
20718          var $bulletEl = $(bulletEl);
20719          swiper.a11y.makeElFocusable($bulletEl);
20720
20721          if (!swiper.params.pagination.renderBullet) {
20722            swiper.a11y.addElRole($bulletEl, 'button');
20723            swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
20724          }
20725        });
20726      }
20727    },
20728    init: function init() {
20729      var swiper = this;
20730      var params = swiper.params.a11y;
20731      swiper.$el.append(swiper.a11y.liveRegion);
20732      var $containerEl = swiper.$el;
20733
20734      if (params.containerRoleDescriptionMessage) {
20735        swiper.a11y.addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);
20736      }
20737
20738      if (params.containerMessage) {
20739        swiper.a11y.addElLabel($containerEl, params.containerMessage);
20740      }
20741
20742      var $wrapperEl = swiper.$wrapperEl;
20743      var wrapperId = $wrapperEl.attr('id') || "swiper-wrapper-" + swiper.a11y.getRandomNumber(16);
20744      var live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';
20745      swiper.a11y.addElId($wrapperEl, wrapperId);
20746      swiper.a11y.addElLive($wrapperEl, live);
20747
20748      if (params.itemRoleDescriptionMessage) {
20749        swiper.a11y.addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);
20750      }
20751
20752      swiper.a11y.addElRole($(swiper.slides), params.slideRole);
20753      swiper.slides.each(function (slideEl) {
20754        var $slideEl = $(slideEl);
20755        var ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, $slideEl.index() + 1).replace(/\{\{slidesLength\}\}/, swiper.slides.length);
20756        swiper.a11y.addElLabel($slideEl, ariaLabelMessage);
20757      });
20758      var $nextEl;
20759      var $prevEl;
20760
20761      if (swiper.navigation && swiper.navigation.$nextEl) {
20762        $nextEl = swiper.navigation.$nextEl;
20763      }
20764
20765      if (swiper.navigation && swiper.navigation.$prevEl) {
20766        $prevEl = swiper.navigation.$prevEl;
20767      }
20768
20769      if ($nextEl && $nextEl.length) {
20770        swiper.a11y.makeElFocusable($nextEl);
20771
20772        if ($nextEl[0].tagName !== 'BUTTON') {
20773          swiper.a11y.addElRole($nextEl, 'button');
20774          $nextEl.on('keydown', swiper.a11y.onEnterOrSpaceKey);
20775        }
20776
20777        swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
20778        swiper.a11y.addElControls($nextEl, wrapperId);
20779      }
20780
20781      if ($prevEl && $prevEl.length) {
20782        swiper.a11y.makeElFocusable($prevEl);
20783
20784        if ($prevEl[0].tagName !== 'BUTTON') {
20785          swiper.a11y.addElRole($prevEl, 'button');
20786          $prevEl.on('keydown', swiper.a11y.onEnterOrSpaceKey);
20787        }
20788
20789        swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
20790        swiper.a11y.addElControls($prevEl, wrapperId);
20791      }
20792
20793      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
20794        swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), swiper.a11y.onEnterOrSpaceKey);
20795      }
20796    },
20797    destroy: function destroy() {
20798      var swiper = this;
20799      if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
20800      var $nextEl;
20801      var $prevEl;
20802
20803      if (swiper.navigation && swiper.navigation.$nextEl) {
20804        $nextEl = swiper.navigation.$nextEl;
20805      }
20806
20807      if (swiper.navigation && swiper.navigation.$prevEl) {
20808        $prevEl = swiper.navigation.$prevEl;
20809      }
20810
20811      if ($nextEl) {
20812        $nextEl.off('keydown', swiper.a11y.onEnterOrSpaceKey);
20813      }
20814
20815      if ($prevEl) {
20816        $prevEl.off('keydown', swiper.a11y.onEnterOrSpaceKey);
20817      }
20818
20819      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
20820        swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), swiper.a11y.onEnterOrSpaceKey);
20821      }
20822    }
20823  };
20824  var A11y$1 = {
20825    name: 'a11y',
20826    params: {
20827      a11y: {
20828        enabled: true,
20829        notificationClass: 'swiper-notification',
20830        prevSlideMessage: 'Previous slide',
20831        nextSlideMessage: 'Next slide',
20832        firstSlideMessage: 'This is the first slide',
20833        lastSlideMessage: 'This is the last slide',
20834        paginationBulletMessage: 'Go to slide {{index}}',
20835        slideLabelMessage: '{{index}} / {{slidesLength}}',
20836        containerMessage: null,
20837        containerRoleDescriptionMessage: null,
20838        itemRoleDescriptionMessage: null,
20839        slideRole: 'group'
20840      }
20841    },
20842    create: function create() {
20843      var swiper = this;
20844      bindModuleMethods(swiper, {
20845        a11y: _extends({}, A11y, {
20846          liveRegion: $("<span class=\"" + swiper.params.a11y.notificationClass + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>")
20847        })
20848      });
20849    },
20850    on: {
20851      afterInit: function afterInit(swiper) {
20852        if (!swiper.params.a11y.enabled) return;
20853        swiper.a11y.init();
20854        swiper.a11y.updateNavigation();
20855      },
20856      toEdge: function toEdge(swiper) {
20857        if (!swiper.params.a11y.enabled) return;
20858        swiper.a11y.updateNavigation();
20859      },
20860      fromEdge: function fromEdge(swiper) {
20861        if (!swiper.params.a11y.enabled) return;
20862        swiper.a11y.updateNavigation();
20863      },
20864      paginationUpdate: function paginationUpdate(swiper) {
20865        if (!swiper.params.a11y.enabled) return;
20866        swiper.a11y.updatePagination();
20867      },
20868      destroy: function destroy(swiper) {
20869        if (!swiper.params.a11y.enabled) return;
20870        swiper.a11y.destroy();
20871      }
20872    }
20873  };
20874  var History = {
20875    init: function init() {
20876      var swiper = this;
20877      var window = getWindow();
20878      if (!swiper.params.history) return;
20879
20880      if (!window.history || !window.history.pushState) {
20881        swiper.params.history.enabled = false;
20882        swiper.params.hashNavigation.enabled = true;
20883        return;
20884      }
20885
20886      var history = swiper.history;
20887      history.initialized = true;
20888      history.paths = History.getPathValues(swiper.params.url);
20889      if (!history.paths.key && !history.paths.value) return;
20890      history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
20891
20892      if (!swiper.params.history.replaceState) {
20893        window.addEventListener('popstate', swiper.history.setHistoryPopState);
20894      }
20895    },
20896    destroy: function destroy() {
20897      var swiper = this;
20898      var window = getWindow();
20899
20900      if (!swiper.params.history.replaceState) {
20901        window.removeEventListener('popstate', swiper.history.setHistoryPopState);
20902      }
20903    },
20904    setHistoryPopState: function setHistoryPopState() {
20905      var swiper = this;
20906      swiper.history.paths = History.getPathValues(swiper.params.url);
20907      swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
20908    },
20909    getPathValues: function getPathValues(urlOverride) {
20910      var window = getWindow();
20911      var location;
20912
20913      if (urlOverride) {
20914        location = new URL(urlOverride);
20915      } else {
20916        location = window.location;
20917      }
20918
20919      var pathArray = location.pathname.slice(1).split('/').filter(function (part) {
20920        return part !== '';
20921      });
20922      var total = pathArray.length;
20923      var key = pathArray[total - 2];
20924      var value = pathArray[total - 1];
20925      return {
20926        key: key,
20927        value: value
20928      };
20929    },
20930    setHistory: function setHistory(key, index) {
20931      var swiper = this;
20932      var window = getWindow();
20933      if (!swiper.history.initialized || !swiper.params.history.enabled) return;
20934      var location;
20935
20936      if (swiper.params.url) {
20937        location = new URL(swiper.params.url);
20938      } else {
20939        location = window.location;
20940      }
20941
20942      var slide = swiper.slides.eq(index);
20943      var value = History.slugify(slide.attr('data-history'));
20944
20945      if (swiper.params.history.root.length > 0) {
20946        var root = swiper.params.history.root;
20947        if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);
20948        value = root + "/" + key + "/" + value;
20949      } else if (!location.pathname.includes(key)) {
20950        value = key + "/" + value;
20951      }
20952
20953      var currentState = window.history.state;
20954
20955      if (currentState && currentState.value === value) {
20956        return;
20957      }
20958
20959      if (swiper.params.history.replaceState) {
20960        window.history.replaceState({
20961          value: value
20962        }, null, value);
20963      } else {
20964        window.history.pushState({
20965          value: value
20966        }, null, value);
20967      }
20968    },
20969    slugify: function slugify(text) {
20970      return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
20971    },
20972    scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
20973      var swiper = this;
20974
20975      if (value) {
20976        for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
20977          var slide = swiper.slides.eq(i);
20978          var slideHistory = History.slugify(slide.attr('data-history'));
20979
20980          if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
20981            var index = slide.index();
20982            swiper.slideTo(index, speed, runCallbacks);
20983          }
20984        }
20985      } else {
20986        swiper.slideTo(0, speed, runCallbacks);
20987      }
20988    }
20989  };
20990  var History$1 = {
20991    name: 'history',
20992    params: {
20993      history: {
20994        enabled: false,
20995        root: '',
20996        replaceState: false,
20997        key: 'slides'
20998      }
20999    },
21000    create: function create() {
21001      var swiper = this;
21002      bindModuleMethods(swiper, {
21003        history: _extends({}, History)
21004      });
21005    },
21006    on: {
21007      init: function init(swiper) {
21008        if (swiper.params.history.enabled) {
21009          swiper.history.init();
21010        }
21011      },
21012      destroy: function destroy(swiper) {
21013        if (swiper.params.history.enabled) {
21014          swiper.history.destroy();
21015        }
21016      },
21017      'transitionEnd _freeModeNoMomentumRelease': function transitionEnd_freeModeNoMomentumRelease(swiper) {
21018        if (swiper.history.initialized) {
21019          swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
21020        }
21021      },
21022      slideChange: function slideChange(swiper) {
21023        if (swiper.history.initialized && swiper.params.cssMode) {
21024          swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
21025        }
21026      }
21027    }
21028  };
21029  var HashNavigation = {
21030    onHashCange: function onHashCange() {
21031      var swiper = this;
21032      var document = getDocument();
21033      swiper.emit('hashChange');
21034      var newHash = document.location.hash.replace('#', '');
21035      var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
21036
21037      if (newHash !== activeSlideHash) {
21038        var newIndex = swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-hash=\"" + newHash + "\"]").index();
21039        if (typeof newIndex === 'undefined') return;
21040        swiper.slideTo(newIndex);
21041      }
21042    },
21043    setHash: function setHash() {
21044      var swiper = this;
21045      var window = getWindow();
21046      var document = getDocument();
21047      if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
21048
21049      if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {
21050        window.history.replaceState(null, null, "#" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || '');
21051        swiper.emit('hashSet');
21052      } else {
21053        var slide = swiper.slides.eq(swiper.activeIndex);
21054        var hash = slide.attr('data-hash') || slide.attr('data-history');
21055        document.location.hash = hash || '';
21056        swiper.emit('hashSet');
21057      }
21058    },
21059    init: function init() {
21060      var swiper = this;
21061      var document = getDocument();
21062      var window = getWindow();
21063      if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;
21064      swiper.hashNavigation.initialized = true;
21065      var hash = document.location.hash.replace('#', '');
21066
21067      if (hash) {
21068        var speed = 0;
21069
21070        for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
21071          var slide = swiper.slides.eq(i);
21072          var slideHash = slide.attr('data-hash') || slide.attr('data-history');
21073
21074          if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
21075            var index = slide.index();
21076            swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
21077          }
21078        }
21079      }
21080
21081      if (swiper.params.hashNavigation.watchState) {
21082        $(window).on('hashchange', swiper.hashNavigation.onHashCange);
21083      }
21084    },
21085    destroy: function destroy() {
21086      var swiper = this;
21087      var window = getWindow();
21088
21089      if (swiper.params.hashNavigation.watchState) {
21090        $(window).off('hashchange', swiper.hashNavigation.onHashCange);
21091      }
21092    }
21093  };
21094  var HashNavigation$1 = {
21095    name: 'hash-navigation',
21096    params: {
21097      hashNavigation: {
21098        enabled: false,
21099        replaceState: false,
21100        watchState: false
21101      }
21102    },
21103    create: function create() {
21104      var swiper = this;
21105      bindModuleMethods(swiper, {
21106        hashNavigation: _extends({
21107          initialized: false
21108        }, HashNavigation)
21109      });
21110    },
21111    on: {
21112      init: function init(swiper) {
21113        if (swiper.params.hashNavigation.enabled) {
21114          swiper.hashNavigation.init();
21115        }
21116      },
21117      destroy: function destroy(swiper) {
21118        if (swiper.params.hashNavigation.enabled) {
21119          swiper.hashNavigation.destroy();
21120        }
21121      },
21122      'transitionEnd _freeModeNoMomentumRelease': function transitionEnd_freeModeNoMomentumRelease(swiper) {
21123        if (swiper.hashNavigation.initialized) {
21124          swiper.hashNavigation.setHash();
21125        }
21126      },
21127      slideChange: function slideChange(swiper) {
21128        if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
21129          swiper.hashNavigation.setHash();
21130        }
21131      }
21132    }
21133  };
21134  var Autoplay = {
21135    run: function run() {
21136      var swiper = this;
21137      var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
21138      var delay = swiper.params.autoplay.delay;
21139
21140      if ($activeSlideEl.attr('data-swiper-autoplay')) {
21141        delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
21142      }
21143
21144      clearTimeout(swiper.autoplay.timeout);
21145      swiper.autoplay.timeout = nextTick(function () {
21146        var autoplayResult;
21147
21148        if (swiper.params.autoplay.reverseDirection) {
21149          if (swiper.params.loop) {
21150            swiper.loopFix();
21151            autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);
21152            swiper.emit('autoplay');
21153          } else if (!swiper.isBeginning) {
21154            autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);
21155            swiper.emit('autoplay');
21156          } else if (!swiper.params.autoplay.stopOnLastSlide) {
21157            autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
21158            swiper.emit('autoplay');
21159          } else {
21160            swiper.autoplay.stop();
21161          }
21162        } else if (swiper.params.loop) {
21163          swiper.loopFix();
21164          autoplayResult = swiper.slideNext(swiper.params.speed, true, true);
21165          swiper.emit('autoplay');
21166        } else if (!swiper.isEnd) {
21167          autoplayResult = swiper.slideNext(swiper.params.speed, true, true);
21168          swiper.emit('autoplay');
21169        } else if (!swiper.params.autoplay.stopOnLastSlide) {
21170          autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);
21171          swiper.emit('autoplay');
21172        } else {
21173          swiper.autoplay.stop();
21174        }
21175
21176        if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();else if (autoplayResult === false) {
21177          swiper.autoplay.run();
21178        }
21179      }, delay);
21180    },
21181    start: function start() {
21182      var swiper = this;
21183      if (typeof swiper.autoplay.timeout !== 'undefined') return false;
21184      if (swiper.autoplay.running) return false;
21185      swiper.autoplay.running = true;
21186      swiper.emit('autoplayStart');
21187      swiper.autoplay.run();
21188      return true;
21189    },
21190    stop: function stop() {
21191      var swiper = this;
21192      if (!swiper.autoplay.running) return false;
21193      if (typeof swiper.autoplay.timeout === 'undefined') return false;
21194
21195      if (swiper.autoplay.timeout) {
21196        clearTimeout(swiper.autoplay.timeout);
21197        swiper.autoplay.timeout = undefined;
21198      }
21199
21200      swiper.autoplay.running = false;
21201      swiper.emit('autoplayStop');
21202      return true;
21203    },
21204    pause: function pause(speed) {
21205      var swiper = this;
21206      if (!swiper.autoplay.running) return;
21207      if (swiper.autoplay.paused) return;
21208      if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
21209      swiper.autoplay.paused = true;
21210
21211      if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
21212        swiper.autoplay.paused = false;
21213        swiper.autoplay.run();
21214      } else {
21215        ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {
21216          swiper.$wrapperEl[0].addEventListener(event, swiper.autoplay.onTransitionEnd);
21217        });
21218      }
21219    },
21220    onVisibilityChange: function onVisibilityChange() {
21221      var swiper = this;
21222      var document = getDocument();
21223
21224      if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
21225        swiper.autoplay.pause();
21226      }
21227
21228      if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
21229        swiper.autoplay.run();
21230        swiper.autoplay.paused = false;
21231      }
21232    },
21233    onTransitionEnd: function onTransitionEnd(e) {
21234      var swiper = this;
21235      if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
21236      if (e.target !== swiper.$wrapperEl[0]) return;
21237      ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {
21238        swiper.$wrapperEl[0].removeEventListener(event, swiper.autoplay.onTransitionEnd);
21239      });
21240      swiper.autoplay.paused = false;
21241
21242      if (!swiper.autoplay.running) {
21243        swiper.autoplay.stop();
21244      } else {
21245        swiper.autoplay.run();
21246      }
21247    },
21248    onMouseEnter: function onMouseEnter() {
21249      var swiper = this;
21250
21251      if (swiper.params.autoplay.disableOnInteraction) {
21252        swiper.autoplay.stop();
21253      } else {
21254        swiper.autoplay.pause();
21255      }
21256
21257      ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {
21258        swiper.$wrapperEl[0].removeEventListener(event, swiper.autoplay.onTransitionEnd);
21259      });
21260    },
21261    onMouseLeave: function onMouseLeave() {
21262      var swiper = this;
21263
21264      if (swiper.params.autoplay.disableOnInteraction) {
21265        return;
21266      }
21267
21268      swiper.autoplay.paused = false;
21269      swiper.autoplay.run();
21270    },
21271    attachMouseEvents: function attachMouseEvents() {
21272      var swiper = this;
21273
21274      if (swiper.params.autoplay.pauseOnMouseEnter) {
21275        swiper.$el.on('mouseenter', swiper.autoplay.onMouseEnter);
21276        swiper.$el.on('mouseleave', swiper.autoplay.onMouseLeave);
21277      }
21278    },
21279    detachMouseEvents: function detachMouseEvents() {
21280      var swiper = this;
21281      swiper.$el.off('mouseenter', swiper.autoplay.onMouseEnter);
21282      swiper.$el.off('mouseleave', swiper.autoplay.onMouseLeave);
21283    }
21284  };
21285  var Autoplay$1 = {
21286    name: 'autoplay',
21287    params: {
21288      autoplay: {
21289        enabled: false,
21290        delay: 3000,
21291        waitForTransition: true,
21292        disableOnInteraction: true,
21293        stopOnLastSlide: false,
21294        reverseDirection: false,
21295        pauseOnMouseEnter: false
21296      }
21297    },
21298    create: function create() {
21299      var swiper = this;
21300      bindModuleMethods(swiper, {
21301        autoplay: _extends({}, Autoplay, {
21302          running: false,
21303          paused: false
21304        })
21305      });
21306    },
21307    on: {
21308      init: function init(swiper) {
21309        if (swiper.params.autoplay.enabled) {
21310          swiper.autoplay.start();
21311          var document = getDocument();
21312          document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
21313          swiper.autoplay.attachMouseEvents();
21314        }
21315      },
21316      beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) {
21317        if (swiper.autoplay.running) {
21318          if (internal || !swiper.params.autoplay.disableOnInteraction) {
21319            swiper.autoplay.pause(speed);
21320          } else {
21321            swiper.autoplay.stop();
21322          }
21323        }
21324      },
21325      sliderFirstMove: function sliderFirstMove(swiper) {
21326        if (swiper.autoplay.running) {
21327          if (swiper.params.autoplay.disableOnInteraction) {
21328            swiper.autoplay.stop();
21329          } else {
21330            swiper.autoplay.pause();
21331          }
21332        }
21333      },
21334      touchEnd: function touchEnd(swiper) {
21335        if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
21336          swiper.autoplay.run();
21337        }
21338      },
21339      destroy: function destroy(swiper) {
21340        swiper.autoplay.detachMouseEvents();
21341
21342        if (swiper.autoplay.running) {
21343          swiper.autoplay.stop();
21344        }
21345
21346        var document = getDocument();
21347        document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
21348      }
21349    }
21350  };
21351  var Fade = {
21352    setTranslate: function setTranslate() {
21353      var swiper = this;
21354      var slides = swiper.slides;
21355
21356      for (var i = 0; i < slides.length; i += 1) {
21357        var $slideEl = swiper.slides.eq(i);
21358        var offset = $slideEl[0].swiperSlideOffset;
21359        var tx = -offset;
21360        if (!swiper.params.virtualTranslate) tx -= swiper.translate;
21361        var ty = 0;
21362
21363        if (!swiper.isHorizontal()) {
21364          ty = tx;
21365          tx = 0;
21366        }
21367
21368        var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
21369        $slideEl.css({
21370          opacity: slideOpacity
21371        }).transform("translate3d(" + tx + "px, " + ty + "px, 0px)");
21372      }
21373    },
21374    setTransition: function setTransition(duration) {
21375      var swiper = this;
21376      var slides = swiper.slides,
21377          $wrapperEl = swiper.$wrapperEl;
21378      slides.transition(duration);
21379
21380      if (swiper.params.virtualTranslate && duration !== 0) {
21381        var eventTriggered = false;
21382        slides.transitionEnd(function () {
21383          if (eventTriggered) return;
21384          if (!swiper || swiper.destroyed) return;
21385          eventTriggered = true;
21386          swiper.animating = false;
21387          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
21388
21389          for (var i = 0; i < triggerEvents.length; i += 1) {
21390            $wrapperEl.trigger(triggerEvents[i]);
21391          }
21392        });
21393      }
21394    }
21395  };
21396  var EffectFade = {
21397    name: 'effect-fade',
21398    params: {
21399      fadeEffect: {
21400        crossFade: false
21401      }
21402    },
21403    create: function create() {
21404      var swiper = this;
21405      bindModuleMethods(swiper, {
21406        fadeEffect: _extends({}, Fade)
21407      });
21408    },
21409    on: {
21410      beforeInit: function beforeInit(swiper) {
21411        if (swiper.params.effect !== 'fade') return;
21412        swiper.classNames.push(swiper.params.containerModifierClass + "fade");
21413        var overwriteParams = {
21414          slidesPerView: 1,
21415          slidesPerColumn: 1,
21416          slidesPerGroup: 1,
21417          watchSlidesProgress: true,
21418          spaceBetween: 0,
21419          virtualTranslate: true
21420        };
21421        extend(swiper.params, overwriteParams);
21422        extend(swiper.originalParams, overwriteParams);
21423      },
21424      setTranslate: function setTranslate(swiper) {
21425        if (swiper.params.effect !== 'fade') return;
21426        swiper.fadeEffect.setTranslate();
21427      },
21428      setTransition: function setTransition(swiper, duration) {
21429        if (swiper.params.effect !== 'fade') return;
21430        swiper.fadeEffect.setTransition(duration);
21431      }
21432    }
21433  };
21434  var Cube = {
21435    setTranslate: function setTranslate() {
21436      var swiper = this;
21437      var $el = swiper.$el,
21438          $wrapperEl = swiper.$wrapperEl,
21439          slides = swiper.slides,
21440          swiperWidth = swiper.width,
21441          swiperHeight = swiper.height,
21442          rtl = swiper.rtlTranslate,
21443          swiperSize = swiper.size,
21444          browser = swiper.browser;
21445      var params = swiper.params.cubeEffect;
21446      var isHorizontal = swiper.isHorizontal();
21447      var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
21448      var wrapperRotate = 0;
21449      var $cubeShadowEl;
21450
21451      if (params.shadow) {
21452        if (isHorizontal) {
21453          $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
21454
21455          if ($cubeShadowEl.length === 0) {
21456            $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
21457            $wrapperEl.append($cubeShadowEl);
21458          }
21459
21460          $cubeShadowEl.css({
21461            height: swiperWidth + "px"
21462          });
21463        } else {
21464          $cubeShadowEl = $el.find('.swiper-cube-shadow');
21465
21466          if ($cubeShadowEl.length === 0) {
21467            $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
21468            $el.append($cubeShadowEl);
21469          }
21470        }
21471      }
21472
21473      for (var i = 0; i < slides.length; i += 1) {
21474        var $slideEl = slides.eq(i);
21475        var slideIndex = i;
21476
21477        if (isVirtual) {
21478          slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
21479        }
21480
21481        var slideAngle = slideIndex * 90;
21482        var round = Math.floor(slideAngle / 360);
21483
21484        if (rtl) {
21485          slideAngle = -slideAngle;
21486          round = Math.floor(-slideAngle / 360);
21487        }
21488
21489        var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
21490        var tx = 0;
21491        var ty = 0;
21492        var tz = 0;
21493
21494        if (slideIndex % 4 === 0) {
21495          tx = -round * 4 * swiperSize;
21496          tz = 0;
21497        } else if ((slideIndex - 1) % 4 === 0) {
21498          tx = 0;
21499          tz = -round * 4 * swiperSize;
21500        } else if ((slideIndex - 2) % 4 === 0) {
21501          tx = swiperSize + round * 4 * swiperSize;
21502          tz = swiperSize;
21503        } else if ((slideIndex - 3) % 4 === 0) {
21504          tx = -swiperSize;
21505          tz = 3 * swiperSize + swiperSize * 4 * round;
21506        }
21507
21508        if (rtl) {
21509          tx = -tx;
21510        }
21511
21512        if (!isHorizontal) {
21513          ty = tx;
21514          tx = 0;
21515        }
21516
21517        var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)";
21518
21519        if (progress <= 1 && progress > -1) {
21520          wrapperRotate = slideIndex * 90 + progress * 90;
21521          if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
21522        }
21523
21524        $slideEl.transform(transform);
21525
21526        if (params.slideShadows) {
21527          var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
21528          var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
21529
21530          if (shadowBefore.length === 0) {
21531            shadowBefore = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>");
21532            $slideEl.append(shadowBefore);
21533          }
21534
21535          if (shadowAfter.length === 0) {
21536            shadowAfter = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>");
21537            $slideEl.append(shadowAfter);
21538          }
21539
21540          if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
21541          if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
21542        }
21543      }
21544
21545      $wrapperEl.css({
21546        '-webkit-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
21547        '-moz-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
21548        '-ms-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
21549        'transform-origin': "50% 50% -" + swiperSize / 2 + "px"
21550      });
21551
21552      if (params.shadow) {
21553        if (isHorizontal) {
21554          $cubeShadowEl.transform("translate3d(0px, " + (swiperWidth / 2 + params.shadowOffset) + "px, " + -swiperWidth / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + params.shadowScale + ")");
21555        } else {
21556          var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
21557          var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
21558          var scale1 = params.shadowScale;
21559          var scale2 = params.shadowScale / multiplier;
21560          var offset = params.shadowOffset;
21561          $cubeShadowEl.transform("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + (swiperHeight / 2 + offset) + "px, " + -swiperHeight / 2 / scale2 + "px) rotateX(-90deg)");
21562        }
21563      }
21564
21565      var zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;
21566      $wrapperEl.transform("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)");
21567    },
21568    setTransition: function setTransition(duration) {
21569      var swiper = this;
21570      var $el = swiper.$el,
21571          slides = swiper.slides;
21572      slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
21573
21574      if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
21575        $el.find('.swiper-cube-shadow').transition(duration);
21576      }
21577    }
21578  };
21579  var EffectCube = {
21580    name: 'effect-cube',
21581    params: {
21582      cubeEffect: {
21583        slideShadows: true,
21584        shadow: true,
21585        shadowOffset: 20,
21586        shadowScale: 0.94
21587      }
21588    },
21589    create: function create() {
21590      var swiper = this;
21591      bindModuleMethods(swiper, {
21592        cubeEffect: _extends({}, Cube)
21593      });
21594    },
21595    on: {
21596      beforeInit: function beforeInit(swiper) {
21597        if (swiper.params.effect !== 'cube') return;
21598        swiper.classNames.push(swiper.params.containerModifierClass + "cube");
21599        swiper.classNames.push(swiper.params.containerModifierClass + "3d");
21600        var overwriteParams = {
21601          slidesPerView: 1,
21602          slidesPerColumn: 1,
21603          slidesPerGroup: 1,
21604          watchSlidesProgress: true,
21605          resistanceRatio: 0,
21606          spaceBetween: 0,
21607          centeredSlides: false,
21608          virtualTranslate: true
21609        };
21610        extend(swiper.params, overwriteParams);
21611        extend(swiper.originalParams, overwriteParams);
21612      },
21613      setTranslate: function setTranslate(swiper) {
21614        if (swiper.params.effect !== 'cube') return;
21615        swiper.cubeEffect.setTranslate();
21616      },
21617      setTransition: function setTransition(swiper, duration) {
21618        if (swiper.params.effect !== 'cube') return;
21619        swiper.cubeEffect.setTransition(duration);
21620      }
21621    }
21622  };
21623  var Flip = {
21624    setTranslate: function setTranslate() {
21625      var swiper = this;
21626      var slides = swiper.slides,
21627          rtl = swiper.rtlTranslate;
21628
21629      for (var i = 0; i < slides.length; i += 1) {
21630        var $slideEl = slides.eq(i);
21631        var progress = $slideEl[0].progress;
21632
21633        if (swiper.params.flipEffect.limitRotation) {
21634          progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
21635        }
21636
21637        var offset = $slideEl[0].swiperSlideOffset;
21638        var rotate = -180 * progress;
21639        var rotateY = rotate;
21640        var rotateX = 0;
21641        var tx = -offset;
21642        var ty = 0;
21643
21644        if (!swiper.isHorizontal()) {
21645          ty = tx;
21646          tx = 0;
21647          rotateX = -rotateY;
21648          rotateY = 0;
21649        } else if (rtl) {
21650          rotateY = -rotateY;
21651        }
21652
21653        $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
21654
21655        if (swiper.params.flipEffect.slideShadows) {
21656          var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
21657          var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
21658
21659          if (shadowBefore.length === 0) {
21660            shadowBefore = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>");
21661            $slideEl.append(shadowBefore);
21662          }
21663
21664          if (shadowAfter.length === 0) {
21665            shadowAfter = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>");
21666            $slideEl.append(shadowAfter);
21667          }
21668
21669          if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
21670          if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
21671        }
21672
21673        $slideEl.transform("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)");
21674      }
21675    },
21676    setTransition: function setTransition(duration) {
21677      var swiper = this;
21678      var slides = swiper.slides,
21679          activeIndex = swiper.activeIndex,
21680          $wrapperEl = swiper.$wrapperEl;
21681      slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
21682
21683      if (swiper.params.virtualTranslate && duration !== 0) {
21684        var eventTriggered = false;
21685        slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
21686          if (eventTriggered) return;
21687          if (!swiper || swiper.destroyed) return;
21688          eventTriggered = true;
21689          swiper.animating = false;
21690          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
21691
21692          for (var i = 0; i < triggerEvents.length; i += 1) {
21693            $wrapperEl.trigger(triggerEvents[i]);
21694          }
21695        });
21696      }
21697    }
21698  };
21699  var EffectFlip = {
21700    name: 'effect-flip',
21701    params: {
21702      flipEffect: {
21703        slideShadows: true,
21704        limitRotation: true
21705      }
21706    },
21707    create: function create() {
21708      var swiper = this;
21709      bindModuleMethods(swiper, {
21710        flipEffect: _extends({}, Flip)
21711      });
21712    },
21713    on: {
21714      beforeInit: function beforeInit(swiper) {
21715        if (swiper.params.effect !== 'flip') return;
21716        swiper.classNames.push(swiper.params.containerModifierClass + "flip");
21717        swiper.classNames.push(swiper.params.containerModifierClass + "3d");
21718        var overwriteParams = {
21719          slidesPerView: 1,
21720          slidesPerColumn: 1,
21721          slidesPerGroup: 1,
21722          watchSlidesProgress: true,
21723          spaceBetween: 0,
21724          virtualTranslate: true
21725        };
21726        extend(swiper.params, overwriteParams);
21727        extend(swiper.originalParams, overwriteParams);
21728      },
21729      setTranslate: function setTranslate(swiper) {
21730        if (swiper.params.effect !== 'flip') return;
21731        swiper.flipEffect.setTranslate();
21732      },
21733      setTransition: function setTransition(swiper, duration) {
21734        if (swiper.params.effect !== 'flip') return;
21735        swiper.flipEffect.setTransition(duration);
21736      }
21737    }
21738  };
21739  var Coverflow = {
21740    setTranslate: function setTranslate() {
21741      var swiper = this;
21742      var swiperWidth = swiper.width,
21743          swiperHeight = swiper.height,
21744          slides = swiper.slides,
21745          slidesSizesGrid = swiper.slidesSizesGrid;
21746      var params = swiper.params.coverflowEffect;
21747      var isHorizontal = swiper.isHorizontal();
21748      var transform = swiper.translate;
21749      var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
21750      var rotate = isHorizontal ? params.rotate : -params.rotate;
21751      var translate = params.depth;
21752
21753      for (var i = 0, length = slides.length; i < length; i += 1) {
21754        var $slideEl = slides.eq(i);
21755        var slideSize = slidesSizesGrid[i];
21756        var slideOffset = $slideEl[0].swiperSlideOffset;
21757        var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;
21758        var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
21759        var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
21760        var translateZ = -translate * Math.abs(offsetMultiplier);
21761        var stretch = params.stretch;
21762
21763        if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
21764          stretch = parseFloat(params.stretch) / 100 * slideSize;
21765        }
21766
21767        var translateY = isHorizontal ? 0 : stretch * offsetMultiplier;
21768        var translateX = isHorizontal ? stretch * offsetMultiplier : 0;
21769        var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);
21770        if (Math.abs(translateX) < 0.001) translateX = 0;
21771        if (Math.abs(translateY) < 0.001) translateY = 0;
21772        if (Math.abs(translateZ) < 0.001) translateZ = 0;
21773        if (Math.abs(rotateY) < 0.001) rotateY = 0;
21774        if (Math.abs(rotateX) < 0.001) rotateX = 0;
21775        if (Math.abs(scale) < 0.001) scale = 0;
21776        var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px)  rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg) scale(" + scale + ")";
21777        $slideEl.transform(slideTransform);
21778        $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
21779
21780        if (params.slideShadows) {
21781          var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
21782          var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
21783
21784          if ($shadowBeforeEl.length === 0) {
21785            $shadowBeforeEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>");
21786            $slideEl.append($shadowBeforeEl);
21787          }
21788
21789          if ($shadowAfterEl.length === 0) {
21790            $shadowAfterEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>");
21791            $slideEl.append($shadowAfterEl);
21792          }
21793
21794          if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
21795          if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
21796        }
21797      }
21798    },
21799    setTransition: function setTransition(duration) {
21800      var swiper = this;
21801      swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
21802    }
21803  };
21804  var EffectCoverflow = {
21805    name: 'effect-coverflow',
21806    params: {
21807      coverflowEffect: {
21808        rotate: 50,
21809        stretch: 0,
21810        depth: 100,
21811        scale: 1,
21812        modifier: 1,
21813        slideShadows: true
21814      }
21815    },
21816    create: function create() {
21817      var swiper = this;
21818      bindModuleMethods(swiper, {
21819        coverflowEffect: _extends({}
21819, Coverflow)
21820      });
21821    },
21822    on: {
21823      beforeInit: function beforeInit(swiper) {
21824        if (swiper.params.effect !== 'coverflow') return;
21825        swiper.classNames.push(swiper.params.containerModifierClass + "coverflow");
21826        swiper.classNames.push(swiper.params.containerModifierClass + "3d");
21827        swiper.params.watchSlidesProgress = true;
21828        swiper.originalParams.watchSlidesProgress = true;
21829      },
21830      setTranslate: function setTranslate(swiper) {
21831        if (swiper.params.effect !== 'coverflow') return;
21832        swiper.coverflowEffect.setTranslate();
21833      },
21834      setTransition: function setTransition(swiper, duration) {
21835        if (swiper.params.effect !== 'coverflow') return;
21836        swiper.coverflowEffect.setTransition(duration);
21837      }
21838    }
21839  };
21840  var Thumbs = {
21841    init: function init() {
21842      var swiper = this;
21843      var thumbsParams = swiper.params.thumbs;
21844      if (swiper.thumbs.initialized) return false;
21845      swiper.thumbs.initialized = true;
21846      var SwiperClass = swiper.constructor;
21847
21848      if (thumbsParams.swiper instanceof SwiperClass) {
21849        swiper.thumbs.swiper = thumbsParams.swiper;
21850        extend(swiper.thumbs.swiper.originalParams, {
21851          watchSlidesProgress: true,
21852          slideToClickedSlide: false
21853        });
21854        extend(swiper.thumbs.swiper.params, {
21855          watchSlidesProgress: true,
21856          slideToClickedSlide: false
21857        });
21858      } else if (isObject(thumbsParams.swiper)) {
21859        swiper.thumbs.swiper = new SwiperClass(extend({}, thumbsParams.swiper, {
21860          watchSlidesVisibility: true,
21861          watchSlidesProgress: true,
21862          slideToClickedSlide: false
21863        }));
21864        swiper.thumbs.swiperCreated = true;
21865      }
21866
21867      swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
21868      swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
21869      return true;
21870    },
21871    onThumbClick: function onThumbClick() {
21872      var swiper = this;
21873      var thumbsSwiper = swiper.thumbs.swiper;
21874      if (!thumbsSwiper) return;
21875      var clickedIndex = thumbsSwiper.clickedIndex;
21876      var clickedSlide = thumbsSwiper.clickedSlide;
21877      if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
21878      if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
21879      var slideToIndex;
21880
21881      if (thumbsSwiper.params.loop) {
21882        slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
21883      } else {
21884        slideToIndex = clickedIndex;
21885      }
21886
21887      if (swiper.params.loop) {
21888        var currentIndex = swiper.activeIndex;
21889
21890        if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
21891          swiper.loopFix();
21892          swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
21893          currentIndex = swiper.activeIndex;
21894        }
21895
21896        var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index();
21897        var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index();
21898        if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;
21899      }
21900
21901      swiper.slideTo(slideToIndex);
21902    },
21903    update: function update(initial) {
21904      var swiper = this;
21905      var thumbsSwiper = swiper.thumbs.swiper;
21906      if (!thumbsSwiper) return;
21907      var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
21908      var autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
21909      var useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
21910
21911      if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
21912        var currentThumbsIndex = thumbsSwiper.activeIndex;
21913        var newThumbsIndex;
21914        var direction;
21915
21916        if (thumbsSwiper.params.loop) {
21917          if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
21918            thumbsSwiper.loopFix();
21919            thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
21920            currentThumbsIndex = thumbsSwiper.activeIndex;
21921          }
21922
21923          var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index();
21924          var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index();
21925
21926          if (typeof prevThumbsIndex === 'undefined') {
21927            newThumbsIndex = nextThumbsIndex;
21928          } else if (typeof nextThumbsIndex === 'undefined') {
21929            newThumbsIndex = prevThumbsIndex;
21930          } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {
21931            newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;
21932          } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {
21933            newThumbsIndex = nextThumbsIndex;
21934          } else {
21935            newThumbsIndex = prevThumbsIndex;
21936          }
21937
21938          direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
21939        } else {
21940          newThumbsIndex = swiper.realIndex;
21941          direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
21942        }
21943
21944        if (useOffset) {
21945          newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
21946        }
21947
21948        if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
21949          if (thumbsSwiper.params.centeredSlides) {
21950            if (newThumbsIndex > currentThumbsIndex) {
21951              newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
21952            } else {
21953              newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
21954            }
21955          } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;
21956
21957          thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
21958        }
21959      }
21960
21961      var thumbsToActivate = 1;
21962      var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
21963
21964      if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
21965        thumbsToActivate = swiper.params.slidesPerView;
21966      }
21967
21968      if (!swiper.params.thumbs.multipleActiveThumbs) {
21969        thumbsToActivate = 1;
21970      }
21971
21972      thumbsToActivate = Math.floor(thumbsToActivate);
21973      thumbsSwiper.slides.removeClass(thumbActiveClass);
21974
21975      if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {
21976        for (var i = 0; i < thumbsToActivate; i += 1) {
21977          thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]").addClass(thumbActiveClass);
21978        }
21979      } else {
21980        for (var _i = 0; _i < thumbsToActivate; _i += 1) {
21981          thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass);
21982        }
21983      }
21984    }
21985  };
21986  var Thumbs$1 = {
21987    name: 'thumbs',
21988    params: {
21989      thumbs: {
21990        swiper: null,
21991        multipleActiveThumbs: true,
21992        autoScrollOffset: 0,
21993        slideThumbActiveClass: 'swiper-slide-thumb-active',
21994        thumbsContainerClass: 'swiper-container-thumbs'
21995      }
21996    },
21997    create: function create() {
21998      var swiper = this;
21999      bindModuleMethods(swiper, {
22000        thumbs: _extends({
22001          swiper: null,
22002          initialized: false
22003        }, Thumbs)
22004      });
22005    },
22006    on: {
22007      beforeInit: function beforeInit(swiper) {
22008        var thumbs = swiper.params.thumbs;
22009        if (!thumbs || !thumbs.swiper) return;
22010        swiper.thumbs.init();
22011        swiper.thumbs.update(true);
22012      },
22013      slideChange: function slideChange(swiper) {
22014        if (!swiper.thumbs.swiper) return;
22015        swiper.thumbs.update();
22016      },
22017      update: function update(swiper) {
22018        if (!swiper.thumbs.swiper) return;
22019        swiper.thumbs.update();
22020      },
22021      resize: function resize(swiper) {
22022        if (!swiper.thumbs.swiper) return;
22023        swiper.thumbs.update();
22024      },
22025      observerUpdate: function observerUpdate(swiper) {
22026        if (!swiper.thumbs.swiper) return;
22027        swiper.thumbs.update();
22028      },
22029      setTransition: function setTransition(swiper, duration) {
22030        var thumbsSwiper = swiper.thumbs.swiper;
22031        if (!thumbsSwiper) return;
22032        thumbsSwiper.setTransition(duration);
22033      },
22034      beforeDestroy: function beforeDestroy(swiper) {
22035        var thumbsSwiper = swiper.thumbs.swiper;
22036        if (!thumbsSwiper) return;
22037
22038        if (swiper.thumbs.swiperCreated && thumbsSwiper) {
22039          thumbsSwiper.destroy();
22040        }
22041      }
22042    }
22043  };
22044  var components = [Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y$1, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1];
22045  Swiper.use(components);
22046  return Swiper;
22047});
22048
22049},{}],9:[function(require,module,exports){
22050"use strict";
22051
22052Object.defineProperty(exports, "__esModule", {
22053  value: true
22054});
22055exports.default = void 0;
22056
22057function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
22058
22059function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
22060
22061function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
22062
22063var webcam = function () {
22064  function webcam(selector) {
22065    var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
22066
22067    _classCallCheck(this, webcam);
22068
22069    this.defaults = {
22070      'timeout': 20,
22071      'progressbarVisibleTime': 10,
22072      'prefix': 'webcam'
22073    };
22074    this.config = Object.assign(this.defaults, settings);
22075    var webcamItems = document.querySelectorAll(selector);
22076    var index = 0;
22077
22078    for (index = 0; index < webcamItems.length; index++) {
22079      this.run(webcamItems[index], index);
22080    }
22081  }
22082
22083  _createClass(webcam, [{
22084    key: "run",
22085    value: function run(container, num) {
22086      var _webcam = {};
22087      _webcam.label = container.querySelector('.webcam-label');
22088      _webcam.label.innerText = _webcam.label.getAttribute('data-title');
22089      _webcam.unit = _webcam.label.getAttribute('data-unit');
22090      _webcam.image = container.querySelector('.webcam-image');
22091      _webcam.imagesrc = _webcam.image.getAttribute('src');
22092      _webcam.progressbarContainer = document.createElement('div');
22093
22094      _webcam.progressbarContainer.setAttribute('class', this.config.prefix + '-progressbar-container');
22095
22096      container.appendChild(_webcam.progressbarContainer);
22097      _webcam.progressbarWrapper = document.createElement('div');
22098
22099      _webcam.progressbarWrapper.setAttribute('class', this.config.prefix + '-progressbar');
22100
22101      _webcam.progressbarContainer.appendChild(_webcam.progressbarWrapper);
22102
22103      _webcam.progressbar = document.createElement('progress');
22104
22105      _webcam.progressbar.setAttribute('value', 0);
22106
22107      _webcam.progressbar.setAttribute('max', 100);
22108
22109      _webcam.progressbarWrapper.appendChild(_webcam.progressbar);
22110
22111      _webcam.progressbarTimer = document.createElement('div');
22112
22113      _webcam.progressbarTimer.setAttribute('class', this.config.prefix + '-progressbar-timer');
22114
22115      _webcam.progressbarContainer.appendChild(_webcam.progressbarTimer);
22116
22117      _webcam.label.id = this.config.prefix + '-label' + num;
22118      _webcam.image.id = this.config.prefix + '-image' + num;
22119      _webcam.progressbar.id = this.config.prefix + '-progressbar' + num;
22120      _webcam.progressbarTimer.id = this.config.prefix + '-progressbar-timer' + num;
22121
22122      _webcam.label.setAttribute('aria-live', 'polite');
22123
22124      _webcam.image.setAttribute('aria-labelledby', _webcam.progressbar.id + ' ' + _webcam.progressbarTimer.id);
22125
22126      _webcam.progressbar.setAttribute('aria-valuemin', 0);
22127
22128      _webcam.progressbar.setAttribute('data-hidden', 'true');
22129
22130      this.counter(_webcam);
22131    }
22132  }, {
22133    key: "reloadImage",
22134    value: function reloadImage(_webcam2) {
22135      var date = new Date();
22136      var timestamp = date.getTime();
22137
22138      _webcam2.image.setAttribute('src', _webcam2.imagesrc + '?' + timestamp);
22139    }
22140  }, {
22141    key: "updateProgressbar",
22142    value: function updateProgressbar(counter, _webcam3) {
22143      var percent = counter * 100 / this.config.progressbarVisibleTime;
22144
22145      _webcam3.progressbar.setAttribute('value', 100 - percent);
22146    }
22147  }, {
22148    key: "counter",
22149    value: function counter(_webcam4) {
22150      var t = this;
22151      var precision = 25;
22152      var counter = t.config.timeout;
22153      var progressIsVisible = false;
22154      var counterInterval = setInterval(function () {
22155        if (counter <= t.config.progressbarVisibleTime && !progressIsVisible) {
22156          _webcam4.progressbar.setAttribute('data-hidden', 'false');
22157
22158          progressIsVisible = true;
22159        }
22160
22161        if (counter <= t.config.progressbarVisibleTime) {
22162          t.updateProgressbar(counter, _webcam4);
22163        }
22164
22165        _webcam4.progressbarTimer.innerText = Math.ceil(counter) + ' ' + _webcam4.unit;
22166
22167        if (counter <= 0) {
22168          counter = t.config.timeout;
22169          t.reloadImage(_webcam4);
22170
22171          _webcam4.progressbar.setAttribute('data-hidden', 'true');
22172
22173          progressIsVisible = false;
22174        }
22175
22176        counter = counter - 1 / precision;
22177      }, 1000 / precision);
22178    }
22179  }]);
22180
22181  return webcam;
22182}();
22183
22184var _default = webcam;
22185exports.default = _default;
22186
22187},{}],10:[function(require,module,exports){
22188"use strict";
22189
22190ready(function () {
22191  var infoButton = document.querySelectorAll('.a5-info-button');
22192
22193  for (var i = 0; i < infoButton.length; i++) {
22194    infoButton[i].parentNode.classList.add('has-info-button');
22195    var infoBtn = new pxEasyExpand(infoButton[i], {
22196      closeWithEsc: false,
22197      addCloseButton: false,
22198      keepFocusInTargetElement: false
22199    });
22200  }
22201});
22202
22203},{}],11:[function(require,module,exports){
22204"use strict";
22205
22206ready(function () {
22207  var hamburger = new pxEasyExpand('#hamburger', {
22208    closeWithEsc: true,
22209    setRootClass: 'offcanvas-visible',
22210    addCloseButton: true,
22211    setFocusToElement: '.js-close',
22212    keepFocusInTargetElement: true,
22213    hiddenWhenOpen: '.page'
22214  });
22215});
22216
22217},{}],12:[function(require,module,exports){
22218"use strict";
22219
22220var _glightbox = _interopRequireDefault(require("../modules/glightbox.js"));
22221
22222function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22223
22224function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
22225
22226function _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."); }
22227
22228function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
22229
22230function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
22231
22232function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
22233
22234function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22235
22236ready(function () {
22237  var lightboxInstances = document.querySelectorAll('.a5-text-image figure, .a5-image figure, .a5-image-gallery');
22238
22239  for (var i = 0; i < lightboxInstances.length; i++) {
22240    var lightboxLinks = lightboxInstances[i].querySelectorAll('a[data-lightbox]');
22241
22242    if (lightboxLinks.length > 1) {
22243      for (var j = 0; j < lightboxLinks.length; j++) {
22244        var counter = window.lightbox.countText;
22245        counter = counter.replace(/{CUR}/g, j + 1);
22246        counter = counter.replace(/{SUM}/g, lightboxLinks.length);
22247        lightboxLinks[j].setAttribute('data-title', counter);
22248      }
22249    }
22250
22251    lightboxInstances[i].setAttribute('data-lightbox-group', i);
22252    initLightbox('[data-lightbox-group="' + i + '"] a[data-lightbox]');
22253  }
22254
22255  function initLightbox(selector) {
22256    var lightboxHTML = '<div id="glightbox-body" class="glightbox-container" aria-label="' + window.lightbox.ariaLabel + '"><div class="gloader visible"></div><div class="goverlay"></div><div class="gcontainer"><div id="glightbox-slider" class="gslider"></div><button class="gprev gbtn" aria-label="' + window.lightbox.prevText + '">{prevSVG}</button><button class="gnext gbtn" aria-label="' + window.lightbox.nextText + '">{nextSVG}</button>' + '<details id="gShare" class="gshare" data-hidden="true"><summary title="' + window.lightbox.shareTitle + '">' + window.lightbox.shareSvg + '<span>' + window.lightbox.shareHiddenText + '</span></summary><ul></ul></details>' + '<button class="gclose gbtn" aria-label="' + window.lightbox.closeText + '">{closeSVG}</button></div></div>';
22257    var lightboxSlideHTML = '<div class="gslide"><div class="gslide-inner-content"><div class="ginner-container"><div class="gslide-media"></div><div class="gslide-description"><div class="gdesc-inner"><strong class="gslide-title"></strong><p class="gslide-desc"></p></div></div></div></div></div>';
22258    var lightbox = (0, _glightbox.default)({
22259      selector: selector,
22260      closeOnOutsideClick: false,
22261      lightboxHTML: lightboxHTML,
22262      slideHTML: lightboxSlideHTML,
22263      touchNavigation: true,
22264      moreLength: 0,
22265      loop: true,
22266      zoomable: false,
22267      svg: {
22268        close: window.lightbox.closeSvg,
22269        next: window.lightbox.nextSvg,
22270        prev: window.lightbox.prevSvg
22271      }
22272    });
22273    var focusableElements = [];
22274
22275    function updateFocusableElements() {
22276      var elements = lightbox.modal.querySelectorAll('button:not(.disabled), summary, details[open] a');
22277      focusableElements = Array.prototype.slice.call(elements).filter(function (child) {
22278        return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);
22279      });
22280    }
22281
22282    function handleFocus(event) {
22283      if (event.which === 9) {
22284        event.preventDefault();
22285        var index = focusableElements.indexOf(event.target);
22286
22287        if (!event.shiftKey) {
22288          if (index + 1 == focusableElements.length) {
22289            focusableElements[0].focus();
22290          } else {
22291            focusableElements[index + 1].focus();
22292          }
22293        } else {
22294          if (index == 0) {
22295            focusableElements[focusableElements.length - 1].focus();
22296          } else {
22297            focusableElements[index - 1].focus();
22298          }
22299        }
22300      }
22301    }
22302
22303    ;
22304    lightbox.on('open', function () {
22305      if (!lightbox.nextButton.classList.contains('disabled')) {
22306        lightbox.nextButton.focus();
22307      } else {
22308        lightbox.modal.querySelector('.gclose').focus();
22309      }
22310
22311      lightbox.pxStatus = document.createElement('p');
22312      lightbox.pxStatus.setAttribute('aria-live', 'polite');
22313      lightbox.modal.appendChild(lightbox.pxStatus);
22314      lightbox.pxShare = document.getElementById('gShare');
22315      lightbox.pxShareUL = lightbox.pxShare.querySelector('ul');
22316
22317      for (var _i = 0, _Object$entries = Object.entries(window.lightbox.shareNetworks); _i < _Object$entries.length; _i++) {
22318        var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
22319            key = _Object$entries$_i[0],
22320            value = _Object$entries$_i[1];
22321
22322        var pxShareItem = document.createElement('li');
22323        pxShareItem.innerHTML = value;
22324        lightbox.pxShareUL.appendChild(pxShareItem);
22325      }
22326
22327      updateFocusableElements();
22328      document.addEventListener('keydown', handleFocus, false);
22329    });
22330    lightbox.on('slide_changed', function (_ref) {
22331      var prev = _ref.prev,
22332          current = _ref.current;
22333      var hasAriaLabelledby = lightbox.modal.querySelector('[aria-labelledby]');
22334
22335      if (typeof hasAriaLabelledby != 'undefined' && hasAriaLabelledby != null) {
22336        hasAriaLabelledby.removeAttribute('aria-labelledby');
22337      }
22338
22339      lightbox.pxStatus.innerHTML = '';
22340
22341      if (current.trigger.hasAttribute('data-title')) {
22342        lightbox.pxStatus.innerHTML = lightbox.pxStatus.innerHTML + ' ' + current.trigger.getAttribute('data-title');
22343      }
22344
22345      if (current.trigger.hasAttribute('data-description')) {
22346        lightbox.pxStatus.innerHTML = lightbox.pxStatus.innerHTML + ' ' + current.trigger.getAttribute('data-description');
22347      }
22348
22349      if (current.trigger.hasAttribute('data-alt')) {
22350        lightbox.pxStatus.innerHTML = lightbox.pxStatus.innerHTML + ' ' + current.trigger.getAttribute('data-alt');
22351      }
22352
22353      lightbox.lastTigger = current.trigger;
22354
22355      if (typeof lightbox.pxShare != 'undefined' && lightbox.pxShare != null) {
22356        if (current.trigger.hasAttribute('data-share-url')) {
22357          var shareElements = lightbox.pxShare.querySelectorAll('a');
22358
22359          for (var _i2 = 0; _i2 < shareElements.length; _i2++) {
22360            var href = shareElements[_i2].getAttribute('data-href');
22361
22362            var imageURL = current.trigger.getAttribute('href');
22363
22364            shareElements[_i2].setAttribute('href', href.replace(/{IMAGE}/g, imageURL));
22365          }
22366
22367          lightbox.pxShare.setAttribute('data-hidden', 'false');
22368          lightbox.pxShare.addEventListener('keydown', function (event) {
22369            updateFocusableElements();
22370          });
22371        } else {
22372          lightbox.pxShare.setAttribute('data-hidden', 'true');
22373        }
22374      }
22375
22376      updateFocusableElements();
22377    });
22378    lightbox.on('close', function () {
22379      lightbox.lastTigger.focus();
22380      document.removeEventListener('keydown', handleFocus);
22381    });
22382  }
22383});
22384
22385},{"../modules/glightbox.js":2}],13:[function(require,module,exports){
22386"use strict";
22387
22388ready(function () {
22389  if (window.innerWidth < 760) {
22390    var footerToggleContainer = document.querySelectorAll('.nav-meta');
22391
22392    var _loop = function _loop(i) {
22393      var toggleWrapper = footerToggleContainer[i];
22394      var toggleTarget = toggleWrapper.children[0];
22395      toggleTarget.setAttribute('id', 'footer-toggle-' + i);
22396      toggleWrapper.insertAdjacentHTML('afterbegin', '<button type="button" id="footer-toggle-button-' + i + '">' + toggleWrapper.getAttribute('data-text-open') + '</button>');
22397      var easyexpand = new pxEasyExpand('footer-toggle-button-' + i, {
22398        closeWithEsc: false,
22399        switchButtonHtml: true,
22400        hiddenAttribute: 'data-hidden'
22401      }, {
22402        labelOpen: toggleWrapper.getAttribute('data-label-open'),
22403        labelClose: toggleWrapper.getAttribute('data-label-close'),
22404        textOpen: toggleWrapper.getAttribute('data-text-open'),
22405        textClose: toggleWrapper.getAttribute('data-text-close'),
22406        controls: 'footer-toggle-' + i
22407      });
22408
22409      easyexpand.functions.afterToggle = function () {
22410        console.log(toggleTarget);
22411        setTimeout(function () {
22412          toggleTarget.scrollIntoView(true);
22413        }, 200);
22414      };
22415    };
22416
22417    for (var i = 0; i < footerToggleContainer.length; i++) {
22418      _loop(i);
22419    }
22420  }
22421});
22422
22423},{}],14:[function(require,module,exports){
22424"use strict";
22425
22426ready(function () {
22427  var mmenuEl = document.getElementById('mmenu');
22428
22429  if (typeof mmenuEl != 'undefined' && mmenuEl != null) {
22430    var mmenuStrong = document.querySelector('#mmenu strong[aria-current]');
22431
22432    if (mmenuStrong) {
22433      var mmenuSpan = document.createElement('span');
22434      mmenuSpan.setAttribute('aria-current', 'page');
22435      mmenuSpan.innerHTML = mmenuStrong.innerHTML;
22436      mmenuStrong.parentNode.replaceChild(mmenuSpan, mmenuStrong);
22437    }
22438
22439    var mmenu = new Mmenu('#mmenu', {
22440      'offCanvas': false,
22441      'navbars': [{
22442        'position': 'top',
22443        'content': ['title', 'prev']
22444      }],
22445      'navbar': {
22446        'title': mmenuEl.getAttribute('data-label')
22447      },
22448      'keyboardNavigation': {
22449        'enable': false,
22450        'enhance': false
22451      },
22452      'screenReader': false,
22453      'hooks': {
22454        'openPanel:finish': function openPanelFinish(panel) {
22455          var mmTitle = document.querySelector('#mmenu .mm-navbars_top a.mm-navbar__title[href]');
22456
22457          if (mmTitle) {
22458            var isBacklink = mmTitle.querySelectorAll('span.backlink');
22459
22460            if (isBacklink.length < 1) {
22461              var backTitle = document.createElement('span');
22462              backTitle.classList.add('backlink');
22463              backTitle.innerHTML = mmenuEl.getAttribute('data-back');
22464              mmTitle.prepend(backTitle);
22465            }
22466
22467            mmTitle.removeAttribute('aria-hidden');
22468            mmTitle.setAttribute('title', window.mmenu.titleLayerPrev);
22469            mmTitle.setAttribute('aria-label', mmTitle.text + '. ' + window.mmenu.labelLayerPrev);
22470            mmTitle.setAttribute('role', 'button');
22471            setTimeout(function () {
22472              mmTitle.focus();
22473            }, 100);
22474          } else if (document.getElementsByTagName('html')[0].classList.contains('js-nav')) {
22475            panel.querySelector('.mm-listview a').focus();
22476          }
22477        }
22478      }
22479    }, {
22480      'language': 'de',
22481      'classNames': {
22482        'selected': 'open'
22483      }
22484    });
22485    var mmenuApi = mmenu.API;
22486    var mmenuPanel = document.querySelector('.mm-menu .mm-listitem_selected > a');
22487
22488    if (mmenuPanel) {
22489      mmenuApi.openPanel(document.getElementById(mmenuPanel.hash.substr(1)));
22490    }
22491
22492    var mmButton = document.querySelectorAll('.mm-panel .mm-btn_next');
22493
22494    for (var i = 0; i < mmButton.length; i++) {
22495      if (mmButton[i].previousElementSibling && mmButton[i].previousElementSibling.tagName == 'A') {
22496        mmButton[i].setAttribute('aria-label', window.mmenu.labelLayerNext);
22497      } else {
22498        mmButton[i].setAttribute('aria-label', mmButton[i].innerText + '. ' + window.mmenu.labelLayerNext);
22499      }
22500
22501      mmButton[i].setAttribute('title', window.mmenu.titleLayerNext);
22502      mmButton[i].setAttribute('role', 'button');
22503      mmButton[i].setAttribute('aria-expanded', 'false');
22504    }
22505  }
22506});
22507
22508},{}],15:[function(require,module,exports){
22509"use strict";
22510
22511window.addEventListener('scroll', function () {
22512  if (Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) > 100) {
22513    document.documentElement.classList.remove('is-top');
22514  } else {
22515    document.documentElement.classList.add('is-top');
22516  }
22517});
22518
22519if (Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) < 101) {
22520  document.documentElement.classList.add('is-top');
22521}
22522
22523},{}],16:[function(require,module,exports){
22524"use strict";
22525
22526ready(function () {
22527  var suche = new pxEasyExpand('#searchbutton', {
22528    closeWithEsc: true,
22529    setRootClass: 'offcanvas-visible',
22530    addCloseButton: true,
22531    setFocusToElement: '.js-close',
22532    keepFocusInTargetElement: true,
22533    hiddenWhenOpen: '.page',
22534    on: {
22535      beforeToggle: function beforeToggle(button) {}
22536    }
22537  });
22538});
22539
22540},{}],17:[function(require,module,exports){
22541"use strict";
22542
22543ready(function () {
22544  var sliderContainer = document.querySelectorAll('.a5-events-slider, .a5-image-slider-inner, .page-aside-slider');
22545
22546  var _loop = function _loop(i) {
22547    var sliderUL = sliderContainer[i].querySelector('ul');
22548    var sliderItems = sliderUL.querySelectorAll('li');
22549
22550    if (sliderItems.length < 2) {
22551      return "continue";
22552    }
22553
22554    if (sliderContainer[i].getAttribute('data-slider-minitems')) {
22555      if (sliderItems.length < sliderContainer[i].getAttribute('data-slider-minitems')) {
22556        return "continue";
22557      }
22558    }
22559
22560    sliderContainer[i].classList.add('swiper-container');
22561    sliderUL.classList.add('swiper-wrapper');
22562
22563    for (var j = 0; j < sliderItems.length; j++) {
22564      sliderItems[j].classList.add('swiper-slide');
22565    }
22566
22567    var prevTitle = swiper.prevTitle;
22568
22569    if (sliderContainer[i].getAttribute('data-button-label-prev')) {
22570      prevTitle = sliderContainer[i].getAttribute('data-button-label-prev');
22571    }
22572
22573    var nextTitle = swiper.nextTitle;
22574
22575    if (sliderContainer[i].getAttribute('data-button-label-next')) {
22576      nextTitle = sliderContainer[i].getAttribute('data-button-label-next');
22577    }
22578
22579    if (sliderContainer[i].classList.contains('page-aside-slider')) {
22580      var buttonWrapper = createElement('<div class="swiper-controls"></div>');
22581      sliderContainer[i].append(buttonWrapper);
22582      var buttonControl = document.createElement('button');
22583      buttonControl.setAttribute('type', 'button');
22584      buttonControl.setAttribute('data-autoplay', 'stop');
22585      buttonControl.innerHTML = swiper.stopTitle;
22586      buttonControl.setAttribute('aria-label', swiper.ariaLabelStop);
22587      buttonControl.addEventListener('click', function (event) {
22588        event.preventDefault();
22589        var slider = this.closest('.swiper-container').swiper;
22590
22591        if (slider.autoplay.running) {
22592          this.setAttribute('data-autoplay', 'start');
22593          this.setAttribute('aria-label', swiper.ariaLabelStart);
22594          buttonControl.innerHTML = swiper.startTitle;
22595          sliderUL.setAttribute('aria-live', 'polite');
22596          slider.autoplay.stop();
22597        } else {
22598          this.setAttribute('data-autoplay', 'stop');
22599          this.setAttribute('aria-label', swiper.ariaLabelStop);
22600          buttonControl.innerHTML = swiper.stopTitle;
22601          sliderUL.setAttribute('aria-live', 'off');
22602          slider.autoplay.start();
22603        }
22604      });
22605      buttonWrapper.append(buttonControl);
22606      sliderUL.addEventListener('focusin', function (event) {
22607        if (buttonControl.getAttribute('data-autoplay') == 'stop') {
22608          buttonControl.click();
22609        }
22610      });
22611      new Swiper(sliderContainer[i], {
22612        effect: 'fade',
22613        fadeEffect: {
22614          crossFade: true
22615        },
22616        a11y: {
22617          slideRole: 'listitem'
22618        },
22619        autoplay: true,
22620        speed: 1000,
22621        autoHeight: true,
22622        allowTouchMove: false,
22623        keyboard: {
22624          enabled: true
22625        }
22626      });
22627    }
22628
22629    if (sliderContainer[i].classList.contains('a5-events-slider')) {
22630      var _buttonWrapper = createElement('<div class="swiper-controls"></div>');
22631
22632      sliderContainer[i].append(_buttonWrapper);
22633      var pagination = document.createElement('ul');
22634      pagination.setAttribute('class', 'slider-pagination');
22635
22636      _buttonWrapper.append(pagination);
22637
22638      var _buttonControl = document.createElement('button');
22639
22640      _buttonControl.setAttribute('type', 'button');
22641
22642      _buttonControl.setAttribute('data-autoplay', 'stop');
22643
22644      _buttonControl.innerHTML = swiper.stopTitle;
22645
22646      _buttonControl.setAttribute('aria-label', swiper.ariaLabelStop);
22647
22648      _buttonControl.addEventListener('click', function (event) {
22649        event.preventDefault();
22650        var slider = this.closest('.swiper-container').swiper;
22651
22652        if (slider.autoplay.running) {
22653          this.setAttribute('data-autoplay', 'start');
22654          this.setAttribute('aria-label', swiper.ariaLabelStart);
22655          _buttonControl.innerHTML = swiper.startTitle;
22656          sliderUL.setAttribute('aria-live', 'polite');
22657          slider.autoplay.stop();
22658        } else {
22659          this.setAttribute('data-autoplay', 'stop');
22660          this.setAttribute('aria-label', swiper.ariaLabelStop);
22661          _buttonControl.innerHTML = swiper.stopTitle;
22662          sliderUL.setAttribute('aria-live', 'off');
22663          slider.autoplay.start();
22664        }
22665      });
22666
22667      _buttonWrapper.append(_buttonControl);
22668
22669      sliderUL.addEventListener('focusin', function (event) {
22670        if (_buttonControl.getAttribute('data-autoplay') == 'stop') {
22671          _buttonControl.click();
22672        }
22673      });
22674      new Swiper(sliderContainer[i], {
22675        effect: 'fade',
22676        fadeEffect: {
22677          crossFade: true
22678        },
22679        a11y: {
22680          slideRole: 'listitem'
22681        },
22682        autoplay: true,
22683        speed: 1000,
22684        autoHeight: true,
22685        allowTouchMove: false,
22686        keyboard: {
22687          enabled: true
22688        },
22689        pagination: {
22690          el: pagination,
22691          clickable: true,
22692          renderBullet: function renderBullet(index, className) {
22693            var title = this.slides[index].getAttribute('data-title');
22694            var label = swiper.bulletTitle + ' ' + (index + 1);
22695            return '<li role="button" class="' + className + '" title="' + title + '" aria-label="' + label + '"></li>';
22696          }
22697        },
22698        on: {
22699          paginationRender: function paginationRender(swiperEl) {
22700            var bullets = swiperEl.pagination.bullets;
22701
22702            var _loop2 = function _loop2(_i) {
22703              bullets[_i].addEventListener('keydown', function (event) {
22704                if (event.keyCode !== 13 && event.keyCode !== 32) return;
22705                event.preventDefault();
22706              });
22707
22708              bullets[_i].addEventListener('click', function (event) {
22709                if (!this.classList.contains('swiper-pagination-bullet-active')) {
22710                  _buttonControl.setAttribute('data-autoplay', 'start');
22711
22712                  _buttonControl.setAttribute('aria-label', swiper.ariaLabelStart);
22713
22714                  _buttonControl.innerHTML = swiper.startTitle;
22715                  sliderUL.setAttribute('aria-live', 'polite');
22716                }
22717
22718                var link = swiperEl.slides[_i].querySelector('a');
22719
22720                if (typeof link != 'undefined' && link != null) {
22721                  link.focus();
22722                }
22723              });
22724            };
22725
22726            for (var _i = 0; _i < bullets.length; _i++) {
22727              _loop2(_i);
22728            }
22729          },
22730          paginationUpdate: function paginationUpdate(swiperEl) {
22731            var bullets = swiperEl.pagination.bullets;
22732
22733            for (var _i2 = 0; _i2 < bullets.length; _i2++) {
22734              bullets[_i2].removeAttribute('aria-current');
22735
22736              swiperEl.slides[_i2].querySelector('a').setAttribute('tabindex', '-1');
22737            }
22738
22739            bullets[swiperEl.realIndex].setAttribute('aria-current', 'true');
22740            swiperEl.slides[swiperEl.realIndex].querySelector('a').removeAttribute('tabindex');
22741          }
22742        }
22743      });
22744    }
22745
22746    if (sliderContainer[i].classList.contains('a5-image-slider-inner')) {
22747      var _buttonWrapper2 = createElement('<div class="swiper-control
22747s"></div>');
22748
22749      sliderContainer[i].parentNode.append(_buttonWrapper2);
22750      var buttonNext = createElement('<button type="button" class="swiper-next">' + swiper.next + '</button>');
22751
22752      _buttonWrapper2.insertBefore(buttonNext, _buttonWrapper2.firstChild);
22753
22754      var buttonPrev = createElement('<button type="button" class="swiper-prev">' + swiper.prev + '</button>');
22755
22756      _buttonWrapper2.insertBefore(buttonPrev, _buttonWrapper2.firstChild);
22757
22758      new Swiper(sliderContainer[i], {
22759        effect: 'slide',
22760        loop: true,
22761        autoHeight: true,
22762        a11y: {
22763          prevSlideMessage: prevTitle,
22764          nextSlideMessage: nextTitle,
22765          slideRole: 'listitem'
22766        },
22767        navigation: {
22768          nextEl: buttonNext,
22769          prevEl: buttonPrev
22770        },
22771        keyboard: {
22772          enabled: true,
22773          onlyInViewport: false
22774        },
22775        slidesPerView: 1,
22776        spaceBetween: 0
22777      });
22778    }
22779
22780    var images = sliderContainer[i].querySelectorAll('img.js-load');
22781
22782    for (var _j = 0; _j < images.length; _j++) {
22783      images[_j].addEventListener('load', function (slider) {
22784        return function () {
22785          slider.updateAutoHeight(200);
22786        };
22787      }(sliderContainer[i].swiper));
22788    }
22789  };
22790
22791  for (var i = 0; i < sliderContainer.length; i++) {
22792    var _ret = _loop(i);
22793
22794    if (_ret === "continue") continue;
22795  }
22796});
22797
22798},{}],18:[function(require,module,exports){
22799"use strict";
22800
22801ready(function () {
22802  var toggleBoxWrapper = document.querySelectorAll('.a5-toggle-box-wrapper');
22803
22804  var _loop = function _loop(i) {
22805    var toggleMulti = true;
22806    var idList = '';
22807
22808    if (toggleBoxWrapper[i].getAttribute('data-multi') == 'false') {
22809      toggleMulti = false;
22810    }
22811
22812    var toggleBox = toggleBoxWrapper[i].querySelectorAll('.a5-toggle-box');
22813
22814    var _loop2 = function _loop2(j) {
22815      var toggleBoxButtonWrapper = toggleBox[j].querySelector('.a5-toggle-box-button');
22816      var toggleBoxButton = document.createElement('button');
22817      var childsLength = toggleBoxButtonWrapper.childNodes.length;
22818
22819      for (var k = 0; k < childsLength; k++) {
22820        toggleBoxButton.append(toggleBoxButtonWrapper.childNodes[0]);
22821      }
22822
22823      toggleBoxButtonWrapper.appendChild(toggleBoxButton);
22824      var toggleBoxContent = toggleBox[j].querySelector('.a5-toggle-box-content');
22825      toggleBoxContent.id = 'a5-toggle-content-' + i + '-' + j;
22826      idList = idList + ' a5-toggle-content-' + i + '-' + j;
22827      var tb = new pxEasyExpand(toggleBoxButton, {
22828        closeWithEsc: false,
22829        switchButtonHtml: false,
22830        setFocusToFirstElement: false,
22831        keepFocusInTargetElement: false
22832      }, {
22833        controls: 'a5-toggle-content-' + i + '-' + j
22834      });
22835
22836      tb.functions.afterToggle = function () {
22837        if (toggleBoxButton.expanded === true) {
22838          toggleBoxContent.style.height = 0;
22839          setTimeout(function () {
22840            toggleBoxContent.style.height = toggleBoxContent.children[0].clientHeight + 'px';
22841            Promise.all(toggleBoxContent.getAnimations({
22842              subtree: false
22843            }).map(function (animations) {
22844              return animations.finished;
22845            })).then(function () {
22846              toggleBoxContent.style.height = '';
22847            });
22848          }, 10);
22849        } else {
22850          toggleBoxContent.style.display = 'block';
22851          toggleBoxContent.style.height = toggleBoxContent.children[0].clientHeight + 'px';
22852          setTimeout(function () {
22853            toggleBoxContent.style.height = 0;
22854            Promise.all(toggleBoxContent.getAnimations({
22855              subtree: false
22856            }).map(function (animations) {
22857              return animations.finished;
22858            })).then(function () {
22859              toggleBoxContent.style.display = '';
22860              toggleBoxContent.style.height = '';
22861            });
22862          }, 10);
22863        }
22864      };
22865
22866      var closeOthers = function closeOthers(container, current) {
22867        var toggleBoxOpen = container.querySelectorAll('.a5-toggle-box-button button[aria-expanded="true"]');
22868
22869        for (var _i5 = 0; _i5 < toggleBoxOpen.length; _i5++) {
22870          if (toggleBoxOpen[_i5] != current) {
22871            toggleBoxOpen[_i5].click();
22872
22873            current.focus();
22874          }
22875        }
22876      };
22877
22878      if (toggleMulti === false) {
22879        toggleBoxButton.addEventListener('click', function () {
22880          if (this.getAttribute('aria-expanded') == 'false') {
22881            closeOthers(toggleBoxWrapper[i], this);
22882          }
22883        });
22884      }
22885    };
22886
22887    for (var j = 0; j < toggleBox.length; j++) {
22888      _loop2(j);
22889    }
22890
22891    if (toggleBox.length > 1) {
22892      if (!toggleBoxWrapper[i].hasAttribute('data-close-all') && !toggleBoxWrapper[i].hasAttribute('data-open-all')) {
22893        return "continue";
22894      }
22895
22896      var buttonWrapper = document.createElement('div');
22897      buttonWrapper.setAttribute('class', 'a5-toggle-functions');
22898      toggleBoxWrapper[i].insertBefore(buttonWrapper, toggleBoxWrapper[i].firstChild);
22899
22900      if (toggleBoxWrapper[i].hasAttribute('data-open-all')) {
22901        var toggleOpenAll = createElement('<button type="button" aria-controls="' + idList + '" aria-label="' + toggleBoxWrapper[i].getAttribute('data-label') + ' ' + toggleBoxWrapper[i].getAttribute('data-open-all') + '">' + toggleBoxWrapper[i].getAttribute('data-open-all') + '</button>');
22902        toggleOpenAll.addEventListener('click', function () {
22903          var toggleBoxList = toggleBoxWrapper[i].querySelectorAll('.a5-toggle-box-button button[aria-expanded="false"]');
22904
22905          for (var _i = 0; _i < toggleBoxList.length; _i++) {
22906            toggleBoxList[_i].click();
22907
22908            this.focus();
22909          }
22910
22911          var toggleButtons = buttonWrapper.querySelectorAll('button');
22912
22913          for (var _i2 = 0; _i2 < toggleButtons.length; _i2++) {
22914            if (this != toggleButtons[_i2]) {
22915              toggleButtons[_i2].removeAttribute('aria-pressed');
22916            } else {
22917              toggleButtons[_i2].setAttribute('aria-pressed', 'true');
22918            }
22919          }
22920        });
22921        buttonWrapper.appendChild(toggleOpenAll);
22922      }
22923
22924      if (toggleBoxWrapper[i].hasAttribute('data-close-all')) {
22925        var toggleCloseAll = createElement('<button type="button" aria-controls="' + idList + '" aria-label="' + toggleBoxWrapper[i].getAttribute('data-label') + ' ' + toggleBoxWrapper[i].getAttribute('data-close-all') + '" aria-pressed="true">' + toggleBoxWrapper[i].getAttribute('data-close-all') + '</button>');
22926        toggleCloseAll.addEventListener('click', function () {
22927          var toggleBoxList = toggleBoxWrapper[i].querySelectorAll('.a5-toggle-box-button button[aria-expanded="true"]');
22928
22929          for (var _i3 = 0; _i3 < toggleBoxList.length; _i3++) {
22930            toggleBoxList[_i3].click();
22931
22932            this.focus();
22933          }
22934
22935          var toggleButtons = buttonWrapper.querySelectorAll('button');
22936
22937          for (var _i4 = 0; _i4 < toggleButtons.length; _i4++) {
22938            if (this != toggleButtons[_i4]) {
22939              toggleButtons[_i4].removeAttribute('aria-pressed');
22940            } else {
22941              toggleButtons[_i4].setAttribute('aria-pressed', 'true');
22942            }
22943          }
22944        });
22945        buttonWrapper.appendChild(toggleCloseAll);
22946      }
22947    }
22948  };
22949
22950  for (var i = 0; i < toggleBoxWrapper.length; i++) {
22951    var _ret = _loop(i);
22952
22953    if (_ret === "continue") continue;
22954  }
22955});
22956
22957},{}],19:[function(require,module,exports){
22958"use strict";
22959
22960Object.defineProperty(exports, "__esModule", {
22961  value: true
22962});
22963exports.default = stickybits;
22964
22965function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22966
22967function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22968
22969function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
22970
22971function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
22972
22973function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
22974
22975function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
22976
22977var Stickybits = function () {
22978  function Stickybits(target, obj) {
22979    var _this = this;
22980
22981    _classCallCheck(this, Stickybits);
22982
22983    var o = typeof obj !== 'undefined' ? obj : {};
22984    this.version = 'VERSION';
22985    this.userAgent = window.navigator.userAgent || 'no `userAgent` provided by the browser';
22986    this.props = {
22987      customStickyChangeNumber: o.customStickyChangeNumber || null,
22988      noStyles: o.noStyles || false,
22989      stickyBitStickyOffset: o.stickyBitStickyOffset || 0,
22990      parentClass: o.parentClass || 'js-stickybit-parent',
22991      scrollEl: typeof o.scrollEl === 'string' ? document.querySelector(o.scrollEl) : o.scrollEl || window,
22992      stickyClass: o.stickyClass || 'js-is-sticky',
22993      stuckClass: o.stuckClass || 'js-is-stuck',
22994      stickyChangeClass: o.stickyChangeClass || 'js-is-sticky--change',
22995      useStickyClasses: o.useStickyClasses || false,
22996      useFixed: o.useFixed || false,
22997      useGetBoundingClientRect: o.useGetBoundingClientRect || false,
22998      verticalPosition: o.verticalPosition || 'top',
22999      applyStyle: o.applyStyle || function (item, style) {
23000        return _this.applyStyle(item, style);
23001      }
23002    };
23003    this.props.positionVal = this.definePosition() || 'fixed';
23004    this.instances = [];
23005    var _this$props = this.props,
23006        positionVal = _this$props.positionVal,
23007        verticalPosition = _this$props.verticalPosition,
23008        noStyles = _this$props.noStyles,
23009        stickyBitStickyOffset = _this$props.stickyBitStickyOffset;
23010    var verticalPositionStyle = verticalPosition === 'top' && !noStyles ? "".concat(stickyBitStickyOffset, "px") : '';
23011    var positionStyle = positionVal !== 'fixed' ? positionVal : '';
23012    this.els = typeof target === 'string' ? document.querySelectorAll(target) : target;
23013    if (!('length' in this.els)) this.els = [this.els];
23014
23015    for (var i = 0; i < this.els.length; i++) {
23016      var _styles;
23017
23018      var el = this.els[i];
23019      var instance = this.addInstance(el, this.props);
23020      this.props.applyStyle({
23021        styles: (_styles = {}, _defineProperty(_styles, verticalPosition, verticalPositionStyle), _defineProperty(_styles, "position", positionStyle), _styles),
23022        classes: {}
23023      }, instance);
23024      this.manageState(instance);
23025      this.instances.push(instance);
23026    }
23027  }
23028
23029  _createClass(Stickybits, [{
23030    key: "definePosition",
23031    value: function definePosition() {
23032      var stickyProp;
23033
23034      if (this.props.useFixed) {
23035        stickyProp = 'fixed';
23036      } else {
23037        var prefix = ['', '-o-', '-webkit-', '-moz-', '-ms-'];
23038        var test = document.head.style;
23039
23040        for (var i = 0; i < prefix.length; i += 1) {
23041          test.position = "".concat(prefix[i], "sticky");
23042        }
23043
23044        stickyProp = test.position ? test.position : 'fixed';
23045        test.position = '';
23046      }
23047
23048      return stickyProp;
23049    }
23050  }, {
23051    key: "addInstance",
23052    value: function addInstance(el, props) {
23053      var _this2 = this;
23054
23055      var item = {
23056        el: el,
23057        parent: el.parentNode,
23058        props: props
23059      };
23060
23061      if (props.positionVal === 'fixed' || props.useStickyClasses) {
23062        this.isWin = this.props.scrollEl === window;
23063        var se = this.isWin ? window : this.getClosestParent(item.el, item.props.scrollEl);
23064        this.computeScrollOffsets(item);
23065        this.toggleClasses(item.parent, '', props.parentClass);
23066        item.state = 'default';
23067        item.stateChange = 'default';
23068
23069        item.stateContainer = function () {
23070          return _this2.manageState(item);
23071        };
23072
23073        se.addEventListener('scroll', item.stateContainer);
23074      }
23075
23076      return item;
23077    }
23078  }, {
23079    key: "getClosestParent",
23080    value: function getClosestParent(el, match) {
23081      var p = match;
23082      var e = el;
23083      if (e.parentElement === p) return p;
23084
23085      while (e.parentElement !== p) {
23086        e = e.parentElement;
23087      }
23088
23089      return p;
23090    }
23091  }, {
23092    key: "getTopPosition",
23093    value: function getTopPosition(el) {
23094      if (this.props.useGetBoundingClientRect) {
23095        return el.getBoundingClientRect().top + (this.props.scrollEl.pageYOffset || document.documentElement.scrollTop);
23096      }
23097
23098      var topPosition = 0;
23099
23100      do {
23101        topPosition = el.offsetTop + topPosition;
23102      } while (el = el.offsetParent);
23103
23104      return topPosition;
23105    }
23106  }, {
23107    key: "computeScrollOffsets",
23108    value: function computeScrollOffsets(item) {
23109      var it = item;
23110      var p = it.props;
23111      var el = it.el;
23112      var parent = it.parent;
23113      var isCustom = !this.isWin && p.positionVal === 'fixed';
23114      var isTop = p.verticalPosition !== 'bottom';
23115      var scrollElOffset = isCustom ? this.getTopPosition(p.scrollEl) : 0;
23116      var stickyStart = isCustom ? this.getTopPosition(parent) - scrollElOffset : this.getTopPosition(parent);
23117      var stickyChangeOffset = p.customStickyChangeNumber !== null ? p.customStickyChangeNumber : el.offsetHeight;
23118      var parentBottom = stickyStart + parent.offsetHeight;
23119      it.offset = !isCustom ? scrollElOffset + p.stickyBitStickyOffset : 0;
23120      it.stickyStart = isTop ? stickyStart - it.offset : 0;
23121      it.stickyChange = it.stickyStart + stickyChangeOffset;
23122      it.stickyStop = isTop ? parentBottom - (el.offsetHeight + it.offset) : parentBottom - window.innerHeight;
23123    }
23124  }, {
23125    key: "toggleClasses",
23126    value: function toggleClasses(el, r, a) {
23127      var e = el;
23128      var cArray = e.className.split(' ');
23129      if (a && cArray.indexOf(a) === -1) cArray.push(a);
23130      var rItem = cArray.indexOf(r);
23131      if (rItem !== -1) cArray.splice(rItem, 1);
23132      e.className = cArray.join(' ');
23133    }
23134  }, {
23135    key: "manageState",
23136    value: function manageState(item) {
23137      var _this3 = this;
23138
23139      var it = item;
23140      var p = it.props;
23141      var state = it.state;
23142      var stateChange = it.stateChange;
23143      var start = it.stickyStart;
23144      var change = it.stickyChange;
23145      var stop = it.stickyStop;
23146      var pv = p.positionVal;
23147      var se = p.scrollEl;
23148      var sticky = p.stickyClass;
23149      var stickyChange = p.stickyChangeClass;
23150      var stuck = p.stuckClass;
23151      var vp = p.verticalPosition;
23152      var isTop = vp !== 'bottom';
23153      var aS = p.applyStyle;
23154      var ns = p.noStyles;
23155
23156      var rAFStub = function rAFDummy(f) {
23157        f();
23158      };
23159
23160      var rAF = !this.isWin ? rAFStub : window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || rAFStub;
23161      var scroll = this.isWin ? window.scrollY || window.pageYOffset : se.scrollTop;
23162      var notSticky = scroll > start && scroll < stop && (state === 'default' || state === 'stuck');
23163      var isSticky = isTop && scroll <= start && (state === 'sticky' || state === 'stuck');
23164      var isStuck = scroll >= stop && state === 'sticky';
23165
23166      if (notSticky) {
23167        it.state = 'sticky';
23168      } else if (isSticky) {
23169        it.state = 'default';
23170      } else if (isStuck) {
23171        it.state = 'stuck';
23172      }
23173
23174      var isStickyChange = scroll >= change && scroll <= stop;
23175      var isNotStickyChange = scroll < change / 2 || scroll > stop;
23176
23177      if (isNotStickyChange) {
23178        it.stateChange = 'default';
23179      } else if (isStickyChange) {
23180        it.stateChange = 'sticky';
23181      }
23182
23183      if (state === it.state && stateChange === it.stateChange) return;
23184      rAF(function () {
23185        var _style$classes;
23186
23187        var stateStyles = {
23188          sticky: {
23189            styles: _defineProperty({
23190              position: pv,
23191              top: '',
23192              bottom: ''
23193            }, vp, "".concat(p.stickyBitStickyOffset, "px")),
23194            classes: _defineProperty({}, sticky, true)
23195          },
23196          default: {
23197            styles: _defineProperty({}, vp, ''),
23198            classes: {}
23199          },
23200          stuck: {
23201            styles: _objectSpread(_defineProperty({}, vp, ''), pv === 'fixed' && !ns || !_this3.isWin ? {
23202              position: 'absolute',
23203              top: '',
23204              bottom: '0'
23205            } : {}),
23206            classes: _defineProperty({}, stuck, true)
23207          }
23208        };
23209
23210        if (pv === 'fixed') {
23211          stateStyles.default.styles.position = '';
23212        }
23213
23214        var style = stateStyles[it.state];
23215        style.classes = (_style$classes = {}, _defineProperty(_style$classes, stuck, !!style.classes[stuck]), _defineProperty(_style$classes, sticky, !!style.classes[sticky]), _defineProperty(_style$classes, stickyChange, isStickyChange), _style$classes);
23216        aS(style, item);
23217      });
23218    }
23219  }, {
23220    key: "applyStyle",
23221    value: function applyStyle(_ref, item) {
23222      var styles = _ref.styles,
23223          classes = _ref.classes;
23224      var it = item;
23225      var e = it.el;
23226      var p = it.props;
23227      var stl = e.style;
23228      var ns = p.noStyles;
23229      var cArray = e.className.split(' ');
23230
23231      for (var cls in classes) {
23232        var addClass = classes[cls];
23233
23234        if (addClass) {
23235          if (cArray.indexOf(cls) === -1) cArray.push(cls);
23236        } else {
23237          var idx = cArray.indexOf(cls);
23238          if (idx !== -1) cArray.splice(idx, 1);
23239        }
23240      }
23241
23242      e.className = cArray.join(' ');
23243
23244      if (styles['position']) {
23245        stl['position'] = styles['position'];
23246      }
23247
23248      if (ns) return;
23249
23250      for (var key in styles) {
23251        stl[key] = styles[key];
23252      }
23253    }
23254  }, {
23255    key: "update",
23256    value: function update() {
23257      var _this4 = this;
23258
23259      var updatedProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
23260      this.instances.forEach(function (instance) {
23261        _this4.computeScrollOffsets(instance);
23262
23263        if (updatedProps) {
23264          for (var updatedProp in updatedProps) {
23265            instance.props[updatedProp] = updatedProps[updatedProp];
23266          }
23267        }
23268      });
23269      return this;
23270    }
23271  }, {
23272    key: "removeInstance",
23273    value: function removeInstance(instance) {
23274      var _classes3;
23275
23276      var e = instance.el;
23277      var p = instance.props;
23278      this.applyStyle({
23279        styles: _defineProperty({
23280          position: ''
23281        }, p.verticalPosition, ''),
23282        classes: (_classes3 = {}, _defineProperty(_classes3, p.stickyClass, ''), _defineProperty(_classes3, p.stuckClass, ''), _classes3)
23283      }, instance);
23284      this.toggleClasses(e.parentNode, p.parentClass);
23285    }
23286  }, {
23287    key: "cleanup",
23288    value: function cleanup() {
23289      for (var i = 0; i < this.instances.length; i += 1) {
23290        var instance = this.instances[i];
23291
23292        if (instance.stateContainer) {
23293          instance.props.scrollEl.removeEventListener('scroll', instance.stateContainer);
23294        }
23295
23296        this.removeInstance(instance);
23297      }
23298
23299      this.manageState = false;
23300      this.instances = [];
23301    }
23302  }]);
23303
23304  return Stickybits;
23305}();
23306
23307function stickybits(target, o) {
23308  return new Stickybits(target, o);
23309}
23310
23311},{}],20:[function(require,module,exports){
23312"use strict";
23313
23314function HCTest() {
23315  var objDiv = document.createElement('div');
23316  objDiv.style.color = 'rgba(245,240,255,0)';
23317  document.body.appendChild(objDiv);
23318  var strColor = document.defaultView ? document.defaultView.getComputedStyle(objDiv, null).color : objDiv.currentStyle.color;
23319  strColor = strColor.replace(/ /g, '');
23320  document.body.removeChild(objDiv);
23321
23322  if (strColor !== 'rgba(245,240,255,0)') {
23323    document.body.classList.add('hcm-true');
23324  }
23325}
23326
23327ready(function () {
23328  HCTest();
23329});
23330
23331},{}],21:[function(require,module,exports){
23332"use strict";
23333
23334window.initLeafletExtended = function (rootContainer) {
23335  var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
23336
23337  if (typeof rootContainer == 'undefined' || rootContainer == null) {
23338    return;
23339  }
23340
23341  var mapID = 'map' + Math.floor(Math.random() * 100000);
23342  var categoryListContainer = rootContainer.querySelectorAll('.map-with-marker-categorie');
23343
23344  if (!categoryListContainer.length) {
23345    var labelMap = rootContainer.getAttribute('data-label-map');
23346    var markerTitleSuffix = rootContainer.getAttribute('data-marker-title-suffix');
23347    var mapContainer = document.createElement('div');
23348    mapContainer.id = 'map-extended' + mapID;
23349    mapContainer.setAttribute('role', 'application');
23350    mapContainer.setAttribute('aria-label', labelMap);
23351    rootContainer.insertBefore(mapContainer, rootContainer.firstChild);
23352    var l;
23353    var markers = L.featureGroup();
23354    var markerItems = rootContainer.querySelectorAll('li[data-lat]');
23355
23356    if (markerItems.length > 0) {
23357      var markerIcon = rootContainer.getAttribute('data-icon');
23358      var markerIconWidth = rootContainer.getAttribute('data-icon-width');
23359      var markerIconHeight = rootContainer.getAttribute('data-icon-height');
23360      var icon = L.icon({
23361        iconUrl: markerIcon,
23362        iconSize: [markerIconWidth, markerIconHeight]
23363      });
23364      var m;
23365
23366      for (m = 0; m < markerItems.length; m++) {
23367        var markerLon = markerItems[m].getAttribute('data-lon');
23368        var markerLat = markerItems[m].getAttribute('data-lat');
23369        var markerTitle = markerItems[m].getAttribute('data-title');
23370        var markerObj = L.marker([markerLat, markerLon], {
23371          icon: icon,
23372          alt: markerTitle + ' ' + markerTitleSuffix
23373        }).bindPopup(markerItems[m].innerHTML).addTo(markers);
23374        markerObj.addEventListener('click', function (event) {
23375          this.openPopup();
23376        });
23377      }
23378    }
23379
23380    var mapOnLoad = function mapOnLoad(event) {
23381      var skipToStart = document.createElement('a');
23382      skipToStart.innerHTML = leaflet.skipToStart;
23383      skipToStart.href = '#' + mapContainer.id;
23384      skipToStart.classList.add('leaflet-skip-to-start');
23385      rootContainer.insertBefore(skipToStart, mapContainer.nextSibling);
23386      var skipToEnd = document.createElement('a');
23387      skipToEnd.innerHTML = leaflet.skipToEnd;
23388      skipToEnd.href = '#' + mapContainer.id;
23389      skipToEnd.classList.add('leaflet-skip-to-end');
23390      rootContainer.insertBefore(skipToEnd, mapContainer);
23391
23392      skipToStart.onclick = function (event) {
23393        event.preventDefault();
23394        skipToEnd.focus();
23395      };
23396
23397      skipToEnd.onclick = function (event) {
23398        event.preventDefault();
23399        skipToStart.focus();
23400      };
23401    };
23402
23403    var baseLayer = L.tileLayer('https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', {
23404      attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
23405    });
23406    var map = L.map('map-extended' + mapID, {
23407      layers: [baseLayer, markers],
23408      center: markers.getBounds().getCenter(),
23409      zoomControl: false,
23410      scrollWheelZoom: false,
23411      sleep: true,
23412      sleepOpacity: .6,
23413      sleepNoteStyle: {
23414        maxWidth: '10rem',
23415        opacity: 1
23416      },
23417      wakeMessage: leaflet.wakeMessage,
23418      wakeMessageTouch: leaflet.wakeMessageTouch
23419    });
23420    map.on('load', mapOnLoad);
23421    L.control.zoom({
23422      zoomInTitle: leaflet.zoomInTitle,
23423      zoomOutTitle: leaflet.zoomOutTitle
23424    }).addTo(map);
23425    map.fitBounds(markers.getBounds().pad(.1));
23426    baseLayer.on('tileload', function (event) {
23427      event.tile.removeAttribute('role');
23428    });
23429    document.querySelector('.leaflet-shadow-pane').remove();
23430    map.on('popupopen', function (event) {
23431      event.popup._closeButton.setAttribute('aria-label', leaflet.closePopupLabel);
23432
23433      var clickedMarker = event.popup._source._icon;
23434
23435      event.popup._closeButton.addEventListener('click', function (event) {
23436        clickedMarker.focus();
23437      }, {
23438        once: true
23439      });
23440
23441      event.popup._wrapper.setAttribute('tabindex', '0');
23442
23443      event.popup._wrapper.focus();
23444    });
23445    var marker = mapContainer.querySelectorAll('.leaflet-marker-icon.leaflet-interactive');
23446
23447    for (var i = 0; i < marker.length; i++) {
23448      marker[i].setAttribute('role', 'button');
23449    }
23450  }
23451};
23452
23453},{}],22:[function(require,module,exports){
23454"use strict";
23455
23456window.initLeaflet = function (rootContainer) {
23457  var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
23458
23459  if (typeof rootContainer == 'undefined' || rootContainer == null) {
23460    return;
23461  }
23462
23463  var mapID = 'map' + Math.floor(Math.random() * 100000);
23464  var labelMap = rootContainer.getAttribute('data-label-map');
23465  var markerTitleSuffix = rootContainer.getAttribute('data-marker-title-suffix');
23466  var mapContainer = document.createElement('div');
23467  mapContainer.id = 'map' + mapID;
23468  mapContainer.setAttribute('role', 'application');
23469  mapContainer.setAttribute('aria-label', labelMap);
23470  rootContainer.insertBefore(mapContainer, rootContainer.firstChild);
23471  var markerItems = rootContainer.querySelectorAll('.a5-map-marker');
23472  var layer;
23473
23474  if (markerItems.length > 0) {
23475    layer = L.layerGroup();
23476    var m;
23477
23478    for (m = 0; m < markerItems.length; m++) {
23479      var markerLon = markerItems[m].getAttribute('data-lon');
23480      var markerLat = markerItems[m].getAttribute('data-lat');
23481      var markerTitle = markerItems[m].getAttribute('data-title');
23482      var markerIcon = markerItems[m].getAttribute('data-icon');
23483      var markerIconWidth = markerItems[m].getAttribute('data-icon-width');
23484      var markerIconHeight = markerItems[m].getAttribute('data-icon-height');
23485      markerItems[m].setAttribute('aria-hidden', 'true');
23486      var icon = L.icon({
23487        iconUrl: markerIcon,
23488        iconSize: [markerIconWidth, markerIconHeight],
23489        className: 'marker-' + m
23490      });
23491      var markerObj = L.marker([markerLat, markerLon], {
23492        icon: icon,
23493        alt: markerTitle + ' ' + markerTitleSuffix
23494      }).bindPopup(markerItems[m].innerHTML).addTo(layer);
23495      markerObj.addEventListener('click', function (event) {
23496        this.openPopup();
23497      });
23498    }
23499  }
23500
23501  var initLat = rootContainer.getAttribute('data-init-lat');
23502  var initLon = rootContainer.getAttribute('data-init-lon');
23503  var initZoom = rootContainer.getAttribute('data-init-zoom');
23504  var baseLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
23505    attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
23506  });
23507  var map = L.map('map' + mapID, {
23508    layers: [baseLayer, layer],
23509    zoomControl: false,
23510    scrollWheelZoom: false,
23511    sleep: true,
23512    sleepOpacity: .9,
23513    sleepNoteStyle: {
23514      maxWidth: '10rem',
23515      opacity: 1
23516    },
23517    wakeMessage: leaflet.wakeMessage,
23518    wakeMessageTouch: leaflet.wakeMessageTouch
23519  });
23520  L.control.fullscreen({
23521    position: 'topleft',
23522    title: leaflet.fullScreenTitle,
23523    titleCancel: leaflet.fullScreenTitleCancel
23524  }).addTo(map);
23525  map.on('enterFullscreen', function (event) {
23526    mapContainer.classList.add('leaflet-fullscreen');
23527  });
23528  map.on('exitFullscreen', function (event) {
23529    mapContainer.classList.remove('leaflet-fullscreen');
23530  });
23531  L.control.zoom({
23532    zoomInTitle: leaflet.zoomInTitle,
23533    zoomOutTitle: leaflet.zoomOutTitle
23534  }).addTo(map);
23535  baseLayer.on('tileload', function (event) {
23536    event.tile.removeAttribute('role');
23537  });
23538  document.querySelector('.leaflet-shadow-pane').remove();
23539  map.on('popupopen', function (event) {
23540    event.popup._closeButton.setAttribute('aria-label', leaflet.closePopupLabel);
23541
23542    var clickedMarker = event.popup._source._icon;
23543
23544    event.popup._closeButton.addEventListener('click', function (event) {
23545      clickedMarker.focus();
23546    }, {
23547      once: true
23548    });
23549
23550    event.popup._wrapper.setAttribute('tabindex', '0');
23551
23552    event.popup._wrapper.focus();
23553  });
23554  map.setView([initLat, initLon], initZoom);
23555
23556  if (rootContainer.closest('details')) {
23557    var detailsContainer = rootContainer.closest('details');
23558    detailsContainer.addEventListener('toggle', function (event) {
23559      if (detailsContainer.hasAttribute('open')) {
23560        map.invalidateSize();
23561      }
23562    });
23563  }
23564
23565  var marker = mapContainer.querySelectorAll('.leaflet-marker-icon.leaflet-interactive');
23566
23567  for (var i = 0; i < marker.length; i++) {
23568    marker[i].setAttribute('role', 'button');
23569  }
23570
23571  if (active == true) {
23572    mapContainer.focus();
23573  }
23574};
23575
23576},{}],23:[function(require,module,exports){
vendor: 19,987 bytes, lines 23577-24390
23577(function(window, factory) {
23578	var lazySizes = factory(window, window.document, Date);
23579	window.lazySizes = lazySizes;
23580	if(typeof module == 'object' && module.exports){
23581		module.exports = lazySizes;
23582	}
23583}(typeof window != 'undefined' ?
23584      window : {}, 
23585/**
23586 * import("./types/global")
23587 * @typedef { import("./types/lazysizes-config").LazySizesConfigPartial } LazySizesConfigPartial
23588 */
23589function l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost
23590	'use strict';
23591	/*jshint eqnull:true */
23592
23593	var lazysizes,
23594		/**
23595		 * @type { LazySizesConfigPartial }
23596		 */
23597		lazySizesCfg;
23598
23599	(function(){
23600		var prop;
23601
23602		var lazySizesDefaults = {
23603			lazyClass: 'lazyload',
23604			loadedClass: 'lazyloaded',
23605			loadingClass: 'lazyloading',
23606			preloadClass: 'lazypreload',
23607			errorClass: 'lazyerror',
23608			//strictClass: 'lazystrict',
23609			autosizesClass: 'lazyautosizes',
23610			fastLoadedClass: 'ls-is-cached',
23611			iframeLoadMode: 0,
23612			srcAttr: 'data-src',
23613			srcsetAttr: 'data-srcset',
23614			sizesAttr: 'data-sizes',
23615			//preloadAfterLoad: false,
23616			minSize: 40,
23617			customMedia: {},
23618			init: true,
23619			expFactor: 1.5,
23620			hFac: 0.8,
23621			loadMode: 2,
23622			loadHidden: true,
23623			ricTimeout: 0,
23624			throttleDelay: 125,
23625		};
23626
23627		lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};
23628
23629		for(prop in lazySizesDefaults){
23630			if(!(prop in lazySizesCfg)){
23631				lazySizesCfg[prop] = lazySizesDefaults[prop];
23632			}
23633		}
23634	})();
23635
23636	if (!document || !document.getElementsByClassName) {
23637		return {
23638			init: function () {},
23639			/**
23640			 * @type { LazySizesConfigPartial }
23641			 */
23642			cfg: lazySizesCfg,
23643			/**
23644			 * @type { true }
23645			 */
23646			noSupport: true,
23647		};
23648	}
23649
23650	var docElem = document.documentElement;
23651
23652	var supportPicture = window.HTMLPictureElement;
23653
23654	var _addEventListener = 'addEventListener';
23655
23656	var _getAttribute = 'getAttribute';
23657
23658	/**
23659	 * Update to bind to window because 'this' becomes null during SSR
23660	 * builds.
23661	 */
23662	var addEventListener = window[_addEventListener].bind(window);
23663
23664	var setTimeout = window.setTimeout;
23665
23666	var requestAnimationFrame = window.requestAnimationFrame || setTimeout;
23667
23668	var requestIdleCallback = window.requestIdleCallback;
23669
23670	var regPicture = /^picture$/i;
23671
23672	var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];
23673
23674	var regClassCache = {};
23675
23676	var forEach = Array.prototype.forEach;
23677
23678	/**
23679	 * @param ele {Element}
23680	 * @param cls {string}
23681	 */
23682	var hasClass = function(ele, cls) {
23683		if(!regClassCache[cls]){
23684			regClassCache[cls] = new RegExp('(\\s|^)'+cls+'(\\s|$)');
23685		}
23686		return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];
23687	};
23688
23689	/**
23690	 * @param ele {Element}
23691	 * @param cls {string}
23692	 */
23693	var addClass = function(ele, cls) {
23694		if (!hasClass(ele, cls)){
23695			ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);
23696		}
23697	};
23698
23699	/**
23700	 * @param ele {Element}
23701	 * @param cls {string}
23702	 */
23703	var removeClass = function(ele, cls) {
23704		var reg;
23705		if ((reg = hasClass(ele,cls))) {
23706			ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));
23707		}
23708	};
23709
23710	var addRemoveLoadEvents = function(dom, fn, add){
23711		var action = add ? _addEventListener : 'removeEventListener';
23712		if(add){
23713			addRemoveLoadEvents(dom, fn);
23714		}
23715		loadEvents.forEach(function(evt){
23716			dom[action](evt, fn);
23717		});
23718	};
23719
23720	/**
23721	 * @param elem { Element }
23722	 * @param name { string }
23723	 * @param detail { any }
23724	 * @param noBubbles { boolean }
23725	 * @param noCancelable { boolean }
23726	 * @returns { CustomEvent }
23727	 */
23728	var triggerEvent = function(elem, name, detail, noBubbles, noCancelable){
23729		var event = document.createEvent('Event');
23730
23731		if(!detail){
23732			detail = {};
23733		}
23734
23735		detail.instance = lazysizes;
23736
23737		event.initEvent(name, !noBubbles, !noCancelable);
23738
23739		event.detail = detail;
23740
23741		elem.dispatchEvent(event);
23742		return event;
23743	};
23744
23745	var updatePolyfill = function (el, full){
23746		var polyfill;
23747		if( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){
23748			if(full && full.src && !el[_getAttribute]('srcset')){
23749				el.setAttribute('srcset', full.src);
23750			}
23751			polyfill({reevaluate: true, elements: [el]});
23752		} else if(full && full.src){
23753			el.src = full.src;
23754		}
23755	};
23756
23757	var getCSS = function (elem, style){
23758		return (getComputedStyle(elem, null) || {})[style];
23759	};
23760
23761	/**
23762	 *
23763	 * @param elem { Element }
23764	 * @param parent { Element }
23765	 * @param [width] {number}
23766	 * @returns {number}
23767	 */
23768	var getWidth = function(elem, parent, width){
23769		width = width || elem.offsetWidth;
23770
23771		while(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){
23772			width =  parent.offsetWidth;
23773			parent = parent.parentNode;
23774		}
23775
23776		return width;
23777	};
23778
23779	var rAF = (function(){
23780		var running, waiting;
23781		var firstFns = [];
23782		var secondFns = [];
23783		var fns = firstFns;
23784
23785		var run = function(){
23786			var runFns = fns;
23787
23788			fns = firstFns.length ? secondFns : firstFns;
23789
23790			running = true;
23791			waiting = false;
23792
23793			while(runFns.length){
23794				runFns.shift()();
23795			}
23796
23797			running = false;
23798		};
23799
23800		var rafBatch = function(fn, queue){
23801			if(running && !queue){
23802				fn.apply(this, arguments);
23803			} else {
23804				fns.push(fn);
23805
23806				if(!waiting){
23807					waiting = true;
23808					(document.hidden ? setTimeout : requestAnimationFrame)(run);
23809				}
23810			}
23811		};
23812
23813		rafBatch._lsFlush = run;
23814
23815		return rafBatch;
23816	})();
23817
23818	var rAFIt = function(fn, simple){
23819		return simple ?
23820			function() {
23821				rAF(fn);
23822			} :
23823			function(){
23824				var that = this;
23825				var args = arguments;
23826				rAF(function(){
23827					fn.apply(that, args);
23828				});
23829			}
23830		;
23831	};
23832
23833	var throttle = function(fn){
23834		var running;
23835		var lastTime = 0;
23836		var gDelay = lazySizesCfg.throttleDelay;
23837		var rICTimeout = lazySizesCfg.ricTimeout;
23838		var run = function(){
23839			running = false;
23840			lastTime = Date.now();
23841			fn();
23842		};
23843		var idleCallback = requestIdleCallback && rICTimeout > 49 ?
23844			function(){
23845				requestIdleCallback(run, {timeout: rICTimeout});
23846
23847				if(rICTimeout !== lazySizesCfg.ricTimeout){
23848					rICTimeout = lazySizesCfg.ricTimeout;
23849				}
23850			} :
23851			rAFIt(function(){
23852				setTimeout(run);
23853			}, true)
23854		;
23855
23856		return function(isPriority){
23857			var delay;
23858
23859			if((isPriority = isPriority === true)){
23860				rICTimeout = 33;
23861			}
23862
23863			if(running){
23864				return;
23865			}
23866
23867			running =  true;
23868
23869			delay = gDelay - (Date.now() - lastTime);
23870
23871			if(delay < 0){
23872				delay = 0;
23873			}
23874
23875			if(isPriority || delay < 9){
23876				idleCallback();
23877			} else {
23878				setTimeout(idleCallback, delay);
23879			}
23880		};
23881	};
23882
23883	//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html
23884	var debounce = function(func) {
23885		var timeout, timestamp;
23886		var wait = 99;
23887		var run = function(){
23888			timeout = null;
23889			func();
23890		};
23891		var later = function() {
23892			var last = Date.now() - timestamp;
23893
23894			if (last < wait) {
23895				setTimeout(later, wait - last);
23896			} else {
23897				(requestIdleCallback || run)(run);
23898			}
23899		};
23900
23901		return function() {
23902			timestamp = Date.now();
23903
23904			if (!timeout) {
23905				timeout = setTimeout(later, wait);
23906			}
23907		};
23908	};
23909
23910	var loader = (function(){
23911		var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;
23912
23913		var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;
23914
23915		var regImg = /^img$/i;
23916		var regIframe = /^iframe$/i;
23917
23918		var supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));
23919
23920		var shrinkExpand = 0;
23921		var currentExpand = 0;
23922
23923		var isLoading = 0;
23924		var lowRuns = -1;
23925
23926		var resetPreloading = function(e){
23927			isLoading--;
23928			if(!e || isLoading < 0 || !e.target){
23929				isLoading = 0;
23930			}
23931		};
23932
23933		var isVisible = function (elem) {
23934			if (isBodyHidden == null) {
23935				isBodyHidden = getCSS(document.body, 'visibility') == 'hidden';
23936			}
23937
23938			return isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');
23939		};
23940
23941		var isNestedVisible = function(elem, elemExpand){
23942			var outerRect;
23943			var parent = elem;
23944			var visible = isVisible(elem);
23945
23946			eLtop -= elemExpand;
23947			eLbottom += elemExpand;
23948			eLleft -= elemExpand;
23949			eLright += elemExpand;
23950
23951			while(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){
23952				visible = ((getCSS(parent, 'opacity') || 1) > 0);
23953
23954				if(visible && getCSS(parent, 'overflow') != 'visible'){
23955					outerRect = parent.getBoundingClientRect();
23956					visible = eLright > outerRect.left &&
23957						eLleft < outerRect.right &&
23958						eLbottom > outerRect.top - 1 &&
23959						eLtop < outerRect.bottom + 1
23960					;
23961				}
23962			}
23963
23964			return visible;
23965		};
23966
23967		var checkElements = function() {
23968			var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,
23969				beforeExpandVal, defaultExpand, preloadExpand, hFac;
23970			var lazyloadElems = lazysizes.elements;
23971
23972			if((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){
23973
23974				i = 0;
23975
23976				lowRuns++;
23977
23978				for(; i < eLlen; i++){
23979
23980					if(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}
23981
23982					if(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}
23983
23984					if(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){
23985						elemExpand = currentExpand;
23986					}
23987
23988					if (!defaultExpand) {
23989						defaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?
23990							docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :
23991							lazySizesCfg.expand;
23992
23993						lazysizes._defEx = defaultExpand;
23994
23995						preloadExpand = defaultExpand * lazySizesCfg.expFactor;
23996						hFac = lazySizesCfg.hFac;
23997						isBodyHidden = null;
23998
23999						if(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){
24000							currentExpand = preloadExpand;
24001							lowRuns = 0;
24002						} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){
24003							currentExpand = defaultExpand;
24004						} else {
24005							currentExpand = shrinkExpand;
24006						}
24007					}
24008
24009					if(beforeExpandVal !== elemExpand){
24010						eLvW = innerWidth + (elemExpand * hFac);
24011						elvH = innerHeight + elemExpand;
24012						elemNegativeExpand = elemExpand * -1;
24013						beforeExpandVal = elemExpand;
24014					}
24015
24016					rect = lazyloadElems[i].getBoundingClientRect();
24017
24018					if ((eLbottom = rect.bottom) >= elemNegativeExpand &&
24019						(eLtop = rect.top) <= elvH &&
24020						(eLright = rect.right) >= elemNegativeExpand * hFac &&
24021						(eLleft = rect.left) <= eLvW &&
24022						(eLbottom || eLright || eLleft || eLtop) &&
24023						(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&
24024						((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){
24025						unveilElement(lazyloadElems[i]);
24026						loadedSomething = true;
24027						if(isLoading > 9){break;}
24028					} else if(!loadedSomething && isCompleted && !autoLoadElem &&
24029						isLoading < 4 && lowRuns < 4 && loadMode > 2 &&
24030						(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&
24031						(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){
24032						autoLoadElem = preloadElems[0] || lazyloadElems[i];
24033					}
24034				}
24035
24036				if(autoLoadElem && !loadedSomething){
24037					unveilElement(autoLoadElem);
24038				}
24039			}
24040		};
24041
24042		var throttledCheckElements = throttle(checkElements);
24043
24044		var switchLoadingClass = function(e){
24045			var elem = e.target;
24046
24047			if (elem._lazyCache) {
24048				delete elem._lazyCache;
24049				return;
24050			}
24051
24052			resetPreloading(e);
24053			addClass(elem, lazySizesCfg.loadedClass);
24054			removeClass(elem, lazySizesCfg.loadingClass);
24055			addRemoveLoadEvents(elem, rafSwitchLoadingClass);
24056			triggerEvent(elem, 'lazyloaded');
24057		};
24058		var rafedSwitchLoadingClass = rAFIt(switchLoadingClass);
24059		var rafSwitchLoadingClass = function(e){
24060			rafedSwitchLoadingClass({target: e.target});
24061		};
24062
24063		var changeIframeSrc = function(elem, src){
24064			var loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;
24065
24066			// loadMode can be also a string!
24067			if (loadMode == 0) {
24068				elem.contentWindow.location.replace(src);
24069			} else if (loadMode == 1) {
24070				elem.src = src;
24071			}
24072		};
24073
24074		var handleSources = function(source){
24075			var customMedia;
24076
24077			var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);
24078
24079			if( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){
24080				source.setAttribute('media', customMedia);
24081			}
24082
24083			if(sourceSrcset){
24084				source.setAttribute('srcset', sourceSrcset);
24085			}
24086		};
24087
24088		var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){
24089			var src, srcset, parent, isPicture, event, firesLoad;
24090
24091			if(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){
24092
24093				if(sizes){
24094					if(isAuto){
24095						addClass(elem, lazySizesCfg.autosizesClass);
24096					} else {
24097						elem.setAttribute('sizes', sizes);
24098					}
24099				}
24100
24101				srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);
24102				src = elem[_getAttribute](lazySizesCfg.srcAttr);
24103
24104				if(isImg) {
24105					parent = elem.parentNode;
24106					isPicture = parent && regPicture.test(parent.nodeName || '');
24107				}
24108
24109				firesLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));
24110
24111				event = {target: elem};
24112
24113				addClass(elem, lazySizesCfg.loadingClass);
24114
24115				if(firesLoad){
24116					clearTimeout(resetPreloadingTimer);
24117					resetPreloadingTimer = setTimeout(resetPreloading, 2500);
24118					addRemoveLoadEvents(elem, rafSwitchLoadingClass, true);
24119				}
24120
24121				if(isPicture){
24122					forEach.call(parent.getElementsByTagName('source'), handleSources);
24123				}
24124
24125				if(srcset){
24126					elem.setAttribute('srcset', srcset);
24127				} else if(src && !isPicture){
24128					if(regIframe.test(elem.nodeName)){
24129						changeIframeSrc(elem, src);
24130					} else {
24131						elem.src = src;
24132					}
24133				}
24134
24135				if(isImg && (srcset || isPicture)){
24136					updatePolyfill(elem, {src: src});
24137				}
24138			}
24139
24140			if(elem._lazyRace){
24141				delete elem._lazyRace;
24142			}
24143			removeClass(elem, lazySizesCfg.lazyClass);
24144
24145			rAF(function(){
24146				// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)
24147				var isLoaded = elem.complete && elem.naturalWidth > 1;
24148
24149				if( !firesLoad || isLoaded){
24150					if (isLoaded) {
24151						addClass(elem, lazySizesCfg.fastLoadedClass);
24152					}
24153					switchLoadingClass(event);
24154					elem._lazyCache = true;
24155					setTimeout(function(){
24156						if ('_lazyCache' in elem) {
24157							delete elem._lazyCache;
24158						}
24159					}, 9);
24160				}
24161				if (elem.loading == 'lazy') {
24162					isLoading--;
24163				}
24164			}, true);
24165		});
24166
24167		/**
24168		 *
24169		 * @param elem { Element }
24170		 */
24171		var unveilElement = function (elem){
24172			if (elem._lazyRace) {return;}
24173			var detail;
24174
24175			var isImg = regImg.test(elem.nodeName);
24176
24177			//allow using sizes="auto", but don't use. it's invalid. Use data-sizes="auto" or a valid value for sizes instead (i.e.: sizes="80vw")
24178			var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));
24179			var isAuto = sizes == 'auto';
24180
24181			if( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}
24182
24183			detail = triggerEvent(elem, 'lazyunveilread').detail;
24184
24185			if(isAuto){
24186				 autoSizer.updateElem(elem, true, elem.offsetWidth);
24187			}
24188
24189			elem._lazyRace = true;
24190			isLoading++;
24191
24192			lazyUnveil(elem, detail, isAuto, sizes, isImg);
24193		};
24194
24195		var afterScroll = debounce(function(){
24196			lazySizesCfg.loadMode = 3;
24197			throttledCheckElements();
24198		});
24199
24200		var altLoadmodeScrollListner = function(){
24201			if(lazySizesCfg.loadMode == 3){
24202				lazySizesCfg.loadMode = 2;
24203			}
24204			afterScroll();
24205		};
24206
24207		var onload = function(){
24208			if(isCompleted){return;}
24209			if(Date.now() - started < 999){
24210				setTimeout(onload, 999);
24211				return;
24212			}
24213
24214
24215			isCompleted = true;
24216
24217			lazySizesCfg.loadMode = 3;
24218
24219			throttledCheckElements();
24220
24221			addEventListener('scroll', altLoadmodeScrollListner, true);
24222		};
24223
24224		return {
24225			_: function(){
24226				started = Date.now();
24227
24228				lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);
24229				preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);
24230
24231				addEventListener('scroll', throttledCheckElements, true);
24232
24233				addEventListener('resize', throttledCheckElements, true);
24234
24235				addEventListener('pageshow', function (e) {
24236					if (e.persisted) {
24237						var loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);
24238
24239						if (loadingElements.length && loadingElements.forEach) {
24240							requestAnimationFrame(function () {
24241								loadingElements.forEach( function (img) {
24242									if (img.complete) {
24243										unveilElement(img);
24244									}
24245								});
24246							});
24247						}
24248					}
24249				});
24250
24251				if(window.MutationObserver){
24252					new MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );
24253				} else {
24254					docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);
24255					docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);
24256					setInterval(throttledCheckElements, 999);
24257				}
24258
24259				addEventListener('hashchange', throttledCheckElements, true);
24260
24261				//, 'fullscreenchange'
24262				['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){
24263					document[_addEventListener](name, throttledCheckElements, true);
24264				});
24265
24266				if((/d$|^c/.test(document.readyState))){
24267					onload();
24268				} else {
24269					addEventListener('load', onload);
24270					document[_addEventListener]('DOMContentLoaded', throttledCheckElements);
24271					setTimeout(onload, 20000);
24272				}
24273
24274				if(lazysizes.elements.length){
24275					checkElements();
24276					rAF._lsFlush();
24277				} else {
24278					throttledCheckElements();
24279				}
24280			},
24281			checkElems: throttledCheckElements,
24282			unveil: unveilElement,
24283			_aLSL: altLoadmodeScrollListner,
24284		};
24285	})();
24286
24287
24288	var autoSizer = (function(){
24289		var autosizesElems;
24290
24291		var sizeElement = rAFIt(function(elem, parent, event, width){
24292			var sources, i, len;
24293			elem._lazysizesWidth = width;
24294			width += 'px';
24295
24296			elem.setAttribute('sizes', width);
24297
24298			if(regPicture.test(parent.nodeName || '')){
24299				sources = parent.getElementsByTagName('source');
24300				for(i = 0, len = sources.length; i < len; i++){
24301					sources[i].setAttribute('sizes', width);
24302				}
24303			}
24304
24305			if(!event.detail.dataAttr){
24306				updatePolyfill(elem, event.detail);
24307			}
24308		});
24309		/**
24310		 *
24311		 * @param elem {Element}
24312		 * @param dataAttr
24313		 * @param [width] { number }
24314		 */
24315		var getSizeElement = function (elem, dataAttr, width){
24316			var event;
24317			var parent = elem.parentNode;
24318
24319			if(parent){
24320				width = getWidth(elem, parent, width);
24321				event = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});
24322
24323				if(!event.defaultPrevented){
24324					width = event.detail.width;
24325
24326					if(width && width !== elem._lazysizesWidth){
24327						sizeElement(elem, parent, event, width);
24328					}
24329				}
24330			}
24331		};
24332
24333		var updateElementsSizes = function(){
24334			var i;
24335			var len = autosizesElems.length;
24336			if(len){
24337				i = 0;
24338
24339				for(; i < len; i++){
24340					getSizeElement(autosizesElems[i]);
24341				}
24342			}
24343		};
24344
24345		var debouncedUpdateElementsSizes = debounce(updateElementsSizes);
24346
24347		return {
24348			_: function(){
24349				autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);
24350				addEventListener('resize', debouncedUpdateElementsSizes);
24351			},
24352			checkElems: debouncedUpdateElementsSizes,
24353			updateElem: getSizeElement
24354		};
24355	})();
24356
24357	var init = function(){
24358		if(!init.i && document.getElementsByClassName){
24359			init.i = true;
24360			autoSizer._();
24361			loader._();
24362		}
24363	};
24364
24365	setTimeout(function(){
24366		if(lazySizesCfg.init){
24367			init();
24368		}
24369	});
24370
24371	lazysizes = {
24372		/**
24373		 * @type { LazySizesConfigPartial }
24374		 */
24375		cfg: lazySizesCfg,
24376		autoSizer: autoSizer,
24377		loader: loader,
24378		init: init,
24379		uP: updatePolyfill,
24380		aC: addClass,
24381		rC: removeClass,
24382		hC: hasClass,
24383		fire: triggerEvent,
24384		gW: getWidth,
24385		rAF: rAF,
24386	};
24387
24388	return lazysizes;
24389}
24390));
24391
24392},{}],24:[function(require,module,exports){
24393(function(window, factory) {
24394	var globalInstall = function(){
24395		factory(window.lazySizes);
24396		window.removeEventListener('lazyunveilread', globalInstall, true);
24397	};
24398
24399	factory = factory.bind(null, window, window.document);
24400
24401	if(typeof module == 'object' && module.exports){
24402		factory(require('lazysizes'));
24403	} else if (typeof define == 'function' && define.amd) {
24404		define(['lazysizes'], factory);
24405	} else if(window.lazySizes) {
24406		globalInstall();
24407	} else {
24408		window.addEventListener('lazyunveilread', globalInstall, true);
24409	}
24410}(window, function(window, document, lazySizes) {
24411	'use strict';
24412
24413	var imgSupport = 'loading' in HTMLImageElement.prototype;
24414	var iframeSupport = 'loading' in HTMLIFrameElement.prototype;
24415	var isConfigSet = false;
24416	var oldPrematureUnveil = lazySizes.prematureUnveil;
24417	var cfg = lazySizes.cfg;
24418	var listenerMap = {
24419		focus: 1,
24420		mouseover: 1,
24421		click: 1,
24422		load: 1,
24423		transitionend: 1,
24424		animationend: 1,
24425		scroll: 1,
24426		resize: 1,
24427	};
24428
24429	if (!cfg.nativeLoading) {
24430		cfg.nativeLoading = {};
24431	}
24432
24433	if (!window.addEventListener || !window.MutationObserver || (!imgSupport && !iframeSupport)) {
24434		return;
24435	}
24436
24437	function disableEvents() {
24438		var loader = lazySizes.loader;
24439		var throttledCheckElements = loader.checkElems;
24440		var removeALSL = function(){
24441			setTimeout(function(){
24442				window.removeEventListener('scroll', loader._aLSL, true);
24443			}, 1000);
24444		};
24445		var currentListenerMap = typeof cfg.nativeLoading.disableListeners == 'object' ?
24446			cfg.nativeLoading.disableListeners :
24447			listenerMap;
24448
24449		if (currentListenerMap.scroll) {
24450			window.addEventListener('load', removeALSL);
24451			removeALSL();
24452
24453			window.removeEventListener('scroll', throttledCheckElements, true);
24454		}
24455
24456		if (currentListenerMap.resize) {
24457			window.removeEventListener('resize', throttledCheckElements, true);
24458		}
24459
24460		Object.keys(currentListenerMap).forEach(function(name) {
24461			if (currentListenerMap[name]) {
24462				document.removeEventListener(name, throttledCheckElements, true);
24463			}
24464		});
24465	}
24466
24467	function runConfig() {
24468		if (isConfigSet) {return;}
24469		isConfigSet = true;
24470
24471		if (imgSupport && iframeSupport && cfg.nativeLoading.disableListeners) {
24472			if (cfg.nativeLoading.disableListeners === true) {
24473				cfg.nativeLoading.setLoadingAttribute = true;
24474			}
24475
24476			disableEvents();
24477		}
24478
24479		if (cfg.nativeLoading.setLoadingAttribute) {
24480			window.addEventListener('lazybeforeunveil', function(e){
24481				var element = e.target;
24482
24483				if ('loading' in element && !element.getAttribute('loading')) {
24484					element.setAttribute('loading', 'lazy');
24485				}
24486			}, true);
24487		}
24488	}
24489
24490	lazySizes.prematureUnveil = function prematureUnveil(element) {
24491
24492		if (!isConfigSet) {
24493			runConfig();
24494		}
24495
24496		if ('loading' in element &&
24497			(cfg.nativeLoading.setLoadingAttribute || element.getAttribute('loading')) &&
24498			(element.getAttribute('data-sizes') != 'auto' || element.offsetWidth)) {
24499			return true;
24500		}
24501
24502		if (oldPrematureUnveil) {
24503			return oldPrematureUnveil(element);
24504		}
24505	};
24506
24507}));
24508
24509},{"lazysizes":23}]},{},[1])
24510//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJkZXYvanMvYmFzZS5qcyIsImRldi9qcy9tb2R1bGVzL2dsaWdodGJveC5qcyIsImRldi9qcy9tb2R1bGVzL2xlYWZsZXQvbGVhZmxldC5jb250cm9sLmZ1bGxzY3JlZW4uanMiLCJkZXYvanMvbW9kdWxlcy9sZWFmbGV0L2xlYWZsZXQuanMiLCJkZXYvanMvbW9kdWxlcy9sZWFmbGV0L2xlYWZsZXQuc2xlZXAuanMiLCJkZXYvanMvbW9kdWxlcy9tbWVudS5qcyIsImRldi9qcy9tb2R1bGVzL3B4RWFzeUV4cGFuZC5qcyIsImRldi9qcy9tb2R1bGVzL3N3aXBlci5qcyIsImRldi9qcy9tb2R1bGVzL3dlYmNhbS5qcyIsImRldi9qcy9wYXJ0aWFscy9mb3JtLWluZm9idXR0b24uanMiLCJkZXYvanMvcGFydGlhbHMvaGFtYnVyZ2VyLmpzIiwiZGV2L2pzL3BhcnRpYWxzL2xpZ2h0Ym94LmpzIiwiZGV2L2pzL3BhcnRpYWxzL21ldGEuanMiLCJkZXYvanMvcGFydGlhbHMvbW1lbnUuanMiLCJkZXYvanMvcGFydGlhbHMvc2Nyb2xsc3RhcnQuanMiLCJkZXYvanMvcGFydGlhbHMvc2VhcmNoZm9ybS5qcyIsImRldi9qcy9wYXJ0aWFscy9zd2lwZXIuanMiLCJkZXYvanMvcGFydGlhbHMvdG9nZ2xlLmpzIiwiZGV2L2pzL3BvbHlmaWxscy9zdGlja3liaXRzLmpzIiwiZGV2L2pzL3NjcmlwdHMvaGlnaC1jb250cmFzdC1tb2RlLmpzIiwiZGV2L2pzL3NjcmlwdHMvbGVhZmxldC1leHRlbmRlZC5qcyIsImRldi9qcy9zY3JpcHRzL2xlYWZsZXQuanMiLCJub2RlX21vZHVsZXMvbGF6eXNpemVzL2xhenlzaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9sYXp5c2l6ZXMvcGx1Z2lucy9uYXRpdmUtbG9hZGluZy9scy5uYXRpdmUtbG9hZGluZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFB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7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybi
24510BjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLypcbiAqXG4gKiBQcm90b3R5cGUgU3RhZHQgWGFudGVuXG4gKlxuICogQGRhdGUgICAyMDIzLTExXG4gKlxuICovXG4gXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBuby1qcyAtIGZhbGxzIG1vZGVybml6ciBkZWFrdGl2aWVydCB3aXJkXG4vLyBpbnMgSFRNTCB2ZXJzY2hvYmVuXG4vLyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKCduby1qcycsJ2pzJyk7XG4gXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBzdGlja3kgaG92ZXIgZml4IGbDvHIgaU9TIFxuKGZ1bmN0aW9uKGwpe3ZhciBpLHM9e3RvdWNoZW5kOmZ1bmN0aW9uKCl7fX07Zm9yKGkgaW4gcylsLmFkZEV2ZW50TGlzdGVuZXIoaSxzKX0pKGRvY3VtZW50KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRG9tIHJlYWR5XG4vLyB1c2U6IHJlYWR5KGZ1bmN0aW9uKCkgeyBhbGVydCgnaGVsbG8nKTsgfSk7XG5nbG9iYWwucmVhZHkgPSBmdW5jdGlvbihmbikge1xuICBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQgPyBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgOiBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIil7XG4gICAgZm4oKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZm4pO1xuICB9XG59XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhpZ2gtQ29udHJhc3QgTW9kZVxucmVxdWlyZSgnLi9zY3JpcHRzL2hpZ2gtY29udHJhc3QtbW9kZS5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJcblxuZ2xvYmFsLmNyZWF0ZUVsZW1lbnQgPSBkb21TdHJpbmcgPT4gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkb21TdHJpbmcsICd0ZXh0L2h0bWwnKS5ib2R5LmZpcnN0Q2hpbGQ7XG5cbmdsb2JhbC5oYXNQYXJlbnQgPSBmdW5jdGlvbihlbCwgc2VsZWN0b3IpIHtcbiAgaWYgKGVsKSB7IGRvIHtcbiAgICBpZiAoZWwgPT0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikpIHsgcmV0dXJuIHRydWU7IH1cbiAgICBpZiAoZWwubm9kZVR5cGUgPT09IDkpIHsgYnJlYWs7IH0gfSB3aGlsZSgoZWwgPSBlbC5wYXJlbnROb2RlKSk7XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUG9seWZpbGxzXG5cbi8vIGFzc2lnblxuLy8gcmVxdWlyZSgnLi9wb2x5ZmlsbHMvc3RpY2t5Yml0cy5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGlja3kgSGVhZGVyXG5pbXBvcnQgc3RpY2t5Yml0cyBmcm9tICcuL3BvbHlmaWxscy9zdGlja3liaXRzLmpzJztcblxucmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgc3RpY2t5Yml0cygnLm5hdi10cmFpbCcsIHtcbiAgICB1c2VTdGlja3lDbGFzc2VzOiB0cnVlXG4gIH0pO1xuXG59KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTGF6eWxvYWRpbmcgKCBucG0gaW5zdGFsbCBsYXp5c2l6ZXMgLS1zYXZlIClcbmltcG9ydCBsYXp5U2l6ZXMgZnJvbSAnbGF6eXNpemVzJztcbmltcG9ydCAnbGF6eXNpemVzL3BsdWdpbnMvbmF0aXZlLWxvYWRpbmcvbHMubmF0aXZlLWxvYWRpbmcnO1xuXG5sYXp5U2l6ZXMuY2ZnLm5hdGl2ZUxvYWRpbmcgPSB7XG4gIHNldExvYWRpbmdBdHRyaWJ1dGU6IHRydWUsXG4gIGRpc2FibGVMaXN0ZW5lcnM6IHtcbiAgICBzY3JvbGw6IHRydWVcbiAgfSxcbn07XG5cbmxhenlTaXplcy5jZmcubGF6eUNsYXNzID0gJ2pzLWxvYWQnO1xubGF6eVNpemVzLmNmZy5sb2FkaW5nQ2xhc3MgPSAnanMtbG9hZGluZyc7XG5sYXp5U2l6ZXMuY2ZnLmxvYWRlZENsYXNzID0gJ2pzLWxvYWRlZCc7XG5sYXp5U2l6ZXMuY2ZnLmF1dG9zaXplc0NsYXNzID0gJ2pzLWF1dG9zaXplcyc7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcnRpYWxzXG5cbi8vIFNjcm9sbHN0YXJ0IGbDvHIgVG9wbGluayB1c3cuXG5yZXF1aXJlKCcuL3BhcnRpYWxzL3Njcm9sbHN0YXJ0LmpzJyk7XG5cbi8vIEZvcm11bGFyLUVyd2VpdGVydW5nZW5cbi8vIHJlcXVpcmUoJy4vc2NyaXB0cy9mb3JtLWZseWluZy1sYWJlbC5qcycpO1xuXG4vLyBMaWdodGJveFxucmVxdWlyZSgnLi9wYXJ0aWFscy9saWdodGJveC5qcycpO1xuXG4vLyBBbnplaWdlIHp1bSBTY3JvbGxlbiBmw7xyIFJlc3BvbnNpdmUgVGFiZWxsZW5cbi8vIHJlcXVpcmUoJy4vcGFydGlhbHMvdGFibGUtaGFzLXNjcm9sbGJhci5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNTWVudVxucmVxdWlyZSgnLi9tb2R1bGVzL21tZW51LmpzJyk7XG5yZXF1aXJlKCcuL3BhcnRpYWxzL21tZW51LmpzJyk7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vYmlsbmF2aWdhdGlvbiBtaXQgU2xpZGVvdXRzXG5cbi8vIGltcG9ydCBweE5hdmlnYXRpb25Ub2dnbGUgZnJvbSAnLi9tb2R1bGVzL3B4TmF2aWdhdGlvblRvZ2dsZS5qcyc7XG5cbi8vIHJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIGNvbnN0IHN1Ym5hdmlnYXRpb24gPSBuZXcgcHhOYXZpZ2F0aW9uVG9nZ2xlKCcubmF2LXN1YjEnLHt
24510cbiAgLy8gICAncHJlZml4JyA6ICdhNTEnLFxuICAvLyAgICdzZWxlY3RvcicgOiAnLm5hdi1zdWIxIHVsIHVsJyxcbiAgLy8gICAnYnV0dG9uUG9zaXRpb24nIDogJ2JlZm9yZUxpbmsnXG4gIC8vIH0pO1xuXG4gIC8vIGNvbnN0IG1vYmlsbmF2aWdhdGlvbiA9IG5ldyBweE5hdmlnYXRpb25Ub2dnbGUoJy5uYXYtbW9iaWwnLHtcbiAgLy8gICAncHJlZml4JyA6ICdhNTInLFxuICAvLyAgICdzZWxlY3RvcicgOiAnLm5hdi1tb2JpbCB1bCB1bCcsXG4gIC8vICAgJ2J1dHRvblBvc2l0aW9uJyA6ICdiZWZvcmVMaW5rJ1xuICAvLyB9KTtcblxuLy8gfSk7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5hdmZvcm1cbi8vIGltcG9ydCBweE5hdkZvcm0gZnJvbSAnLi9tb2R1bGVzL3B4TmF2Rm9ybS5qcyc7XG5cbi8vIHJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIFNwcmFjaG5hdmlnYXRpb25cbiAgLy8gY29uc3QgbGFuZ3VhZ2Vmb3JtID0gbmV3IHB4TmF2Rm9ybSgnLmxhbmd1YWdlZm9ybScpO1xuXG4vLyB9KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcHhFYXN5RXhwYW5kXG5pbXBvcnQgcHhFYXN5RXhwYW5kIGZyb20gJy4vbW9kdWxlcy9weEVhc3lFeHBhbmQuanMnO1xuXG5nbG9iYWwucHhFYXN5RXhwYW5kID0gcHhFYXN5RXhwYW5kO1xuXG5yZXF1aXJlKCcuL3BhcnRpYWxzL2hhbWJ1cmdlci5qcycpO1xucmVxdWlyZSgnLi9wYXJ0aWFscy9zZWFyY2hmb3JtLmpzJyk7XG5yZXF1aXJlKCcuL3BhcnRpYWxzL21ldGEuanMnKTtcbnJlcXVpcmUoJy4vcGFydGlhbHMvdG9nZ2xlLmpzJyk7XG5yZXF1aXJlKCcuL3BhcnRpYWxzL2Zvcm0taW5mb2J1dHRvbi5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXZWJjYW1cblxuaW1wb3J0IHB4V2ViY2FtIGZyb20gJy4vbW9kdWxlcy93ZWJjYW0uanMnO1xuXG5yZWFkeShmdW5jdGlvbigpIHtcbiAgY29uc3Qgd2ViY2FtID0gbmV3IHB4V2ViY2FtKCcud2ViY2FtJyk7XG59KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGFic1xuXG4vLyBpbXBvcnQgVGFiYnkgZnJvbSAnLi9tb2R1bGVzL3RhYmJ5LnBvbHlmaWxscy5qcyc7XG4vLyBcbi8vIGdsb2JhbC5UYWJieSA9IFRhYmJ5O1xuLy8gXG4vLyByZXF1aXJlKCcuL3BhcnRpYWxzL3RhYmJ5LXRhYnMuanMnKTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2xpZGVyXG5cbmltcG9ydCBTd2lwZXIgZnJvbSAnLi9tb2R1bGVzL3N3aXBlci5qcyc7XG5cbmdsb2JhbC5Td2lwZXIgPSBTd2lwZXI7XG5cbnJlcXVpcmUoJy4vcGFydGlhbHMvc3dpcGVyLmpzJyk7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1hcHMgYXVmIEJhc2lzIHZvbiBMZWFmbGV0IHVuZCBPcGVuU3RyZWV0TWFwXG5pbXBvcnQgTCBmcm9tICcuL21vZHVsZXMvbGVhZmxldC9sZWFmbGV0LmpzJztcbnJlcXVpcmUoJy4vbW9kdWxlcy9sZWFmbGV0L2xlYWZsZXQuY29udHJvbC5mdWxsc2NyZWVuLmpzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvbGVhZmxldC9sZWFmbGV0LnNsZWVwLmpzJyk7XG5yZXF1aXJlKCcuL3NjcmlwdHMvbGVhZmxldC5qcycpO1xuXG5yZWFkeShmdW5jdGlvbigpIHtcblxuICBsZXQgbWFwQ0UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYTUtbWFwOm5vdChbZGF0YS1jb25zZW50LXJlYWR5XSknKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcENFLmxlbmd0aDsgaSsrKSB7XG4gICAgd2luZG93LmluaXRMZWFmbGV0KG1hcENFW2ldKTtcbiAgfVxuXG59KTtcblxucmVxdWlyZSgnLi9zY3JpcHRzL2xlYWZsZXQtZXh0ZW5kZWQuanMnKTtcblxucmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgbGV0IG1hcENFID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LW1hcC13aXRoLW1hcmtlcjpub3QoW2RhdGEtY29uc2VudC1yZWFkeV0pJyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXBDRS5sZW5ndGg7IGkrKykge1xuICAgIHdpbmRvdy5pbml0TGVhZmxldEV4dGVuZGVkKG1hcENFW2ldKTtcbiAgfVxuXG59KTtcblxuXG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkdMaWdodGJveCA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gI
24510H1cblxuICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgdWlkID0gRGF0ZS5ub3coKTtcbiAgZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIHZhciBleHRlbmRlZCA9IHt9O1xuICAgIHZhciBkZWVwID0gdHJ1ZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50c1swXSkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJykge1xuICAgICAgZGVlcCA9IGFyZ3VtZW50c1swXTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZShvYmopIHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkge1xuICAgICAgICAgIGlmIChkZWVwICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmpbcHJvcF0pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgZXh0ZW5kZWRbcHJvcF0gPSBleHRlbmQodHJ1ZSwgZXh0ZW5kZWRbcHJvcF0sIG9ialtwcm9wXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4dGVuZGVkW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2Y
24510XIgb2JqID0gYXJndW1lbnRzW2ldO1xuICAgICAgbWVyZ2Uob2JqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0ZW5kZWQ7XG4gIH1cbiAgZnVuY3Rpb24gZWFjaChjb2xsZWN0aW9uLCBjYWxsYmFjaykge1xuICAgIGlmIChpc05vZGUoY29sbGVjdGlvbikgfHwgY29sbGVjdGlvbiA9PT0gd2luZG93IHx8IGNvbGxlY3Rpb24gPT09IGRvY3VtZW50KSB7XG4gICAgICBjb2xsZWN0aW9uID0gW2NvbGxlY3Rpb25dO1xuICAgIH1cblxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikgJiYgIWlzT2JqZWN0KGNvbGxlY3Rpb24pKSB7XG4gICAgICBjb2xsZWN0aW9uID0gW2NvbGxlY3Rpb25dO1xuICAgIH1cblxuICAgIGlmIChzaXplKGNvbGxlY3Rpb24pID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikgJiYgIWlzT2JqZWN0KGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICAgIGkgPSAwO1xuXG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb2xsZWN0aW9uW2ldLCBjb2xsZWN0aW9uW2ldLCBpLCBjb2xsZWN0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoY29sbGVjdGlvbikpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmIChoYXMoY29sbGVjdGlvbiwga2V5KSkge1xuICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGNvbGxlY3Rpb25ba2V5XSwgY29sbGVjdGlvbltrZXldLCBrZXksIGNvbGxlY3Rpb24pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldE5vZGVFdmVudHMobm9kZSkge1xuICAgIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcbiAgICB2YXIgY2FjaGUgPSBub2RlW3VpZF0gPSBub2RlW3VpZF0gfHwgW107XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBhbGw6IGNhY2hlLFxuICAgICAgZXZ0OiBudWxsLFxuICAgICAgZm91bmQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKG5hbWUgJiYgZm4gJiYgc2l6ZShjYWNoZSkgPiAwKSB7XG4gICAgICBlYWNoKGNhY2hlLCBmdW5jdGlvbiAoY2wsIGkpIHtcbiAgICAgICAgaWYgKGNsLmV2ZW50TmFtZSA9PSBuYW1lICYmIGNsLmZuLnRvU3RyaW5nKCkgPT0gZm4udG9TdHJpbmcoKSkge1xuICAgICAgICAgIGRhdGEuZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGRhdGEuZXZ0ID0gaTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGZ1bmN0aW9uIGFkZEV2ZW50KGV2ZW50TmFtZSkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgb25FbGVtZW50ID0gX3JlZi5vbkVsZW1lbnQsXG4gICAgICAgIHdpdGhDYWxsYmFjayA9IF9yZWYud2l0aENhbGxiYWNrLFxuICAgICAgICBfcmVmJGF2b2lkRHVwbGljYXRlID0gX3JlZi5hdm9pZER1cGxpY2F0ZSxcbiAgICAgICAgYXZvaWREdXBsaWNhdGUgPSBfcmVmJGF2b2lkRHVwbGljYXRlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRhdm9pZER1cGxpY2F0ZSxcbiAgICAgICAgX3JlZiRvbmNlID0gX3JlZi5vbmNlLFxuICAgICAgICBvbmNlID0gX3JlZiRvbmNlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkb25jZSxcbiAgICAgICAgX3JlZiR1c2VDYXB0dXJlID0gX3JlZi51c2VDYXB0dXJlLFxuICAgICAgICB1c2VDYXB0dXJlID0gX3JlZiR1c2VDYXB0dXJlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdXNlQ2FwdHVyZTtcblxuICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGVsZW1lbnQgPSBvbkVsZW1lbnQgfHwgW107XG5cbiAgICBpZiAoaXNTdHJpbmcoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKHdpdGhDYWxsYmFjaykpIHtcbiAgICAgICAgd2l0aENhbGxiYWNrLmNhbGwodGhpc0FyZywgZXZlbnQsIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAob25jZSkge1xuICAgICAgICBoYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVyLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlYWNoKGVsZW1lbnQsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB2Y
24510XIgZXZlbnRzID0gZ2V0Tm9kZUV2ZW50cyhlbCwgZXZlbnROYW1lLCBoYW5kbGVyKTtcblxuICAgICAgICBpZiAoZXZlbnRzLmZvdW5kKSB7XG4gICAgICAgICAgZXZlbnRzLmFsbC5zcGxpY2UoZXZlbnRzLmV2dCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGVhY2goZWxlbWVudCwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2YXIgZXZlbnRzID0gZ2V0Tm9kZUV2ZW50cyhlbCwgZXZlbnROYW1lLCBoYW5kbGVyKTtcblxuICAgICAgaWYgKGVsLmFkZEV2ZW50TGlzdGVuZXIgJiYgYXZvaWREdXBsaWNhdGUgJiYgIWV2ZW50cy5mb3VuZCB8fCAhYXZvaWREdXBsaWNhdGUpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpO1xuICAgICAgICBldmVudHMuYWxsLnB1c2goe1xuICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLFxuICAgICAgICAgIGZuOiBoYW5kbGVyXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVyO1xuICB9XG4gIGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIG5hbWUpIHtcbiAgICBlYWNoKG5hbWUuc3BsaXQoJyAnKSwgZnVuY3Rpb24gKGNsKSB7XG4gICAgICByZXR1cm4gbm9kZS5jbGFzc0xpc3QuYWRkKGNsKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVDbGFzcyhub2RlLCBuYW1lKSB7XG4gICAgZWFjaChuYW1lLnNwbGl0KCcgJyksIGZ1bmN0aW9uIChjbCkge1xuICAgICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShjbCk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gaGFzQ2xhc3Mobm9kZSwgbmFtZSkge1xuICAgIHJldHVybiBub2RlLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKTtcbiAgfVxuICBmdW5jdGlvbiBjbG9zZXN0KGVsZW0sIHNlbGVjdG9yKSB7XG4gICAgd2hpbGUgKGVsZW0gIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIGVsZW0gPSBlbGVtLnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXRjaGVzID0gdHlwZW9mIGVsZW0ubWF0Y2hlcyA9PSAnZnVuY3Rpb24nID8gZWxlbS5tYXRjaGVzKHNlbGVjdG9yKSA6IGVsZW0ubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYW5pbWF0ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhciBhbmltYXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgYW5pbWF0aW9uID09PSAnJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRpb24gPT0gJ25vbmUnKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBhbmltYXRpb25FbmQgPSB3aGljaEFuaW1hdGlvbkV2ZW50KCk7XG4gICAgdmFyIGFuaW1hdGlvbk5hbWVzID0gYW5pbWF0aW9uLnNwbGl0KCcgJyk7XG4gICAgZWFjaChhbmltYXRpb25OYW1lcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsICdnJyArIG5hbWUpO1xuICAgIH0pO1xuICAgIGFkZEV2ZW50KGFuaW1hdGlvbkVuZCwge1xuICAgICAgb25FbGVtZW50OiBlbGVtZW50LFxuICAgICAgYXZvaWREdXBsaWNhdGU6IGZhbHNlLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHdpdGhDYWxsYmFjazogZnVuY3Rpb24gd2l0aENhbGxiYWNrKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgICAgZWFjaChhbmltYXRpb25OYW1lcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICByZW1vdmVDbGFzcyh0YXJnZXQsICdnJyArIG5hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gY3NzVHJhbnNmb3JtKG5vZGUpIHtcbiAgICB2YXIgdHJhbnNsYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcblxuICAgIGlmICh0cmFuc2xhdGUgPT0gJycpIHtcbiAgICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJyc7XG4gICAgICBub2RlLnN0eWxlLk1velRyYW5zZm9ybSA9ICcnO1xuICAgICAgbm9kZS5zdHlsZS5tc1RyYW5zZm9ybSA9ICcnO1xuICAgICAgbm9kZS5zdHlsZS5PVHJhbnNmb3JtID0gJyc7XG4gICAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIG5vZGUuc3R5bGUuTW96VHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIG5vZGUuc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG4gICAgbm9kZS5zdHlsZS5PVHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICB9XG4gIGZ1bmN0aW9uIHNob3coZWxlbWVudCkge1xuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIH1cbiAgZnVuY3Rpb24gaGlkZShlbGVtZW50KSB7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUhUTUwoaHRtbFN0cikge1xuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuICAgICAgICB0ZW1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcC5pbm5lckhUTUwgPSBodG1sU3RyO1xuXG4gICAgd2hpbGUgKHRlbXAuZmlyc3RDaGlsZCkge1xuICAgICAgZnJhZy5hcHBlbmRDaGlsZCh0ZW1wLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgI
24510HJldHVybiBmcmFnO1xuICB9XG4gIGZ1bmN0aW9uIHdpbmRvd1NpemUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxcbiAgICAgIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHRcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdoaWNoQW5pbWF0aW9uRXZlbnQoKSB7XG4gICAgdmFyIHQsXG4gICAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmFrZWVsZW1lbnQnKTtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IHtcbiAgICAgIGFuaW1hdGlvbjogJ2FuaW1hdGlvbmVuZCcsXG4gICAgICBPQW5pbWF0aW9uOiAnb0FuaW1hdGlvbkVuZCcsXG4gICAgICBNb3pBbmltYXRpb246ICdhbmltYXRpb25lbmQnLFxuICAgICAgV2Via2l0QW5pbWF0aW9uOiAnd2Via2l0QW5pbWF0aW9uRW5kJ1xuICAgIH07XG5cbiAgICBmb3IgKHQgaW4gYW5pbWF0aW9ucykge1xuICAgICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnNbdF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHdoaWNoVHJhbnNpdGlvbkV2ZW50KCkge1xuICAgIHZhciB0LFxuICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50Jyk7XG4gICAgdmFyIHRyYW5zaXRpb25zID0ge1xuICAgICAgdHJhbnNpdGlvbjogJ3RyYW5zaXRpb25lbmQnLFxuICAgICAgT1RyYW5zaXRpb246ICdvVHJhbnNpdGlvbkVuZCcsXG4gICAgICBNb3pUcmFuc2l0aW9uOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgICBXZWJraXRUcmFuc2l0aW9uOiAnd2Via2l0VHJhbnNpdGlvbkVuZCdcbiAgICB9O1xuXG4gICAgZm9yICh0IGluIHRyYW5zaXRpb25zKSB7XG4gICAgICBpZiAoZWwuc3R5bGVbdF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdHJhbnNpdGlvbnNbdF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUlmcmFtZShjb25maWcpIHtcbiAgICB2YXIgdXJsID0gY29uZmlnLnVybCxcbiAgICAgICAgYWxsb3cgPSBjb25maWcuYWxsb3csXG4gICAgICAgIGNhbGxiYWNrID0gY29uZmlnLmNhbGxiYWNrLFxuICAgICAgICBhcHBlbmRUbyA9IGNvbmZpZy5hcHBlbmRUbztcbiAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgaWZyYW1lLmNsYXNzTmFtZSA9ICd2aW1lby12aWRlbyBndmlkZW8nO1xuICAgIGlmcmFtZS5zcmMgPSB1cmw7XG4gICAgaWZyYW1lLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG5cbiAgICBpZiAoYWxsb3cpIHtcbiAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2FsbG93JywgYWxsb3cpO1xuICAgIH1cblxuICAgIGlmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhZGRDbGFzcyhpZnJhbWUsICdub2RlLXJlYWR5Jyk7XG5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoYXBwZW5kVG8pIHtcbiAgICAgIGFwcGVuZFRvLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlmcmFtZTtcbiAgfVxuICBmdW5jdGlvbiB3YWl0VW50aWwoY2hlY2ssIG9uQ29tcGxldGUsIGRlbGF5LCB0aW1lb3V0KSB7XG4gICAgaWYgKGNoZWNrKCkpIHtcbiAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlbGF5KSB7XG4gICAgICBkZWxheSA9IDEwMDtcbiAgICB9XG5cbiAgICB2YXIgdGltZW91dFBvaW50ZXI7XG4gICAgdmFyIGludGVydmFsUG9pbnRlciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghY2hlY2soKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxQb2ludGVyKTtcblxuICAgICAgaWYgKHRpbWVvdXRQb2ludGVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0UG9pbnRlcik7XG4gICAgICB9XG5cbiAgICAgIG9uQ29tcGxldGUoKTtcbiAgICB9LCBkZWxheSk7XG5cbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGltZW91dFBvaW50ZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFBvaW50ZXIpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGluamVjdEFzc2V0cyh1cmwsIHdhaXRGb3IsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGlzTmlsKHVybCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0luamVjdCBhc3NldHMgZXJyb3InKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih3YWl0Rm9yKSkge1xuICAgICAgY2FsbGJhY2sgPSB3YWl0Rm9yO1xuICAgICAgd2FpdEZvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyh3YWl0Rm9yKSAmJiB3YWl0Rm9yIGluIHdpbmRvdykge1xuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZm91bmQ7XG5cbiAgICBpZiAodXJsLmluZGV4T2YoJy5jc3MnKSAhPT0gLTEpIHtcbiAgICAgIGZvdW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tocmVmPVwiJyArIHVybCArICdcIl0nKTtcblxuICAgICAgaWYgKGZvdW5kICYmIGZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgICAgdmFyIGhlYWRTdHlsZXMgPSBoZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXScpO1xuICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIGxpbmsudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLm1lZGlhID0gJ2FsbCc7XG5cbiAgICAgIGlmIChoZWFkU3R5bGVzKSB7XG4gICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKGxpbmssIGhlYWRTdHlsZXNbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdFtzcmM9XCInICsgdXJsICsgJ1wiXScpO1xuXG4gICAgaWYgKGZvdW5kICYmIGZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICBpZiAoaXNTdHJpbmcod2FpdEZvcikpIHtcbiAgICAgICAgICB3YWl0VW50aWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3dbd2FpdEZvcl0gIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgI
24510H0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHNjcmlwdC5zcmMgPSB1cmw7XG5cbiAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh3YWl0Rm9yKSkge1xuICAgICAgICAgIHdhaXRVbnRpbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHdpbmRvd1t3YWl0Rm9yXSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICAgIHJldHVybiAnbmF2aWdhdG9yJyBpbiB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhpUGFkKXwoaVBob25lKXwoaVBvZCl8KEFuZHJvaWQpfChQbGF5Qm9vayl8KEJCMTApfChCbGFja0JlcnJ5KXwoT3BlcmEgTWluaSl8KElFTW9iaWxlKXwod2ViT1MpfChNZWVHbykvaSk7XG4gIH1cbiAgZnVuY3Rpb24gaXNUb3VjaCgpIHtcbiAgICByZXR1cm4gaXNNb2JpbGUoKSAhPT0gbnVsbCB8fCBkb2N1bWVudC5jcmVhdGVUb3VjaCAhPT0gdW5kZWZpbmVkIHx8ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCAnb25tc2dlc3R1cmVjaGFuZ2UnIGluIHdpbmRvdyB8fCBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cztcbiAgfVxuICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGYpIHtcbiAgICByZXR1cm4gdHlwZW9mIGYgPT09ICdmdW5jdGlvbic7XG4gIH1cbiAgZnVuY3Rpb24gaXNTdHJpbmcocykge1xuICAgIHJldHVybiB0eXBlb2YgcyA9PT0gJ3N0cmluZyc7XG4gIH1cbiAgZnVuY3Rpb24gaXNOb2RlKGVsKSB7XG4gICAgcmV0dXJuICEhKGVsICYmIGVsLm5vZGVUeXBlICYmIGVsLm5vZGVUeXBlID09IDEpO1xuICB9XG4gIGZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG4gIH1cbiAgZnVuY3Rpb24gaXNBcnJheUxpa2UoYXIpIHtcbiAgICByZXR1cm4gYXIgJiYgYXIubGVuZ3RoICYmIGlzRmluaXRlKGFyLmxlbmd0aCk7XG4gIH1cbiAgZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICAgIHZhciB0eXBlID0gX3R5cGVvZihvKTtcblxuICAgIHJldHVybiB0eXBlID09PSAnb2JqZWN0JyAmJiBvICE9IG51bGwgJiYgIWlzRnVuY3Rpb24obykgJiYgIWlzQXJyYXkobyk7XG4gIH1cbiAgZnVuY3Rpb24gaXNOaWwobykge1xuICAgIHJldHVybiBvID09IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfVxuICBmdW5jdGlvbiBzaXplKG8pIHtcbiAgICBpZiAoaXNPYmplY3QobykpIHtcbiAgICAgIGlmIChvLmtleXMpIHtcbiAgICAgICAgcmV0dXJuIG8ua2V5cygpLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgdmFyIGwgPSAwO1xuXG4gICAgICBmb3IgKHZhciBrIGluIG8pIHtcbiAgICAgICAgaWYgKGhhcyhvLCBrKSkge1xuICAgICAgICAgIGwrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG8ubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc051bWJlcihuKSB7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5leHRGb2N1c0VsZW1lbnQoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IC0xO1xuICAgIHZhciBidG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdidG5bZGF0YS10YWJvcmRlcl06bm90KC5kaXNhYmxlZCknKTtcblxuICAgIGlmICghYnRucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYnRucy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGJ0bnNbMF07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50ID09ICdzdHJpbmcnKSB7XG4gICAgICBjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG4gICAgfVxuXG4gICAgdmFyIG5ld0luZGV4ID0gY3VycmVudCA8IDAgPyAxIDogY3VycmVudCArIDE7XG5cbiAgICBpZiAobmV3SW5kZXggPiBidG5zLmxlbmd0aCkge1xuICAgICAgbmV3SW5kZXggPSAnMSc7XG4gICAgfVxuXG4gICAgdmFyIG9yZGVycyA9IFtdO1xuICAgIGVhY2goYnRucywgZnVuY3Rpb24gKGJ0bikge1xuICAgICAgb3JkZXJzLnB1c2goYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS10YWJvcmRlcicpKTtcbiAgICB9KTtcbiAgICB2YXIgbmV4dE9yZGVycyA9IG9yZGVycy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwgPj0gcGFyc2VJbnQobmV3SW5kZXgpO1xuICAgIH0pO1xuICAgIHZhciBuZXh0Rm9jdXMgPSBuZXh0T3JkZXJzLnNvcnQoKVswXTtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5nYnRuW2RhdGEtdGFib3JkZXI9XFxcIlwiLmNvbmNhdChuZXh0Rm9jdXMsIFwiXFxcIl1cIikpO1xuICB9XG5cbiAgZnVuY3Rpb24ga2V5Ym9hcmROYXZpZ2F0aW9uKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLmV2ZW50cy5oYXNPd25Qcm9wZXJ0eSgna2V5Ym9hcmQnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLmV2ZW50c1sna2V5Ym9hcmQnXSA9IGFkZEV2ZW50KCdrZXlkb3duJywge1xuICAgICAgb25FbGVtZW50OiB3aW5kb3csXG4gICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhldmVudCwgdGFyZ2V0KSB7XG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICB2Y
24510XIga2V5ID0gZXZlbnQua2V5Q29kZTtcblxuICAgICAgICBpZiAoa2V5ID09IDkpIHtcbiAgICAgICAgICB2YXIgZm9jdXNlZEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nYnRuLmZvY3VzZWQnKTtcblxuICAgICAgICAgIGlmICghZm9jdXNlZEJ1dHRvbikge1xuICAgICAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50Lm5vZGVOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQgPT0gJ2lucHV0JyB8fCBhY3RpdmVFbGVtZW50ID09ICd0ZXh0YXJlYScgfHwgYWN0aXZlRWxlbWVudCA9PSAnYnV0dG9uJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB2YXIgYnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5nYnRuW2RhdGEtdGFib3JkZXJdJyk7XG5cbiAgICAgICAgICBpZiAoIWJ0bnMgfHwgYnRucy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZm9jdXNlZEJ1dHRvbikge1xuICAgICAgICAgICAgdmFyIGZpcnN0ID0gZ2V0TmV4dEZvY3VzRWxlbWVudCgpO1xuXG4gICAgICAgICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgICAgICAgZmlyc3QuZm9jdXMoKTtcbiAgICAgICAgICAgICAgYWRkQ2xhc3MoZmlyc3QsICdmb2N1c2VkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2Y
24510XIgY3VycmVudEZvY3VzT3JkZXIgPSBmb2N1c2VkQnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS10YWJvcmRlcicpO1xuICAgICAgICAgIHZhciBuZXh0Rm9jdXMgPSBnZXROZXh0Rm9jdXNFbGVtZW50KGN1cnJlbnRGb2N1c09yZGVyKTtcbiAgICAgICAgICByZW1vdmVDbGFzcyhmb2N1c2VkQnV0dG9uLCAnZm9jdXNlZCcpO1xuXG4gICAgICAgICAgaWYgKG5leHRGb2N1cykge1xuICAgICAgICAgICAgbmV4dEZvY3VzLmZvY3VzKCk7XG4gICAgICAgICAgICBhZGRDbGFzcyhuZXh0Rm9jdXMsICdmb2N1c2VkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PSAzOSkge1xuICAgICAgICAgIGluc3RhbmNlLm5leHRTbGlkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PSAzNykge1xuICAgICAgICAgIGluc3RhbmNlLnByZXZTbGlkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PSAyNykge1xuICAgICAgICAgIGluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExlbih2KSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh2LnggKiB2LnggKyB2LnkgKiB2LnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZG90KHYxLCB2Mikge1xuICAgIHJldHVybiB2MS54ICogdjIueCArIHYxLnkgKiB2Mi55O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5nbGUodjEsIHYyKSB7XG4gICAgdmFyIG1yID0gZ2V0TGVuKHYxKSAqIGdldExlbih2Mik7XG5cbiAgICBpZiAobXIgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciByID0gZG90KHYxLCB2MikgLyBtcjtcblxuICAgIGlmIChyID4gMSkge1xuICAgICAgciA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguYWNvcyhyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyb3NzKHYxLCB2Mikge1xuICAgIHJldHVybiB2MS54ICogdjIueSAtIHYyLnggKiB2MS55O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Um90YXRlQW5nbGUodjEsIHYyKSB7XG4gICAgdmFyIGFuZ2xlID0gZ2V0QW5nbGUodjEsIHYyKTtcblxuICAgIGlmIChjcm9zcyh2MSwgdjIpID4gMCkge1xuICAgICAgYW5nbGUgKj0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuZ2xlICogMTgwIC8gTWF0aC5QSTtcbiAgfVxuXG4gIHZhciBFdmVudHNIYW5kbGVyQWRtaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRXZlbnRzSGFuZGxlckFkbWluKGVsKSB7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXZlbnRzSGFuZGxlckFkbWluKTtcblxuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy5lbCA9IGVsO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhFdmVudHNIYW5kbGVyQWRtaW4sIFt7XG4gICAgICBrZXk6IFwiYWRkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkZWxcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZWwoaGFuZGxlcikge1xuICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5oYW5kbGVycy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFuZGxlcnNbaV0gPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkaXNwYXRjaFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5oYW5kbGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5oYW5kbGVyc1tpXTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLmVsLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBFdmVudHNIYW5kbGVyQWRtaW47XG4gIH0oKTtcblxuICBmdW5jdGlvbiB3cmFwRnVuYyhlbCwgaGFuZGxlcikge1xuICAgIHZhciBFdmVudHNoYW5kbGVyQWRtaW4gPSBuZXcgRXZlbnRzSGFuZGxlckFkbWluKGVsKTtcbiAgICBFdmVudHNoYW5kbGVyQWRtaW4uYWRkKGhhbmRsZXIpO1xuICAgIHJldHVybiBFdmVudHNoYW5kbGVyQWRtaW47XG4gIH1cblxuICB2YXIgVG91Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVG91Y2hFdmVudHMoZWwsIG9wdGlvbikge1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvdWNoRXZlbnRzKTtcblxuICAgICAgdGhpcy5lbGVtZW50ID0gdHlwZW9mIGVsID09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCkgOiBlbDtcbiAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLnN0YXJ0LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLm1vdmUgPSB0aGlzLm1vdmUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZW5kID0gdGhpcy5lbmQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuY2FuY2VsID0gdGhpcy5jYW5jZWwuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5zdGFydCwgZmFsc2UpO1xuICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMubW92ZSwgZmFsc2UpO1xuICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5lbmQsIGZhbHNlKTtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuY2FuY2VsLCBmYWxzZSk7XG4gICAgICB0aGlzLnByZVYgPSB7XG4gICAgICAgIHg6IG51bGwsXG4gICAgICAgIHk6IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnBpbmNoU3RhcnRMZW4gPSBudWxsO1xuICAgICAgdGhpcy56b29tID0gMTtcbiAgICAgIHRoaXMuaXNEb3VibGVUYXAgPSBmYWxzZTtcblxuICAgICAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbiAgICAgIHRoaXMucm90YXRlID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24ucm90YXRlIHx8IG5vb3ApO1xuICAgICAgdGhpcy50b3VjaFN0YXJ0ID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udG91Y2hTdGFydCB8fCBub29wKTtcbiAgICAgIHRoaXMubXVsdGlwb2ludFN0YXJ0ID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24ubXVsdGlwb2ludFN0YXJ0IHx8IG5vb3ApO1xuICAgICAgdGhpcy5tdWx0aXBvaW50RW5kID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24ubXVsdGlwb2ludEVuZCB8fCBub29wKTtcbiAgICAgIHRoaXMucGluY2ggPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5waW5jaCB8fCBub29wKTtcbiAgICAgIHRoaXMuc3dpcGUgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5zd2lwZSB8fCBub29wKTtcbiAgICAgIHRoaXMudGFwID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udGFwIHx8IG5vb3ApO1xuICAgICAgdGhpcy5kb3VibGVUYXAgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5kb3VibGVUYXAgfHwgbm9vcCk7XG4gICAgICB0aGlzLmxvbmdUYXAgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5sb25nVGFwIH
24510x8IG5vb3ApO1xuICAgICAgdGhpcy5zaW5nbGVUYXAgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5zaW5nbGVUYXAgfHwgbm9vcCk7XG4gICAgICB0aGlzLnByZXNzTW92ZSA9IHdyYXBGdW5jKHRoaXMuZWxlbWVudCwgb3B0aW9uLnByZXNzTW92ZSB8fCBub29wKTtcbiAgICAgIHRoaXMudHdvRmluZ2VyUHJlc3NNb3ZlID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udHdvRmluZ2VyUHJlc3NNb3ZlIHx8IG5vb3ApO1xuICAgICAgdGhpcy50b3VjaE1vdmUgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi50b3VjaE1vdmUgfHwgbm9vcCk7XG4gICAgICB0aGlzLnRvdWNoRW5kID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udG91Y2hFbmQgfHwgbm9vcCk7XG4gICAgICB0aGlzLnRvdWNoQ2FuY2VsID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udG91Y2hDYW5jZWwgfHwgbm9vcCk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZUNvbnRhaW5lciA9IHRoaXMuZWxlbWVudDtcbiAgICAgIHRoaXMuX2NhbmNlbEFsbEhhbmRsZXIgPSB0aGlzLmNhbmNlbEFsbC5iaW5kKHRoaXMpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuX2NhbmNlbEFsbEhhbmRsZXIpO1xuICAgICAgdGhpcy5kZWx0YSA9IG51bGw7XG4gICAgICB0aGlzLmxhc3QgPSBudWxsO1xuICAgICAgdGhpcy5ub3cgPSBudWxsO1xuICAgICAgdGhpcy50YXBUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMuc2luZ2xlVGFwVGltZW91dCA9IG51bGw7XG4gICAgICB0aGlzLmxvbmdUYXBUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3dpcGVUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMueDEgPSB0aGlzLngyID0gdGhpcy55MSA9IHRoaXMueTIgPSBudWxsO1xuICAgICAgdGhpcy5wcmVUYXBQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogbnVsbCxcbiAgICAgICAgeTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoVG91Y2hFdmVudHMsIFt7XG4gICAgICBrZXk6IFwic3RhcnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydChldnQpIHtcbiAgICAgICAgaWYgKCFldnQudG91Y2hlcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpZ25vcmVEcmFnRm9yID0gWydhJywgJ2J1dHRvbicsICdpbnB1dCddO1xuXG4gICAgICAgIGlmIChldnQudGFyZ2V0ICYmIGV2dC50YXJnZXQubm9kZU5hbWUgJiYgaWdub3JlRHJhZ0Zvci5pbmRleE9mKGV2dC50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgPj0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdpZ25vcmUgZHJhZyBmb3IgdGhpcyB0b3VjaGVkIGVsZW1lbnQnLCBldnQudGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy54MSA9IGV2dC50b3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgICB0aGlzLnkxID0gZXZ0LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgIHRoaXMuZGVsdGEgPSB0aGlzLm5vdyAtICh0aGlzLmxhc3QgfHwgdGhpcy5ub3cpO1xuICAgICAgICB0aGlzLnRvdWNoU3RhcnQuZGlzcGF0Y2goZXZ0LCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnByZVRhcFBvc2l0aW9uLnggIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmlzRG91YmxlVGFwID0gdGhpcy5kZWx0YSA+IDAgJiYgdGhpcy5kZWx0YSA8PSAyNTAgJiYgTWF0aC5hYnModGhpcy5wcmVUYXBQb3NpdGlvbi54IC0gdGhpcy54MSkgPCAzMCAmJiBNYXRoLmFicyh0aGlzLnByZVRhcFBvc2l0aW9uLnkgLSB0aGlzLnkxKSA8IDMwO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEb3VibGVUYXApIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNpbmdsZVRhcFRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlVGFwUG9zaXRpb24ueCA9IHRoaXMueDE7XG4gICAgICAgIHRoaXMucHJlVGFwUG9zaXRpb24ueSA9IHRoaXMueTE7XG4gICAgICAgIHRoaXMubGFzdCA9IHRoaXMubm93O1xuICAgICAgICB2Y
24510XIgcHJlViA9IHRoaXMucHJlVixcbiAgICAgICAgICAgIGxlbiA9IGV2dC50b3VjaGVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobGVuID4gMSkge1xuICAgICAgICAgIHRoaXMuX2NhbmNlbExvbmdUYXAoKTtcblxuICAgICAgICAgIHRoaXMuX2NhbmNlbFNpbmdsZVRhcCgpO1xuXG4gICAgICAgICAgdmFyIHYgPSB7XG4gICAgICAgICAgICB4OiBldnQudG91Y2hlc1sxXS5wYWdlWCAtIHRoaXMueDEsXG4gICAgICAgICAgICB5OiBldnQudG91Y2hlc1sxXS5wYWdlWSAtIHRoaXMueTFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHByZVYueCA9IHYueDtcbiAgICAgICAgICBwcmVWLnkgPSB2Lnk7XG4gICAgICAgICAgdGhpcy5waW5jaFN0YXJ0TGVuID0gZ2V0TGVuKHByZVYpO1xuICAgICAgICAgIHRoaXMubXVsdGlwb2ludFN0YXJ0LmRpc3BhdGNoKGV2dCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZlbnRUYXAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb25nVGFwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMubG9uZ1RhcC5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5fcHJldmVudFRhcCA9IHRydWU7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgNzUwKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwibW92ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoZXZ0KSB7XG4gICAgICAgIGlmICghZXZ0LnRvdWNoZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgcHJlViA9IHRoaXMucHJlVixcbiAgICAgICAgICAgIGxlbiA9IGV2dC50b3VjaGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGN1cnJlbnRYID0gZXZ0LnRvdWNoZXNbMF0ucGFnZVgsXG4gICAgICAgICAgICBjdXJyZW50WSA9IGV2dC50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgICB0aGlzLmlzRG91YmxlVGFwID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICB2YXIgc0N1cnJlbnRYID0gZXZ0LnRvdWNoZXNbMV0ucGFnZVgsXG4gICAgICAgICAgICAgIHNDdXJyZW50WSA9IGV2dC50b3VjaGVzWzFdLnBhZ2VZO1xuICAgICAgICAgIHZhciB2ID0ge1xuICAgICAgICAgICAgeDogZXZ0LnRvdWNoZXNbMV0ucGFnZVggLSBjdXJyZW50WCxcbiAgICAgICAgICAgIHk6IGV2dC50b3VjaGVzWzFdLnBhZ2VZIC0gY3VycmVudFlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHByZVYueCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGluY2hTdGFydExlbiA+IDApIHtcbiAgICAgICAgICAgICAgZXZ0Lnpvb20gPSBnZXRMZW4odikgLyB0aGlzLnBpbmNoU3RhcnRMZW47XG4gICAgICAgICAgICAgIHRoaXMucGluY2guZGlzcGF0Y2goZXZ0LCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldnQuYW5nbGUgPSBnZXRSb3RhdGVBbmdsZSh2LCBwcmVWKTtcbiAgICAgICAgICAgIHRoaXMucm90YXRlLmRpc3BhdGNoKGV2dCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVWLnggPSB2Lng7XG4gICAgICAgICAgcHJlVi55ID0gdi55O1xuXG4gICAgICAgICAgaWYgKHRoaXMueDIgIT09IG51bGwgJiYgdGhpcy5zeDIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV2dC5kZWx0YVggPSAoY3VycmVudFggLSB0aGlzLngyICsgc0N1cnJlbnRYIC0gdGhpcy5zeDIpIC8gMjtcbiAgICAgICAgICAgIGV2dC5kZWx0YVkgPSAoY3VycmVudFkgLSB0aGlzLnkyICsgc0N1cnJlbnRZIC0gdGhpcy5zeTIpIC8gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZ0LmRlbHRhWCA9IDA7XG4gICAgICAgICAgICBldnQuZGVsdGFZID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnR3b0ZpbmdlclByZXNzTW92ZS5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5zeDIgPSBzQ3VycmVudFg7XG4gICAgICAgICAgdGhpcy5zeTIgPSBzQ3VycmVudFk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMueDIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV2dC5kZWx0YVggPSBjdXJyZW50WCAtIHRoaXMueDI7XG4gICAgICAgICAgICBldnQuZGVsdGFZID0gY3VycmVudFkgLSB0aGlzLnkyO1xuICAgICAgICAgICAgdmFyIG1vdmVkWCA9IE1hdGguYWJzKHRoaXMueDEgLSB0aGlzLngyKSxcbiAgICAgICAgICAgICAgICBtb3ZlZFkgPSBNYXRoLmFicyh0aGlzLnkxIC0gdGhpcy55Mik7XG5cbiAgICAgICAgICAgIGlmIChtb3ZlZFggPiAxMCB8fCBtb3ZlZFkgPiAxMCkge1xuICAgICAgICAgICAgICB0aGlzLl9wcmV2ZW50VGFwID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZ0LmRlbHRhWCA9IDA7XG4gICAgICAgICAgICBldnQuZGVsdGFZID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnByZXNzTW92ZS5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdWNoTW92ZS5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5fY2FuY2VsTG9uZ1RhcCgpO1xuXG4gICAgICAgIHRoaXMueDIgPSBjdXJyZW50WDtcbiAgICAgICAgdGhpcy55MiA9IGN1cnJlbnRZO1xuXG4gICAgICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgICAgZXZ0LnByZXZlbn
24510REZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZW5kXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZW5kKGV2dCkge1xuICAgICAgICBpZiAoIWV2dC5jaGFuZ2VkVG91Y2hlcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbmNlbExvbmdUYXAoKTtcblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGV2dC50b3VjaGVzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICB0aGlzLm11bHRpcG9pbnRFbmQuZGlzcGF0Y2goZXZ0LCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuc3gyID0gdGhpcy5zeTIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueDIgJiYgTWF0aC5hYnModGhpcy54MSAtIHRoaXMueDIpID4gMzAgfHwgdGhpcy55MiAmJiBNYXRoLmFicyh0aGlzLnkxIC0gdGhpcy55MikgPiAzMCkge1xuICAgICAgICAgIGV2dC5kaXJlY3Rpb24gPSB0aGlzLl9zd2lwZURpcmVjdGlvbih0aGlzLngxLCB0aGlzLngyLCB0aGlzLnkxLCB0aGlzLnkyKTtcbiAgICAgICAgICB0aGlzLnN3aXBlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5zd2lwZS5kaXNwYXRjaChldnQsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50YXBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3ByZXZlbnRUYXApIHtcbiAgICAgICAgICAgICAgc2VsZi50YXAuZGlzcGF0Y2goZXZ0LCBzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5pc0RvdWJsZVRhcCkge1xuICAgICAgICAgICAgICBzZWxmLmRvdWJsZVRhcC5kaXNwYXRjaChldnQsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgIHNlbGYuaXNEb3VibGVUYXAgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgIGlmICghc2VsZi5pc0RvdWJsZVRhcCkge1xuICAgICAgICAgICAgc2VsZi5zaW5nbGVUYXBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2luZ2xlVGFwLmRpc3BhdGNoKGV2dCwgc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b3VjaEVuZC5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRoaXMucHJlVi54ID0gMDtcbiAgICAgICAgdGhpcy5wcmVWLnkgPSAwO1xuICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICB0aGlzLnBpbmNoU3RhcnRMZW4gPSBudWxsO1xuICAgICAgICB0aGlzLngxID0gdGhpcy54MiA9IHRoaXMueTEgPSB0aGlzLnkyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY2FuY2VsQWxsXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsQWxsKCkge1xuICAgICAgICB0aGlzLl9wcmV2ZW50VGFwID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2luZ2xlVGFwVGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRhcFRpbWVvdXQpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb25nVGFwVGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN3aXBlVGltZW91dCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNhbmNlbFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChldnQpIHtcbiAgICAgICAgdGhpcy5jYW5jZWxBbGwoKTtcbiAgICAgICAgdGhpcy50b3VjaENhbmNlbC5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIl9jYW5jZWxMb25nVGFwXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gX2NhbmNlbExvbmdUYXAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvbmdUYXBUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiX2NhbmNlbFNpbmdsZVRhcFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jYW5jZWxTaW5nbGVUYXAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNpbmdsZVRhcFRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJfc3dpcGVEaXJlY3Rpb25cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc3dpcGVEaXJlY3Rpb24oeDEsIHgyLCB5MSwgeTIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgxIC0geDIpID49IE1hdGguYWJzKHkxIC0geTIpID8geDEgLSB4MiA+IDAgPyAnTGVmdCcgOiAnUmlnaHQnIDogeTEgLSB5MiA+IDAgPyAnVXAnIDogJ0Rvd24nO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2dCwgaGFuZGxlcikge1xuICAgICAgICBpZiAodGhpc1tldnRdKSB7XG4gICAgICAgICAgdGhpc1tldnRdLmFkZChoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvZmZcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZ0LCBoYW5kbGVyKSB7XG4gICAgICAgIGlmICh0aGlzW2V2dF0pIHtcbiAgICAgICAgICB0aGlzW2V2dF0uZGVsKGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zaW5nbGVUYXBUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2luZ2xlVGFwVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YXBUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGFwVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sb25nVGFwVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvbmdUYXBUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN3aXBlVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN3aXBlVGltZW91dCk7XG4gICAgICAgI
24510H1cblxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuc3RhcnQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5tb3ZlKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5lbmQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLmNhbmNlbCk7XG4gICAgICAgIHRoaXMucm90YXRlLmRlbCgpO1xuICAgICAgICB0aGlzLnRvdWNoU3RhcnQuZGVsKCk7XG4gICAgICAgIHRoaXMubXVsdGlwb2ludFN0YXJ0LmRlbCgpO1xuICAgICAgICB0aGlzLm11bHRpcG9pbnRFbmQuZGVsKCk7XG4gICAgICAgIHRoaXMucGluY2guZGVsKCk7XG4gICAgICAgIHRoaXMuc3dpcGUuZGVsKCk7XG4gICAgICAgIHRoaXMudGFwLmRlbCgpO1xuICAgICAgICB0aGlzLmRvdWJsZVRhcC5kZWwoKTtcbiAgICAgICAgdGhpcy5sb25nVGFwLmRlbCgpO1xuICAgICAgICB0aGlzLnNpbmdsZVRhcC5kZWwoKTtcbiAgICAgICAgdGhpcy5wcmVzc01vdmUuZGVsKCk7XG4gICAgICAgIHRoaXMudHdvRmluZ2VyUHJlc3NNb3ZlLmRlbCgpO1xuICAgICAgICB0aGlzLnRvdWNoTW92ZS5kZWwoKTtcbiAgICAgICAgdGhpcy50b3VjaEVuZC5kZWwoKTtcbiAgICAgICAgdGhpcy50b3VjaENhbmNlbC5kZWwoKTtcbiAgICAgICAgdGhpcy5wcmVWID0gdGhpcy5waW5jaFN0YXJ0TGVuID0gdGhpcy56b29tID0gdGhpcy5pc0RvdWJsZVRhcCA9IHRoaXMuZGVsdGEgPSB0aGlzLmxhc3QgPSB0aGlzLm5vdyA9IHRoaXMudGFwVGltZW91dCA9IHRoaXMuc2luZ2xlVGFwVGltZW91dCA9IHRoaXMubG9uZ1RhcFRpbWVvdXQgPSB0aGlzLnN3aXBlVGltZW91dCA9IHRoaXMueDEgPSB0aGlzLngyID0gdGhpcy55MSA9IHRoaXMueTIgPSB0aGlzLnByZVRhcFBvc2l0aW9uID0gdGhpcy5yb3RhdGUgPSB0aGlzLnRvdWNoU3RhcnQgPSB0aGlzLm11bHRpcG9pbnRTdGFydCA9IHRoaXMubXVsdGlwb2ludEVuZCA9IHRoaXMucGluY2ggPSB0aGlzLnN3aXBlID0gdGhpcy50YXAgPSB0aGlzLmRvdWJsZVRhcCA9IHRoaXMubG9uZ1RhcCA9IHRoaXMuc2luZ2xlVGFwID0gdGhpcy5wcmVzc01vdmUgPSB0aGlzLnRvdWNoTW92ZSA9IHRoaXMudG91Y2hFbmQgPSB0aGlzLnRvdWNoQ2FuY2VsID0gdGhpcy50d29GaW5nZXJQcmVzc01vdmUgPSBudWxsO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fY2FuY2VsQWxsSGFuZGxlcik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBUb3VjaEV2ZW50cztcbiAgfSgpO1xuXG4gIGZ1bmN0aW9uIHJlc2V0U2xpZGVNb3ZlKHNsaWRlKSB7XG4gICAgdmFyIHRyYW5zaXRpb25FbmQgPSB3aGljaFRyYW5zaXRpb25FdmVudCgpO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuICAgIHZhciBtZWRpYSA9IGhhc0NsYXNzKHNsaWRlLCAnZ3NsaWRlLW1lZGlhJykgPyBzbGlkZSA6IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtbWVkaWEnKTtcbiAgICB2YXIgY29udGFpbmVyID0gY2xvc2VzdChtZWRpYSwgJy5naW5uZXItY29udGFpbmVyJyk7XG4gICAgdmFyIGRlc2MgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLWRlc2NyaXB0aW9uJyk7XG5cbiAgICBpZiAod2luZG93V2lkdGggPiA3NjkpIHtcbiAgICAgIG1lZGlhID0gY29udGFpbmVyO1xuICAgIH1cblxuICAgIGFkZENsYXNzKG1lZGlhLCAnZ3Jlc2V0Jyk7XG4gICAgY3NzVHJhbnNmb3JtKG1lZGlhLCAndHJhbnNsYXRlM2QoMCwgMCwgMCknKTtcbiAgICBhZGRFdmVudCh0cmFuc2l0aW9uRW5kLCB7XG4gICAgICBvbkVsZW1lbnQ6IG1lZGlhLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHdpdGhDYWxsYmFjazogZnVuY3Rpb24gd2l0aENhbGxiYWNrKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MobWVkaWEsICdncmVzZXQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtZWRpYS5zdHlsZS5vcGFjaXR5ID0gJyc7XG5cbiAgICBpZiAoZGVzYykge1xuICAgICAgZGVzYy5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hOYXZpZ2F0aW9uKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLmV2ZW50cy5oYXNPd25Qcm9wZXJ0eSgndG91Y2gnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB3aW5TaXplID0gd2luZG93U2l6ZSgpO1xuICAgIHZhciB3aW5XaWR0aCA9IHdpblNpemUud2lkdGg7XG4gICAgdmFyIHdpbkhlaWdodCA9IHdpblNpemUuaGVpZ2h0O1xuICAgIHZhciBwcm9jZXNzID0gZmFsc2U7XG4gICAgdmFyIGN1cnJlbnRTbGlkZSA9IG51bGw7XG4gICAgdmFyIG1lZGlhID0gbnVsbDtcbiAgICB2YXIgbWVkaWFJbWFnZSA9IG51bGw7XG4gICAgdmFyIGRvaW5nTW92ZSA9IGZhbHNlO1xuICAgIHZhciBpbml0U2NhbGUgPSAxO1xuICAgIHZhciBtYXhTY2FsZSA9IDQuNTtcbiAgICB2YXIgY3VycmVudFNjYWxlID0gMTtcbiAgICB2YXIgZG9pbmdab29tID0gZmFsc2U7XG4gICAgdmFyIGltYWdlWm9vbWVkID0gZmFsc2U7XG4gICAgdmFyIHpvb21lZFBvc1ggPSBudWxsO1xuICAgIHZhciB6b29tZWRQb3NZID0gbnVsbDtcbiAgICB2YXIgbGFzdFpvb21lZFBvc1ggPSBudWxsO1xuICAgIHZhciBsYXN0Wm9vbWVkUG9zWSA9IG51bGw7XG4gICAgdmFyIGhEaXN0YW5jZTtcbiAgICB2YXIgdkRpc3RhbmNlO1xuICAgIHZhciBoRGlzdGFuY2VQZXJjZW50ID0gMDtcbiAgICB2YXIgdkRpc3RhbmNlUGVyY2VudCA9IDA7XG4gICAgdmFyIHZTd2lwZSA9IGZhbHNlO1xuICAgIHZhciBoU3dpcGUgPSBmYWxzZTtcbiAgICB2YXIgc3RhcnRDb29yZHMgPSB7fTtcbiAgICB2YXIgZW5kQ29vcmRzID0ge307XG4gICAgdmFyIHhEb3duID0gMDtcbiAgICB2YXIgeURvd24gPSAwO1xuICAgIHZhciBpc0lubGluZWQ7XG4gICAgdmFyIHNsaWRlcldyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xpZ2h0Ym94LXNsaWRlcicpO1xuICAgIHZhciBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdvdmVybGF5Jyk7XG4gICAgdmFyIHRvdWNoSW5zdGFuY2UgPSBuZXcgVG91Y2hFdmVudHMoc2xpZGVyV3JhcHBlciwge1xuICAgICAgdG91Y2hTdGFydDogZnVuY3Rpb24gdG91Y2hTdGFydChlKSB7XG4gICAgICAgI
24510HByb2Nlc3MgPSB0cnVlO1xuXG4gICAgICAgIGlmIChoYXNDbGFzcyhlLnRhcmdldFRvdWNoZXNbMF0udGFyZ2V0LCAnZ2lubmVyLWNvbnRhaW5lcicpIHx8IGNsb3Nlc3QoZS50YXJnZXRUb3VjaGVzWzBdLnRhcmdldCwgJy5nc2xpZGUtZGVzYycpIHx8IGUudGFyZ2V0VG91Y2hlc1swXS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnYScpIHtcbiAgICAgICAgICBwcm9jZXNzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvc2VzdChlLnRhcmdldFRvdWNoZXNbMF0udGFyZ2V0LCAnLmdzbGlkZS1pbmxpbmUnKSAmJiAhaGFzQ2xhc3MoZS50YXJnZXRUb3VjaGVzWzBdLnRhcmdldC5wYXJlbnROb2RlLCAnZ3NsaWRlLWlubGluZScpKSB7XG4gICAgICAgICAgcHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgICAgICBlbmRDb29yZHMgPSBlLnRhcmdldFRvdWNoZXNbMF07XG4gICAgICAgICAgc3RhcnRDb29yZHMucGFnZVggPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICAgICAgc3RhcnRDb29yZHMucGFnZVkgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgICAgeERvd24gPSBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgICB5RG93biA9IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgICAgIGN1cnJlbnRTbGlkZSA9IGluc3RhbmNlLmFjdGl2ZVNsaWRlO1xuICAgICAgICAgIG1lZGlhID0gY3VycmVudFNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtbWVkaWEnKTtcbiAgICAgICAgICBpc0lubGluZWQgPSBjdXJyZW50U2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1pbmxpbmUnKTtcbiAgICAgICAgICBtZWRpYUltYWdlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChoYXNDbGFzcyhtZWRpYSwgJ2dzbGlkZS1pbWFnZScpKSB7XG4gICAgICAgICAgICBtZWRpYUltYWdlID0gbWVkaWEucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG5cbiAgICAgICAgICBpZiAod2luZG93V2lkdGggPiA3NjkpIHtcbiAgICAgICAgICAgIG1lZGlhID0gY3VycmVudFNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5naW5uZXItY29udGFpbmVyJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3Mob3ZlcmxheSwgJ2dyZXNldCcpO1xuXG4gICAgICAgICAgaWYgKGUucGFnZVggPiAyMCAmJiBlLnBhZ2VYIDwgd2luZG93LmlubmVyV2lkdGggLSAyMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvdWNoTW92ZTogZnVuY3Rpb24gdG91Y2hNb3ZlKGUpIHtcbiAgICAgICAgaWYgKCFwcm9jZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kQ29vcmRzID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuXG4gICAgICAgIGlmIChkb2luZ1pvb20gfHwgaW1hZ2Vab29tZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJbmxpbmVkICYmIGlzSW5saW5lZC5vZmZzZXRIZWlnaHQgPiB3aW5IZWlnaHQpIHtcbiAgICAgICAgICB2Y
24510XIgbW92ZWQgPSBzdGFydENvb3Jkcy5wYWdlWCAtIGVuZENvb3Jkcy5wYWdlWDtcblxuICAgICAgICAgIGlmIChNYXRoLmFicyhtb3ZlZCkgPD0gMTMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb2luZ01vdmUgPSB0cnVlO1xuICAgICAgICB2YXIgeFVwID0gZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgIHZhciB5VXAgPSBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICAgdmFyIHhEaWZmID0geERvd24gLSB4VXA7XG4gICAgICAgIHZhciB5RGlmZiA9IHlEb3duIC0geVVwO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyh4RGlmZikgPiBNYXRoLmFicyh5RGlmZikpIHtcbiAgICAgICAgICB2U3dpcGUgPSBmYWxzZTtcbiAgICAgICAgICBoU3dpcGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhTd2lwZSA9IGZhbHNlO1xuICAgICAgICAgIHZTd2lwZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBoRGlzdGFuY2UgPSBlbmRDb29yZHMucGFnZVggLSBzdGFydENvb3Jkcy5wYWdlWDtcbiAgICAgICAgaERpc3RhbmNlUGVyY2VudCA9IGhEaXN0YW5jZSAqIDEwMCAvIHdpbldpZHRoO1xuICAgICAgICB2RGlzdGFuY2UgPSBlbmRDb29yZHMucGFnZVkgLSBzdGFydENvb3Jkcy5wYWdlWTtcbiAgICAgICAgdkRpc3RhbmNlUGVyY2VudCA9IHZEaXN0YW5jZSAqIDEwMCAvIHdpbkhlaWdodDtcbiAgICAgICAgdmFyIG9wYWNpdHk7XG5cbiAgICAgICAgaWYgKHZTd2lwZSAmJiBtZWRpYUltYWdlKSB7XG4gICAgICAgICAgb3BhY2l0eSA9IDEgLSBNYXRoLmFicyh2RGlzdGFuY2UpIC8gd2luSGVpZ2h0O1xuICAgICAgICAgIG92ZXJsYXkuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG5cbiAgICAgICAgICBpZiAoaW5zdGFuY2Uuc2V0dGluZ3MudG91Y2hGb2xsb3dBeGlzKSB7XG4gICAgICAgICAgICBoRGlzdGFuY2VQZXJjZW50ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaFN3aXBlKSB7XG4gICAgICAgICAgb3BhY2l0eSA9IDEgLSBNYXRoLmFicyhoRGlzdGFuY2UpIC8gd2luV2lkdGg7XG4gICAgICAgICAgbWVkaWEuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG5cbiAgICAgICAgICBpZiAoaW5zdGFuY2Uuc2V0dGluZ3MudG91Y2hGb2xsb3dBeGlzKSB7XG4gICAgICAgICAgICB2RGlzdGFuY2VQZXJjZW50ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1lZGlhSW1hZ2UpIHtcbiAgICAgICAgICByZXR1cm4gY3NzVHJhbnNmb3JtKG1lZGlhLCBcInRyYW5zbGF0ZTNkKFwiLmNvbmNhdChoRGlzdGFuY2VQZXJjZW50LCBcIiUsIDAsIDApXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNzc1RyYW5zZm9ybShtZWRpYSwgXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQoaERpc3RhbmNlUGVyY2VudCwgXCIlLCBcIikuY29uY2F0KHZEaXN0YW5jZVBlcmNlbnQsIFwiJSwgMClcIikpO1xuICAgICAgfSxcbiAgICAgIHRvdWNoRW5kOiBmdW5jdGlvbiB0b3VjaEVuZCgpIHtcbiAgICAgICAgaWYgKCFwcm9jZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9pbmdNb3ZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGltYWdlWm9vbWVkIHx8IGRvaW5nWm9vbSkge1xuICAgICAgICAgIGxhc3Rab29tZWRQb3NYID0gem9vbWVkUG9zWDtcbiAgICAgICAgICBsYXN0Wm9vbWVkUG9zWSA9IHpvb21lZFBvc1k7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHYgPSBNYXRoLmFicyhwYXJzZUludCh2RGlzdGFuY2VQZXJjZW50KSk7XG4gICAgICAgIHZhciBoID0gTWF0aC5hYnMocGFyc2VJbnQoaERpc3RhbmNlUGVyY2VudCkpO1xuXG4gICAgICAgIGlmICh2ID4gMjkgJiYgbWVkaWFJbWFnZSkge1xuICAgICAgICAgIGluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHYgPCAyOSAmJiBoIDwgMjUpIHtcbiAgICAgICAgICBhZGRDbGFzcyhvdmVybGF5LCAnZ3Jlc2V0Jyk7XG4gICAgICAgICAgb3ZlcmxheS5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgICAgICByZXR1cm4gcmVzZXRTbGlkZU1vdmUobWVkaWEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbXVsdGlwb2ludEVuZDogZnVuY3Rpb24gbXVsdGlwb2ludEVuZCgpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZG9pbmdab29tID0gZmFsc2U7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aXBvaW50U3RhcnQ6IGZ1bmN0aW9uIG11bHRpcG9pbnRTdGFydCgpIHtcbiAgICAgICAgZG9pbmdab29tID0gdHJ1ZTtcbiAgICAgICAgaW5pdFNjYWxlID0gY3VycmVudFNjYWxlID8gY3VycmVudFNjYWxlIDogMTtcbiAgICAgIH0sXG4gICAgICBwaW5jaDogZnVuY3Rpb24gcGluY2goZXZ0KSB7XG4gICAgICAgIGlmICghbWVkaWFJbWFnZSB8fCBkb2luZ01vdmUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBkb2luZ1pvb20gPSB0cnVlO1xuICAgICAgICBtZWRpYUltYWdlLnNjYWxlWCA9IG1lZGlhSW1hZ2Uuc2NhbGVZID0gaW5pdFNjYWxlICogZXZ0Lnpvb207XG4gICAgICAgIHZhciBzY2FsZSA9IGluaXRTY2FsZSAqIGV2dC56b29tO1xuICAgICAgICBpbWFnZVpvb21lZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNjYWxlIDw9IDEpIHtcbiAgICAgICAgICBpbWFnZVpvb21lZCA9IGZhbHNlO1xuICAgICAgICAgIHNjYWxlID0gMTtcbiAgICAgICAgICBsYXN0Wm9vbWVkUG9zWSA9IG51bGw7XG4gICAgICAgICAgbGFzdFpvb21lZFBvc1ggPSBudWxsO1xuICAgICAgICAgIHpvb21lZFBvc1ggPSBudWxsO1xuICAgICAgICAgIHpvb21lZFBvc1kgPSBudWxsO1xuICAgICAgICAgIG1lZGlhSW1hZ2Uuc2V0QXR0cmlidXRlKCdzdHlsZScsICcnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NhbGUgPiBtYXhTY2FsZSkge1xuICAgICAgICAgI
24510HNjYWxlID0gbWF4U2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBtZWRpYUltYWdlLnN0eWxlLnRyYW5zZm9ybSA9IFwic2NhbGUzZChcIi5jb25jYXQoc2NhbGUsIFwiLCBcIikuY29uY2F0KHNjYWxlLCBcIiwgMSlcIik7XG4gICAgICAgIGN1cnJlbnRTY2FsZSA9IHNjYWxlO1xuICAgICAgfSxcbiAgICAgIHByZXNzTW92ZTogZnVuY3Rpb24gcHJlc3NNb3ZlKGUpIHtcbiAgICAgICAgaWYgKGltYWdlWm9vbWVkICYmICFkb2luZ1pvb20pIHtcbiAgICAgICAgICB2YXIgbWhEaXN0YW5jZSA9IGVuZENvb3Jkcy5wYWdlWCAtIHN0YXJ0Q29vcmRzLnBhZ2VYO1xuICAgICAgICAgIHZhciBtdkRpc3RhbmNlID0gZW5kQ29vcmRzLnBhZ2VZIC0gc3RhcnRDb29yZHMucGFnZVk7XG5cbiAgICAgICAgICBpZiAobGFzdFpvb21lZFBvc1gpIHtcbiAgICAgICAgICAgIG1oRGlzdGFuY2UgPSBtaERpc3RhbmNlICsgbGFzdFpvb21lZFBvc1g7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhc3Rab29tZWRQb3NZKSB7XG4gICAgICAgICAgICBtdkRpc3RhbmNlID0gbXZEaXN0YW5jZSArIGxhc3Rab29tZWRQb3NZO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHpvb21lZFBvc1ggPSBtaERpc3RhbmNlO1xuICAgICAgICAgIHpvb21lZFBvc1kgPSBtdkRpc3RhbmNlO1xuICAgICAgICAgIHZhciBzdHlsZSA9IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KG1oRGlzdGFuY2UsIFwicHgsIFwiKS5jb25jYXQobXZEaXN0YW5jZSwgXCJweCwgMClcIik7XG5cbiAgICAgICAgICBpZiAoY3VycmVudFNjYWxlKSB7XG4gICAgICAgICAgICBzdHlsZSArPSBcIiBzY2FsZTNkKFwiLmNvbmNhdChjdXJyZW50U2NhbGUsIFwiLCBcIikuY29uY2F0KGN1cnJlbnRTY2FsZSwgXCIsIDEpXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNzc1RyYW5zZm9ybShtZWRpYUltYWdlLCBzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzd2lwZTogZnVuY3Rpb24gc3dpcGUoZXZ0KSB7XG4gICAgICAgIGlmIChpbWFnZVpvb21lZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb2luZ1pvb20pIHtcbiAgICAgICAgICBkb2luZ1pvb20gPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZ0LmRpcmVjdGlvbiA9PSAnTGVmdCcpIHtcbiAgICAgICAgICBpZiAoaW5zdGFuY2UuaW5kZXggPT0gaW5zdGFuY2UuZWxlbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc2V0U2xpZGVNb3ZlKG1lZGlhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnN0YW5jZS5uZXh0U2xpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldnQuZGlyZWN0aW9uID09ICdSaWdodCcpIHtcbiAgICAgICAgICBpZiAoaW5zdGFuY2UuaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc2V0U2xpZGVNb3ZlKG1lZGlhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnN0YW5jZS5wcmV2U2xpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGluc3RhbmNlLmV2ZW50c1sndG91Y2gnXSA9IHRvdWNoSW5zdGFuY2U7XG4gIH1cblxuICB2YXIgWm9vbUltYWdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBab29tSW1hZ2VzKGVsLCBzbGlkZSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIG9uY2xvc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBab29tSW1hZ2VzKTtcblxuICAgICAgdGhpcy5pbWcgPSBlbDtcbiAgICAgIHRoaXMuc2xpZGUgPSBzbGlkZTtcbiAgICAgIHRoaXMub25jbG9zZSA9IG9uY2xvc2U7XG5cbiAgICAgIGlmICh0aGlzLmltZy5zZXRab29tRXZlbnRzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuem9vbWVkSW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudFggPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50WSA9IG51bGw7XG4gICAgICB0aGlzLmluaXRpYWxYID0gbnVsbDtcbiAgICAgIHRoaXMuaW5pdGlhbFkgPSBudWxsO1xuICAgICAgdGhpcy54T2Zmc2V0ID0gMDtcbiAgICAgIHRoaXMueU9mZnNldCA9IDA7XG4gICAgICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZHJhZ1N0YXJ0KGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgdGhpcy5pbWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5kcmFnRW5kKGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgdGhpcy5pbWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmRyYWcoZSk7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChfdGhpcy5zbGlkZS5jbGFzc0xpc3QuY29udGFpbnMoJ2RyYWdnaW5nLW5hdicpKSB7XG4gICAgICAgICAgX3RoaXMuem9vbU91dCgpO1xuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfdGhpcy56b29tZWRJbikge1xuICAgICAgICAgIHJldHVybiBfdGhpcy56b29tSW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdGhpcy56b29tZWRJbiAmJiAhX3RoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICBfdGhpcy56b29tT3V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZhbHNlKTtcbiAgICAgIHRoaXMuaW1nLnNldFpvb21FdmVudHMgPSB0cnVlO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhab29tSW1hZ2VzLCBbe1xuICAgICAga2V5OiBcInpvb21JblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHpvb21JbigpIHtcbiAgICAgICAgdmFyIHdpbldpZHRoID0gdGh
24510pcy53aWRvd1dpZHRoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuem9vbWVkSW4gfHwgd2luV2lkdGggPD0gNzY4KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nO1xuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdkYXRhLXN0eWxlJywgaW1nLmdldEF0dHJpYnV0ZSgnc3R5bGUnKSk7XG4gICAgICAgIGltZy5zdHlsZS5tYXhXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGggKyAncHgnO1xuICAgICAgICBpbWcuc3R5bGUubWF4SGVpZ2h0ID0gaW1nLm5hdHVyYWxIZWlnaHQgKyAncHgnO1xuXG4gICAgICAgIGlmIChpbWcubmF0dXJhbFdpZHRoID4gd2luV2lkdGgpIHtcbiAgICAgICAgICB2YXIgY2VudGVyWCA9IHdpbldpZHRoIC8gMiAtIGltZy5uYXR1cmFsV2lkdGggLyAyO1xuICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuaW1nLnBhcmVudE5vZGUsIGNlbnRlclgsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zbGlkZS5jbGFzc0xpc3QuYWRkKCd6b29tZWQnKTtcbiAgICAgICAgdGhpcy56b29tZWRJbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInpvb21PdXRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB6b29tT3V0KCkge1xuICAgICAgICB0aGlzLmltZy5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnJyk7XG4gICAgICAgIHRoaXMuaW1nLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB0aGlzLmltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3R5bGUnKSk7XG4gICAgICAgIHRoaXMuc2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgnem9vbWVkJyk7XG4gICAgICAgIHRoaXMuem9vbWVkSW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50WCA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFkgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxYID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbml0aWFsWSA9IG51bGw7XG4gICAgICAgIHRoaXMueE9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMueU9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMub25jbG9zZSAmJiB0eXBlb2YgdGhpcy5vbmNsb3NlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLm9uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkcmFnU3RhcnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcmFnU3RhcnQoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnpvb21lZEluKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy55T2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbFggPSBlLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUuY2xpZW50WSAtIHRoaXMueU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcy5pbWcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pbWcuY2xhc3NMaXN0LmFkZCgnZHJhZ2dpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkcmFnRW5kXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZHJhZ0VuZChlKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsWCA9IHRoaXMuY3VycmVudFg7XG4gICAgICAgIHRoaXMuaW5pdGlhbFkgPSB0aGlzLmN1cnJlbnRZO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICBfdGhpczIuaW1nLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIF90aGlzMi5pbWcuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmcnKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZHJhZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRyYWcoZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2htb3ZlJykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WCA9IGUudG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5pbml0aWFsWDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFkgPSBlLnRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuaW5pdGlhbFk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFggPSBlLmNsaWVudFggLSB0aGlzLmluaXRpYWxYO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuaW5pdGlhbFk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy54T2Zmc2V0ID0gdGhpcy5jdXJyZW50WDtcbiAgICAgICAgICB0aGlzLnlPZmZzZXQgPSB0aGlzLmN1cnJlbnRZO1xuICAgICAgICAgIHRoaXMuaW1nLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuaW1nLCB0aGlzLmN1cnJlbnRYLCB0aGlzLmN1cnJlbnRZKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvbk1vdmVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1vdmUoZSkge1xuICAgICAgICBpZiAoIXRoaXMuem9vbWVkSW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgeE9mZnNldCA9IGUuY2xpZW50WCAtIHRoaXMuaW1nLm5hdHVyYWxXaWR0aCAvIDI7XG4gICAgICAgIHZhciB5T2Zmc2V0ID0gZS5jbGllbnRZIC0gdGhpcy5pbWcubmF0dXJhbEhlaWdodCAvIDI7XG4gICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuaW1nLCB4T2Zmc2V0LCB5T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2V0VHJhbnNsYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKG5vZGUsIHhQb3MsIHlQb3MpIHtcbiAgICAgICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoJyArIHhQb3MgKyAncHgsICcgKyB5UG9zICsgJ3B4LCAwKSc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIndpZG93V2lkdGhcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB3aWRvd1dpZHRoKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFpvb21JbWFnZXM7XG4gIH0oKTtcblxuICB2YXIgRHJhZ1NsaWRlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcmFnU2xpZGVzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEcmFnU2xpZGVzKTtcblxuICAgICAgdmFyIGRyYWdFbCA9IGNvbmZpZy5kcmFnRWwsXG4gICAgICAgICAgX2NvbmZpZyR0b2xlcmFuY2VYID0gY29uZmlnLnRvbGVyYW5jZVgsXG4gICAgICAgICAgdG9sZXJhbmNlWCA9IF9jb25maWckdG9sZXJhbmNlWCA9PT0gdm9pZCAwID8gNDAgOiBfY29uZmlnJHRvbGVyYW5jZVgsXG4gICAgICAgICAgX2NvbmZpZyR0b2xlcmFuY2VZID0gY29uZmlnLnRvbGVyYW5jZVksXG4gICAgICAgICAgdG9sZXJhbmNlWSA9IF9jb25maWckdG9sZXJhbmNlWSA9PT0gdm9pZCAwID8gNjUgOiBfY29uZmlnJHRvbGVyYW5jZVksXG4gICAgICAgICAgX2NvbmZpZyRzbGlkZSA9IGNvbmZpZy5zbGlkZSxcbiAgICAgICAgICBzbGlkZSA9IF9jb25maWckc2xpZGUgPT09IHZvaWQgMCA/IG51bGwgOiBfY29uZmlnJHNsaWRlLFxuICAgICAgICAgIF9jb25maWckaW5zdGFuY2UgPSBjb25maWcuaW5zdGFuY2UsXG4gICAgICAgICAgaW5zdGFuY2UgPSBfY29uZmlnJGluc3RhbmNlID09PSB2b2lkIDAgPyBudWxsIDogX2NvbmZpZyRpbnN0YW5jZTtcbiAgICAgIHRoaXMuZWwgPSBkcmFnRWw7XG4gICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50WCA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRZID0gbnVsbDtcbiAgICAgIHRoaXMuaW5pdGlhbFggPSBudWxsO1xuICAgICAgdGhpcy5pbml0aWFsWSA9IG51bGw7XG4gICAgICB0aGlzLnhPZmZzZXQgPSAwO1xuICAgICAgdGhpcy55T2Zmc2V0ID0gMDtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMubGFzdERpcmVjdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLnRvbGVyYW5jZVggPSB0b2xlcmFuY2VYO1xuICAgICAgdGhpcy50b2xlcmFuY2VZID0gdG9sZXJhbmNlWTtcbiAgICAgIHRoaXMudG9sZXJhbmNlUmVhY2hlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kcmFnQ29udGFpbmVyID0gdGhpcy5lbDtcbiAgICAgIHRoaXMuc2xpZGUgPSBzbGlkZTtcbiAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmRyYWdTdGFydChlKTtcbiAgICAgIH0sIGZhbHNlKTtcbiAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5kcmFnRW5kKGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZHJhZyhlKTtcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoRHJhZ1NsaWRlcywgW3tcbiAgICAgIGtleTogXCJkcmFnU3RhcnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcmFnU3RhcnQoZSkge1xuICAgICAgICBpZiAodGhpcy5zbGlkZS5jbGFzc0xpc3QuY29udGFpbnMoJ3pvb21lZCcpKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy55T2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbFggPSBlLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUuY2xpZW50WSAtIHRoaXMueU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjbGlja2VkID0gZS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIGV4bHVkZUNsaWNrcyA9IFsnaW5wdXQnLCAnc2VsZWN0JywgJ3RleHRhcmVhJywgJ2J1dHRvbicsICdhJ107XG5cbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbm9kcmFnJykgfHwgY2xvc2VzdChlLnRhcmdldCwgJy5ub2RyYWcnKSB8fCBleGx1ZGVDbGlja3MuaW5kZXhPZihjbGlja2VkKSAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMuZWwgfHwgY2xpY2tlZCAhPT0gJ2ltZycgJiYgY2xvc2VzdChlLnRhcmdldCwgJy5nc2xpZGUtaW5saW5lJykpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycpO1xuICAgICAgICAgI
24510HRoaXMuZHJhZ0NvbnRhaW5lciA9IGNsb3Nlc3QoZS50YXJnZXQsICcuZ2lubmVyLWNvbnRhaW5lcicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRyYWdFbmRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcmFnRW5kKGUpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgZSAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbFggPSAwO1xuICAgICAgICB0aGlzLmluaXRpYWxZID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50WCA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFkgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxYID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbml0aWFsWSA9IG51bGw7XG4gICAgICAgIHRoaXMueE9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMueU9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuZG9TbGlkZUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuaW5zdGFuY2UucHJldmVudE91dHNpZGVDbGljayA9IHRydWU7XG4gICAgICAgICAgdGhpcy5kb1NsaWRlQ2hhbmdlID09ICdyaWdodCcgJiYgdGhpcy5pbnN0YW5jZS5wcmV2U2xpZGUoKTtcbiAgICAgICAgICB0aGlzLmRvU2xpZGVDaGFuZ2UgPT0gJ2xlZnQnICYmIHRoaXMuaW5zdGFuY2UubmV4dFNsaWRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb1NsaWRlQ2xvc2UpIHtcbiAgICAgICAgICB0aGlzLmluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudG9sZXJhbmNlUmVhY2hlZCkge1xuICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuZHJhZ0NvbnRhaW5lciwgMCwgMCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuaW5zdGFuY2UucHJldmVudE91dHNpZGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzMi50b2xlcmFuY2VSZWFjaGVkID0gZmFsc2U7XG4gICAgICAgICAgX3RoaXMyLmxhc3REaXJlY3Rpb24gPSBudWxsO1xuICAgICAgICAgIF90aGlzMi5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzMi5lbC5pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICBfdGhpczIuZWwuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmcnKTtcblxuICAgICAgICAgIF90aGlzMi5zbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZy1uYXYnKTtcblxuICAgICAgICAgIF90aGlzMi5kcmFnQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgIF90aGlzMi5kcmFnQ29udGFpbmVyLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZHJhZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRyYWcoZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zbGlkZS5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZy1uYXYnKTtcblxuICAgICAgICAgIGlmIChlLnR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLmluaXRpYWxYO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy5pbml0aWFsWTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuaW5pdGlhbFg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRZID0gZS5jbGllbnRZIC0gdGhpcy5pbml0aWFsWTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnhPZmZzZXQgPSB0aGlzLmN1cnJlbnRYO1xuICAgICAgICAgIHRoaXMueU9mZnNldCA9IHRoaXMuY3VycmVudFk7XG4gICAgICAgICAgdGhpcy5lbC5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRvU2xpZGVDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRvU2xpZGVDbG9zZSA9IGZhbHNlO1xuICAgICAgICAgIHZhciBjdXJyZW50WEludCA9IE1hdGguYWJzKHRoaXMuY3VycmVudFgpO1xuICAgICAgICAgIHZhciBjdXJyZW50WUludCA9IE1hdGguYWJzKHRoaXMuY3VycmVudFkpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRYSW50ID4gMCAmJiBjdXJyZW50WEludCA+PSBNYXRoLmFicyh0aGlzLmN1cnJlbnRZKSAmJiAoIXRoaXMubGFzdERpcmVjdGlvbiB8fCB0aGlzLmxhc3REaXJlY3Rpb24gPT0gJ3gnKSkge1xuICAgICAgICAgICAgdGhpcy55T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMubGFzdERpcmVjdGlvbiA9ICd4JztcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuZHJhZ0NvbnRhaW5lciwgdGhpcy5jdXJyZW50WCwgMCk7XG4gICAgICAgICAgICB2Y
24510XIgZG9DaGFuZ2UgPSB0aGlzLnNob3VsZENoYW5nZSgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MuZHJhZ0F1dG9TbmFwICYmIGRvQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZG9TbGlkZUNoYW5nZSA9IGRvQ2hhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5zZXR0aW5ncy5kcmFnQXV0b1NuYXAgJiYgZG9DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5wcmV2ZW50T3V0c2lkZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy50b2xlcmFuY2VSZWFjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5wcmV2ZW50T3V0c2lkZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5kcmFnRW5kKG51bGwpO1xuICAgICAgICAgICAgICBkb0NoYW5nZSA9PSAncmlnaHQnICYmIHRoaXMuaW5zdGFuY2UucHJldlNsaWRlKCk7XG4gICAgICAgICAgICAgIGRvQ2hhbmdlID09ICdsZWZ0JyAmJiB0aGlzLmluc3RhbmNlLm5leHRTbGlkZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudG9sZXJhbmNlWSA+IDAgJiYgY3VycmVudFlJbnQgPiAwICYmIGN1cnJlbnRZSW50ID49IGN1cnJlbnRYSW50ICYmICghdGhpcy5sYXN0RGlyZWN0aW9uIHx8IHRoaXMubGFzdERpcmVjdGlvbiA9PSAneScpKSB7XG4gICAgICAgICAgICB0aGlzLnhPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0RGlyZWN0aW9uID0gJ3knO1xuICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2xhdGUodGhpcy5kcmFnQ29udGFpbmVyLCAwLCB0aGlzLmN1cnJlbnRZKTtcbiAgICAgICAgICAgIHZhciBkb0Nsb3NlID0gdGhpcy5zaG91bGRDbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MuZHJhZ0F1dG9TbmFwICYmIGRvQ2xvc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5kb1NsaWRlQ2xvc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5zZXR0aW5ncy5kcmFnQXV0b1NuYXAgJiYgZG9DbG9zZSkge1xuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2hvdWxkQ2hhbmdlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ2hhbmdlKCkge1xuICAgICAgICB2Y
24510XIgZG9DaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIGN1cnJlbnRYSW50ID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRYSW50ID49IHRoaXMudG9sZXJhbmNlWCkge1xuICAgICAgICAgIHZhciBkcmFnRGlyID0gdGhpcy5jdXJyZW50WCA+IDAgPyAncmlnaHQnIDogJ2xlZnQnO1xuXG4gICAgICAgICAgaWYgKGRyYWdEaXIgPT0gJ2xlZnQnICYmIHRoaXMuc2xpZGUgIT09IHRoaXMuc2xpZGUucGFyZW50Tm9kZS5sYXN0Q2hpbGQgfHwgZHJhZ0RpciA9PSAncmlnaHQnICYmIHRoaXMuc2xpZGUgIT09IHRoaXMuc2xpZGUucGFyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICBkb0NoYW5nZSA9IGRyYWdEaXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRvQ2hhbmdlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzaG91bGRDbG9zZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENsb3NlKCkge1xuICAgICAgICB2YXIgZG9DbG9zZSA9IGZhbHNlO1xuICAgICAgICB2YXIgY3VycmVudFlJbnQgPSBNYXRoLmFicyh0aGlzLmN1cnJlbnRZKTtcblxuICAgICAgICBpZiAoY3VycmVudFlJbnQgPj0gdGhpcy50b2xlcmFuY2VZKSB7XG4gICAgICAgICAgZG9DbG9zZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9DbG9zZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2V0VHJhbnNsYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKG5vZGUsIHhQb3MsIHlQb3MpIHtcbiAgICAgICAgdmFyIGFuaW1hdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcblxuICAgICAgICBpZiAoYW5pbWF0ZWQpIHtcbiAgICAgICAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSAnYWxsIC4ycyBlYXNlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQoeFBvcywgXCJweCwgXCIpLmNvbmNhdCh5UG9zLCBcInB4LCAwKVwiKTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gRHJhZ1NsaWRlcztcbiAgfSgpO1xuXG4gIGZ1bmN0aW9uIHNsaWRlSW1hZ2Uoc2xpZGUsIGRhdGEsIGluZGV4LCBjYWxsYmFjaykge1xuICAgIHZhciBzbGlkZU1lZGlhID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1tZWRpYScpO1xuICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICB2YXIgdGl0bGVJRCA9ICdnU2xpZGVUaXRsZV8nICsgaW5kZXg7XG4gICAgdmFyIHRleHRJRCA9ICdnU2xpZGVEZXNjXycgKyBpbmRleDtcbiAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcbiAgICBpbWcuc3JjID0gZGF0YS5ocmVmO1xuXG4gICAgaWYgKGRhdGEuc2l6ZXMgIT0gJycgJiYgZGF0YS5zcmNzZXQgIT0gJycpIHtcbiAgICAgIGltZy5zaXplcyA9IGRhdGEuc2l6ZXM7XG4gICAgICBpbWcuc3Jjc2V0ID0gZGF0YS5zcmNzZXQ7XG4gICAgfVxuXG4gICAgaW1nLmFsdCA9ICcnO1xuXG4gICAgaWYgKCFpc05pbChkYXRhLmFsdCkgJiYgZGF0YS5hbHQgIT09ICcnKSB7XG4gICAgICBpbWcuYWx0ID0gZGF0YS5hbHQ7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudGl0bGUgIT09ICcnKSB7XG4gICAgICBpbWcuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCB0aXRsZUlEKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAhPT0gJycpIHtcbiAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0ZXh0SUQpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KCdfaGFzQ3VzdG9tV2lkdGgnKSAmJiBkYXRhLl9oYXNDdXN0b21XaWR0aCkge1xuICAgICAgaW1nLnN0eWxlLndpZHRoID0gZGF0YS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgnX2hhc0N1c3RvbUhlaWdodCcpICYmIGRhdGEuX2hhc0N1c3RvbUhlaWdodCkge1xuICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGRhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHNsaWRlTWVkaWEuaW5zZXJ0QmVmb3JlKGltZywgc2xpZGVNZWRpYS5maXJzdENoaWxkKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVZpZGVvKHNsaWRlLCBkYXRhLCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHNsaWRlQ29udGFpbmVyID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdpbm5lci1jb250YWluZXInKTtcbiAgICB2YXIgdmlkZW9JRCA9ICdndmlkZW8nICsgaW5kZXg7XG4gICAgdmFyIHNsaWRlTWVkaWEgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgdmFyIHZpZGVvUGxheWVycyA9IHRoaXMuZ2V0QWxsUGxheWVycygpO1xuICAgIGFkZENsYXNzKHNsaWRlQ29udGFpbmVyLCAnZ3ZpZGVvLWNvbnRhaW5lcicpO1xuICAgIHNsaWRlTWVkaWEuaW5zZXJ0QmVmb3JlKGNyZWF0ZUhUTUwoJzxkaXYgY2xhc3M9XCJndmlkZW8td3JhcHBlclwiPjwvZGl2PicpLCBzbGlkZU1lZGlhLmZpcnN0Q2hpbGQpO1xuICAgIHZhciB2aWRlb1dyYXBwZXIgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3ZpZGVvLXdyYXBwZXInKTtcbiAgICBpbmplY3RBc3NldHModGhpcy5zZXR0aW5ncy5wbHlyLmNzcywgJ1BseXInKTtcbiAgICB2YXIgdXJsID0gZGF0YS5ocmVmO1xuICAgIHZhciBwcm90b2NvbCA9IGxvY2F0aW9uLnByb3RvY29sLnJlcGxhY2UoJzonLCAnJyk7XG4gICAgdmFyIHZpZGVvU291cmNlID0gJyc7XG4gICAgdmFyIGVtYmVkSUQgPSAnJztcbiAgICB2YXIgY3VzdG9tUGxhY2Vob2xkZXIgPSBmYWxzZTtcblxuICAgIGlmIChwcm90b2NvbCA9PSAnZmlsZScpIHtcbiAgICAgIHByb3RvY29sID0gJ2h0dHAnO1xuICAgIH1cblxuICAgI
24510HNsaWRlTWVkaWEuc3R5bGUubWF4V2lkdGggPSBkYXRhLndpZHRoO1xuICAgIGluamVjdEFzc2V0cyh0aGlzLnNldHRpbmdzLnBseXIuanMsICdQbHlyJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHVybC5tYXRjaCgvdmltZW9cXC5jb21cXC8oWzAtOV0qKS8pKSB7XG4gICAgICAgIHZhciB2aW1lb0lEID0gL3ZpbWVvLipcXC8oXFxkKykvaS5leGVjKHVybCk7XG4gICAgICAgIHZpZGVvU291cmNlID0gJ3ZpbWVvJztcbiAgICAgICAgZW1iZWRJRCA9IHZpbWVvSURbMV07XG4gICAgICB9XG5cbiAgICAgIGlmICh1cmwubWF0Y2goLyh5b3V0dWJlXFwuY29tfHlvdXR1YmUtbm9jb29raWVcXC5jb20pXFwvd2F0Y2hcXD92PShbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgveW91dHVcXC5iZVxcLyhbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgvKHlvdXR1YmVcXC5jb218eW91dHViZS1ub2Nvb2tpZVxcLmNvbSlcXC9lbWJlZFxcLyhbYS16QS1aMC05XFwtX10rKS8pKSB7XG4gICAgICAgIHZhciB5b3V0dWJlSUQgPSBnZXRZb3V0dWJlSUQodXJsKTtcbiAgICAgICAgdmlkZW9Tb3VyY2UgPSAneW91dHViZSc7XG4gICAgICAgIGVtYmVkSUQgPSB5b3V0dWJlSUQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cmwubWF0Y2goL1xcLihtcDR8b2dnfHdlYm18bW92KSQvKSAhPT0gbnVsbCkge1xuICAgICAgICB2aWRlb1NvdXJjZSA9ICdsb2NhbCc7XG4gICAgICAgIHZhciBodG1sID0gJzx2aWRlbyBpZD1cIicgKyB2aWRlb0lEICsgJ1wiICc7XG4gICAgICAgIGh0bWwgKz0gXCJzdHlsZT1cXFwiYmFja2dyb3VuZDojMDAwOyBtYXgtd2lkdGg6IFwiLmNvbmNhdChkYXRhLndpZHRoLCBcIjtcXFwiIFwiKTtcbiAgICAgICAgaHRtbCArPSAncHJlbG9hZD1cIm1ldGFkYXRhXCIgJztcbiAgICAgICAgaHRtbCArPSAneC13ZWJraXQtYWlycGxheT1cImFsbG93XCIgJztcbiAgICAgICAgaHRtbCArPSAncGxheXNpbmxpbmUgJztcbiAgICAgICAgaHRtbCArPSAnY29udHJvbHMgJztcbiAgICAgICAgaHRtbCArPSAnY2xhc3M9XCJndmlkZW8tbG9jYWxcIj4nO1xuICAgICAgICB2Y
24510XIgZm9ybWF0ID0gdXJsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJy4nKS5wb3AoKTtcbiAgICAgICAgdmFyIHNvdXJjZXMgPSB7XG4gICAgICAgICAgbXA0OiAnJyxcbiAgICAgICAgICBvZ2c6ICcnLFxuICAgICAgICAgIHdlYm06ICcnXG4gICAgICAgIH07XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCA9PSAnbW92JyA/ICdtcDQnIDogZm9ybWF0O1xuICAgICAgICBzb3VyY2VzW2Zvcm1hdF0gPSB1cmw7XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZXMpIHtcbiAgICAgICAgICBpZiAoc291cmNlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB2YXIgdmlkZW9GaWxlID0gc291cmNlc1trZXldO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgIHZpZGVvRmlsZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZpZGVvRmlsZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgaHRtbCArPSBcIjxzb3VyY2Ugc3JjPVxcXCJcIi5jb25jYXQodmlkZW9GaWxlLCBcIlxcXCIgdHlwZT1cXFwidmlkZW8vXCIpLmNvbmNhdChrZXksIFwiXFxcIj5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaHRtbCArPSAnPC92aWRlbz4nO1xuICAgICAgICBjdXN0b21QbGFjZWhvbGRlciA9IGNyZWF0ZUhUTUwoaHRtbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwbGFjZWhvbGRlciA9IGN1c3RvbVBsYWNlaG9sZGVyID8gY3VzdG9tUGxhY2Vob2xkZXIgOiBjcmVhdGVIVE1MKFwiPGRpdiBpZD1cXFwiXCIuY29uY2F0KHZpZGVvSUQsIFwiXFxcIiBkYXRhLXBseXItcHJvdmlkZXI9XFxcIlwiKS5jb25jYXQodmlkZW9Tb3VyY2UsIFwiXFxcIiBkYXRhLXBseXItZW1iZWQtaWQ9XFxcIlwiKS5jb25jYXQoZW1iZWRJRCwgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICBhZGRDbGFzcyh2aWRlb1dyYXBwZXIsIFwiXCIuY29uY2F0KHZpZGVvU291cmNlLCBcIi12aWRlbyBndmlkZW9cIikpO1xuICAgICAgdmlkZW9XcmFwcGVyLmFwcGVuZENoaWxkKHBsYWNlaG9sZGVyKTtcbiAgICAgIHZpZGVvV3JhcHBlci5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCB2aWRlb0lEKTtcbiAgICAgIHZpZGVvV3JhcHBlci5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnLCBpbmRleCk7XG4gICAgICB2Y
24510XIgcGxheWVyQ29uZmlnID0gaGFzKF90aGlzLnNldHRpbmdzLnBseXIsICdjb25maWcnKSA/IF90aGlzLnNldHRpbmdzLnBseXIuY29uZmlnIDoge307XG4gICAgICB2YXIgcGxheWVyID0gbmV3IFBseXIoJyMnICsgdmlkZW9JRCwgcGxheWVyQ29uZmlnKTtcbiAgICAgIHBsYXllci5vbigncmVhZHknLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZXZlbnQuZGV0YWlsLnBseXI7XG4gICAgICAgIHZpZGVvUGxheWVyc1t2aWRlb0lEXSA9IGluc3RhbmNlO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgd2FpdFVudGlsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpICYmIHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLmRhdGFzZXQucmVhZHkgPT0gJ3RydWUnO1xuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5yZXNpemUoc2xpZGUpO1xuICAgICAgfSk7XG4gICAgICBwbGF5ZXIub24oJ2VudGVyZnVsbHNjcmVlbicsIGhhbmRsZU1lZGlhRnVsbFNjcmVlbik7XG4gICAgICBwbGF5ZXIub24oJ2V4aXRmdWxsc2NyZWVuJywgaGFuZGxlTWVkaWFGdWxsU2NyZWVuKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFlvdXR1YmVJRCh1cmwpIHtcbiAgICB2YXIgdmlkZW9JRCA9ICcnO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC8oPnw8KS9naSwgJycpLnNwbGl0KC8odmlcXC98dj18XFwvdlxcL3x5b3V0dVxcLmJlXFwvfFxcL2VtYmVkXFwvKS8pO
245101xuXG4gICAgaWYgKHVybFsyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2aWRlb0lEID0gdXJsWzJdLnNwbGl0KC9bXjAtOWEtel9cXC1dL2kpO1xuICAgICAgdmlkZW9JRCA9IHZpZGVvSURbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpZGVvSUQgPSB1cmw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpZGVvSUQ7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZWRpYUZ1bGxTY3JlZW4oZXZlbnQpIHtcbiAgICB2YXIgbWVkaWEgPSBjbG9zZXN0KGV2ZW50LnRhcmdldCwgJy5nc2xpZGUtbWVkaWEnKTtcblxuICAgIGlmIChldmVudC50eXBlID09ICdlbnRlcmZ1bGxzY3JlZW4nKSB7XG4gICAgICBhZGRDbGFzcyhtZWRpYSwgJ2Z1bGxzY3JlZW4nKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PSAnZXhpdGZ1bGxzY3JlZW4nKSB7XG4gICAgICByZW1vdmVDbGFzcyhtZWRpYSwgJ2Z1bGxzY3JlZW4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZUlubGluZShzbGlkZSwgZGF0YSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBzbGlkZU1lZGlhID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1tZWRpYScpO1xuICAgIHZhciBoYXNoID0gaGFzKGRhdGEsICdocmVmJykgJiYgZGF0YS5ocmVmID8gZGF0YS5ocmVmLnNwbGl0KCcjJykucG9wKCkudHJpbSgpIDogZmFsc2U7XG4gICAgdmFyIGNvbnRlbnQgPSBoYXMoZGF0YSwgJ2NvbnRlbnQnKSAmJiBkYXRhLmNvbnRlbnQgPyBkYXRhLmNvbnRlbnQgOiBmYWxzZTtcbiAgICB2YXIgaW5uZXJDb250ZW50O1xuXG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGlmIChpc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICBpbm5lckNvbnRlbnQgPSBjcmVhdGVIVE1MKFwiPGRpdiBjbGFzcz1cXFwiZ2lubGluZWQtY29udGVudFxcXCI+XCIuY29uY2F0KGNvbnRlbnQsIFwiPC9kaXY+XCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTm9kZShjb250ZW50KSkge1xuICAgICAgICBpZiAoY29udGVudC5zdHlsZS5kaXNwbGF5ID09ICdub25lJykge1xuICAgICAgICAgIGNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnZ2lubGluZWQtY29udGVudCc7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICAgICAgaW5uZXJDb250ZW50ID0gY29udGFpbmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNoKSB7XG4gICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCk7XG5cbiAgICAgIGlmICghZGl2KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsb25lZCA9IGRpdi5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBjbG9uZWQuc3R5bGUuaGVpZ2h0ID0gZGF0YS5oZWlnaHQ7XG4gICAgICBjbG9uZWQuc3R5bGUubWF4V2lkdGggPSBkYXRhLndpZHRoO1xuICAgICAgYWRkQ2xhc3MoY2xvbmVkLCAnZ2lubGluZWQtY29udGVudCcpO1xuICAgICAgaW5uZXJDb250ZW50ID0gY2xvbmVkO1xuICAgIH1cblxuICAgIGlmICghaW5uZXJDb250ZW50KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gYXBwZW5kIGlubGluZSBzbGlkZSBjb250ZW50JywgZGF0YSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2xpZGVNZWRpYS5zdHlsZS5oZWlnaHQgPSBkYXRhLmhlaWdodDtcbiAgICBzbGlkZU1lZGlhLnN0eWxlLndpZHRoID0gZGF0YS53aWR0aDtcbiAgICBzbGlkZU1lZGlhLmFwcGVuZENoaWxkKGlubmVyQ29udGVudCk7XG4gICAgdGhpcy5ldmVudHNbJ2lubGluZWNsb3NlJyArIGhhc2hdID0gYWRkRXZlbnQoJ2NsaWNrJywge1xuICAgICAgb25FbGVtZW50OiBzbGlkZU1lZGlhLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ndHJpZ2dlci1jbG9zZScpLFxuICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZUlmcmFtZShzbGlkZSwgZGF0YSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNsaWRlTWVkaWEgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgdmFyIGlmcmFtZSA9IGNyZWF0ZUlmcmFtZSh7XG4gICAgICB1cmw6IGRhdGEuaHJlZixcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgIH0pO1xuICAgIHNsaWRlTWVkaWEucGFyZW50Tm9kZS5zdHlsZS5tYXhXaWR0aCA9IGRhdGEud2lkdGg7XG4gICAgc2xpZGVNZWRpYS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCA9IGRhdGEuaGVpZ2h0O1xuICAgIHNsaWRlTWVkaWEuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU2xpZGVDb25maWdQYXJzZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2xpZGVDb25maWdQYXJzZXIoKSB7XG4gICAgICB2Y
24510XIgc2xpZGVQYXJhbWFzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNsaWRlQ29uZmlnUGFyc2VyKTtcblxuICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgICAgaHJlZjogJycsXG4gICAgICAgIHNpemVzOiAnJyxcbiAgICAgICAgc3Jjc2V0OiAnJyxcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBhbHQ6ICcnLFxuICAgICAgICBkZXNjUG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICBlZmZlY3Q6ICcnLFxuICAgICAgICB3aWR0aDogJycsXG4gICAgICAgIGhlaWdodDogJycsXG4gICAgICAgIGNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB6b29tYWJsZTogdHJ1ZSxcbiAgICAgICAgZHJhZ2dhYmxlOiB0cnVlXG4gICAgICB9O1xuXG4gICAgICBpZiAoaXNPYmplY3Qoc2xpZGVQYXJhbWFzKSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0gZXh0ZW5kKHRoaXMuZGVmYXVsdHMsIHNsaWRlUGFyYW1hcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKFNsaWRlQ29uZmlnUGFyc2VyLCBbe1xuICAgICAga2V5OiBcInNvdXJjZVR5cGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzb3VyY2VUeXBlKHVybCkge1xuICAgICAgICB2YXIgb3JpZ2luID0gdXJsO1xuICAgICAgICB1cmwgPSB1cmwudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAodXJsLm1hdGNoKC9cXC4oanBlZ3xqcGd8anBlfGdpZnxwbmd8YXBufHdlYnB8YXZpZnxzdmcpLykgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gJ2ltYWdlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwubWF0Y2goLyh5b3V0dWJlXFwuY29tfHlvdXR1YmUtbm9jb29raWVcXC5jb20pXFwvd2F0Y2hcXD92PShbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgveW91dHVcXC5iZVxcLyhbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgvKHlvdXR1YmVcXC5jb218eW91dHViZS1ub2Nvb2tpZVxcLmNvbSlcXC9lbWJlZFxcLyhbYS16QS1aMC05XFwtX10rKS8pKSB7XG4gICAgICAgICAgcmV0dXJuICd2aWRlbyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsLm1hdGNoKC92aW1lb1xcLmNvbVxcLyhbMC05XSopLykpIHtcbiAgICAgICAgICByZXR1cm4gJ3ZpZGVvJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwubWF0Y2goL1xcLihtcDR8b2dnfHdlYm18bW92KS8pICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICd2aWRlbyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsLm1hdGNoKC9cXC4obXAzfHdhdnx3bWF8YWFjfG9nZykvKSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnYXVkaW8nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcjJykgPiAtMSkge1xuICAgICAgICAgIHZhciBoYXNoID0gb3JpZ2luLnNwbGl0KCcjJykucG9wKCk7XG5cbiAgICAgICAgICBpZiAoaGFzaC50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2lubGluZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCdnb2FqYXg9dHJ1ZScpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gJ2FqYXgnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICdleHRlcm5hbCc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInBhcnNlQ29uZmlnXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VDb25maWcoZWxlbWVudCwgc2V0dGluZ3MpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICB2Y
24510XIgZGF0YSA9IGV4dGVuZCh7XG4gICAgICAgICAgZGVzY1Bvc2l0aW9uOiBzZXR0aW5ncy5kZXNjUG9zaXRpb25cbiAgICAgICAgfSwgdGhpcy5kZWZhdWx0cyk7XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpICYmICFpc05vZGUoZWxlbWVudCkpIHtcbiAgICAgICAgICBpZiAoIWhhcyhlbGVtZW50LCAndHlwZScpKSB7XG4gICAgICAgICAgICBpZiAoaGFzKGVsZW1lbnQsICdjb250ZW50JykgJiYgZWxlbWVudC5jb250ZW50KSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXMoZWxlbWVudCwgJ2hyZWYnKSkge1xuICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSB0aGlzLnNvdXJjZVR5cGUoZWxlbWVudC5ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgb2JqZWN0RGF0YSA9IGV4dGVuZChkYXRhLCBlbGVtZW50KTtcbiAgICAgICAgICB0aGlzLnNldFNpemUob2JqZWN0RGF0YSwgc2V0dGluZ3MpO1xuICAgICAgICAgIHJldHVybiBvYmplY3REYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVybCA9ICcnO1xuICAgICAgICB2YXIgY29uZmlnID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZ2xpZ2h0Ym94Jyk7XG4gICAgICAgIHZhciBub2RlVHlwZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAobm9kZVR5cGUgPT09ICdhJykge1xuICAgICAgICAgIHVybCA9IGVsZW1lbnQuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlVHlwZSA9PT0gJ2ltZycpIHtcbiAgICAgICAgICB1cmwgPSBlbGVtZW50LnNyYztcbiAgICAgICAgICBkYXRhLmFsdCA9IGVsZW1lbnQuYWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5ocmVmID0gdXJsO1xuICAgICAgICBlYWNoKGRhdGEsIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICAgIGlmIChoYXMoc2V0dGluZ3MsIGtleSkgJiYga2V5ICE9PSAnd2lkdGgnKSB7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBzZXR0aW5nc1trZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBub2RlRGF0YSA9IGVsZW1lbnQuZGF0YXNldFtrZXldO1xuXG4gICAgICAgICAgaWYgKCFpc05pbChub2RlRGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IF90aGlzLnNhbml0aXplVmFsdWUobm9kZURhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRhdGEuY29udGVudCkge1xuICAgICAgICAgIGRhdGEudHlwZSA9ICdpbmxpbmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhLnR5cGUgJiYgdXJsKSB7XG4gICAgICAgICAgZGF0YS50eXBlID0gdGhpcy5zb3VyY2VUeXBlKHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGNvbmZpZykpIHtcbiAgICAgICAgICB2Y
24510XIgY2xlYW5LZXlzID0gW107XG4gICAgICAgICAgZWFjaChkYXRhLCBmdW5jdGlvbiAodiwgaykge1xuICAgICAgICAgICAgY2xlYW5LZXlzLnB1c2goJztcXFxccz8nICsgayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2xlYW5LZXlzID0gY2xlYW5LZXlzLmpvaW4oJ1xcXFxzPzp8Jyk7XG5cbiAgICAgICAgICBpZiAoY29uZmlnLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgICAgIGVhY2goZGF0YSwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICAgICAgICAgIHZhciBzdHIgPSBjb25maWc7XG4gICAgICAgICAgICAgIHZhciBtYXRjaCA9ICdzPycgKyBrZXkgKyAncz86cz8oLio/KSgnICsgY2xlYW5LZXlzICsgJ3M/OnwkKSc7XG4gICAgICAgICAgICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAobWF0Y2gpO1xuICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChyZWdleCk7XG5cbiAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggJiYgbWF0Y2hlc1sxXSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1hdGNoZXNbMV0udHJpbSgpLnJlcGxhY2UoLztcXHMqJC8sICcnKTtcbiAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSBfdGhpcy5zYW5pdGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghZGF0YS50aXRsZSAmJiBub2RlVHlwZSA9PSAnYScpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGVsZW1lbnQudGl0bGU7XG5cbiAgICAgICAgICAgIGlmICghaXNOaWwodGl0bGUpICYmIHRpdGxlICE9PSAnJykge1xuICAgICAgICAgICAgICBkYXRhLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkYXRhLnRpdGxlICYmIG5vZGVUeXBlID09ICdpbWcnKSB7XG4gICAgICAgICAgICB2Y
24510XIgYWx0ID0gZWxlbWVudC5hbHQ7XG5cbiAgICAgICAgICAgIGlmICghaXNOaWwoYWx0KSAmJiBhbHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGRhdGEudGl0bGUgPSBhbHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuZGVzY3JpcHRpb24gJiYgZGF0YS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgIHZhciBkZXNjcmlwdGlvbjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGF0YS5kZXNjcmlwdGlvbikuaW5uZXJIVE1MO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdmFyIG5vZGVEZXNjID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZ2xpZ2h0Ym94LWRlc2MnKTtcblxuICAgICAgICAgIGlmIChub2RlRGVzYykge1xuICAgICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IG5vZGVEZXNjLmlubmVySFRNTDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFNpemUoZGF0YSwgc2V0dGluZ3MsIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNsaWRlQ29uZmlnID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNldFNpemVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTaXplKGRhdGEsIHNldHRpbmdzKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICAgICAgICB2Y
24510XIgZGVmYXVsdFdpdGggPSBkYXRhLnR5cGUgPT0gJ3ZpZGVvJyA/IHRoaXMuY2hlY2tTaXplKHNldHRpbmdzLnZpZGVvc1dpZHRoKSA6IHRoaXMuY2hlY2tTaXplKHNldHRpbmdzLndpZHRoKTtcbiAgICAgICAgdmFyIGRlZmF1bHRIZWlnaHQgPSB0aGlzLmNoZWNrU2l6ZShzZXR0aW5ncy5oZWlnaHQpO1xuICAgICAgICBkYXRhLndpZHRoID0gaGFzKGRhdGEsICd3aWR0aCcpICYmIGRhdGEud2lkdGggIT09ICcnID8gdGhpcy5jaGVja1NpemUoZGF0YS53aWR0aCkgOiBkZWZhdWx0V2l0aDtcbiAgICAgICAgZGF0YS5oZWlnaHQgPSBoYXMoZGF0YSwgJ2hlaWdodCcpICYmIGRhdGEuaGVpZ2h0ICE9PSAnJyA/IHRoaXMuY2hlY2tTaXplKGRhdGEuaGVpZ2h0KSA6IGRlZmF1bHRIZWlnaHQ7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZGF0YS50eXBlID09ICdpbWFnZScpIHtcbiAgICAgICAgICBkYXRhLl9oYXNDdXN0b21XaWR0aCA9IGVsZW1lbnQuZGF0YXNldC53aWR0aCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICBkYXRhLl9oYXNDdXN0b21IZWlnaHQgPSBlbGVtZW50LmRhdGFzZXQuaGVpZ2h0ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNoZWNrU2l6ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNoZWNrU2l6ZShzaXplKSB7XG4gICAgICAgIHJldHVybiBpc051bWJlcihzaXplKSA/IFwiXCIuY29uY2F0KHNpemUsIFwicHhcIikgOiBzaXplO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzYW5pdGl6ZVZhbHVlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCAhPT0gJ3RydWUnICYmIHZhbCAhPT0gJ2ZhbHNlJykge1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsID09PSAndHJ1ZSc7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFNsaWRlQ29uZmlnUGFyc2VyO1xuICB9KCk7XG5cbiAgdmFyIFNsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNsaWRlKGVsLCBpbnN0YW5jZSwgaW5kZXgpIHtcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTbGlkZSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudCA9IGVsO1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhTbGlkZSwgW3tcbiAgICAgIGtleTogXCJzZXRDb250ZW50XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICB2Y
24510XIgc2xpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKGhhc0NsYXNzKHNsaWRlLCAnbG9hZGVkJykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLmluc3RhbmNlLnNldHRpbmdzO1xuICAgICAgICB2YXIgc2xpZGVDb25maWcgPSB0aGlzLnNsaWRlQ29uZmlnO1xuICAgICAgICB2YXIgaXNNb2JpbGVEZXZpY2UgPSBpc01vYmlsZSgpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHNldHRpbmdzLmJlZm9yZVNsaWRlTG9hZCkpIHtcbiAgICAgICAgICBzZXR0aW5ncy5iZWZvcmVTbGlkZUxvYWQoe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogc2xpZGUsXG4gICAgICAgICAgICBwbGF5ZXI6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHlwZSA9IHNsaWRlQ29uZmlnLnR5cGU7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHNsaWRlQ29uZmlnLmRlc2NQb3NpdGlvbjtcbiAgICAgICAgdmFyIHNsaWRlTWVkaWEgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgICAgIHZhciBzbGlkZVRpdGxlID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS10aXRsZScpO1xuICAgICAgICB2Y
24510XIgc2xpZGVUZXh0ID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1kZXNjJyk7XG4gICAgICAgIHZhciBzbGlkZURlc2MgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ2Rlc2MtaW5uZXInKTtcbiAgICAgICAgdmFyIGZpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdmFyIHRpdGxlSUQgPSAnZ1NsaWRlVGl0bGVfJyArIHRoaXMuaW5kZXg7XG4gICAgICAgIHZhciB0ZXh0SUQgPSAnZ1NsaWRlRGVzY18nICsgdGhpcy5pbmRleDtcblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihzZXR0aW5ncy5hZnRlclNsaWRlTG9hZCkpIHtcbiAgICAgICAgICBmaW5hbENhbGxiYWNrID0gZnVuY3Rpb24gZmluYWxDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXR0aW5ncy5hZnRlclNsaWRlTG9hZCh7XG4gICAgICAgICAgICAgIGluZGV4OiBfdGhpcy5pbmRleCxcbiAgICAgICAgICAgICAgc2xpZGU6IHNsaWRlLFxuICAgICAgICAgICAgICBwbGF5ZXI6IF90aGlzLmluc3RhbmNlLmdldFNsaWRlUGxheWVySW5zdGFuY2UoX3RoaXMuaW5kZXgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNsaWRlQ29uZmlnLnRpdGxlID09ICcnICYmIHNsaWRlQ29uZmlnLmRlc2NyaXB0aW9uID09ICcnKSB7XG4gICAgICAgICAgaWYgKHNsaWRlRGVzYykge1xuICAgICAgICAgICAgc2xpZGVEZXNjLnBhcmVudE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzbGlkZURlc2MucGFyZW50Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzbGlkZVRpdGxlICYmIHNsaWRlQ29uZmlnLnRpdGxlICE9PSAnJykge1xuICAgICAgICAgICAgc2xpZGVUaXRsZS5pZCA9IHRpdGxlSUQ7XG4gICAgICAgICAgICBzbGlkZVRpdGxlLmlubmVySFRNTCA9IHNsaWRlQ29uZmlnLnRpdGxlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGlkZVRpdGxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2xpZGVUaXRsZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNsaWRlVGV4dCAmJiBzbGlkZUNvbmZpZy5kZXNjcmlwdGlvbiAhPT0gJycpIHtcbiAgICAgICAgICAgIHNsaWRlVGV4dC5pZCA9IHRleHRJRDtcblxuICAgICAgICAgICAgaWYgKGlzTW9iaWxlRGV2aWNlICYmIHNldHRpbmdzLm1vcmVMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNsaWRlQ29uZmlnLnNtYWxsRGVzY3JpcHRpb24gPSB0aGlzLnNsaWRlU2hvcnREZXNjKHNsaWRlQ29uZmlnLmRlc2NyaXB0aW9uLCBzZXR0aW5ncy5tb3JlTGVuZ3RoLCBzZXR0aW5ncy5tb3JlVGV4dCk7XG4gICAgICAgICAgICAgIHNsaWRlVGV4dC5pbm5lckhUTUwgPSBzbGlkZUNvbmZpZy5zbWFsbERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uRXZlbnRzKHNsaWRlVGV4dCwgc2xpZGVDb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2xpZGVUZXh0LmlubmVySFRNTCA9IHNsaWRlQ29uZmlnLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGlkZVRleHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzbGlkZVRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZENsYXNzKHNsaWRlTWVkaWEucGFyZW50Tm9kZSwgXCJkZXNjLVwiLmNvbmNhdChwb3NpdGlvbikpO1xuICAgICAgICAgIGFkZENsYXNzKHNsaWRlRGVzYy5wYXJlbnROb2RlLCBcImRlc2NyaXB0aW9uLVwiLmNvbmNhdChwb3NpdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkQ2xhc3Moc2xpZGVNZWRpYSwgXCJnc2xpZGUtXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgYWRkQ2xhc3Moc2xpZGUsICdsb2FkZWQnKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgIHNsaWRlVmlkZW8uYXBwbHkodGhpcy5pbnN0YW5jZSwgW3NsaWRlLCBzbGlkZUNvbmZpZywgdGhpcy5pbmRleCwgZmluYWxDYWxsYmFja10pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAgICAgc2xpZGVJZnJhbWUuYXBwbHkodGhpcywgW3NsaWRlLCBzbGlkZUNvbmZpZywgdGhpcy5pbmRleCwgZmluYWxDYWxsYmFja10pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnaW5saW5lJykge1xuICAgICAgICAgIHNsaWRlSW5saW5lLmFwcGx5KHRoaXMuaW5zdGFuY2UsIFtzbGlkZSwgc2xpZGVDb25maWcsIHRoaXMuaW5kZXgsIGZpbmFsQ2FsbGJhY2tdKTtcblxuICAgICAgICAgIGlmIChzbGlkZUNvbmZpZy5kcmFnZ2FibGUpIHtcbiAgICAgICAgICAgIG5ldyBEcmFnU2xpZGVzKHtcbiAgICAgICAgICAgICAgZHJhZ0VsOiBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLWlubGluZScpLFxuICAgICAgICAgICAgICB0b2xlcmFuY2VYOiBzZXR0aW5ncy5kcmFnVG9sZXJhbmNlWCxcbiAgICAgICAgICAgICAgdG9sZXJhbmNlWTogc2V0dGluZ3MuZHJhZ1RvbGVyYW5jZVksXG4gICAgICAgICAgICAgIHNsaWRlOiBzbGlkZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IHRoaXMuaW5zdGFuY2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgc2xpZGVJbWFnZShzbGlkZSwgc2xpZGVDb25maWcsIHRoaXMuaW5kZXgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpbWcgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcblxuICAgICAgICAgICAgaWYgKHNsaWRlQ29uZmlnLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICBuZXcgRHJhZ1NsaWRlcyh7XG4gICAgICAgICAgICAgICAgZHJhZ0VsOiBpbWcsXG4gICAgICAgICAgICAgICAgdG9sZXJhbmNlWDogc2V0dGluZ3MuZHJhZ1RvbGVyYW5jZVgsXG4gICAgICAgICAgICAgICAgdG9sZXJhbmNlWTogc2V0dGluZ3MuZHJhZ1RvbGVyYW5jZVksXG4gICAgICAgICAgICAgICAgc2xpZGU6IHNsaWRlLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBfdGhpcy5pbnN0YW5jZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgI
24510H1cblxuICAgICAgICAgICAgaWYgKHNsaWRlQ29uZmlnLnpvb21hYmxlICYmIGltZy5uYXR1cmFsV2lkdGggPiBpbWcub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgICAgYWRkQ2xhc3MoaW1nLCAnem9vbWFibGUnKTtcbiAgICAgICAgICAgICAgbmV3IFpvb21JbWFnZXMoaW1nLCBzbGlkZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmluc3RhbmNlLnJlc2l6ZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmluYWxDYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgZmluYWxDYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsQ2FsbGJhY2spKSB7XG4gICAgICAgICAgZmluYWxDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNsaWRlU2hvcnREZXNjXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2xpZGVTaG9ydERlc2Moc3RyaW5nKSB7XG4gICAgICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA1MDtcbiAgICAgICAgdmFyIHdvcmRCb3VuZGFyeSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IHN0cmluZztcbiAgICAgICAgdmFyIGNsZWFuZWRTdHJpbmcgPSBkaXYuaW5uZXJUZXh0O1xuICAgICAgICB2Y
24510XIgdXNlV29yZEJvdW5kYXJ5ID0gd29yZEJvdW5kYXJ5O1xuICAgICAgICBzdHJpbmcgPSBjbGVhbmVkU3RyaW5nLnRyaW0oKTtcblxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA8PSBuKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdWJTdHJpbmcgPSBzdHJpbmcuc3Vic3RyKDAsIG4gLSAxKTtcblxuICAgICAgICBpZiAoIXVzZVdvcmRCb3VuZGFyeSkge1xuICAgICAgICAgIHJldHVybiBzdWJTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBkaXYgPSBudWxsO1xuICAgICAgICByZXR1cm4gc3ViU3RyaW5nICsgJy4uLiA8YSBocmVmPVwiI1wiIGNsYXNzPVwiZGVzYy1tb3JlXCI+JyArIHdvcmRCb3VuZGFyeSArICc8L2E+JztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVzY3JpcHRpb25FdmVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXNjcmlwdGlvbkV2ZW50cyhkZXNjLCBkYXRhKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIHZhciBtb3JlTGluayA9IGRlc2MucXVlcnlTZWxlY3RvcignLmRlc2MtbW9yZScpO1xuXG4gICAgICAgIGlmICghbW9yZUxpbmspIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgb25FbGVtZW50OiBtb3JlTGluayxcbiAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhldmVudCwgdGFyZ2V0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBjbG9zZXN0KHRhcmdldCwgJy5nc2xpZGUtZGVzYycpO1xuXG4gICAgICAgICAgICBpZiAoIWRlc2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXNjLmlubmVySFRNTCA9IGRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgICBhZGRDbGFzcyhib2R5LCAnZ2Rlc2Mtb3BlbicpO1xuICAgICAgICAgICAgdmFyIHNob3J0RXZlbnQgPSBhZGRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgIG9uRWxlbWVudDogW2JvZHksIGNsb3Nlc3QoZGVzYywgJy5nc2xpZGUtZGVzY3JpcHRpb24nKV0sXG4gICAgICAgICAgICAgIHdpdGhDYWxsYmFjazogZnVuY3Rpb24gd2l0aENhbGxiYWNrKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdhJykge1xuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoYm9keSwgJ2dkZXNjLW9wZW4nKTtcbiAgICAgICAgICAgICAgICAgIGFkZENsYXNzKGJvZHksICdnZGVzYy1jbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgIGRlc2MuaW5uZXJIVE1MID0gZGF0YS5zbWFsbERlc2NyaXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczIuZGVzY3JpcHRpb25FdmVudHMoZGVzYywgZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhib2R5LCAnZ2Rlc2MtY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICB9LCA0MDApO1xuICAgICAgICAgICAgICAgICAgc2hvcnRFdmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjcmVhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMuaW5zdGFuY2Uuc2V0dGluZ3Muc2xpZGVIVE1MKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0Q29uZmlnXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29uZmlnKCkge1xuICAgICAgICBpZiAoIWlzTm9kZSh0aGlzLmVsZW1lbnQpICYmICF0aGlzLmVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2RyYWdnYWJsZScpKSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmRyYWdnYWJsZSA9IHRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MuZHJhZ2dhYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBTbGlkZUNvbmZpZ1BhcnNlcih0aGlzLmluc3RhbmNlLnNldHRpbmdzLnNsaWRlRXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy5zbGlkZUNvbmZpZyA9IHBhcnNlci5wYXJzZUNvbmZpZyh0aGlzLmVsZW1lbnQsIHRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZUNvbmZpZztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gU2xpZGU7XG4gIH0oKTtcblxuICB2YXIgX3ZlcnNpb24gPSAnMy4xLjEnO1xuXG4gIHZhciBpc01vYmlsZSQxID0gaXNNb2JpbGUoKTtcblxuICB2YXIgaXNUb3VjaCQxID0gaXNUb3VjaCgpO1xuXG4gIHZhciBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXTtcbiAgdmFyIGRlZmF1bHRzID0ge1xuICAgIHNlbGVjdG9yOiAnLmdsaWdodGJveCcsXG4gICAgZWxlbWVudHM6IG51bGwsXG4gICAgc2tpbjogJ2NsZWFuJyxcbiAgICB0aGVtZTogJ2NsZWFuJyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICBzdGFydEF0OiBudWxsLFxuICAgIGF1dG9wbGF5VmlkZW9zOiB0cnVlLFxuICAgIGF1dG9mb2N1c1ZpZGVvczogdHJ1ZSxcbiAgICBkZXNjUG9zaXRpb246ICdib3R0b20nLFxuICAgIHdpZHRoOiAnOTAwcHgnLFxuICAgIGhlaWdodDogJzUwNnB4JyxcbiAgICB2aWRlb3NXaWR0aDogJzk2MHB4JyxcbiAgICBiZWZvcmVTbGlkZUNoYW5nZTogbnVsbCxcbiAgICBhZnRlclNsaWRlQ2hhbmdlOiBudWxsLFxuICAgIGJlZm9yZVNsaWRlTG9hZDogbnVsbCxcbiAgICBhZnRlclNsaWRlTG9hZDogbnVsbCxcbiAgICBzbGlkZUluc2VydGVkOiBudWxsLFxuICAgIHNsaWRlUmVtb3ZlZDogbnVsbCxcbiAgICBzbGlkZUV4dHJhQXR0cmlidXRlczogbnVsbCxcbiAgICBvbk9wZW46IG51bGwsXG4gICAgb25DbG9zZTogbnVsbCxcbiAgICBsb29wOiBmYWxzZSxcbiAgICB6b29tYWJsZTogdHJ1ZSxcbiAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgZHJhZ0F1dG9TbmFwOiBmYWxzZSxcbiAgICBkcmFnVG9sZXJhbmNlWDogNDAsXG4gICAgZHJhZ1RvbGVyYW5jZVk6IDY1LFxuICAgIHByZWxvYWQ6IHRydWUsXG4gICAgb25lU2xpZGVQZXJPcGVuOiBmYWxzZSxcbiAgICB0b3VjaE5hdmlnYXRpb246IHRydWUsXG4gICAgdG91Y2hGb2xsb3dBeGlzOiB0cnVlLFxuICAgIGtleWJvYXJkTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgIHBsdWdpbnM6IGZhbHNlLFxuICAgIHBseXI6IHtcbiAgICAgIGNzczogJ2h0dHBzOi8vY2RuLnBseXIuaW8vMy42LjgvcGx5ci5jc3MnLFxuICAgICAganM6ICdodHRwczovL2Nkbi5wbHlyLmlvLzMuNi44L3BseXIuanMnLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgI
24510HJhdGlvOiAnMTY6OScsXG4gICAgICAgIGZ1bGxzY3JlZW46IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGlvc05hdGl2ZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB5b3V0dWJlOiB7XG4gICAgICAgICAgbm9Db29raWU6IHRydWUsXG4gICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgIHNob3dpbmZvOiAwLFxuICAgICAgICAgIGl2X2xvYWRfcG9saWN5OiAzXG4gICAgICAgIH0sXG4gICAgICAgIHZpbWVvOiB7XG4gICAgICAgICAgYnlsaW5lOiBmYWxzZSxcbiAgICAgICAgICBwb3J0cmFpdDogZmFsc2UsXG4gICAgICAgICAgdGl0bGU6IGZhbHNlLFxuICAgICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBvcGVuRWZmZWN0OiAnem9vbScsXG4gICAgY2xvc2VFZmZlY3Q6ICd6b29tJyxcbiAgICBzbGlkZUVmZmVjdDogJ3NsaWRlJyxcbiAgICBtb3JlVGV4dDogJ1NlZSBtb3JlJyxcbiAgICBtb3JlTGVuZ3RoOiA2MCxcbiAgICBjc3NFZmVjdHM6IHtcbiAgICAgIGZhZGU6IHtcbiAgICAgICAgXCJpblwiOiAnZmFkZUluJyxcbiAgICAgICAgb3V0OiAnZmFkZU91dCdcbiAgICAgIH0sXG4gICAgICB6b29tOiB7XG4gICAgICAgIFwiaW5cIjogJ3pvb21JbicsXG4gICAgICAgIG91dDogJ3pvb21PdXQnXG4gICAgICB9LFxuICAgICAgc2xpZGU6IHtcbiAgICAgICAgXCJpblwiOiAnc2xpZGVJblJpZ2h0JyxcbiAgICAgICAgb3V0OiAnc2xpZGVPdXRMZWZ0J1xuICAgICAgfSxcbiAgICAgIHNsaWRlQmFjazoge1xuICAgICAgICBcImluXCI6ICdzbGlkZUluTGVmdCcsXG4gICAgICAgIG91dDogJ3NsaWRlT3V0UmlnaHQnXG4gICAgICB9LFxuICAgICAgbm9uZToge1xuICAgICAgICBcImluXCI6ICdub25lJyxcbiAgICAgICAgb3V0OiAnbm9uZSdcbiAgICAgIH1cbiAgICB9LFxuICAgIHN2Zzoge1xuICAgICAgY2xvc2U6ICc8c3ZnIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxnPjxwYXRoIGQ9XCJNNTA1Ljk0Myw2LjA1OGMtOC4wNzctOC4wNzctMjEuMTcyLTguMDc3LTI5LjI0OSwwTDYuMDU4LDQ3Ni42OTNjLTguMDc3LDguMDc3LTguMDc3LDIxLjE3MiwwLDI5LjI0OUMxMC4wOTYsNTA5Ljk4MiwxNS4zOSw1MTIsMjAuNjgzLDUxMmM1LjI5MywwLDEwLjU4Ni0yLjAxOSwxNC42MjUtNi4wNTlMNTA1Ljk0MywzNS4zMDZDNTE0LjAxOSwyNy4yMyw1MTQuMDE5LDE0LjEzNSw1MDUuOTQzLDYuMDU4elwiLz48L2c+PC9nPjxnPjxnPjxwYXRoIGQ9XCJNNTA1Ljk0Miw0NzYuNjk0TDM1LjMwNiw2LjA1OWMtOC4wNzYtOC4wNzctMjEuMTcyLTguMDc3LTI5LjI0OCwwYy04LjA3Nyw4LjA3Ni04LjA3NywyMS4xNzEsMCwyOS4yNDhsNDcwLjYzNiw0NzAuNjM2YzQuMDM4LDQuMDM5LDkuMzMyLDYuMDU4LDE0LjYyNSw2LjA1OGM1LjI5MywwLDEwLjU4Ny0yLjAxOSwxNC42MjQtNi4wNTdDNTE0LjAxOCw0OTcuODY2LDUxNC4wMTgsNDg0Ljc3MSw1MDUuOTQyLDQ3Ni42OTR6XCIvPjwvZz48L2c+PC9zdmc+JyxcbiAgICAgIG5leHQ6ICc8c3ZnIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDQ3Ny4xNzUgNDc3LjE3NVwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+IDxnPjxwYXRoIGQ9XCJNMzYwLjczMSwyMjkuMDc1bC0yMjUuMS0yMjUuMWMtNS4zLTUuMy0xMy44LTUuMy0xOS4xLDBzLTUuMywxMy44LDAsMTkuMWwyMTUuNSwyMTUuNWwtMjE1LjUsMjE1LjVjLTUuMyw1LjMtNS4zLDEzLjgsMCwxOS4xYzIuNiwyLjYsNi4xLDQsOS41LDRjMy40LDAsNi45LTEuMyw5LjUtNGwyMjUuMS0yMjUuMUMzNjUuOTMxLDI0Mi44NzUsMzY1LjkzMSwyMzQuMjc1LDM2MC43MzEsMjI5LjA3NXpcIi8+PC9nPjwvc3ZnPicsXG4gICAgICBwcmV2OiAnPHN2ZyB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHg9XCIwcHhcIiB5PVwiMHB4XCIgdmlld0JveD1cIjAgMCA0NzcuMTc1IDQ3Ny4xNzVcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNMTQ1LjE4OCwyMzguNTc1bDIxNS41LTIxNS41YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xcy0xMy44LTUuMy0xOS4xLDBsLTIyNS4xLDIyNS4xYy01LjMsNS4zLTUuMywxMy44LDAsMTkuMWwyMjUuMSwyMjVjMi42LDIuNiw2LjEsNCw5LjUsNHM2LjktMS4zLDkuNS00YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xTDE0NS4xODgsMjM4LjU3NXpcIi8+PC9nPjwvc3ZnPidcbiAgICB9XG4gIH07XG4gIGRlZmF1bHRzLnNsaWRlSFRNTCA9IFwiPGRpdiBjbGFzcz1cXFwiZ3NsaWRlXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZ3NsaWRlLWlubmVyLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZ2lubmVyLWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZ3NsaWRlLW1lZGlhXFxcIj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJnc2xpZGUtZGVzY3JpcHRpb25cXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJnZGVzYy1pbm5lclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XFxcImdzbGlkZS10aXRsZVxcXCI+PC9oND5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImdzbGlkZS1kZXNjXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XCI7XG4gIGRlZmF1bHRzLmxpZ2h0Ym94SFRNTCA9IFwiPGRpdiBpZD1cXFwiZ2xpZ2h0Ym94LWJvZHlcXFwiIGNsYXNzPVxcXCJnbGlnaHRib3gtY29udGFpbmVyXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiIHJvbGU9XFxcImRpYWxvZ1xcXCIgYXJpYS1oaWRkZW49XFxcImZhbHNlXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZ2xvYWRlciB2aXN
24510pYmxlXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZ292ZXJsYXlcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJnY29udGFpbmVyXFxcIj5cXG4gICAgPGRpdiBpZD1cXFwiZ2xpZ2h0Ym94LXNsaWRlclxcXCIgY2xhc3M9XFxcImdzbGlkZXJcXFwiPjwvZGl2PlxcbiAgICA8YnV0dG9uIGNsYXNzPVxcXCJnY2xvc2UgZ2J0blxcXCIgYXJpYS1sYWJlbD1cXFwiQ2xvc2VcXFwiIGRhdGEtdGFib3JkZXI9XFxcIjNcXFwiPntjbG9zZVNWR308L2J1dHRvbj5cXG4gICAgPGJ1dHRvbiBjbGFzcz1cXFwiZ3ByZXYgZ2J0blxcXCIgYXJpYS1sYWJlbD1cXFwiUHJldmlvdXNcXFwiIGRhdGEtdGFib3JkZXI9XFxcIjJcXFwiPntwcmV2U1ZHfTwvYnV0dG9uPlxcbiAgICA8YnV0dG9uIGNsYXNzPVxcXCJnbmV4dCBnYnRuXFxcIiBhcmlhLWxhYmVsPVxcXCJOZXh0XFxcIiBkYXRhLXRhYm9yZGVyPVxcXCIxXFxcIj57bmV4dFNWR308L2J1dHRvbj5cXG48L2Rpdj5cXG48L2Rpdj5cIjtcblxuICB2YXIgR2xpZ2h0Ym94SW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBHbGlnaHRib3hJbml0KCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgR2xpZ2h0Ym94SW5pdCk7XG5cbiAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB0aGlzLnNldHRpbmdzID0gZXh0ZW5kKGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZWZmZWN0c0NsYXNzZXMgPSB0aGlzLmdldEFuaW1hdGlvbkNsYXNzZXMoKTtcbiAgICAgIHRoaXMudmlkZW9QbGF5ZXJzID0ge307XG4gICAgICB0aGlzLmFwaUV2ZW50cyA9IFtdO1xuICAgICAgdGhpcy5mdWxsRWxlbWVudHNMaXN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKEdsaWdodGJveEluaXQsIFt7XG4gICAgICBrZXk6IFwiaW5pdFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcigpO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIHRoaXMuYmFzZUV2ZW50cyA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogc2VsZWN0b3IsXG4gICAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgIF90aGlzLm9wZW4odGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLmdldEVsZW1lbnRzKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIm9wZW5cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgICB2Y
24510XIgZWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZVNsaWRlID0gbnVsbDtcbiAgICAgICAgdmFyIGluZGV4ID0gaXNOdW1iZXIoc3RhcnRBdCkgPyBzdGFydEF0IDogdGhpcy5zZXR0aW5ncy5zdGFydEF0O1xuXG4gICAgICAgIGlmIChpc05vZGUoZWxlbWVudCkpIHtcbiAgICAgICAgICB2YXIgZ2FsbGVyeSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWdhbGxlcnknKTtcblxuICAgICAgICAgIGlmIChnYWxsZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmZ1bGxFbGVtZW50c0xpc3QgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IHRoaXMuZ2V0R2FsbGVyeUVsZW1lbnRzKHRoaXMuZWxlbWVudHMsIGdhbGxlcnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc05pbChpbmRleCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5nZXRFbGVtZW50SW5kZXgoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOdW1iZXIoaW5kZXgpKSB7XG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZCgpO1xuXG4gICAgICAgIGFuaW1hdGVFbGVtZW50KHRoaXMub3ZlcmxheSwgdGhpcy5zZXR0aW5ncy5vcGVuRWZmZWN0ID09ICdub25lJyA/ICdub25lJyA6IHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzLmZhZGVbXCJpblwiXSk7XG5cbiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICB2Y
24510XIgc2Nyb2xsQmFyID0gd2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICAgICAgaWYgKHNjcm9sbEJhciA+IDApIHtcbiAgICAgICAgICB2YXIgc3R5bGVTaGVldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgc3R5bGVTaGVldC50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgICAgICBzdHlsZVNoZWV0LmNsYXNzTmFtZSA9ICdnY3NzLXN0eWxlcyc7XG4gICAgICAgICAgc3R5bGVTaGVldC5pbm5lclRleHQgPSBcIi5nc2Nyb2xsYmFyLWZpeGVyIHttYXJnaW4tcmlnaHQ6IFwiLmNvbmNhdChzY3JvbGxCYXIsIFwicHh9XCIpO1xuICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVTaGVldCk7XG5cbiAgICAgICAgICBhZGRDbGFzcyhib2R5LCAnZ3Njcm9sbGJhci1maXhlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkQ2xhc3MoYm9keSwgJ2dsaWdodGJveC1vcGVuJyk7XG5cbiAgICAgICAgYWRkQ2xhc3MoaHRtbCwgJ2dsaWdodGJveC1vcGVuJyk7XG5cbiAgICAgICAgaWYgKGlzTW9iaWxlJDEpIHtcbiAgICAgICAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnZ2xpZ2h0Ym94LW1vYmlsZScpO1xuXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5zbGlkZUVmZmVjdCA9ICdzbGlkZSc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTbGlkZShpbmRleCwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBhZGRDbGFzcyh0aGlzLnByZXZCdXR0b24sICdnbGlnaHRib3gtYnV0dG9uLWhpZGRlbicpO1xuXG4gICAgICAgICAgYWRkQ2xhc3ModGhpcy5uZXh0QnV0dG9uLCAnZ2xpZ2h0Ym94LWJ1dHRvbi1oaWRkZW4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLnByZXZCdXR0b24sICdnbGlnaHRib3gtYnV0dG9uLWhpZGRlbicpO1xuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uZXh0QnV0dG9uLCAnZ2xpZ2h0Ym94LWJ1dHRvbi1oaWRkZW4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlnaHRib3hPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdvcGVuJyk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5vbk9wZW4pKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk9wZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1RvdWNoJDEgJiYgdGhpcy5zZXR0aW5ncy50b3VjaE5hdmlnYXRpb24pIHtcbiAgICAgICAgICB0b3VjaE5hdmlnYXRpb24odGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5rZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgICAgICBrZXlib2FyZE5hdmlnYXRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwib3BlbkF0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbkF0KCkge1xuICAgICAgICB2Y
24510XIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDA7XG4gICAgICAgIHRoaXMub3BlbihudWxsLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNob3dTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3dTbGlkZSgpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwO1xuICAgICAgICB2YXIgZmlyc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICAgIHNob3codGhpcy5sb2FkZXIpO1xuXG4gICAgICAgIHRoaXMuaW5kZXggPSBwYXJzZUludChpbmRleCk7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvcignLmN1cnJlbnQnKTtcblxuICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgIHJlbW92ZUNsYXNzKGN1cnJlbnQsICdjdXJyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNsaWRlQW5pbWF0ZU91dCgpO1xuICAgICAgICB2YXIgc2xpZGVOb2RlID0gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW2luZGV4XTtcblxuICAgICAgICBpZiAoaGFzQ2xhc3Moc2xpZGVOb2RlLCAnbG9hZGVkJykpIHtcbiAgICAgICAgICB0aGlzLnNsaWRlQW5pbWF0ZUluKHNsaWRlTm9kZSwgZmlyc3QpO1xuXG4gICAgICAgICAgaGlkZSh0aGlzLmxvYWRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvdyh0aGlzLmxvYWRlcik7XG5cbiAgICAgICAgICB2Y
24510XIgc2xpZGUgPSB0aGlzLmVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgICB2YXIgc2xpZGVEYXRhID0ge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogc2xpZGVOb2RlLFxuICAgICAgICAgICAgc2xpZGVOb2RlOiBzbGlkZU5vZGUsXG4gICAgICAgICAgICBzbGlkZUNvbmZpZzogc2xpZGUuc2xpZGVDb25maWcsXG4gICAgICAgICAgICBzbGlkZUluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgdHJpZ2dlcjogc2xpZGUubm9kZSxcbiAgICAgICAgICAgIHBsYXllcjogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdzbGlkZV9iZWZvcmVfbG9hZCcsIHNsaWRlRGF0YSk7XG4gICAgICAgICAgc2xpZGUuaW5zdGFuY2Uuc2V0Q29udGVudChzbGlkZU5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhpZGUoX3RoaXMyLmxvYWRlcik7XG5cbiAgICAgICAgICAgIF90aGlzMi5yZXNpemUoKTtcblxuICAgICAgICAgICAgX3RoaXMyLnNsaWRlQW5pbWF0ZUluKHNsaWRlTm9kZSwgZmlyc3QpO1xuXG4gICAgICAgICAgICBfdGhpczIudHJpZ2dlcignc2xpZGVfYWZ0ZXJfbG9hZCcsIHNsaWRlRGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNsaWRlRGVzY3JpcHRpb24gPSBzbGlkZU5vZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLnNsaWRlRGVzY3JpcHRpb25Db250YWluZWQgPSB0aGlzLnNsaWRlRGVzY3JpcHRpb24gJiYgaGFzQ2xhc3ModGhpcy5zbGlkZURlc2NyaXB0aW9uLnBhcmVudE5vZGUsICdnc2xpZGUtbWVkaWEnKTtcblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5wcmVsb2FkKSB7XG4gICAgICAgICAgdGhpcy5wcmVsb2FkU2xpZGUoaW5kZXggKyAxKTtcbiAgICAgICAgICB0aGlzLnByZWxvYWRTbGlkZShpbmRleCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQ2xhc3NlcygpO1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlID0gc2xpZGVOb2RlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJwcmVsb2FkU2xpZGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVsb2FkU2xpZGUoaW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05pbCh0aGlzLmVsZW1lbnRzW2luZGV4XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgc2xpZGVOb2RlID0gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW2luZGV4XTtcblxuICAgICAgICBpZiAoaGFzQ2xhc3Moc2xpZGVOb2RlLCAnbG9hZGVkJykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2xpZGUgPSB0aGlzLmVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgdmFyIHR5cGUgPSBzbGlkZS50eXBlO1xuICAgICAgICB2YXIgc2xpZGVEYXRhID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBzbGlkZTogc2xpZGVOb2RlLFxuICAgICAgICAgIHNsaWRlTm9kZTogc2xpZGVOb2RlLFxuICAgICAgICAgIHNsaWRlQ29uZmlnOiBzbGlkZS5zbGlkZUNvbmZpZyxcbiAgICAgICAgICBzbGlkZUluZGV4OiBpbmRleCxcbiAgICAgICAgICB0cmlnZ2VyOiBzbGlkZS5ub2RlLFxuICAgICAgICAgIHBsYXllcjogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3NsaWRlX2JlZm9yZV9sb2FkJywgc2xpZGVEYXRhKTtcblxuICAgICAgICBpZiAodHlwZSA9PSAndmlkZW8nIHx8IHR5cGUgPT0gJ2V4dGVybmFsJykge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2xpZGUuaW5zdGFuY2Uuc2V0Q29udGVudChzbGlkZU5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLnRyaWdnZXIoJ3NsaWRlX2FmdGVyX2xvYWQnLCBzbGlkZURhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbGlkZS5pbnN0YW5jZS5zZXRDb250ZW50KHNsaWRlTm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMzLnRyaWdnZXIoJ3NsaWRlX2FmdGVyX2xvYWQnLCBzbGlkZURhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInByZXZTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByZXZTbGlkZSgpIHtcbiAgICAgICAgdGhpcy5nb1RvU2xpZGUodGhpcy5pbmRleCAtIDEpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJuZXh0U2xpZGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0U2xpZGUoKSB7XG4gICAgICAgIHRoaXMuZ29Ub1NsaWRlKHRoaXMuaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ29Ub1NsaWRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ29Ub1NsaWRlKCkge1xuICAgICAgICB2Y
24510XIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgICB0aGlzLnByZXZBY3RpdmVTbGlkZSA9IHRoaXMuYWN0aXZlU2xpZGU7XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmluZGV4O1xuXG4gICAgICAgIGlmICghdGhpcy5sb29wKCkgJiYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPj0gdGhpcy5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTbGlkZShpbmRleCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImluc2VydFNsaWRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0U2xpZGUoKSB7XG4gICAgICAgIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICB2YXIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IC0xO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICBpbmRleCA9IHRoaXMuZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNsaWRlID0gbmV3IFNsaWRlKGNvbmZpZywgdGhpcywgaW5kZXgpO1xuICAgICAgICB2Y
24510XIgZGF0YSA9IHNsaWRlLmdldENvbmZpZygpO1xuXG4gICAgICAgIHZhciBzbGlkZUluZm8gPSBleHRlbmQoe30sIGRhdGEpO1xuXG4gICAgICAgIHZhciBuZXdTbGlkZSA9IHNsaWRlLmNyZWF0ZSgpO1xuICAgICAgICB2YXIgdG90YWxTbGlkZXMgPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHNsaWRlSW5mby5pbmRleCA9IGluZGV4O1xuICAgICAgICBzbGlkZUluZm8ubm9kZSA9IGZhbHNlO1xuICAgICAgICBzbGlkZUluZm8uaW5zdGFuY2UgPSBzbGlkZTtcbiAgICAgICAgc2xpZGVJbmZvLnNsaWRlQ29uZmlnID0gZGF0YTtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIHNsaWRlSW5mbyk7XG4gICAgICAgIHZhciBhZGRlZFNsaWRlTm9kZSA9IG51bGw7XG4gICAgICAgIHZhciBhZGRlZFNsaWRlUGxheWVyID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5zbGlkZXNDb250YWluZXIpIHtcbiAgICAgICAgICBpZiAoaW5kZXggPiB0b3RhbFNsaWRlcykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIuYXBwZW5kQ2hpbGQobmV3U2xpZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmdTbGlkZSA9IHRoaXMuc2xpZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5nc2xpZGUnKVtpbmRleF07XG4gICAgICAgICAgICB0aGlzLnNsaWRlc0NvbnRhaW5lci5pbnNlcnRCZWZvcmUobmV3U2xpZGUsIGV4aXN0aW5nU2xpZGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnByZWxvYWQgJiYgdGhpcy5pbmRleCA9PSAwICYmIGluZGV4ID09IDAgfHwgdGhpcy5pbmRleCAtIDEgPT0gaW5kZXggfHwgdGhpcy5pbmRleCArIDEgPT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZFNsaWRlKGluZGV4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PSAwICYmIGluZGV4ID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkNsYXNzZXMoKTtcbiAgICAgICAgICBhZGRlZFNsaWRlTm9kZSA9IHRoaXMuc2xpZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5nc2xpZGUnKVtpbmRleF07XG4gICAgICAgICAgYWRkZWRTbGlkZVBsYXllciA9IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZShpbmRleCk7XG4gICAgICAgICAgc2xpZGVJbmZvLnNsaWRlTm9kZSA9IGFkZGVkU2xpZGVOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzbGlkZV9pbnNlcnRlZCcsIHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgc2xpZGU6IGFkZGVkU2xpZGVOb2RlLFxuICAgICAgICAgIHNsaWRlTm9kZTogYWRkZWRTbGlkZU5vZGUsXG4gICAgICAgICAgc2xpZGVDb25maWc6IGRhdGEsXG4gICAgICAgICAgc2xpZGVJbmRleDogaW5kZXgsXG4gICAgICAgICAgdHJpZ2dlcjogbnVsbCxcbiAgICAgICAgICBwbGF5ZXI6IGFkZGVkU2xpZGVQbGF5ZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5zbGlkZUluc2VydGVkKSkge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc2xpZGVJbnNlcnRlZCh7XG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogYWRkZWRTbGlkZU5vZGUsXG4gICAgICAgICAgICBwbGF5ZXI6IGFkZGVkU2xpZGVQbGF5ZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW1vdmVTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZVNsaWRlKCkge1xuICAgICAgICB2Y
24510XIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IC0xO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2xpZGUgPSB0aGlzLnNsaWRlc0NvbnRhaW5lciAmJiB0aGlzLnNsaWRlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZ3NsaWRlJylbaW5kZXhdO1xuXG4gICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgIGlmICh0aGlzLmdldEFjdGl2ZVNsaWRlSW5kZXgoKSA9PSBpbmRleCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnByZXZTbGlkZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0U2xpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzbGlkZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNsaWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzbGlkZV9yZW1vdmVkJywgaW5kZXgpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMuc2V0dGluZ3Muc2xpZGVSZW1vdmVkKSkge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc2xpZGVSZW1vdmVkKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzbGlkZUFuaW1hdGVJblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNsaWRlQW5pbWF0ZUluKHNsaWRlLCBmaXJzdCkge1xuICAgICAgICB2Y
24510XIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgICB2YXIgc2xpZGVNZWRpYSA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtbWVkaWEnKTtcbiAgICAgICAgdmFyIHNsaWRlRGVzYyA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdmFyIHByZXZEYXRhID0ge1xuICAgICAgICAgIGluZGV4OiB0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4LFxuICAgICAgICAgIHNsaWRlOiB0aGlzLnByZXZBY3RpdmVTbGlkZSxcbiAgICAgICAgICBzbGlkZU5vZGU6IHRoaXMucHJldkFjdGl2ZVNsaWRlLFxuICAgICAgICAgIHNsaWRlSW5kZXg6IHRoaXMucHJldkFjdGl2ZVNsaWRlLFxuICAgICAgICAgIHNsaWRlQ29uZmlnOiBpc05pbCh0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4KSA/IG51bGwgOiB0aGlzLmVsZW1lbnRzW3RoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXhdLnNsaWRlQ29uZmlnLFxuICAgICAgICAgIHRyaWdnZXI6IGlzTmlsKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXgpID8gbnVsbCA6IHRoaXMuZWxlbWVudHNbdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleF0ubm9kZSxcbiAgICAgICAgICBwbGF5ZXI6IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZSh0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4KVxuICAgICAgICB9O1xuICAgICAgICB2YXIgbmV4dERhdGEgPSB7XG4gICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgc2xpZGU6IHRoaXMuYWN0aXZlU2xpZGUsXG4gICAgICAgICAgc2xpZGVOb2RlOiB0aGlzLmFjdGl2ZVNsaWRlLFxuICAgICAgICAgIHNsaWRlQ29uZmlnOiB0aGlzLmVsZW1lbnRzW3RoaXMuaW5kZXhdLnNsaWRlQ29uZmlnLFxuICAgICAgICAgIHNsaWRlSW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgdHJpZ2dlcjogdGhpcy5lbGVtZW50c1t0aGlzLmluZGV4XS5ub2RlLFxuICAgICAgICAgIHBsYXllcjogdGhpcy5nZXRTbGlkZVBsYXllckluc3RhbmNlKHRoaXMuaW5kZXgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNsaWRlTWVkaWEub2Zmc2V0V2lkdGggPiAwICYmIHNsaWRlRGVzYykge1xuICAgICAgICAgIGhpZGUoc2xpZGVEZXNjKTtcblxuICAgICAgICAgIHNsaWRlRGVzYy5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDbGFzcyhzbGlkZSwgdGhpcy5lZmZlY3RzQ2xhc3Nlcyk7XG5cbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgYW5pbWF0ZUVsZW1lbnQoc2xpZGUsIHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzW3RoaXMuc2V0dGluZ3Mub3BlbkVmZmVjdF1bXCJpblwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzNC5zZXR0aW5ncy5hdXRvcGxheVZpZGVvcykge1xuICAgICAgICAgICAgICBfdGhpczQuc2xpZGVQbGF5ZXJQbGF5KHNsaWRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3RoaXM0LnRyaWdnZXIoJ3NsaWRlX2NoYW5nZWQnLCB7XG4gICAgICAgICAgICAgIHByZXY6IHByZXZEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50OiBuZXh0RGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKF90aGlzNC5zZXR0aW5ncy5hZnRlclNsaWRlQ2hhbmdlKSkge1xuICAgICAgICAgICAgICBfdGhpczQuc2V0dGluZ3MuYWZ0ZXJTbGlkZUNoYW5nZS5hcHBseShfdGhpczQsIFtwcmV2RGF0YSwgbmV4dERhdGFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2Y
24510XIgZWZmZWN0TmFtZSA9IHRoaXMuc2V0dGluZ3Muc2xpZGVFZmZlY3Q7XG4gICAgICAgICAgdmFyIGFuaW1JbiA9IGVmZmVjdE5hbWUgIT09ICdub25lJyA/IHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzW2VmZmVjdE5hbWVdW1wiaW5cIl0gOiBlZmZlY3ROYW1lO1xuXG4gICAgICAgICAgaWYgKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXggPiB0aGlzLmluZGV4KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5zbGlkZUVmZmVjdCA9PSAnc2xpZGUnKSB7XG4gICAgICAgICAgICAgIGFuaW1JbiA9IHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzLnNsaWRlQmFja1tcImluXCJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFuaW1hdGVFbGVtZW50KHNsaWRlLCBhbmltSW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczQuc2V0dGluZ3MuYXV0b3BsYXlWaWRlb3MpIHtcbiAgICAgICAgICAgICAgX3RoaXM0LnNsaWRlUGxheWVyUGxheShzbGlkZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF90aGlzNC50cmlnZ2VyKCdzbGlkZV9jaGFuZ2VkJywge1xuICAgICAgICAgICAgICBwcmV2OiBwcmV2RGF0YSxcbiAgICAgICAgICAgICAgY3VycmVudDogbmV4dERhdGFcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihfdGhpczQuc2V0dGluZ3MuYWZ0ZXJTbGlkZUNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgX3RoaXM0LnNldHRpbmdzLmFmdGVyU2xpZGVDaGFuZ2UuYXBwbHkoX3RoaXM0LCBbcHJldkRhdGEsIG5leHREYXRhXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczQucmVzaXplKHNsaWRlKTtcbiAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICBhZGRDbGFzcyhzbGlkZSwgJ2N1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2xpZGVBbmltYXRlT3V0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2xpZGVBbmltYXRlT3V0KCkge1xuICAgICAgICBpZiAoIXRoaXMucHJldkFjdGl2ZVNsaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByZXZTbGlkZSA9IHRoaXMucHJldkFjdGl2ZVNsaWRlO1xuXG4gICAgICAgIHJlbW92ZUNsYXNzKHByZXZTbGlkZSwgdGhpcy5lZmZlY3RzQ2xhc3Nlcyk7XG5cbiAgICAgICAgYWRkQ2xhc3MocHJldlNsaWRlLCAncHJldicpO1xuXG4gICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLnNldHRpbmdzLnNsaWRlRWZmZWN0O1xuICAgICAgICB2Y
24510XIgYW5pbU91dCA9IGFuaW1hdGlvbiAhPT0gJ25vbmUnID8gdGhpcy5zZXR0aW5ncy5jc3NFZmVjdHNbYW5pbWF0aW9uXS5vdXQgOiBhbmltYXRpb247XG4gICAgICAgIHRoaXMuc2xpZGVQbGF5ZXJQYXVzZShwcmV2U2xpZGUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3NsaWRlX2JlZm9yZV9jaGFuZ2UnLCB7XG4gICAgICAgICAgcHJldjoge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogdGhpcy5wcmV2QWN0aXZlU2xpZGUsXG4gICAgICAgICAgICBzbGlkZU5vZGU6IHRoaXMucHJldkFjdGl2ZVNsaWRlLFxuICAgICAgICAgICAgc2xpZGVJbmRleDogdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCxcbiAgICAgICAgICAgIHNsaWRlQ29uZmlnOiBpc05pbCh0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4KSA/IG51bGwgOiB0aGlzLmVsZW1lbnRzW3RoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXhdLnNsaWRlQ29uZmlnLFxuICAgICAgICAgICAgdHJpZ2dlcjogaXNOaWwodGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCkgPyBudWxsIDogdGhpcy5lbGVtZW50c1t0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4XS5ub2RlLFxuICAgICAgICAgICAgcGxheWVyOiB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2UodGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1cnJlbnQ6IHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgc2xpZGU6IHRoaXMuYWN0aXZlU2xpZGUsXG4gICAgICAgICAgICBzbGlkZU5vZGU6IHRoaXMuYWN0aXZlU2xpZGUsXG4gICAgICAgICAgICBzbGlkZUluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgc2xpZGVDb25maWc6IHRoaXMuZWxlbWVudHNbdGhpcy5pbmRleF0uc2xpZGVDb25maWcsXG4gICAgICAgICAgICB0cmlnZ2VyOiB0aGlzLmVsZW1lbnRzW3RoaXMuaW5kZXhdLm5vZGUsXG4gICAgICAgICAgICBwbGF5ZXI6IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZSh0aGlzLmluZGV4KVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5iZWZvcmVTbGlkZUNoYW5nZSkpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmJlZm9yZVNsaWRlQ2hhbmdlLmFwcGx5KHRoaXMsIFt7XG4gICAgICAgICAgICBpbmRleDogdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCxcbiAgICAgICAgICAgIHNsaWRlOiB0aGlzLnByZXZBY3RpdmVTbGlkZSxcbiAgICAgICAgICAgIHBsYXllcjogdGhpcy5nZXRTbGlkZVBsYXllckluc3RhbmNlKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXgpXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogdGhpcy5hY3RpdmVTbGlkZSxcbiAgICAgICAgICAgIHBsYXllcjogdGhpcy5nZXRTbGlkZVBsYXllckluc3RhbmNlKHRoaXMuaW5kZXgpXG4gICAgICAgICAgfV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXggPiB0aGlzLmluZGV4ICYmIHRoaXMuc2V0dGluZ3Muc2xpZGVFZmZlY3QgPT0gJ3NsaWRlJykge1xuICAgICAgICAgIGFuaW1PdXQgPSB0aGlzLnNldHRpbmdzLmNzc0VmZWN0cy5zbGlkZUJhY2sub3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgYW5pbWF0ZUVsZW1lbnQocHJldlNsaWRlLCBhbmltT3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHByZXZTbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ2lubmVyLWNvbnRhaW5lcicpO1xuICAgICAgICAgIHZhciBtZWRpYSA9IHByZXZTbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgICAgICAgdmFyIGRlc2MgPSBwcmV2U2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1kZXNjcmlwdGlvbicpO1xuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICBtZWRpYS5zdHlsZS50cmFuc2Zvcm0gPSAnJztcblxuICAgICAgICAgIHJlbW92ZUNsYXNzKG1lZGlhLCAnZ3Jlc2V0Jyk7XG5cbiAgICAgICAgICBtZWRpYS5zdHlsZS5vcGFjaXR5ID0gJyc7XG5cbiAgICAgICAgICBpZiAoZGVzYykge1xuICAgICAgICAgICAgZGVzYy5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3MocHJldlNsaWRlLCAncHJldicpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0QWxsUGxheWVyc1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFsbFBsYXllcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZGVvUGxheWVycztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNsaWRlUGxheWVySW5zdGFuY2UoaW5kZXgpIHtcbiAgICAgICAgdmFyIGlkID0gJ2d2aWRlbycgKyBpbmRleDtcbiAgICAgICAgdmFyIHZpZGVvUGxheWVycyA9IHRoaXMuZ2V0QWxsUGxheWVycygpO1xuXG4gICAgICAgIGlmIChoYXModmlkZW9QbGF5ZXJzLCBpZCkgJiYgdmlkZW9QbGF5ZXJzW2lkXSkge1xuICAgICAgICAgIHJldHVybiB2aWRlb1BsYXllcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzdG9wU2xpZGVWaWRlb1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BTbGlkZVZpZGVvKHNsaWRlKSB7XG4gICAgICAgIGlmIChpc05vZGUoc2xpZGUpKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3ZpZGVvLXdyYXBwZXInKTtcblxuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBzbGlkZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3N0b3BTbGlkZVZpZGVvIGlzIGRlcHJlY2F0ZWQsIHVzZSBzbGlkZVBsYXllclBhdXNlJyk7XG4gICAgICAgI
24510HZhciBwbGF5ZXIgPSB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2Uoc2xpZGUpO1xuXG4gICAgICAgIGlmIChwbGF5ZXIgJiYgcGxheWVyLnBsYXlpbmcpIHtcbiAgICAgICAgICBwbGF5ZXIucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzbGlkZVBsYXllclBhdXNlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2xpZGVQbGF5ZXJQYXVzZShzbGlkZSkge1xuICAgICAgICBpZiAoaXNOb2RlKHNsaWRlKSkge1xuICAgICAgICAgIHZhciBub2RlID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmd2aWRlby13cmFwcGVyJyk7XG5cbiAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgc2xpZGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbGF5ZXIgPSB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2Uoc2xpZGUpO1xuXG4gICAgICAgIGlmIChwbGF5ZXIgJiYgcGxheWVyLnBsYXlpbmcpIHtcbiAgICAgICAgICBwbGF5ZXIucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJwbGF5U2xpZGVWaWRlb1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBsYXlTbGlkZVZpZGVvKHNsaWRlKSB7XG4gICAgICAgIGlmIChpc05vZGUoc2xpZGUpKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3ZpZGVvLXdyYXBwZXInKTtcblxuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBzbGlkZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3BsYXlTbGlkZVZpZGVvIGlzIGRlcHJlY2F0ZWQsIHVzZSBzbGlkZVBsYXllclBsYXknKTtcbiAgICAgICAgdmFyIHBsYXllciA9IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZShzbGlkZSk7XG5cbiAgICAgICAgaWYgKHBsYXllciAmJiAhcGxheWVyLnBsYXlpbmcpIHtcbiAgICAgICAgICBwbGF5ZXIucGxheSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNsaWRlUGxheWVyUGxheVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNsaWRlUGxheWVyUGxheShzbGlkZSkge1xuICAgICAgICBpZiAoaXNOb2RlKHNsaWRlKSkge1xuICAgICAgICAgIHZhciBub2RlID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmd2aWRlby13cmFwcGVyJyk7XG5cbiAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgc2xpZGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbGF5ZXIgPSB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2Uoc2xpZGUpO1xuXG4gICAgICAgIGlmIChwbGF5ZXIgJiYgIXBsYXllci5wbGF5aW5nKSB7XG4gICAgICAgICAgcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmF1dG9mb2N1c1ZpZGVvcykge1xuICAgICAgICAgICAgcGxheWVyLmVsZW1lbnRzLmNvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzZXRFbGVtZW50c1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gICAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZWxlbWVudHMgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5ld0VsZW1lbnRzID0gW107XG5cbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGVhY2goZWxlbWVudHMsIGZ1bmN0aW9uIChlbCwgaSkge1xuICAgICAgICAgICAgdmFyIHNsaWRlID0gbmV3IFNsaWRlKGVsLCBfdGhpczUsIGkpO1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBzbGlkZS5nZXRDb25maWcoKTtcblxuICAgICAgICAgICAgdmFyIHNsaWRlSW5mbyA9IGV4dGVuZCh7fSwgZGF0YSk7XG5cbiAgICAgICAgICAgIHNsaWRlSW5mby5zbGlkZUNvbmZpZyA9IGRhdGE7XG4gICAgICAgICAgICBzbGlkZUluZm8uaW5zdGFuY2UgPSBzbGlkZTtcbiAgICAgICAgICAgIHNsaWRlSW5mby5pbmRleCA9IGk7XG4gICAgICAgICAgICBuZXdFbGVtZW50cy5wdXNoKHNsaWRlSW5mbyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3RWxlbWVudHM7XG5cbiAgICAgICAgaWYgKHRoaXMubGlnaHRib3hPcGVuKSB7XG4gICAgICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgICBpZiAodGhpcy5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVhY2godGhpcy5lbGVtZW50cywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2Y
24510XIgc2xpZGUgPSBjcmVhdGVIVE1MKF90aGlzNS5zZXR0aW5ncy5zbGlkZUhUTUwpO1xuXG4gICAgICAgICAgICAgIF90aGlzNS5zbGlkZXNDb250YWluZXIuYXBwZW5kQ2hpbGQoc2xpZGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd1NsaWRlKDAsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRFbGVtZW50SW5kZXhcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFbGVtZW50SW5kZXgobm9kZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBmYWxzZTtcblxuICAgICAgICBlYWNoKHRoaXMuZWxlbWVudHMsIGZ1bmN0aW9uIChlbCwgaSkge1xuICAgICAgICAgIGlmIChoYXMoZWwsICdub2RlJykgJiYgZWwubm9kZSA9PSBub2RlKSB7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0RWxlbWVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFbGVtZW50cygpIHtcbiAgICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHRoaXMuZWxlbWVudHMgPyB0aGlzLmVsZW1lbnRzIDogW107XG5cbiAgICAgICAgaWYgKCFpc05pbCh0aGlzLnNldHRpbmdzLmVsZW1lbnRzKSAmJiBpc0FycmF5KHRoaXMuc2V0dGluZ3MuZWxlbWVudHMpICYmIHRoaXMuc2V0dGluZ3MuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgZWFjaCh0aGlzLnNldHRpbmdzLmVsZW1lbnRzLCBmdW5jdGlvbiAoZWwsIGkpIHtcbiAgICAgICAgICAgIHZhciBzbGlkZSA9IG5ldyBTbGlkZShlbCwgX3RoaXM2LCBpKTtcbiAgICAgICAgICAgIHZhciBlbERhdGEgPSBzbGlkZS5nZXRDb25maWcoKTtcblxuICAgICAgICAgICAgdmFyIHNsaWRlSW5mbyA9IGV4dGVuZCh7fSwgZWxEYXRhKTtcblxuICAgICAgICAgICAgc2xpZGVJbmZvLm5vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHNsaWRlSW5mby5pbmRleCA9IGk7XG4gICAgICAgICAgICBzbGlkZUluZm8uaW5zdGFuY2UgPSBzbGlkZTtcbiAgICAgICAgICAgIHNsaWRlSW5mby5zbGlkZUNvbmZpZyA9IGVsRGF0YTtcbiAgICAgICAgICAgIGxpc3QucHVzaChzbGlkZUluZm8pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVzID0gZmFsc2U7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoKTtcblxuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5nZXRTZWxlY3RvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZXMpIHtcbiAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhY2gobm9kZXMsIGZ1bmN0aW9uIChlbCwgaSkge1xuICAgICAgICAgIHZhciBzbGlkZSA9IG5ldyBTbGlkZShlbCwgX3RoaXM2LCBpKTtcbiAgICAgICAgICB2Y
24510XIgZWxEYXRhID0gc2xpZGUuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgICB2YXIgc2xpZGVJbmZvID0gZXh0ZW5kKHt9LCBlbERhdGEpO1xuXG4gICAgICAgICAgc2xpZGVJbmZvLm5vZGUgPSBlbDtcbiAgICAgICAgICBzbGlkZUluZm8uaW5kZXggPSBpO1xuICAgICAgICAgIHNsaWRlSW5mby5pbnN0YW5jZSA9IHNsaWRlO1xuICAgICAgICAgIHNsaWRlSW5mby5zbGlkZUNvbmZpZyA9IGVsRGF0YTtcbiAgICAgICAgICBzbGlkZUluZm8uZ2FsbGVyeSA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1nYWxsZXJ5Jyk7XG4gICAgICAgICAgbGlzdC5wdXNoKHNsaWRlSW5mbyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRHYWxsZXJ5RWxlbWVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRHYWxsZXJ5RWxlbWVudHMobGlzdCwgZ2FsbGVyeSkge1xuICAgICAgICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLmdhbGxlcnkgPT0gZ2FsbGVyeTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImdldFNlbGVjdG9yXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2VsZWN0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmVsZW1lbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IgJiYgdGhpcy5zZXR0aW5ncy5zZWxlY3Rvci5zdWJzdHJpbmcoMCwgNSkgPT0gJ2RhdGEtJykge1xuICAgICAgICAgIHJldHVybiBcIipbXCIuY29uY2F0KHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IsIFwiXVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlbGVjdG9yO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRBY3RpdmVTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFjdGl2ZVNsaWRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW3RoaXMuaW5kZXhdO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRBY3RpdmVTbGlkZUluZGV4XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWN0aXZlU2xpZGVJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImdldEFuaW1hdGlvbkNsYXNzZXNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbmltYXRpb25DbGFzc2VzKCkge1xuICAgICAgICB2Y
24510XIgZWZmZWN0cyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnNldHRpbmdzLmNzc0VmZWN0cykge1xuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNzc0VmZWN0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5zZXR0aW5ncy5jc3NFZmVjdHNba2V5XTtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaChcImdcIi5jb25jYXQoZWZmZWN0W1wiaW5cIl0pKTtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaChcImdcIi5jb25jYXQoZWZmZWN0Lm91dCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZmZlY3RzLmpvaW4oJyAnKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYnVpbGRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZCgpIHtcbiAgICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuYnVpbHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkb2N1bWVudC5ib2R5LmNoaWxkTm9kZXM7XG4gICAgICAgIHZhciBib2R5Q2hpbGRFbG1zID0gW107XG5cbiAgICAgICAgZWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgaWYgKGVsLnBhcmVudE5vZGUgPT0gZG9jdW1lbnQuYm9keSAmJiBlbC5ub2RlTmFtZS5jaGFyQXQoMCkgIT09ICcjJyAmJiBlbC5oYXNBdHRyaWJ1dGUgJiYgIWVsLmhhc0F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSkge1xuICAgICAgICAgICAgYm9keUNoaWxkRWxtcy5wdXNoKGVsKTtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG5leHRTVkcgPSBoYXModGhpcy5zZXR0aW5ncy5zdmcsICduZXh0JykgPyB0aGlzLnNldHRpbmdzLnN2Zy5uZXh0IDogJyc7XG4gICAgICAgIHZhciBwcmV2U1ZHID0gaGFzKHRoaXMuc2V0dGluZ3Muc3ZnLCAncHJldicpID8gdGhpcy5zZXR0aW5ncy5zdmcucHJldiA6ICcnO1xuICAgICAgICB2Y
24510XIgY2xvc2VTVkcgPSBoYXModGhpcy5zZXR0aW5ncy5zdmcsICdjbG9zZScpID8gdGhpcy5zZXR0aW5ncy5zdmcuY2xvc2UgOiAnJztcbiAgICAgICAgdmFyIGxpZ2h0Ym94SFRNTCA9IHRoaXMuc2V0dGluZ3MubGlnaHRib3hIVE1MO1xuICAgICAgICBsaWdodGJveEhUTUwgPSBsaWdodGJveEhUTUwucmVwbGFjZSgve25leHRTVkd9L2csIG5leHRTVkcpO1xuICAgICAgICBsaWdodGJveEhUTUwgPSBsaWdodGJveEhUTUwucmVwbGFjZSgve3ByZXZTVkd9L2csIHByZXZTVkcpO1xuICAgICAgICBsaWdodGJveEhUTUwgPSBsaWdodGJveEhUTUwucmVwbGFjZSgve2Nsb3NlU1ZHfS9nLCBjbG9zZVNWRyk7XG4gICAgICAgIGxpZ2h0Ym94SFRNTCA9IGNyZWF0ZUhUTUwobGlnaHRib3hIVE1MKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaWdodGJveEhUTUwpO1xuICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xpZ2h0Ym94LWJvZHknKTtcbiAgICAgICAgdGhpcy5tb2RhbCA9IG1vZGFsO1xuICAgICAgICB2YXIgY2xvc2VCdXR0b24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuZ2Nsb3NlJyk7XG4gICAgICAgIHRoaXMucHJldkJ1dHRvbiA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5ncHJldicpO1xuICAgICAgICB0aGlzLm5leHRCdXR0b24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuZ25leHQnKTtcbiAgICAgICAgdGhpcy5vdmVybGF5ID0gbW9kYWwucXVlcnlTZWxlY3RvcignLmdvdmVybGF5Jyk7XG4gICAgICAgIHRoaXMubG9hZGVyID0gbW9kYWwucXVlcnlTZWxlY3RvcignLmdsb2FkZXInKTtcbiAgICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xpZ2h0Ym94LXNsaWRlcicpO1xuICAgICAgICB0aGlzLmJvZHlIaWRkZW5DaGlsZEVsbXMgPSBib2R5Q2hpbGRFbG1zO1xuICAgICAgICB0aGlzLmV2ZW50cyA9IHt9O1xuXG4gICAgICAgIGFkZENsYXNzKHRoaXMubW9kYWwsICdnbGlnaHRib3gtJyArIHRoaXMuc2V0dGluZ3Muc2tpbik7XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY2xvc2VCdXR0b24gJiYgY2xvc2VCdXR0b24pIHtcbiAgICAgICAgICB0aGlzLmV2ZW50c1snY2xvc2UnXSA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogY2xvc2VCdXR0b24sXG4gICAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgIF90aGlzNy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb3NlQnV0dG9uICYmICF0aGlzLnNldHRpbmdzLmNsb3NlQnV0dG9uKSB7XG4gICAgICAgICAgY2xvc2VCdXR0b24ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9zZUJ1dHRvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZXh0QnV0dG9uKSB7XG4gICAgICAgICAgdGhpcy5ldmVudHNbJ25leHQnXSA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogdGhpcy5uZXh0QnV0dG9uLFxuICAgICAgICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpczcubmV4dFNsaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcmV2QnV0dG9uKSB7XG4gICAgICAgICAgdGhpcy5ldmVudHNbJ3ByZXYnXSA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogdGhpcy5wcmV2QnV0dG9uLFxuICAgICAgICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpczcucHJldlNsaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5ldmVudHNbJ291dENsb3NlJ10gPSBhZGRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgICBvbkVsZW1lbnQ6IG1vZGFsLFxuICAgICAgICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIGlmICghX3RoaXM3LnByZXZlbnRPdXRzaWRlQ2xpY2sgJiYgIWhhc0NsYXNzKGRvY3VtZW50LmJvZHksICdnbGlnaHRib3gtbW9iaWxlJykgJiYgIWNsb3Nlc3QoZS50YXJnZXQsICcuZ2lubmVyLWNvbnRhaW5lcicpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjbG9zZXN0KGUudGFyZ2V0LCAnLmdidG4nKSAmJiAhaGFzQ2xhc3MoZS50YXJnZXQsICdnbmV4dCcpICYmICFoYXNDbGFzcyhlLnRhcmdldCwgJ2dwcmV2JykpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzNy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZWFjaCh0aGlzLmVsZW1lbnRzLCBmdW5jdGlvbiAoc2xpZGUsIGkpIHtcbiAgICAgICAgICBfdGhpczcuc2xpZGVzQ29udGFpbmVyLmFwcGVuZENoaWxkKHNsaWRlLmluc3RhbmNlLmNyZWF0ZSgpKTtcblxuICAgICAgICAgIHNsaWRlLnNsaWRlTm9kZSA9IF90aGlzNy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW2ldO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNUb3VjaCQxKSB7XG4gICAgICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2dsaWdodGJveC10b3VjaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHNbJ3Jlc2l6ZSddID0gYWRkRXZlbnQoJ3Jlc2l6ZScsIHtcbiAgICAgICAgICBvbkVsZW1lbnQ6IHdpbmRvdyxcbiAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIF90aGlzNy5yZXNpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgI
24510H0pO1xuICAgICAgICB0aGlzLmJ1aWx0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVzaXplXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc2xpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgICAgIHNsaWRlID0gIXNsaWRlID8gdGhpcy5hY3RpdmVTbGlkZSA6IHNsaWRlO1xuXG4gICAgICAgIGlmICghc2xpZGUgfHwgaGFzQ2xhc3Moc2xpZGUsICd6b29tZWQnKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3aW5TaXplID0gd2luZG93U2l6ZSgpO1xuXG4gICAgICAgIHZhciB2aWRlbyA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5ndmlkZW8td3JhcHBlcicpO1xuICAgICAgICB2YXIgaW1hZ2UgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLWltYWdlJyk7XG4gICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IHRoaXMuc2xpZGVEZXNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHdpbldpZHRoID0gd2luU2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIHdpbkhlaWdodCA9IHdpblNpemUuaGVpZ2h0O1xuXG4gICAgICAgIGlmICh3aW5XaWR0aCA8PSA3NjgpIHtcbiAgICAgICAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnZ2xpZ2h0Ym94LW1vYmlsZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksICdnbGlnaHRib3gtbW9iaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZpZGVvICYmICFpbWFnZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkZXNjcmlwdGlvblJlc2l6ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbiAmJiAoaGFzQ2xhc3MoZGVzY3JpcHRpb24sICdkZXNjcmlwdGlvbi1ib3R0b20nKSB8fCBoYXNDbGFzcyhkZXNjcmlwdGlvbiwgJ2Rlc2NyaXB0aW9uLXRvcCcpKSAmJiAhaGFzQ2xhc3MoZGVzY3JpcHRpb24sICdnYWJzb2x1dGUnKSkge1xuICAgICAgICAgIGRlc2NyaXB0aW9uUmVzaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCA8PSA3NjgpIHtcbiAgICAgICAgICAgIHZhciBpbWdOb2RlID0gaW1hZ2UucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdGlvblJlc2l6ZSkge1xuICAgICAgICAgICAgdmFyIGRlc2NIZWlnaHQgPSBkZXNjcmlwdGlvbi5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICAgIHZhciBfaW1nTm9kZSA9IGltYWdlLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuXG4gICAgICAgICAgICBfaW1nTm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgXCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gXCIuY29uY2F0KGRlc2NIZWlnaHQsIFwicHgpXCIpKTtcblxuICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQoX2ltZ05vZGUub2Zmc2V0V2lkdGgsIFwicHg7XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlkZW8pIHtcbiAgICAgICAgICB2Y
24510XIgcmF0aW8gPSBoYXModGhpcy5zZXR0aW5ncy5wbHlyLmNvbmZpZywgJ3JhdGlvJykgPyB0aGlzLnNldHRpbmdzLnBseXIuY29uZmlnLnJhdGlvIDogJyc7XG5cbiAgICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyV2lkdGggPSB2aWRlby5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIHZhciBjb250YWluZXJIZWlnaHQgPSB2aWRlby5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICB2YXIgZGl2aXNvciA9IGNvbnRhaW5lcldpZHRoIC8gY29udGFpbmVySGVpZ2h0O1xuICAgICAgICAgICAgcmF0aW8gPSBcIlwiLmNvbmNhdChjb250YWluZXJXaWR0aCAvIGRpdmlzb3IsIFwiOlwiKS5jb25jYXQoY29udGFpbmVySGVpZ2h0IC8gZGl2aXNvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHZpZGVvUmF0aW8gPSByYXRpby5zcGxpdCgnOicpO1xuICAgICAgICAgIHZhciB2aWRlb1dpZHRoID0gdGhpcy5zZXR0aW5ncy52aWRlb3NXaWR0aDtcbiAgICAgICAgICB2YXIgbWF4V2lkdGggPSB0aGlzLnNldHRpbmdzLnZpZGVvc1dpZHRoO1xuXG4gICAgICAgICAgaWYgKGlzTnVtYmVyKHZpZGVvV2lkdGgpIHx8IHZpZGVvV2lkdGguaW5kZXhPZigncHgnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG1heFdpZHRoID0gcGFyc2VJbnQodmlkZW9XaWR0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1dpZHRoLmluZGV4T2YoJ3Z3JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1heFdpZHRoID0gd2luV2lkdGggKiBwYXJzZUludCh2aWRlb1dpZHRoKSAvIDEwMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmlkZW9XaWR0aC5pbmRleE9mKCd2aCcpICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYXhXaWR0aCA9IHdpbkhlaWdodCAqIHBhcnNlSW50KHZpZGVvV2lkdGgpIC8gMTAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2aWRlb1dpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWF4V2lkdGggPSB3aW5XaWR0aCAqIHBhcnNlSW50KHZpZGVvV2lkdGgpIC8gMTAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWF4V2lkdGggPSBwYXJzZUludCh2aWRlby5jbGllbnRXaWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG1heEhlaWdodCA9IG1heFdpZHRoIC8gKHBhcnNlSW50KHZpZGVvUmF0aW9bMF0pIC8gcGFyc2VJbnQodmlkZW9SYXRpb1sxXSkpO1xuICAgICAgICAgIG1heEhlaWdodCA9IE1hdGguZmxvb3IobWF4SGVpZ2h0KTtcblxuICAgICAgICAgIGlmIChkZXNjcmlwdGlvblJlc2l6ZSkge1xuICAgICAgICAgICAgd2luSGVpZ2h0ID0gd2luSGVpZ2h0IC0gZGVzY3JpcHRpb24ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXhXaWR0aCA+IHdpbldpZHRoIHx8IG1heEhlaWdodCA+IHdpbkhlaWdodCB8fCB3aW5IZWlnaHQgPCBtYXhIZWlnaHQgJiYgd2luV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICAgICAgdmFyIHZ3aWR0aCA9IHZpZGVvLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdmFyIHZoZWlnaHQgPSB2aWRlby5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICAgIHZhciBfcmF0aW8gPSB3aW5IZWlnaHQgLyB2aGVpZ2h0O1xuXG4gICAgICAgICAgICB2Y
24510XIgdnNpemUgPSB7XG4gICAgICAgICAgICAgIHdpZHRoOiB2d2lkdGggKiBfcmF0aW8sXG4gICAgICAgICAgICAgIGhlaWdodDogdmhlaWdodCAqIF9yYXRpb1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZpZGVvLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQodnNpemUud2lkdGgsIFwicHhcIikpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25SZXNpemUpIHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQodnNpemUud2lkdGgsIFwicHg7XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlkZW8ucGFyZW50Tm9kZS5zdHlsZS5tYXhXaWR0aCA9IFwiXCIuY29uY2F0KHZpZGVvV2lkdGgpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25SZXNpemUpIHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQodmlkZW9XaWR0aCwgXCI7XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVsb2FkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsb2FkKCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwidXBkYXRlTmF2aWdhdGlvbkNsYXNzZXNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVOYXZpZ2F0aW9uQ2xhc3NlcygpIHtcbiAgICAgICAgdmFyIGxvb3AgPSB0aGlzLmxvb3AoKTtcblxuICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5leHRCdXR0b24sICdkaXNhYmxlZCcpO1xuXG4gICAgICAgIHJlbW92ZUNsYXNzKHRoaXMucHJldkJ1dHRvbiwgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPT0gMCAmJiB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDEgPT0gMCkge1xuICAgICAgICAgIGFkZENsYXNzKHRoaXMucHJldkJ1dHRvbiwgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgICBhZGRDbGFzcyh0aGlzLm5leHRCdXR0b24sICdkaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPT09IDAgJiYgIWxvb3ApIHtcbiAgICAgICAgICBhZGRDbGFzcyh0aGlzLnByZXZCdXR0b24sICdkaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPT09IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSAmJiAhbG9vcCkge1xuICAgICAgICAgIGFkZENsYXNzKHRoaXMubmV4dEJ1dHRvbiwgJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwibG9vcFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgICAgIHZhciBsb29wID0gaGFzKHRoaXMuc2V0dGluZ3MsICdsb29wQXRFbmQnKSA/IHRoaXMuc2V0dGluZ3MubG9vcEF0RW5kIDogbnVsbDtcbiAgICAgICAgbG9vcCA9IGhhcyh0aGlzLnNldHRpbmdzLCAnbG9vcCcpID8gdGhpcy5zZXR0aW5ncy5sb29wIDogbG9vcDtcbiAgICAgICAgcmV0dXJuIGxvb3A7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNsb3NlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICAgIGlmICghdGhpcy5saWdodGJveE9wZW4pIHtcbiAgICAgICAgICBpZiAodGhpcy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2tleV0uZGVzdHJveSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jbG9zaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zbGlkZVBsYXllclBhdXNlKHRoaXMuYWN0aXZlU2xpZGUpO1xuXG4gICAgICAgIGlmICh0aGlzLmZ1bGxFbGVtZW50c0xpc3QpIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnRzID0gdGhpcy5mdWxsRWxlbWVudHNMaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm9keUhpZGRlbkNoaWxkRWxtcy5sZW5ndGgpIHtcbiAgICAgICAgICBlYWNoKHRoaXMuYm9keUhpZGRlbkNoaWxkRWxtcywgZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRDbGFzcyh0aGlzLm1vZGFsLCAnZ2xpZ2h0Ym94LWNsb3NpbmcnKTtcblxuICAgICAgICBhbmltYXRlRWxlbWVudCh0aGlzLm92ZXJsYXksIHRoaXMuc2V0dGluZ3Mub3BlbkVmZmVjdCA9PSAnbm9uZScgPyAnbm9uZScgOiB0aGlzLnNldHRpbmdzLmNzc0VmZWN0cy5mYWRlLm91dCk7XG5cbiAgICAgICAgYW5pbWF0ZUVsZW1lbnQodGhpcy5hY3RpdmVTbGlkZSwgdGhpcy5zZXR0aW5ncy5jc3NFZmVjdHNbdGhpcy5zZXR0aW5ncy5jbG9zZUVmZmVjdF0ub3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXM4LmFjdGl2ZVNsaWRlID0gbnVsbDtcbiAgICAgICAgICBfdGhpczgucHJldkFjdGl2ZVNsaWRlSW5kZXggPSBudWxsO1xuICAgICAgICAgIF90aGlzOC5wcmV2QWN0aXZlU2xpZGUgPSBudWxsO1xuICAgICAgICAgIF90aGlzOC5idWlsdCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKF90aGlzOC5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gX3RoaXM4LmV2ZW50cykge1xuICAgICAgICAgICAgICBpZiAoX3RoaXM4LmV2ZW50cy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgIF90aGlzOC5ldmVudHNbX2tleV0uZGVzdHJveSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF90aGlzOC5ldmVudHMgPSBudWxsO1xuICAgICAgICAgI
24510H1cblxuICAgICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcblxuICAgICAgICAgIHJlbW92ZUNsYXNzKGh0bWwsICdnbGlnaHRib3gtb3BlbicpO1xuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3MoYm9keSwgJ2dsaWdodGJveC1vcGVuIHRvdWNoaW5nIGdkZXNjLW9wZW4gZ2xpZ2h0Ym94LXRvdWNoIGdsaWdodGJveC1tb2JpbGUgZ3Njcm9sbGJhci1maXhlcicpO1xuXG4gICAgICAgICAgX3RoaXM4Lm1vZGFsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoX3RoaXM4Lm1vZGFsKTtcblxuICAgICAgICAgIF90aGlzOC50cmlnZ2VyKCdjbG9zZScpO1xuXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oX3RoaXM4LnNldHRpbmdzLm9uQ2xvc2UpKSB7XG4gICAgICAgICAgICBfdGhpczguc2V0dGluZ3Mub25DbG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZ2Nzcy1zdHlsZXMnKTtcblxuICAgICAgICAgIGlmIChzdHlsZXMpIHtcbiAgICAgICAgICAgIHN0eWxlcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXM4LmxpZ2h0Ym94T3BlbiA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzOC5jbG9zaW5nID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxFdmVudHMoKTtcblxuICAgICAgICBpZiAodGhpcy5iYXNlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5iYXNlRXZlbnRzLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2dCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9uY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuXG4gICAgICAgIGlmICghZXZ0IHx8ICFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V2ZW50IG5hbWUgYW5kIGNhbGxiYWNrIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcGlFdmVudHMucHVzaCh7XG4gICAgICAgICAgZXZ0OiBldnQsXG4gICAgICAgICAgb25jZTogb25jZSxcbiAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIm9uY2VcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbmNlKGV2dCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vbihldnQsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwidHJpZ2dlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRyaWdnZXIoZXZlbnROYW1lKSB7XG4gICAgICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgICAgIHZhciBkYXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgICAgICB2Y
24510XIgb25jZVRyaWdnZXJlZCA9IFtdO1xuXG4gICAgICAgIGVhY2godGhpcy5hcGlFdmVudHMsIGZ1bmN0aW9uIChldmVudCwgaSkge1xuICAgICAgICAgIHZhciBldnQgPSBldmVudC5ldnQsXG4gICAgICAgICAgICAgIG9uY2UgPSBldmVudC5vbmNlLFxuICAgICAgICAgICAgICBjYWxsYmFjayA9IGV2ZW50LmNhbGxiYWNrO1xuXG4gICAgICAgICAgaWYgKGV2dCA9PSBldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob25jZSkge1xuICAgICAgICAgICAgICBvbmNlVHJpZ2dlcmVkLnB1c2goaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob25jZVRyaWdnZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgICBlYWNoKG9uY2VUcmlnZ2VyZWQsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM5LmFwaUV2ZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY2xlYXJBbGxFdmVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhckFsbEV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5hcGlFdmVudHMuc3BsaWNlKDAsIHRoaXMuYXBpRXZlbnRzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInZlcnNpb25cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2ZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gX3ZlcnNpb247XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIEdsaWdodGJveEluaXQ7XG4gIH0oKTtcblxuICBmdW5jdGlvbiBnbGlnaHRib3ggKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgR2xpZ2h0Ym94SW5pdChvcHRpb25zKTtcbiAgICBpbnN0YW5jZS5pbml0KCk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcmV0dXJuIGdsaWdodGJveDtcblxufSkpKTtcbiIsIihmdW5jdGlvbiAoKSB7XG5cbkwuQ29udHJvbC5GdWxsU2NyZWVuID0gTC5Db250cm9sLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwb3NpdGlvbjogJ3RvcGxlZnQnLFxuICAgIHRpdGxlOiAnRnVsbCBTY3JlZW4nLFxuICAgIHRpdGxlQ2FuY2VsOiAnRXhpdCBGdWxsIFNjcmVlbicsXG4gICAgZm9yY2VTZXBhcmF0ZUJ1dHRvbjogZmFsc2UsXG4gICAgZm9yY2VQc2V1ZG9GdWxsc2NyZWVuOiBmYWxzZSxcbiAgICBmdWxsc2NyZWVuRWxlbWVudDogZmFsc2VcbiAgfSxcbiAgXG4gIG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtem9vbS1mdWxsc2NyZWVuJywgY29udGFpbmVyLCBjb250ZW50ID0gJyc7XG4gICAgXG4gICAgaWYgKG1hcC56b29tQ29udHJvbCAmJiAhdGhpcy5vcHRpb25zLmZvcmNlU2VwYXJhdGVCdXR0b24pIHtcbiAgICAgIGNvbnRhaW5lciA9IG1hcC56b29tQ29udHJvbC5fY29udGFpbmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIgPSBMLkRvbVV0aWwuY3JlYXRlKCdkaXYnLCAnbGVhZmxldC1iYXInKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50KSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5vcHRpb25zLmNvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnIGZ1bGxzY3JlZW4taWNvbic7XG4gICAgfVxuXG4gICAgdGhpcy5fY3JlYXRlQnV0dG9uKHRoaXMub3B0aW9ucy50aXRsZSwgY2xhc3NOYW1lLCBjb250ZW50LCBjb250YWluZXIsIHRoaXMudG9nZ2xlRnVsbFNjcmVlbiwgdGhpcyk7XG4gICAgdGhpcy5fbWFwLmZ1bGxzY3JlZW5Db250cm9sID0gdGhpcztcblxuICAgIHRoaXMuX21hcC5vbignZW50ZXJGdWxsc2NyZWVuIGV4aXRGdWxsc2NyZWVuJywgdGhpcy5fdG9nZ2xlVGl0bGUsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfSxcbiAgXG4gIG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgTC5Eb21FdmVudFxuICAgICAgLm9mZih0aGlzLmxpbmssICdjbGljaycsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9mZih0aGlzLmxpbmssICdjbGljaycsIEwuRG9tRXZlbnQucHJldmVudERlZmF1bHQpXG4gICAgICAub2ZmKHRoaXMubGluaywgJ2NsaWNrJywgdGhpcy50b2dnbGVGdWxsU2NyZWVuLCB0aGlzKTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub2ZmKHRoaXMuX2NvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCBMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbilcbiAgICAgIC5vZmYodGhpcy5fY29udGFpbmVyLCBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUsIEwuRG9tRXZlbnQucHJldmVudERlZmF1bHQpXG4gICAgICAub2ZmKHRoaXMuX2NvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCB0aGlzKTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub2ZmKGRvY3VtZW50LCBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9mZihkb2N1bWVudCwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCBMLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KVxuICAgICAgLm9mZihkb2N1bWVudCwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCB0aGlzKTtcbiAgfSxcbiAgXG4gIF9jcmVhdGVCdXR0b246IGZ1bmN0aW9uICh0aXRsZSwgY2xhc3NOYW1lLCBjb250ZW50LCBjb250YWluZXIsIGZuLCBjb250ZXh0KSB7XG4gICAgdGhpcy5saW5rID0gTC5Eb21VdGlsLmNyZWF0ZSgnYScsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcbiAgICB0aGlzLmxpbmsuaHJlZiA9ICcjJztcbiAgICB0aGlzLmxpbmsudGl0bGUgPSB0aXRsZTtcbiAgICB0aGlzLmxpbmsuaW5uZXJIVE1MID0gY29udGVudDtcblxuICAgI
24510HRoaXMubGluay5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7XG4gICAgdGhpcy5saW5rLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcblxuICAgIEwuRG9tRXZlbnRcbiAgICAgIC5vbih0aGlzLmxpbmssICdjbGljaycsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9uKHRoaXMubGluaywgJ2NsaWNrJywgTC5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdClcbiAgICAgIC5vbih0aGlzLmxpbmssICdjbGljaycsIGZuLCBjb250ZXh0KTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub24oY29udGFpbmVyLCBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9uKGNvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCBMLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KVxuICAgICAgLm9uKGNvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCBjb250ZXh0KTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub24oZG9jdW1lbnQsIGZ1bGxTY3JlZW5BcGkuZnVsbFNjcmVlbkV2ZW50TmFtZSwgTC5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pXG4gICAgICAub24oZG9jdW1lbnQsIGZ1bGxTY3JlZW5BcGkuZnVsbFNjcmVlbkV2ZW50TmFtZSwgTC5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdClcbiAgICAgIC5vbihkb2N1bWVudCwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0aGlzLmxpbms7XG4gIH0sXG4gIFxuICB0b2dnbGVGdWxsU2NyZWVuOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcbiAgICBtYXAuX2V4aXRGaXJlZCA9IGZhbHNlO1xuICAgIGlmIChtYXAuX2lzRnVsbHNjcmVlbikge1xuICAgICAgaWYgKGZ1bGxTY3JlZW5BcGkuc3VwcG9ydHNGdWxsU2NyZWVuICYmICF0aGlzLm9wdGlvbnMuZm9yY2VQc2V1ZG9GdWxsc2NyZWVuKSB7XG4gICAgICAgIGZ1bGxTY3JlZW5BcGkuY2FuY2VsRnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTC5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA/IHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA6IG1hcC5fY29udGFpbmVyLCAnbGVhZmxldC1wc2V1ZG8tZnVsbHNjcmVlbicpO1xuICAgICAgfVxuICAgICAgbWFwLmZpcmUoJ2V4aXRGdWxsc2NyZWVuJyk7XG4gICAgICBtYXAuX2V4aXRGaXJlZCA9IHRydWU7XG4gICAgICBtYXAuX2lzRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChmdWxsU2NyZWVuQXBpLnN1cHBvcnRzRnVsbFNjcmVlbiAmJiAhdGhpcy5vcHRpb25zLmZvcmNlUHNldWRvRnVsbHNjcmVlbikge1xuICAgICAgICBmdWxsU2NyZWVuQXBpLnJlcXVlc3RGdWxsU2NyZWVuKHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA/IHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA6IG1hcC5fY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEwuRG9tVXRpbC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZnVsbHNjcmVlbkVsZW1lbnQgPyB0aGlzLm9wdGlvbnMuZnVsbHNjcmVlbkVsZW1lbnQgOiBtYXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtcHNldWRvLWZ1bGxzY3JlZW4nKTtcbiAgICAgIH1cbiAgICAgIG1hcC5maXJlKCdlbnRlckZ1bGxzY3JlZW4nKTtcbiAgICAgIG1hcC5faXNGdWxsc2NyZWVuID0gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIFxuICBfdG9nZ2xlVGl0bGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxpbmsudGl0bGUgPSB0aGlzLl9tYXAuX2lzRnVsbHNjcmVlbiA/IHRoaXMub3B0aW9ucy50aXRsZSA6IHRoaXMub3B0aW9ucy50aXRsZUNhbmNlbDtcbiAgfSxcbiAgXG4gIF9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcbiAgICBtYXAuaW52YWxpZGF0ZVNpemUoKTtcbiAgICBpZiAoIWZ1bGxTY3JlZW5BcGkuaXNGdWxsU2NyZWVuKCkgJiYgIW1hcC5fZXhpdEZpcmVkKSB7XG4gICAgICBtYXAuZmlyZSgnZXhpdEZ1bGxzY3JlZW4nKTtcbiAgICAgIG1hcC5fZXhpdEZpcmVkID0gdHJ1ZTtcbiAgICAgIG1hcC5faXNGdWxsc2NyZWVuID0gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcblxuTC5NYXAuaW5jbHVkZSh7XG4gIHRvZ2dsZUZ1bGxzY3JlZW46IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bGxzY3JlZW5Db250cm9sLnRvZ2dsZUZ1bGxTY3JlZW4oKTtcbiAgfVxufSk7XG5cbkwuTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuQ29udHJvbCkge1xuICAgIHRoaXMuYWRkQ29udHJvbChMLmNvbnRyb2wuZnVsbHNjcmVlbih0aGlzLm9wdGlvbnMuZnVsbHNjcmVlbkNvbnRyb2xPcHRpb25zKSk7XG4gIH1cbn0pO1xuXG5MLmNvbnRyb2wuZnVsbHNjcmVlbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5Db250cm9sLkZ1bGxTY3JlZW4ob3B0aW9ucyk7XG59O1xuXG4vKiBcbk5hdGl2ZSBGdWxsU2NyZWVuIEphdmFTY3JpcHQgQVBJXG4tLS0tLS0tLS0tLS0tXG5Bc3N1bWVzIE1vemlsbGEgbmFtaW5nIGNvbnZlbnRpb25zIGluc3RlYWQgb2YgVzNDIGZvciBub3dcblxuc291cmNlIDogaHR0cDovL2pvaG5keWVyLm5hbWUvbmF0aXZlLWZ1bGxzY3JlZW4tamF2YXNjcmlwdC1hcGktcGx1cy1qcXVlcnktcGx1Z2luL1xuXG4qL1xuXG4gIHZhciBcbiAgICBmdWxsU2NyZWVuQXBpID0geyBcbiAgICAgIHN1cHBvcnRzRnVsbFNjcmVlbjogZmFsc2UsXG4gICAgICBpc0Z1bGxTY3JlZW46IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9LCBcbiAgICAgIHJlcXVlc3RGdWxsU2NyZWVuOiBmdW5jdGlvbiAoKSB7fSwgXG4gICAgICBjYW5jZWxGdWxsU2NyZWVuOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIGZ1bGxTY3JlZW5FdmVudE5hbWU6ICcnLFxuICAgICAgcHJlZml4OiAnJ1xuICAgIH0sXG4gICAgYnJvd3NlclByZWZpeGVzID0gJ3dlYmtpdCBtb3ogbyBtcyBraHRtbCcuc3BsaXQoJyAnKTtcbiAgXG4gIC8vIGNoZWNrIGZvciBuYXRpdmUgc3VwcG9ydFxuICBpZiAodHlwZW9mIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuICE9PSAndW5kZWZpbmVkJykge1xuICAgIGZ1bGxTY3JlZW5BcGkuc3VwcG9ydHNGdWxsU2NyZWVuID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjaGVjayBmb3IgZnVsbHNjcmVlbiBzdXBwb3J0IGJ5IHZlbmRvciBwcmVmaXhcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBicm93c2VyUHJlZml4ZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgICAgZnVsbFNjcmVlbkFwaS5wcmVmaXggPSBicm93c2VyUHJlZml4ZXNbaV07XG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50W2Z1bGxTY3JlZW5BcGkucHJlZml4ICsgJ0NhbmNlbEZ1bGxTY3JlZW4nXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudFsnbXNFeGl0RnVsbHNjcmVlbiddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZnVsbFNjcmVlbkFwaS5wcmVmaXggPSAnbXMnO1xuICAgICAgZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gdXBkYXRlIG1ldGhvZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bFxuICBpZiAoZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4pIHtcbiAgICBpZiAoZnVsbFNjcmVlbkFwaS5wcmVmaXggPT09ICdtcycpIHtcbiAgICAgIGZ1bGxTY3JlZW5BcGkuZnVsbFNjcmVlbkV2ZW50TmFtZSA9ICdNU0Z1bGxzY3JlZW5DaGFuZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUgPSBmdWxsU2NyZWVuQXBpLnByZWZpeCArICdmdWxsc2NyZWVuY2hhbmdlJztcbiAgICB9XG4gICAgZnVsbFNjcmVlbkFwaS5pc0Z1bGxTY3JlZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlZml4KSB7XG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmZ1bGxzY3JlZW47XG4gICAgICAgIGNhc2UgJ3dlYmtpdCc6XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LndlYmtpdElzRnVsbFNjcmVlbjtcbiAgICAgICAgY2FzZSAnbXMnOlxuICAgICAgICAgI
24510HJldHVybiBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkb2N1bWVudFt0aGlzLnByZWZpeCArICdGdWxsU2NyZWVuJ107XG4gICAgICB9XG4gICAgfTtcbiAgICBmdWxsU2NyZWVuQXBpLnJlcXVlc3RGdWxsU2NyZWVuID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlZml4KSB7XG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgICAgcmV0dXJuIGVsLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICByZXR1cm4gZWwubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBlbFt0aGlzLnByZWZpeCArICdSZXF1ZXN0RnVsbFNjcmVlbiddKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmdWxsU2NyZWVuQXBpLmNhbmNlbEZ1bGxTY3JlZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlZml4KSB7XG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICByZXR1cm4gZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkb2N1bWVudFt0aGlzLnByZWZpeCArICdDYW5jZWxGdWxsU2NyZWVuJ10oKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8galF1ZXJ5IHBsdWdpblxuICBpZiAodHlwZW9mIGpRdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBqUXVlcnkuZm4ucmVxdWVzdEZ1bGxTY3JlZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0galF1ZXJ5KHRoaXMpO1xuICAgICAgICBpZiAoZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4pIHtcbiAgICAgICAgICBmdWxsU2NyZWVuQXBpLnJlcXVlc3RGdWxsU2NyZWVuKGVsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIGV4cG9ydCBhcGlcbiAgd2luZG93LmZ1bGxTY3JlZW5BcGkgPSBmdWxsU2NyZWVuQXBpO1xufSkoKTsiLCIvKiBAcHJlc2VydmVcbiAqIExlYWZsZXQgMS43LjEsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb21cbiAqIChjKSAyMDEwLTIwMTkgVmxhZGltaXIgQWdhZm9ua2luLCAoYykgMjAxMC0yMDExIENsb3VkTWFkZVxuICovXG4hZnVuY3Rpb24odCxpKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9pKGV4cG9ydHMpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZXhwb3J0c1wiXSxpKTppKHQuTD17fSl9KHRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGksZSxuPTEsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspZm9yKGkgaW4gZT1hcmd1bWVudHNbbl0pdFtpXT1lW2ldO3JldHVybiB0fXZhciBzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQpe3JldHVybiBpLnByb3RvdHlwZT10LG5ldyBpfTtmdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIHAodCxpKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7aWYodC5iaW5kKXJldHVybiB0LmJpbmQuYXBwbHkodCxlLmNhbGwoYXJndW1lbnRzLDEpKTt2YXIgbj1lLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGksbi5sZW5ndGg/bi5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpOmFyZ3VtZW50cyl9fXZhciBlPTA7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5fbGVhZmxldF9pZD10Ll9sZWFmbGV0X2lkfHwrK2UsdC5fbGVhZmxldF9pZH1mdW5jdGlvbiBuKHQsaSxlKXt2YXIgbixvLHM9ZnVuY3Rpb24oKXtuPSExLG8mJihyLmFwcGx5KGUsbyksbz0hMSl9LHI9ZnVuY3Rpb24oKXtuP289YXJndW1lbnRzOih0LmFwcGx5KGUsYXJndW1lbnRzKSxzZXRUaW1lb3V0KHMsaSksbj0hMCl9O3JldHVybiByfWZ1bmN0aW9uIG8odCxpLGUpe3ZhciBuPWlbMV0sbz1pWzBdLHM9bi1vO3JldHVybiB0PT09biYmZT90OigodC1vKSVzK3MpJXMrb31mdW5jdGlvbiBhKCl7cmV0dXJuITF9ZnVuY3Rpb24gcih0LGkpe3ZhciBlPU1hdGgucG93KDEwLHZvaWQgMD09PWk/NjppKTtyZXR1cm4gTWF0aC5yb3VuZCh0KmUpL2V9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC50cmltP3QudHJpbSgpOnQucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX1mdW5jdGlvbiBsKHQpe3JldHVybiB1KHQpLnNwbGl0KC9cXHMrLyl9ZnVuY3Rpb24gYyh0LGkpe2Zvcih2YXIgZSBpbiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxcIm9wdGlvbnNcIil8fCh0Lm9wdGlvbnM9dC5vcHRpb25zP3ModC5vcHRpb25zKTp7fSksaSl0Lm9wdGlvbnNbZV09aVtlXTtyZXR1cm4gdC5vcHRpb25zfWZ1bmN0aW9uIF8odCxpLGUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KW4ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZT9vLnRvVXBwZXJDYXNlKCk6bykrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oaSYmLTEhPT1pLmluZGV4T2YoXCI/XCIpP1wiJlwiOlwiP1wiKStuLmpvaW4oXCImXCIpfXZhciBkPS9cXHsgKihbXFx3Xy1dKykgKlxcfS9nO2Z1bmN0aW9uIGYodCxuKXtyZXR1cm4gdC5yZXBsYWNlKGQsZnVuY3Rpb24odCxpKXt2YXIgZT1uW2ldO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlIFwiK3QpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUobikpLGV9KX12YXIgZz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9O2Z1bmN0aW9uIHYodCxpKXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdPT09aSlyZXR1cm4gZTtyZXR1cm4tMX12YXIgeT1cImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUQvQUN3QUFBQUFBUUFCQUFBQ0FEcz1cIjtmdW5jdGlvbiB4KHQpe3JldHVybiB3aW5kb3dbXCJ3ZWJraXRcIit0XXx8d2luZG93W1wibW96XCIrdF18fHdpbmRvd1tcIm1zXCIrdF19dmFyIHc9MDtmdW5jdGlvbiBQKHQpe3ZhciBpPStuZXcgRGF0ZSxlPU1hdGgubWF4KDAsMTYtKGktdykpO3JldHVybiB3PWkrZSx3aW5kb3cuc2V0VGltZW91dCh0LGUpfXZhciBiPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHgoXCJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIil8fFAsVD13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fHgoXCJDYW5jZWxBbmltYXRpb25GcmFtZVwiKXx8eChcIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZVwiKXx8ZnVuY3Rpb24odCl7d2luZG93LmNsZWFyVGltZW91dCh0KX07ZnVuY3Rpb24gTSh0LGksZSl7aWYoIWV8fGIhPT1QKXJldHVybi
24510BiLmNhbGwod2luZG93LHAodCxpKSk7dC5jYWxsKGkpfWZ1bmN0aW9uIHoodCl7dCYmVC5jYWxsKHdpbmRvdyx0KX12YXIgQz17ZXh0ZW5kOmgsY3JlYXRlOnMsYmluZDpwLGxhc3RJZDplLHN0YW1wOm0sdGhyb3R0bGU6bix3cmFwTnVtOm8sZmFsc2VGbjphLGZvcm1hdE51bTpyLHRyaW06dSxzcGxpdFdvcmRzOmwsc2V0T3B0aW9uczpjLGdldFBhcmFtU3RyaW5nOl8sdGVtcGxhdGU6Zixpc0FycmF5OmcsaW5kZXhPZjp2LGVtcHR5SW1hZ2VVcmw6eSxyZXF1ZXN0Rm46YixjYW5jZWxGbjpULHJlcXVlc3RBbmltRnJhbWU6TSxjYW5jZWxBbmltRnJhbWU6en07ZnVuY3Rpb24gUygpe31TLmV4dGVuZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dGhpcy5pbml0aWFsaXplJiZ0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuY2FsbEluaXRIb29rcygpfXZhciBlPWkuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG49cyhlKTtmb3IodmFyIG8gaW4obi5jb25zdHJ1Y3Rvcj1pKS5wcm90b3R5cGU9bix0aGlzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLG8pJiZcInByb3RvdHlwZVwiIT09byYmXCJfX3N1cGVyX19cIiE9PW8mJihpW29dPXRoaXNbb10pO3JldHVybiB0LnN0YXRpY3MmJihoKGksdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoZnVuY3Rpb24odCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIEx8fCFMfHwhTC5NaXhpbilyZXR1cm47dD1nKHQpP3Q6W3RdO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV09PT1MLk1peGluLkV2ZW50cyYmY29uc29sZS53YXJuKFwiRGVwcmVjYXRlZCBpbmNsdWRlIG9mIEwuTWl4aW4uRXZlbnRzOiB0aGlzIHByb3BlcnR5IHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMsIHBsZWFzZSBpbmhlcml0IGZyb20gTC5FdmVudGVkIGluc3RlYWQuXCIsKG5ldyBFcnJvcikuc3RhY2spfSh0LmluY2x1ZGVzKSxoLmFwcGx5KG51bGwsW25dLmNvbmNhdCh0LmluY2x1ZGVzKSksZGVsZXRlIHQuaW5jbHVkZXMpLG4ub3B0aW9ucyYmKHQub3B0aW9ucz1oKHMobi5vcHRpb25zKSx0Lm9wdGlvbnMpKSxoKG4sdCksbi5faW5pdEhvb2tzPVtdLG4uY2FsbEluaXRIb29rcz1mdW5jdGlvbigpe2lmKCF0aGlzLl9pbml0SG9va3NDYWxsZWQpe2UuY2FsbEluaXRIb29rcyYmZS5jYWxsSW5pdEhvb2tzLmNhbGwodGhpcyksdGhpcy5faW5pdEhvb2tzQ2FsbGVkPSEwO2Zvcih2YXIgdD0wLGk9bi5faW5pdEhvb2tzLmxlbmd0aDt0PGk7dCsrKW4uX2luaXRIb29rc1t0XS5jYWxsKHRoaXMpfX0saX0sUy5pbmNsdWRlPWZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMucHJvdG90eXBlLHQpLHRoaXN9LFMubWVyZ2VPcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMucHJvdG90eXBlLm9wdGlvbnMsdCksdGhpc30sUy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXt0aGlzW3RdLmFwcGx5KHRoaXMsaSl9O3JldHVybiB0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzPXRoaXMucHJvdG90eXBlLl9pbml0SG9va3N8fFtdLHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChlKSx0aGlzfTt2YXIgWj17b246ZnVuY3Rpb24odCxpLGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbiBpbiB0KXRoaXMuX29uKG4sdFtuXSxpKTtlbHNlIGZvcih2YXIgbz0wLHM9KHQ9bCh0KSkubGVuZ3RoO288cztvKyspdGhpcy5fb24odFtvXSxpLGUpO3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24odCxpLGUpe2lmKHQpaWYoXCJvYmplY3RcIj09dHlwZW9mIHQpZm9yKHZhciBuIGluIHQpdGhpcy5fb2ZmKG4sdFtuXSxpKTtlbHNlIGZvcih2YXIgbz0wLHM9KHQ9bCh0KSkubGVuZ3RoO288cztvKyspdGhpcy5fb2ZmKHRbb10saSxlKTtlbHNlIGRlbGV0ZSB0aGlzLl9ldmVudHM7cmV0dXJuIHRoaXN9LF9vbjpmdW5jdGlvbih0LGksZSl7dGhpcy5fZXZlbnRzPXRoaXMuX2V2ZW50c3x8e307dmFyIG49dGhpcy5fZXZlbnRzW3RdO258fChuPVtdLHRoaXMuX2V2ZW50c1t0XT1uKSxlPT09dGhpcyYmKGU9dm9pZCAwKTtmb3IodmFyIG89e2ZuOmksY3R4OmV9LHM9bixyPTAsYT1zLmxlbmd0aDtyPGE7cisrKWlmKHNbcl0uZm49PT1pJiZzW3JdLmN0eD09PWUpcmV0dXJuO3MucHVzaChvKX0sX29mZjpmdW5jdGlvbih0LGksZSl7dmFyIG4sbyxzO2lmKHRoaXMuX2V2ZW50cyYmKG49dGhpcy5fZXZlbnRzW3RdKSlpZihpKXtpZihlPT09dGhpcyYmKGU9dm9pZCAwKSxuKWZvcihvPTAscz1uLmxlbmd0aDtvPHM7bysrKXt2YXIgcj1uW29dO2lmKHIuY3R4PT09ZSYmci5mbj09PWkpcmV0dXJuIHIuZm49YSx0aGlzLl9maXJpbmdDb3VudCYmKHRoaXMuX2V2ZW50c1t0XT1uPW4uc2xpY2UoKSksdm9pZCBuLnNwbGljZShvLDEpfX1lbHNle2ZvcihvPTAscz1uLmxlbmd0aDtvPHM7bysrKW5bb10uZm49YTtkZWxldGUgdGhpcy5fZXZlbnRzW3RdfX0sZmlyZTpmdW5jdGlvbih0LGksZSl7aWYoIXRoaXMubGlzdGVucyh0LGUpKXJldHVybiB0aGlzO3ZhciBuPWgoe30saSx7dHlwZTp0LHRhcmdldDp0aGlzLHNvdXJjZVRhcmdldDppJiZpLnNvdXJjZVRhcmdldHx8dGhpc30pO2lmKHRoaXMuX2V2ZW50cyl7dmFyIG89dGhpcy5fZXZlbnRzW3RdO2lmKG8pe3RoaXMuX2ZpcmluZ0NvdW50PXRoaXMuX2ZpcmluZ0NvdW50KzF8fDE7Zm9yKHZhciBzPTAscj1vLmxlbmd0aDtzPHI7cysrKXt2YXIgYT1vW3NdO2EuZm4uY2FsbChhLmN0eHx8dGhpcyxuKX10aGlzLl9maXJpbmdDb3VudC0tfX1yZXR1cm4gZSYmdGhpcy5fcHJvcGFnYXRlRXZlbnQobiksdGhpc30sbGlzdGVuczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3RdO2lmKGUmJmUubGVuZ3RoKXJldHVybiEwO2lmKGkpZm9yKHZhciBuIGluIHRoaXMuX2V2ZW50UGFyZW50cylpZih0aGlzLl9ldmVudFBhcmVudHNbbl0ubGlzdGVucyh0LGkpKXJldHVybiEwO3JldHVybiExfSxvbmNlOmZ1bmN0aW9uKHQsaSxlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7Zm9yKHZhciBuIGluIHQpdGhpcy5vbmNlKG4
24510sdFtuXSxpKTtyZXR1cm4gdGhpc312YXIgbz1wKGZ1bmN0aW9uKCl7dGhpcy5vZmYodCxpLGUpLm9mZih0LG8sZSl9LHRoaXMpO3JldHVybiB0aGlzLm9uKHQsaSxlKS5vbih0LG8sZSl9LGFkZEV2ZW50UGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmVudFBhcmVudHM9dGhpcy5fZXZlbnRQYXJlbnRzfHx7fSx0aGlzLl9ldmVudFBhcmVudHNbbSh0KV09dCx0aGlzfSxyZW1vdmVFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzJiZkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW20odCldLHRoaXN9LF9wcm9wYWdhdGVFdmVudDpmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKXRoaXMuX2V2ZW50UGFyZW50c1tpXS5maXJlKHQudHlwZSxoKHtsYXllcjp0LnRhcmdldCxwcm9wYWdhdGVkRnJvbTp0LnRhcmdldH0sdCksITApfX07Wi5hZGRFdmVudExpc3RlbmVyPVoub24sWi5yZW1vdmVFdmVudExpc3RlbmVyPVouY2xlYXJBbGxFdmVudExpc3RlbmVycz1aLm9mZixaLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyPVoub25jZSxaLmZpcmVFdmVudD1aLmZpcmUsWi5oYXNFdmVudExpc3RlbmVycz1aLmxpc3RlbnM7dmFyIEU9Uy5leHRlbmQoWik7ZnVuY3Rpb24gayh0LGksZSl7dGhpcy54PWU/TWF0aC5yb3VuZCh0KTp0LHRoaXMueT1lP01hdGgucm91bmQoaSk6aX12YXIgQj1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXtyZXR1cm4gMDx0P01hdGguZmxvb3IodCk6TWF0aC5jZWlsKHQpfTtmdW5jdGlvbiBBKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGs/dDpnKHQpP25ldyBrKHRbMF0sdFsxXSk6bnVsbD09dD90Olwib2JqZWN0XCI9PXR5cGVvZiB0JiZcInhcImluIHQmJlwieVwiaW4gdD9uZXcgayh0LngsdC55KTpuZXcgayh0LGksZSl9ZnVuY3Rpb24gSSh0LGkpe2lmKHQpZm9yKHZhciBlPWk/W3QsaV06dCxuPTAsbz1lLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGVbbl0pfWZ1bmN0aW9uIE8odCxpKXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIEk/dDpuZXcgSSh0LGkpfWZ1bmN0aW9uIFIodCxpKXtpZih0KWZvcih2YXIgZT1pP1t0LGldOnQsbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0aGlzLmV4dGVuZChlW25dKX1mdW5jdGlvbiBOKHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBSP3Q6bmV3IFIodCxpKX1mdW5jdGlvbiBEKHQsaSxlKXtpZihpc05hTih0KXx8aXNOYU4oaSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBMYXRMbmcgb2JqZWN0OiAoXCIrdCtcIiwgXCIraStcIilcIik7dGhpcy5sYXQ9K3QsdGhpcy5sbmc9K2ksdm9pZCAwIT09ZSYmKHRoaXMuYWx0PStlKX1mdW5jdGlvbiBqKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEQ/dDpnKHQpJiZcIm9iamVjdFwiIT10eXBlb2YgdFswXT8zPT09dC5sZW5ndGg/bmV3IEQodFswXSx0WzFdLHRbMl0pOjI9PT10Lmxlbmd0aD9uZXcgRCh0WzBdLHRbMV0pOm51bGw6bnVsbD09dD90Olwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImxhdFwiaW4gdD9uZXcgRCh0LmxhdCxcImxuZ1wiaW4gdD90LmxuZzp0Lmxvbix0LmFsdCk6dm9pZCAwPT09aT9udWxsOm5ldyBEKHQsaSxlKX1rLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGsodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoQSh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KEEodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxzY2FsZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgayh0aGlzLngqdC54LHRoaXMueSp0LnkpfSx1bnNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHRoaXMueC90LngsdGhpcy55L3QueSl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfSxmbG9vcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX2Zsb29yKCl9LF9mbG9vcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc30sY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX2NlaWwoKX0sX2NlaWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzfSx0cnVuYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3RydW5jKCl9LF90cnVuYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9Qih0aGlzLngpLHRoaXMueT1CKHRoaXMueSksdGhpc30sZGlzdGFuY2VUbzpmdW5jdGlvbih0KXt2YXIgaT0odD1BKHQpKS54LXRoaXMueCxlPXQueS10aGlzLnk7cmV0dXJuIE1hdGguc3FydChpKmkrZSplKX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybih0PUEodCkpLng9PT10aGlzLngmJnQueT09PXRoaXMueX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9QSh0KSxNYXRoLmFicyh0LngpPD1NYXRoLmFicyh0aGlzLngpJiZNYXRoLmFicyh0LnkpPD1NYXRoLmFicyh0aGlzLnkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVyblwiUG9pbnQoXCIrcih0aGlzLngpK1wiLCBcIityKHRoaXMueSkrXCIpXCJ9fSxJLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3JldHVybiB0PUEodCksdGhpcy5taW58fHRoaXMubWF4Pyh0aGlzLm1pbi54PU1hdGgubWluKHQueCx0aGlzLm1pbi54KSx0aGlzLm1heC54PU1hdGgubWF4KHQueCx0aGlzLm1heC54KSx0aGlzLm1pbi55PU1hdGgubWluKHQueSx0aGlzLm1pbi55KSx0aGlzLm1heC55PU1hdGgubWF4KHQueSx0aGlzLm1heC55KSk6KHRoaXMubWluPXQuY2xvbmUoKSx0aGlzLm1heD10LmNsb25lKCkpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGsoKHRoaXMubWluLngrdGhpcy5tYXgueCkvMiwodGhpcy5taW4ueSt0aGlzLm1heC55KS8yLHQpfS
24510xnZXRCb3R0b21MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrKHRoaXMubWluLngsdGhpcy5tYXgueSl9LGdldFRvcFJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrKHRoaXMubWF4LngsdGhpcy5taW4ueSl9LGdldFRvcExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW59LGdldEJvdHRvbVJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4fSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LnN1YnRyYWN0KHRoaXMubWluKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7dmFyIGksZTtyZXR1cm4odD0oXCJudW1iZXJcIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBrP0E6TykodCkpaW5zdGFuY2VvZiBJPyhpPXQubWluLGU9dC5tYXgpOmk9ZT10LGkueD49dGhpcy5taW4ueCYmZS54PD10aGlzLm1heC54JiZpLnk+PXRoaXMubWluLnkmJmUueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PU8odCk7dmFyIGk9dGhpcy5taW4sZT10aGlzLm1heCxuPXQubWluLG89dC5tYXgscz1vLng+PWkueCYmbi54PD1lLngscj1vLnk+PWkueSYmbi55PD1lLnk7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Tyh0KTt2YXIgaT10aGlzLm1pbixlPXRoaXMubWF4LG49dC5taW4sbz10Lm1heCxzPW8ueD5pLngmJm4ueDxlLngscj1vLnk+aS55JiZuLnk8ZS55O3JldHVybiBzJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxSLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIEQpZT1pPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBSKSlyZXR1cm4gdD90aGlzLmV4dGVuZChqKHQpfHxOKHQpKTp0aGlzO2lmKGk9dC5fc291dGhXZXN0LGU9dC5fbm9ydGhFYXN0LCFpfHwhZSlyZXR1cm4gdGhpc31yZXR1cm4gbnx8bz8obi5sYXQ9TWF0aC5taW4oaS5sYXQsbi5sYXQpLG4ubG5nPU1hdGgubWluKGkubG5nLG4ubG5nKSxvLmxhdD1NYXRoLm1heChlLmxhdCxvLmxhdCksby5sbmc9TWF0aC5tYXgoZS5sbmcsby5sbmcpKToodGhpcy5fc291dGhXZXN0PW5ldyBEKGkubGF0LGkubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IEQoZS5sYXQsZS5sbmcpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fc291dGhXZXN0LGU9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoaS5sYXQtZS5sYXQpKnQsbz1NYXRoLmFicyhpLmxuZy1lLmxuZykqdDtyZXR1cm4gbmV3IFIobmV3IEQoaS5sYXQtbixpLmxuZy1vKSxuZXcgRChlLmxhdCtuLGUubG5nK28pKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEKCh0aGlzLl9zb3V0aFdlc3QubGF0K3RoaXMuX25vcnRoRWFzdC5sYXQpLzIsKHRoaXMuX3NvdXRoV2VzdC5sbmcrdGhpcy5fbm9ydGhFYXN0LmxuZykvMil9LGdldFNvdXRoV2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3R9LGdldE5vcnRoRWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub3J0aEVhc3R9LGdldE5vcnRoV2VzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgRCh0aGlzLmdldE5vcnRoKCksdGhpcy5nZXRXZXN0KCkpfSxnZXRTb3V0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEQodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9KFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgRHx8XCJsYXRcImluIHQ/ajpOKSh0KTt2YXIgaSxlLG49dGhpcy5fc291dGhXZXN0LG89dGhpcy5fbm9ydGhFYXN0O3JldHVybiB0IGluc3RhbmNlb2YgUj8oaT10LmdldFNvdXRoV2VzdCgpLGU9dC5nZXROb3J0aEVhc3QoKSk6aT1lPXQsaS5sYXQ+PW4ubGF0JiZlLmxhdDw9by5sYXQmJmkubG5nPj1uLmxuZyYmZS5sbmc8PW8ubG5nfSxpbnRlcnNlY3RzOmZ1bmN0aW9uKHQpe3Q9Tih0KTt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLG89dC5nZXROb3J0aEVhc3QoKSxzPW8ubGF0Pj1pLmxhdCYmbi5sYXQ8PWUubGF0LHI9by5sbmc+PWkubG5nJiZuLmxuZzw9ZS5sbmc7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Tih0KTt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLG89dC5nZXROb3J0aEVhc3QoKSxzPW8ubGF0PmkubGF0JiZuLmxhdDxlLmxhdCxyPW8ubG5nPmkubG5nJiZuLmxuZzxlLmxuZztyZXR1cm4gcyYmcn0sdG9CQm94U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0U291dGgoKSx0aGlzLmdldEVhc3QoKSx0aGlzLmdldE5vcnRoKCldLmpvaW4oXCIsXCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PU4odCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksaSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19O3ZhciBXLEg9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoaSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShlLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5zY2FsZShpKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXtpZih0aGlzLmluZmluaXRlKXJldHVybi
24510BudWxsO3ZhciBpPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsZT10aGlzLnNjYWxlKHQpO3JldHVybiBuZXcgSSh0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1pbixlKSx0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1heCxlKSl9LGluZmluaXRlOiEoRC5wcm90b3R5cGU9e2VxdWFsczpmdW5jdGlvbih0LGkpe3JldHVybiEhdCYmKHQ9aih0KSxNYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTw9KHZvaWQgMD09PWk/MWUtOTppKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVyblwiTGF0TG5nKFwiK3IodGhpcy5sYXQsdCkrXCIsIFwiK3IodGhpcy5sbmcsdCkrXCIpXCJ9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7cmV0dXJuIEYuZGlzdGFuY2UodGhpcyxqKHQpKX0sd3JhcDpmdW5jdGlvbigpe3JldHVybiBGLndyYXBMYXRMbmcodGhpcyl9LHRvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPTE4MCp0LzQwMDc1MDE3LGU9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIE4oW3RoaXMubGF0LWksdGhpcy5sbmctZV0sW3RoaXMubGF0K2ksdGhpcy5sbmcrZV0pfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgRCh0aGlzLmxhdCx0aGlzLmxuZyx0aGlzLmFsdCl9fSksd3JhcExhdExuZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLndyYXBMbmc/byh0LmxuZyx0aGlzLndyYXBMbmcsITApOnQubG5nO3JldHVybiBuZXcgRCh0aGlzLndyYXBMYXQ/byh0LmxhdCx0aGlzLndyYXBMYXQsITApOnQubGF0LGksdC5hbHQpfSx3cmFwTGF0TG5nQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0Q2VudGVyKCksZT10aGlzLndyYXBMYXRMbmcoaSksbj1pLmxhdC1lLmxhdCxvPWkubG5nLWUubG5nO2lmKDA9PW4mJjA9PW8pcmV0dXJuIHQ7dmFyIHM9dC5nZXRTb3V0aFdlc3QoKSxyPXQuZ2V0Tm9ydGhFYXN0KCk7cmV0dXJuIG5ldyBSKG5ldyBEKHMubGF0LW4scy5sbmctbyksbmV3IEQoci5sYXQtbixyLmxuZy1vKSl9fSxGPWgoe30sSCx7d3JhcExuZzpbLTE4MCwxODBdLFI6NjM3MWUzLGRpc3RhbmNlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9TWF0aC5QSS8xODAsbj10LmxhdCplLG89aS5sYXQqZSxzPU1hdGguc2luKChpLmxhdC10LmxhdCkqZS8yKSxyPU1hdGguc2luKChpLmxuZy10LmxuZykqZS8yKSxhPXMqcytNYXRoLmNvcyhuKSpNYXRoLmNvcyhv
24510KSpyKnIsaD0yKk1hdGguYXRhbjIoTWF0aC5zcXJ0KGEpLE1hdGguc3FydCgxLWEpKTtyZXR1cm4gdGhpcy5SKmh9fSksVT02Mzc4MTM3LFY9e1I6VSxNQVhfTEFUSVRVREU6ODUuMDUxMTI4Nzc5OCxwcm9qZWN0OmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguUEkvMTgwLGU9dGhpcy5NQVhfTEFUSVRVREUsbj1NYXRoLm1heChNYXRoLm1pbihlLHQubGF0KSwtZSksbz1NYXRoLnNpbihuKmkpO3JldHVybiBuZXcgayh0aGlzLlIqdC5sbmcqaSx0aGlzLlIqTWF0aC5sb2coKDErbykvKDEtbykpLzIpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9MTgwL01hdGguUEk7cmV0dXJuIG5ldyBEKCgyKk1hdGguYXRhbihNYXRoLmV4cCh0LnkvdGhpcy5SKSktTWF0aC5QSS8yKSppLHQueCppL3RoaXMuUil9LGJvdW5kczpuZXcgSShbLShXPVUqTWF0aC5QSSksLVddLFtXLFddKX07ZnVuY3Rpb24gcSh0LGksZSxuKXtpZihnKHQpKXJldHVybiB0aGlzLl9hPXRbMF0sdGhpcy5fYj10WzFdLHRoaXMuX2M9dFsyXSx2b2lkKHRoaXMuX2Q9dFszXSk7dGhpcy5fYT10LHRoaXMuX2I9aSx0aGlzLl9jPWUsdGhpcy5fZD1ufWZ1bmN0aW9uIEcodCxpLGUsbil7cmV0dXJuIG5ldyBxKHQsaSxlLG4pfXEucHJvdG90eXBlPXt0cmFuc2Zvcm06ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHQuY2xvbmUoKSxpKX0sX3RyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiBpPWl8fDEsdC54PWkqKHRoaXMuX2EqdC54K3RoaXMuX2IpLHQueT1pKih0aGlzLl9jKnQueSt0aGlzLl9kKSx0fSx1bnRyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiBpPWl8fDEsbmV3IGsoKHQueC9pLXRoaXMuX2IpL3RoaXMuX2EsKHQueS9pLXRoaXMuX2QpL3RoaXMuX2MpfX07dmFyIEssWT1oKHt9LEYse2NvZGU6XCJFUFNHOjM4NTdcIixwcm9qZWN0aW9uOlYsdHJhbnNmb3JtYXRpb246RyhLPS41LyhNYXRoLlBJKlYuUiksLjUsLUssLjUpfSksWD1oKHt9LFkse2NvZGU6XCJFUFNHOjkwMDkxM1wifSk7ZnVuY3Rpb24gSih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix0KX1mdW5jdGlvbiAkKHQsaSl7Zm9yKHZhciBlLG4sbyxzLHI9XCJcIixhPTAsaD10Lmxlbmd0aDthPGg7YSsrKXtmb3IoZT0wLG49KG89dFthXSkubGVuZ3RoO2U8bjtlKyspcis9KGU/XCJMXCI6XCJNXCIpKyhzPW9bZV0pLngrXCIgXCIrcy55O3IrPWk/WnQ/XCJ6XCI6XCJ4XCI6XCJcIn1yZXR1cm4gcnx8XCJNMCAwXCJ9dmFyIFE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLHR0PVwiQWN0aXZlWE9iamVjdFwiaW4gd2luZG93LGl0PXR0JiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcixldD1cIm1zTGF1bmNoVXJpXCJpbiBuYXZpZ2F0b3ImJiEoXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50KSxudD1rdChcIndlYmtpdFwiKSxvdD1rdChcImFuZHJvaWRcIiksc3Q9a3QoXCJhbmRyb2lkIDJcIil8fGt0KFwiYW5kcm9pZCAzXCIpLHJ0PXBhcnNlSW50KC9XZWJLaXRcXC8oWzAtOV0rKXwkLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpWzFdLDEwKSxhdD1vdCYma3QoXCJHb29nbGVcIikmJnJ0PDUzNyYmIShcIkF1ZGlvTm9kZVwiaW4gd2luZG93KSxodD0hIXdpbmRvdy5vcGVyYSx1dD0hZXQmJmt0KFwiY2hyb21lXCIpLGx0PWt0KFwiZ2Vja29cIikmJiFudCYmIWh0JiYhdHQsY3Q9IXV0JiZrdChcInNhZmFyaVwiKSxfdD1rdChcInBoYW50b21cIiksZHQ9XCJPVHJhbnNpdGlvblwiaW4gUSxwdD0wPT09bmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJXaW5cIiksbXQ9dHQmJlwidHJhbnNpdGlvblwiaW4gUSxmdD1cIldlYktpdENTU01hdHJpeFwiaW4gd2luZG93JiZcIm0xMVwiaW4gbmV3IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgmJiFzdCxndD1cIk1velBlcnNwZWN0aXZlXCJpbiBRLHZ0PSF3aW5kb3cuTF9ESVNBQkxFXzNEJiYobXR8fGZ0fHxndCkmJiFkdCYmIV90LHl0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBvcmllbnRhdGlvbnx8a3QoXCJtb2JpbGVcIikseHQ9eXQmJm50LHd0PXl0JiZmdCxQdD0hd2luZG93LlBvaW50ZXJFdmVudCYmd2luZG93Lk1TUG9pbnRlckV2ZW50LEx0PSEoIXdpbmRvdy5Qb2ludGVyRXZlbnQmJiFQdCksYnQ9IXdpbmRvdy5MX05PX1RPVUNIJiYoTHR8fFwib250b3VjaHN0YXJ0XCJpbiB3aW5kb3d8fHdpbmRvdy5Eb2N1bWVudFRvdWNoJiZkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSxUdD15dCYmaHQsTXQ9eXQmJmx0LHp0PTE8KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHx3aW5kb3cuc2NyZWVuLmRldmljZVhEUEkvd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSksQ3Q9ZnVuY3Rpb24oKXt2YXIgdD0hMTt0cnl7dmFyIGk9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVFdmVudFN1cHBvcnRcIixhLGkpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVFdmVudFN1cHBvcnRcIixhLGkpfWNhdGNoKHQpe31yZXR1cm4gdH0oKSxTdD0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikuZ2V0Q29udGV4dCxadD0hKCFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlN8fCFKKFwic3ZnXCIpLmNyZWF0ZVNWR1JlY3QpLEV0PSFadCYmZnVuY3Rpb24oKXt0cnl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPVwiMVwiLz4nO3ZhciBpPXQuZmlyc3RDaGlsZDtyZXR1cm4gaS5zdHlsZS5iZWhhdmlvcj1cInVybCgjZGVmYXVsdCNWTUwpXCIsaSYmXCJvYmplY3RcIj09dHlwZW9mIGkuYWRqfWNhdGNoKHQpe3JldHVybiExfX0oKTtmdW5jdGlvbiBrdCh0KXtyZXR1cm4gMDw9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodCl9dmFyIEJ0PXtpZTp0dCxpZWx0OTppdCxlZGdlOmV0LHdlYmtpdDpudCxhbmRyb2lkOm90LGFuZHJvaWQyMzpzdCxhbmRyb2lkU3RvY2s6YXQsb3BlcmE6aHQsY2hyb21lOnV0LGdlY2tvOmx0LHNhZmFyaTpjdCxwaGFudG9tOl90LG9wZXJhMTI6ZHQsd2luOnB0LGllM2Q6bXQsd2Via2l0M2Q6ZnQsZ2Vja28zZDpndCxhbnkzZDp2dCxtb2JpbGU6eXQsbW9iaWxlV2Via2l0Onh0LG1vYmlsZVdlYmtpdDNkOnd0LG1zUG9pbnRlcjpQdCxwb2ludGVyOkx0LHRvdWNoOmJ0LG1vYmlsZU9wZXJhOlR0LG1vYmlsZUdlY2tvOk10LHJldGluYTp6dCxwYXNzaXZlRXZlbnRzOkN0LGNhbnZhczpTdCxzdmc6WnQsdm1sOkV0fSxBdD1QdD9cIk1TUG9pbnRlckRvd25cIjpcInBvaW50ZXJkb3duXCIsSXQ9UHQ/XCJNU1BvaW50ZXJNb3ZlXCI6XCJwb2ludGVybW92ZVwiLE90PVB0P1wiTVNQb2ludGVyVXBcIjpcInBvaW50ZXJ1cFwiLFJ0PVB0P1wiTVNQb2ludGVyQ2FuY2VsXCI6XCJwb2ludGVyY2FuY2VsXCIsTnQ9e30sRHQ9ITE7ZnVuY3Rpb24ganQodCxpLGUsbil7ZnVuY3Rpb24gbyh0KXtVdCh0LHIpfXZhciBzLHIsYSxoLHUsbCxjLF87ZnVuY3Rpb24gZCh0KXt0LnBvaW50ZXJUeXBlPT09KHQuTVNQT0lOVEVSX1RZUEVfTU9VU0V8fFwibW91c2VcIikmJjA9PT10LmJ1dHRvbnN8fFV0KHQsaCl9cmV0dXJuXCJ0b3VjaHN0YXJ0XCI9PT1pPyh1PXQsbD1lLGM9bixfPXAoZnVuY3Rpb24odCl7dC5NU1BPSU5URVJfVFlQRV9UT1VDSCYmdC5wb2ludGVyVHlwZT09PXQuTVNQT0lOVEVSX1RZUEVfVE9VQ0gmJlJpKHQpLFV0KHQsbCl9KSx1W1wiX2xlYWZsZXRfdG91Y2hzdGFydFwiK2NdPV8sdS5hZGRFdmVudExpc3RlbmVyKEF0LF8sITEpLER0fHwoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihBdCxXdCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihJdCxIdCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihPdCxGdCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihSdCxGdCwhMCksRHQ9ITApKTpcInRvdWNobW92ZVwiPT09aT8oaD1lLChhPXQpW1wiX2xlYWZsZXRfdG91Y2htb3ZlXCIrbl09ZCxhLmFkZEV2ZW50TGlzdGVuZXIoSXQsZCwhMSkpOlwidG91Y2hlbmRcIj09PWkmJihyPWUsKHM9dClbXCJfbGVhZmxldF90b3VjaGVuZFwiK25dPW8scy5hZGR
24510FdmVudExpc3RlbmVyKE90LG8sITEpLHMuYWRkRXZlbnRMaXN0ZW5lcihSdCxvLCExKSksdGhpc31mdW5jdGlvbiBXdCh0KXtOdFt0LnBvaW50ZXJJZF09dH1mdW5jdGlvbiBIdCh0KXtOdFt0LnBvaW50ZXJJZF0mJihOdFt0LnBvaW50ZXJJZF09dCl9ZnVuY3Rpb24gRnQodCl7ZGVsZXRlIE50W3QucG9pbnRlcklkXX1mdW5jdGlvbiBVdCh0LGkpe2Zvcih2YXIgZSBpbiB0LnRvdWNoZXM9W10sTnQpdC50b3VjaGVzLnB1c2goTnRbZV0pO3QuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9dmFyIFZ0PVB0P1wiTVNQb2ludGVyRG93blwiOkx0P1wicG9pbnRlcmRvd25cIjpcInRvdWNoc3RhcnRcIixxdD1QdD9cIk1TUG9pbnRlclVwXCI6THQ/XCJwb2ludGVydXBcIjpcInRvdWNoZW5kXCIsR3Q9XCJfbGVhZmxldF9cIjt2YXIgS3QsWXQsWHQsSnQsJHQsUXQsdGk9ZmkoW1widHJhbnNmb3JtXCIsXCJ3ZWJraXRUcmFuc2Zvcm1cIixcIk9UcmFuc2Zvcm1cIixcIk1velRyYW5zZm9ybVwiLFwibXNUcmFuc2Zvcm1cIl0pLGlpPWZpKFtcIndlYmtpdFRyYW5zaXRpb25cIixcInRyYW5zaXRpb25cIixcIk9UcmFuc2l0aW9uXCIsXCJNb3pUcmFuc2l0aW9uXCIsXCJtc1RyYW5zaXRpb25cIl0pLGVpPVwid2Via2l0VHJhbnNpdGlvblwiPT09aWl8fFwiT1RyYW5zaXRpb25cIj09PWlpP2lpK1wiRW5kXCI6XCJ0cmFuc2l0aW9uZW5kXCI7ZnVuY3Rpb24gbmkodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk6dH1mdW5jdGlvbiBvaSh0LGkpe3ZhciBlLG49dC5zdHlsZVtpXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2ldO3JldHVybiBuJiZcImF1dG9cIiE9PW58fCFkb2N1bWVudC5kZWZhdWx0Vmlld3x8KG49KGU9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpKT9lW2ldOm51bGwpLFwiYXV0b1wiPT09bj9udWxsOm59ZnVuY3Rpb24gc2kodCxpLGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIG4uY2xhc3NOYW1lPWl8fFwiXCIsZSYmZS5hcHBlbmRDaGlsZChuKSxufWZ1bmN0aW9uIHJpKHQpe3ZhciBpPXQucGFyZW50Tm9kZTtpJiZpLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIGFpKHQpe2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gaGkodCl7dmFyIGk9dC5wYXJlbnROb2RlO2kmJmkubGFzdENoaWxkIT09dCYmaS5hcHBlbmRDaGlsZCh0KX1mdW5jdGlvbiB1aSh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5maXJzdENoaWxkIT09dCYmaS5pbnNlcnRCZWZvcmUodCxpLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGxpKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpcmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGkpO3ZhciBlPXBpKHQpO3JldHVybiAwPGUubGVuZ3RoJiZuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIraStcIihcXFxcc3wkKVwiKS50ZXN0KGUpfWZ1bmN0aW9uIGNpKHQsaSl7dmFyIGU7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpZm9yKHZhciBuPWwoaSksbz0wLHM9bi5sZW5ndGg7bzxzO28rKyl0LmNsYXNzTGlzdC5hZGQobltvXSk7ZWxzZSBsaSh0LGkpfHxkaSh0LCgoZT1waSh0KSk/ZStcIiBcIjpcIlwiKStpKX1mdW5jdGlvbiBfaSh0LGkpe3ZvaWQgMCE9PXQuY2xhc3NMaXN0P3QuY2xhc3NMaXN0LnJlbW92ZShpKTpkaSh0LHUoKFwiIFwiK3BpKHQpK1wiIFwiKS5yZXBsYWNlKFwiIFwiK2krXCIgXCIsXCIgXCIpKSl9ZnVuY3Rpb24gZGkodCxpKXt2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lPWk6dC5jbGFzc05hbWUuYmFzZVZhbD1pfWZ1bmN0aW9uIHBpKHQpe3JldHVybiB0LmNvcnJlc3BvbmRpbmdFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdFbGVtZW50KSx2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9ZnVuY3Rpb24gbWkodCxpKXtcIm9wYWNpdHlcImluIHQuc3R5bGU/dC5zdHlsZS5vcGFjaXR5PWk6XCJmaWx0ZXJcImluIHQuc3R5bGUmJmZ1bmN0aW9uKHQsaSl7dmFyIGU9ITEsbj1cIkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhXCI7dHJ5e2U9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2godCl7aWYoMT09PWkpcmV0dXJufWk9TWF0aC5yb3VuZCgxMDAqaSksZT8oZS5FbmFibGVkPTEwMCE9PWksZS5PcGFjaXR5PWkpOnQuc3R5bGUuZmlsdGVyKz1cIiBwcm9naWQ6XCIrbitcIihvcGFjaXR5PVwiK2krXCIpXCJ9KHQsaSl9ZnVuY3Rpb24gZmkodCl7Zm9yKHZhciBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXWluIGkpcmV0dXJuIHRbZV07cmV0dXJuITF9ZnVuY3Rpb24gZ2kodCxpLGUpe3ZhciBuPWl8fG5ldyBrKDAsMCk7dC5zdHlsZVt0aV09KG10P1widHJhbnNsYXRlKFwiK24ueCtcInB4LFwiK24ueStcInB4KVwiOlwidHJhbnNsYXRlM2QoXCIrbi54K1wicHgsXCIrbi55K1wicHgsMClcIikrKGU/XCIgc2NhbGUoXCIrZStcIilcIjpcIlwiKX1mdW5jdGlvbiB2aSh0LGkpe3QuX2xlYWZsZXRfcG9zPWksdnQ/Z2kodCxpKToodC5zdHlsZS5sZWZ0PWkueCtcInB4XCIsdC5zdHlsZS50b3A9aS55K1wicHhcIil9ZnVuY3Rpb24geWkodCl7cmV0dXJuIHQuX2xlYWZsZXRfcG9zfHxuZXcgaygwLDApfWZ1bmN0aW9uIHhpKCl7emk
24510od2luZG93LFwiZHJhZ3N0YXJ0XCIsUmkpfWZ1bmN0aW9uIHdpKCl7U2kod2luZG93LFwiZHJhZ3N0YXJ0XCIsUmkpfWZ1bmN0aW9uIFBpKHQpe2Zvcig7LTE9PT10LnRhYkluZGV4Oyl0PXQucGFyZW50Tm9kZTt0LnN0eWxlJiYoTGkoKSxRdD0oJHQ9dCkuc3R5bGUub3V0bGluZSx0LnN0eWxlLm91dGxpbmU9XCJub25lXCIsemkod2luZG93LFwia2V5ZG93blwiLExpKSl9ZnVuY3Rpb24gTGkoKXskdCYmKCR0LnN0eWxlLm91dGxpbmU9UXQsUXQ9JHQ9dm9pZCAwLFNpKHdpbmRvdyxcImtleWRvd25cIixMaSkpfWZ1bmN0aW9uIGJpKHQpe2Zvcig7ISgodD10LnBhcmVudE5vZGUpLm9mZnNldFdpZHRoJiZ0Lm9mZnNldEhlaWdodHx8dD09PWRvY3VtZW50LmJvZHkpOyk7cmV0dXJuIHR9ZnVuY3Rpb24gVGkodCl7dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDppLndpZHRoL3Qub2Zmc2V0V2lkdGh8fDEseTppLmhlaWdodC90Lm9mZnNldEhlaWdodHx8MSxib3VuZGluZ0NsaWVudFJlY3Q6aX19SnQ9XCJvbnNlbGVjdHN0YXJ0XCJpbiBkb2N1bWVudD8oWHQ9ZnVuY3Rpb24oKXt6aSh3aW5kb3csXCJzZWxlY3RzdGFydFwiLFJpKX0sZnVuY3Rpb24oKXtTaSh3aW5kb3csXCJzZWxlY3RzdGFydFwiLFJpKX0pOihZdD1maShbXCJ1c2VyU2VsZWN0XCIsXCJXZWJraXRVc2VyU2VsZWN0XCIsXCJPVXNlclNlbGVjdFwiLFwiTW96VXNlclNlbGVjdFwiLFwibXNVc2VyU2VsZWN0XCJdKSxYdD1mdW5jdGlvbigpe3ZhciB0O1l0JiYodD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsS3Q9dFtZdF0sdFtZdF09XCJub25lXCIpfSxmdW5jdGlvbigpe1l0JiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW1l0XT1LdCxLdD12b2lkIDApfSk7dmFyIE1pPXtUUkFOU0ZPUk06dGksVFJBTlNJVElPTjppaSxUUkFOU0lUSU9OX0VORDplaSxnZXQ6bmksZ2V0U3R5bGU6b2ksY3JlYXRlOnNpLHJlbW92ZTpyaSxlbXB0eTphaSx0b0Zyb250OmhpLHRvQmFjazp1aSxoYXNDbGFzczpsaSxhZGRDbGFzczpjaSxyZW1vdmVDbGFzczpfaSxzZXRDbGFzczpkaSxnZXRDbGFzczpwaSxzZXRPcGFjaXR5Om1pLHRlc3RQcm9wOmZpLHNldFRyYW5zZm9ybTpnaSxzZXRQb3NpdGlvbjp2aSxnZXRQb3NpdGlvbjp5aSxkaXNhYmxlVGV4dFNlbGVjdGlvbjpYdCxlbmFibGVUZXh0U2VsZWN0aW9uOkp0LGRpc2FibGVJbWFnZURyYWc6eGksZW5hYmxlSW1hZ2VEcmFnOndpLHByZXZlbnRPdXRsaW5lOlBpLHJlc3RvcmVPdXRsaW5lOkxpLGdldFNpemVkUGFyZW50Tm9kZTpiaSxnZXRTY2FsZTpUaX07ZnVuY3Rpb24gemkodCxpLGUsbil7aWYoXCJvYmplY3RcIj09dHlwZW9mIGkpZm9yKHZhciBvIGluIGkpa2kodCxvLGlbb10sZSk7ZWxzZSBmb3IodmFyIHM9MCxyPShpPWwoaSkpLmxlbmd0aDtzPHI7cysrKWtpKHQsaVtzXSxlLG4pO3JldHVybiB0aGlzfXZhciBDaT1cIl9sZWFmbGV0X2V2ZW50c1wiO2Z1bmN0aW9uIFNpKHQsaSxlLG4pe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKUJpKHQsbyxpW29dLGUpO2Vsc2UgaWYoaSlmb3IodmFyIHM9MCxyPShpPWwoaSkpLmxlbmd0aDtzPHI7cysrKUJpKHQsaVtzXSxlLG4pO2Vsc2V7Zm9yKHZhciBhIGluIHRbQ2ldKUJpKHQsYSx0W0NpXVthXSk7ZGVsZXRlIHRbQ2ldfXJldHVybiB0aGlzfWZ1bmN0aW9uIFppKCl7cmV0dXJuIEx0JiYoIWV0JiYhY3QpfXZhciBFaT17bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwiLHdoZWVsOiEoXCJvbndoZWVsXCJpbiB3aW5kb3cpJiZcIm1vdXNld2hlZWxcIn07ZnVuY3Rpb24ga2koaSx0LGUsbil7dmFyIG89dCttKGUpKyhuP1wiX1wiK20obik6XCJcIik7aWYoaVtDaV0mJmlbQ2ldW29dKXJldHVybiB0aGlzO3ZhciBzLHIsYSxoLHUsbCxjPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwobnx8aSx0fHx3aW5kb3cuZXZlbnQpfSxfPWM7ZnVuY3Rpb24gZCh0KXtpZihMdCl7aWYoIXQuaXNQcmltYXJ5KXJldHVybjtpZihcIm1vdXNlXCI9PT10LnBvaW50ZXJUeXBlKXJldHVybn1lbHNlIGlmKDE8dC50b3VjaGVzLmxlbmd0aClyZXR1cm47dmFyIGk9RGF0ZS5ub3coKSxlPWktKGh8fGkpO3U9dC50b3VjaGVzP3QudG91Y2hlc1swXTp0LGw9MDxlJiZlPD0yNTAsaD1pfWZ1bmN0aW9uIHAodCl7aWYobCYmIXUuY2FuY2VsQnViYmxlKXtpZihMdCl7aWYoXCJtb3VzZVwiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47dmFyIGksZSxuPXt9O2ZvcihlIGluIHUpaT11W2VdLG5bZV09aSYmaS5iaW5kP2kuYmluZCh1KTppO3U9bn11LnR5cGU9XCJkYmxjbGlja1wiLHUuYnV0dG9uPTAscih1KSxoPW51bGx9fUx0JiYwPT09dC5pbmRleE9mKFwidG91Y2hcIik/anQoaSx0LGMsbyk6YnQmJlwiZGJsY2xpY2tcIj09PXQmJiFaaSgpPyhyPWMsbD0hMSwocz1pKVtHdCtWdCsoYT1vKV09ZCxzW0d0K3F0K2FdPXAsc1tHdCtcImRibGNsaWNrXCIrYV09cixzLmFkZEV2ZW50TGlzdGVuZXIoVnQsZCwhIUN0JiZ7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihxdCxwLCEhQ3QmJntwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIixyLCExKSk6XCJhZGRFdmVudExpc3RlbmVyXCJpbiBpP1widG91Y2hzdGFydFwiPT09dHx8XCJ0b3VjaG1vdmVcIj09PXR8fFwid2hlZWxcIj09PXR8fFwibW91c2V3aGVlbFwiPT09dD9pLmFkZEV2ZW50TGlzdGVuZXIoRWlbdF18fHQsYywhIUN0JiZ7cGFzc2l2ZTohMX0pOlwibW91c2VlbnRlclwiPT09dHx8XCJtb3VzZWxlYXZlXCI9PT10PyhjPWZ1bmN0aW9uKHQpe3Q9dHx8d2luZG93LmV2ZW50LFZpKGksdCkmJl8odCl9LGkuYWRkRXZlbnRMaXN0ZW5lcihFaVt0XSxjLCExKSk6aS5hZGRFdmVudExpc3RlbmVyKHQsXywhMSk6XCJhdHRhY2hFdmVudFwiaW4gaSYmaS5hdHRhY2hFdmVudChcIm9uXCIrdCxjKSxpW0NpXT1pW0NpXXx8e30saVtDaV1bb109Y31mdW5jdGlvbiBCaSh0LGksZSxuKXt2YXIgbyxzLHIsYSxoLHUsbCxjLF89aSttKGUpKyhuP1wiX1wiK20obik6XCJcIiksZD10W0NpXSYmdFtDaV1bX107aWYoIWQpcmV0dXJuIHRoaXM7THQmJjA9PT1pLmluZGV4T2YoXCJ0b3VjaFwiKT8oYz0odT10KVtcIl9sZWFmbGV0X1wiKyhsPWkpK19dLFwidG91Y2hzdGFydFwiPT09bD91LnJlbW92ZUV2ZW50TGlzdGVuZXIoQXQsYywhMSk6XCJ0b3VjaG1vdmVcIj09PWw/dS5yZW1vdmVFdmVudExpc3RlbmVyKEl0LGMsITEpOlwidG91Y2hlbmRcIj09PWwmJih1LnJlbW92ZUV2ZW50TGlzdGVuZXIoT3QsYywhMSksdS5yZW1vdmVFdmVudExpc3RlbmVyKFJ0LGMsITEpKSk6YnQmJlwiZGJsY2xpY2tcIj09PWkmJiFaaSgpPyhyPShvPXQpW0d0K1Z0KyhzPV8pXSxhPW9bR3QrcXQrc10saD1vW0d0K1wiZGJsY2xpY2tcIitzXSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoVnQsciwhIUN0JiZ7cGFzc2l2ZTohMX0pLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihxdCxhLCEhQ3QmJntwYXNzaXZlOiExfSksby5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIixoLCExKSk6XCJyZW1vdmVFdmVudExpc3RlbmVyXCJpbiB0P3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihFaVtpXXx8aSxkLCExKTpcImRldGFjaEV2ZW50XCJpbiB0JiZ0LmRldGFjaEV2ZW50KFwib25cIitpLGQpLHRbQ2ldW19dPW51bGx9ZnVuY3Rpb24gQWkodCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5vcmlnaW5hbEV2ZW50P3Qub3JpZ2luYWxFdmVudC5fc3RvcHBlZD0hMDp0LmNhbmNlbEJ1YmJsZT0hMCxVaSh0KSx0aGlzfWZ1bmN0aW9uIElpKHQpe3JldHVybiBraSh0LFwid2hlZWxcIixBaSksdGhpc31mdW5jdGlvbiBPaSh0KXtyZXR1cm4gemkodCxcIm1vdXNlZG93biB0b3VjaHN0YXJ0IGRibGNsaWNrXCIsQWkpLGtpKHQsXCJjbGlja1wiLEZpKSx0aGlzfWZ1bmN0aW9uIFJpKHQpe3JldHVybiB0LnByZXZlbn
24510REZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9ZnVuY3Rpb24gTmkodCl7cmV0dXJuIFJpKHQpLEFpKHQpLHRoaXN9ZnVuY3Rpb24gRGkodCxpKXtpZighaSlyZXR1cm4gbmV3IGsodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGU9VGkoaSksbj1lLmJvdW5kaW5nQ2xpZW50UmVjdDtyZXR1cm4gbmV3IGsoKHQuY2xpZW50WC1uLmxlZnQpL2UueC1pLmNsaWVudExlZnQsKHQuY2xpZW50WS1uLnRvcCkvZS55LWkuY2xpZW50VG9wKX12YXIgamk9cHQmJnV0PzIqd2luZG93LmRldmljZVBpeGVsUmF0aW86bHQ/d2luZG93LmRldmljZVBpeGVsUmF0aW86MTtmdW5jdGlvbiBXaSh0KXtyZXR1cm4gZXQ/dC53aGVlbERlbHRhWS8yOnQuZGVsdGFZJiYwPT09dC5kZWx0YU1vZGU/LXQuZGVsdGFZL2ppOnQuZGVsdGFZJiYxPT09dC5kZWx0YU1vZGU/MjAqLXQuZGVsdGFZOnQuZGVsdGFZJiYyPT09dC5kZWx0YU1vZGU/NjAqLXQuZGVsdGFZOnQuZGVsdGFYfHx0LmRlbHRhWj8wOnQud2hlZWxEZWx0YT8odC53aGVlbERlbHRhWXx8dC53aGVlbERlbHRhKS8yOnQuZGV0YWlsJiZNYXRoLmFicyh0LmRldGFpbCk8MzI3NjU/MjAqLXQuZGV0YWlsOnQuZGV0YWlsP3QuZGV0YWlsLy0zMjc2NSo2MDowfXZhciBIaT17fTtmdW5jdGlvbiBGaSh0KXtIaVt0LnR5cGVdPSEwfWZ1bmN0aW9uIFVpKHQpe3ZhciBpPUhpW3QudHlwZV07cmV0dXJuIEhpW3QudHlwZV09ITEsaX1mdW5jdGlvbiBWaSh0LGkpe3ZhciBlPWkucmVsYXRlZFRhcmdldDtpZighZSlyZXR1cm4hMDt0cnl7Zm9yKDtlJiZlIT09dDspZT1lLnBhcmVudE5vZGV9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuIGUhPT10fXZhciBxaT17b246emksb2ZmOlNpLHN0b3BQcm9wYWdhdGlvbjpBaSxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246SWksZGlzYWJsZUNsaWNrUHJvcGFnYXRpb246T2kscHJldmVudERlZmF1bHQ6Umksc3RvcDpOaSxnZXRNb3VzZVBvc2l0aW9uOkRpLGdldFdoZWVsRGVsdGE6V2ksZmFrZVN0b3A6Rmksc2tpcHBlZDpVaSxpc0V4dGVybmFsVGFyZ2V0OlZpLGFkZExpc3RlbmVyOnppLHJlbW92ZUxpc3RlbmVyOlNpfSxHaT1FLmV4dGVuZCh7cnVuOmZ1bmN0aW9uKHQsaSxlLG4pe3RoaXMuc3RvcCgpLHRoaXMuX2VsPXQsdGhpcy5faW5Qcm9ncmVzcz0hMCx0aGlzLl9kdXJhdGlvbj1lfHwuMjUsdGhpcy5fZWFzZU91dFBvd2VyPTEvTWF0aC5tYXgobnx8LjUsLjIpLHRoaXMuX3N0YXJ0UG9zPXlpKHQpLHRoaXMuX29mZnNldD1pLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9zKSx0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuZmlyZShcInN0YXJ0XCIpLHRoaXMuX2FuaW1hdGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9zdGVwKCEwKSx0aGlzLl9jb21wbGV0ZSgpKX0sX2FuaW1hdGU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltSWQ9TSh0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24odCl7dmFyIGk9bmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lLGU9MWUzKnRoaXMuX2R1cmF0aW9uO2k8ZT90aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KGkvZSksdCk6KHRoaXMuX3J1bkZyYW1lKDEpLHRoaXMuX2NvbXBsZXRlKCkpfSxfcnVuRnJhbWU6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9zdGFydFBvcy5hZGQodGhpcy5fb2Zmc2V0Lm11bHRpcGx5QnkodCkpO2kmJmUuX3JvdW5kKCksdmkodGhpcy5fZWwsZSksdGhpcy5maXJlKFwic3RlcFwiKX0sX2NvbXBsZXRlOmZ1bmN0aW9uKCl7eih0aGlzLl9hbmltSWQpLHRoaXMuX2luUHJvZ3Jlc3M9ITEsdGhpcy5maXJlKFwiZW5kXCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxLaT1FLmV4dGVuZCh7b3B0aW9uczp7Y3JzOlksY2VudGVyOnZvaWQgMCx6b29tOnZvaWQgMCxtaW5ab29tOnZvaWQgMCxtYXhab29tOnZvaWQgMCxsYXllcnM6W10sbWF4Qm91bmRzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAsem9vbUFuaW1hdGlvbjohMCx6b29tQW5pbWF0aW9uVGhyZXNob2xkOjQsZmFkZUFuaW1hdGlvbjohMCxtYXJrZXJab29tQW5pbWF0aW9uOiEwLHRyYW5zZm9ybTNETGltaXQ6ODM4ODYwOCx6b29tU25hcDoxLHpvb21EZWx0YToxLHRyYWNrUmVzaXplOiEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7aT1jKHRoaXMsaSksdGhpcy5faGFuZGxlcnM9W10sdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX3pvb21Cb3VuZExheWVycz17fSx0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9pbml0Q29udGFpbmVyKHQpLHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9vblJlc2l6ZT1wKHRoaXMuX29uUmVzaXplLHRoaXMpLHRoaXMuX2luaXRFdmVudHMoKSxpLm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHMoaS5tYXhCb3VuZHMpLHZvaWQgMCE9PWkuem9vbSYmKHRoaXMuX3pvb209dGhpcy5fbGltaXRab29tKGkuem9vbSkpLGkuY2VudGVyJiZ2b2lkIDAhPT1pLnpvb20mJnRoaXMuc2V0VmlldyhqKGkuY2VudGVyKSxpLnpvb20se3Jlc2V0OiEwfSksdGhpcy5jYWxsSW5pdEhvb2tzKCksdGhpcy5fem9vbUFuaW1hdGVkPWlpJiZ2dCYmIVR0JiZ0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbix0aGlzLl96b29tQW5pbWF0ZWQmJih0aGlzLl9jcmVhdGVBbmltUHJveHkoKSx6aSh0aGlzLl9wcm94eSxlaSx0aGlzLl9jYXRjaFRyYW5zaXRpb25FbmQsdGhpcykpLHRoaXMuX2FkZExheWVycyh0aGlzLm9wdGlvbnMubGF5ZXJzKX0sc2V0VmlldzpmdW5jdGlvbih0LGksZSl7aWYoKGk9dm9pZCAwPT09aT90aGlzLl96b29tOnRoaXMuX2xpbWl0Wm9vbShpKSx0PXRoaXMuX2xpbWl0Q2VudGVyKGoodCksaSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzKSxlPWV8fHt9LHRoaXMuX3N0b3AoKSx0aGlzLl9sb2FkZWQmJiFlLnJlc2V0JiYhMCE9PWUpJiYodm9p
24510ZCAwIT09ZS5hbmltYXRlJiYoZS56b29tPWgoe2FuaW1hdGU6ZS5hbmltYXRlfSxlLnpvb20pLGUucGFuPWgoe2FuaW1hdGU6ZS5hbmltYXRlLGR1cmF0aW9uOmUuZHVyYXRpb259LGUucGFuKSksdGhpcy5fem9vbSE9PWk/dGhpcy5fdHJ5QW5pbWF0ZWRab29tJiZ0aGlzLl90cnlBbmltYXRlZFpvb20odCxpLGUuem9vbSk6dGhpcy5fdHJ5QW5pbWF0ZWRQYW4odCxlLnBhbikpKXJldHVybiBjbGVhclRpbWVvdXQodGhpcy5fc2l6ZVRpbWVyKSx0aGlzO3JldHVybiB0aGlzLl9yZXNldFZpZXcodCxpKSx0aGlzfSxzZXRab29tOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOml9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxpKXtyZXR1cm4gdD10fHwodnQ/dGhpcy5vcHRpb25zLnpvb21EZWx0YToxKSx0aGlzLnNldFpvb20odGhpcy5fem9vbSt0LGkpfSx6b29tT3V0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9dHx8KHZ0P3RoaXMub3B0aW9ucy56b29tRGVsdGE6MSksdGhpcy5zZXRab29tKHRoaXMuX3pvb20tdCxpKX0sc2V0Wm9vbUFyb3VuZDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxzPSh0IGluc3RhbmNlb2Ygaz90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSkuc3VidHJhY3QobykubXVsdGlwbHlCeSgxLTEvbikscj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoby5hZGQocykpO3JldHVybiB0aGlzLnNldFZpZXcocixpLHt6b29tOmV9KX0sX2dldEJvdW5kc0NlbnRlclpvb206ZnVuY3Rpb24odCxpKXtpPWl8fHt9LHQ9dC5nZXRCb3VuZHM/dC5nZXRCb3VuZHMoKTpOKHQpO3ZhciBlPUEoaS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSksbj1BKGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMuZ2V0Qm91bmRzWm9vbSh0LCExLGUuYWRkKG4pKTtpZigobz1cIm51bWJlclwiPT10eXBlb2YgaS5tYXhab29tP01hdGgubWluKGkubWF4Wm9vbSxvKTpvKT09PTEvMClyZXR1cm57Y2VudGVyOnQuZ2V0Q2VudGVyKCksem9vbTpvfTt2YXIgcz1uLnN1YnRyYWN0KGUpLmRpdmlkZUJ5KDIpLHI9dGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksbyksYT10aGlzLnByb2plY3QodC5nZXROb3J0aEVhc3QoKSxvKTtyZXR1cm57Y2VudGVyOnRoaXMudW5wcm9qZWN0KHIuYWRkKGEpLmRpdmlkZUJ5KDIpLmFkZChzKSxvKSx6b29tOm99fSxmaXRCb3VuZHM6ZnVuY3Rpb24odCxpKXtpZighKHQ9Tih0KSkuaXNWYWxpZCgpKXRocm93IG5ldyBFcnJvcihcIkJvdW5kcyBhcmUgbm90IHZhbGlkLlwiKTt2YXIgZT10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsaSk7cmV0dXJuIHRoaXMuc2V0VmlldyhlLmNlbnRlcixlLnpvb20saSl9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjppfSl9LHBhbkJ5OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8e30sKHQ9QSh0KS5yb3VuZCgpKS54fHx0Lnk/KCEwPT09aS5hbmltYXRlfHx0aGlzLmdldFNpemUoKS5jb250YWlucyh0KT8odGhpcy5fcGFuQW5pbXx8KHRoaXMuX3BhbkFuaW09bmV3IEdpLHRoaXMuX3BhbkFuaW0ub24oe3N0ZXA6dGhpcy5fb25QYW5UcmFuc2l0aW9uU3RlcCxlbmQ6dGhpcy5fb25QYW5UcmFuc2l0aW9uRW5kfSx0aGlzKSksaS5ub01vdmVTdGFydHx8dGhpcy5maXJlKFwibW92ZXN0YXJ0XCIpLCExIT09aS5hbmltYXRlPyhjaSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC1wYW4tYW5pbVwiKSxlPXRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KS5yb3VuZCgpLHRoaXMuX3BhbkFuaW0ucnVuKHRoaXMuX21hcFBhbmUsZSxpLmR1cmF0aW9ufHwuMjUsaS5lYXNlTGluZWFyaXR5KSk6KHRoaXMuX3Jhd1BhbkJ5KHQpLHRoaXMuZmlyZShcIm1vdmVcIikuZmlyZShcIm1vdmVlbmRcIikpKTp0aGlzLl9yZXNldFZpZXcodGhpcy51bnByb2plY3QodGhpcy5wcm9qZWN0KHRoaXMuZ2V0Q2VudGVyKCkpLmFkZCh0KSksdGhpcy5nZXRab29tKCkpLHRoaXMpOnRoaXMuZmlyZShcIm1vdmVlbmRcIik7dmFyIGV9LGZseVRvOmZ1bmN0aW9uKHMscix0KXtpZighMT09PSh0PXR8fHt9KS5hbmltYXRlfHwhdnQpcmV0dXJuIHRoaXMuc2V0VmlldyhzLHIsdCk7dGhpcy5fc3RvcCgpO3ZhciBhPXRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKSxoPXRoaXMucHJvamVjdChzKSxpPXRoaXMuZ2V0U2l6ZSgpLHU9dGhpcy5fem9vbTtzPWoocykscj12b2lkIDA9PT1yP3U6cjt2YXIgbD1NYXRoLm1heChpLngsaS55KSxuPWwqdGhpcy5nZXRab29tU2NhbGUodSxyKSxjPWguZGlzdGFuY2VUbyhhKXx8MSxfPTEuNDIsbz1fKl87ZnVuY3Rpb24gZSh0KXt2YXIgaT0obipuLWwqbCsodD8tMToxKSpvKm8qYypjKS8oMioodD9uOmwpKm8qYyksZT1NYXRoLnNxcnQoaSppKzEpLWk7cmV0dXJuIGU8MWUtOT8tMTg6TWF0aC5sb2coZSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHAodCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn12YXIgbT1lKDApO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGwqKHAobSkqKGQoaT1tK18qdCkvcChpKSktZChtKSkvbzt2YXIgaX12YXIgZz1EYXRlLm5vdygpLHY9KGUoMSktbSkvXyx5PXQuZHVyYXRpb24/MWUzKnQuZHVyYXRpb246MWUzKnYqLjg7cmV0dXJuIHRoaXMuX21vdmVTdGFydCghMCx0Lm5vTW92ZVN0YXJ0KSxmdW5jdGlvbiB0KCl7dmFyIGksZSxuPShEYXRlLm5vdygpLWcpL3ksbz0oaT1uLCgxLU1hdGgucG93KDEtaSwxLjUpKSp2KTtuPD0xPyh0aGlzLl9mbHlUb0ZyYW1lPU0odCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KGEuYWRkKGguc3VidHJhY3QoYSkubXVsdGlwbHlCeShmKG8pL2MpKSx1KSx0aGlzLmdldFNjYWxlWm9vbShsLyhlPW8sbCoocChtKS9wKG0rXyplKSkpLHUpLHtmbHlUbzohMH0pKTp0aGlzLl9tb3ZlKHMscikuX21vdmVFbmQoITApfS5jYWxsKHRoaXMpLHRoaXN9LGZseVRvQm91bmRzOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZ2V0Qm91bmRzQ2VudGVyWm9vbSh0LGkpO3JldHVybiB0aGlzLmZseVRvKGUuY2VudGVyLGUuem9vbSxpKX0sc2V0TWF4Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybih0PU4odCkpLmlzVmFsaWQoKT8odGhpcy5vcHRpb25zLm1heEJvdW5kcyYmdGhpcy5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzPXQsdGhpcy5fbG9hZGVkJiZ0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMoKSx0aGlzLm9uKFwibW92ZWVuZFwiLH
24510RoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpOih0aGlzLm9wdGlvbnMubWF4Qm91bmRzPW51bGwsdGhpcy5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSl9LHNldE1pblpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLm1pblpvb207cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPXQsdGhpcy5fbG9hZGVkJiZpIT09dCYmKHRoaXMuZmlyZShcInpvb21sZXZlbHNjaGFuZ2VcIiksdGhpcy5nZXRab29tKCk8dGhpcy5vcHRpb25zLm1pblpvb20pP3RoaXMuc2V0Wm9vbSh0KTp0aGlzfSxzZXRNYXhab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5tYXhab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWF4Wm9vbT10LHRoaXMuX2xvYWRlZCYmaSE9PXQmJih0aGlzLmZpcmUoXCJ6b29tbGV2ZWxzY2hhbmdlXCIpLHRoaXMuZ2V0Wm9vbSgpPnRoaXMub3B0aW9ucy5tYXhab29tKT90aGlzLnNldFpvb20odCk6dGhpc30scGFuSW5zaWRlQm91bmRzOmZ1bmN0aW9uKHQsaSl7dGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwO3ZhciBlPXRoaXMuZ2V0Q2VudGVyKCksbj10aGlzLl9saW1pdENlbnRlcihlLHRoaXMuX3pvb20sTih0KSk7cmV0dXJuIGUuZXF1YWxzKG4pfHx0aGlzLnBhblRvKG4saSksdGhpcy5fZW5mb3JjaW5nQm91bmRzPSExLHRoaXN9LHBhbkluc2lkZTpmdW5jdGlvbih0LGkpe3ZhciBlLG4sbz1BKChpPWl8fHt9KS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSkscz1BKGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxyPXRoaXMuZ2V0Q2VudGVyKCksYT10aGlzLnByb2plY3QociksaD10aGlzLnByb2plY3QodCksdT10aGlzLmdldFBpeGVsQm91bmRzKCksbD11LmdldFNpemUoKS5kaXZpZGVCeSgyKSxjPU8oW3UubWluLmFkZChvKSx1Lm1heC5zdWJ0cmFjdChzKV0pO3JldHVybiBjLmNvbnRhaW5zKGgpfHwodGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwLGU9YS5zdWJ0cmFjdChoKSxuPUEoaC54K2UueCxoLnkrZS55KSwoaC54PGMubWluLnh8fGgueD5jLm1heC54KSYmKG4ueD1hLngtZS54LDA8ZS54P24ueCs9bC54LW8ueDpuLngtPWwueC1zLngpLChoLnk8Yy5taW4ueXx8aC55PmMubWF4LnkpJiYobi55PWEueS1lLnksMDxlLnk/bi55Kz1sLnktby55Om4ueS09bC55LXMueSksdGhpcy5wYW5Ubyh0aGlzLnVucHJvamVjdChuKSxpKSx0aGlzLl9lbmZvcmNpbmdCb3VuZHM9ITEpLHRoaXN9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9sb2FkZWQpcmV0dXJuIHRoaXM7dD1oKHthbmltYXRlOiExLHBhbjohMH0sITA9PT10P3thbmltYXRlOiEwfTp0KTt2YXIgaT10aGlzLmdldFNpemUoKTt0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9sYXN0Q2VudGVyPW51bGw7dmFyIGU9dGhpcy5nZXRTaXplKCksbj1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksbz1lLmRpdmlkZUJ5KDIpLnJvdW5kKCkscz1uLnN1YnRyYWN0KG8pO3JldHVybiBzLnh8fHMueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KHMpOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkocyksdGhpcy5maXJlKFwibW92ZVwiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQocCh0aGlzLmZpcmUsdGhpcyxcIm1vdmVlbmRcIiksMjAwKSk6dGhpcy5maXJlKFwibW92ZWVuZFwiKSksdGhpcy5maXJlKFwicmVzaXplXCIse29sZFNpemU6aSxuZXdTaXplOmV9KSk6dGhpc30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fbGltaXRab29tKHRoaXMuX3pvb20pKSx0aGlzLm9wdGlvbnMuem9vbVNuYXB8fHRoaXMuZmlyZShcInZpZXdyZXNldFwiKSx0aGlzLl9zdG9wKCl9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9aCh7dGltZW91dDoxZTQsd2F0Y2g6ITF9LHQpLCEoXCJnZW9sb2NhdGlvblwiaW4gbmF2aWdhdG9yKSlyZXR1cm4gdGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7Y29kZTowLG1lc3NhZ2U6XCJHZW9sb2NhdGlvbiBub3Qgc3VwcG9ydGVkLlwifSksdGhpczt2YXIgaT1wKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksZT1wKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsdGhpcyk7cmV0dXJuIHQud2F0Y2g/dGhpcy5fbG9jYXRpb25XYXRjaElkPW5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKGksZSx0KTpuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGksZSx0KSx0aGlzfSxzdG9wTG9jYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5nZW9sb2NhdGlvbiYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gmJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCksdGhpcy5fbG9jYXRlT3B0aW9ucyYmKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0Vmlldz0hMSksdGhpc30sX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGk9dC5jb2RlLGU9dC5tZXNzYWdlfHwoMT09PWk/XCJwZXJtaXNzaW9uIGRlbmllZFwiOjI9PT1pP1wicG9zaXRpb24gdW5hdmFpbGFibGVcIjpcInRpbWVvdXRcIik7dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3JiYhdGhpcy5fbG9hZGVkJiZ0aGlzLmZpdFdvcmxkKCksdGhpcy5maXJlKFwibG9jYXRpb25lcnJvclwiLHtjb2RlOmksbWVzc2FnZTpcIkdlb2xvY2F0aW9uIGVycm9yOiBcIitlK1wiLlwifSl9LF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOmZ1bmN0aW9uKHQpe3ZhciBpLGU9bmV3IEQodC5jb29yZHMubGF0aXR1ZGUsdC5jb29yZHMubG9uZ2l0dWRlKSxuPWUudG9Cb3VuZHMoMip0LmNvb3Jkcy5hY2N1cmFjeSksbz10aGlzLl9sb2NhdGVPcHRpb25zO28uc2V0VmlldyYmKGk9dGhpcy5nZXRCb3VuZHNab29tKG4pLHRoaXMuc2V0VmlldyhlLG8ubWF4Wm9vbT9NYXRoLm1pbihpLG8ubWF4Wm9vbSk6aSkpO3ZhciBzPXtsYXRsbmc6ZSxib3VuZHM6bix0aW1lc3RhbXA6dC50aW1lc3RhbXB9O2Zvcih2YXIgciBpbiB0LmNvb3JkcylcIm51bWJlclwiPT10eXBlb2YgdC5jb29yZHNbcl0mJihzW3JdPXQuY29vcmRzW3JdKTt0aGlzLmZpcmUoXCJ
24510sb2NhdGlvbmZvdW5kXCIscyl9LGFkZEhhbmRsZXI6ZnVuY3Rpb24odCxpKXtpZighaSlyZXR1cm4gdGhpczt2YXIgZT10aGlzW3RdPW5ldyBpKHRoaXMpO3JldHVybiB0aGlzLl9oYW5kbGVycy5wdXNoKGUpLHRoaXMub3B0aW9uc1t0XSYmZS5lbmFibGUoKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pbml0RXZlbnRzKCEwKSx0aGlzLm9mZihcIm1vdmVlbmRcIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgaXMgYmVpbmcgcmV1c2VkIGJ5IGFub3RoZXIgaW5zdGFuY2VcIik7dHJ5e2RlbGV0ZSB0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQsZGVsZXRlIHRoaXMuX2NvbnRhaW5lcklkfWNhdGNoKHQpe3RoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZD12b2lkIDAsdGhpcy5fY29udGFpbmVySWQ9dm9pZCAwfXZhciB0O2Zvcih0IGluIHZvaWQgMCE9PXRoaXMuX2xvY2F0aW9uV2F0Y2hJZCYmdGhpcy5zdG9wTG9jYXRlKCksdGhpcy5fc3RvcCgpLHJpKHRoaXMuX21hcFBhbmUpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fcmVzaXplUmVxdWVzdCYmKHoodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1udWxsKSx0aGlzLl9jbGVhckhhbmRsZXJzKCksdGhpcy5fbG9hZGVkJiZ0aGlzLmZpcmUoXCJ1bmxvYWRcIiksdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5yZW1vdmUoKTtmb3IodCBpbiB0aGlzLl9wYW5lcylyaSh0aGlzLl9wYW5lc1t0XSk7cmV0dXJuIHRoaXMuX2xheWVycz1bXSx0aGlzLl9wYW5lcz1bXSxkZWxldGUgdGhpcy5fbWFwUGFuZSxkZWxldGUgdGhpcy5fcmVuZGVyZXIsdGhpc30sY3JlYXRlUGFuZTpmdW5jdGlvbih0LGkpe3ZhciBlPXNpKFwiZGl2XCIsXCJsZWFmbGV0LXBhbmVcIisodD9cIiBsZWFmbGV0LVwiK3QucmVwbGFjZShcIlBhbmVcIixcIlwiKStcIi1wYW5lXCI6XCJcIiksaXx8dGhpcy5fbWFwUGFuZSk7cmV0dXJuIHQmJih0aGlzLl9wYW5lc1t0XT1lKSxlfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2xhc3RDZW50ZXImJiF0aGlzLl9tb3ZlZCgpP3RoaXMuX2xhc3RDZW50ZXI6dGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sZ2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29tfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFBpeGVsQm91bmRzKCk7cmV0dXJuIG5ldyBSKHRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSx0aGlzLnVucHJvamVjdCh0LmdldFRvcFJpZ2h0KCkpKX0sZ2V0TWluWm9vbTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbT90aGlzLl9sYXllcnNNaW5ab29tfHwwOnRoaXMub3B0aW9ucy5taW5ab29tfSxnZXRNYXhab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tP3ZvaWQgMD09PXRoaXMuX2xheWVyc01heFpvb20/MS8wOnRoaXMuX2xheWVyc01heFpvb206dGhpcy5vcHRpb25zLm1heFpvb219LGdldEJvdW5kc1pvb206ZnVuY3Rpb24odCxpLGUpe3Q9Tih0KSxlPUEoZXx8WzAsMF0pO3ZhciBuPXRoaXMuZ2V0Wm9vbSgpfHwwLG89dGhpcy5nZXRNaW5ab29tKCkscz10aGlzLmdldE1heFpvb20oKSxyPXQuZ2V0Tm9ydGhXZXN0KCksYT10LmdldFNvdXRoRWFzdCgpLGg9dGhpcy5nZXRTaXplKCkuc3VidHJhY3QoZSksdT1PKHRoaXMucHJvamVjdChhLG4pLHRoaXMucHJvamVjdChyLG4pKS5nZXRTaXplKCksbD12dD90aGlzLm9wdGlvbnMuem9vbVNuYXA6MSxjPWgueC91LngsXz1oLnkvdS55LGQ9aT9NYXRoLm1heChjLF8pOk1hdGgubWluKGMsXyksbj10aGlzLmdldFNjYWxlWm9vbShkLG4pO3JldHVybiBsJiYobj1NYXRoLnJvdW5kKG4vKGwvMTAwKSkqKGwvMTAwKSxuPWk/TWF0aC5jZWlsKG4vbCkqbDpNYXRoLmZsb29yKG4vbCkqbCksTWF0aC5tYXgobyxNYXRoLm1pbihzLG4pKX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplJiYhdGhpcy5fc2l6ZUNoYW5nZWR8fCh0aGlzLl9zaXplPW5ldyBrKHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8MCx0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwwKSx0aGlzLl9zaXplQ2hhbmdlZD0hMSksdGhpcy5fc2l6ZS5jbG9uZSgpfSxnZXRQaXhlbEJvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldFRvcExlZnRQb2ludCh0LGkpO3JldHVybiBuZXcgSShlLGUuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModm9pZCAwPT09dD90aGlzLmdldFpvb20oKTp0KX0sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90aGlzLl9wYW5lc1t0XTp0fSxnZXRQYW5lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sZ2V0Wm9vbVNjYWxlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gaT12b2lkIDA9PT1pP3RoaXMuX3pvb206aSxlLnNjYWxlKHQpL2Uuc2NhbGUoaSl9LGdldFNjYWxlWm9vbTpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMub3B0aW9ucy5jcnM7aT12b2lkIDA9PT1pP3RoaXMuX3pvb206aTt2YXIgbj1lLnpvb20odCplLnNjYWxlKGkpKTtyZXR1cm4gaXNOYU4obik/MS8wOm59LHByb2plY3Q6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaT12b2lkIDA9PT1pP3RoaXMuX3pvb206aSx0aGlzLm9wdGlvbnMuY3JzLmxhdExuZ1RvUG9pbnQoaih0KSxpKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKEEodCksaSl9LGxheWVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgaT1BKHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdChpKX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2plY3Qoaih0KSkuX3JvdW5kKCkuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZyhqKHQpKX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy53cmFwTGF0TG5nQm91bmRzKE4odCkpfSxkaXN0YW5jZTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLmRpc3RhbmNlKGoodCksaihpKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBBKHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBBKHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoQSh0KSk7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGkpfSxsYXRMbmdUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KGoodCkpKX0sbW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIERpKHQsdGhpcy5fY29udGFpbmVyKX0sbW91c2VFdmVudFRvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpKX0sbW91c2VFdmVudFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCkpfSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9jb250YWluZXI9bmkodCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwiTWFwIGNvbnRhaW5lciBub3QgZm91bmQuXCIpO2lmKGkuX2xlYWZsZXRfaWQp
24510dGhyb3cgbmV3IEVycm9yKFwiTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLlwiKTt6aShpLFwic2Nyb2xsXCIsdGhpcy5fb25TY3JvbGwsdGhpcyksdGhpcy5fY29udGFpbmVySWQ9bShpKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dGhpcy5fZmFkZUFuaW1hdGVkPXRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uJiZ2dCxjaSh0LFwibGVhZmxldC1jb250YWluZXJcIisoYnQ/XCIgbGVhZmxldC10b3VjaFwiOlwiXCIpKyh6dD9cIiBsZWFmbGV0LXJldGluYVwiOlwiXCIpKyhpdD9cIiBsZWFmbGV0LW9sZGllXCI6XCJcIikrKGN0P1wiIGxlYWZsZXQtc2FmYXJpXCI6XCJcIikrKHRoaXMuX2ZhZGVBbmltYXRlZD9cIiBsZWFmbGV0LWZhZGUtYW5pbVwiOlwiXCIpKTt2YXIgaT1vaSh0LFwicG9zaXRpb25cIik7XCJhYnNvbHV0ZVwiIT09aSYmXCJyZWxhdGl2ZVwiIT09aSYmXCJmaXhlZFwiIT09aSYmKHQuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSx0aGlzLl9pbml0UGFuZXMoKSx0aGlzLl9pbml0Q29udHJvbFBvcyYmdGhpcy5faW5pdENvbnRyb2xQb3MoKX0sX2luaXRQYW5lczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhbmVzPXt9O3RoaXMuX3BhbmVSZW5kZXJlcnM9e30sdGhpcy5fbWFwUGFuZT10aGlzLmNyZWF0ZVBhbmUoXCJtYXBQYW5lXCIsdGhpcy5fY29udGFpbmVyKSx2aSh0aGlzLl9tYXBQYW5lLG5ldyBrKDAsMCkpLHRoaXMuY3JlYXRlUGFuZShcInRpbGVQYW5lXCIpLHRoaXMuY3JlYXRlUGFuZShcInNoYWRvd1BhbmVcIiksdGhpcy5jcmVhdGVQYW5lKFwib3ZlcmxheVBhbmVcIiksdGhpcy5jcmVhdGVQYW5lKFwibWFya2VyUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJ0b29sdGlwUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJwb3B1cFBhbmVcIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChjaSh0Lm1hcmtlclBhbmUsXCJsZWFmbGV0LXpvb20taGlkZVwiKSxjaSh0LnNoYWRvd1BhbmUsXCJsZWFmbGV0LXpvb20taGlkZVwiKSl9LF9yZXNldFZpZXc6ZnVuY3Rpb24odCxpKXt2aSh0aGlzLl9tYXBQYW5lLG5ldyBrKDAsMCkpO3ZhciBlPSF0aGlzLl9sb2FkZWQ7dGhpcy5fbG9hZGVkPSEwLGk9dGhpcy5fbGltaXRab29tKGkpLHRoaXMuZmlyZShcInZpZXdwcmVyZXNldFwiKTt2YXIgbj10aGlzLl96b29tIT09aTt0aGlzLl9tb3ZlU3RhcnQobiwhMSkuX21vdmUodCxpKS5fbW92ZUVuZChuKSx0aGlzLmZpcmUoXCJ2aWV3cmVzZXRcIiksZSYmdGhpcy5maXJlKFwibG9hZFwiKX0sX21vdmVTdGFydDpmdW5jdGlvbih0LGkpe3JldHVybiB0JiZ0aGlzLmZpcmUoXCJ6b29tc3RhcnRcIiksaXx8dGhpcy5maXJlKFwibW92ZXN0YXJ0XCIpLHRoaXN9LF9tb3ZlOmZ1bmN0aW9uKHQsaSxlKXt2b2lkIDA9PT1pJiYoaT10aGlzLl96b29tKTt2YXIgbj10aGlzLl96b29tIT09aTtyZXR1cm4gdGhpcy5fem9vbT1pLHRoaXMuX2xhc3RDZW50ZXI9dCx0aGlzLl9waXhlbE9yaWdpbj10aGlzLl9nZXROZXdQaXhlbE9yaWdpbih0KSwobnx8ZSYmZS5waW5jaCkmJnRoaXMuZmlyZShcInpvb21cIixlKSx0aGlzLmZpcmUoXCJtb3ZlXCIsZSl9LF9tb3ZlRW5kOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLmZpcmUoXCJ6b29tZW5kXCIpLHRoaXMuZmlyZShcIm1vdmVlbmRcIil9LF9zdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHoodGhpcy5fZmx5VG9GcmFtZSksdGhpcy5fcGFuQW5pbSYmdGhpcy5fcGFuQW5pbS5zdG9wKCksdGhpc30sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe3ZpKHRoaXMuX21hcFBhbmUsdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpKX0sX2dldFpvb21TcGFuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWF4Wm9vbSgpLXRoaXMuZ2V0TWluWm9vbSgpfSxfcGFuSW5zaWRlTWF4Qm91bmRzOmZ1bmN0aW9uKCl7dGhpcy5fZW5mb3JjaW5nQm91bmRzfHx0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKX0sX2NoZWNrSWZMb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcihcIlNldCBtYXAgY2VudGVyIGFuZCB6b29tIGZpcnN0LlwiKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24odCl7dGhpcy5fdGFyZ2V0cz17fTt2YXIgaT10P1NpOnppO2koKHRoaXMuX3RhcmdldHNbbSh0aGlzLl9jb250YWluZXIpXT10aGlzKS5fY29udGFpbmVyLFwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBrZXlwcmVzcyBrZXlkb3duIGtleXVwXCIsdGhpcy5faGFuZGxlRE9NRXZlbnQsdGhpcyksdGhpcy5vcHRpb25zLnRyYWNrUmVzaXplJiZpKHdpbmRvdyxcInJlc2l6ZVwiLHRoaXMuX29uUmVzaXplLHRoaXMpLHZ0JiZ0aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCYmKHQ/dGhpcy5vZmY6dGhpcy5vbikuY2FsbCh0aGlzLFwibW92ZWVuZFwiLHRoaXMuX29uTW92ZUVuZCl9LF9vblJlc2l6ZTpmdW5jdGlvbigpe3oodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1NKGZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkYXRlU2l6ZSh7ZGVib3VuY2VNb3ZlZW5kOiEwfSl9LHR
24510oaXMpfSxfb25TY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIuc2Nyb2xsVG9wPTAsdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQ9MH0sX29uTW92ZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldE1hcFBhbmVQb3MoKTtNYXRoLm1heChNYXRoLmFicyh0LngpLE1hdGguYWJzKHQueSkpPj10aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCYmdGhpcy5fcmVzZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksdGhpcy5nZXRab29tKCkpfSxfZmluZEV2ZW50VGFyZ2V0czpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSxuPVtdLG89XCJtb3VzZW91dFwiPT09aXx8XCJtb3VzZW92ZXJcIj09PWkscz10LnRhcmdldHx8dC5zcmNFbGVtZW50LHI9ITE7czspe2lmKChlPXRoaXMuX3RhcmdldHNbbShzKV0pJiYoXCJjbGlja1wiPT09aXx8XCJwcmVjbGlja1wiPT09aSkmJiF0Ll9zaW11bGF0ZWQmJnRoaXMuX2RyYWdnYWJsZU1vdmVkKGUpKXtyPSEwO2JyZWFrfWlmKGUmJmUubGlzdGVucyhpLCEwKSl7aWYobyYmIVZpKHMsdCkpYnJlYWs7aWYobi5wdXNoKGUpLG8pYnJlYWt9aWYocz09PXRoaXMuX2NvbnRhaW5lcilicmVhaztzPXMucGFyZW50Tm9kZX1yZXR1cm4gbi5sZW5ndGh8fHJ8fG98fCFWaShzLHQpfHwobj1bdGhpc10pLG59LF9oYW5kbGVET01FdmVudDpmdW5jdGlvbih0KXt2YXIgaTt0aGlzLl9sb2FkZWQmJiFVaSh0KSYmKFwibW91c2Vkb3duXCIhPT0oaT10LnR5cGUpJiZcImtleXByZXNzXCIhPT1pJiZcImtleXVwXCIhPT1pJiZcImtleWRvd25cIiE9PWl8fFBpKHQudGFyZ2V0fHx0LnNyY0VsZW1lbnQpLHRoaXMuX2ZpcmVET01FdmVudCh0LGkpKX0sX21vdXNlRXZlbnRzOltcImNsaWNrXCIsXCJkYmxjbGlja1wiLFwibW91c2VvdmVyXCIsXCJtb3VzZW91dFwiLFwiY29udGV4dG1lbnVcIl0sX2ZpcmVET01FdmVudDpmdW5jdGlvbih0LGksZSl7dmFyIG47aWYoXCJjbGlja1wiPT09dC50eXBlJiYoKG49aCh7fSx0KSkudHlwZT1cInByZWNsaWNrXCIsdGhpcy5fZmlyZURPTUV2ZW50KG4sbi50eXBlLGUpKSwhdC5fc3RvcHBlZCYmKGU9KGV8fFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGkpKSkubGVuZ3RoKXt2YXIgbz1lWzBdO1wiY29udGV4dG1lbnVcIj09PWkmJm8ubGlzdGVucyhpLCEwKSYmUmkodCk7dmFyIHMscj17b3JpZ2luYWxFdmVudDp0fTtcImtleXByZXNzXCIhPT10LnR5cGUmJlwia2V5ZG93blwiIT09dC50eXBlJiZcImtleXVwXCIhPT10LnR5cGUmJihzPW8uZ2V0TGF0TG5nJiYoIW8uX3JhZGl1c3x8by5fcmFkaXVzPD0xMCksci5jb250YWluZXJQb2ludD1zP3RoaXMubGF0TG5nVG9Db250YWluZXJQb2ludChvLmdldExhdExuZygpKTp0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHIubGF5ZXJQb2ludD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHIuY29udGFpbmVyUG9pbnQpLHIubGF0bG5nPXM/by5nZXRMYXRMbmcoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhyLmxheWVyUG9pbnQpKTtmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKylpZihlW2FdLmZpcmUoaSxyLCEwKSxyLm9yaWdpbmFsRXZlbnQuX3N0b3BwZWR8fCExPT09ZVthXS5vcHRpb25zLmJ1YmJsaW5nTW91c2VFdmVudHMmJi0xIT09dih0aGlzLl9tb3VzZUV2ZW50cyxpKSlyZXR1cm59fSxfZHJhZ2dhYmxlTW92ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dC5kcmFnZ2luZyYmdC5kcmFnZ2luZy5lbmFibGVkKCk/dDp0aGlzKS5kcmFnZ2luZyYmdC5kcmFnZ2luZy5tb3ZlZCgpfHx0aGlzLmJveFpvb20mJnRoaXMuYm94Wm9vbS5tb3ZlZCgpfSxfY2xlYXJIYW5kbGVyczpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGk9dGhpcy5faGFuZGxlcnMubGVuZ3RoO3Q8aTt0KyspdGhpcy5faGFuZGxlcnNbdF0uZGlzYWJsZSgpfSx3aGVuUmVhZHk6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fbG9hZGVkP3QuY2FsbChpfHx0aGlzLHt0YXJnZXQ6dGhpc30pOnRoaXMub24oXCJsb2FkXCIsdCxpKSx0aGlzfSxfZ2V0TWFwUGFuZVBvczpmdW5jdGlvbigpe3JldHVybiB5aSh0aGlzLl9tYXBQYW5lKXx8bmV3IGsoMCwwKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsaSl7cmV0dXJuKHQmJnZvaWQgMCE9PWk/dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCxpKTp0aGlzLmdldFBpeGVsT3JpZ2luKCkpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LF9nZXROZXdQaXhlbE9yaWdpbjpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KGUpLl9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKS5fcm91bmQoKX0sX2xhdExuZ1RvTmV3TGF5ZXJQb2ludDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KG4pfSxfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gTyhbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksaSkuX3N1YnRyYWN0KG4pLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGkpLl9zdWJ0cmFjdChuKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxpKS5fc3VidHJhY3QobiksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksaSkuX3N1YnRyYWN0KG4pXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsaSxlKXtpZighZSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxpKSxvPXR
24510oaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHM9bmV3IEkobi5zdWJ0cmFjdChvKSxuLmFkZChvKSkscj10aGlzLl9nZXRCb3VuZHNPZmZzZXQocyxlLGkpO3JldHVybiByLnJvdW5kKCkuZXF1YWxzKFswLDBdKT90OnRoaXMudW5wcm9qZWN0KG4uYWRkKHIpLGkpfSxfbGltaXRPZmZzZXQ6ZnVuY3Rpb24odCxpKXtpZighaSlyZXR1cm4gdDt2YXIgZT10aGlzLmdldFBpeGVsQm91bmRzKCksbj1uZXcgSShlLm1pbi5hZGQodCksZS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4saSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj1PKHRoaXMucHJvamVjdChpLmdldE5vcnRoRWFzdCgpLGUpLHRoaXMucHJvamVjdChpLmdldFNvdXRoV2VzdCgpLGUpKSxvPW4ubWluLnN1YnRyYWN0KHQubWluKSxzPW4ubWF4LnN1YnRyYWN0KHQubWF4KTtyZXR1cm4gbmV3IGsodGhpcy5fcmVib3VuZChvLngsLXMueCksdGhpcy5fcmVib3VuZChvLnksLXMueSkpfSxfcmVib3VuZDpmdW5jdGlvbih0LGkpe3JldHVybiAwPHQraT9NYXRoLnJvdW5kKHQtaSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldE1pblpvb20oKSxlPXRoaXMuZ2V0TWF4Wm9vbSgpLG49dnQ/dGhpcy5vcHRpb25zLnpvb21TbmFwOjE7cmV0dXJuIG4mJih0PU1hdGgucm91bmQodC9uKSpuKSxNYXRoLm1heChpLE1hdGgubWluKGUsdCkpfSxfb25QYW5UcmFuc2l0aW9uU3RlcDpmdW5jdGlvbigpe3RoaXMuZmlyZShcIm1vdmVcIil9LF9vblBhblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtfaSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC1wYW4tYW5pbVwiKSx0aGlzLmZpcmUoXCJtb3ZlZW5kXCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX3RydW5jKCk7cmV0dXJuISghMCE9PShpJiZpLmFuaW1hdGUpJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMoZSkpJiYodGhpcy5wYW5CeShlLGkpLCEwKX0sX2NyZWF0ZUFuaW1Qcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Byb3h5PXNpKFwiZGl2XCIsXCJsZWFmbGV0LXByb3h5IGxlYWZsZXQtem9vbS1hbmltYXRlZFwiKTt0aGlzLl9wYW5lcy5tYXBQYW5lLmFwcGVuZENoaWxkKHQpLHRoaXMub24oXCJ6b29tYW5pbVwiLGZ1bmN0aW9uKHQpe3ZhciBpPXRpLGU9dGhpcy5fcHJveHkuc3R5bGVbaV07Z2kodGhpcy5fcHJveHksdGhpcy5wcm9qZWN0KHQuY2VudGVyLHQuem9vbSksdGhpcy5nZXRab29tU2NhbGUodC56b29tLDEpKSxlPT09dGhpcy5fcHJveHkuc3R5bGVbaV0mJnRoaXMuX2FuaW1hdGluZ1pvb20mJnRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQoKX0sdGhpcyksdGhpcy5vbihcImxvYWQgbW92ZWVuZFwiLHRoaXMuX2FuaW1Nb3ZlRW5kLHRoaXMpLHRoaXMuX29uKFwidW5sb2FkXCIsdGhpcy5fZGVzdHJveUFuaW1Qcm94eSx0aGlzKX0sX2Rlc3Ryb3lBbmltUHJveHk6ZnVuY3Rpb24oKXtyaSh0aGlzLl9wcm94eSksdGhpcy5vZmYoXCJsb2FkIG1vdmVlbmRcIix0aGlzLl9hbmltTW92ZUVuZCx0aGlzKSxkZWxldGUgdGhpcy5fcHJveHl9LF9hbmltTW92ZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Q2VudGVyKCksaT10aGlzLmdldFpvb20oKTtnaSh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodCxpKSx0aGlzLmdldFpvb21TY2FsZShpLDEpKX0sX2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiYwPD10LnByb3BlcnR5TmFtZS5pbmRleE9mKFwidHJhbnNmb3JtXCIpJiZ0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCl9LF9ub3RoaW5nVG9BbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGVhZmxldC16b29tLWFuaW1hdGVkXCIpLmxlbmd0aH0sX3RyeUFuaW1hdGVkWm9vbTpmdW5jdGlvbih0LGksZSl7aWYodGhpcy5fYW5pbWF0aW5nWm9vbSlyZXR1cm4hMDtpZihlPWV8fHt9LCF0aGlzLl96b29tQW5pbWF0ZWR8fCExPT09ZS5hbmltYXRlfHx0aGlzLl9ub3RoaW5nVG9BbmltYXRlKCl8fE1hdGguYWJzKGktdGhpcy5fem9vbSk+dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb25UaHJlc2hvbGQpcmV0dXJuITE7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2RpdmlkZUJ5KDEtMS9uKTtyZXR1cm4hKCEwIT09ZS5hbmltYXRlJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMobykpJiYoTShmdW5jdGlvbigpe3RoaXMuX21vdmVTdGFydCghMCwhMSkuX2FuaW1hdGVab29tKHQsaSwhMCl9LHRoaXMpLCEwKX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsaSxlLG4pe3RoaXMuX21hcFBhbmUmJihlJiYodGhpcy5fYW5pbWF0aW5nWm9vbT0hMCx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWksY2kodGhpcy5fbWFwUGFuZSxcImxlYWZsZXQtem9vbS1hbmltXCIpKSx0aGlzLmZpcmUoXCJ6b29tYW5pbVwiLHtjZW50ZXI6dCx6b29tOmksbm9VcGRhdGU6bn0pLHNldFRpbWVvdXQocCh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCkpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9tYXBQYW5lJiZfaSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC16b29tLWFuaW1cIiksdGhpcy5fYW5pbWF0aW5nWm9vbT0hMSx0aGlzLl9tb3ZlKHRoaXMuX2FuaW1hdGVUb0NlbnRlcix0aGlzLl9hbmltYXRlVG9ab29tKSxNKGZ1bmN0aW9uKCl7dGhpcy5fbW92ZUVuZCghMCl9LHRoaXMpKX19KTtmdW5jdGlvbiBZaSh0KXtyZXR1cm4gbmV3IFhpKHQpfXZhciBYaT1TLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJ0b3ByaWdodFwifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9ufSxzZXRQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7cmV0dXJuIGkmJmkucmVtb3ZlQ29udHJvbCh0aGlzKSx0aGlzLm9wdGlvbnMucG9zaXRpb249dCxpJiZpLmFkZENvbnRyb2wodGhpcyksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7dGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dDt2YXIgaT10aGlzLl9jb250YWluZXI9dGhpcy5vbkFkZCh0KSxlPXRoaXMuZ2V0UG9zaXRpb24oKSxuPXQuX2NvbnRyb2xDb3JuZXJzW2VdO3JldHVybiBjaShpLFwibGVhZmxldC1jb250cm9sXCIpLC0xIT09ZS5pbmRleE9mKFwiYm90dG9tXCIpP24uaW5zZXJ0QmVmb3JlKGksbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGkpLHRoaXMuX21hcC5vbihcInVubG9hZFwiLHRoaXMucmVtb3ZlLHRoaXMpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJihyaSh0aGlzLl9jb250YWluZXIpLHRoaXMub25SZW1vdmUmJnRoaXMub25SZW1vdmUodGhpcy5fbWFwKSx0aGlzLl9tYXAub2ZmKFwidW5sb2FkXCIsdGhpcy5yZW1vdmUsdGhpcyksdGhpcy5fbWFwPW51bGwpLHRoaXN9LF9yZWZvY3VzT25NYXA6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiZ0JiYwPHQuc2NyZWVuWCYmMDx0LnNjcmVlblkmJnRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpfX0pO0tpLmluY2x1ZGUoe2FkZENvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkVG8odGhpcyksdGhpc30scmVtb3ZlQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZW1vdmUoKSx0aGlzfSxfaW5pdENvbnRyb2xQb3M6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9jb250cm9sQ29ybmVycz17fSxvPVwibGVhZmxldC1cIixzPXRoaXMuX2NvbnRyb2xDb250YWluZXI9c2koXCJkaXZcIixvK1wiY29udHJvbC1jb250YWluZXJcIix0aGlzLl9jb250YWluZXIpO2Z1bmN0aW9uIHQodCxpKXt2YXIgZT1vK3QrXCIgXCIrbytpO25bdCtpXT1zaShcImRp
24510dlwiLGUscyl9dChcInRvcFwiLFwibGVmdFwiKSx0KFwidG9wXCIsXCJyaWdodFwiKSx0KFwiYm90dG9tXCIsXCJsZWZ0XCIpLHQoXCJib3R0b21cIixcInJpZ2h0XCIpfSxfY2xlYXJDb250cm9sUG9zOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2NvbnRyb2xDb3JuZXJzKXJpKHRoaXMuX2NvbnRyb2xDb3JuZXJzW3RdKTtyaSh0aGlzLl9jb250cm9sQ29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udHJvbENvcm5lcnMsZGVsZXRlIHRoaXMuX2NvbnRyb2xDb250YWluZXJ9fSk7dmFyIEppPVhpLmV4dGVuZCh7b3B0aW9uczp7Y29sbGFwc2VkOiEwLHBvc2l0aW9uOlwidG9wcmlnaHRcIixhdXRvWkluZGV4OiEwLGhpZGVTaW5nbGVCYXNlOiExLHNvcnRMYXllcnM6ITEsc29ydEZ1bmN0aW9uOmZ1bmN0aW9uKHQsaSxlLG4pe3JldHVybiBlPG4/LTE6bjxlPzE6MH19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe2Zvcih2YXIgbiBpbiBjKHRoaXMsZSksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzPVtdLHRoaXMuX2xheWVycz1bXSx0aGlzLl9sYXN0WkluZGV4PTAsdGhpcy5faGFuZGxpbmdDbGljaz0hMSx0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gaSl0aGlzLl9hZGRMYXllcihpW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksKHRoaXMuX21hcD10KS5vbihcInpvb21lbmRcIix0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLHRoaXMpO2Zvcih2YXIgaT0wO2k8dGhpcy5fbGF5ZXJzLmxlbmd0aDtpKyspdGhpcy5fbGF5ZXJzW2ldLmxheWVyLm9uKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyk7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIFhpLnByb3RvdHlwZS5hZGRUby5jYWxsKHRoaXMsdCksdGhpcy5fZXhwYW5kSWZOb3RDb2xsYXBzZWQoKX0sb25SZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAub2ZmKFwiem9vbWVuZFwiLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsdGhpcyk7Zm9yKHZhciB0PTA7dDx0aGlzLl9sYXllcnMubGVuZ3RoO3QrKyl0aGlzLl9sYXllcnNbdF0ubGF5ZXIub2ZmKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyl9LGFkZEJhc2VMYXllcjpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGkpLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxhZGRPdmVybGF5OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsaSwhMCksdGhpcy5fbWFwP3RoaXMuX3VwZGF0ZSgpOnRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3Qub2ZmKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyk7dmFyIGk9dGhpcy5fZ2V0TGF5ZXIobSh0KSk7cmV0dXJuIGkmJnRoaXMuX2xheWVycy5zcGxpY2UodGhpcy5fbGF5ZXJzLmluZGV4T2YoaSksMSksdGhpcy5fbWFwP3RoaXMuX3VwZGF0ZSgpOnRoaXN9LGV4cGFuZDpmdW5jdGlvbigpe2NpKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWRcIiksdGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQ9bnVsbDt2YXIgdD10aGlzLl9tYXAuZ2V0U2l6ZSgpLnktKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRUb3ArNTApO3JldHVybiB0PHRoaXMuX3NlY3Rpb24uY2xpZW50SGVpZ2h0PyhjaSh0aGlzLl9zZWN0aW9uLFwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXJcIiksdGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQ9dCtcInB4XCIpOl9pKHRoaXMuX3NlY3Rpb24sXCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhclwiKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksdGhpc30sY29sbGFwc2U6ZnVuY3Rpb24oKXtyZXR1cm4gX2kodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZFwiKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PVwibGVhZmxldC1jb250cm9sLWxheWVyc1wiLGk9dGhpcy5fY29udGFpbmVyPXNpKFwiZGl2XCIsdCksZT10aGlzLm9wdGlvbnMuY29sbGFwc2VkO2kuc2V0QXR0cmlidXRlKFwiYXJpYS1oYXNwb3B1cFwiLCEwKSxPaShpKSxJaShpKTt2YXIgbj10aGlzLl9zZWN0aW9uPXNpKFwic2VjdGlvblwiLHQrXCItbGlzdFwiKTtlJiYodGhpcy5fbWFwLm9uKFwiY2xpY2tcIix0aGlzLmNvbGxhcHNlLHRoaXMpLG90fHx6aShpLHttb3VzZWVudGVyOnRoaXMuZXhwYW5kLG1vdXNlbGVhdmU6dGhpcy5jb2xsYXBzZX0sdGhpcykpO3ZhciBvPXRoaXMuX2xheWVyc0xpbms9c2koXCJhXCIsdCtcIi10b2dnbGVcIixpKTtvLmhyZWY9XCIjXCIsby50aXRsZT1cIkxheWVyc1wiLGJ0Pyh6aShvLFwiY2xpY2tcIixOaSksemkobyxcImNsaWNrXCIsdGhpcy5leHBhbmQsdGhpcykpOnppKG8sXCJmb2N1c1wiLHRoaXMuZXhwYW5kLHRoaXMpLGV8fHRoaXMuZXhwYW5kKCksdGhpcy5fYmFzZUxheWVyc0xpc3Q9c2koXCJkaXZcIix0K1wiLWJhc2VcIixuKSx0aGlzLl9zZXBhcmF0b3I9c2koXCJkaXZcIix0K1wiLXNlcGFyYXRvclwiLG4pLHRoaXMuX292ZXJsYXlzTGlzdD1zaShcImRpdlwiLHQrXCItb3ZlcmxheXNcIixuKSxpLmFwcGVuZENoaWxkKG4pfSxfZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9sYXllcnMubGVuZ3RoO2krKylpZih0aGlzLl9sYXllcnNbaV0mJm0odGhpcy5fbGF5ZXJzW2ldLmxheWVyKT09PXQpcmV0dXJuIHRoaXMuX2xheWVyc1tpXX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9tYXAmJnQub24oXCJhZGQgcmVtb3ZlXCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKSx0aGlzLl9sYXllcnMucHVzaCh7bGF5ZXI6dCxuYW1lOmksb3ZlcmxheTplfSksdGhpcy5vcHRpb25zLnNvcnRMYXllcnMmJnRoaXMuX2xheWVycy5zb3J0KHAoZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNvcnRGdW5jdGlvbih0LmxheWVyLGkubGF5ZXIsdC5uYW1lLGkubmFtZSl9LHRoaXMpKSx0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCYmdC5zZXRaSW5kZXgmJih0aGlzLl9sYXN0WkluZGV4KyssdC5zZXRaSW5kZXgodGhpcy5fbGFzdFpJbmRleCkpLHRoaXMuX2V4cGFuZElmTm90Q29sbGFwc2VkKCl9LF91cGRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5fY29udGFpbmVyKXJldHVybi
24510B0aGlzO2FpKHRoaXMuX2Jhc2VMYXllcnNMaXN0KSxhaSh0aGlzLl9vdmVybGF5c0xpc3QpLHRoaXMuX2xheWVyQ29udHJvbElucHV0cz1bXTtmb3IodmFyIHQsaSxlLG49MCxvPTA7bzx0aGlzLl9sYXllcnMubGVuZ3RoO28rKyllPXRoaXMuX2xheWVyc1tvXSx0aGlzLl9hZGRJdGVtKGUpLGk9aXx8ZS5vdmVybGF5LHQ9dHx8IWUub3ZlcmxheSxuKz1lLm92ZXJsYXk/MDoxO3JldHVybiB0aGlzLm9wdGlvbnMuaGlkZVNpbmdsZUJhc2UmJih0PXQmJjE8bix0aGlzLl9iYXNlTGF5ZXJzTGlzdC5zdHlsZS5kaXNwbGF5PXQ/XCJcIjpcIm5vbmVcIiksdGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9aSYmdD9cIlwiOlwibm9uZVwiLHRoaXN9LF9vbkxheWVyQ2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMuX2hhbmRsaW5nQ2xpY2t8fHRoaXMuX3VwZGF0ZSgpO3ZhciBpPXRoaXMuX2dldExheWVyKG0odC50YXJnZXQpKSxlPWkub3ZlcmxheT9cImFkZFwiPT09dC50eXBlP1wib3ZlcmxheWFkZFwiOlwib3ZlcmxheXJlbW92ZVwiOlwiYWRkXCI9PT10LnR5cGU/XCJiYXNlbGF5ZXJjaGFuZ2VcIjpudWxsO2UmJnRoaXMuX21hcC5maXJlKGUsaSl9LF9jcmVhdGVSYWRpb0VsZW1lbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT0nPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvclwiIG5hbWU9XCInK3QrJ1wiJysoaT8nIGNoZWNrZWQ9XCJjaGVja2VkXCInOlwiXCIpK1wiLz5cIixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIG4uaW5uZXJIVE1MPWUsbi5maXJzdENoaWxkfSxfYWRkSXRlbTpmdW5jdGlvbih0KXt2YXIgaSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiKSxuPXRoaXMuX21hcC5oYXNMYXllcih0LmxheWVyKTt0Lm92ZXJsYXk/KChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSkudHlwZT1cImNoZWNrYm94XCIsaS5jbGFzc05hbWU9XCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yXCIsaS5kZWZhdWx0Q2hlY2tlZD1uKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudChcImxlYWZsZXQtYmFzZS1sYXllcnNfXCIrbSh0aGlzKSxuKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMucHVzaChpKSxpLmxheWVySWQ9bSh0LmxheWVyKSx6aShpLFwiY2xpY2tcIix0aGlzLl9vbklucHV0Q2xpY2ssdGhpcyk7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7by5pbm5lckhUTUw9XCIgXCIrdC5uYW1lO3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIGUuYXBwZW5kQ2hpbGQocykscy5hcHBlbmRDaGlsZChpKSxzLmFwcGVuZENoaWxkKG8pLCh0Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0KS5hcHBlbmRDaGlsZChlKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksZX0sX29uSW5wdXRDbGljazpmdW5jdGlvbigpe3ZhciB0LGksZT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj1bXSxvPVtdO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITA7Zm9yKHZhciBzPWUubGVuZ3RoLTE7MDw9cztzLS0pdD1lW3NdLGk9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmNoZWNrZWQ/bi5wdXNoKGkpOnQuY2hlY2tlZHx8by5wdXNoKGkpO2ZvcihzPTA7czxvLmxlbmd0aDtzKyspdGhpcy5fbWFwLmhhc0xheWVyKG9bc10pJiZ0aGlzLl9tYXAucmVtb3ZlTGF5ZXIob1tzXSk7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIobltzXSl8fHRoaXMuX21hcC5hZGRMYXllcihuW3NdKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfSxfY2hlY2tEaXNhYmxlZExheWVyczpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLGU9dGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLG49dGhpcy5fbWFwLmdldFpvb20oKSxvPWUubGVuZ3RoLTE7MDw9bztvLS0pdD1lW29dLGk9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmRpc2FibGVkPXZvaWQgMCE9PWkub3B0aW9ucy5taW5ab29tJiZuPGkub3B0aW9ucy5taW5ab29tfHx2b2lkIDAhPT1pLm9wdGlvbnMubWF4Wm9vbSYmbj5pLm9wdGlvbnMubWF4Wm9vbX0sX2V4cGFuZElmTm90Q29sbGFwc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmIXRoaXMub3B0aW9ucy5jb2xsYXBzZWQmJnRoaXMuZXhwYW5kKCksdGhpc30sX2V4cGFuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZCgpfSxfY29sbGFwc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsYXBzZSgpfX0pLCRpPVhpLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJ0b3BsZWZ0XCIsem9vbUluVGV4dDpcIitcIix6b29tSW5UaXRsZTpcIlpvb20gaW5cIix6b29tT3V0VGV4dDpcIiYjeDIyMTI7XCIsem9vbU91dFRpdGxlOlwiWm9vbSBvdXRcIn0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGk9XCJsZWFmbGV0LWNvbnRyb2wtem9vbVwiLGU9c2koXCJkaXZcIixpK1wiIGxlYWZsZXQtYmFyXCIpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbUluVGV4dCxuLnpvb21JblRpdGxlLGkrXCItaW5cIixlLHRoaXMuX3pvb21JbiksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24obi56b29tT3V0VGV4dCxuLnpvb21PdXRUaXRsZSxpK1wiLW91dFwiLGUsdGhpcy5fem9vbU91dCksdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0Lm9uKFwiem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlXCIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksZX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoXCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2VcIix0aGlzLl91cGRhdGVEaXNhYmxlZCx0aGlzKX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZD0hMCx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHRoaXN9LF96b29tSW46ZnVuY3Rpb24odCl7IXRoaXMuX2Rpc2FibGVkJiZ0aGlzLl9tYXAuX3pvb208dGhpcy5fbWFwLmdldE1heFpvb20oKSYmdGhpcy5fbWFwLnpvb21Jbih0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEqKHQuc2hpZnRLZXk/MzoxKSl9LF96b29tT3V0OmZ1bmN0aW9uKHQpeyF0aGlzLl9kaXNhYmxlZCYmdGhpcy5fbWFwLl96b29tPnRoaXMuX21hcC5nZXRNaW5ab29tKCkmJnRoaXMuX21hcC56b29tT3V0KHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSoodC5zaGlmdEtleT8zOjEpKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGksZSxuLG8pe3ZhciBzPXNpKFwiYVwiLGUsbik7cmV0dXJuIHMuaW5uZXJIVE1MPXQscy5ocmVmPVwiI1wiLHMudGl0bGU9aSxzLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImJ1dHRvblwiKSxzLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixpKSxPaShzKSx6aShzLFwiY2xpY2tcIixOaSksemkocyxcImNsaWNrXCIsbyx0aGlzKSx6aShzLFwiY2xpY2tcIix0aGlzLl9yZWZvY3VzT25NYXAsdGhpcyksc30sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9XCJsZWFmbGV0LWRpc2FibGVkXCI7X2kodGhpcy5fem9vbUluQnV0dG9uLGkpLF9pKHRoaXMuX3pvb21PdXRCdXR0b24s
24510aSksIXRoaXMuX2Rpc2FibGVkJiZ0Ll96b29tIT09dC5nZXRNaW5ab29tKCl8fGNpKHRoaXMuX3pvb21PdXRCdXR0b24saSksIXRoaXMuX2Rpc2FibGVkJiZ0Ll96b29tIT09dC5nZXRNYXhab29tKCl8fGNpKHRoaXMuX3pvb21JbkJ1dHRvbixpKX19KTtLaS5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksS2kuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyAkaSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSk7dmFyIFFpPVhpLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJib3R0b21sZWZ0XCIsbWF4V2lkdGg6MTAwLG1ldHJpYzohMCxpbXBlcmlhbDohMH0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGk9XCJsZWFmbGV0LWNvbnRyb2wtc2NhbGVcIixlPXNpKFwiZGl2XCIsaSksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2FkZFNjYWxlcyhuLGkrXCItbGluZVwiLGUpLHQub24obi51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLHRoaXMpLGV9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyl9LF9hZGRTY2FsZXM6ZnVuY3Rpb24odCxpLGUpe3QubWV0cmljJiYodGhpcy5fbVNjYWxlPXNpKFwiZGl2XCIsaSxlKSksdC5pbXBlcmlhbCYmKHRoaXMuX2lTY2FsZT1zaShcImRpdlwiLGksZSkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9dC5nZXRTaXplKCkueS8yLGU9dC5kaXN0YW5jZSh0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoWzAsaV0pLHQuY29udGFpbmVyUG9pbnRUb0xhdExuZyhbdGhpcy5vcHRpb25zLm1heFdpZHRoLGldKSk7dGhpcy5fdXBkYXRlU2NhbGVzKGUpfSxfdXBkYXRlU2NhbGVzOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5tZXRyaWMmJnQmJnRoaXMuX3VwZGF0ZU1ldHJpYyh0KSx0aGlzLm9wdGlvbnMuaW1wZXJpYWwmJnQmJnRoaXMuX3VwZGF0ZUltcGVyaWFsKHQpfSxfdXBkYXRlTWV0cmljOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2dldFJvdW5kTnVtKHQpLGU9aTwxZTM/aStcIiBtXCI6aS8xZTMrXCIga21cIjt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZSxpL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG89My4yODA4Mzk5KnQ7NTI4MDxvPyhpPW8vNTI4MCxlPXRoaXMuX2dldFJvdW5kTnVtKGkpLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxlK1wiIG1pXCIsZS9pKSk6KG49dGhpcy5fZ2V0Um91bmROdW0obyksdGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLG4rXCIgZnRcIixuL28pKX0sX3VwZGF0ZVNjYWxlOmZ1bmN0aW9uKHQsaSxlKXt0LnN0eWxlLndpZHRoPU1hdGgucm91bmQodGhpcy5vcHRpb25zLm1heFdpZHRoKmUpK1wicHhcIix0LmlubmVySFRNTD1pfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrXCJcIikubGVuZ3RoLTEpLGU9dC9pO3JldHVybiBpKihlPTEwPD1lPzEwOjU8PWU/NTozPD1lPzM6Mjw9ZT8yOjEpfX0pLHRlPVhpLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJib3R0b21yaWdodFwiLHByZWZpeDonPGEgaHJlZj1cImh0dHBzOi8vbGVhZmxldGpzLmNvbVwiIHRpdGxlPVwiQSBKUyBsaWJyYXJ5IGZvciBpbnRlcmFjdGl2ZSBtYXBzXCI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSBpbih0LmF0dHJpYnV0aW9uQ29udHJvbD10aGlzKS5fY29udGFpbmVyPXNpKFwiZGl2XCIsXCJsZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb25cIiksT2kodGhpcy5fY29udGFpbmVyKSx0Ll9sYXllcnMpdC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uJiZ0aGlzLmFkZEF0dHJpYnV0aW9uKHQuX2xheWVyc1tpXS5nZXRBdHRyaWJ1dGlvbigpKTtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fY29udGFpbmVyfSxzZXRQcmVmaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XXx8KHRoaXMuX2F0dHJpYnV0aW9uc1t0XT0wKSx0aGlzLl9hdHRyaWJ1dGlvbnNbdF0rKyx0aGlzLl91cGRhdGUoKSksdGhpc30scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD1bXTtmb3IodmFyIGkgaW4gdGhpcy5fYXR0cmlidXRpb25zKXRoaXMuX2F0dHJpYnV0aW9uc1tpXSYmdC5wdXNoKGkpO3ZhciBlPVtdO3RoaXMub3B0aW9ucy5wcmVmaXgmJmUucHVzaCh0aGlzLm9wdGlvbnMucHJlZml4KSx0Lmxlbmd0aCYmZS5wdXNoKHQuam9pbihcIiwgXCIpKSx0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPWUuam9pbihcIiB8IFwiKX19fSk7S2kubWVyZ2VPcHRpb25zKHthdHRyaWJ1dGlvbkNvbnRyb2w6ITB9KSxLaS5hZGRJbml0SG9vayhmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wmJihuZXcgdGUpLmFkZFRvKHRoaXMpfSk7WGkuTGF5ZXJzPUppLFhpLlpvb209JGksWGkuU2NhbGU9UWksWGkuQXR0cmlidXRpb249dGUsWWkubGF5ZXJzPWZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbmV3IEppKHQsaSxlKX0sWWkuem9vbT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3ICRpKHQpfSxZaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFFpKHQpfSxZaS5hdHRyaWJ1dGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRlKHQpfTt2YXIgaWU9Uy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXR9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCkpLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZCYmKHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpKSx0aGlzfSxlbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfX0pO2llLmFkZFRvPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQuYWRkSGFuZGxlcihpLHRoaXMpLHRoaXN9O3ZhciBlZSxuZT17RXZlbn
24510RzOlp9LG9lPWJ0P1widG91Y2hzdGFydCBtb3VzZWRvd25cIjpcIm1vdXNlZG93blwiLHNlPXttb3VzZWRvd246XCJtb3VzZXVwXCIsdG91Y2hzdGFydDpcInRvdWNoZW5kXCIscG9pbnRlcmRvd246XCJ0b3VjaGVuZFwiLE1TUG9pbnRlckRvd246XCJ0b3VjaGVuZFwifSxyZT17bW91c2Vkb3duOlwibW91c2Vtb3ZlXCIsdG91Y2hzdGFydDpcInRvdWNobW92ZVwiLHBvaW50ZXJkb3duOlwidG91Y2htb3ZlXCIsTVNQb2ludGVyRG93bjpcInRvdWNobW92ZVwifSxhZT1FLmV4dGVuZCh7b3B0aW9uczp7Y2xpY2tUb2xlcmFuY2U6M30saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSxuKXtjKHRoaXMsbiksdGhpcy5fZWxlbWVudD10LHRoaXMuX2RyYWdTdGFydFRhcmdldD1pfHx0LHRoaXMuX3ByZXZlbnRPdXRsaW5lPWV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWR8fCh6aSh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsb2UsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKGFlLl9kcmFnZ2luZz09PXRoaXMmJnRoaXMuZmluaXNoRHJhZygpLFNpKHRoaXMuX2RyYWdTdGFydFRhcmdldCxvZSx0aGlzLl9vbkRvd24sdGhpcyksdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9tb3ZlZD0hMSl9LF9vbkRvd246ZnVuY3Rpb24odCl7dmFyIGksZTshdC5fc2ltdWxhdGVkJiZ0aGlzLl9lbmFibGVkJiYodGhpcy5fbW92ZWQ9ITEsbGkodGhpcy5fZWxlbWVudCxcImxlYWZsZXQtem9vbS1hbmltXCIpfHxhZS5fZHJhZ2dpbmd8fHQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24mJiF0LnRvdWNoZXN8fCgoYWUuX2RyYWdnaW5nPXRoaXMpLl9wcmV2ZW50T3V0bGluZSYmUGkodGhpcy5fZWxlbWVudCkseGkoKSxYdCgpLHRoaXMuX21vdmluZ3x8KHRoaXMuZmlyZShcImRvd25cIiksaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsZT1iaSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFBvaW50PW5ldyBrKGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3BhcmVudFNjYWxlPVRpKGUpLHppKGRvY3VtZW50LHJlW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLHppKGRvY3VtZW50LHNlW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKSkpKX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgaSxlOyF0Ll9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQmJih0LnRvdWNoZXMmJjE8dC50b3VjaGVzLmxlbmd0aD90aGlzLl9tb3ZlZD0hMDooKGU9bmV3IGsoKGk9dC50b3VjaGVzJiYxPT09dC50b3VjaGVzLmxlbmd0aD90LnRvdWNoZXNbMF06dCkuY2xpZW50WCxpLmNsaWVudFkpLl9zdWJ0cmFjdCh0aGlzLl9zdGFydFBvaW50KSkueHx8ZS55KSYmKE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KTx0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2V8fChlLngvPXRoaXMuX3BhcmVudFNjYWxlLngsZS55Lz10aGlzLl9wYXJlbnRTY2FsZS55LFJpKHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKFwiZHJhZ3N0YXJ0XCIpLHRoaXMuX21vdmVkPSEwLHRoaXMuX3N0YXJ0UG9zPXlpKHRoaXMuX2VsZW1lbnQpLnN1YnRyYWN0KGUpLGNpKGRvY3VtZW50LmJvZHksXCJsZWFmbGV0LWRyYWdnaW5nXCIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCx3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlJiZ0aGlzLl9sYXN0VGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSYmKHRoaXMuX2xhc3RUYXJnZXQ9dGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksY2kodGhpcy5fbGFzdFRhcmdldCxcImxlYWZsZXQtZHJhZy10YXJnZXRcIikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLHoodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX2FuaW1SZXF1ZXN0PU0odGhpcy5fdXBkYXRlUG9zaXRpb24sdGhpcywhMCkpKSl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RFdmVudH07dGhpcy5maXJlKFwicHJlZHJhZ1wiLHQpLHZpKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoXCJkcmFnXCIsdCl9LF9vblVwOmZ1bmN0aW9uKHQpeyF0Ll9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQmJnRoaXMuZmluaXNoRHJhZygpfSxmaW5pc2hEcmFnOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIF9pKGRvY3VtZW50LmJvZHksXCJsZWFmbGV0LWRyYWdnaW5nXCIpLHRoaXMuX2xhc3RUYXJnZXQmJihfaSh0aGlzLl9sYXN0VGFyZ2V0LFwibGVhZmxldC1kcmFnLXRhcmdldFwiKSx0aGlzLl9sYXN0VGFyZ2V0PW51bGwpLHJlKVNpKGRvY3VtZW50LHJlW3RdLHRoaXMuX29uTW92ZSx0aGlzKSxTaShkb2N1bWVudCxzZVt0XSx0aGlzLl9vblVwLHRoaXMpO3dpKCksSnQoKSx0aGlzLl9tb3ZlZCYmdGhpcy5fbW92aW5nJiYoeih0aGlzLl9hbmltUmVxdWVzdCksdGhpcy5maXJlKFwiZHJhZ2VuZFwiLHtkaXN0YW5jZTp0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyl9KSksdGhpcy5fbW92aW5nPSExLGFlLl9kcmFnZ2luZz0hMX19KTtmdW5jdGlvbiBoZSh0LGkpe2lmKCFpfHwhdC5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt2YXIgZT1pKmk7cmV0dXJuIHQ9ZnVuY3Rpb24odCxpKXt2YXIgZT10Lmxlbmd0aCxuPW5ldyh0eXBlb2YgVWludDhBcnJheSE9dm9pZCAwK1wiXCI/VWludDhBcnJheTpBcnJheSkoZSk7blswXT1uW2UtMV09MSxmdW5jdGlvbiB0KGksZSxuLG8scyl7dmFyIHIsYSxoLHU9MDtmb3IoYT1vKzE7YTw9cy0xO2ErKyloPWRlKGlbYV0saVtvXSxpW3NdLCEwKSx1PGgmJihyPWEsdT1oKTtuPHUmJihlW3JdPTEsdChpLGUsbixvLHIpLHQoaSxlLG4scixzKSl9KHQsbixpLDAsZS0xKTt2YXIgbyxzPVtdO2ZvcihvPTA7bzxlO28rKyluW29dJiZzLnB1c2godFtvXSk7cmV0dXJuIHN9KHQ9ZnVuY3Rpb24odCxpKXtmb3IodmFyIGU9W3RbMF1dLG49MSxvPTAscz10Lmxlbmd0aDtuPHM7bisrKShmdW5jdGlvbih0LGkpe3ZhciBlPWkueC10Lngsbj1pLnktdC55O3JldHVybiBlKmUrbipufSkodFtuXSx0W29dKT5pJiYoZS5wdXNoKHRbbl0pLG89bik7bzxzLTEmJmUucHVzaCh0W3MtMV0pO3JldHVybiBlfSh0LGUpLGUpfWZ1bmN0aW9uIHVlKHQsaSxlKXtyZXR1cm4gTWF0aC5zcXJ0KGRlKHQsaSxlLCEwKSl9ZnVuY3Rpb24gbGUodCxpLGUsbi
24510xvKXt2YXIgcyxyLGEsaD1uP2VlOl9lKHQsZSksdT1fZShpLGUpO2ZvcihlZT11Ozspe2lmKCEoaHx1KSlyZXR1cm5bdCxpXTtpZihoJnUpcmV0dXJuITE7YT1fZShyPWNlKHQsaSxzPWh8fHUsZSxvKSxlKSxzPT09aD8odD1yLGg9YSk6KGk9cix1PWEpfX1mdW5jdGlvbiBjZSh0LGksZSxuLG8pe3ZhciBzLHIsYT1pLngtdC54LGg9aS55LXQueSx1PW4ubWluLGw9bi5tYXg7cmV0dXJuIDgmZT8ocz10LngrYSoobC55LXQueSkvaCxyPWwueSk6NCZlPyhzPXQueCthKih1LnktdC55KS9oLHI9dS55KToyJmU/KHM9bC54LHI9dC55K2gqKGwueC10LngpL2EpOjEmZSYmKHM9dS54LHI9dC55K2gqKHUueC10LngpL2EpLG5ldyBrKHMscixvKX1mdW5jdGlvbiBfZSh0LGkpe3ZhciBlPTA7cmV0dXJuIHQueDxpLm1pbi54P2V8PTE6dC54PmkubWF4LngmJihlfD0yKSx0Lnk8aS5taW4ueT9lfD00OnQueT5pLm1heC55JiYoZXw9OCksZX1mdW5jdGlvbiBkZSh0LGksZSxuKXt2YXIgbyxzPWkueCxyPWkueSxhPWUueC1zLGg9ZS55LXIsdT1hKmEraCpoO3JldHVybiAwPHUmJigxPChvPSgodC54LXMpKmErKHQueS1yKSpoKS91KT8ocz1lLngscj1lLnkpOjA8byYmKHMrPWEqbyxyKz1oKm8pKSxhPXQueC1zLGg9dC55LXIsbj9hKmEraCpoOm5ldyBrKHMscil9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIWcodFswXSl8fFwib2JqZWN0XCIhPXR5cGVvZiB0WzBdWzBdJiZ2b2lkIDAhPT10WzBdWzBdfWZ1bmN0aW9uIG1lKHQpe3JldHVybiBjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkIHVzZSBvZiBfZmxhdCwgcGxlYXNlIHVzZSBMLkxpbmVVdGlsLmlzRmxhdCBpbnN0ZWFkLlwiKSxwZSh0KX12YXIgZmU9e3NpbXBsaWZ5OmhlLHBvaW50VG9TZWdtZW50RGlzdGFuY2U6dWUsY2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gZGUodCxpLGUpfSxjbGlwU2VnbWVudDpsZSxfZ2V0RWRnZUludGVyc2VjdGlvbjpjZSxfZ2V0Qml0Q29kZTpfZSxfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQ6ZGUsaXNGbGF0OnBlLF9mbGF0Om1lfTtmdW5jdGlvbiBnZSh0LGksZSl7Zm9yKHZhciBuLG8scyxyLGEsaCx1LGw9WzEsNCwyLDhdLGM9MCxfPXQubGVuZ3RoO2M8XztjKyspdFtjXS5fY29kZT1fZSh0W2NdLGkpO2ZvcihzPTA7czw0O3MrKyl7Zm9yKGg9bFtzXSxuPVtdLGM9MCxvPShfPXQubGVuZ3RoKS0xO2M8XztvPWMrKylyPXRbY10sYT10W29dLHIuX2NvZGUmaD9hLl9jb2RlJmh8fCgodT1jZShhLHIsaCxpLGUpKS5fY29kZT1fZSh1LGkpLG4ucHVzaCh1KSk6KGEuX2NvZGUmaCYmKCh1PWNlKGEscixoLGksZSkpLl9jb2RlPV9lKHUsaSksbi5wdXNoKHUpKSxuLnB1c2gocikpO3Q9bn1yZXR1cm4gdH12YXIgdmUseWU9e2NsaXBQb2x5Z29uOmdlfSx4ZT17cHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGsodC5sbmcsdC5sYXQpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEKHQueSx0LngpfSxib3VuZHM6bmV3IEkoWy0xODAsLTkwXSxbMTgwLDkwXSl9LHdlPXtSOjYzNzgxMzcsUl9NSU5PUjo2MzU2NzUyLjMxNDI0NTE3OSxib3VuZHM6bmV3IEkoWy0yMDAzNzUwOC4zNDI3OSwtMTU0OTY1NzAuNzM5NzJdLFsyMDAzNzUwOC4zNDI3OSwxODc2NDY1Ni4yMzEzOF0pLHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5QSS8xODAsZT10aGlzLlIsbj10LmxhdCppLG89dGhpcy5SX01JTk9SL2Uscz1NYXRoLnNxcnQoMS1vKm8pLHI9cypNYXRoLnNpbihuKSxhPU1hdGgudGFuKE1hdGguUEkvNC1uLzIpL01hdGgucG93KCgxLXIpLygxK3IpLHMvMiksbj0tZSpNYXRoLmxvZyhNYXRoLm1heChhLDFlLTEwKSk7cmV0dXJuIG5ldyBrKHQubG5nKmkqZSxuKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlPTE4MC9NYXRoLlBJLG49dGhpcy5SLG89dGhpcy5SX01JTk9SL24scz1NYXRoLnNxcnQoMS1vKm8pLHI9TWF0aC5leHAoLXQueS9uKSxhPU1hdGguUEkvMi0yKk1hdGguYXRhbihyKSxoPTAsdT0uMTtoPDE1JiYxZS03PE1hdGguYWJzKHUpO2grKylpPXMqTWF0aC5zaW4oYSksaT1NYXRoLnBvdygoMS1pKS8oMStpKSxzLzIpLGErPXU9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIqaSktYTtyZXR1cm4gbmV3IEQoYSplLHQueCplL24pfX0sUGU9e0xvbkxhdDp4ZSxNZXJjYXRvcjp3ZSxTcGhlcmljYWxNZXJjYXRvcjpWfSxMZT1oKHt9LEYse2NvZGU6XCJFUFNHOjMzOTVcIixwcm9qZWN0aW9uOndlLHRyYW5zZm9ybWF0aW9uOkcodmU9LjUvKE1hdGguUEkqd2UuUiksLjUsLXZlLC41KX0pLGJlPWgoe30sRix7Y29kZTpcIkVQU0c6NDMyNlwiLHByb2plY3Rpb246eGUsdHJhbnNmb3JtYXRpb246RygxLzE4MCwxLC0xLzE4MCwuNSl9KSxUZT1oKHt9LEgse3Byb2plY3Rpb246eGUsdHJhbnNmb3JtYXRpb246RygxLDAsLTEsMCksc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9LHpvb206ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfSxkaXN0YW5jZTpmdW5jdGlvbih0LGkpe3ZhciBlPWkubG5nLXQubG5nLG49aS5sYXQtdC5sYXQ7cmV0dXJuIE1hdGguc3FydChlKmUrbipuKX0saW5maW5pdGU6ITB9KTtILkVhcnRoPUYsSC5FUFNHMzM5NT1MZSxILkVQU0czODU3PVksSC5FUFNHOTAwOTEzPVgsSC5FUFNHNDMyNj1iZSxILlNpbXBsZT1UZTt2YXIgTWU9RS5leHRlbmQoe29wdGlvbnM6e3BhbmU6XCJvdmVybGF5UGFuZVwiLGF0dHJpYnV0aW9uOm51bGwsYnViYmxpbmdNb3VzZUV2ZW50czohMH0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlRnJvbSh0aGlzLl9tYXB8fHRoaXMuX21hcFRvQWRkKX0scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5yZW1vdmVMYXllcih0aGlzKSx0aGlzfSxnZXRQYW5lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0UGFuZSh0P3RoaXMub3B0aW9uc1t0XXx8dDp0aGlzLm9wdGlvbnMucGFuZSl9LGFkZEludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuX3RhcmdldHNbbSh0KV09dGhpc30scmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9tYXAuX3RhcmdldHNbbSh0KV0sdGhpc30sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfbGF5ZXJBZGQ6ZnVuY3Rpb24odCl7dmFyIGksZT10LnRhcmdldDtlLmhhc0xheWVyKHRoaXMpJiYodGhpcy5fbWFwPWUsdGhpcy5fem9vbUFuaW1hdGVkPWUuX3pvb21BbmltYXRlZCx0aGlzLmdldEV2ZW50cyYmKGk9dGhpcy5nZXRFdmVudHMoKSxlLm9uKGksdGhpcyksdGhpcy5vbmNlKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXtlLm9mZihpLHRoaXMpfSx0aGlzKSksdGhpcy5vbkFkZChlKSx0aGlzLmdldEF0dHJpYnV0aW9uJiZlLmF0dHJpYnV0aW9uQ29udHJvbCYmZS5hdHRyaWJ1dGlvbkNvbnRyb2wuYWRkQXR0cmlidXRpb24odGhpcy5nZXRBdHRyaWJ1dGlvbigpKSx0aGlzLmZpcmUoXCJhZGRcIiksZS5maXJlKFwibGF5ZXJhZGRcIix7bGF5ZXI6dGhpc30pKX19KTtLaS5pbmNsdWRlKHthZGRMYXllcjpmdW5jdGlvbih0KXtpZighdC5fbGF5ZXJBZGQpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci5cIik7dmFyIGk9bSh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2ldfHwoKHRoaXMuX2xheWVyc1tpXT10KS5fbWFwVG9BZGQ9dGhpcyx0LmJlZm9yZUFkZCYmdC5iZWZvcmVBZGQodGhpcyksdGhpcy53aGVuUmVhZHkodC5fbGF5ZXJBZGQsdCkpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPW0odCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXSYmKHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZS
24510h0aGlzKSx0LmdldEF0dHJpYnV0aW9uJiZ0aGlzLmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hdHRyaWJ1dGlvbkNvbnRyb2wucmVtb3ZlQXR0cmlidXRpb24odC5nZXRBdHRyaWJ1dGlvbigpKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2ldLHRoaXMuX2xvYWRlZCYmKHRoaXMuZmlyZShcImxheWVycmVtb3ZlXCIse2xheWVyOnR9KSx0LmZpcmUoXCJyZW1vdmVcIikpLHQuX21hcD10Ll9tYXBUb0FkZD1udWxsKSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJm0odClpbiB0aGlzLl9sYXllcnN9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sX2FkZExheWVyczpmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxlPSh0PXQ/Zyh0KT90Olt0XTpbXSkubGVuZ3RoO2k8ZTtpKyspdGhpcy5hZGRMYXllcih0W2ldKX0sX2FkZFpvb21MaW1pdDpmdW5jdGlvbih0KXshaXNOYU4odC5vcHRpb25zLm1heFpvb20pJiZpc05hTih0Lm9wdGlvbnMubWluWm9vbSl8fCh0aGlzLl96b29tQm91bmRMYXllcnNbbSh0KV09dCx0aGlzLl91cGRhdGVab29tTGV2ZWxzKCkpfSxfcmVtb3ZlWm9vbUxpbWl0OmZ1bmN0aW9uKHQpe3ZhciBpPW0odCk7dGhpcy5fem9vbUJvdW5kTGF5ZXJzW2ldJiYoZGVsZXRlIHRoaXMuX3pvb21Cb3VuZExheWVyc1tpXSx0aGlzLl91cGRhdGVab29tTGV2ZWxzKCkpfSxfdXBkYXRlWm9vbUxldmVsczpmdW5jdGlvbigpe3ZhciB0PTEvMCxpPS0xLzAsZT10aGlzLl9nZXRab29tU3BhbigpO2Zvcih2YXIgbiBpbiB0aGlzLl96b29tQm91bmRMYXllcnMpdmFyIG89dGhpcy5fem9vbUJvdW5kTGF5ZXJzW25dLm9wdGlvbnMsdD12b2lkIDA9PT1vLm1pblpvb20/dDpNYXRoLm1pbih0LG8ubWluWm9vbSksaT12b2lkIDA9PT1vLm1heFpvb20/aTpNYXRoLm1heChpLG8ubWF4Wm9vbSk7dGhpcy5fbGF5ZXJzTWF4Wm9vbT1pPT09LTEvMD92b2lkIDA6aSx0aGlzLl9sYXllcnNNaW5ab29tPXQ9PT0xLzA/dm9pZCAwOnQsZSE9PXRoaXMuX2dldFpvb21TcGFuKCkmJnRoaXMuZmlyZShcInpvb21sZXZlbHNjaGFuZ2VcIiksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1heFpvb20mJnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuZ2V0Wm9vbSgpPnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNYXhab29tKSx2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbSYmdGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5nZXRab29tKCk8dGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5zZXRab29tKHRoaXMuX2xheWVyc01pblpvb20pfX0pO3ZhciB6ZT1NZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt2YXIgZSxuO2lmKGModGhpcyxpKSx0aGlzLl9sYXllcnM9e30sdClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxhZGRMYXllcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldExheWVySWQodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT10LHRoaXMuX21hcCYmdGhpcy5fbWFwLmFkZExheWVyKHQpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPXQgaW4gdGhpcy5fbGF5ZXJzP3Q6dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX2xheWVyc1tpXSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpXSksZGVsZXRlIHRoaXMuX2xheWVyc1tpXSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJihcIm51bWJlclwiPT10eXBlb2YgdD90OnRoaXMuZ2V0TGF5ZXJJZCh0KSlpbiB0aGlzLl9sYXllcnN9LGNsZWFyTGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaExheWVyKHRoaXMucmVtb3ZlTGF5ZXIsdGhpcyl9LGludm9rZTpmdW5jdGlvbih0KXt2YXIgaSxlLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpIGluIHRoaXMuX2xheWVycykoZT10aGlzLl9sYXllcnNbaV0pW3RdJiZlW3RdLmFwcGx5KGUsbik7cmV0dXJuIHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQuYWRkTGF5ZXIsdCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQucmVtb3ZlTGF5ZXIsdCl9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sZ2V0TGF5ZXJzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaExheWVyKHQucHVzaCx0KSx0fSxzZXRaSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKFwic2V0WkluZGV4XCIsdCl9LGdldExheWVySWQ6bX0
24510pLENlPXplLmV4dGVuZCh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/dGhpczoodC5hZGRFdmVudFBhcmVudCh0aGlzKSx6ZS5wcm90b3R5cGUuYWRkTGF5ZXIuY2FsbCh0aGlzLHQpLHRoaXMuZmlyZShcImxheWVyYWRkXCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSx0LnJlbW92ZUV2ZW50UGFyZW50KHRoaXMpLHplLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKFwibGF5ZXJyZW1vdmVcIix7bGF5ZXI6dH0pKTp0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoXCJzZXRTdHlsZVwiLHQpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZva2UoXCJicmluZ1RvRnJvbnRcIil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKFwiYnJpbmdUb0JhY2tcIil9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PW5ldyBSO2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpe3ZhciBlPXRoaXMuX2xheWVyc1tpXTt0LmV4dGVuZChlLmdldEJvdW5kcz9lLmdldEJvdW5kcygpOmUuZ2V0TGF0TG5nKCkpfXJldHVybiB0fX0pLFNlPVMuZXh0ZW5kKHtvcHRpb25zOntwb3B1cEFuY2hvcjpbMCwwXSx0b29sdGlwQW5jaG9yOlswLDBdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sY3JlYXRlSWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbihcImljb25cIix0KX0sY3JlYXRlU2hhZG93OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVJY29uKFwic2hhZG93XCIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighZSl7aWYoXCJpY29uXCI9PT10KXRocm93IG5ldyBFcnJvcihcImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuXCIpO3JldHVybiBudWxsfXZhciBuPXRoaXMuX2NyZWF0ZUltZyhlLGkmJlwiSU1HXCI9PT1pLnRhZ05hbWU/aTpudWxsKTtyZXR1cm4gdGhpcy5fc2V0SWNvblN0eWxlcyhuLHQpLG59LF9zZXRJY29uU3R5bGVzOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLG49ZVtpK1wiU2l6ZVwiXTtcIm51bWJlclwiPT10eXBlb2YgbiYmKG49W24sbl0pO3ZhciBvPUEobikscz1BKFwic2hhZG93XCI9PT1pJiZlLnNoYWRvd0FuY2hvcnx8ZS5pY29uQW5jaG9yfHxvJiZvLmRpdmlkZUJ5KDIsITApKTt0LmNsYXNzTmFtZT1cImxlYWZsZXQtbWFya2VyLVwiK2krXCIgXCIrKGUuY2xhc3NOYW1lfHxcIlwiKSxzJiYodC5zdHlsZS5tYXJnaW5MZWZ0PS1zLngrXCJweFwiLHQuc3R5bGUubWFyZ2luVG9wPS1zLnkrXCJweFwiKSxvJiYodC5zdHlsZS53aWR0aD1vLngrXCJweFwiLHQuc3R5bGUuaGVpZ2h0PW8ueStcInB4XCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuKGk9aXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKSkuc3JjPXQsaX0sX2dldEljb25Vcmw6ZnVuY3Rpb24odCl7cmV0dXJuIHp0JiZ0aGlzLm9wdGlvbnNbdCtcIlJldGluYVVybFwiXXx8dGhpcy5vcHRpb25zW3QrXCJVcmxcIl19fSk7dmFyIFplPVNlLmV4dGVuZCh7b3B0aW9uczp7aWNvblVybDpcIm1hcmtlci1pY29uLnBuZ1wiLGljb25SZXRpbmFVcmw6XCJtYXJrZXItaWNvbi0yeC5wbmdcIixzaGFkb3dVcmw6XCJtYXJrZXItc2hhZG93LnBuZ1wiLGljb25TaXplOlsyNSw0MV0saWNvbkFuY2hvcjpbMTIsNDFdLHBvcHVwQW5jaG9yOlsxLC0zNF0sdG9vbHRpcEFuY2hvcjpbMTYsLTI4XSxzaGFkb3dTaXplOls0MSw0MV19LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBaZS5pbWFnZVBhdGh8fChaZS5pbWFnZVBhdGg9dGhpcy5fZGV0ZWN0SWNvblBhdGgoKSksKHRoaXMub3B0aW9ucy5pbWFnZVBhdGh8fFplLmltYWdlUGF0aCkrU2UucHJvdG90eXBlLl9nZXRJY29uVXJsLmNhbGwodGhpcyx0KX0sX2RldGVjdEljb25QYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9c2koXCJkaXZcIixcImxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGhcIixkb2N1bWVudC5ib2R5KSxpPW9pKHQsXCJiYWNrZ3JvdW5kLWltYWdlXCIpfHxvaSh0LFwiYmFja2dyb3VuZEltYWdlXCIpO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGk9bnVsbD09PWl8fDAhPT1pLmluZGV4T2YoXCJ1cmxcIik/XCJcIjppLnJlcGxhY2UoL151cmxcXChbXCInXT8vLFwiXCIpLnJlcGxhY2UoL21hcmtlci1pY29uXFwucG5nW1wiJ10/XFwpJC8sXCJcIil9fSksRWU9aWUuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlcj10fSxhZGRIb29rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcmtlci5faWNvbjt0aGlzLl9kcmFnZ2FibGV8fCh0aGlzLl9kcmFnZ2FibGU9bmV3IGFlKHQsdCwhMCkpLHRoaXMuX2RyYWdnYWJsZS5vbih7ZHJhZ3N0YXJ0OnRoaXMuX29uRHJhZ1N0YXJ0LHByZWRyYWc6dGhpcy5fb25QcmVEcmFnLGRyYWc6dGhpcy5fb25EcmFnLGRyYWdlbmQ6dGhpcy5fb25EcmFnRW5kfSx0aGlzKS5lbmFibGUoKSxjaSh0LFwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlXCIpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5vZmYoe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxwcmVkcmFnOnRoaXMuX29uUHJlRHJhZyxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcykuZGlzYWJsZSgpLHRoaXMuX21hcmtlci5faWNvbiYmX2kodGhpcy5fbWFya2VyLl9pY29uLFwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlXCIpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LF9hZGp1c3RQYW46ZnVuY3Rpb24odCl7dmFyIGksZT10aGlzLl9tYXJrZXIsbj1lLl9tYXAsbz10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuU3BlZWQscz10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuUGFkZGluZyxyPXlpKGUuX2ljb24pLGE9bi5nZXRQaXhlbEJvdW5kcygpLGg9bi5nZXRQaXhlbE9yaWdpbigpLHU9TyhhLm1pbi5fc3VidHJhY3QoaCkuYWRkKHMpLGEubWF4Ll9zdWJ0cmFjdChoKS5zdWJ0cmFjdChzKSk7dS5jb250YWlucyhyKXx8KGk9QSgoTWF0aC5tYXgodS5tYXgueCxyLngpLXUubWF4LngpLyhhLm1heC54LXUubWF4LngpLShNYXRoLm1pbih1Lm1pbi54LHIueCktdS5taW4ueCkvKGEubWluLngtdS5taW4ueCksKE1hdGgubWF4KHUubWF4Lnksci55KS11Lm1heC55KS8oYS5tYXgueS11Lm1heC55KS0oTWF0aC5taW4odS5taW4ueSxyLnkpLXUubWluLnkpLyhhLm1pbi55LXUubWluLnkpKS5tdWx0aXBseUJ5KG8pLG4ucGFuQnkoaSx7YW5pbWF0ZTohMX0pLHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLl9hZGQoaSksdGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5fYWRkKGkpLHZpKGUuX2ljb24sdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MpLHRoaXMuX29uRHJhZyh0KSx0aGlzLl9wYW5SZXF1ZXN0PU0odGhpcy5fYWRqdXN0UGFuLmJpbmQodGhpcyx0KSkpfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9vbGRMYXRMbmc9dGhpcy5fbWFya2VyLmdldExhdExuZygpLHRoaXMuX21hcmtlci5jbG9zZVBvcHVwJiZ0aGlzLl9tYXJrZXIuY2xvc2VQb3B1cCgpLHRoaXMuX21hcmtlci5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIil9LF9vblByZURyYWc6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhbiYmKHoodGhpcy5fcGFuUmVxdWVzdCksdGhpcy5fcGFuUmVxdWVzdD1NKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsdCkpKX0sX29uRHJhZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXJrZXIsZT1pLl9zaGFkb3csbj15aShpLl9pY29uKSxvPWkuX21hcC5sYXllclBvaW50VG9MYXRMbmcobik7ZSYmdmkoZSxuKSxpLl9sYXRsbmc9byx0LmxhdGxuZz1vLHQub2xkTGF0TG5nPXRoaXMuX29sZExhdExuZyxpLmZpcmUoXCJtb3ZlXCIsdCkuZmlyZShcImRyYWdcIix0KX0sX29uRHJhZ0VuZDpmdW5jdGlvbih0KXt6KHRoaXMuX3BhblJlcXVlc3QpLGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmcsdGhpcy5fbWFya2VyLmZpcmUoXCJtb3ZlZW5kXCIpLmZpcmUoXCJkcmFnZW5kXCIsdCl9fSksa2U9TWUuZXh0ZW5kKHtvcHRpb25zOntpY29uOm5ldyBaZSxpbnRlcmFjdGl2ZTohMCxrZXl
24510ib2FyZDohMCx0aXRsZTpcIlwiLGFsdDpcIlwiLHpJbmRleE9mZnNldDowLG9wYWNpdHk6MSxyaXNlT25Ib3ZlcjohMSxyaXNlT2Zmc2V0OjI1MCxwYW5lOlwibWFya2VyUGFuZVwiLHNoYWRvd1BhbmU6XCJzaGFkb3dQYW5lXCIsYnViYmxpbmdNb3VzZUV2ZW50czohMSxkcmFnZ2FibGU6ITEsYXV0b1BhbjohMSxhdXRvUGFuUGFkZGluZzpbNTAsNTBdLGF1dG9QYW5TcGVlZDoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2ModGhpcyxpKSx0aGlzLl9sYXRsbmc9aih0KX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMuX3pvb21BbmltYXRlZCYmdC5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sdGhpcy5fem9vbUFuaW1hdGVkJiZ0Lm9uKFwiem9vbWFuaW1cIix0aGlzLl9hbmltYXRlWm9vbSx0aGlzKSx0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpJiYodGhpcy5vcHRpb25zLmRyYWdnYWJsZT0hMCx0aGlzLmRyYWdnaW5nLnJlbW92ZUhvb2tzKCkpLGRlbGV0ZSB0aGlzLmRyYWdnaW5nLHRoaXMuX3pvb21BbmltYXRlZCYmdC5vZmYoXCJ6b29tYW5pbVwiLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7cmV0dXJue3pvb206dGhpcy51cGRhdGUsdmlld3Jlc2V0OnRoaXMudXBkYXRlfX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2xhdGxuZztyZXR1cm4gdGhpcy5fbGF0bG5nPWoodCksdGhpcy51cGRhdGUoKSx0aGlzLmZpcmUoXCJtb3ZlXCIse29sZExhdExuZzppLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKX0sZ2V0SWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbn0sc2V0SWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb249dCx0aGlzLl9tYXAmJih0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLmJpbmRQb3B1cCh0aGlzLl9wb3B1cCx0aGlzLl9wb3B1cC5vcHRpb25zKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb259LHVwZGF0ZTpmdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLl9pY29uJiZ0aGlzLl9tYXAmJih0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpLHRoaXMuX3NldFBvcyh0KSksdGhpc30sX2luaXRJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGk9XCJsZWFmbGV0LXpvb20tXCIrKHRoaXMuX3pvb21BbmltYXRlZD9cImFuaW1hdGVkXCI6XCJoaWRlXCIpLGU9dC5pY29uLmNyZWF0ZUljb24odGhpcy5faWNvbiksbj0hMTtlIT09dGhpcy5faWNvbiYmKHRoaXMuX2ljb24mJnRoaXMuX3JlbW92ZUljb24oKSxuPSEwLHQudGl0bGUmJihlLnRpdGxlPXQudGl0bGUpLFwiSU1HXCI9PT1lLnRhZ05hbWUmJihlLmFsdD10LmFsdHx8XCJcIikpLGNpKGUsaSksdC5rZXlib2FyZCYmKGUudGFiSW5kZXg9XCIwXCIpLHRoaXMuX2ljb249ZSx0LnJpc2VPbkhvdmVyJiZ0aGlzLm9uKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSk7dmFyIG89dC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLHM9ITE7byE9PXRoaXMuX3NoYWRvdyYmKHRoaXMuX3JlbW92ZVNoYWRvdygpLHM9ITApLG8mJihjaShvLGkpLG8uYWx0PVwiXCIpLHRoaXMuX3NoYWRvdz1vLHQub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksbiYmdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faWNvbiksdGhpcy5faW5pdEludGVyYWN0aW9uKCksbyYmcyYmdGhpcy5nZXRQYW5lKHQuc2hhZG93UGFuZSkuYXBwZW5kQ2hpbGQodGhpcy5fc2hhZG93KX0sX3JlbW92ZUljb246ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMucmlzZU9uSG92ZXImJnRoaXMub2ZmKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSkscmkodGhpcy5faWNvbiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJnJpKHRoaXMuX3NoYWRvdyksdGhpcy5fc2hhZG93PW51bGx9LF9zZXRQb3M6ZnVuY3Rpb24odCl7dGhpcy5faWNvbiYmdmkodGhpcy5faWNvbix0KSx0aGlzLl9zaGFkb3cmJnZpKHRoaXMuX3NoYWRvdyx0KSx0aGlzLl96SW5kZXg9dC55K3RoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQsdGhpcy5fcmVzZXRaSW5kZXgoKX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl9pY29uJiYodGhpcy5faWNvbi5zdHlsZS56SW5kZXg9dGhpcy5fekluZGV4K3QpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoaSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihjaSh0aGlzLl9pY29uLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLEVlJiYodD10aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLHRoaXMuZHJhZ2dpbmcmJih0PXRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpLHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpKSx0aGlzLmRyYWdnaW5nPW5ldyBFZSh0aGlzKSx0JiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpKSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTt0aGlzLl9pY29uJiZtaSh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmbWkodGhpcy5fc2hhZG93LHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pO3ZhciBCZT1NZS5leHRlbmQoe29wdGlvbnM6e3N0cm9rZTohMCxjb2xvcjpcIiMzMzg4ZmZcIix3ZWlnaHQ6MyxvcGFjaXR5OjEsbGluZUNhcDpcInJvdW5kXCIsbGluZUpvaW46XCJyb3VuZFwiLGRhc2hBcnJheTpudWxsLGRhc2hPZmZzZXQ6bnVsbCxmaWxsOiExLGZpbGxDb2xvcjpudWxsLGZpbGxPcGFjaXR5Oi4yLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGludGVyYWN0aXZlOiEwLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlcj10LmdldFJlbmRlcmVyKHRoaXMpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9pbml0UGF0aCh0aGlzKSx0aGlzLl9yZXNldCgpLHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9yZW1vdmVQYXRoKHRoaXMpfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aC
24510h0aGlzKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0aGlzLHQpLHRoaXMuX3JlbmRlcmVyJiYodGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVN0eWxlKHRoaXMpLHRoaXMub3B0aW9ucy5zdHJva2UmJnQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LFwid2VpZ2h0XCIpJiZ0aGlzLl91cGRhdGVCb3VuZHMoKSksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXRofSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0KCksdGhpcy5fdXBkYXRlKCl9LF9jbGlja1RvbGVyYW5jZTpmdW5jdGlvbigpe3JldHVybih0aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowKSt0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZX19KSxBZT1CZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITAscmFkaXVzOjEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7Yyh0aGlzLGkpLHRoaXMuX2xhdGxuZz1qKHQpLHRoaXMuX3JhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbGF0bG5nO3JldHVybiB0aGlzLl9sYXRsbmc9aih0KSx0aGlzLnJlZHJhdygpLHRoaXMuZmlyZShcIm1vdmVcIix7b2xkTGF0TG5nOmksbGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dCYmdC5yYWRpdXN8fHRoaXMuX3JhZGl1cztyZXR1cm4gQmUucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcyx0KSx0aGlzLnNldFJhZGl1cyhpKSx0aGlzfSxfcHJvamVjdDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl91cGRhdGVCb3VuZHMoKX0sX3VwZGF0ZUJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JhZGl1cyxpPXRoaXMuX3JhZGl1c1l8fHQsZT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLG49W3QrZSxpK2VdO3RoaXMuX3B4Qm91bmRzPW5ldyBJKHRoaXMuX3BvaW50LnN1YnRyYWN0KG4pLHRoaXMuX3BvaW50LmFkZChuKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBhdGgoKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlQ2lyY2xlKHRoaXMpfSxfZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzJiYhdGhpcy5fcmVuZGVyZXIuX2JvdW5kcy5pbnRlcnNlY3RzKHRoaXMuX3B4Qm91bmRzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCk8PXRoaXMuX3JhZGl1cyt0aGlzLl9jbGlja1RvbGVyYW5jZSgpfX0pO3ZhciBJZT1BZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBpJiYoaT1oKHt9LGUse3JhZGl1czppfSkpLGModGhpcyxpKSx0aGlzLl9sYXRsbmc9aih0KSxpc05hTih0aGlzLm9wdGlvbnMucmFkaXVzKSl0aHJvdyBuZXcgRXJyb3IoXCJDaXJjbGUgcmFkaXVzIGNhbm5vdCBiZSBOYU5cIik7dGhpcy5fbVJhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21SYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxnZXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbVJhZGl1c30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuX3JhZGl1cyx0aGlzLl9yYWRpdXNZfHx0aGlzLl9yYWRpdXNdO3JldHVybiBuZXcgUih0aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50LnN1YnRyYWN0KHQpKSx0aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50LmFkZCh0KSkpfSxzZXRTdHlsZTpCZS5wcm90b3R5cGUuc2V0U3R5bGUsX3Byb2plY3Q6ZnVuY3Rpb24oKXt2YXIgdCxpLGUsbixvLHMscixhLGg9dGhpcy5fbGF0bG5nLmxuZyx1PXRoaXMuX2xhdGxuZy5sYXQsbD10aGlzLl9tYXAsYz1sLm9wdGlvbnMuY3JzO2MuZGlzdGFuY2U9PT1GLmRpc3RhbmNlPyh0PU1hdGguUEkvMTgwLGk9dGhpcy5fbVJhZGl1cy9GLlIvdCxlPWwucHJvamVjdChbdStpLGhdKSxuPWwucHJvamVjdChbdS1pLGhdKSxvPWUuYWRkKG4pLmRpdmlkZUJ5KDIpLHM9bC51bnByb2plY3QobykubGF0LHI9TWF0aC5hY29zKChNYXRoLmNvcyhpKnQpLU1hdGguc2luKHUqdCkqTWF0aC5zaW4ocyp0KSkvKE1hdGguY29zKHUqdCkqTWF0aC5jb3Mocyp0KSkpL3QsIWlzTmFOKHIpJiYwIT09cnx8KHI9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp1KSksdGhpcy5fcG9pbnQ9by5zdWJ0cmFjdChsLmdldFBpeGVsT3JpZ2luKCkpLHRoaXMuX3JhZGl1cz1pc05hTihyKT8wOm8ueC1sLnByb2plY3QoW3MsaC1yXSkueCx0aGlzLl9yYWRpdXNZPW8ueS1lLnkpOihhPWMudW5wcm9qZWN0KGMucHJvamVjdCh0aGlzLl9sYXRsbmcpLnN1YnRyYWN0KFt0aGlzLl9tUmFkaXVzLDBdKSksdGhpcy5fcG9pbnQ9bC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl9yYWRpdXM9dGhpcy5fcG9pbnQueC1sLmxhdExuZ1RvTGF5ZXJQb2ludChhKS54KSx0aGlzLl91cGRhdGVCb3VuZHMoKX19KTt2YXIgT2U9QmUuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtjKHRoaXMsaSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49MS8wLG89bnVsbCxzPWRlLHI9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtyPGE7cisrKWZvcih2YXIgaD10aGlzLl9wYXJ0c1tyXSx1PTEsbD1oLmxlbmd0aDt1PGw7dSsrKXt2YXIgYz1zKHQsaT1oW3UtMV0sZT1oW3VdLCEwKTtjPG4mJihuPWMsbz1zKHQsaSxlKSl9cmV0dXJuIG8mJihvLmRpc3RhbmNlPU1hdGguc3FydChuKSksb30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpXCIpO3ZhciB0LGksZSxuLG8scyxyLGE9dGhpcy5fcmluZ3NbMF0saD1hLmxlbmd0aDtpZighaClyZXR1cm4gbnVsbDtmb3IoaT10PTA7dDxoLTE7dCsrKWkrPWFbdF0uZGlzdGFuY2VUbyhhW3QrMV0pLzI7aWYoMD09PWkpcmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoYVswXSk7Zm9yKG49dD0wO3Q8aC0xO3QrKylpZihvPWFbdF0scz1hW3QrMV0saTwobis9ZT1vLmRpc3RhbmNlVG8ocykpKXJldHVybi
24510ByPShuLWkpL2UsdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhbcy54LXIqKHMueC1vLngpLHMueS1yKihzLnktby55KV0pfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm91bmRzfSxhZGRMYXRMbmc6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaT1pfHx0aGlzLl9kZWZhdWx0U2hhcGUoKSx0PWoodCksaS5wdXNoKHQpLHRoaXMuX2JvdW5kcy5leHRlbmQodCksdGhpcy5yZWRyYXcoKX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7dGhpcy5fYm91bmRzPW5ldyBSLHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModCl9LF9kZWZhdWx0U2hhcGU6ZnVuY3Rpb24oKXtyZXR1cm4gcGUodGhpcy5fbGF0bG5ncyk/dGhpcy5fbGF0bG5nczp0aGlzLl9sYXRsbmdzWzBdfSxfY29udmVydExhdExuZ3M6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPVtdLGU9cGUodCksbj0wLG89dC5sZW5ndGg7bjxvO24rKyllPyhpW25dPWoodFtuXSksdGhpcy5fYm91bmRzLmV4dGVuZChpW25dKSk6aVtuXT10aGlzLl9jb252ZXJ0TGF0TG5ncyh0W25dKTtyZXR1cm4gaX0sX3Byb2plY3Q6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgSTt0aGlzLl9yaW5ncz1bXSx0aGlzLl9wcm9qZWN0TGF0bG5ncyh0aGlzLl9sYXRsbmdzLHRoaXMuX3JpbmdzLHQpLHRoaXMuX2JvdW5kcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpJiYodGhpcy5fcmF3UHhCb3VuZHM9dCx0aGlzLl91cGRhdGVCb3VuZHMoKSl9LF91cGRhdGVCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jbGlja1RvbGVyYW5jZSgpLGk9bmV3IGsodCx0KTt0aGlzLl9weEJvdW5kcz1uZXcgSShbdGhpcy5fcmF3UHhCb3VuZHMubWluLnN1YnRyYWN0KGkpLHRoaXMuX3Jhd1B4Qm91bmRzLm1heC5hZGQoaSldKX0sX3Byb2plY3RMYXRsbmdzOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbixvLHM9dFswXWluc3RhbmNlb2YgRCxyPXQubGVuZ3RoO2lmKHMpe2ZvcihvPVtdLG49MDtuPHI7bisrKW9bbl09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0W25dKSxlLmV4dGVuZChvW25dKTtpLnB1c2gobyl9ZWxzZSBmb3Iobj0wO248cjtuKyspdGhpcy5fcHJvamVjdExhdGxuZ3ModFtuXSxpLGUpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlbmRlcmVyLl9ib3VuZHM7aWYodGhpcy5fcGFydHM9W10sdGhpcy5fcHhCb3VuZHMmJnRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHModCkpaWYodGhpcy5vcHRpb25zLm5vQ2xpcCl0aGlzLl9wYXJ0cz10aGlzLl9yaW5ncztlbHNlIGZvcih2YXIgaSxlLG4sbyxzPXRoaXMuX3BhcnRzLHI9MCxhPTAsaD10aGlzLl9yaW5ncy5sZW5ndGg7cjxoO3IrKylmb3IoaT0wLGU9KG89dGhpcy5fcmluZ3Nbcl0pLmxlbmd0aDtpPGUtMTtpKyspKG49bGUob1tpXSxvW2krMV0sdCxpLCEwKSkmJihzW2FdPXNbYV18fFtdLHNbYV0ucHVzaChuWzBdKSxuWzFdPT09b1tpKzFdJiZpIT09ZS0yfHwoc1thXS5wdXNoKG5bMV0pLGErKykpfSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsaT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXT1oZSh0W2VdLGkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKCF0aGlzLl9weEJvdW5kc3x8IXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHQpKXJldHVybiExO2ZvcihlPTAscz10aGlzLl9wYXJ0cy5sZW5ndGg7ZTxzO2UrKylmb3Iobj0wLG89KHI9KGE9dGhpcy5fcGFydHNbZV0pLmxlbmd0aCktMTtuPHI7bz1uKyspaWYoKGl8fDAhPT1uKSYmdWUodCxhW29dLGFbbl0pPD1oKXJldHVybiEwO3JldHVybiExfX0pO09lLl9mbGF0PW1lO3ZhciBSZT1PZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITB9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh8fCF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aH0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpXCIpO3ZhciB0LGksZSxuLG8scyxyLGEsaCx1PXRoaXMuX3JpbmdzWzBdLGw9dS5sZW5ndGg7aWYoIWwpcmV0dXJuIG51bGw7Zm9yKHQ9cz1yPWE9MCxpPWwtMTt0PGw7aT10KyspZT11W3RdLG49dVtpXSxvPWUueSpuLngtbi55KmUueCxyKz0oZS54K24ueCkqbyxhKz0oZS55K24ueSkqbyxzKz0zKm87cmV0dXJuIGg9MD09PXM/dVswXTpbci9zLGEvc10sdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhoKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe3ZhciBpPU9lLnByb3RvdHlwZS5fY29udmVydExhdExuZ3MuY2FsbCh0aGlzLHQpLGU9aS5sZW5ndGg7cmV0dXJuIDI8PWUmJmlbMF1pbnN0YW5jZW9mIEQmJmlbMF0uZXF1YWxzKGlbZS0xXSkmJmkucG9wKCksaX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7T2UucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcyx0KSxwZSh0aGlzLl9sYXRsbmdzKSYmKHRoaXMuX2xhdGxuZ3M9W3RoaXMuX2xhdGxuZ3NdKX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBwZSh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzWzBdOnRoaXMuX2xhdGxuZ3NbMF1bMF19LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcyxpPXRoaXMub3B0aW9ucy53ZWlnaHQsZT1uZXcgayhpLGkpLHQ9bmV3IEkodC5taW4uc3VidHJhY3QoZSksdC5tYXguYWRkKGUpKTtpZih0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2UgZm9yKHZhciBuLG89MCxzPXRoaXMuX3JpbmdzLmxlbmd0aDtvPHM7bysrKShuPWdlKHRoaXMuX3JpbmdzW29dLHQsITApKS5sZW5ndGgmJnRoaXMuX3BhcnRzLnB1c2gobil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcywhMCl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbi
24510xvLHMscixhLGgsdT0hMTtpZighdGhpcy5fcHhCb3VuZHN8fCF0aGlzLl9weEJvdW5kcy5jb250YWlucyh0KSlyZXR1cm4hMTtmb3Iobz0wLGE9dGhpcy5fcGFydHMubGVuZ3RoO288YTtvKyspZm9yKHM9MCxyPShoPShpPXRoaXMuX3BhcnRzW29dKS5sZW5ndGgpLTE7czxoO3I9cysrKWU9aVtzXSxuPWlbcl0sZS55PnQueSE9bi55PnQueSYmdC54PChuLngtZS54KSoodC55LWUueSkvKG4ueS1lLnkpK2UueCYmKHU9IXUpO3JldHVybiB1fHxPZS5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApfX0pO3ZhciBOZT1DZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtjKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9LHQmJnRoaXMuYWRkRGF0YSh0KX0sYWRkRGF0YTpmdW5jdGlvbih0KXt2YXIgaSxlLG4sbz1nKHQpP3Q6dC5mZWF0dXJlcztpZihvKXtmb3IoaT0wLGU9by5sZW5ndGg7aTxlO2krKykoKG49b1tpXSkuZ2VvbWV0cmllc3x8bi5nZW9tZXRyeXx8bi5mZWF0dXJlc3x8bi5jb29yZGluYXRlcykmJnRoaXMuYWRkRGF0YShuKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm9wdGlvbnM7aWYocy5maWx0ZXImJiFzLmZpbHRlcih0KSlyZXR1cm4gdGhpczt2YXIgcj1EZSh0LHMpO3JldHVybiByPyhyLmZlYXR1cmU9cWUodCksci5kZWZhdWx0T3B0aW9ucz1yLm9wdGlvbnMsdGhpcy5yZXNldFN0eWxlKHIpLHMub25FYWNoRmVhdHVyZSYmcy5vbkVhY2hGZWF0dXJlKHQsciksdGhpcy5hZGRMYXllcihyKSk6dGhpc30scmVzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmVhY2hMYXllcih0aGlzLnJlc2V0U3R5bGUsdGhpcyk6KHQub3B0aW9ucz1oKHt9LHQuZGVmYXVsdE9wdGlvbnMpLHRoaXMuX3NldExheWVyU3R5bGUodCx0aGlzLm9wdGlvbnMuc3R5bGUpLHRoaXMpfSxzZXRTdHlsZTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24odCl7dGhpcy5fc2V0TGF5ZXJTdHlsZSh0LGkpfSx0aGlzKX0sX3NldExheWVyU3R5bGU6ZnVuY3Rpb24odCxpKXt0LnNldFN0eWxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgaSYmKGk9aSh0LmZlYXR1cmUpKSx0LnNldFN0eWxlKGkpKX19KTtmdW5jdGlvbiBEZSh0LGkpe3ZhciBlLG4sbyxzLHI9XCJGZWF0dXJlXCI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LGE9cj9yLmNvb3JkaW5hdGVzOm51bGwsaD1bXSx1PWkmJmkucG9pbnRUb0xheWVyLGw9aSYmaS5jb29yZHNUb0xhdExuZ3x8V2U7aWYoIWEmJiFyKXJldHVybiBudWxsO3N3aXRjaChyLnR5cGUpe2Nhc2VcIlBvaW50XCI6cmV0dXJuIGplKHUsdCxlPWwoYSksaSk7Y2FzZVwiTXVsdGlQb2ludFwiOmZvcihvPTAscz1hLmxlbmd0aDtvPHM7bysrKWU9bChhW29dKSxoLnB1c2goamUodSx0LGUsaSkpO3JldHVybiBuZXcgQ2UoaCk7Y2FzZVwiTGluZVN0cmluZ1wiOmNhc2VcIk11bHRpTGluZVN0cmluZ1wiOnJldHVybiBuPUhlKGEsXCJMaW5lU3RyaW5nXCI9PT1yLnR5cGU/MDoxLGwpLG5ldyBPZShuLGkpO2Nhc2VcIlBvbHlnb25cIjpjYXNlXCJNdWx0aVBvbHlnb25cIjpyZXR1cm4gbj1IZShhLFwiUG9seWdvblwiPT09ci50eXBlPzE6MixsKSxuZXcgUmUobixpKTtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjpmb3Iobz0wLHM9ci5nZW9tZXRyaWVzLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1EZSh7Z2VvbWV0cnk6ci5nZW9tZXRyaWVzW29dLHR5cGU6XCJGZWF0dXJlXCIscHJvcGVydGllczp0LnByb3BlcnRpZXN9LGkpO2MmJmgucHVzaChjKX1yZXR1cm4gbmV3IENlKGgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBHZW9KU09OIG9iamVjdC5cIil9fWZ1bmN0aW9uIGplKHQsaSxlLG4pe3JldHVybiB0P3QoaSxlKTpuZXcga2UoZSxuJiZuLm1hcmtlcnNJbmhlcml0T3B0aW9ucyYmbil9ZnVuY3Rpb24gV2UodCl7cmV0dXJuIG5ldyBEKHRbMV0sdFswXSx0WzJdKX1mdW5jdGlvbiBIZSh0LGksZSl7Zm9yKHZhciBuLG89W10scz0wLHI9dC5sZW5ndGg7czxyO3MrKyluPWk/SGUodFtzXSxpLTEsZSk6KGV8fFdlKSh0W3NdKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gRmUodCxpKXtyZXR1cm4gaT1cIm51bWJlclwiPT10eXBlb2YgaT9pOjYsdm9pZCAwIT09dC5hbHQ/W3IodC5sbmcsaSkscih0LmxhdCxpKSxyKHQuYWx0LGkpXTpbcih0LmxuZyxpKSxyKHQubGF0LGkpXX1mdW5jdGlvbiBVZSh0LGksZSxuKXtmb3IodmFyIG89W10scz0wLHI9dC5sZW5ndGg7czxyO3MrKylvLnB1c2goaT9VZSh0W3NdLGktMSxlLG4pOkZlKHRbc10sbikpO3JldHVybiFpJiZlJiZvLnB1c2gob1swXSksb31mdW5jdGlvbiBWZSh0LGkpe3JldHVybiB0LmZlYXR1cmU/aCh7fSx0LmZlYXR1cmUse2dlb21ldHJ5Oml9KTpxZShpKX1mdW5jdGlvbiBxZSh0KXtyZXR1cm5cIkZlYXR1cmVcIj09PXQudHlwZXx8XCJGZWF0dXJlQ29sbGVjdGlvblwiPT09dC50eXBlP3Q6e3R5cGU6XCJGZWF0dXJlXCIscHJvcGVydGllczp7fSxnZW9tZXRyeTp0fX12YXIgR2U9e3RvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gVmUodGhpcyx7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6RmUodGhpcy5nZXRMYXRMbmcoKSx0KX0pfX07ZnVuY3Rpb24gS2UodCxpKXtyZXR1cm4gbmV3IE5lKHQsaSl9a2UuaW5jbHVkZShHZSksSWUuaW5jbHVkZShHZSksQWUuaW5jbHVkZShHZSksT2UuaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPSFwZSh0aGlzLl9sYXRsbmdzKTtyZXR1cm4gVmUodGhpcyx7dHlwZTooaT9cIk11bHRpXCI6XCJcIikrXCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6VWUodGhpcy5fbGF0bG5ncyxpPzE6MCwhMSx0KX0pfX0pLFJlLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbih0KXt2YXIgaT0hcGUodGhpcy5fbGF0bG5ncyksZT1pJiYhcGUodGhpcy5fbGF0bG5nc1swXSksbj1VZSh0aGlzLl9sYXRsbmdzLGU/MjppPzE6MCwhMCx0KTtyZXR1cm4gaXx8KG49W25dKSxWZSh0aGlzLHt0eXBlOihlP1wiTXVsdGlcIjpcIlwiKStcIlBvbHlnb25cIixjb29yZGluYXRlczpufSl9fSksemUuaW5jbHVkZSh7dG9NdWx0aVBvaW50OmZ1bmN0aW9uKGkpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXtlLnB1c2godC50b0dlb0pTT04oaSkuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpfSksVmUodGhpcyx7dHlwZTpcIk11bHRpUG9pbnRcIixjb29yZGluYX
24510RlczplfSl9LHRvR2VvSlNPTjpmdW5jdGlvbihuKXt2YXIgdD10aGlzLmZlYXR1cmUmJnRoaXMuZmVhdHVyZS5nZW9tZXRyeSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5LnR5cGU7aWYoXCJNdWx0aVBvaW50XCI9PT10KXJldHVybiB0aGlzLnRvTXVsdGlQb2ludChuKTt2YXIgbz1cIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09dCxzPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXt2YXIgaSxlO3QudG9HZW9KU09OJiYoaT10LnRvR2VvSlNPTihuKSxvP3MucHVzaChpLmdlb21ldHJ5KTpcIkZlYXR1cmVDb2xsZWN0aW9uXCI9PT0oZT1xZShpKSkudHlwZT9zLnB1c2guYXBwbHkocyxlLmZlYXR1cmVzKTpzLnB1c2goZSkpfSksbz9WZSh0aGlzLHtnZW9tZXRyaWVzOnMsdHlwZTpcIkdlb21ldHJ5Q29sbGVjdGlvblwifSk6e3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOnN9fX0pO3ZhciBZZT1LZSxYZT1NZS5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6XCJcIixpbnRlcmFjdGl2ZTohMSxjcm9zc09yaWdpbjohMSxlcnJvck92ZXJsYXlVcmw6XCJcIix6SW5kZXg6MSxjbGFzc05hbWU6XCJcIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPU4oaSksYyh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2ltYWdlfHwodGhpcy5faW5pdEltYWdlKCksdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihjaSh0aGlzLl9pbWFnZSxcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSkpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlKSx0aGlzLl9yZXNldCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe3JpKHRoaXMuX2ltYWdlKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faW1hZ2UpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX2ltYWdlJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3BhY2l0eSYmdGhpcy5zZXRPcGFjaXR5KHQub3BhY2l0eSksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmaGkodGhpcy5faW1hZ2UpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmdWkodGhpcy5faW1hZ2UpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXJsPXQsdGhpcy5faW1hZ2UmJih0aGlzLl9pbWFnZS5zcmM9dCksdGhpc30sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ib3VuZHM9Tih0KSx0aGlzLl9tYXAmJnRoaXMuX3Jlc2V0KCksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3pvb206dGhpcy5fcmVzZXQsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0fTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9hbmltYXRlWm9vbSksdH0sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZX0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PVwiSU1HXCI9PT10aGlzLl91cmwudGFnTmFtZSxpPXRoaXMuX2ltYWdlPXQ/dGhpcy5fdXJsOnNpKFwiaW1nXCIpO2NpKGksXCJsZWFmbGV0LWltYWdlLWxheWVyXCIpLHRoaXMuX3pvb21BbmltYXRlZCYmY2koaSxcImxlYWZsZXQtem9vbS1hbmltYXRlZFwiKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZjaShpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1hLGkub25tb3VzZW1vdmU9YSxpLm9ubG9hZD1wKHRoaXMuZmlyZSx0aGlzLFwibG9h
24510ZFwiKSxpLm9uZXJyb3I9cCh0aGlzLl9vdmVybGF5T25FcnJvcix0aGlzLFwiZXJyb3JcIiksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGkuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLHRoaXMub3B0aW9ucy56SW5kZXgmJnRoaXMuX3VwZGF0ZVpJbmRleCgpLHQ/dGhpcy5fdXJsPWkuc3JjOihpLnNyYz10aGlzLl91cmwsaS5hbHQ9dGhpcy5vcHRpb25zLmFsdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHQuem9vbSksZT10aGlzLl9tYXAuX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHModGhpcy5fYm91bmRzLHQuem9vbSx0LmNlbnRlcikubWluO2dpKHRoaXMuX2ltYWdlLGUsaSl9LF9yZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ltYWdlLGk9bmV3IEkodGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0Tm9ydGhXZXN0KCkpLHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKSksZT1pLmdldFNpemUoKTt2aSh0LGkubWluKSx0LnN0eWxlLndpZHRoPWUueCtcInB4XCIsdC5zdHlsZS5oZWlnaHQ9ZS55K1wicHhcIn0sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXttaSh0aGlzLl9pbWFnZSx0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9pbWFnZSYmdm9pZCAwIT09dGhpcy5vcHRpb25zLnpJbmRleCYmbnVsbCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJih0aGlzLl9pbWFnZS5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleCl9LF9vdmVybGF5T25FcnJvcjpmdW5jdGlvbigpe3RoaXMuZmlyZShcImVycm9yXCIpO3ZhciB0PXRoaXMub3B0aW9ucy5lcnJvck92ZXJsYXlVcmw7dCYmdGhpcy5fdXJsIT09dCYmKHRoaXMuX3VybD10LHRoaXMuX2ltYWdlLnNyYz10KX19KSxKZT1YZS5leHRlbmQoe29wdGlvbnM6e2F1dG9wbGF5OiEwLGxvb3A6ITAsa2VlcEFzcGVjdFJhdGlvOiEwLG11dGVkOiExfSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9XCJWSURFT1wiPT09dGhpcy5fdXJsLnRhZ05hbWUsaT10aGlzLl9pbWFnZT10P3RoaXMuX3VybDpzaShcInZpZGVvXCIpO2lmKGNpKGksXCJsZWFmbGV0LWltYWdlLWxheWVyXCIpLHRoaXMuX3pvb21BbmltYXRlZCYmY2koaSxcImxlYWZsZXQtem9vbS1hbmltYXRlZFwiKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZjaShpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1hLGkub25tb3VzZW1vdmU9YSxpLm9ubG9hZGVkZGF0YT1wKHRoaXMuZmlyZSx0aGlzLFwibG9h
24510ZFwiKSx0KXtmb3IodmFyIGU9aS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNvdXJjZVwiKSxuPVtdLG89MDtvPGUubGVuZ3RoO28rKyluLnB1c2goZVtvXS5zcmMpO3RoaXMuX3VybD0wPGUubGVuZ3RoP246W2kuc3JjXX1lbHNle2codGhpcy5fdXJsKXx8KHRoaXMuX3VybD1bdGhpcy5fdXJsXSksIXRoaXMub3B0aW9ucy5rZWVwQXNwZWN0UmF0aW8mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLnN0eWxlLFwib2JqZWN0Rml0XCIpJiYoaS5zdHlsZS5vYmplY3RGaXQ9XCJmaWxsXCIpLGkuYXV0b3BsYXk9ISF0aGlzLm9wdGlvbnMuYXV0b3BsYXksaS5sb29wPSEhdGhpcy5vcHRpb25zLmxvb3AsaS5tdXRlZD0hIXRoaXMub3B0aW9ucy5tdXRlZDtmb3IodmFyIHM9MDtzPHRoaXMuX3VybC5sZW5ndGg7cysrKXt2YXIgcj1zaShcInNvdXJjZVwiKTtyLnNyYz10aGlzLl91cmxbc10saS5hcHBlbmRDaGlsZChyKX19fX0pO3ZhciAkZT1YZS5leHRlbmQoe19pbml0SW1hZ2U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZT10aGlzLl91cmw7Y2kodCxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZjaSh0LFwibGVhZmxldC16b29tLWFuaW1hdGVkXCIpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJmNpKHQsdGhpcy5vcHRpb25zLmNsYXNzTmFtZSksdC5vbnNlbGVjdHN0YXJ0PWEsdC5vbm1vdXNlbW92ZT1hfX0pO3ZhciBRZT1NZS5leHRlbmQoe29wdGlvbnM6e29mZnNldDpbMCw3XSxjbGFzc05hbWU6XCJcIixwYW5lOlwicG9wdXBQYW5lXCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtjKHRoaXMsdCksdGhpcy5fc291cmNlPWl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCksdC5fZmFkZUFuaW1hdGVkJiZtaSh0aGlzLl9jb250YWluZXIsMCksY2xlYXJUaW1lb3V0KHRoaXMuX3JlbW92ZVRpbWVvdXQpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy51cGRhdGUoKSx0Ll9mYWRlQW5pbWF0ZWQmJm1pKHRoaXMuX2NvbnRhaW5lciwxKSx0aGlzLmJyaW5nVG9Gcm9udCgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Ll9mYWRlQW5pbWF0ZWQ/KG1pKHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9yZW1vdmVUaW1lb3V0PXNldFRpbWVvdXQocChyaSx2b2lkIDAsdGhpcy5fY29udGFpbmVyKSwyMDApKTpyaSh0aGlzLl9jb250YWluZXIpfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1qKHQpLHRoaXMuX21hcCYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fYWRqdXN0UGFuKCkpLHRoaXN9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudH0sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29udGVudD10LHRoaXMudXBkYXRlKCksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LHVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9XCJcIix0aGlzLl9hZGp1c3RQYW4oKSl9LGdldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXt6b29tOnRoaXMuX3VwZGF0ZVBvc2l0aW9uLHZpZXdyZXNldDp0aGlzLl91cGRhdGVQb3NpdGlvbn07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwJiZ0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcyl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJmhpKHRoaXMuX2NvbnRhaW5lciksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ1aSh0aGlzLl9jb250YWluZXIpLHRoaXN9LF9wcmVwYXJlT3BlbjpmdW5jdGlvbih0LGksZSl7aWYoaSBpbnN0YW5jZW9mIE1lfHwoZT1pLGk9dCksaSBpbnN0YW5jZW9mIENlKWZvcih2YXIgbiBpbiB0Ll9sYXllcnMpe2k9dC5fbGF5ZXJzW25dO2JyZWFrfWlmKCFlKWlmKGkuZ2V0Q2VudGVyKWU9aS5nZXRDZW50ZXIoKTtlbHNle2lmKCFpLmdldExhdExuZyl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IHNvdXJjZSBsYXllciBMYXRMbmcuXCIpO2U9aS5nZXRMYXRMbmcoKX1yZXR1cm4gdGhpcy5fc291cmNlPWksdGhpcy51cGRhdGUoKSxlfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnRlbnQpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fY29udGVudD90aGlzLl9jb250ZW50KHRoaXMuX3NvdXJjZXx8dGhpcyk6dGhpcy5fY29udGVudDtpZihcInN0cmluZ1wiPT10eXBlb2YgaSl0LmlubmVySFRNTD1pO2Vsc2V7Zm9yKDt0Lmhhc0NoaWxkTm9kZXMoKTspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3QuYXBwZW5kQ2hpbGQoaSl9dGhpcy5maXJlKFwiY29udGVudHVwZGF0ZVwiKX19LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0LGksZSxuLG87dGhpcy5fbWFwJiYodD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksaT1BKHRoaXMub3B0aW9ucy5vZmZzZXQpLGU9dGhpcy5fZ2V0QW5jaG9yKCksdGhpcy5fem9vbUFuaW1hdGVkP3ZpKHRoaXMuX2NvbnRhaW5lcix0LmFkZChlKSk6aT1pLmFkZCh0KS5hZGQoZSksbj10aGlzLl9jb250YWluZXJCb3R0b209LWkueSxvPXRoaXMuX2NvbnRhaW5lckxlZnQ9LU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGgvMikraS54LHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209bitcInB4XCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQ9bytcInB4XCIpfSxfZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fSksdG49UWUuZXh0
24510ZW5kKHtvcHRpb25zOnttYXhXaWR0aDozMDAsbWluV2lkdGg6NTAsbWF4SGVpZ2h0Om51bGwsYXV0b1BhbjohMCxhdXRvUGFuUGFkZGluZ1RvcExlZnQ6bnVsbCxhdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0Om51bGwsYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbG9zZUJ1dHRvbjohMCxhdXRvQ2xvc2U6ITAsY2xvc2VPbkVzY2FwZUtleTohMCxjbGFzc05hbWU6XCJcIn0sb3Blbk9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW5Qb3B1cCh0aGlzKSx0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXtRZS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHQuZmlyZShcInBvcHVwb3BlblwiLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiYodGhpcy5fc291cmNlLmZpcmUoXCJwb3B1cG9wZW5cIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIEJlfHx0aGlzLl9zb3VyY2Uub24oXCJwcmVjbGlja1wiLEFpKSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe1FlLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsdCksdC5maXJlKFwicG9wdXBjbG9zZVwiLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiYodGhpcy5fc291cmNlLmZpcmUoXCJwb3B1cGNsb3NlXCIse3BvcHVwOnRoaXN9LCEwKSx0aGlzLl9zb3VyY2UgaW5zdGFuY2VvZiBCZXx8dGhpcy5fc291cmNlLm9mZihcInByZWNsaWNrXCIsQWkpKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9UWUucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybih2b2lkIDAhPT10aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrP3RoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s6dGhpcy5fbWFwLm9wdGlvbnMuY2xvc2VQb3B1cE9uQ2xpY2spJiYodC5wcmVjbGljaz10aGlzLl9jbG9zZSksdGhpcy5vcHRpb25zLmtlZXBJblZpZXcmJih0Lm1vdmVlbmQ9dGhpcy5fYWRqdXN0UGFuKSx0fSxfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5jbG9zZVBvcHVwKHRoaXMpfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0LGk9XCJsZWFmbGV0LXBvcHVwXCIsZT10aGlzLl9jb250YWluZXI9c2koXCJkaXZcIixpK1wiIFwiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHxcIlwiKStcIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksbj10aGlzLl93cmFwcGVyPXNpKFwiZGl2XCIsaStcIi1jb250ZW50LXdyYXBwZXJcIixlKTt0aGlzLl9jb250ZW50Tm9kZT1zaShcImRpdlwiLGkrXCItY29udGVudFwiLG4pLE9pKGUpLElpKHRoaXMuX2NvbnRlbnROb2RlKSx6aShlLFwiY29udGV4dG1lbnVcIixBaSksdGhpcy5fdGlwQ29udGFpbmVyPXNpKFwiZGl2XCIsaStcIi10aXAtY29udGFpbmVyXCIsZSksdGhpcy5fdGlwPXNpKFwiZGl2XCIsaStcIi10aXBcIix0aGlzLl90aXBDb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKCh0PXRoaXMuX2Nsb3NlQnV0dG9uPXNpKFwiYVwiLGkrXCItY2xvc2UtYnV0dG9uXCIsZSkpLmhyZWY9XCIjY2xvc2VcIix0LmlubmVySFRNTD1cIiYjMjE1O1wiLHppKHQsXCJjbGlja1wiLHRoaXMuX29uQ2xvc2VCdXR0b25DbGljayx0aGlzKSl9LF91cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxpPXQuc3R5bGU7aS53aWR0aD1cIlwiLGkud2hpdGVTcGFjZT1cIm5vd3JhcFwiO3ZhciBlPXQub2Zmc2V0V2lkdGgsZT1NYXRoLm1pbihlLHRoaXMub3B0aW9ucy5tYXhXaWR0aCk7ZT1NYXRoLm1heChlLHRoaXMub3B0aW9ucy5taW5XaWR0aCksaS53aWR0aD1lKzErXCJweFwiLGkud2hpdGVTcGFjZT1cIlwiLGkuaGVpZ2h0PVwiXCI7dmFyIG49dC5vZmZzZXRIZWlnaHQsbz10aGlzLm9wdGlvbnMubWF4SGVpZ2h0LHM9XCJsZWFmbGV0LXBvcHVwLXNjcm9sbGVkXCI7byYmbzxuPyhpLmhlaWdodD1vK1wicHhcIixjaSh0LHMpKTpfaSh0LHMpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLGU9dGhpcy5fZ2V0QW5jaG9yKCk7dmkodGhpcy5fY29udGFpbmVyLGkuYWRkKGUpKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe3ZhciB0LGksZSxuLG8scyxyLGEsaCx1LGwsYzt0aGlzLm9wdGlvbnMuYXV0b1BhbiYmKHRoaXMuX21hcC5fcGFuQW5pbSYmdGhpcy5fbWFwLl9wYW5BbmltLnN0b3AoKSx0PXRoaXMuX21hcCxpPXBhcnNlSW50KG9pKHRoaXMuX2NvbnRhaW5lcixcIm1hcmdpbkJvdHRvbVwiKSwxMCl8fDAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0K2ksbj10aGlzLl9jb250YWluZXJXaWR0aCwobz1uZXcgayh0aGlzLl9jb250YWluZXJMZWZ0LC1lLXRoaXMuX2NvbnRhaW5lckJvdHRvbSkpLl9hZGQoeWkodGhpcy5fY29udGFpbmVyKSkscz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG8pLHI9QSh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLGE9QSh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxyKSxoPUEodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fHIpLHU9dC5nZXRTaXplKCksYz1sPTAscy54K24raC54PnUueCYmKGw9cy54K24tdS54K2gueCkscy54LWwtYS54PDAmJihsPXMueC1hLngpLHMueStlK2gueT51LnkmJihjPXMueStlLXUueStoLnkpLHMueS1jLWEueTwwJiYoYz1zLnktYS55KSwobHx8YykmJnQuZmlyZShcImF1dG9wYW5zdGFydFwiKS5wYW5CeShbbCxjXSkpfSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksTmkodCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3I/dGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcigpOlswLDBdKX19KTtLaS5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksS2kuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRufHwodD1uZXcgdG4o
24510ZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOih0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnRoaXMuY2xvc2VQb3B1cCgpLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KSl9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQhPT10aGlzLl9wb3B1cHx8KHQ9dGhpcy5fcG9wdXAsdGhpcy5fcG9wdXA9bnVsbCksdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLE1lLmluY2x1ZGUoe2JpbmRQb3B1cDpmdW5jdGlvbih0LGkpe3JldHVybiB0IGluc3RhbmNlb2YgdG4/KGModCxpKSwodGhpcy5fcG9wdXA9dCkuX3NvdXJjZT10aGlzKToodGhpcy5fcG9wdXAmJiFpfHwodGhpcy5fcG9wdXA9bmV3IHRuKGksdGhpcykpLHRoaXMuX3BvcHVwLnNldENvbnRlbnQodCkpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITApLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5vZmYoe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEsdGhpcy5fcG9wdXA9bnVsbCksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJihpPXRoaXMuX3BvcHVwLl9wcmVwYXJlT3Blbih0aGlzLHQsaSksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCxpKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX21hcD90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0KSksdGhpc30saXNQb3B1cE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5pc09wZW4oKX0sc2V0UG9wdXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt2YXIgaT10LmxheWVyfHx0LnRhcmdldDt0aGlzLl9wb3B1cCYmdGhpcy5fbWFwJiYoTmkodCksaSBpbnN0YW5jZW9mIEJlP3RoaXMub3BlblBvcHVwKHQubGF5ZXJ8fHQudGFyZ2V0LHQubGF0bG5nKTp0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiZ0aGlzLl9wb3B1cC5fc291cmNlPT09aT90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cChpLHQubGF0bG5nKSl9LF9tb3ZlUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10Lm9yaWdpbmFsRXZlbnQua2V5Q29kZSYmdGhpcy5fb3BlblBvcHVwKHQpfX0pO3ZhciBlbj1RZS5leHRlbmQoe29wdGlvbnM6e3BhbmU6XCJ0b29sdGlwUGFuZVwiLG9mZnNldDpbMCwwXSxkaXJlY3Rpb246XCJhdXRvXCIscGVybWFuZW50OiExLHN0aWNreTohMSxpbnRlcmFjdGl2ZTohMSxvcGFjaXR5Oi45fSxvbkFkZDpmdW5jdGlvbih0KXtRZS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHRoaXMuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMub3BhY2l0eSksdC5maXJlKFwidG9vbHRpcG9wZW5cIix7dG9vbHRpcDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZShcInRvb2x0aXBvcGVuXCIse3Rvb2x0aXA6dGhpc30sITApfSxvblJlbW92ZTpmdW5jdGlvbih0KXtRZS5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLHQpLHQuZmlyZShcInRvb2x0aXBjbG9zZVwiLHt0b29sdGlwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5maXJlKFwidG9vbHRpcGNsb3NlXCIse3Rvb2x0aXA6dGhpc30sITApfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1RZS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIGJ0JiYhdGhpcy5vcHRpb25zLnBlcm1hbmVudCYmKHQucHJlY2xpY2s9dGhpcy5fY2xvc2UpLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlVG9vbHRpcCh0aGlzKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD1cImxlYWZsZXQtdG9vbHRpcCBcIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikrXCIgbGVhZmxldC16b29tLVwiKyh0aGlzLl96b29tQW5pbWF0ZWQ/XCJhbmltYXRlZFwiOlwiaGlkZVwiKTt0aGlzLl9jb250ZW50Tm9kZT10aGlzLl9jb250YWluZXI9c2koXCJkaXZcIix0KX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe30sX2FkanVzdFBhbjpmdW5jdGlvbigpe30sX3NldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpLGU9dGhpcy5fbWFwLG49dGhpcy5fY29udGFpbmVyLG89ZS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGUuZ2V0Q2VudGVyKCkpLHM9ZS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxyPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24sYT1uLm9mZnNldFdpZHRoLGg9bi5vZmZzZXRIZWlnaHQsdT1BKHRoaXMub3B0aW9ucy5vZmZzZXQpLGw9dGhpcy5fZ2V0QW5jaG9yKCksYz1cInRvcFwiPT09cj8oaT1hLzIsaCk6XCJib3R0b21cIj09PXI/KGk9YS8yLDApOihpPVwiY2VudGVyXCI9PT1yP2EvMjpcInJpZ2h0XCI9PT1yPzA6XCJsZWZ0XCI9PT1yP2E6cy54PG8ueD8ocj1cInJpZ2h0XCIsMCk6KHI9XCJsZWZ0XCIsYSsyKih1LngrbC54KSksaC8yKTt0PXQuc3VidHJhY3QoQShpLGMsITApKS5hZGQodSkuYWRkKGwpLF9pKG4sXCJsZWFmbGV0LXRvb2x0aXAtcmlnaHRcIiksX2kobixcImxlYWZsZXQtdG9vbHRpcC1sZWZ0XCIpLF9pKG4sXCJsZWFmbGV0LXRvb2x0aXAtdG9wXCIpLF9pKG4sXCJsZWFmbGV0LXRvb2x0aXAtYm90dG9tXCIpLGNpKG4sXCJsZWFmbGV0LXRvb2x0aXAtXCIrciksdmkobix0KX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO3RoaXMuX3NldFBvc2l0aW9uKHQpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fY29udGFpbmVyJiZtaSh0aGlzLl9jb250YWluZXIsdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKTt0aGlzLl9zZXRQb3NpdGlvbihpKX0sX2dldEFuY2hvcjpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yJiYhdGhpcy5vcHRpb25zLnN0aWNreT90aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IoKTpbMCwwXSl9fSk7S2kuaW5jbHVkZSh7b3BlblRvb2x0aXA6ZnVuY3Rpb24odCxpLGUpe3JldHVybiB0IGluc3RhbmNlb2YgZW58fCh0PW5ldyBlbihlKS5zZXRDb250ZW50KHQpKSxpJiZ0LnNldExhdExuZyhpKSx0aGlzLmhhc0xheWVyKHQpP3RoaXM6dGhpcy5hZGRMYXllcih0KX0sY2xvc2VUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLnJlbW92ZUxheWVyKHQpLHRoaXN9fSksTWUuaW5jbHVkZSh7YmluZFRvb2x0aXA6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGVuPyhjKHQsaSksKHRoaXMuX3Rvb2x0aXA9dCkuX3NvdXJjZT10aGlzKToodGhpcy5fdG9vbHRpcCYmIWl8fCh0aGlzLl90b29sdGlwPW5ldyBlbihpLHRoaXMpKSx0aGlzLl90b29sdGlwLnNldENvbnRlbnQodCkpLHRoaXMuX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zKCksdGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudCYmdGhpcy5fbWFwJiZ0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcykmJnRoaXMub3BlblRvb2x0aXAoKSx0aGlzfSx1bmJpbmRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucyghMCksdGhpcy5jbG9zZVRvb2x0aXAoKSx0aGlzLl90b29sdGlwPW51bGwpLHRoaXN9LF9pbml0VG9vbHRpcEludGVyYWN0aW9uczpmdW5jdGlvbih0KXt2YXIgaSxlOyF0JiZ0aGlzLl90b29sdGlwSGFuZGxlcnNBZGRlZHx8KGk9dD9cIm9mZlwiOlwib25cIixlPXtyZW1vdmU6dGhpcy5jbG9zZVRvb2x0aXAsbW92ZTp0aGlzLl9tb3ZlVG9vbHRpcH0sdGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudD9lLmFkZD10aGlzLl9vcGVuVG9vbHRpcDooZS5tb3VzZW92ZXI9dGhpcy5fb3BlblRvb2x0aXAsZS5tb3VzZW91dD10aGlzLmNsb3NlVG9vbHRpcCx0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5JiYoZS5tb3VzZW1vdmU9dGhpcy5fbW92ZVRvb2x0aXApLGJ0JiYoZS5jbGljaz10aGlzLl9vcGVuVG9vbHRpcCkpLHRoaXNbaV0oZSksdGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWQ9IXQpfSxvcGVuVG9vbHRpcDpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl90b29sdGlwJiZ0aGlzLl9tYXAmJihpPXRoaXMuX3Rvb2x0aXAuX3ByZXBhcmVPcGVuKHRoaXMsdCxpKSx0aGlzLl9tYXAub3BlblRvb2x0aXAodGhpcy5fdG9vbHRpcCxpKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKGNpKHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcixcImxlYWZsZXQtY2xpY2thYmxlXCIpLHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fY2xvc2UoKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKF9pKHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcixcImxlYWZsZXQtY2xpY2thYmxlXCIpLHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LHRvZ2dsZVRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzLl90b29sdGlwLl9tYXA/dGhpcy5jbG9zZVRvb2x0aXAoKTp0aGlzLm9wZW5Ub29sdGlwKHQpKSx0aGlzfSxpc1Rvb2x0aXBPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAuaXNPcGVuKCl9LHNldFRvb2x0aXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90b29sdGlwJiZ0aGlzLl90b29sdGlwLnNldENvbnRlbnQodCksdGhpc30sZ2V0VG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwfSxfb3BlblRvb2x0aXA6ZnVuY3Rpb24odCl7dmFyIGk9dC5sYXllcnx8dC50YXJnZXQ7dGhpcy5fdG9vbHRpcCYmdGhpcy5fbWFwJiZ0aGlzLm9wZW5Ub29sdGlwKGksdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreT90LmxhdGxuZzp2b2lkIDApfSxfbW92ZVRvb2x0aXA6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXQubGF0bG5nO3RoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3kmJnQub3JpZ2luYWxFdmVudCYmKGk9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQub3JpZ2luYWxFdmVudCksZT10aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoaSksbj10aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGUpKSx0aGlzLl90b29sdGlwLnNldExhdExuZyhuKX19KTt2YXIgbm49U2UuZXh0
24510ZW5kKHtvcHRpb25zOntpY29uU2l6ZTpbMTIsMTJdLGh0bWw6ITEsYmdQb3M6bnVsbCxjbGFzc05hbWU6XCJsZWFmbGV0LWRpdi1pY29uXCJ9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7dmFyIGksZT10JiZcIkRJVlwiPT09dC50YWdOYW1lP3Q6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxuPXRoaXMub3B0aW9ucztyZXR1cm4gbi5odG1sIGluc3RhbmNlb2YgRWxlbWVudD8oYWkoZSksZS5hcHBlbmRDaGlsZChuLmh0bWwpKTplLmlubmVySFRNTD0hMSE9PW4uaHRtbD9uLmh0bWw6XCJcIixuLmJnUG9zJiYoaT1BKG4uYmdQb3MpLGUuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1pLngrXCJweCBcIistaS55K1wicHhcIiksdGhpcy5fc2V0SWNvblN0eWxlcyhlLFwiaWNvblwiKSxlfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KTtTZS5EZWZhdWx0PVplO3ZhciBvbj1NZS5leHRlbmQoe29wdGlvbnM6e3RpbGVTaXplOjI1NixvcGFjaXR5OjEsdXBkYXRlV2hlbklkbGU6eXQsdXBkYXRlV2hlblpvb21pbmc6ITAsdXBkYXRlSW50ZXJ2YWw6MjAwLHpJbmRleDoxLGJvdW5kczpudWxsLG1pblpvb206MCxtYXhab29tOnZvaWQgMCxtYXhOYXRpdmVab29tOnZvaWQgMCxtaW5OYXRpdmVab29tOnZvaWQgMCxub1dyYXA6ITEscGFuZTpcInRpbGVQYW5lXCIsY2xhc3NOYW1lOlwiXCIsa2VlcEJ1ZmZlcjoyfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fbGV2ZWxzPXt9LHRoaXMuX3RpbGVzPXt9LHRoaXMuX3Jlc2V0VmlldygpLHRoaXMuX3VwZGF0ZSgpfSxiZWZvcmVBZGQ6ZnVuY3Rpb24odCl7dC5fYWRkWm9vbUxpbWl0KHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVBbGxUaWxlcygpLHJpKHRoaXMuX2NvbnRhaW5lciksdC5fcmVtb3ZlWm9vbUxpbWl0KHRoaXMpLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3RpbGVab29tPXZvaWQgMH0sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKGhpKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHVpKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1pbikpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkaW5nfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSx0aGlzLl91cGRhdGUoKSksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdwcmVyZXNldDp0aGlzLl9pbnZhbGlkYXRlQWxsLHZpZXdyZXNldDp0aGlzLl9yZXNldFZpZXcsem9vbTp0aGlzLl9yZXNldFZpZXcsbW92ZWVuZDp0aGlzLl9vbk1vdmVFbmR9O3JldHVybiB0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGV8fCh0aGlzLl9vbk1vdmV8fCh0aGlzLl9vbk1vdmU9bih0aGlzLl9vbk1vdmVFbmQsdGhpcy5vcHRpb25zLnVwZGF0ZUludGVydmFsLHRoaXMpKSx0Lm1vdmU9dGhpcy5fb25Nb3ZlKSx0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxjcmVhdGVUaWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIil9LGdldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnRpbGVTaXplO3JldHVybiB0IGluc3RhbmNlb2Ygaz90Om5ldyBrKHQsdCl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXImJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleD10aGlzLm9wdGlvbnMuekluZGV4KX0sX3NldEF1dG9aSW5kZXg6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9dGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sbj0tdCgtMS8wLDEvMCksbz0wLHM9ZS5sZW5ndGg7bzxzO28rKylpPWVbb10uc3R5bGUuekluZGV4LGVbb10hPT10aGlzLl9jb250YWluZXImJmkmJihuPXQobiwraSkpO2lzRmluaXRlKG4pJiYodGhpcy5vcHRpb25zLnpJbmRleD1uK3QoLTEsMSksdGhpcy5fdXBkYXRlWkluZGV4KCkpfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCYmIWl0KXttaSh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0PStuZXcgRGF0ZSxpPSExLGU9ITE7Zm9yKHZhciBuIGluIHRoaXMuX3RpbGVzKXt2YXIgbyxzPXRoaXMuX3RpbGVzW25dO3MuY3VycmVudCYmcy5sb2FkZWQmJihvPU1hdGgubWluKDEsKHQtcy5sb2FkZWQpLzIwMCksbWkocy5lbCxvKSxvPDE/aT0hMDoocy5hY3RpdmU/ZT0hMDp0aGlzLl9vbk9wYXF1ZVRpbGUocykscy5hY3RpdmU9ITApKX1lJiYhdGhpcy5fbm9QcnVuZSYmdGhpcy5fcHJ1bmVUaWxlcygpLGkmJih6KHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPU0odGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSl9fSxfb25PcGFxdWVUaWxlOmEsX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9c2koXCJkaXZcIixcImxlYWZsZXQtbGF5ZXIgXCIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fFwiXCIpKSx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSl9LF91cGRhdGVMZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90
24510aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpZT1OdW1iZXIoZSksdGhpcy5fbGV2ZWxzW2VdLmVsLmNoaWxkcmVuLmxlbmd0aHx8ZT09PXQ/KHRoaXMuX2xldmVsc1tlXS5lbC5zdHlsZS56SW5kZXg9aS1NYXRoLmFicyh0LWUpLHRoaXMuX29uVXBkYXRlTGV2ZWwoZSkpOihyaSh0aGlzLl9sZXZlbHNbZV0uZWwpLHRoaXMuX3JlbW92ZVRpbGVzQXRab29tKGUpLHRoaXMuX29uUmVtb3ZlTGV2ZWwoZSksZGVsZXRlIHRoaXMuX2xldmVsc1tlXSk7dmFyIG49dGhpcy5fbGV2ZWxzW3RdLG89dGhpcy5fbWFwO3JldHVybiBufHwoKG49dGhpcy5fbGV2ZWxzW3RdPXt9KS5lbD1zaShcImRpdlwiLFwibGVhZmxldC10aWxlLWNvbnRhaW5lciBsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIix0aGlzLl9jb250YWluZXIpLG4uZWwuc3R5bGUuekluZGV4PWksbi5vcmlnaW49by5wcm9qZWN0KG8udW5wcm9qZWN0KG8uZ2V0UGl4ZWxPcmlnaW4oKSksdCkucm91bmQoKSxuLnpvb209dCx0aGlzLl9zZXRab29tVHJhbnNmb3JtKG4sby5nZXRDZW50ZXIoKSxvLmdldFpvb20oKSksYShuLmVsLm9mZnNldFdpZHRoKSx0aGlzLl9vbkNyZWF0ZUxldmVsKG4pKSx0aGlzLl9sZXZlbD1ufX0sX29uVXBkYXRlTGV2ZWw6YSxfb25SZW1vdmVMZXZlbDphLF9vbkNyZWF0ZUxldmVsOmEsX3BydW5lVGlsZXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0LGksZSxuPXRoaXMuX21hcC5nZXRab29tKCk7aWYobj50aGlzLm9wdGlvbnMubWF4Wm9vbXx8bjx0aGlzLm9wdGlvbnMubWluWm9vbSl0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Vsc2V7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpKGU9dGhpcy5fdGlsZXNbdF0pLnJldGFpbj1lLmN1cnJlbnQ7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpeyhlPXRoaXMuX3RpbGVzW3RdKS5jdXJyZW50JiYhZS5hY3RpdmUmJihpPWUuY29vcmRzLHRoaXMuX3JldGFpblBhcmVudChpLngsaS55LGkueixpLnotNSl8fHRoaXMuX3JldGFpbkNoaWxkcmVuKGkueCxpLnksaS56LGkueisyKSl9Zm9yKHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbdF0ucmV0YWlufHx0aGlzLl9yZW1vdmVUaWxlKHQpfX19LF9yZW1vdmVUaWxlc0F0Wm9vbTpmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbaV0uY29vcmRzLno9PT10JiZ0aGlzLl9yZW1vdmVUaWxlKGkpfSxfcmVtb3ZlQWxsVGlsZXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fcmVtb3ZlVGlsZSh0KX0sX2ludmFsaWRhdGVBbGw6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fbGV2ZWxzKXJpKHRoaXMuX2xldmVsc1t0XS5lbCksdGhpcy5fb25SZW1vdmVMZXZlbChOdW1iZXIodCkpLGRlbGV0ZSB0aGlzLl9sZXZlbHNbdF07dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSx0aGlzLl90
24510aWxlWm9vbT12b2lkIDB9LF9yZXRhaW5QYXJlbnQ6ZnVuY3Rpb24odCxpLGUsbil7dmFyIG89TWF0aC5mbG9vcih0LzIpLHM9TWF0aC5mbG9vcihpLzIpLHI9ZS0xLGE9bmV3IGsoK28sK3MpO2Euej0rcjt2YXIgaD10aGlzLl90aWxlQ29vcmRzVG9LZXkoYSksdT10aGlzLl90aWxlc1toXTtyZXR1cm4gdSYmdS5hY3RpdmU/dS5yZXRhaW49ITA6KHUmJnUubG9hZGVkJiYodS5yZXRhaW49ITApLG48ciYmdGhpcy5fcmV0YWluUGFyZW50KG8scyxyLG4pKX0sX3JldGFpbkNoaWxkcmVuOmZ1bmN0aW9uKHQsaSxlLG4pe2Zvcih2YXIgbz0yKnQ7bzwyKnQrMjtvKyspZm9yKHZhciBzPTIqaTtzPDIqaSsyO3MrKyl7dmFyIHI9bmV3IGsobyxzKTtyLno9ZSsxO3ZhciBhPXRoaXMuX3RpbGVDb29yZHNUb0tleShyKSxoPXRoaXMuX3RpbGVzW2FdO2gmJmguYWN0aXZlP2gucmV0YWluPSEwOihoJiZoLmxvYWRlZCYmKGgucmV0YWluPSEwKSxlKzE8biYmdGhpcy5fcmV0YWluQ2hpbGRyZW4obyxzLGUrMSxuKSl9fSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQpe3ZhciBpPXQmJih0LnBpbmNofHx0LmZseVRvKTt0aGlzLl9zZXRWaWV3KHRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl9tYXAuZ2V0Wm9vbSgpLGksaSl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0aGlzLl9zZXRWaWV3KHQuY2VudGVyLHQuem9vbSwhMCx0Lm5vVXBkYXRlKX0sX2NsYW1wWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHZvaWQgMCE9PWkubWluTmF0aXZlWm9vbSYmdDxpLm1pbk5hdGl2ZVpvb20/aS5taW5OYXRpdmVab29tOnZvaWQgMCE9PWkubWF4TmF0aXZlWm9vbSYmaS5tYXhOYXRpdmVab29tPHQ/aS5tYXhOYXRpdmVab29tOnR9LF9zZXRWaWV3OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPU1hdGgucm91bmQoaSksbz12b2lkIDAhPT10aGlzLm9wdGlvbnMubWF4Wm9vbSYmbz50aGlzLm9wdGlvbnMubWF4Wm9vbXx8dm9pZCAwIT09dGhpcy5vcHRpb25zLm1pblpvb20mJm88dGhpcy5vcHRpb25zLm1pblpvb20/dm9pZCAwOnRoaXMuX2NsYW1wWm9vbShvKSxzPXRoaXMub3B0aW9ucy51cGRhdGVXaGVuWm9vbWluZyYmbyE9PXRoaXMuX3RpbGVab29tO24mJiFzfHwodGhpcy5fdGlsZVpvb209byx0aGlzLl9hYm9ydExvYWRpbmcmJnRoaXMuX2Fib3J0TG9hZGluZygpLHRoaXMuX3VwZGF0ZUxldmVscygpLHRoaXMuX3Jlc2V0R3JpZCgpLHZvaWQgMCE9PW8mJnRoaXMuX3VwZGF0ZSh0KSxlfHx0aGlzLl9wcnVuZVRpbGVzKCksdGhpcy5fbm9QcnVuZT0hIWUpLHRoaXMuX3NldFpvb21UcmFuc2Zvcm1zKHQsaSl9LF9zZXRab29tVHJhbnNmb3JtczpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpdGhpcy5fc2V0Wm9vbVRyYW5zZm9ybSh0aGlzLl9sZXZlbHNbZV0sdCxpKX0sX3NldFpvb21UcmFuc2Zvcm06ZnVuY3Rpb24odCxpLGUpe3ZhciBuPXRoaXMuX21hcC5nZXRab29tU2NhbGUoZSx0Lnpvb20pLG89dC5vcmlnaW4ubXVsdGlwbHlCeShuKS5zdWJ0cmFjdCh0aGlzLl9tYXAuX2dldE5ld1BpeGVsT3JpZ2luKGksZSkpLnJvdW5kKCk7dnQ/Z2kodC5lbCxvLG4pOnZpKHQuZWwsbyl9LF9yZXNldEdyaWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT10Lm9wdGlvbnMuY3JzLGU9dGhpcy5fdGlsZVNpemU9dGhpcy5nZXRUaWxlU2l6ZSgpLG49dGhpcy5fdGlsZVpvb20sbz10aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcyh0aGlzLl90aWxlWm9vbSk7byYmKHRoaXMuX2dsb2JhbFRpbGVSYW5nZT10aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKG8pKSx0aGlzLl93cmFwWD1pLndyYXBMbmcmJiF0aGlzLm9wdGlvbnMubm9XcmFwJiZbTWF0aC5mbG9vcih0LnByb2plY3QoWzAsaS53cmFwTG5nWzBdXSxuKS54L2UueCksTWF0aC5jZWlsKHQucHJvamVjdChbMCxpLndyYXBMbmdbMV1dLG4pLngvZS55KV0sdGhpcy5fd3JhcFk9aS53cmFwTGF0JiYhdGhpcy5vcHRpb25zLm5vV3JhcCYmW01hdGguZmxvb3IodC5wcm9qZWN0KFtpLndyYXBMYXRbMF0sMF0sbikueS9lLngpLE1hdGguY2VpbCh0LnByb2plY3QoW2kud3JhcExhdFsxXSwwXSxuKS55L2UueSldfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiZ0aGlzLl91cGRhdGUoKX0sX2dldFRpbGVkUGl4ZWxCb3VuZHM6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9aS5fYW5pbWF0aW5nWm9vbT9NYXRoLm1heChpLl9hbmltYXRlVG9ab29tLGkuZ2V0Wm9vbSgpKTppLmdldFpvb20oKSxuPWkuZ2V0Wm9vbVNjYWxlKGUsdGhpcy5fdGlsZVpvb20pLG89aS5wcm9qZWN0KHQsdGhpcy5fdGlsZVpvb20pLmZsb29yKCkscz1pLmdldFNpemUoKS5kaXZpZGVCeSgyKm4pO3JldHVybiBuZXcgSShvLnN1YnRyYWN0KHMpLG8uYWRkKHMpKX0sX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7aWYoaSl7dmFyIGU9dGhpcy5fY2xhbXBab29tKGkuZ2V0Wm9vbSgpKTtpZih2b2lkIDA9PT10JiYodD1pLmdldENlbnRlcigpKSx2b2lkIDAhPT10aGlzLl90aWxlWm9vbSl7dmFyIG49dGhpcy5fZ2V0VGlsZWRQaXhlbEJvdW5kcyh0KSxvPXRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2Uobikscz1vLmdldENlbnRlcigpLHI9W10sYT10aGlzLm9wdGlvbnMua2VlcEJ1ZmZlcixoPW5ldyBJKG8uZ2V0Qm90dG9tTGVmdCgpLnN1YnRyYWN0KFthLC1hXSksby5nZXRUb3BSaWdodCgpLmFkZChbYSwtYV0pKTtpZighKGlzRmluaXRlKG8ubWluLngpJiZpc0Zpbml0ZShvLm1pbi55KSYmaXNGaW5pdGUoby5tYXgueCkmJmlzRmluaXRlKG8ubWF4LnkpKSl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXNcIik7Zm9yKHZhciB1IGluIHRoaXMuX3RpbGVzKXt2YXIgbD10aGlzLl90aWxlc1t1XS5jb29yZHM7bC56PT09dGhpcy5fdGlsZVpvb20mJmguY29udGFpbnMobmV3IGsobC54LGwueSkpfHwodGhpcy5fdGlsZXNbdV0uY3VycmVudD0hMSl9aWYoMTxNYXRoLmFicyhlLXRoaXMuX3RpbGVab29tKSl0aGlzLl9zZXRWaWV3KHQsZSk7ZWxzZXtmb3IodmFyIGM9by5taW4ueTtjPD1vLm1heC55O2MrKylmb3IodmFyIF89by5taW4ueDtfPD1vLm1heC54O18rKyl7dmFyIGQscD1uZXcgayhfLGMpO3Auej10aGlzLl90
24510aWxlWm9vbSx0aGlzLl9pc1ZhbGlkVGlsZShwKSYmKChkPXRoaXMuX3RpbGVzW3RoaXMuX3RpbGVDb29yZHNUb0tleShwKV0pP2QuY3VycmVudD0hMDpyLnB1c2gocCkpfWlmKHIuc29ydChmdW5jdGlvbih0LGkpe3JldHVybiB0LmRpc3RhbmNlVG8ocyktaS5kaXN0YW5jZVRvKHMpfSksMCE9PXIubGVuZ3RoKXt0aGlzLl9sb2FkaW5nfHwodGhpcy5fbG9hZGluZz0hMCx0aGlzLmZpcmUoXCJsb2FkaW5nXCIpKTtmb3IodmFyIG09ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLF89MDtfPHIubGVuZ3RoO18rKyl0aGlzLl9hZGRUaWxlKHJbX10sbSk7dGhpcy5fbGV2ZWwuZWwuYXBwZW5kQ2hpbGQobSl9fX19fSxfaXNWYWxpZFRpbGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLm9wdGlvbnMuY3JzO2lmKCFpLmluZmluaXRlKXt2YXIgZT10aGlzLl9nbG9iYWxUaWxlUmFuZ2U7aWYoIWkud3JhcExuZyYmKHQueDxlLm1pbi54fHx0Lng+ZS5tYXgueCl8fCFpLndyYXBMYXQmJih0Lnk8ZS5taW4ueXx8dC55PmUubWF4LnkpKXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuYm91bmRzKXJldHVybiEwO3ZhciBuPXRoaXMuX3RpbGVDb29yZHNUb0JvdW5kcyh0KTtyZXR1cm4gTih0aGlzLm9wdGlvbnMuYm91bmRzKS5vdmVybGFwcyhuKX0sX2tleVRvQm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModGhpcy5fa2V5VG9UaWxlQ29vcmRzKHQpKX0sX3RpbGVDb29yZHNUb053U2U6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9dGhpcy5nZXRUaWxlU2l6ZSgpLG49dC5zY2FsZUJ5KGUpLG89bi5hZGQoZSk7cmV0dXJuW2kudW5wcm9qZWN0KG4sdC56KSxpLnVucHJvamVjdChvLHQueildfSxfdGlsZUNvb3Jkc1RvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVDb29yZHNUb053U2UodCksZT1uZXcgUihpWzBdLGlbMV0pO3JldHVybiB0aGlzLm9wdGlvbnMubm9XcmFwfHwoZT10aGlzLl9tYXAud3JhcExhdExuZ0JvdW5kcyhlKSksZX0sX3RpbGVDb29yZHNUb0tleTpmdW5jdGlvbih0KXtyZXR1cm4gdC54K1wiOlwiK3QueStcIjpcIit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9dC5zcGxpdChcIjpcIiksZT1uZXcgaygraVswXSwraVsxXSk7cmV0dXJuIGUuej0raVsyXSxlfSxfcmVtb3ZlVGlsZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl90aWxlc1t0XTtpJiYocmkoaS5lbCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZShcInRpbGV1bmxvYWRcIix7dGlsZTppLmVsLGNvb3Jkczp0aGlzLl9rZXlUb1RpbGVDb29yZHModCl9KSl9LF9pbml0VGlsZTpmdW5jdGlvbih0KXtjaSh0LFwibGVhZmxldC10aWxlXCIpO3ZhciBpPXRoaXMuZ2V0VGlsZVNpemUoKTt0LnN0eWxlLndpZHRoPWkueCtcInB4XCIsdC5zdHlsZS5oZWlnaHQ9aS55K1wicHhcIix0Lm9uc2VsZWN0c3RhcnQ9YSx0Lm9ubW91c2Vtb3ZlPWEsaXQmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJm1pKHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLG90JiYhc3QmJih0LnN0eWxlLldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eT1cImhpZGRlblwiKX0sX2FkZFRpbGU6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRUaWxlUG9zKHQpLG49dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpLG89dGhpcy5jcmVhdGVUaWxlKHRoaXMuX3dyYXBDb29yZHModCkscCh0aGlzLl90aWxlUmVhZHksdGhpcyx0KSk7dGhpcy5faW5pdFRpbGUobyksdGhpcy5jcmVhdGVUaWxlLmxlbmd0aDwyJiZNKHAodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCxudWxsLG8pKSx2aShvLGUpLHRoaXMuX3RpbGVzW25dPXtlbDpvLGNvb3Jkczp0LGN1cnJlbnQ6ITB9LGkuYXBwZW5kQ2hpbGQobyksdGhpcy5maXJlKFwidGlsZWxvYWRzdGFydFwiLHt0aWxlOm8sY29vcmRzOnR9KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGksZSl7aSYmdGhpcy5maXJlKFwidGlsZWVycm9yXCIse2Vycm9yOmksdGlsZTplLGNvb3Jkczp0fSk7dmFyIG49dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpOyhlPXRoaXMuX3RpbGVzW25dKSYmKGUubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8obWkoZS5lbCwwKSx6KHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPU0odGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSk6KGUuYWN0aXZlPSEwLHRoaXMuX3BydW5lVGlsZXMoKSksaXx8KGNpKGUuZWwsXCJsZWFmbGV0LXRpbGUtbG9hZGVkXCIpLHRoaXMuZmlyZShcInRpbGVsb2FkXCIse3RpbGU6ZS5lbCxjb29yZHM6dH0pKSx0aGlzLl9ub1RpbGVzVG9Mb2FkKCkmJih0aGlzLl9sb2FkaW5nPSExLHRoaXMuZmlyZShcImxvYWRcIiksaXR8fCF0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD9NKHRoaXMuX3BydW5lVGlsZXMsdGhpcyk6c2V0VGltZW91dChwKHRoaXMuX3BydW5lVGlsZXMsdGhpcyksMjUwKSkpfSxfZ2V0VGlsZVBvczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zY2FsZUJ5KHRoaXMuZ2V0VGlsZVNpemUoKSkuc3VidHJhY3QodGhpcy5fbGV2ZWwub3JpZ2luKX0sX3dyYXBDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9bmV3IGsodGhpcy5fd3JhcFg/byh0LngsdGhpcy5fd3JhcFgpOnQueCx0aGlzLl93cmFwWT9vKHQueSx0aGlzLl93cmFwWSk6dC55KTtyZXR1cm4gaS56PXQueixpfSxfcHhCb3VuZHNUb1RpbGVSYW5nZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldFRpbGVTaXplKCk7cmV0dXJuIG5ldyBJKHQubWluLnVuc2NhbGVCeShpKS5mbG9vcigpLHQubWF4LnVuc2NhbGVCeShpKS5jZWlsKCkuc3VidHJhY3QoWzEsMV0pKX0sX25vVGlsZXNUb0xvYWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpaWYoIXRoaXMuX3RpbGVzW3RdLmxvYWRlZClyZXR1cm4hMTtyZXR1cm4hMH19KTt2YXIgc249b24uZXh0ZW5kKHtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCxzdWJkb21haW5zOlwiYWJjXCIsZXJyb3JUaWxlVXJsOlwiXCIsem9vbU9mZnNldDowLHRtczohMSx6b29tUmV2ZXJzZTohMSxkZXRlY3RSZXRpbmE6ITEsY3Jvc3NPcmlnaW46ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt0aGlzLl91cmw9dCwoaT1jKHRoaXMsaSkpLmRldGVjdFJldGluYSYmenQmJjA8aS5tYXhab29tJiYoaS50aWxlU2l6ZT1NYXRoLmZsb29yKGkudGlsZVNpemUvMiksaS56b29tUmV2ZXJzZT8oaS56b29tT2Zmc2V0LS0saS5taW5ab29tKyspOihpLnpvb21PZmZzZXQrKyxpLm1heFpvb20tLSksaS5taW5ab29tPU1
24510hdGgubWF4KDAsaS5taW5ab29tKSksXCJzdHJpbmdcIj09dHlwZW9mIGkuc3ViZG9tYWlucyYmKGkuc3ViZG9tYWlucz1pLnN1YmRvbWFpbnMuc3BsaXQoXCJcIikpLG90fHx0aGlzLm9uKFwidGlsZXVubG9hZFwiLHRoaXMuX29uVGlsZVJlbW92ZSl9LHNldFVybDpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl91cmw9PT10JiZ2b2lkIDA9PT1pJiYoaT0hMCksdGhpcy5fdXJsPXQsaXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxjcmVhdGVUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtyZXR1cm4gemkoZSxcImxvYWRcIixwKHRoaXMuX3RpbGVPbkxvYWQsdGhpcyxpLGUpKSx6aShlLFwiZXJyb3JcIixwKHRoaXMuX3RpbGVPbkVycm9yLHRoaXMsaSxlKSksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGUuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLGUuYWx0PVwiXCIsZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJwcmVzZW50YXRpb25cIiksZS5zcmM9dGhpcy5nZXRUaWxlVXJsKHQpLGV9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGksZT17cjp6dD9cIkAyeFwiOlwiXCIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O3JldHVybiB0aGlzLl9tYXAmJiF0aGlzLl9tYXAub3B0aW9ucy5jcnMuaW5maW5pdGUmJihpPXRoaXMuX2dsb2JhbFRpbGVSYW5nZS5tYXgueS10LnksdGhpcy5vcHRpb25zLnRtcyYmKGUueT1pKSxlW1wiLXlcIl09aSksZih0aGlzLl91cmwsaChlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGkpe2l0P3NldFRpbWVvdXQocCh0LHRoaXMsbnVsbCxpKSwwKTp0KG51bGwsaSl9LF90aWxlT25FcnJvcjpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtuJiZpLmdldEF0dHJpYnV0ZShcInNyY1wiKSE9PW4mJihpLnNyYz1uKSx0KGUsaSl9LF9vblRpbGVSZW1vdmU6ZnVuY3Rpb24odCl7dC50aWxlLm9ubG9hZD1udWxsfSxfZ2V0Wm9vbUZvclVybDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbGVab29tLGk9dGhpcy5vcHRpb25zLm1heFpvb207cmV0dXJuIHRoaXMub3B0aW9ucy56b29tUmV2ZXJzZSYmKHQ9aS10KSx0K3RoaXMub3B0aW9ucy56b29tT2Zmc2V0fSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaV19LF9hYm9ydExvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgdCxpO2Zvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmNvb3Jkcy56IT09dGhpcy5fdGlsZVpvb20mJigoaT10aGlzLl90
24510aWxlc1t0XS5lbCkub25sb2FkPWEsaS5vbmVycm9yPWEsaS5jb21wbGV0ZXx8KGkuc3JjPXkscmkoaSksZGVsZXRlIHRoaXMuX3RpbGVzW3RdKSl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVzW3RdO2lmKGkpcmV0dXJuIGF0fHxpLmVsLnNldEF0dHJpYnV0ZShcInNyY1wiLHkpLG9uLnByb3RvdHlwZS5fcmVtb3ZlVGlsZS5jYWxsKHRoaXMsdCl9LF90aWxlUmVhZHk6ZnVuY3Rpb24odCxpLGUpe2lmKHRoaXMuX21hcCYmKCFlfHxlLmdldEF0dHJpYnV0ZShcInNyY1wiKSE9PXkpKXJldHVybiBvbi5wcm90b3R5cGUuX3RpbGVSZWFkeS5jYWxsKHRoaXMsdCxpLGUpfX0pO2Z1bmN0aW9uIHJuKHQsaSl7cmV0dXJuIG5ldyBzbih0LGkpfXZhciBhbj1zbi5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6XCJXTVNcIixyZXF1ZXN0OlwiR2V0TWFwXCIsbGF5ZXJzOlwiXCIsc3R5bGVzOlwiXCIsZm9ybWF0OlwiaW1hZ2UvanBlZ1wiLHRyYW5zcGFyZW50OiExLHZlcnNpb246XCIxLjEuMVwifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt0aGlzLl91cmw9dDt2YXIgZT1oKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyk7Zm9yKHZhciBuIGluIGkpbiBpbiB0aGlzLm9wdGlvbnN8fChlW25dPWlbbl0pO3ZhciBvPShpPWModGhpcyxpKSkuZGV0ZWN0UmV0aW5hJiZ6dD8yOjEscz10aGlzLmdldFRpbGVTaXplKCk7ZS53aWR0aD1zLngqbyxlLmhlaWdodD1zLnkqbyx0aGlzLndtc1BhcmFtcz1lfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGk9MS4zPD10aGlzLl93bXNWZXJzaW9uP1wiY3JzXCI6XCJzcnNcIjt0aGlzLndtc1BhcmFtc1tpXT10aGlzLl9jcnMuY29kZSxzbi5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpfSxnZXRUaWxlVXJsOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVDb29yZHNUb053U2UodCksZT10aGlzLl9jcnMsbj1PKGUucHJvamVjdChpWzBdKSxlLnByb2plY3QoaVsxXSkpLG89bi5taW4scz1uLm1heCxyPSgxLjM8PXRoaXMuX3dtc1ZlcnNpb24mJnRoaXMuX2Nycz09PWJlP1tvLnksby54LHMueSxzLnhdOltvLngsby55LHMueCxzLnldKS5qb2luKFwiLFwiKSxhPXNuLnByb3RvdHlwZS5nZXRUaWxlVXJsLmNhbGwodGhpcyx0KTtyZXR1cm4gYStfKHRoaXMud21zUGFyYW1zLGEsdGhpcy5vcHRpb25zLnVwcGVyY2FzZSkrKHRoaXMub3B0aW9ucy51cHBlcmNhc2U/XCImQkJPWD1cIjpcIiZiYm94PVwiKStyfSxzZXRQYXJhbXM6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaCh0aGlzLndtc1BhcmFtcyx0KSxpfHx0aGlzLnJlZHJhdygpLHRoaXN9fSk7c24uV01TPWFuLHJuLndtcz1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgYW4odCxpKX07dmFyIGhuPU1lLmV4dGVuZCh7b3B0aW9uczp7cGFkZGluZzouMSx0b2xlcmFuY2U6MH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtjKHRoaXMsdCksbSh0aGlzKSx0aGlzLl9sYXllcnM9dGhpcy5fbGF5ZXJzfHx7fX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fem9vbUFuaW1hdGVkJiZjaSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIikpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fdXBkYXRlKCksdGhpcy5vbihcInVwZGF0ZVwiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKFwidXBkYXRlXCIsdGhpcy5fdXBkYXRlUGF0aHMsdGhpcyksdGhpcy5fZGVzdHJveUNvbnRhaW5lcigpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3Jlc2V0OnRoaXMuX3Jlc2V0LHpvb206dGhpcy5fb25ab29tLG1vdmVlbmQ6dGhpcy5fdXBkYXRlLHpvb21lbmQ6dGhpcy5fb25ab29tRW5kfTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9vbkFuaW1ab29tKSx0fSxfb25BbmltWm9vbTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odC5jZW50ZXIsdC56b29tKX0sX29uWm9vbTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fbWFwLmdldFpvb20oKSl9LF91cGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGksdGhpcy5fem9vbSksbj15aSh0aGlzLl9jb250YWluZXIpLG89dGhpcy5fbWFwLmdldFNpemUoKS5tdWx0aXBseUJ5KC41K3RoaXMub3B0aW9ucy5wYWRkaW5nKSxzPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2NlbnRlcixpKSxyPXRoaXMuX21hcC5wcm9qZWN0KHQsaSkuc3VidHJhY3QocyksYT1vLm11bHRpcGx5QnkoLWUpLmFkZChuKS5hZGQobykuc3VidHJhY3Qocik7dnQ/Z2kodGhpcy5fY29udGFpbmVyLGEsZSk6dmkodGhpcy5fY29udGFpbmVyLGEpfSxfcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKSx0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9yZXNldCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3Byb2plY3QoKX0sX3VwZGF0ZVBhdGhzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnBhZGRpbmcsaT10aGlzLl9tYXAuZ2V0U2l6ZSgpLGU9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkubXVsdGlwbHlCeSgtdCkpLnJvdW5kKCk7dGhpcy5fYm91bmRzPW5ldyBJKGUsZS5hZGQoaS5tdWx0aXBseUJ5KDErMip0KSkucm91bmQoKSksdGhpcy5fY2VudGVyPXRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl96b29tPXRoaXMuX21hcC5nZXRab29tKCl9fSksdW49aG4uZXh0ZW5kKHtnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1obi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHQudmlld3ByZXJlc2V0PXRoaXMuX29uVmlld1ByZVJlc2V0LHR9LF9vblZpZXdQcmVSZXNldDpmdW5jdGlvbigpe3RoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHM9ITB9LG9uQWRkOmZ1bmN0aW9uKCl7aG4ucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyksdGhpcy5fZHJhdygpfSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO3ppKHQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKSx6aSh0LFwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgY29udGV4dG1lbnVcIix0aGlzLl9vbkNsaWNrLHRoaXMpLHppKHQsXCJtb3VzZW91dFwiLHRoaXMuX2hhbmRsZU1vdXNlT3V0LHRoaXMpLHRoaXMuX2N0eD10LmdldENvbnRleHQoXCIyZFwiKX0sX2Rlc3Ryb3lDb250YWluZXI6ZnVuY3Rpb24oKXt6KHRoaXMuX3JlZHJhd1JlcXVlc3QpLGRlbGV0ZSB0aGlzLl9jdHgscmkodGhpcy5fY29udGFpbmVyKSxTaSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXJ9LF91cGRhdGVQYXRoczpmdW5jdGlvbigpe2lmKCF0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzKXtmb3IodmFyIHQgaW4gdGhpcy5fcmVkcmF3Qm91bmRzPW51bGwsdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5fdXBkYXRlKCk7dGhpcy5fcmVkcmF3KCl9fSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaSxlLG47dGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiZ0aGlzLl9ib3VuZHN8fChobi5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpLHQ9dGhpcy5fYm91bmRzLGk9dGhpcy5fY29udGFpbmVyLGU9dC5nZXRTaXplKCksbj16dD8yOjEsdmkoaSx0Lm1pbiksaS53aWR0aD1uKmUueCxpLmhlaWdodD1uKmUueSxpLnN0eWxlLndpZHRoPWUueCtcInB4XCIsaS5zdHlsZS5oZWlnaHQ9ZS55K1wicHhcIix6dCYmdGhpcy5fY3R4LnNjYWxlKDIsMiksdGhpcy5fY3R4LnRyYW5zbGF0ZSgtdC5taW4ueCwtdC5taW4ueSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7aG4ucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpO3ZhciBpPSh0aGlzLl9sYXllcnNbbSh0KV09dCkuX29yZGVyPXtsYXllcjp0LHByZXY6dGhpcy5fZHJhd0xhc3QsbmV4dDpudWxsfTt0aGlzLl9kcmF3TGFzdCYmKHRoaXMuX2RyYXdMYXN0Lm5leHQ9aSksdGhpcy5fZHJhd0xhc3Q9aSx0aGlzLl9kcmF3Rmlyc3Q9dGhpcy5fZHJhd0ZpcnN0fHx0aGlzLl9kcmF3TGFzdH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXIsZT1pLm5leHQsbj1pLnByZXY7ZT9lLnByZXY9bjp0aGlzLl9kcmF3TGFzdD1uLG4/bi5uZXh0PWU6dGhpcy5fZHJhd0ZpcnN0PWUsZGVsZXRlIHQuX29yZGVyLGRlbGV0ZSB0aGlzLl9sYXllcnNbbSh0KV0sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHQuX3Byb2plY3QoKSx0Ll91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVEYXNoQXJyYXk6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQub3B0aW9ucy5kYXNoQXJyYXkpe2Zvcih2YXIgaSxlPXQub3B0aW9ucy5kYXNoQXJyYXkuc3BsaXQoL1ssIF0rLyksbj1bXSxvPTA7bzxlLmxlbmd0aDtvKyspe2lmKGk9TnVtYmVyKGVbb10pLGlzTmFOKGkpKXJldHVybjtuLnB1c2goaSl9dC5vcHRpb25zLl9kYXNoQXJyYXk9bn1lbHNlI
24510HQub3B0aW9ucy5fZGFzaEFycmF5PXQub3B0aW9ucy5kYXNoQXJyYXl9LF9yZXF1ZXN0UmVkcmF3OmZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyh0KSx0aGlzLl9yZWRyYXdSZXF1ZXN0PXRoaXMuX3JlZHJhd1JlcXVlc3R8fE0odGhpcy5fcmVkcmF3LHRoaXMpKX0sX2V4dGVuZFJlZHJhd0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaTt0Ll9weEJvdW5kcyYmKGk9KHQub3B0aW9ucy53ZWlnaHR8fDApKzEsdGhpcy5fcmVkcmF3Qm91bmRzPXRoaXMuX3JlZHJhd0JvdW5kc3x8bmV3IEksdGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZCh0Ll9weEJvdW5kcy5taW4uc3VidHJhY3QoW2ksaV0pKSx0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1heC5hZGQoW2ksaV0pKSl9LF9yZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXdSZXF1ZXN0PW51bGwsdGhpcy5fcmVkcmF3Qm91bmRzJiYodGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKSx0aGlzLl9yZWRyYXdCb3VuZHMubWF4Ll9jZWlsKCkpLHRoaXMuX2NsZWFyKCksdGhpcy5fZHJhdygpLHRoaXMuX3JlZHJhd0JvdW5kcz1udWxsfSxfY2xlYXI6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMuX3JlZHJhd0JvdW5kcztpPyh0PWkuZ2V0U2l6ZSgpLHRoaXMuX2N0eC5jbGVhclJlY3QoaS5taW4ueCxpLm1pbi55LHQueCx0LnkpKToodGhpcy5fY3R4LnNhdmUoKSx0aGlzLl9jdHguc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0aGlzLl9jdHguY2xlYXJSZWN0KDAsMCx0aGlzLl9jb250YWluZXIud2lkdGgsdGhpcy5fY29udGFpbmVyLmhlaWdodCksdGhpcy5fY3R4LnJlc3RvcmUoKSl9LF9kcmF3OmZ1bmN0aW9uKCl7dmFyIHQsaSxlPXRoaXMuX3JlZHJhd0JvdW5kczt0aGlzLl9jdHguc2F2ZSgpLGUmJihpPWUuZ2V0U2l6ZSgpLHRoaXMuX2N0eC5iZWdpblBhdGgoKSx0aGlzLl9jdHgucmVjdChlLm1pbi54LGUubWluLnksaS54LGkueSksdGhpcy5fY3R4LmNsaXAoKSksdGhpcy5fZHJhd2luZz0hMDtmb3IodmFyIG49dGhpcy5fZHJhd0ZpcnN0O247bj1uLm5leHQpdD1uLmxheWVyLCghZXx8dC5fcHhCb3VuZHMmJnQuX3B4Qm91bmRzLmludGVyc2VjdHMoZSkpJiZ0Ll91cGRhdGVQYXRoKCk7dGhpcy5fZHJhd2luZz0hMSx0aGlzLl9jdHgucmVzdG9yZSgpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGkpe2lmKHRoaXMuX2RyYXdpbmcpe3ZhciBlLG4sbyxzLHI9dC5fcGFydHMsYT1yLmxlbmd0aCxoPXRoaXMuX2N0eDtpZihhKXtmb3IoaC5iZWdpblBhdGgoKSxlPTA7ZTxhO2UrKyl7Zm9yKG49MCxvPXJbZV0ubGVuZ3RoO248bztuKyspcz1yW2VdW25dLGhbbj9cImxpbmVUb1wiOlwibW92ZVRvXCJdKHMueCxzLnkpO2kmJmguY2xvc2VQYXRoKCl9dGhpcy5fZmlsbFN0cm9rZShoLHQpfX19LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG87dGhpcy5fZHJhd2luZyYmIXQuX2VtcHR5KCkmJihpPXQuX3BvaW50LGU9dGhpcy5fY3R4LG49TWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXMpLDEpLDEhPShvPShNYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1c1kpLDEpfHxuKS9uKSYmKGUuc2F2ZSgpLGUuc2NhbGUoMSxvKSksZS5iZWdpblBhdGgoKSxlLmFyYyhpLngsaS55L28sbiwwLDIqTWF0aC5QSSwhMSksMSE9byYmZS5yZXN0b3JlKCksdGhpcy5fZmlsbFN0cm9rZShlLHQpKX0sX2ZpbGxTdHJva2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1pLm9wdGlvbnM7ZS5maWxsJiYodC5nbG9iYWxBbHBoYT1lLmZpbGxPcGFjaXR5LHQuZmlsbFN0eWxlPWUuZmlsbENvbG9yfHxlLmNvbG9yLHQuZmlsbChlLmZpbGxSdWxlfHxcImV2ZW5vZGRcIikpLGUuc3Ryb2tlJiYwIT09ZS53ZWlnaHQmJih0LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKGkub3B0aW9ucyYmaS5vcHRpb25zLl9kYXNoQXJyYXl8fFtdKSx0Lmdsb2JhbEFscGhhPWUub3BhY2l0eSx0LmxpbmVXaWR0aD1lLndlaWdodCx0LnN0cm9rZVN0eWxlPWUuY29sb3IsdC5saW5lQ2FwPWUubGluZUNhcCx0LmxpbmVKb2luPWUubGluZUpvaW4sdC5zdHJva2UoKSl9LF9vbkNsaWNrOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCksbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoaT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZpLl9jb250YWluc1BvaW50KG4pJiYoKFwiY2xpY2tcIj09PXQudHlwZXx8XCJwcmVjbGlja1wiIT09dC50eXBlKSYmdGhpcy5fbWFwLl9kcmFnZ2FibGVNb3ZlZChpKXx8KGU9aSkpO2UmJihGaSh0KSx0aGlzLl9maXJlRXZlbnQoW2VdLHQpKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3ZhciBpOyF0aGlzLl9tYXB8fHRoaXMuX21hcC5kcmFnZ2luZy5tb3ZpbmcoKXx8dGhpcy5fbWFwLl9hbmltYXRpbmdab29tfHwoaT10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSx0aGlzLl9oYW5kbGVNb3VzZUhvdmVyKHQsaSkpfSxfaGFuZGxlTW91c2VPdXQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5faG92ZXJlZExheWVyO2kmJihfaSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LWludGVyYWN0aXZlXCIpLHRoaXMuX2ZpcmVFdmVudChbaV0sdCxcIm1vdXNlb3V0XCIpLHRoaXMuX2hvdmVyZWRMYXllcj1udWxsLHRoaXMuX21vdXNlSG92ZXJUaHJvdHRsZWQ9ITEpfSxfaGFuZGxlTW91c2VIb3ZlcjpmdW5jdGlvbih0LGkpe2lmKCF0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkKXtmb3IodmFyIGUsbixvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShlPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmUuX2NvbnRhaW5zUG9pbnQoaSkmJihuPWUpO24hPT10aGlzLl9ob3ZlcmVkTGF5ZXImJih0aGlzLl9oYW5kbGVNb3VzZU91dCh0KSxuJiYoY2kodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9maXJlRXZlbnQoW25dLHQsXCJtb3VzZW92ZXJcIiksdGhpcy5faG92ZXJlZExheWVyPW4pKSx0aGlzLl9ob3ZlcmVkTGF5ZXImJnRoaXMuX2ZpcmVFdmVudChbdGhpcy5faG92ZXJlZExheWVyXSx0KSx0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkPSEwLHNldFRpbWVvdXQocChmdW5jdGlvbigpe3RoaXMuX21vdXNlSG92ZXJUaHJvdHRsZWQ9ITF9LHRoaXMpLDMyKX19LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxpLGUpe3RoaXMuX21hcC5fZmlyZURPTUV2ZW50KGksZXx8aS50eXBlLHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10Ll9vcmRlcjtuJiYoaT1uLm5leHQsZT1uLnByZXYsaSYmKChpLnByZXY9ZSk/ZS5uZXh0PWk6aSYmKHR
24510oaXMuX2RyYXdGaXJzdD1pKSxuLnByZXY9dGhpcy5fZHJhd0xhc3QsKHRoaXMuX2RyYXdMYXN0Lm5leHQ9bikubmV4dD1udWxsLHRoaXMuX2RyYXdMYXN0PW4sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSkpfSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXQuX29yZGVyO24mJihpPW4ubmV4dCwoZT1uLnByZXYpJiYoKGUubmV4dD1pKT9pLnByZXY9ZTplJiYodGhpcy5fZHJhd0xhc3Q9ZSksbi5wcmV2PW51bGwsbi5uZXh0PXRoaXMuX2RyYXdGaXJzdCx0aGlzLl9kcmF3Rmlyc3QucHJldj1uLHRoaXMuX2RyYXdGaXJzdD1uLHRoaXMuX3JlcXVlc3RSZWRyYXcodCkpKX19KTtmdW5jdGlvbiBsbih0KXtyZXR1cm4gU3Q/bmV3IHVuKHQpOm51bGx9dmFyIGNuPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBkb2N1bWVudC5uYW1lc3BhY2VzLmFkZChcImx2bWxcIixcInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sXCIpLGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiPGx2bWw6XCIrdCsnIGNsYXNzPVwibHZtbFwiPicpfX1jYXRjaCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8XCIrdCsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cImx2bWxcIj4nKX19fSgpLF9uPXtfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj1zaShcImRpdlwiLFwibGVhZmxldC12bWwtY29udGFpbmVyXCIpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9hbmltYXRpbmdab29tfHwoaG4ucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSx0aGlzLmZpcmUoXCJ1cGRhdGVcIikpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyPWNuKFwic2hhcGVcIik7Y2koaSxcImxlYWZsZXQtdm1sLXNoYXBlIFwiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHxcIlwiKSksaS5jb29yZHNpemU9XCIxIDFcIix0Ll9wYXRoPWNuKFwicGF0aFwiKSxpLmFwcGVuZENoaWxkKHQuX3BhdGgpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1ttKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt2YXIgaT10Ll9jb250YWluZXI7dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGkpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdC5hZGRJbnRlcmFjdGl2ZVRhcmdldChpKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyO3JpKGkpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQoaSksZGVsZXRlIHRoaXMuX2xheWVyc1ttKHQpXX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3N0cm9rZSxlPXQuX2ZpbGwsbj10Lm9wdGlvbnMsbz10Ll9jb250YWluZXI7by5zdHJva2VkPSEhbi5zdHJva2Usby5maWxsZWQ9ISFuLmZpbGwsbi5zdHJva2U/KGk9aXx8KHQuX3N0cm9rZT1jbihcInN0cm9rZVwiKSksby5hcHBlbmRDaGlsZChpKSxpLndlaWdodD1uLndlaWdodCtcInB4XCIsaS5jb2xvcj1uLmNvbG9yLGkub3BhY2l0eT1uLm9wYWNpdHksbi5kYXNoQXJyYXk/aS5kYXNoU3R5bGU9ZyhuLmRhc2hBcnJheSk/bi5kYXNoQXJyYXkuam9pbihcIiBcIik6bi5kYXNoQXJyYXkucmVwbGFjZSgvKCAqLCAqKS9nLFwiIFwiKTppLmRhc2hTdHlsZT1cIlwiLGkuZW5kY2FwPW4ubGluZUNhcC5yZXBsYWNlKFwiYnV0dFwiLFwiZmxhdFwiKSxpLmpvaW5zdHlsZT1uLmxpbmVKb2luKTppJiYoby5yZW1vdmVDaGlsZChpKSx0Ll9zdHJva2U9bnVsbCksbi5maWxsPyhlPWV8fCh0Ll9maWxsPWNuKFwiZmlsbFwiKSksby5hcHBlbmRDaGlsZChlKSxlLmNvbG9yPW4uZmlsbENvbG9yfHxuLmNvbG9yLGUub3BhY2l0eT1uLmZpbGxPcGFjaXR5KTplJiYoby5yZW1vdmVDaGlsZChlKSx0Ll9maWxsPW51bGwpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LnJvdW5kKCksZT1NYXRoLnJvdW5kKHQuX3JhZGl1cyksbj1NYXRoLnJvdW5kKHQuX3JhZGl1c1l8fGUpO3RoaXMuX3NldFBhdGgodCx0Ll9lbXB0eSgpP1wiTTAgMFwiOlwiQUwgXCIraS54K1wiLFwiK2kueStcIiBcIitlK1wiLFwiK24rXCIgMCwyMzU5MjYwMFwiKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnY9aX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtoaSh0Ll9jb250YWluZXIpfSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dWkodC5fY29udGFpbmVyKX19LGRuPUV0P2NuOkoscG49aG4uZXh0ZW5kKHtnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1obi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHQuem9vbXN0YXJ0PXRoaXMuX29uWm9vbVN0YXJ0LHR9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyPWRuKFwic3ZnXCIpLHRoaXMuX2NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLFwibm9uZVwiKSx0aGlzLl9yb290R3JvdXA9ZG4oXCJnXCIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yb290R3JvdXApfSxfZGVzdHJveUNvbnRhaW5lcjpmdW5jdGlvbigpe3JpKHRoaXMuX2NvbnRhaW5lciksU2kodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyLGRlbGV0ZSB0aGlzLl9yb290R3JvdXAsZGVsZXRlIHRoaXMuX3N2Z1NpemV9LF9vblpvb21TdGFydDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaSxlO3RoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fYm91bmRzfHwoaG4ucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSxpPSh0PXRoaXMuX2JvdW5kcykuZ2V0U2l6ZSgpLGU9dGhpcy5fY29udGFpbmVyLHRoaXMuX3N2Z1NpemUmJnRoaXMuX3N2Z1NpemUuZXF1YWxzKGkpfHwodGhpcy5fc3ZnU2l6ZT1pLGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIixpLngpLGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsaS55KSksdmkoZSx0Lm1pbiksZS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsW3QubWluLngsdC5taW4ueSxpLngsaS55XS5qb2luKFwiIFwiKSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BhdGg9ZG4oXCJwYXRoXCIpO3Qub3B0aW9ucy5jbGFzc05hbWUmJmNpKGksdC5vcHRpb25zLmNsYXNzTmFtZSksdC5vcHRpb25zLmludGVyYWN0aXZlJiZjaShpLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl91cGRhdGVTdHlsZSh0KSx0aGlzLl9sYXllcnNbbSh0KV09dH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcm9vdEdyb3VwfHx0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fcm9vdEdyb3VwLmFwcGVuZENoaWxkKHQuX3BhdGgpLHQuYWRkSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCl9LF9yZW1vdmVQYXRoOmZ1bmN0aW9uKHQpe3JpKHQuX3BhdGgpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCksZGVsZXRlIHRoaXMuX2xheWVyc1ttKHQpXX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5fcGF0aCxlPXQub3B0aW9ucztpJiYoZS5zdHJva2U/KGkuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsZS5jb2xvciksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utb3BhY2l0eVwiLGUub3BhY2l0eSksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIixlLndlaWdodCksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWNhcFwiLGUubGluZUNhcCksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWpvaW5cIixlLmxpbmVKb2luKSxlLmRhc2hBcnJheT9pLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNoYXJyYXlcIixlLmRhc2hBcnJheSk6aS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIpLGUuZGFzaE9mZnNldD9pLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIsZS5kYXNoT2Zmc2V0KTppLnJlbW92ZUF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIpKTppLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLFwibm9uZVwiKSxlLmZpbGw/KGkuc2V0QXR0cmlidXRlKFwiZmlsbFwiLGUuZmlsbENvbG9yfHxlLmNvbG9yKSxpLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLGUuZmlsbE9wYWNpdHkpLGkuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsZS5maWxsUnVsZXx8XCJldmVub2RkXCIpKTppLnNldEF0dHJpYnV0ZShcImZpbGxcIixcIm5vbmVcIikpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGkpe3RoaXMuX3NldFBhdGgodCwkKHQuX3BhcnRzLGkpKX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXt2YXIgaT10Ll9wb2ludCxlPU1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzKSwxKSxuPVwiYVwiK2UrXCIsXCIrKE1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzWSksMSl8fGUpK1wiIDAgMSwwIFwiLG89dC5fZW1wdHkoKT9cIk0wIDBcIjpcIk1cIisoaS54LWUpK1wiLFwiK2kueStuKzIqZStcIiwwIFwiK24rMiotZStcIiwwIFwiO3RoaXMuX3NldFBhdGgodCxvKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnNldEF0dHJpYnV0ZShcImRcIixpKX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtoaSh0Ll9wYXR
24510oKX0sX2JyaW5nVG9CYWNrOmZ1bmN0aW9uKHQpe3VpKHQuX3BhdGgpfX0pO2Z1bmN0aW9uIG1uKHQpe3JldHVybiBadHx8RXQ/bmV3IHBuKHQpOm51bGx9RXQmJnBuLmluY2x1ZGUoX24pLEtpLmluY2x1ZGUoe2dldFJlbmRlcmVyOmZ1bmN0aW9uKHQpe3ZhciBpPShpPXQub3B0aW9ucy5yZW5kZXJlcnx8dGhpcy5fZ2V0UGFuZVJlbmRlcmVyKHQub3B0aW9ucy5wYW5lKXx8dGhpcy5vcHRpb25zLnJlbmRlcmVyfHx0aGlzLl9yZW5kZXJlcil8fCh0aGlzLl9yZW5kZXJlcj10aGlzLl9jcmVhdGVSZW5kZXJlcigpKTtyZXR1cm4gdGhpcy5oYXNMYXllcihpKXx8dGhpcy5hZGRMYXllcihpKSxpfSxfZ2V0UGFuZVJlbmRlcmVyOmZ1bmN0aW9uKHQpe2lmKFwib3ZlcmxheVBhbmVcIj09PXR8fHZvaWQgMD09PXQpcmV0dXJuITE7dmFyIGk9dGhpcy5fcGFuZVJlbmRlcmVyc1t0XTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9dGhpcy5fY3JlYXRlUmVuZGVyZXIoe3BhbmU6dH0pLHRoaXMuX3BhbmVSZW5kZXJlcnNbdF09aSksaX0sX2NyZWF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucHJlZmVyQ2FudmFzJiZsbih0KXx8bW4odCl9fSk7dmFyIGZuPVJlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe1JlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCksaSl9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSl9LF9ib3VuZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCl7cmV0dXJuWyh0PU4odCkpLmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KTtwbi5jcmVhdGU9ZG4scG4ucG9pbnRzVG9QYXRoPSQsTmUuZ2VvbWV0cnlUb0xheWVyPURlLE5lLmNvb3Jkc1RvTGF0TG5nPVdlLE5lLmNvb3Jkc1RvTGF0TG5ncz1IZSxOZS5sYXRMbmdUb0Nvb3Jkcz1GZSxOZS5sYXRMbmdzVG9Db29yZHM9VWUsTmUuZ2V0RmVhdHVyZT1WZSxOZS5hc0ZlYXR1cmU9cWUsS2kubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSk7dmFyIGduPWllLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9dC5fY29udGFpbmVyLHRoaXMuX3BhbmU9dC5fcGFuZXMub3ZlcmxheVBhbmUsdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9MCx0Lm9uKFwidW5sb2FkXCIsdGhpcy5fZGVzdHJveSx0aGlzKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt6aSh0aGlzLl9jb250YWluZXIsXCJtb3VzZWRvd25cIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtTaSh0aGlzLl9jb250YWluZXIsXCJtb3VzZWRvd25cIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7cmkodGhpcy5fcGFuZSksZGVsZXRlIHRoaXMuX3BhbmV9LF9yZXNldFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9MCx0aGlzLl9tb3ZlZD0hMX0sX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlOmZ1bmN0aW9uKCl7MCE9PXRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0KSx0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe2lmKCF0LnNoaWZ0S2V5fHwxIT09dC53aGljaCYmMSE9PXQuYnV0dG9uKXJldHVybiExO3RoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCksdGhpcy5fcmVzZXRTdGF0ZSgpLFh0KCkseGkoKSx0aGlzLl9zdGFydFBvaW50PXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx6aShkb2N1bWVudCx7Y29udGV4dG1lbnU6TmksbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmVkfHwodGhpcy5fbW92ZWQ9ITAsdGhpcy5fYm94PXNpKFwiZGl2XCIsXCJsZWFmbGV0LXpvb20tYm94XCIsdGhpcy5fY29udGFpbmVyKSxjaSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LWNyb3NzaGFpclwiKSx0aGlzLl9tYXAuZmlyZShcImJveHpvb21zdGFydFwiKSksdGhpcy5fcG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpO3ZhciBpPW5ldyBJKHRoaXMuX3BvaW50LHRoaXMuX3N0YXJ0UG9pbnQpLGU9aS5nZXRTaXplKCk7dmkodGhpcy5fYm94LGkubWluKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9ZS54K1wicHhcIix0aGlzLl9ib3guc3R5bGUuaGVpZ2h0PWUueStcInB4XCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKHJpKHRoaXMuX2JveCksX2kodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1jcm9zc2hhaXJcIikpLEp0KCksd2koKSxTaShkb2N1bWVudCx7Y29udGV4dG1lbnU6TmksbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXt2YXIgaTsxIT09dC53aGljaCYmMSE9PXQuYnV0dG9ufHwodGhpcy5fZmluaXNoKCksdGhpcy5fbW92ZWQmJih0aGlzLl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSgpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PXNldFRpbWVvdXQocCh0aGlzLl9yZXNldFN0YXRlLHRoaXMpLDApLGk9bmV3IFIodGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRQb2ludCksdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQpKSx0aGlzLl9tYXAuZml0Qm91bmRzKGkpLmZpcmUoXCJib3h6b29tZW5kXCIse2JveFpvb21Cb3VuZHM6aX0pKSl9LF9vbktleURvd246ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJnRoaXMuX2ZpbmlzaCgpfX0pO0tpLmFkZEluaXRIb29rKFwiYWRkSGFuZGxlclwiLFwiYm94Wm9vbVwiLGduKSxLaS5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pO3ZhciB2bj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9uKFwiZGJsY2xpY2tcIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoXCJkYmxjbGlja1wiLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPWkuZ2V0Wm9vbSgpLG49aS5vcHRpb25zLnpvb21EZWx0YSxvPXQub3JpZ2luYWxFdmVudC5zaGlmdEtleT9lLW46ZStuO1wiY2VudGVyXCI9PT1pLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2kuc2V0Wm9vbShvKTppLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxvKX19KTtLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcImRvdWJsZUNsaWNrWm9vbVwiLHZu
24510KSxLaS5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IXN0LGluZXJ0aWFEZWNlbGVyYXRpb246MzQwMCxpbmVydGlhTWF4U3BlZWQ6MS8wLGVhc2VMaW5lYXJpdHk6LjIsd29ybGRDb3B5SnVtcDohMSxtYXhCb3VuZHNWaXNjb3NpdHk6MH0pO3ZhciB5bj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5fZHJhZ2dhYmxlfHwodD10aGlzLl9tYXAsdGhpcy5fZHJhZ2dhYmxlPW5ldyBhZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdXcmFwLHRoaXMpLHQub24oXCJ6b29tZW5kXCIsdGhpcy5fb25ab29tRW5kLHRoaXMpLHQud2hlblJlYWR5KHRoaXMuX29uWm9vbUVuZCx0aGlzKSkpLGNpKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC1ncmFiIGxlYWZsZXQtdG91Y2gtZHJhZ1wiKSx0aGlzLl9kcmFnZ2FibGUuZW5hYmxlKCksdGhpcy5fcG9zaXRpb25zPVtdLHRoaXMuX3RpbWVzPVtdfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe19pKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC1ncmFiXCIpLF9pKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC10b3VjaC1kcmFnXCIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5fbWFwO2kuX3N0b3AoKSx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eT8odD1OKHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kcyksdGhpcy5fb2Zmc2V0TGltaXQ9Tyh0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldE5vcnRoV2VzdCgpKS5tdWx0aXBseUJ5KC0xKSx0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKS5hZGQodGhpcy5fbWFwLmdldFNpemUoKSkpLHRoaXMuX3Zpc2Nvc2l0eT1NYXRoLm1pbigxLE1hdGgubWF4KDAsdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzVmlzY29zaXR5KSkpOnRoaXMuX29mZnNldExpbWl0PW51bGwsaS5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIiksaS5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKHQpe3ZhciBpLGU7dGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSYmKGk9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MsdGhpcy5fcG9zaXRpb25zLnB1c2goZSksdGhpcy5fdGltZXMucHVzaChpKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhpKSksdGhpcy5fbWFwLmZpcmUoXCJtb3ZlXCIsdCkuZmlyZShcImRyYWdcIix0KX0sX3BydW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQpe2Zvcig7MTx0aGlzLl9wb3NpdGlvbnMubGVuZ3RoJiY1MDx0LXRoaXMuX3RpbWVzWzBdOyl0aGlzLl9wb3NpdGlvbnMuc2hpZnQoKSx0aGlzLl90
24510aW1lcy5zaGlmdCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldFNpemUoKS5kaXZpZGVCeSgyKSxpPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoWzAsMF0pO3RoaXMuX2luaXRpYWxXb3JsZE9mZnNldD1pLnN1YnRyYWN0KHQpLngsdGhpcy5fd29ybGRXaWR0aD10aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcygpLmdldFNpemUoKS54fSxfdmlzY291c0xpbWl0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQtKHQtaSkqdGhpcy5fdmlzY29zaXR5fSxfb25QcmVEcmFnTGltaXQ6ZnVuY3Rpb24oKXt2YXIgdCxpO3RoaXMuX3Zpc2Nvc2l0eSYmdGhpcy5fb2Zmc2V0TGltaXQmJih0PXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnN1YnRyYWN0KHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MpLGk9dGhpcy5fb2Zmc2V0TGltaXQsdC54PGkubWluLngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxpLm1pbi54KSksdC55PGkubWluLnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxpLm1pbi55KSksdC54PmkubWF4LngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxpLm1heC54KSksdC55PmkubWF4LnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxpLm1heC55KSksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M9dGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5hZGQodCkpfSxfb25QcmVEcmFnV3JhcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dvcmxkV2lkdGgsaT1NYXRoLnJvdW5kKHQvMiksZT10aGlzLl9pbml0aWFsV29ybGRPZmZzZXQsbj10aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54LG89KG4taStlKSV0K2ktZSxzPShuK2krZSkldC1pLWUscj1NYXRoLmFicyhvK2UpPE1hdGguYWJzKHMrZSk/bzpzO3RoaXMuX2RyYWdnYWJsZS5fYWJzUG9zPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLmNsb25lKCksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueD1yfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbi
24510xvLHMscixhLGgsdSxsPXRoaXMuX21hcCxjPWwub3B0aW9ucyxfPSFjLmluZXJ0aWF8fHRoaXMuX3RpbWVzLmxlbmd0aDwyO2wuZmlyZShcImRyYWdlbmRcIix0KSxfP2wuZmlyZShcIm1vdmVlbmRcIik6KHRoaXMuX3BydW5lUG9zaXRpb25zKCtuZXcgRGF0ZSksaT10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSksZT0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxuPWMuZWFzZUxpbmVhcml0eSxzPShvPWkubXVsdGlwbHlCeShuL2UpKS5kaXN0YW5jZVRvKFswLDBdKSxyPU1hdGgubWluKGMuaW5lcnRpYU1heFNwZWVkLHMpLGE9by5tdWx0aXBseUJ5KHIvcyksaD1yLyhjLmluZXJ0aWFEZWNlbGVyYXRpb24qbiksKHU9YS5tdWx0aXBseUJ5KC1oLzIpLnJvdW5kKCkpLnh8fHUueT8odT1sLl9saW1pdE9mZnNldCh1LGwub3B0aW9ucy5tYXhCb3VuZHMpLE0oZnVuY3Rpb24oKXtsLnBhbkJ5KHUse2R1cmF0aW9uOmgsZWFzZUxpbmVhcml0eTpuLG5vTW92ZVN0YXJ0OiEwLGFuaW1hdGU6ITB9KX0pKTpsLmZpcmUoXCJtb3ZlZW5kXCIpKX19KTtLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcImRyYWdnaW5nXCIseW4pLEtpLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pO3ZhciB4bj1pZS5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDU0LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuRGVsdGEodC5vcHRpb25zLmtleWJvYXJkUGFuRGVsdGEpLHRoaXMuX3NldFpvb21EZWx0YSh0Lm9wdGlvbnMuem9vbURlbHRhKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjt0LnRhYkluZGV4PD0wJiYodC50YWJJbmRleD1cIjBcIiksemkodCx7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vbih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKSxTaSh0aGlzLl9tYXAuX2NvbnRhaW5lcix7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vZmYoe2ZvY3VzOnRoaXMuX2FkZEhvb2tzLGJsdXI6dGhpcy5fcmVtb3ZlSG9va3N9LHRoaXMpfSxfb25Nb3VzZURvd246ZnVuY3Rpb24oKXt2YXIgdCxpLGUsbjt0aGlzLl9mb2N1c2VkfHwodD1kb2N1bWVudC5ib2R5LGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9dC5zY3JvbGxUb3B8fGkuc2Nyb2xsVG9wLG49dC5zY3JvbGxMZWZ0fHxpLnNjcm9sbExlZnQsdGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx3aW5kb3cuc2Nyb2xsVG8obixlKSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZShcImZvY3VzXCIpfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9tYXAuZmlyZShcImJsdXJcIil9LF9zZXRQYW5EZWx0YTpmdW5jdGlvbih0KXtmb3IodmFyIGk9dGhpcy5fcGFuS2V5cz17fSxlPXRoaXMua2V5Q29kZXMsbj0wLG89ZS5sZWZ0Lmxlbmd0aDtuPG87bisrKWlbZS5sZWZ0W25dXT1bLTEqdCwwXTtmb3Iobj0wLG89ZS5yaWdodC5sZW5ndGg7bjxvO24rKylpW2UucmlnaHRbbl1dPVt0LDBdO2ZvcihuPTAsbz1lLmRvd24ubGVuZ3RoO248bztuKyspaVtlLmRvd25bbl1dPVswLHRdO2ZvcihuPTAsbz1lLnVwLmxlbmd0aDtuPG87bisrKWlbZS51cFtuXV09WzAsLTEqdF19LF9zZXRab29tRGVsdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPXRoaXMuX3pvb21LZXlzPXt9LGU9dGhpcy5rZXlDb2RlcyxuPTAsbz1lLnpvb21Jbi5sZW5ndGg7bjxvO24rKylpW2Uuem9vbUluW25dXT10O2ZvcihuPTAsbz1lLnpvb21PdXQubGVuZ3RoO248bztuKyspaVtlLnpvb21PdXRbbl1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXt6aShkb2N1bWVudCxcImtleWRvd25cIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9yZW1vdmVIb29rczpmdW5jdGlvbigpe1NpKGRvY3VtZW50LFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXtpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciBpLGU9dC5rZXlDb2RlLG49dGhpcy5fbWFwO2lmKGUgaW4gdGhpcy5fcGFuS2V5cyluLl9wYW5BbmltJiZuLl9wYW5BbmltLl9pblByb2dyZXNzfHwoaT10aGlzLl9wYW5LZXlzW2VdLHQuc2hpZnRLZXkmJihpPUEoaSkubXVsdGlwbHlCeSgzKSksbi5wYW5CeShpKSxuLm9wdGlvbnMubWF4Qm91bmRzJiZuLnBhbkluc2lkZUJvdW5kcyhuLm9wdGlvbnMubWF4Qm91bmRzKSk7ZWxzZSBpZihlIGluIHRoaXMuX3pvb21LZXlzKW4uc2V0Wm9vbShuLmdldFpvb20oKSsodC5zaGlmdEtleT8zOjEpKnRoaXMuX3pvb21LZXlzW2VdKTtlbHNle2lmKDI3IT09ZXx8IW4uX3BvcHVwfHwhbi5fcG9wdXAub3B0aW9ucy5jbG9zZU9uRXNjYXBlS2V5KXJldHVybjtuLmNsb3NlUG9wdXAoKX1OaSh0KX19fSk7S2kuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJrZXlib2FyZFwiLHhuKSxLaS5tZXJnZU9wdGlvbnMoe3Njcm9sbFdoZWVsWm9vbTohMCx3aGVlbERlYm91bmNlVGltZTo0MCx3aGVlbFB4UGVyWm9vbUxldmVsOjYwfSk7dmFyIHduPWllLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXt6aSh0aGlzLl9tYXAuX2NvbnRhaW5lcixcIndoZWVsXCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKSx0aGlzLl9kZWx0YT0wfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe1NpKHRoaXMuX21hcC5fY29udGFpbmVyLFwid2hlZWxcIix0aGlzLl9vbldoZWVsU2Nyb2xsLHRoaXMpfSxfb25XaGVlbFNjcm9sbDpmdW5jdGlvbih0KXt2YXIgaT1XaSh0KSxlPXRoaXMuX21hcC5vcHRpb25zLndoZWVsRGVib3VuY2VUaW1lO3RoaXMuX2RlbHRhKz1pLHRoaXMuX2xhc3RNb3VzZVBvcz10aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksdGhpcy5fc3RhcnRUaW1lfHwodGhpcy5fc3RhcnRUaW1lPStuZXcgRGF0ZSk7dmFyIG49TWF0aC5tYXgoZS0obmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lKSwwKTtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPXNldFRpbWVvdXQocCh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxuKSxOaSh0KX0sX3BlcmZvcm1ab29tOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9dC5nZXRab29tKCksZT10aGlzLl9tYXAub3B0aW9ucy56b29tU25hcHx8MDt0Ll9zdG9wKCk7dmFyIG49dGhpcy5fZGVsdGEvKDQqdGhpcy5fbWFwLm9wdGlvbnMud2hlZWx
24510QeFBlclpvb21MZXZlbCksbz00Kk1hdGgubG9nKDIvKDErTWF0aC5leHAoLU1hdGguYWJzKG4pKSkpL01hdGguTE4yLHM9ZT9NYXRoLmNlaWwoby9lKSplOm8scj10Ll9saW1pdFpvb20oaSsoMDx0aGlzLl9kZWx0YT9zOi1zKSktaTt0aGlzLl9kZWx0YT0wLHRoaXMuX3N0YXJ0VGltZT1udWxsLHImJihcImNlbnRlclwiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStyKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrcikpfX0pO0tpLmFkZEluaXRIb29rKFwiYWRkSGFuZGxlclwiLFwic2Nyb2xsV2hlZWxab29tXCIsd24pLEtpLm1lcmdlT3B0aW9ucyh7dGFwOiEwLHRhcFRvbGVyYW5jZToxNX0pO3ZhciBQbj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7emkodGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe1NpKHRoaXMuX21hcC5fY29udGFpbmVyLFwidG91Y2hzdGFydFwiLHRoaXMuX29uRG93bix0aGlzKX0sX29uRG93bjpmdW5jdGlvbih0KXtpZih0LnRvdWNoZXMpe2lmKFJpKHQpLHRoaXMuX2ZpcmVDbGljaz0hMCwxPHQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHRoaXMuX2ZpcmVDbGljaz0hMSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dmFyIGk9dC50b3VjaGVzWzBdLGU9aS50YXJnZXQ7dGhpcy5fc3RhcnRQb3M9dGhpcy5fbmV3UG9zPW5ldyBrKGkuY2xpZW50WCxpLmNsaWVudFkpLGUudGFnTmFtZSYmXCJhXCI9PT1lLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmY2koZSxcImxlYWZsZXQtYWN0aXZlXCIpLHRoaXMuX2hvbGRUaW1lb3V0PXNldFRpbWVvdXQocChmdW5jdGlvbigpe3RoaXMuX2lzVGFwVmFsaWQoKSYmKHRoaXMuX2ZpcmVDbGljaz0hMSx0aGlzLl9vblVwKCksdGhpcy5fc2ltdWxhdGVFdmVudChcImNvbnRleHRtZW51XCIsaSkpfSx0aGlzKSwxZTMpLHRoaXMuX3NpbXVsYXRlRXZlbnQoXCJtb3VzZWRvd25cIixpKSx6aShkb2N1bWVudCx7dG91Y2htb3ZlOnRoaXMuX29uTW92ZSx0b3VjaGVuZDp0aGlzLl9vblVwfSx0aGlzKX19LF9vblVwOmZ1bmN0aW9uKHQpe3ZhciBpLGU7Y2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KSxTaShkb2N1bWVudCx7dG91Y2htb3ZlOnRoaXMuX29uTW92ZSx0b3VjaGVuZDp0aGlzLl9vblVwfSx0aGlzKSx0aGlzLl9maXJlQ2xpY2smJnQmJnQuY2hhbmdlZFRvdWNoZXMmJigoZT0oaT10LmNoYW5nZWRUb3VjaGVzWzBdKS50YXJnZXQpJiZlLnRhZ05hbWUmJlwiYVwiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJl9pKGUsXCJsZWFmbGV0LWFjdGl2ZVwiKSx0aGlzLl9zaW11bGF0ZUV2ZW50KFwibW91c2V1cFwiLGkpLHRoaXMuX2lzVGFwVmFsaWQoKSYmdGhpcy5fc2ltdWxhdGVFdmVudChcImNsaWNrXCIsaSkpfSxfaXNUYXBWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyk8PXRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgaT10LnRvdWNoZXNbMF07dGhpcy5fbmV3UG9zPW5ldyBrKGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3NpbXVsYXRlRXZlbnQoXCJtb3VzZW1vdmVcIixpKX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO2UuX3NpbXVsYXRlZD0hMCxpLnRhcmdldC5fc2ltdWxhdGVkQ2xpY2s9ITAsZS5pbml0TW91c2VFdmVudCh0LCEwLCEwLHdpbmRvdywxLGkuc2NyZWVuWCxpLnNjcmVlblksaS5jbGllbnRYLGkuY2xpZW50WSwhMSwhMSwhMSwhMSwwLG51bGwpLGkudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZSl9fSk7IWJ0fHxMdCYmIWN0fHxLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRhcFwiLFBuKSxLaS5tZXJnZU9wdGlvbnMoe3RvdWNoWm9vbTpidCYmIXN0LGJvdW5jZUF0Wm9vbUxpbWl0czohMH0pO3ZhciBMbj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7Y2kodGhpcy5fbWFwLl9jb250YWluZXIsXCJsZWFmbGV0LXRvdWNoLXpvb21cIiksemkodGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe19pKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC10b3VjaC16b29tXCIpLFNpKHRoaXMuX21hcC5fY29udGFpbmVyLFwidG91Y2hzdGFydFwiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbih0KXt2YXIgaSxlLG49dGhpcy5fbWFwOyF0LnRvdWNoZXN8fDIhPT10LnRvdWNoZXMubGVuZ3RofHxuLl9hbmltYXRpbmdab29tfHx0aGlzLl96b29taW5nfHwoaT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1swXSksZT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1sxXSksdGhpcy5fY2VudGVyUG9pbnQ9bi5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLHRoaXMuX3N0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCksXCJjZW50ZXJcIiE9PW4ub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyhpLmFkZChlKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9aS5kaXN0YW5jZVRvKGUpLHRoaXMuX3N0YXJ0Wm9vbT1uLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLG4uX3N0b3AoKSx6aShkb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uVG91Y2hNb3ZlLHRoaXMpLHppKGRvY3VtZW50LFwidG91Y2hlbmRcIix0aGlzLl9vblRvdWNoRW5kLHRoaXMpLFJpKHQpKX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKHQpe2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJnRoaXMuX3pvb21pbmcpe3ZhciBpPXRoaXMuX21hcCxlPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKSxvPWUuZGlzdGFuY2VUbyhuKS90aGlzLl9zdGFydERpc3Q7aWYodGhpcy5fem9vbT1pLmdldFNjYWxlWm9vbShvLHRoaXMuX3N0YXJ0Wm9vbSksIWkub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHMmJih0aGlzLl96b29tPGkuZ2V0TWluWm9vbSgpJiZvPDF8fHRoaXMuX3pvb20+aS5nZXRNYXhab29tKCkmJjE8bykmJih0aGlzLl96b29tPWkuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSksXCJjZW50ZXJcIj09PWkub3B0aW9ucy50b3VjaFpvb20pe2lmKHRoaXMuX2NlbnRlcj10aGlzLl9zdGFydExhdExuZywxPT1vKXJldHVybn1lbHNle3ZhciBzPWUuX2FkZChuKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX2NlbnRlclBvaW50KTtpZigxPT1vJiYwPT09cy54JiYwPT09cy55KXJldHVybjt0aGlzLl9jZW50ZXI9aS51bnByb2plY3QoaS5wcm9qZWN0KHRoaXMuX3BpbmNoU3RhcnRMYXRMbmcsdGhpcy5fem9vbSkuc3VidHJhY3QocyksdGhpcy5fem9vbSl9dGhpcy5fbW92ZWR8fChpLl9tb3ZlU3RhcnQoITAsITEpLHRoaXMuX21vdmVkPSEwKSx6KHRoaXMuX2FuaW1SZXF1ZXN0KTt2YXIgcj1wKGkuX21vdmUsaSx0aGlzLl9jZW50ZXIsdGhpcy5fem9vbSx7cGluY2g6ITAscm91bmQ6ITF9KTt0aGlzLl9hbmltUmVxdWVzdD1NKHIsdGhpcywhMCksUmkodCl9fSxfb25Ub3VjaEVuZDpmdW5jdGlvbigpe3RoaXMuX21vdmVkJiZ0aGlzLl96b29taW5nPyh0aGlzLl96b29taW5nPSExLHoodGhpcy5fYW5pbVJlcXVlc3QpLFNpKGRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcyksU2koZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLH
24510RoaXMuX29uVG91Y2hFbmQsdGhpcyksdGhpcy5fbWFwLm9wdGlvbnMuem9vbUFuaW1hdGlvbj90aGlzLl9tYXAuX2FuaW1hdGVab29tKHRoaXMuX2NlbnRlcix0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwhMCx0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCk6dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pKSk6dGhpcy5fem9vbWluZz0hMX19KTtLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRvdWNoWm9vbVwiLExuKSxLaS5Cb3hab29tPWduLEtpLkRvdWJsZUNsaWNrWm9vbT12bixLaS5EcmFnPXluLEtpLktleWJvYXJkPXhuLEtpLlNjcm9sbFdoZWVsWm9vbT13bixLaS5UYXA9UG4sS2kuVG91Y2hab29tPUxuLHQudmVyc2lvbj1cIjEuNy4xXCIsdC5Db250cm9sPVhpLHQuY29udHJvbD1ZaSx0LkJyb3dzZXI9QnQsdC5FdmVudGVkPUUsdC5NaXhpbj1uZSx0LlV0aWw9Qyx0LkNsYXNzPVMsdC5IYW5kbGVyPWllLHQuZXh0ZW5kPWgsdC5iaW5kPXAsdC5zdGFtcD1tLHQuc2V0T3B0aW9ucz1jLHQuRG9tRXZlbnQ9cWksdC5Eb21VdGlsPU1pLHQuUG9zQW5pbWF0aW9uPUdpLHQuRHJhZ2dhYmxlPWFlLHQuTGluZVV0aWw9ZmUsdC5Qb2x5VXRpbD15ZSx0LlBvaW50PWssdC5wb2ludD1BLHQuQm91bmRzPUksdC5ib3VuZHM9Tyx0LlRyYW5zZm9ybWF0aW9uPXEsdC50cmFuc2Zvcm1hdGlvbj1HLHQuUHJvamVjdGlvbj1QZSx0LkxhdExuZz1ELHQubGF0TG5nPWosdC5MYXRMbmdCb3VuZHM9Uix0LmxhdExuZ0JvdW5kcz1OLHQuQ1JTPUgsdC5HZW9KU09OPU5lLHQuZ2VvSlNPTj1LZSx0Lmdlb0pzb249WWUsdC5MYXllcj1NZSx0LkxheWVyR3JvdXA9emUsdC5sYXllckdyb3VwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB6ZSh0LGkpfSx0LkZlYXR1cmVHcm91cD1DZSx0LmZlYXR1cmVHcm91cD1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgQ2UodCxpKX0sdC5JbWFnZU92ZXJsYXk9WGUsdC5pbWFnZU92ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgWGUodCxpLGUpfSx0LlZpZGVvT3ZlcmxheT1KZSx0LnZpZGVvT3ZlcmxheT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBKZSh0LGksZSl9LHQuU1ZHT3ZlcmxheT0kZSx0LnN2Z092ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgJGUodCxpLGUpfSx0LkRpdk92ZXJsYXk9UWUsdC5Qb3B1cD10bix0LnBvcHVwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB0bih0LGkpfSx0LlRvb2x0aXA9ZW4sdC50b29sdGlwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBlbih0LGkpfSx0Lkljb249U2UsdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2UodCl9LHQuRGl2SWNvbj1ubix0LmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBubih0KX0sdC5NYXJrZXI9a2UsdC5tYXJrZXI9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IGtlKHQsaSl9LHQuVGlsZUxheWVyPXNuLHQudGlsZUxheWVyPXJuLHQuR3JpZExheWVyPW9uLHQuZ3JpZExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb24odCl9LHQuU1ZHPXBuLHQuc3ZnPW1uLHQuUmVuZGVyZXI9aG4sdC5DYW52YXM9dW4sdC5jYW52YXM9bG4sdC5QYXRoPUJlLHQuQ2lyY2xlTWFya2VyPUFlLHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBBZSh0LGkpfSx0LkNpcmNsZT1JZSx0LmNpcmNsZT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBJZSh0LGksZSl9LHQuUG9seWxpbmU9T2UsdC5wb2x5bGluZT1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgT2UodCxpKX0sdC5Qb2x5Z29uPVJlLHQucG9seWdvbj1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgUmUodCxpKX0sdC5SZWN0YW5nbGU9Zm4sdC5yZWN0YW5nbGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IGZuKHQsaSl9LHQuTWFwPUtpLHQubWFwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBLaSh0LGkpfTt2YXIgYm49d2luZG93Lkw7dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5MPWJuLHRoaXN9LHdpbmRvdy5MPXR9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlYWZsZXQuanMubWFwIiwiLypcbiAqIExlYWZsZXQuU2xlZXBcbiAqL1xuXG4vKlxuICogRGVmYXVsdCBCdXR0b24gKHRvdWNoIGRldmljZXMgb25seSlcbiAqL1xuXG5MLkNvbnRyb2wuU2xlZXBNYXBDb250cm9sID0gTC5Db250cm9sLmV4dGVuZCh7XG5cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0cyl7XG4gICAgTC5zZXRPcHRpb25zKHRoaXMsb3B0cyk7XG4gIH0sXG5cbiAgb3B0aW9uczoge1xuICAgIHBvc2l0aW9uOiAndG9wcmlnaHQnLFxuICAgIHByb21wdDogJ2Rpc2FibGUgbWFwJyxcbiAgICBzdHlsZXM6IHtcbiAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnd2hpdGUnLFxuICAgICAgJ3BhZGRpbmcnOiAnNXB4JyxcbiAgICAgICdib3JkZXInOiAnMnB4IHNvbGlkIGdyYXknXG4gICAgfVxuICB9LFxuXG4gIGJ1aWxkQ29udGFpbmVyOiBmdW5jdGlvbigpe1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29udGFpbmVyID0gTC5Eb21VdGlsLmNyZWF0ZSgncCcsICdzbGVlcC1idXR0b24nKTtcbiAgICB2YXIgYm91bmRFdmVudCA9IHRoaXMuX25vbkJvdW5kRXZlbnQuYmluZCh0aGlzKTtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnByb21wdDtcbiAgICBMLkRvbUV2ZW50LmFkZExpc3RlbmVyKGNvbnRhaW5lciwgJ2NsaWNrJywgYm91bmRFdmVudCk7XG4gICAgTC5Eb21FdmVudC5hZGRMaXN0ZW5lcihjb250YWluZXIsICd0b3VjaHN0YXJ0JywgYm91bmRFdmVudCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMuc3R5bGVzKS5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICBjb250YWluZXIuc3R5bGVba2V5XSA9IHNlbGYub3B0aW9ucy5zdHlsZXNba2V5XTtcbiAgICB9KTtcblxuICAgIHJldHVybiAodGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyKTtcbiAgfSxcblxuICBvbkFkZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXIgfHwgdGhpcy5idWlsZENvbnRhaW5lcigpO1xuICB9LFxuXG4gIF9ub25Cb3VuZEV2ZW50OiBmdW5jdGlvbihlKSB7XG4gICAgTC5Eb21FdmVudC5zdG9wKGUpO1xuICAgIGlmICh0aGlzLl9tYXApIHRoaXMuX21hcC5zbGVlcC5fc2xlZXBNYXAoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxufSk7XG5cbkwuQ29udHJvbC5zbGVlcE1hcENvbnRyb2wgPSBmdW5jdGlvbigpe1xuICByZXR1cm4gbmV3IEwuQ29udHJvbC5TbGVlcE1hcENvbnRyb2woKTtcbn07XG5cblxuLypcbiAqIFRoZSBTbGVlcCBIYW5kbGVyXG4gKi9cblxuTC5NYXAubWVyZ2VPcHRpb25zKHtcbiAgc2xlZXA6IHRydWUsXG4gIHNsZWVwVGltZTogNzUwLFxuICB3YWtlVGltZTogNzUwLFxuICB3YWtlTWVzc2FnZVRvdWNoOiAnVG91Y2ggdG8gV2FrZScsXG4gIHNsZWVwTm90ZTogdHJ1ZSxcbiAgaG92ZXJUb1dha2U6IHRydWUsXG4gIHNsZWVwT3BhY2l0eTouNyxcbiAgc2xlZXBCdXR0b246IEwuQ29udHJvbC5zbGVlcE1hcENvbnRyb2xcbn0pO1xuXG5MLk1hcC5TbGVlcCA9IEwuSGFuZGxlci5leHRlbmQoe1xuXG4gIGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc2xlZXBOb3RlID0gTC5Eb21VdGlsLmNyZWF0ZSgncCcsICdzbGVlcC1ub3RlJywgdGhpcy5fbWFwLl9jb250YWluZXIpO1xuICAgIHRoaXMuX2VudGVyVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5fZXhpdFRpbWVvdXQgP
24510SBudWxsO1xuXG4gICAgLypcbiAgICAgKiBJZiB0aGUgZGV2aWNlIGhhcyBvbmx5IGEgdG91Y2hzY3JlZW4gd2Ugd2lsbCBuZXZlciBnZXRcbiAgICAgKiBhIG1vdXNlb3V0IGV2ZW50LCBzbyB3ZSBhZGQgYW4gZXh0cmEgYnV0dG9uIHRvIHB1dCB0aGUgbWFwXG4gICAgICogYmFjayB0byBzbGVlcCBtYW51YWxseS5cbiAgICAgKlxuICAgICAqIGEgY3VzdG9tIGNvbnRyb2wvYnV0dG9uIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgdXNlclxuICAgICAqIHdpdGggdGhlIG1hcCdzIGBzbGVlcEJ1dHRvbmAgb3B0aW9uXG4gICAgICovXG4gICAgdGhpcy5fc2xlZXBCdXR0b24gPSB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcEJ1dHRvbigpO1xuXG4gICAgaWYgKHRoaXMuX21hcC50YXApIHtcbiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKHRoaXMuX3NsZWVwQnV0dG9uKTtcbiAgICB9XG5cbiAgICB2YXIgbWFwU3R5bGUgPSB0aGlzLl9tYXAuX2NvbnRhaW5lci5zdHlsZTtcbiAgICBtYXBTdHlsZS5XZWJraXRUcmFuc2l0aW9uICs9ICdvcGFjaXR5IC41cyc7XG4gICAgbWFwU3R5bGUuTW96VHJhbnNpdGlvbiArPSAnb3BhY2l0eSAuNXMnO1xuXG4gICAgdGhpcy5fc2V0U2xlZXBOb3RlU3R5bGUoKTtcbiAgICB0aGlzLl9zbGVlcE1hcCgpO1xuICB9LFxuXG4gIHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZWQoKSl7XG4gICAgICB0aGlzLl9tYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWFwLnRhcCkge1xuICAgICAgdGhpcy5fbWFwLnRvdWNoWm9vbS5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC5kcmFnZ2luZy5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC50YXAuZW5hYmxlKCk7XG4gICAgfVxuICAgIEwuRG9tVXRpbC5zZXRPcGFjaXR5KCB0aGlzLl9tYXAuX2NvbnRhaW5lciwgMSk7XG4gICAgTC5Eb21VdGlsLnNldE9wYWNpdHkoIHRoaXMuc2xlZXBOb3RlLCAwKTtcbiAgICB0aGlzLl9yZW1vdmVTbGVlcGluZ0xpc3RlbmVycygpO1xuICAgIHRoaXMuX3JlbW92ZUF3YWtlTGlzdGVuZXJzKCk7XG4gIH0sXG5cbiAgX3NldFNsZWVwTm90ZVN0eWxlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbm90ZVN0cmluZyA9ICcnO1xuICAgIHZhciBzdHlsZSA9IHRoaXMuc2xlZXBOb3RlLnN0eWxlO1xuXG4gICAgaWYodGhpcy5fbWFwLnRhcCkge1xuICAgICAgbm90ZVN0cmluZyA9IHRoaXMuX21hcC5vcHRpb25zLndha2VNZXNzYWdlVG91Y2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9tYXAub3B0aW9ucy53YWtlTWVzc2FnZSkge1xuICAgICAgbm90ZVN0cmluZyA9IHRoaXMuX21hcC5vcHRpb25zLndha2VNZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbWFwLm9wdGlvbnMuaG92ZXJUb1dha2UpIHtcbiAgICAgIG5vdGVTdHJpbmcgPSAnY2xpY2sgb3IgaG92ZXIgdG8gd2FrZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGVTdHJpbmcgPSAnY2xpY2sgdG8gd2FrZSc7XG4gICAgfVxuXG4gICAgaWYoIHRoaXMuX21hcC5vcHRpb25zLnNsZWVwTm90ZSApe1xuICAgICAgdGhpcy5zbGVlcE5vdGUuaW5uZXJIVE1MID0gbm90ZVN0cmluZztcbiAgICAgIHN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICBzdHlsZS5tYXhXaWR0aCA9ICcxNTBweCc7XG4gICAgICBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnLjJzJztcbiAgICAgIHN0eWxlLnpJbmRleCA9IDUwMDA7XG4gICAgICBzdHlsZS5tYXJnaW4gPSAnYXV0byc7XG4gICAgICBzdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgc3R5bGUudG9wID0gJzUwJSc7XG4gICAgICBzdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICBzdHlsZS5wYWRkaW5nID0gJzVweCc7XG4gICAgICBzdHlsZS5ib3JkZXIgPSAnc29saWQgMnB4IGJsYWNrJztcbiAgICAgIHN0eWxlLmJhY2tncm91bmQgPSAnd2hpdGUnO1xuXG4gICAgICBpZih0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE5vdGVTdHlsZSkge1xuICAgICAgICB2Y
24510XIgbm90ZVN0eWxlT3ZlcnJpZGVzID0gdGhpcy5fbWFwLm9wdGlvbnMuc2xlZXBOb3RlU3R5bGU7XG4gICAgICAgIE9iamVjdC5rZXlzKG5vdGVTdHlsZU92ZXJyaWRlcykubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgIHN0eWxlW2tleV0gPSBub3RlU3R5bGVPdmVycmlkZXNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIF93YWtlTWFwOiBmdW5jdGlvbiAoZSkge1xuICAgIHRoaXMuX3N0b3BXYWl0aW5nKCk7XG4gICAgdGhpcy5fbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTtcbiAgICBpZiAodGhpcy5fbWFwLnRhcCkge1xuICAgICAgdGhpcy5fbWFwLnRvdWNoWm9vbS5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC5kcmFnZ2luZy5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKHRoaXMuX3NsZWVwQnV0dG9uKTtcbiAgICB9XG4gICAgTC5Eb21VdGlsLnNldE9wYWNpdHkoIHRoaXMuX21hcC5fY29udGFpbmVyLCAxKTtcbiAgICB0aGlzLnNsZWVwTm90ZS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICB0aGlzLl9hZGRBd2FrZUxpc3RlbmVycygpO1xuICB9LFxuXG4gIF9zbGVlcE1hcDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3N0b3BXYWl0aW5nKCk7XG4gICAgdGhpcy5fbWFwLnNjcm9sbFdoZWVsWm9vbS5kaXNhYmxlKCk7XG5cbiAgICBpZiAodGhpcy5fbWFwLnRhcCkge1xuICAgICAgdGhpcy5fbWFwLnRvdWNoWm9vbS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLl9tYXAuZHJhZ2dpbmcuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5fbWFwLnRhcC5kaXNhYmxlKCk7XG4gICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbCh0aGlzLl9zbGVlcEJ1dHRvbik7XG4gICAgfVxuXG4gICAgTC5Eb21VdGlsLnNldE9wYWNpdHkoIHRoaXMuX21hcC5fY29udGFpbmVyLCB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE9wYWNpdHkpO1xuICAgIHRoaXMuc2xlZXBOb3RlLnN0eWxlLm9wYWNpdHkgPSB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE5vdGVTdHlsZSAmJiB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE5vdGVTdHlsZS5vcGFjaXR5ID8gdGhpcy5fbWFwLm9wdGlvbnMuc2xlZXBOb3RlU3R5bGUub3BhY2l0eSA6IC42O1xuICAgIHRoaXMuX2FkZFNsZWVwaW5nTGlzdGVuZXJzKCk7XG4gIH0sXG5cbiAgX3dha2VQZW5kaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fbWFwLm9uY2UoJ21vdXNlZG93bicsIHRoaXMuX3dha2VNYXAsIHRoaXMpO1xuICAgIGlmICh0aGlzLl9tYXAub3B0aW9ucy5ob3ZlclRvV2FrZSl7XG4gICAgICB2Y
24510XIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLl9tYXAub25jZSgnbW91c2VvdXQnLCB0aGlzLl9zbGVlcE1hcCwgdGhpcyk7XG4gICAgICBzZWxmLl9lbnRlclRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgc2VsZi5fbWFwLm9mZignbW91c2VvdXQnLCBzZWxmLl9zbGVlcE1hcCwgc2VsZik7XG4gICAgICAgICAgc2VsZi5fd2FrZU1hcCgpO1xuICAgICAgfSAsIHNlbGYuX21hcC5vcHRpb25zLndha2VUaW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgX3NsZWVwUGVuZGluZzogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLl9tYXAub25jZSgnbW91c2VvdmVyJywgc2VsZi5fd2FrZU1hcCwgc2VsZik7XG4gICAgc2VsZi5fZXhpdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgIHNlbGYuX21hcC5vZmYoJ21vdXNlb3ZlcicsIHNlbGYuX3dha2VNYXAsIHNlbGYpO1xuICAgICAgICBzZWxmLl9zbGVlcE1hcCgpO1xuICAgIH0gLCBzZWxmLl9tYXAub3B0aW9ucy5zbGVlcFRpbWUpO1xuICB9LFxuXG4gIF9hZGRTbGVlcGluZ0xpc3RlbmVyczogZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9tYXAub25jZSgnbW91c2VvdmVyJywgdGhpcy5fd2FrZVBlbmRpbmcsIHRoaXMpO1xuICAgIHRoaXMuX21hcC50YXAgJiZcbiAgICAgIHRoaXMuX21hcC5vbmNlKCdjbGljaycsIHRoaXMuX3dha2VNYXAsIHRoaXMpO1xuICAgIFxuICB9LFxuXG4gIF9hZGRBd2FrZUxpc3RlbmVyczogZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9tYXAub25jZSgnbW91c2VvdXQnLCB0aGlzLl9zbGVlcFBlbmRpbmcsIHRoaXMpO1xuICB9LFxuXG4gIF9yZW1vdmVTbGVlcGluZ0xpc3RlbmVyczogZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9tYXAub3B0aW9ucy5ob3ZlclRvV2FrZSAmJlxuICAgICAgdGhpcy5fbWFwLm9mZignbW91c2VvdmVyJywgdGhpcy5fd2FrZVBlbmRpbmcsIHRoaXMpO1xuICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlZG93bicsIHRoaXMuX3dha2VNYXAsIHRoaXMpO1xuICAgIHRoaXMuX21hcC50YXAgJiZcbiAgICAgIHRoaXMuX21hcC5vZmYoJ2NsaWNrJywgdGhpcy5fd2FrZU1hcCwgdGhpcyk7XG4gIH0sXG5cbiAgX3JlbW92ZUF3YWtlTGlzdGVuZXJzOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlb3V0JywgdGhpcy5fc2xlZXBQZW5kaW5nLCB0aGlzKTtcbiAgfSxcblxuICBfc3RvcFdhaXRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9yZW1vdmVTbGVlcGluZ0xpc3RlbmVycygpO1xuICAgIHRoaXMuX3JlbW92ZUF3YWtlTGlzdGVuZXJzKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmKHRoaXMuX2VudGVyVGltZW91dCkgY2xlYXJUaW1lb3V0KHNlbGYuX2VudGVyVGltZW91dCk7XG4gICAgaWYodGhpcy5fZXhpdFRpbWVvdXQpIGNsZWFyVGltZW91dChzZWxmLl9leGl0VGltZW91dCk7XG4gICAgdGhpcy5fZW50ZXJUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9leGl0VGltZW91dCA9IG51bGw7XG4gIH1cbn0pO1xuXG5MLk1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdzbGVlcCcsIEwuTWFwLlNsZWVwKTsiLCIhZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gbihpKXtpZih0W2ldKXJldHVybiB0W2ldLmV4cG9ydHM7dmFyIHM9dFtpXT17aTppLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChzLmV4cG9ydHMscyxzLmV4cG9ydHMsbikscy5sPSEwLHMuZXhwb3J0c31uLm09ZSxuLmM9dCxuLmQ9ZnVuY3Rpb24oZSx0LGkpe24ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDppfSl9LG4ucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxuLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW4oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIoaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBzIGluIGUpbi5kKGkscyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLHMpKTtyZXR1cm4gaX0sbi5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBuLmQodCxcImFcIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD1cIlwiLG4obi5zPTEpfShbZnVuY3Rpb24oZSl7ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3tcImFcIjpcIjguNS4yMFwifScpfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpO3ZhciBpPW4oMCkscz17aG9va3M6e30sZXh0ZW5zaW9uczpbXSx3cmFwcGVyczpbXSxuYXZiYXI6e2FkZDohMCxzdGlja3k6ITAsdGl0bGU6XCJNZW51XCIsdGl0bGVMaW5rOlwicGFyZW50XCJ9LG9uQ2xpY2s6e2Nsb3NlOm51bGwscHJldmVudERlZmF1bHQ6bnVsbCxzZXRTZWxlY3RlZDohMH0sc2xpZGluZ1N1Ym1lbnVzOiEwfSxhPXtjbGFzc05hbWVzOntpbnNldDpcIkluc2V0XCIsbm9saXN0dmlldzpcIk5vTGlzdHZpZXdcIixub3BhbmVsOlwiTm9QYW5lbFwiLHBhbmVsOlwiUGFuZWxcIixzZWxlY3RlZDpcIlNlbGVjdGVkXCIsdmVydGljYWw6XCJWZXJ0aWNhbFwifSxsYW5ndWFnZTpudWxsLG9wZW5pbmdJbnRlcnZhbDoyNSxwYW5lbE5vZGV0eXBlOltcInVsXCIsXCJvbFwiLFwiZGl2XCJdLHRyYW5zaXRpb25EdXJhdGlvbjo0MDB9O2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG4gaW5cIm9iamVjdFwiIT1yKGUpJiYoZT17fSksXCJvYmplY3RcIiE9cih0KSYmKHQ9e30pLHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHZvaWQgMD09PWVbbl0/ZVtuXT10W25dOlwib2JqZWN0XCI9PXIoZVtuXSkmJm8oZVtuXSx0W25dKSk7cmV0dXJuIGV9ZnVuY3Rpb24gcihlKXtyZXR1cm57fS50b1N0cmluZy5jYWxsKGUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYyhlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIGk9dC5jYWxsKGUpO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGl9cmV0dXJuIG51bGwhPT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10fHx2b2lkIDA9PT1uP3Q6bn1mdW5jdGlvbiBtKGUsdCxuKXt2YXIgaT0hMSxzPWZ1bmN0aW9uKG4pe3ZvaWQgMCE9PW4mJm4udGFyZ2V0IT09ZXx8KGl8fChlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIscyksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2Via2l0VHJhbnNpdGlvbkVuZFwiLHMpLHQuY2FsbChlKSksaT0hMCl9O2UuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixzKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIscyksc2V0VGltZW91dChzLDEuMSpuKX1mdW5jdGlvbiBsKCl7cmV0dXJuXCJtbS1cIitkKyt9dmFyIGQ9MDtmdW5jdGlvbiBwKGUpe3JldHVyblwibW0tXCI9PWUuc2xpY2UoMCwzKT9lLnNsaWNlKDMpOmV9dmFyIHU9e307ZnVuY3Rpb24gZihlLHQpe3ZvaWQgMD09PXVbdF0mJih1W3RdPXt9KSxvKHVbdF0sZSl9dmFyIGg9e01lbnU6XCLZhdmG2YhcIn0sdj17TWVudTpcIk1lbsO8XCJ9LGI9e01lbnU6XCLQnNC10L3RjlwifTtmdW5jdGlvbiBnKGUpe3ZhciB0PWUuc3BsaXQoXCIuXCIpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LnNoaWZ0KCkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe24uY2xhc3NMaXN0LmFkZChlKX0pKSxufWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5xdWVyeVNlbGVjdG9yQWxsKHQpKX1mdW5jdGlvbiB5KGUsdCl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5jaGlsZHJlbik7cmV0dXJuIHQ/bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoZXModCl9KSk6bn1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciBuPVtdLGk9ZS5wYXJlbnRFbGVtZW50O2k7KW4ucHVzaChpKSxpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gdD9uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX0pKTpufWZ1bmN0aW9uIHcoZSl7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLWhpZGRlblwiKX0pKX1mdW5jdGlvbiBFKGUpe3ZhciB0PVtdO3JldHVybiB3KGUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaC5hcHBseSh0LHkoZSxcImEubW0tbGlzdGl0ZW1fX3RleHRcIikpfSkpLHQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLWJ0bl9uZXh0XCIpfSkpfWZ1bmN0aW9uIHgoZSx0LG4pe2UubWF0Y2hlcyhcIi5cIit0KSYmKGUuY2xhc3NMaXN0LnJlbW92ZSh0KSxlLmNsYXNzTGlzdC5hZGQobikpfXZhciBQPXt9O2Z1bmN0aW9uIGsoZSx0LG4pe1wibnVtYmVyXCI9PXR5cGVvZiBlJiYoZT1cIihtaW4td2lkdGg6IFwiK2UrXCJweClcIiksUFtlXT1QW2VdfHxbXSxQW2VdLnB1c2goe3llczp0LG5vOm59KX1mdW5jdGlvbiBTKGUsdCl7Zm9yKHZhciBuPXQubWF0Y2hlcz9cInllc1wiOlwibm9cIixpPTA7aTxQW2VdLmxlbmd0aDtpKyspUFtlXVtpXVtuXSgpfWYoe01lbnU6XCJNZW51XCJ9LFwibmxcIiksZihoLFwiZmFcIiksZih2LFwiZGVcIiksZihiLFwicnVcIik7dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixpKXtyZXR1cm4gdGhpcy5vcHRzPW8obixlLm9wdGlvbnMpLHRoaXMuY29uZj1vKGksZS5jb25maWdzKSx0aGlzLl9hcGk9W1wiYmluZFwiLFwiaW5
24510pdFBhbmVsXCIsXCJpbml0TGlzdHZpZXdcIixcIm9wZW5QYW5lbFwiLFwiY2xvc2VQYW5lbFwiLFwiY2xvc2VBbGxQYW5lbHNcIixcInNldFNlbGVjdGVkXCJdLHRoaXMubm9kZT17fSx0aGlzLnZhcnM9e30sdGhpcy5ob29rPXt9LHRoaXMuY2xjaz1bXSx0aGlzLm5vZGUubWVudT1cInN0cmluZ1wiPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQsXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fZGVwcmVjYXRlZFdhcm5pbmdzJiZ0aGlzLl9kZXByZWNhdGVkV2FybmluZ3MoKSx0aGlzLl9pbml0V3JhcHBlcnMoKSx0aGlzLl9pbml0QWRkb25zKCksdGhpcy5faW5pdEV4dGVuc2lvbnMoKSx0aGlzLl9pbml0SG9va3MoKSx0aGlzLl9pbml0QVBJKCksdGhpcy5faW5pdE1lbnUoKSx0aGlzLl9pbml0UGFuZWxzKCksdGhpcy5faW5pdE9wZW5lZCgpLHRoaXMuX2luaXRBbmNob3JzKCksZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD13aW5kb3cubWF0Y2hNZWRpYShlKTtTKGUsdCksdC5vbmNoYW5nZT1mdW5jdGlvbihuKXtTKGUsdCl9fTtmb3IodmFyIHQgaW4gUCllKHQpfSgpLHRoaXN9cmV0dXJuIGUucHJvdG90eXBlLm9wZW5QYW5lbD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy50cmlnZ2VyKFwib3BlblBhbmVsOmJlZm9yZVwiLFtlXSksZSYmKGUubWF0Y2hlcyhcIi5tbS1wYW5lbFwiKXx8KGU9ZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKSxlKSl7aWYoXCJib29sZWFuXCIhPXR5cGVvZiB0JiYodD0hMCksZS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikpe0woZSxcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9vcGVuZWRcIikseShlLFwiLm1tLXBhbmVsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKX0pKTt2YXIgaT1MKGUsXCIubW0tcGFuZWxcIikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIil9KSk7dGhpcy50cmlnZ2VyKFwib3BlblBhbmVsOnN0YXJ0XCIsW2VdKSxpLmxlbmd0aCYmdGhpcy5vcGVuUGFuZWwoaVswXSksdGhpcy50cmlnZ2VyKFwib3BlblBhbmVsOmZpbmlzaFwiLFtlXSl9ZWxzZXtpZihlLm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkXCIpKXJldHVybjt2YXIgcz15KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLGE9eSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9vcGVuZWRcIilbMF07cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpfSkpO2Zvcih2YXIgbz1lLm1tUGFyZW50O287KShvPW8uY2xvc2VzdChcIi5tbS1wYW5lbFwiKSkmJihvLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKXx8by5jbGFzc0xpc3QuYWRkKFwibW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiKSxvPW8ubW1QYXJlbnQpO3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfaGlnaGVzdFwiKX0pKSxzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1hfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKX0pKSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1oaWRkZW5cIik7dmFyIHI9ZnVuY3Rpb24oKXthJiZhLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1wYW5lbF9vcGVuZWRcIiksZS5jbGFzc0xpc3QuYWRkKFwibW0tcGFuZWxfb3BlbmVkXCIpLGUubWF0Y2hlcyhcIi5tbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpPyhhJiZhLmNsYXNzTGlzdC5hZGQoXCJtbS1wYW5lbF9oaWdoZXN0XCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikpOihhJiZhLmNsYXNzTGlzdC5hZGQoXCJtbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsX2hpZ2hlc3RcIikpLG4udHJpZ2dlcihcIm9wZW5QYW5lbDpzdGFydFwiLFtlXSl9LGM9ZnVuY3Rpb24oKXthJiYoYS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfaGlnaGVzdFwiKSxhLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIikpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXBhbmVsX2hpZ2hlc3RcIiksbi50cmlnZ2VyKFwib3BlblBhbmVsOmZpbmlzaFwiLFtlXSl9O3QmJiFlLm1hdGNoZXMoXCIubW0tcGFuZWxfbm9hbmltYXRpb25cIik/c2V0VGltZW91dCgoZnVuY3Rpb24oKXttKGUsKGZ1bmN0aW9uKCl7YygpfSksbi5jb25mLnRyYW5zaXRpb25EdXJhdGlvbikscigpfSksdGhpcy5jb25mLm9wZW5pbmdJbnRlcnZhbCk6KHIoKSxjKCkpfXRoaXMudHJpZ2dlcihcIm9wZW5QYW5lbDphZnRlclwiLFtlXSl9fSxlLnByb3RvdHlwZS5jbG9zZVBhbmVsPWZ1bmN0aW9uKGUpe3RoaXMudHJpZ2dlcihcImNsb3NlUGFuZWw6YmVmb3JlXCIsW2VdKTt2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiYodC5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fb3BlbmVkXCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSx0aGlzLnRyaWdnZXIoXCJjbG9zZVBhbmVsXCIsW2VdKSksdGhpcy50cmlnZ2VyKFwiY2xvc2VQYW5lbDphZnRlclwiLFtlXSl9LGUucHJvdG90eXBlLmNsb3NlQWxsUGFuZWxzPWZ1bmN0aW9uKGUpe3RoaXMudHJpZ2dlcihcImNsb3NlQWxsUGFuZWxzOmJlZm9yZVwiKSx0aGlzLm5vZGUucG5scy5xdWVyeVNlbGVjdG9yQWxsKFwiLm1tLWxpc3RpdGVtXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWxpc3RpdGVtX3NlbGVjdGVkXCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWxpc3RpdGVtX29wZW5lZFwiKX0pKTt2YXIgdD15KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLG49ZXx8dFswXTt5KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UhPT1uJiYoZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfb3BlbmVkXCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIiksZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfaGlnaGVzdFwiKSxlLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIikpfSkpLHRoaXMub3BlblBhbmVsKG4sITEpLHRoaXMudHJpZ2dlcihcImNsb3NlQWxsUGFuZWxzOmFmdGVyXCIpfSxlLnByb3RvdHlwZS50b2dnbGVQYW5lbD1mdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiZ0aGlzW3QubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV9vcGVuZWRcIik/XCJjbG9zZVBhbmVsXCI6XCJvcGVuUGFuZWxcIl0oZSl9LGUucHJvdG90eXBlLnNldFNlbGVjdGVkPWZ1bmN0aW9uKGUpe3RoaXMudHJpZ2dlcihcInNldFNlbGVjdGVkOmJlZm9yZVwiLFtlXSksXyh0aGlzLm5vZGUubWVudSxcIi5tbS1saXN0aXRlbV9zZWxlY3RlZFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKX0pKSxlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKSx0aGlzLnRyaWdnZXIoXCJzZXRTZWxlY3RlZDphZnRlclwiLFtlXSl9LGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmhvb2tbZV09dGhpcy5ob29rW2VdfHxbXSx0aGlzLmhvb2tbZV0ucHVzaCh0KX0sZS5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbihlLHQpe2lmKHRoaXMuaG9va1tlXSlmb3IodmFyIG49MCxpPXRoaXMuaG9va1tlXS5sZW5ndGg7bjxpO24rKyl0aGlzLmhvb2tbZV1bbl0uYXBwbHkodGhpcyx0KX0sZS5wcm90b3R5cGUuX2luaXRBUEk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpczt0aGlzLkFQST17fS
24510x0aGlzLl9hcGkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZS5BUElbbl09ZnVuY3Rpb24oKXt2YXIgZT10W25dLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gdm9pZCAwPT09ZT90LkFQSTplfX0pKSx0aGlzLm5vZGUubWVudS5tbUFwaT10aGlzLkFQSX0sZS5wcm90b3R5cGUuX2luaXRIb29rcz1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLm9wdHMuaG9va3MpdGhpcy5iaW5kKGUsdGhpcy5vcHRzLmhvb2tzW2VdKX0sZS5wcm90b3R5cGUuX2luaXRXcmFwcGVycz1mdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcImluaXRXcmFwcGVyczpiZWZvcmVcIik7Zm9yKHZhciB0PTA7dDx0aGlzLm9wdHMud3JhcHBlcnMubGVuZ3RoO3QrKyl7dmFyIG49ZS53cmFwcGVyc1t0aGlzLm9wdHMud3JhcHBlcnNbdF1dO1wiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4uY2FsbCh0aGlzKX10aGlzLnRyaWdnZXIoXCJpbml0V3JhcHBlcnM6YWZ0ZXJcIil9LGUucHJvdG90eXBlLl9pbml0QWRkb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMudHJpZ2dlcihcImluaXRBZGRvbnM6YmVmb3JlXCIpLGUuYWRkb25zKWUuYWRkb25zW3RdLmNhbGwodGhpcyk7dGhpcy50cmlnZ2VyKFwiaW5pdEFkZG9uczphZnRlclwiKX0sZS5wcm90b3R5cGUuX2luaXRFeHRlbnNpb25zPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRyaWdnZXIoXCJpbml0RXh0ZW5zaW9uczpiZWZvcmVcIiksXCJhcnJheVwiPT1yKHRoaXMub3B0cy5leHRlbnNpb25zKSYmKHRoaXMub3B0cy5leHRlbnNpb25zPXthbGw6dGhpcy5vcHRzLmV4dGVuc2lvbnN9KSxPYmplY3Qua2V5cyh0aGlzLm9wdHMuZXh0ZW5zaW9ucykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5vcHRzLmV4dGVuc2lvbnNbdF0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cIm1tLW1lbnVfXCIrZX0pKTtuLmxlbmd0aCYmayh0LChmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZCh0KX0pKX0pLChmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKX0pKX0pKSx0aGlzLnRyaWdnZXIoXCJpbml0RXh0ZW5zaW9uczphZnRlclwiKX0sZS5wcm90b3R5cGUuX2luaXRNZW51PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRyaWdnZXIoXCJpbml0TWVudTpiZWZvcmVcIiksdGhpcy5ub2RlLndycHI9dGhpcy5ub2RlLndycHJ8fHRoaXMubm9kZS5tZW51LnBhcmVudEVsZW1lbnQsdGhpcy5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJcIiksdGhpcy5ub2RlLm1lbnUuaWQ9dGhpcy5ub2RlLm1lbnUuaWR8fGwoKTt2YXIgdD1nKFwiZGl2Lm1tLXBhbmVsc1wiKTt5KHRoaXMubm9kZS5tZW51KS5mb3JFYWNoKChmdW5jdGlvbihuKXtlLmNvbmYucGFuZWxOb2RldHlwZS5pbmRleE9mKG4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk+LTEmJnQuYXBwZW5kKG4pfSkpLHRoaXMubm9kZS5tZW51LmFwcGVuZCh0KSx0aGlzLm5vZGUucG5scz10LHRoaXMubm9kZS5tZW51LmNsYXNzTGlzdC5hZGQoXCJtbS1tZW51XCIpLHRoaXMudHJpZ2dlcihcImluaXRNZW51OmFmdGVyXCIpfSxlLnByb3RvdHlwZS5faW5pdFBhbmVscz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50cmlnZ2VyKFwiaW5pdFBhbmVsczpiZWZvcmVcIiksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsbil7aWYobi5pbk1lbnUpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtpZihpJiZpLmxlbmd0aD4xJiZcIiNcIj09aS5zbGljZSgwLDEpKXRyeXt2YXIgcz1fKGUubm9kZS5tZW51LGkpWzBdO2lmKHMmJnMubWF0Y2hlcyhcIi5tbS1wYW5lbFwiKSlyZXR1cm4gdC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIik/ZS50b2dnbGVQYW5lbChzKTplLm9wZW5QYW5lbChzKSwhMH1jYXRjaChlKXt9fX0pKSx5KHRoaXMubm9kZS5wbmxzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmluaXRQYW5lbCh0KX0pKSx0aGlzLnRyaWdnZXIoXCJpbml0UGFuZWxzOmFmdGVyXCIpfSxlLnByb3RvdHlwZS5pbml0UGFuZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuY29uZi5wYW5lbE5vZGV0eXBlLmpvaW4oXCIsIFwiKTtpZihlLm1hdGNoZXMobikmJihlLm1hdGNoZXMoXCIubW0tcGFuZWxcIil8fChlPXRoaXMuX2luaXRQYW5lbChlKSksZSkpe3ZhciBpPVtdO2kucHVzaC5hcHBseShpLHkoZSxcIi5cIit0aGlzLmNvbmYuY2xhc3NOYW1lcy5wYW5lbCkpLHkoZSxcIi
245105tbS1saXN0dmlld1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt5KGUsXCIubW0tbGlzdGl0ZW1cIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoLmFwcGx5KGkseShlLG4pKX0pKX0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuaW5pdFBhbmVsKGUpfSkpfX0sZS5wcm90b3R5cGUuX2luaXRQYW5lbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMudHJpZ2dlcihcImluaXRQYW5lbDpiZWZvcmVcIixbZV0pLHgoZSx0aGlzLmNvbmYuY2xhc3NOYW1lcy5wYW5lbCxcIm1tLXBhbmVsXCIpLHgoZSx0aGlzLmNvbmYuY2xhc3NOYW1lcy5ub3BhbmVsLFwibW0tbm9wYW5lbFwiKSx4KGUsdGhpcy5jb25mLmNsYXNzTmFtZXMuaW5zZXQsXCJtbS1saXN0dmlld19pbnNldFwiKSxlLm1hdGNoZXMoXCIubW0tbGlzdHZpZXdfaW5zZXRcIikmJmUuY2xhc3NMaXN0LmFkZChcIm1tLW5vcGFuZWxcIiksZS5tYXRjaGVzKFwiLm1tLW5vcGFuZWxcIikpcmV0dXJuIG51bGw7dmFyIG49ZS5pZHx8bCgpLGk9ZS5tYXRjaGVzKFwiLlwiK3RoaXMuY29uZi5jbGFzc05hbWVzLnZlcnRpY2FsKXx8IXRoaXMub3B0cy5zbGlkaW5nU3VibWVudXM7aWYoZS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY29uZi5jbGFzc05hbWVzLnZlcnRpY2FsKSxlLm1hdGNoZXMoXCJ1bCwgb2xcIikpe2UucmVtb3ZlQXR0cmlidXRlKFwiaWRcIik7dmFyIHM9ZyhcImRpdlwiKTtlLmJlZm9yZShzKSxzLmFwcGVuZChlKSxlPXN9ZS5pZD1uLGUuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsXCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKTt2YXIgYT1bZS5wYXJlbnRFbGVtZW50XS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoZXMoXCJsaVwiKX0pKVswXTtpZihpP2EmJmEuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpOnRoaXMubm9kZS5wbmxzLmFwcGVuZChlKSxhJiYoYS5tbUNoaWxkPWUsZS5tbVBhcmVudD1hLGEmJmEubWF0Y2hlcyhcIi5tbS1saXN0aXRlbVwiKSYmIXkoYSxcIi5tbS1idG5cIikubGVuZ3RoKSl7dmFyIG89eShhLFwiLm1tLWxpc3RpdGVtX190ZXh0XCIpWzBdO2lmKG8pe3ZhciByPWcoXCJhLm1tLWJ0bi5tbS1idG5fbmV4dC5tbS1saXN0aXRlbV9fYnRuXCIpO3Iuc2V0QXR0cmlidXRlKFwiaHJlZlwiLFwiI1wiK2UuaWQpLG8ubWF0Y2hlcyhcInNwYW5cIik/KHIuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3RpdGVtX190ZXh0XCIpLHIuaW5uZXJIVE1MPW8uaW5uZXJIVE1MLGEuaW5zZXJ0QmVmb3JlKHIsby5uZXh0RWxlbWVudFNpYmxpbmcpLG8ucmVtb3ZlKCkpOmEuaW5zZXJ0QmVmb3JlKHIseShhLFwiLm1tLXBhbmVsXCIpWzBdKX19cmV0dXJuIHRoaXMuX2luaXROYXZiYXIoZSkseShlLFwidWwsIG9sXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuaW5pdExpc3R2aWV3KGUpfSkpLHRoaXMudHJpZ2dlcihcImluaXRQYW5lbDphZnRlclwiLFtlXSksZX0sZS5wcm90b3R5cGUuX2luaXROYXZiYXI9ZnVuY3Rpb24oZSl7aWYodGhpcy50cmlnZ2VyKFwiaW5pdE5hdmJhcjpiZWZvcmVcIixbZV0pLCF5KGUsXCIubW0tbmF2YmFyXCIpLmxlbmd0aCl7dmFyIHQ9bnVsbCxuPW51bGw7aWYoZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXBhcmVudFwiKT9uPV8odGhpcy5ub2RlLnBubHMsZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXBhcmVudFwiKSlbMF06KHQ9ZS5tbVBhcmVudCkmJihuPXQuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSksIXR8fCF0Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikpe3ZhciBpPWcoXCJkaXYubW0tbmF2YmFyXCIpO2lmKHRoaXMub3B0cy5uYXZiYXIuYWRkP3RoaXMub3B0cy5uYXZiYXIuc3RpY2t5JiZpLmNsYXNzTGlzdC5hZGQoXCJtbS1uYXZiYXJfc3RpY2t5XCIpOmkuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSxuKXt2YXIgcz1nKFwiYS5tbS1idG4ubW0tYnRuX3ByZXYubW0tbmF2YmFyX19idG5cIik7cy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIrbi5pZCksaS5hcHBlbmQocyl9dmFyIGE9bnVsbDt0P2E9eSh0LFwiLm1tLWxpc3RpdGVtX190ZXh0XCIpWzBdOm4mJihhPV8obiwnYVtocmVmPVwiIycrZS5pZCsnXCJdJylbMF0pO3ZhciBvPWcoXCJhLm1tLW5hdmJhcl9fdGl0bGVcIikscj1nKFwic3BhblwiKTtzd2l0Y2goby5hcHBlbmQociksci5pbm5lckhUTUw9ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXRpdGxlXCIpfHwoYT9hLnRleHRDb250ZW50OlwiXCIpfHx0aGlzLmkxOG4odGhpcy5vcHRzLm5hdmJhci50aXRsZSl8fHRoaXMuaTE4bihcIk1lbnVcIiksdGhpcy5vcHRzLm5hdmJhci50aXRsZUxpbmspe2Nhc2VcImFuY2hvclwiOmEmJm8uc2V0QXR0cmlidXRlKFwiaHJlZlwiLGEuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSk7YnJlYWs7Y2FzZVwicGFyZW50XCI6biYmby5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIrbi5pZCl9aS5hcHBlbmQobyksZS5wcmVwZW5kKGkpLHRoaXMudHJpZ2dlcihcImluaXROYXZiYXI6YWZ0ZXJcIixbZV0pfX19LGUucHJvdG90eXBlLmluaXRMaXN0dmlldz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMudHJpZ2dlcihcImluaXRMaXN0dmlldzpiZWZvcmVcIixbZV0pLHgoZSx0aGlzLmNvbmYuY2xhc3NOYW1lcy5ub2xpc3R2aWV3LFwibW0tbm9saXN0dmlld1wiKSxlLm1hdGNoZXMoXCIubW0tbm9saXN0dmlld1wiKXx8KGUuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3R2aWV3XCIpLHkoZSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QuYWRkKFwibW0tbGlzdGl0ZW1cIikseChlLHQuY29uZi5jbGFzc05hbWVzLnNlbGVjdGVkLFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWRcIikseShlLFwiYSwgc3BhblwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLm1hdGNoZXMoXCIubW0tYnRuXCIpfHxlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9fdGV4dFwiKX0pKX0pKSksdGhpcy50cmlnZ2VyKFwiaW5pdExpc3R2aWV3OmFmdGVyXCIsW2VdKX0sZS5wcm90b3R5cGUuX2luaXRPcGVuZWQ9ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJpbml0T3BlbmVkOmJlZm9yZVwiKTt2YXIgZT10aGlzLm5vZGUucG5scy5xdWVyeVNlbGVjdG9yQWxsKFwiLm1tLWxpc3RpdGVtX3NlbGVjdGVkXCIpLHQ9bnVsbDtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Q9ZSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKX0pKSx0JiZ0LmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKTt2YXIgbj10P3QuY2xvc2VzdChcIi5tbS1wYW5lbFwiKTp5KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpWzBdO3RoaXMub3BlblBhbmVsKG4sITEpLHRoaXMudHJpZ2dlcihcImluaXRPcGVuZWQ6YWZ0ZXJcIil9LGUucHJvdG90eXBlLl9pbml0QW5jaG9ycz1mdW5jdGlvbigpe3ZhciBlPXR
24510oaXM7dGhpcy50cmlnZ2VyKFwiaW5pdEFuY2hvcnM6YmVmb3JlXCIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChmdW5jdGlvbih0KXt2YXIgbj10LnRhcmdldC5jbG9zZXN0KFwiYVtocmVmXVwiKTtpZihuKXtmb3IodmFyIGk9e2luTWVudTpuLmNsb3Nlc3QoXCIubW0tbWVudVwiKT09PWUubm9kZS5tZW51LGluTGlzdHZpZXc6bi5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtID4gYVwiKSx0b0V4dGVybmFsOm4ubWF0Y2hlcygnW3JlbD1cImV4dGVybmFsXCJdJyl8fG4ubWF0Y2hlcygnW3RhcmdldD1cIl9ibGFua1wiXScpfSxzPXtjbG9zZTpudWxsLHNldFNlbGVjdGVkOm51bGwscHJldmVudERlZmF1bHQ6XCIjXCI9PW4uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKS5zbGljZSgwLDEpfSxhPTA7YTxlLmNsY2subGVuZ3RoO2ErKyl7dmFyIG09ZS5jbGNrW2FdLmNhbGwoZSxuLGkpO2lmKG0pe2lmKFwiYm9vbGVhblwiPT10eXBlb2YgbSlyZXR1cm4gdm9pZCB0LnByZXZlbnREZWZhdWx0KCk7XCJvYmplY3RcIj09cihtKSYmKHM9byhtLHMpKX19aS5pbk1lbnUmJmkuaW5MaXN0dmlldyYmIWkudG9FeHRlcm5hbCYmKGMobixlLm9wdHMub25DbGljay5zZXRTZWxlY3RlZCxzLnNldFNlbGVjdGVkKSYmZS5zZXRTZWxlY3RlZChuLnBhcmVudEVsZW1lbnQpLGMobixlLm9wdHMub25DbGljay5wcmV2ZW50RGVmYXVsdCxzLnByZXZlbnREZWZhdWx0KSYmdC5wcmV2ZW50RGVmYXVsdCgpLGMobixlLm9wdHMub25DbGljay5jbG9zZSxzLmNsb3NlKSYmZS5vcHRzLm9mZkNhbnZhcyYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jbG9zZSYmZS5jbG9zZSgpKX19KSwhMCksdGhpcy50cmlnZ2VyKFwiaW5pdEFuY2hvcnM6YWZ0ZXJcIil9LGUucHJvdG90eXBlLmkxOG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJnZvaWQgMCE9PXVbdF0mJnVbdF1bZV18fGV9KGUsdGhpcy5jb25mLmxhbmd1YWdlKX0sZS52ZXJzaW9uPWkuYSxlLm9wdGlvbnM9cyxlLmNvbmZpZ3M9YSxlLmFkZG9ucz17fSxlLndyYXBwZXJzPXt9LGUubm9kZT17fSxlLnZhcnM9e30sZX0oKSxBPXtibG9ja1VJOiEwLG1vdmVCYWNrZ3JvdW5kOiEwfTt2YXIgVD17Y2xvbmU6ITEsbWVudTp7aW5zZXJ0TWV0aG9kOlwicHJlcGVuZFwiLGluc2VydFNlbGVjdG9yOlwiYm9keVwifSxwYWdlOntub2RldHlwZTpcImRpdlwiLHNlbGVjdG9yOm51bGwsbm9TZWxlY3RvcjpbXX19O2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGU/ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpOlwiXCJ9ZnVuY3Rpb24gTihlLHQsbil7dmFyIGk9dC5zcGxpdChcIi5cIik7ZVt0PVwibW1FdmVudFwiK0MoaVswXSkrQyhpWzFdKV09ZVt0XXx8W10sZVt0XS5wdXNoKG4pLGUuYWRkRXZlbnRMaXN0ZW5lcihpWzBdLG4pfWZ1bmN0aW9uIEgoZSx0KXt2YXIgbj10LnNwbGl0KFwiLlwiKTt0PVwibW1FdmVudFwiK0MoblswXSkrQyhuWzFdKSwoZVt0XXx8W10pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihuWzBdLHQpfSkpfU0ub3B0aW9ucy5vZmZDYW52YXM9QSxNLmNvbmZpZ3Mub2ZmQ2FudmFzPVQ7TS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50cmlnZ2VyKFwib3BlbjpiZWZvcmVcIiksdGhpcy52YXJzLm9wZW5lZHx8KHRoaXMuX29wZW5TZXR1cCgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fb3BlblN0YXJ0KCl9KSx0aGlzLmNvbmYub3BlbmluZ0ludGVydmFsKSx0aGlzLnRyaWdnZXIoXCJvcGVuOmFmdGVyXCIpKX0sTS5wcm90b3R5cGUuX29wZW5TZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLm9wdHMub2ZmQ2FudmFzO3RoaXMuY2xvc2VBbGxPdGhlcnMoKSxmdW5jdGlvbihlLHQsbil7dmFyIGk9dC5zcGxpdChcIi5cIik7KGVbdD1cIm1tRXZlbnRcIitDKGlbMF0pK0MoaVsxXSldfHxbXSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZShufHx7fSl9KSl9KHdpbmRvdyxcInJlc2l6ZS5wYWdlXCIse2ZvcmNlOiEwfSk7dmFyIG49W1wibW0td3JhcHBlcl9vcGVuZWRcIl07dC5ibG9ja1VJJiZuLnB1c2goXCJtbS13cmFwcGVyX2Jsb2NraW5nXCIpLFwibW9kYWxcIj09dC5ibG9ja1VJJiZuLnB1c2goXCJtbS13cmFwcGVyX21vZGFsXCIpLHQubW92ZUJhY2tncm91bmQmJm4ucHVzaChcIm1tLXdyYXBwZXJfYmFja2dyb3VuZFwiKSxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uubm9kZS53cnByLmNsYXNzTGlzdC5hZGQodCl9KSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnZhcnMub3BlbmVkPSEwfSksdGhpcy5jb25mLm9wZW5pbmdJbnRlcnZhbCksdGhpcy5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfb3BlbmVkXCIpfSxNLnByb3RvdHlwZS5fb3BlblN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczttKE0ubm9kZS5wYWdlLChmdW5jdGlvbigpe2UudHJpZ2dlcihcIm9wZW46ZmluaXNoXCIpfSksdGhpcy5jb25mLnRyYW5zaXRpb25EdXJhdGlvbiksdGhpcy50cmlnZ2VyKFwib3BlbjpzdGFydFwiKSx0aGlzLm5vZGUud3Jwci5jbGFzc0xpc3QuYWRkKFwibW0td3JhcHBlcl9vcGVuaW5nXCIpfSxNLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50cmlnZ2VyKFwiY2xvc2U6YmVmb3JlXCIpLHRoaXMudmFycy5vcGVuZWQmJihtKE0ubm9kZS5wYWdlLChmdW5jdGlvbigpe2Uubm9kZS5tZW51LmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1tZW51X29wZW5lZFwiKTtbXCJtbS13cmFwcGVyX29wZW5lZFwiLFwibW0td3JhcHBlcl9ibG9ja2luZ1wiLFwibW0td3JhcHBlcl9tb2RhbFwiLFwibW0td3JhcHBlcl9iYWNrZ3JvdW5kXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uubm9kZS53cnByLmNsYXNzTGlzdC5yZW1vdmUodCl9KSksZS52YXJzLm9wZW5lZD0hMSxlLnRyaWdnZXIoXCJjbG9zZTpmaW5pc2hcIil9KSx0aGlzLmNvbmYudHJhbnNpdGlvbkR1cmF0aW9uKSx0aGlzLnRyaWdnZXIoXCJjbG9zZTpzdGFydFwiKSx0aGlzLm5vZGUud3Jwci5jbGFzc0xpc3QucmVtb3ZlKFwibW0td3JhcHBlcl9vcGVuaW5nXCIpLHRoaXMudHJpZ2dlcihcImNsb3NlOmFmdGVyXCIpKX0sTS5wcm90b3R5cGUuY2xvc2VBbGxPdGhlcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO18oZG9jdW1lbnQuYm9keSxcIi5tbS1tZW51X29mZmNhbnZhc1wiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZih0IT09ZS5ub2RlLm1lbnUpe3ZhciBuPXQubW1BcGk7biYmbi5jbG9zZSYmbi5jbG9zZSgpfX0pKX0sTS5wcm90b3R5cGUuc2V0UGFnZT1mdW5jdGlvbihlKXt0aGlzLnRyaWdnZXIoXCJzZXRQYWdlOmJlZm9yZVwiLFtlXSk7dmFyIHQ9dGhpcy5jb25mLm9mZkNhbnZhcztpZighZSl7dmFyIG49XCJzdHJpbmdcIj09dHlwZW9mIHQucGFnZS5zZWxlY3Rvcj9fKGRvY3VtZW50LmJvZHksdC5wYWdlLnNlbGVjdG9yKTp5KGRvY3VtZW50LmJvZHksdC5wYWdlLm5vZGV0eXBlKTtpZihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLW1lbnUsIC5tbS13cmFwcGVyX19ibG9ja2VyXCIpfSkpLHQucGFnZS5ub1NlbGVjdG9yLmxlbmd0aCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXModC5wYWdlLm5vU2VsZWN0b3Iuam9pbihcIiwgXCIpKX0pKSksbi5sZW5ndGg+MSl7dmFyIGk9ZyhcImRp
24510dlwiKTtuWzBdLmJlZm9yZShpKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuYXBwZW5kKGUpfSkpLG49W2ldfWU9blswXX1lLmNsYXNzTGlzdC5hZGQoXCJtbS1wYWdlXCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLXNsaWRlb3V0XCIpLGUuaWQ9ZS5pZHx8bCgpLE0ubm9kZS5wYWdlPWUsdGhpcy50cmlnZ2VyKFwic2V0UGFnZTphZnRlclwiLFtlXSl9O3ZhciBqPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztIKGRvY3VtZW50LmJvZHksXCJrZXlkb3duLnRhYmd1YXJkXCIpLE4oZG9jdW1lbnQuYm9keSxcImtleWRvd24udGFiZ3VhcmRcIiwoZnVuY3Rpb24odCl7OT09dC5rZXlDb2RlJiZlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfb3BlbmVkXCIpJiZ0LnByZXZlbnREZWZhdWx0KCl9KSl9LEQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMudHJpZ2dlcihcImluaXRCbG9ja2VyOmJlZm9yZVwiKTt2YXIgdD10aGlzLm9wdHMub2ZmQ2FudmFzLG49dGhpcy5jb25mLm9mZkNhbnZhcztpZih0LmJsb2NrVUkpe2lmKCFNLm5vZGUuYmxjayl7dmFyIGk9ZyhcImRpdi5tbS13cmFwcGVyX19ibG9ja2VyLm1tLXNsaWRlb3V0XCIpO2kuaW5uZXJIVE1MPVwiPGE+PC9hPlwiLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobi5tZW51Lmluc2VydFNlbGVjdG9yKS5hcHBlbmQoaSksTS5ub2RlLmJsY2s9aX12YXIgcz1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfbW9kYWxcIil8fGUuY2xvc2UoKX07TS5ub2RlLmJsY2suYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHMpLE0ubm9kZS5ibGNrLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIscyksTS5ub2RlLmJsY2suYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHMpLHRoaXMudHJpZ2dlcihcImluaXRCbG9ja2VyOmFmdGVyXCIpfX0sTz17YXJpYTohMCx0ZXh0OiEwfTt2YXIgST17dGV4dDp7Y2xvc2VNZW51OlwiQ2xvc2UgbWVudVwiLGNsb3NlU3VibWVudTpcIkNsb3NlIHN1Ym1lbnVcIixvcGVuU3VibWVudTpcIk9wZW4gc3VibWVudVwiLHRvZ2dsZVN1Ym1lbnU6XCJUb2dnbGUgc3VibWVudVwifX0scT17XCJDbG9zZSBtZW51XCI6XCLYqNiz2KrZhiDZhdmG2YhcIixcIkNsb3NlIHN1Ym1lbnVcIjpcItio2LPYqtmGINiy24zYsdmF2YbZiFwiLFwiT3BlbiBzdWJtZW51XCI6XCLYqNin2LLaqdix2K/ZhiDYstuM2LHZhdmG2YhcIixcIlRvZ2dsZSBzdWJtZW51XCI6XCLYs9mI24zbjNqGINiy24zYsdmF2YbZiFwifSxCPXtcIkNsb3NlIG1lbnVcIjpcIk1lbsO8IHNjaGxpZcOfZW5cIixcIkNsb3NlIHN1Ym1lbnVcIjpcIlVudGVybWVuw7wgc2NobGllw59lblwiLFwiT3BlbiBzdWJtZW51XCI6XCJVbnRlcm1lbsO8IMO2ZmZuZW5cIixcIlRvZ2dsZSBzdWJtZW51XCI6XCJVbnRlcm1lbsO8IHdlY2hzZWxuXCJ9LHo9e1wiQ2xvc2UgbWVudVwiOlwi0JfQsNC60YDRi9GC0Ywg0LzQtdC90Y5cIixcIkNsb3NlIHN1Ym1lbnVcIjpcItCX0LDQutGA0YvRgtGMINC/0L7QtNC80LXQvdGOXCIsXCJPcGVuIHN1Ym1lbnVcIjpcItCe0YLQutGA0YvRgtGMINC/0L7QtNC80LXQvdGOXCIsXCJUb2dnbGUgc3VibWVudVwiOlwi0J/QtdGA0LXQutC70Y7Rh9C40YLRjCDQv9C+0LTQvNC10L3RjlwifTtmKHtcIkNsb3NlIG1lbnVcIjpcIk1lbnUgc2x1aXRlblwiLFwiQ2xvc2Ugc3VibWVudVwiOlwiU3VibWVudSBzbHVpdGVuXCIsXCJPcGVuIHN1Ym1lbnVcIjpcIlN1Ym1lbnUgb3BlbmVuXCIsXCJUb2dnbGUgc3VibWVudVwiOlwiU3VibWVudSB3aXNzZWxlblwifSxcIm5sXCIpLGYocSxcImZhXCIpLGYoQixcImRlXCIpLGYoeixcInJ1XCIpLE0ub3B0aW9ucy5zY3JlZW5SZWFkZXI9TyxNLmNvbmZpZ3Muc2NyZWVuUmVhZGVyPUk7dmFyIFI7Uj1mdW5jdGlvbihlLHQsbil7ZVt0XT1uLG4/ZS5zZXRBdHRyaWJ1dGUodCxuLnRvU3RyaW5nKCkpOmUucmVtb3ZlQXR0cmlidXRlKHQpfSxNLnNyX2FyaWE9ZnVuY3Rpb24oZSx0LG4pe1IoZSxcImFyaWEtXCIrdCxuKX0sTS5zcl9yb2xlPWZ1bmN0aW9uKGUsdCl7UihlLFwicm9sZVwiLHQpfSxNLnNyX3RleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuJzxzcGFuIGNsYXNzPVwibW0tc3Jvbmx5XCI+JytlK1wiPC9zcGFuPlwifTt2YXIgVT17Zml4OiEwfTt2YXIgVz1cIm9udG91Y2hzdGFydFwiaW4gd2luZG93fHwhIW5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzfHwhMTtNLm9wdGlvbnMuc2Nyb2xsQnVnRml4PVU7dmFyIFk9e2hlaWdodDpcImRlZmF1bHRcIn07TS5vcHRpb25zLmF1dG9IZWlnaHQ9WTt2YXIgRj17Y2xvc2U6ITEsb3BlbjohMX07TS5vcHRpb25zLmJhY2tCdXR0b249Rjt2YXIgWD17YWRkOiExLHZpc2libGU6e21pbjoxLG1heDozfX07TS5vcHRpb25zLmNvbHVtbnM9WDt2YXIgVj17YWRkOiExLGFkZFRvOlwicGFuZWxzXCIsY291bnQ6ITF9O00ub3B0aW9ucy5jb3VudGVycz1WLE0uY29uZmlncy5jbGFzc05hbWVzLmNvdW50ZXJzPXtjb3VudGVyOlwiQ291bnRlclwifTt2YXIgWj17YWRkOiExLGFkZFRvOlwicGFuZWxzXCJ9O00ub3B0aW9ucy5kaXZpZGVycz1aLE0uY29uZmlncy5jbGFzc05hbWVzLmRpdmlkZXI9XCJEaXZpZGVyXCI7dmFyIEc9e29wZW46ITEsbm9kZTpudWxsfTt2YXIgSj1cIm9udG91Y2hzdGFydFwiaW4gd2luZG93fHwhIW5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzfHwhMSxLPXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sUT17c3RhcnQ6MTUsc3dpcGU6MTV9LCQ9e3g6W1wiUmlnaHRcIixcIkxlZnRcIl0seTpbXCJEb3duXCIsXCJVcFwiXX0sZWU9MCx0ZT0xLG5lPTIsaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmXCIlXCI9PWUuc2xpY2UoLTEpJiYoZT10KigoZT1wYXJzZUludChlLnNsaWNlKDAsLTEpLDEwKSkvMTAwKSksZX0sc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnN1cmZhY2U9ZSx0aGlzLmFyZWE9byh0LEspLHRoaXMudHJlc2hvbGQ9byhuLFEpLHRoaXMuc3VyZmFjZS5tbUhhc0RyYWdFdmVudHN8fCh0aGlzLnN1cmZhY2UuYWRkRXZlbnRMaXN0ZW5lcihKP1widG91Y2hzdGFydFwiOlwibW91c2Vkb3duXCIsdGhpcy5zdGFydC5iaW5kKHRoaXMpKSx0aGlzLnN1cmZhY2UuYWRkRXZlbnRMaXN0ZW5lcihKP1widG91Y2hlbmRcIjpcIm1vdXNldXBcIix0aGlzLnN0b3AuYmluZCh0aGlzKSksdGhpcy5zdXJmYWNlLmFkZEV2ZW50TGlzdGVuZXIoSj9cInRvdWNobGVhdmVcIjpcIm1vdXNlbGVhdmVcIix0aGlzLnN0b3AuYmluZCh0aGlzKSksdGhpcy5zdXJmYWNlLmFkZEV2ZW50TGlzdGVuZXIoSj9cInRvdWNobW92ZVwiOlwibW91c2Vtb3ZlXCIsdGhpcy5tb3ZlLmJpbmQodGhpcykpKSx0aGlzLnN1cmZhY2UubW1IYXNEcmFnRXZlbnRzPSEwfXJldHVybi
24510BlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRQb3NpdGlvbj17eDplLnRvdWNoZXM/ZS50b3VjaGVzWzBdLnBhZ2VYOmUucGFnZVh8fDAseTplLnRvdWNoZXM/ZS50b3VjaGVzWzBdLnBhZ2VZOmUucGFnZVl8fDB9O3ZhciB0PXRoaXMuc3VyZmFjZS5jbGllbnRXaWR0aCxuPXRoaXMuc3VyZmFjZS5jbGllbnRIZWlnaHQsaT1pZSh0aGlzLmFyZWEudG9wLG4pO2lmKCEoXCJudW1iZXJcIj09dHlwZW9mIGkmJnRoaXMuY3VycmVudFBvc2l0aW9uLnk8aSkpe3ZhciBzPWllKHRoaXMuYXJlYS5yaWdodCx0KTtpZighKFwibnVtYmVyXCI9PXR5cGVvZiBzJiYocz10LXMsdGhpcy5jdXJyZW50UG9zaXRpb24ueD5zKSkpe3ZhciBhPWllKHRoaXMuYXJlYS5ib3R0b20sbik7aWYoIShcIm51bWJlclwiPT10eXBlb2YgYSYmKGE9bi1hLHRoaXMuY3VycmVudFBvc2l0aW9uLnk+YSkpKXt2YXIgbz1pZSh0aGlzLmFyZWEubGVmdCx0KTtcIm51bWJlclwiPT10eXBlb2YgbyYmdGhpcy5jdXJyZW50UG9zaXRpb24ueDxvfHwodGhpcy5zdGFydFBvc2l0aW9uPXt4OnRoaXMuY3VycmVudFBvc2l0aW9uLngseTp0aGlzLmN1cnJlbnRQb3NpdGlvbi55fSx0aGlzLnN0YXRlPXRlKX19fX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihlKXtpZih0aGlzLnN0YXRlPT1uZSl7dmFyIHQ9dGhpcy5fZHJhZ0RpcmVjdGlvbigpLG49dGhpcy5fZXZlbnREZXRhaWwodCk7aWYodGhpcy5fZGlzcGF0Y2hFdmVudHMoXCJkcmFnKkVuZFwiLG4pLE1hdGguYWJzKHRoaXMubW92ZW1lbnRbdGhpcy5heGlzXSk+dGhpcy50cmVzaG9sZC5zd2lwZSl7dmFyIGk9dGhpcy5fc3dpcGVEaXJlY3Rpb24oKTtuLmRpcmVjdGlvbj1pLHRoaXMuX2Rpc3BhdGNoRXZlbnRzKFwic3dpcGUqXCIsbil9fXRoaXMuc3RhdGU9ZWV9LGUucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oZSl7c3dpdGNoKHRoaXMuc3RhdGUpe2Nhc2UgdGU6Y2FzZSBuZTp2YXIgdD17eDplLmNoYW5nZWRUb3VjaGVzP2UudG91Y2hlc1swXS5wYWdlWDplLnBhZ2VYfHwwLHk6ZS5jaGFuZ2VkVG91Y2hlcz9lLnRvdWNoZXNbMF0ucGFnZVk6ZS5wYWdlWXx8MH07dGhpcy5tb3ZlbWVudD17eDp0LngtdGhpcy5jdXJyZW50UG9zaXRpb24ueCx5OnQueS10aGlzLmN1cnJlbnRQb3NpdGlvbi55fSx0aGlzLmRpc3RhbmNlPXt4OnQueC10aGlzLnN0YXJ0UG9zaXRpb24ueCx5OnQueS10aGlzLnN0YXJ0UG9zaXRpb24ueX0sdGhpcy5jdXJyZW50UG9zaXRpb249e3g6dC54LHk6dC55fSx0aGlzLmF4aXM9TWF0aC5hYnModGhpcy5kaXN0YW5jZS54KT5NYXRoLmFicyh0aGlzLmRpc3RhbmNlLnkpP1wieFwiOlwieVwiO3ZhciBuPXRoaXMuX2RyYWdEaXJlY3Rpb24oKSxpPXRoaXMuX2V2ZW50RGV0YWlsKG4pO3RoaXMuc3RhdGU9PXRlJiZNYXRoLmFicyh0aGlzLmRpc3RhbmNlW3RoaXMuYXhpc10pPnRoaXMudHJlc2hvbGQuc3RhcnQmJih0aGlzLl9kaXNwYXRjaEV2ZW50cyhcImRyYWcqU3RhcnRcIixpKSx0aGlzLnN0YXRlPW5lKSx0aGlzLnN0YXRlPT1uZSYmdGhpcy5fZGlzcGF0Y2hFdmVudHMoXCJkcmFnKk1vdmVcIixpKX19LGUucHJvdG90eXBlLl9ldmVudERldGFpbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmRpc3RhbmNlLngsbj10aGlzLmRpc3RhbmNlLnk7cmV0dXJuXCJ4XCI9PXRoaXMuYXhpcyYmKHQtPXQ+MD90aGlzLnRyZXNob2xkLnN0YXJ0OjAtdGhpcy50cmVzaG9sZC5zdGFydCksXCJ5XCI9PXRoaXMuYXhpcyYmKG4tPW4+MD90aGlzLnRyZXNob2xkLnN0YXJ0OjAtdGhpcy50cmVzaG9sZC5zdGFydCkse2F4aXM6dGhpcy5heGlzLGRpcmVjdGlvbjplLG1vdmVtZW50WDp0aGlzLm1vdmVtZW50LngsbW92ZW1lbnRZOnRoaXMubW92ZW1lbnQueSxkaXN0YW5jZVg6dCxkaXN0YW5jZVk6bn19LGUucHJvdG90eXBlLl9kaXNwYXRjaEV2ZW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBDdXN0b21FdmVudChlLnJlcGxhY2UoXCIqXCIsXCJcIikse2RldGFpbDp0fSk7dGhpcy5zdXJmYWNlLmRpc3BhdGNoRXZlbnQobik7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUucmVwbGFjZShcIipcIix0aGlzLmF4aXMudG9VcHBlckNhc2UoKSkse2RldGFpbDp0fSk7dGhpcy5zdXJmYWNlLmRpc3BhdGNoRXZlbnQoaSk7dmFyIHM9bmV3IEN1c3RvbUV2ZW50KGUucmVwbGFjZShcIipcIix0LmRpcmVjdGlvbikse2RldGFpbDp0fSk7dGhpcy5zdXJmYWNlLmRpc3BhdGNoRXZlbnQocyl9LGUucHJvdG90eXBlLl9kcmFnRGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuICRbdGhpcy5heGlzXVt0aGlzLmRpc3RhbmNlW3RoaXMuYXhpc10+MD8wOjFdfSxlLnByb3RvdHlwZS5fc3dpcGVEaXJlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gJFt0aGlzLmF4aXNdW3RoaXMubW92ZW1lbnRbdGhpcy5heGlzXT4wPzA6MV19LGV9KCksYWU9bnVsbCxvZT1udWxsLHJlPTAsY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXt9LGk9ITEscz1mdW5jdGlvbigpe3ZhciBlPU9iamVjdC5rZXlzKHQub3B0cy5leHRlbnNpb25zKTtlLmxlbmd0aD8oayhlLmpvaW4oXCIsIFwiKSwoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXtuPW1lKG4sW10sdC5ub2RlLm1lbnUpfSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ayhlLChmdW5jdGlvbigpe249bWUobix0Lm9wdHMuZXh0ZW5zaW9uc1tlXSx0Lm5vZGUubWVudSl9KSwoZnVuY3Rpb24oKXt9KSl9KSkpOm49bWUobixbXSx0Lm5vZGUubWVudSl9O29lJiYoSChvZSxcImRyYWdTdGFydFwiKSxIKG9lLFwiZHJhZ01vdmVcIiksSChvZSxcImRyYWdFbmRcIikpLGFlPW5ldyBzZShvZT1lKSxzKCkscz1mdW5jdGlvbigpe30sb2UmJihOKG9lLFwiZHJhZ1N0YXJ0XCIsKGZ1bmN0aW9uKGUpe2UuZGV0YWlsLmRpcmVjdGlvbj09bi5kaXJlY3Rpb24mJihpPSEwLHQubm9kZS53cnByLmNsYXNzTGlzdC5hZGQoXCJtbS13cmFwcGVyX2RyYWdnaW5nXCIpLHQuX29wZW5TZXR1cCgpLHQudHJpZ2dlcihcIm9wZW46c3RhcnRcIikscmU9dC5ub2RlLm1lbnVbXCJ4XCI9PW4uYXhpcz9cImNsaWVudFdpZHRoXCI6XCJjbGllbnRIZWlnaHRcIl0pfSkpLE4ob2UsXCJkcmFnTW92ZVwiLChmdW5jdGlvbihlKXtpZihlLmRldGFpbC5heGlzPT1uLmF4aXMmJmkpe3ZhciB0PWUuZGV0YWlsW1wiZGlzdGFuY2VcIituLmF4aXMudG9VcHBlckNhc2UoKV07c3dpdGNoKG4ucG9zaXRpb24pe2Nhc2VcInJpZ2h0XCI6Y2FzZVwiYm90dG9tXCI6dD1NYXRoLm1pbihNYXRoLm1heCh0LC1yZSksMCk7YnJlYWs7ZGVmYXVsdDp0PU1hdGgubWF4KE1hdGgubWluKHQscmUpLDApfWlmKFwiZnJvbnRcIj09bi56cG9zaXRpb24pc3dpdGNoKG4ucG9zaXRpb24pe2Nhc2VcInJpZ2h0XCI6Y2FzZVwiYm90dG9tXCI6dCs9cmU7YnJlYWs7ZGVmYXVsdDp0LT1yZX1uLnNsaWRlT3V0Tm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGVcIituLmF4aXMudG9VcHBlckNhc2UoKStcIihcIit0K1wicHgpXCJ9KSl9fSkpLE4ob2UsXCJkcmFnRW5kXCIsKGZ1bmN0aW9uKGUpe2lmKGUuZGV0YWlsLmF4aXM9PW4uYXhpcyYmaSl7aT0hMSx0Lm5vZGUud3Jwci5jbGFzc0xpc3QucmVtb3ZlKFwibW0td3JhcHBlcl9kcmFnZ2luZ1wiKSxuLnNsaWRlT3V0Tm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zdHlsZS50cmFuc2Zvcm09XCJcIn0pKTt2YXIgcz1NYXRoLmFicyhlLmRldGFpbFtcImRpc3RhbmNlXCIrbi5heGlzLnRvVXBwZXJDYXNlKCldKT49Ljc1KnJlO2lmKCFzKXt2YXIgYT1lLmRldGFpbFtcIm1vdmVtZW50XCIrbi5heGlzLnRvVXBwZXJDYXNlKCldO3N3aXRjaC
24510huLnBvc2l0aW9uKXtjYXNlXCJyaWdodFwiOmNhc2VcImJvdHRvbVwiOnM9YTw9MDticmVhaztkZWZhdWx0OnM9YT49MH19cz90Ll9vcGVuU3RhcnQoKTp0LmNsb3NlKCl9fSkpKX0sbWU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaChlLnBvc2l0aW9uPVwibGVmdFwiLGUuenBvc2l0aW9uPVwiYmFja1wiLFtcInJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiXS5mb3JFYWNoKChmdW5jdGlvbihuKXt0LmluZGV4T2YoXCJwb3NpdGlvbi1cIituKT4tMSYmKGUucG9zaXRpb249bil9KSksW1wiZnJvbnRcIixcInRvcFwiLFwiYm90dG9tXCJdLmZvckVhY2goKGZ1bmN0aW9uKG4pe3QuaW5kZXhPZihcInBvc2l0aW9uLVwiK24pPi0xJiYoZS56cG9zaXRpb249XCJmcm9udFwiKX0pKSxhZS5hcmVhPXt0b3A6XCJib3R0b21cIj09ZS5wb3NpdGlvbj9cIjc1JVwiOjAscmlnaHQ6XCJsZWZ0XCI9PWUucG9zaXRpb24/XCI3NSVcIjowLGJvdHRvbTpcInRvcFwiPT1lLnBvc2l0aW9uP1wiNzUlXCI6MCxsZWZ0OlwicmlnaHRcIj09ZS5wb3NpdGlvbj9cIjc1JVwiOjB9LGUucG9zaXRpb24pe2Nhc2VcInRvcFwiOmNhc2VcImJvdHRvbVwiOmUuYXhpcz1cInlcIjticmVhaztkZWZhdWx0OmUuYXhpcz1cInhcIn1zd2l0Y2goZS5wb3NpdGlvbil7Y2FzZVwidG9wXCI6ZS5kaXJlY3Rpb249XCJEb3duXCI7YnJlYWs7Y2FzZVwicmlnaHRcIjplLmRpcmVjdGlvbj1cIkxlZnRcIjticmVhaztjYXNlXCJib3R0b21cIjplLmRpcmVjdGlvbj1cIlVwXCI7YnJlYWs7ZGVmYXVsdDplLmRpcmVjdGlvbj1cIlJpZ2h0XCJ9c3dpdGNoKGUuenBvc2l0aW9uKXtjYXNlXCJmcm9udFwiOmUuc2xpZGVPdXROb2Rlcz1bbl07YnJlYWs7ZGVmYXVsdDplLnNsaWRlT3V0Tm9kZXM9Xyhkb2N1bWVudC5ib2R5LFwiLm1tLXNsaWRlb3V0XCIpfXJldHVybiBlfTtNLm9wdGlvbnMuZHJhZz1HO3ZhciBsZT17ZHJvcDohMSxmaXRWaWV3cG9ydDohMCxldmVudDpcImNsaWNrXCIscG9zaXRpb246e30sdGlwOiEwfTt2YXIgZGU9e29mZnNldDp7YnV0dG9uOnt4Oi01LHk6NX0sdmlld3BvcnQ6e3g6MjAseToyMH19LGhlaWdodDp7bWF4Ojg4MH0sd2lkdGg6e21heDo0NDB9fTtNLm9wdGlvbnMuZHJvcGRvd249bGUsTS5jb25maWdzLmRyb3Bkb3duPWRlO3ZhciBwZT17aW5zZXJ0TWV0aG9kOlwiYXBwZW5kXCIsaW5zZXJ0U2VsZWN0b3I6XCJib2R5XCJ9O00uY29uZmlncy5maXhlZEVsZW1lbnRzPXBlLE0uY29uZmlncy5jbGFzc05hbWVzLmZpeGVkRWxlbWVudHM9e2ZpeGVkOlwiRml4ZWRcIn07dmFyIHVlPXt1c2U6ITEsdG9wOltdLGJvdHRvbTpbXSxwb3NpdGlvbjpcImxlZnRcIix0eXBlOlwiZGVmYXVsdFwifTtNLm9wdGlvbnMuaWNvbmJhcj11ZTt2YXIgZmU9e2FkZDohMSxibG9ja1BhbmVsOiEwLGhpZGVEaXZpZGVyOiExLGhpZGVOYXZiYXI6ITAsdmlzaWJsZTozfTtNLm9wdGlvbnMuaWNvblBhbmVscz1mZTt2YXIgaGU9e2VuYWJsZTohMSxlbmhhbmNlOiExfTtNLm9wdGlvbnMua2V5Ym9hcmROYXZpZ2F0aW9uPWhlO3ZhciB2ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO0goZG9jdW1lbnQuYm9keSxcImtleWRvd24udGFiZ3VhcmRcIiksSChkb2N1bWVudC5ib2R5LFwiZm9jdXNpbi50YWJndWFyZFwiKSxOKGRvY3VtZW50LmJvZHksXCJmb2N1c2luLnRhYmd1YXJkXCIsKGZ1bmN0aW9uKGUpe2lmKHQubm9kZS53cnByLm1hdGNoZXMoXCIubW0td3JhcHBlcl9vcGVuZWRcIikpe3ZhciBuPWUudGFyZ2V0O2lmKG4ubWF0Y2hlcyhcIi5tbS10YWJlbmRcIikpe3ZhciBpPXZvaWQgMDtuLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1tZW51XCIpJiZNLm5vZGUuYmxjayYmKGk9TS5ub2RlLmJsY2spLG4ucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfX2Jsb2NrZXJcIikmJihpPV8oZG9jdW1lbnQuYm9keSxcIi5tbS1tZW51X29mZmNhbnZhcy5tbS1tZW51X29wZW5lZFwiKVswXSksaXx8KGk9bi5wYXJlbnRFbGVtZW50KSxpJiZ5KGksXCIubW0tdGFic3RhcnRcIilbMF0uZm9jdXMoKX19fSkpLEgoZG9jdW1lbnQuYm9keSxcImtleWRvd24ubmF2aWdhdGVcIiksTihkb2N1bWVudC5ib2R5LFwia2V5ZG93bi5uYXZpZ2F0ZVwiLChmdW5jdGlvbih0KXt2YXIgbj10LnRhcmdldCxpPW4uY2xvc2VzdChcIi5tbS1tZW51XCIpO2lmKGkpe2kubW1BcGk7aWYoIW4ubWF0Y2hlcyhcImlucHV0LCB0ZXh0YXJlYVwiKSlzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDEzOihuLm1hdGNoZXMoXCIubW0tdG9nZ2xlXCIpfHxuLm1hdGNoZXMoXCIubW0tY2hlY2tcIikpJiZuLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2xpY2tcIikpO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDp0LnByZXZlbn
24510REZWZhdWx0KCl9aWYoZSlpZihuLm1hdGNoZXMoXCJpbnB1dFwiKSlzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDI3Om4udmFsdWU9XCJcIn1lbHNle3ZhciBzPWkubW1BcGk7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA4OnZhciBhPV8oaSxcIi5tbS1wYW5lbF9vcGVuZWRcIilbMF0ubW1QYXJlbnQ7YSYmcy5vcGVuUGFuZWwoYS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKTticmVhaztjYXNlIDI3OmkubWF0Y2hlcyhcIi5tbS1tZW51X29mZmNhbnZhc1wiKSYmcy5jbG9zZSgpfX19fSkpfSxiZT17bG9hZDohMX07TS5vcHRpb25zLmxhenlTdWJtZW51cz1iZTt2YXIgZ2U9W107dmFyIF9lPXticmVhZGNydW1iczp7c2VwYXJhdG9yOlwiL1wiLHJlbW92ZUZpcnN0OiExfX07ZnVuY3Rpb24geWUoKXt2YXIgZT10aGlzLHQ9dGhpcy5vcHRzLm5hdmJhcnM7aWYodm9pZCAwIT09dCl7dCBpbnN0YW5jZW9mIEFycmF5fHwodD1bdF0pO3ZhciBuPXt9O3QubGVuZ3RoJiYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiZlJiYoZT17fSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSx2b2lkIDA9PT1lLmNvbnRlbnQmJihlLmNvbnRlbnQ9W1wicHJldlwiLFwidGl0bGVcIl0pLGUuY29udGVudCBpbnN0YW5jZW9mIEFycmF5fHwoZS5jb250ZW50PVtlLmNvbnRlbnRdKSx2b2lkIDA9PT1lLnVzZSYmKGUudXNlPSEwKSxcImJvb2xlYW5cIj09dHlwZW9mIGUudXNlJiZlLnVzZSYmKGUudXNlPSEwKSxlfSh0KSkudXNlKXJldHVybiExO3ZhciBpPWcoXCJkaXYubW0tbmF2YmFyXCIpLHM9dC5wb3NpdGlvbjtcImJvdHRvbVwiIT09cyYmKHM9XCJ0b3BcIiksbltzXXx8KG5bc109ZyhcImRpdi5tbS1uYXZiYXJzX1wiK3MpKSxuW3NdLmFwcGVuZChpKTtmb3IodmFyIGE9MCxvPXQuY29udGVudC5sZW5ndGg7YTxvO2ErKyl7dmFyIHIsYz10LmNvbnRlbnRbYV07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGMpaWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj15ZS5uYXZiYXJDb250ZW50c1tjXSkpci5jYWxsKGUsaSk7ZWxzZXt2YXIgbT1nKFwic3BhblwiKTttLmlubmVySFRNTD1jO3ZhciBsPXkobSk7MT09bC5sZW5ndGgmJihtPWxbMF0pLGkuYXBwZW5kKG0pfWVsc2UgaS5hcHBlbmQoYyl9XCJzdHJpbmdcIj09dHlwZW9mIHQudHlwZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9eWUubmF2YmFyVHlwZXNbdC50eXBlXSkmJnIuY2FsbChlLGkpKTtcImJvb2xlYW5cIiE9dHlwZW9mIHQudXNlJiZrKHQudXNlLChmdW5jdGlvbigpe2kuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKSxNLnNyX2FyaWEoaSxcImhpZGRlblwiLCExKX0pLChmdW5jdGlvbigpe2kuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSxNLnNyX2FyaWEoaSxcImhpZGRlblwiLCEwKX0pKX0pKSx0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBuKWUubm9kZS5tZW51W1wiYm90dG9tXCI9PXQ/XCJhcHBlbmRcIjpcInByZXBlbmRcIl0oblt0XSl9KSkpfX1NLm9wdGlvbnMubmF2YmFycz1nZSxNLmNvbmZpZ3MubmF2YmFycz1fZSxNLmNvbmZpZ3MuY2xhc3NOYW1lcy5uYXZiYXJzPXtwYW5lbFByZXY6XCJQcmV2XCIscGFuZWxUaXRsZTpcIlRpdGxlXCJ9LHllLm5hdmJhckNvbnRlbnRzPXticmVhZGNydW1iczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZyhcImRpdi5tbS1uYXZiYXJfX2JyZWFkY3J1bWJzXCIpO2UuYXBwZW5kKG4pLHRoaXMuYmluZChcImluaXROYXZiYXI6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7aWYoIWUucXVlcnlTZWxlY3RvcihcIi5tbS1uYXZiYXJfX2JyZWFkY3J1bWJzXCIpKXt5KGUsXCIubW0tbmF2YmFyXCIpWzBdLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIik7Zm9yKHZhciBuPVtdLGk9ZyhcInNwYW4ubW0tbmF2YmFyX19icmVhZGNydW1ic1wiKSxzPWUsYT0hMDtzOyl7aWYoIShzPXMuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSkucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpKXt2YXIgbz1fKHMsXCIubW0tbmF2YmFyX190aXRsZSBzcGFuXCIpWzBdO2lmKG8pe3ZhciByPW8udGV4dENvbnRlbnQ7ci5sZW5ndGgmJm4udW5zaGlmdChhP1wiPHNwYW4+XCIrcitcIjwvc3Bhbj5cIjonPGEgaHJlZj1cIiMnK3MuaWQrJ1wiPicrcitcIjwvYT5cIil9YT0hMX1zPXMubW1QYXJlbnR9dC5jb25mLm5hdmJhcnMuYnJlYWRjcnVtYnMucmVtb3ZlRmlyc3QmJm4uc2hpZnQoKSxpLmlubmVySFRNTD1uLmpvaW4oJzxzcGFuIGNsYXNzPVwibW0tc2VwYXJhdG9yXCI+Jyt0LmNvbmYubmF2YmFycy5icmVhZGNydW1icy5zZXBhcmF0b3IrXCI8L3NwYW4+XCIpLHkoZSxcIi5tbS1uYXZiYXJcIilbMF0uYXBwZW5kKGkpfX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5xdWVyeVNlbGVjdG9yKFwiLm1tLW5hdmJhcl9fYnJlYWRjcnVtYnNcIik7bi5pbm5lckhUTUw9dD90LmlubmVySFRNTDpcIlwifSkpLHRoaXMuYmluZChcImluaXROYXZiYXI6YWZ0ZXI6c3ItYXJpYVwiLChmdW5jdGlvbihlKXtfKGUsXCIubW0tYnJlYWRjcnVtYnMgYVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtNLnNyX2FyaWEoZSxcIm93bnNcIixlLmdldEF0dHJpYnV0ZShcImhyZWZcIikuc2xpY2UoMSkpfSkpfSkpfSxjbG9zZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZyhcImEubW0tYnRuLm1tLWJ0bl9jbG9zZS5tbS1uYXZiYXJfX2J0blwiKTtlLmFwcGVuZChuKSx0aGlzLmJpbmQoXCJzZXRQYWdlOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlKFwiaHJlZlwiLFwiI1wiK2UuaWQpfSkpLHRoaXMuYmluZChcInNldFBhZ2U6YWZ0ZXI6c3ItdGV4dFwiLChmdW5jdGlvbigpe24uaW5uZXJIVE1MPU0uc3JfdGV4dCh0LmkxOG4odC5jb25mLnNjcmVlblJlYWRlci50ZXh0LmNsb3NlTWVudSkpfSkpfSxwcmV2OmZ1bmN0aW9uKGUpe3ZhciB0LG4saSxzPXRoaXMsYT1nKFwiYS5tbS1idG4ubW0tYnRuX3ByZXYubW0tbmF2YmFyX19idG5cIik7ZS5hcHBlbmQoYSksdGhpcy5iaW5kKFwiaW5
24510pdE5hdmJhcjphZnRlclwiLChmdW5jdGlvbihlKXt5KGUsXCIubW0tbmF2YmFyXCIpWzBdLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIil9KSksdGhpcy5iaW5kKFwib3BlblBhbmVsOnN0YXJ0XCIsKGZ1bmN0aW9uKGUpe2UucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpfHwoKHQ9ZS5xdWVyeVNlbGVjdG9yKFwiLlwiK3MuY29uZi5jbGFzc05hbWVzLm5hdmJhcnMucGFuZWxQcmV2KSl8fCh0PWUucXVlcnlTZWxlY3RvcihcIi5tbS1uYXZiYXJfX2J0bi5tbS1idG5fcHJldlwiKSksbj10P3QuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTpcIlwiLGk9dD90LmlubmVySFRNTDpcIlwiLG4/YS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsbik6YS5yZW1vdmVBdHRyaWJ1dGUoXCJocmVmXCIpLGEuY2xhc3NMaXN0W258fGk/XCJyZW1vdmVcIjpcImFkZFwiXShcIm1tLWhpZGRlblwiKSxhLmlubmVySFRNTD1pKX0pKSx0aGlzLmJpbmQoXCJpbml0TmF2YmFyOmFmdGVyOnNyLWFyaWFcIiwoZnVuY3Rpb24oZSl7TS5zcl9hcmlhKGUucXVlcnlTZWxlY3RvcihcIi5tbS1uYXZiYXJcIiksXCJoaWRkZW5cIiwhMCl9KSksdGhpcy5iaW5kKFwib3BlblBhbmVsOnN0YXJ0OnNyLWFyaWFcIiwoZnVuY3Rpb24oZSl7TS5zcl9hcmlhKGEsXCJoaWRkZW5cIixhLm1hdGNoZXMoXCIubW0taGlkZGVuXCIpKSxNLnNyX2FyaWEoYSxcIm93bnNcIiwoYS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfHxcIlwiKS5zbGljZSgxKSl9KSl9LHNlYXJjaGZpZWxkOmZ1bmN0aW9uKGUpe1wib2JqZWN0XCIhPXIodGhpcy5vcHRzLnNlYXJjaGZpZWxkKSYmKHRoaXMub3B0cy5zZWFyY2hmaWVsZD17fSk7dmFyIHQ9ZyhcImRpdi5tbS1uYXZiYXJfX3NlYXJjaGZpZWxkXCIpO2UuYXBwZW5kKHQpLHRoaXMub3B0cy5zZWFyY2hmaWVsZC5hZGQ9ITAsdGhpcy5vcHRzLnNlYXJjaGZpZWxkLmFkZFRvPVt0XX0sdGl0bGU6ZnVuY3Rpb24oZSl7dmFyIHQsbixpLHMsYT10aGlzLG89ZyhcImEubW0tbmF2YmFyX190aXRsZVwiKSxyPWcoXCJzcGFuXCIpO28uYXBwZW5kKHIpLGUuYXBwZW5kKG8pLHRoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLChmdW5jdGlvbihlKXtlLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKXx8KChpPWUucXVlcnlTZWxlY3RvcihcIi5cIithLmNvbmYuY2xhc3NOYW1lcy5uYXZiYXJzLnBhbmVsVGl0bGUpKXx8KGk9ZS5xdWVyeVNlbGVjdG9yKFwiLm1tLW5hdmJhcl9fdGl0bGUgc3BhblwiKSksKHQ9aSYmaS5jbG9zZXN0KFwiYVwiKT9pLmNsb3Nlc3QoXCJhXCIpLmdldEF0dHJpYnV0ZShcImhyZWZcIik6XCJcIik/by5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsdCk6by5yZW1vdmVBdHRyaWJ1dGUoXCJocmVmXCIpLG49aT9pLmlubmVySFRNTDpcIlwiLHIuaW5uZXJIVE1MPW4pfSkpLHRoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydDpzci1hcmlhXCIsKGZ1bmN0aW9uKGUpe2lmKGEub3B0cy5zY3JlZW5SZWFkZXIudGV4dCl7aWYoIXMpeShhLm5vZGUubWVudSxcIi5tbS1uYXZiYXJzX3RvcCwgLm1tLW5hdmJhcnNfYm90dG9tXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUucXVlcnlTZWxlY3RvcihcIi5tbS1idG5fcHJldlwiKTt0JiYocz10KX0pKTtpZihzKXt2YXIgdD0hMDtcInBhcmVudFwiPT1hLm9wdHMubmF2YmFyLnRpdGxlTGluayYmKHQ9IXMubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIikpLE0uc3JfYXJpYShvLFwiaGlkZGVuXCIsdCl9fX0pKX19LHllLm5hdmJhclR5cGVzPXt0YWJzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5jbGFzc0xpc3QuYWRkKFwibW0tbmF2YmFyX3RhYnNcIiksZS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJtbS1uYXZiYXJzX2hhcy10YWJzXCIpO3ZhciBuPXkoZSxcImFcIik7ZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZnVuY3Rpb24oZSl7dmFyIG49ZS50YXJnZXQ7aWYobi5tYXRjaGVzKFwiYVwiKSlpZihuLm1hdGNoZXMoXCIubW0tbmF2YmFyX190YWJfc2VsZWN0ZWRcIikpZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtlbHNlIHRyeXt0Lm9wZW5QYW5lbCh0Lm5vZGUubWVudS5xdWVyeVNlbGVjdG9yKG4uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSksITEpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9Y2F0Y2goZSl7fX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24gZSh0KXtuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLW5hdmJhcl9fdGFiX3NlbGVjdGVkXCIpfSkpO3ZhciBpPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKCdbaHJlZj1cIiMnK3QuaWQrJ1wiXScpfSkpWzBdO2lmKGkpaS5jbGFzc0xpc3QuYWRkKFwibW0tbmF2YmFyX190YWJfc2VsZWN0ZWRcIik7ZWxzZXt2YXIgcz10Lm1tUGFyZW50O3MmJmUuY2FsbCh0aGlzLHMuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSl9fSkpfX07dmFyIExlPXtzY3JvbGw6ITEsdXBkYXRlOiExfTt2YXIgd2U9e3Njcm9sbE9mZnNldDowLHVwZGF0ZU9mZnNldDo1MH07TS5vcHRpb25zLnBhZ2VTY3JvbGw9TGUsTS5jb25maWdzLnBhZ2VTY3JvbGw9d2U7dmFyIEVlPXthZGQ6ITEsYWRkVG86XCJwYW5lbHNcIixjYW5jZWw6ITEsbm9SZXN1bHRzOlwiTm8gcmVzdWx0cyBmb3VuZC5cIixwbGFjZWhvbGRlcjpcIlNlYXJjaFwiLHBhbmVsOnthZGQ6ITEsZGl2aWRlcnM6ITAsZng6XCJub25lXCIsaWQ6bnVsbCxzcGxhc2g6bnVsbCx0aXRsZTpcIlNlYXJjaFwifSxzZWFyY2g6ITAsc2hvd1RleHRJdGVtczohMSxzaG93U3ViUGFuZWxzOiEwfTt2YXIgeGU9e2NsZWFyOiExLGZvcm06ITEsaW5wdXQ6ITEsc3VibWl0OiExfSxQZT17U2VhcmNoOlwi2KzYs9iq2KzZiFwiLFwiTm8gcmVzdWx0cyBmb3VuZC5cIjpcItmG2KrbjNis2YfigIzYp9uMINuM2KfZgdiqINmG2LTYry5cIixjYW5jZWw6XCLYp9mG2LXYsdin2YFcIn0sa2U9e1NlYXJjaDpcIlN1Y2hlXCIsXCJObyByZXN1bHRzIGZvdW5kLlwiOlwiS2VpbmUgRXJnZWJuaXNzZSBnZWZ1bmRlbi5cIixjYW5jZWw6XCJiZWVuZGVuXCJ9LFNlPXtTZWFyY2g6XCLQndCw0LnRgtC4XCIsXCJObyByZXN1bHRzIGZvdW5kLlwiOlwi0J3QuNGH0LXQs9C+INC90LUg0L3QsNC50LTQtdC90L4uXCIsY2FuY2VsOlwi0L7RgtC80LXQvdC40YLRjFwifSxNZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciBpPUFycmF5KGUpLHM9MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBhPWFyZ3VtZW50c1t0XSxvPTAscj1hLmxlbmd0aDtvPHI7bysrLHMrKylpW3NdPWFbb107cmV0dXJuIGl9O2Yoe1NlYXJjaDpcIlpvZWtlblwiLFwiTm8gcmVzdWx0cyBmb3VuZC5cIjpcIkdlZW4gcmVzdWx0YXRlbiBnZXZvbmRlbi5cIixjYW5jZWw6XCJhbm51bGVyZW5cIn0sXCJubFwiKSxmKFBlLFwiZmFcIiksZihrZSxcImRlXCIpLGYoU2UsXCJydVwiKSxNLm9wdGlvbnMuc2VhcmNoZmllbGQ9RWUsTS5jb25maWdzLnNlYXJjaGZpZWxkPXhlO3ZhciBBZT1mdW5jdGlvbigpe3ZhciBlPXR
24510oaXMub3B0cy5zZWFyY2hmaWVsZCx0PSh0aGlzLmNvbmYuc2VhcmNoZmllbGQseSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9zZWFyY2hcIilbMF0pO2lmKHQpcmV0dXJuIHQ7dD1nKFwiZGl2Lm1tLXBhbmVsLm1tLXBhbmVsX3NlYXJjaC5tbS1oaWRkZW5cIiksZS5wYW5lbC5pZCYmKHQuaWQ9ZS5wYW5lbC5pZCksZS5wYW5lbC50aXRsZSYmdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXRpdGxlXCIsZS5wYW5lbC50aXRsZSk7dmFyIG49ZyhcInVsXCIpO3N3aXRjaCh0LmFwcGVuZChuKSx0aGlzLm5vZGUucG5scy5hcHBlbmQodCksdGhpcy5pbml0TGlzdHZpZXcobiksdGhpcy5faW5pdE5hdmJhcih0KSxlLnBhbmVsLmZ4KXtjYXNlITE6YnJlYWs7Y2FzZVwibm9uZVwiOnQuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsX25vYW5pbWF0aW9uXCIpO2JyZWFrO2RlZmF1bHQ6dC5jbGFzc0xpc3QuYWRkKFwibW0tcGFuZWxfZngtXCIrZS5wYW5lbC5meCl9aWYoZS5wYW5lbC5zcGxhc2gpe3ZhciBpPWcoXCJkaXYubW0tcGFuZWxfX2NvbnRlbnRcIik7aS5pbm5lckhUTUw9ZS5wYW5lbC5zcGxhc2gsdC5hcHBlbmQoaSl9cmV0dXJuIHQuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsXCIpLHQuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSx0aGlzLm5vZGUucG5scy5hcHBlbmQodCksdH0sVGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRzLnNlYXJjaGZpZWxkLG49dGhpcy5jb25mLnNlYXJjaGZpZWxkO2lmKGUucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpKXJldHVybiBudWxsO2lmKGE9XyhlLFwiLm1tLXNlYXJjaGZpZWxkXCIpWzBdKXJldHVybiBhO2Z1bmN0aW9uIGkoZSx0KXtpZih0KWZvcih2YXIgbiBpbiB0KWUuc2V0QXR0cmlidXRlKG4sdFtuXSl9dmFyIHMsYT1nKChuLmZvcm0/XCJmb3JtXCI6XCJkaXZcIikrXCIubW0tc2VhcmNoZmllbGRcIiksbz1nKFwiZGl2Lm1tLXNlYXJjaGZpZWxkX19pbnB1dFwiKSxyPWcoXCJpbnB1dFwiKTsoci50eXBlPVwidGV4dFwiLHIuYXV0b2NvbXBsZXRlPVwib2ZmXCIsci5wbGFjZWhvbGRlcj10aGlzLmkxOG4odC5wbGFjZWhvbGRlciksby5hcHBlbmQociksYS5hcHBlbmQobyksZS5wcmVwZW5kKGEpLGkocixuLmlucHV0KSxuLmNsZWFyKSYmKChzPWcoXCJhLm1tLWJ0bi5tbS1idG5fY2xvc2UubW0tc2VhcmNoZmllbGRfX2J0blwiKSkuc2V0QXR0cmlidXRlKFwiaHJlZlwiLFwiI1wiKSxvLmFwcGVuZChzKSk7KGkoYSxuLmZvcm0pLG4uZm9ybSYmbi5zdWJtaXQmJiFuLmNsZWFyKSYmKChzPWcoXCJhLm1tLWJ0bi5tbS1idG5fbmV4dC5tbS1zZWFyY2hmaWVsZF9fYnRuXCIpKS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIpLG8uYXBwZW5kKHMpKTt0LmNhbmNlbCYmKChzPWcoXCJhLm1tLXNlYXJjaGZpZWxkX19jYW5jZWxcIikpLnNldEF0dHJpYnV0ZShcImhyZWZcIixcIiNcIikscy50ZXh0Q29udGVudD10aGlzLmkxOG4oXCJjYW5jZWxcIiksYS5hcHBlbmQocykpO3JldHVybiBhfSxDZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5vcHRzLnNlYXJjaGZpZWxkLGk9KHRoaXMuY29uZi5zZWFyY2hmaWVsZCx7fSk7ZS5jbG9zZXN0KFwiLm1tLXBhbmVsX3NlYXJjaFwiKT8oaS5wYW5lbHM9Xyh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbFwiKSxpLm5vcmVzdWx0cz1bZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpXSk6ZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpPyhpLnBhbmVscz1bZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpXSxpLm5vcmVzdWx0cz1pLnBhbmVscyk6KGkucGFuZWxzPV8odGhpcy5ub2RlLnBubHMsXCIubW0tcGFuZWxcIiksaS5ub3Jlc3VsdHM9W3RoaXMubm9kZS5tZW51XSksaS5wYW5lbHM9aS5wYW5lbHMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLXBhbmVsX3NlYXJjaFwiKX0pKSxpLnBhbmVscz1pLnBhbmVscy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKX0pKSxpLmxpc3RpdGVtcz1bXSxpLmRpdmlkZXJzPVtdLGkucGFuZWxzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG47KHQ9aS5saXN0aXRlbXMpLnB1c2guYXBwbHkodCxfKGUsXCIubW0tbGlzdGl0ZW1cIikpLChuPWkuZGl2aWRlcnMpLnB1c2guYXBwbHkobixfKGUsXCIubW0tZGl2aWRlclwiKSl9KSk7dmFyIHM9eSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9zZWFyY2hcIilbMF0sYT1fKGUsXCJpbnB1dFwiKVswXSxvPV8oZSxcIi5tbS1zZWFyY2hmaWVsZF9fY2FuY2VsXCIpWzBdO2EubW1TZWFyY2hmaWVsZD1pLG4ucGFuZWwuYWRkJiZuLnBhbmVsLnNwbGFzaCYmKEgoYSxcImZvY3VzLnNwbGFzaFwiKSxOKGEsXCJmb2N1cy5zcGxhc2hcIiwoZnVuY3Rpb24oZSl7dC5vcGVuUGFuZWwocyl9KSkpLG4uY2FuY2VsJiYoSChhLFwiZm9jdXMuY2FuY2VsXCIpLE4oYSxcImZvY3VzLmNhbmNlbFwiLChmdW5jdGlvbihlKXtvLmNsYXNzTGlzdC5hZGQoXCJtbS1zZWFyY2hmaWVsZF9fY2FuY2VsLWFjdGl2ZVwiKX0pKSxIKG8sXCJjbGljay5zcGxhc2hcIiksTihvLFwiY2xpY2suc3BsYXNoXCIsKGZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxvLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1zZWFyY2hmaWVsZF9fY2FuY2VsLWFjdGl2ZVwiKSxzLm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkXCIpKXt2YXIgbj15KHQubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIik7bi5sZW5ndGgmJnQub3BlblBhbmVsKG5bbi5sZW5ndGgtMV0pfX0pKSksbi5wYW5lbC5hZGQmJlwicGFuZWxcIj09bi5hZGRUbyYmdGhpcy5iaW5kKFwib3BlblBhbmVsOmZpbmlzaFwiLChmdW5jdGlvbihlKXtlPT09cyYmYS5mb2N1cygpfSkpLEgoYSxcImlucHV0LnNlYXJjaFwiKSxOKGEsXCJpbnB1dC5zZWFyY2hcIiwoZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA5OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6YnJlYWs7ZGVmYXVsdDp0LnNlYXJjaChhKX19KSksdGhpcy5zZWFyY2goYSl9LE5lPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMub3B0cy5zZWFyY2hmaWVsZDt0aGlzLmNvbmYuc2VhcmNoZmllbGQ7aWYoZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpfHwoZT15KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpWzBdKSwheShlLFwiLm1tLXBhbmVsX19ub3Jlc3VsdHNtc2dcIikubGVuZ3RoKXt2YXIgbj1nKFwiZGl2Lm1tLXBhbmVsX19ub3Jlc3VsdHNtc2cubW0taGlkZGVuXCIpO24uaW5uZXJIVE1MPXRoaXMuaTE4bih0Lm5vUmVzdWx0cyksZS5hcHBlbmQobil9fX07TS5wcm90b3R5cGUuc2VhcmNoPWZ1bmN0aW9uKGUsdCl7dmFyIG4saT10aGlzLHM9dGhpcy5vcHRzLnNlYXJjaGZpZWxkO3RoaXMuY29uZi5zZWFyY2hmaWVsZDt0PSh0PXR8fFwiXCIrZS52YWx1ZSkudG9Mb3dlckNhc2UoKS50cmltKCk7dmFyIGE9ZS5tbVNlYXJjaGZpZWxkLG89XyhlLmNsb3Nlc3QoXCIubW0tc2VhcmNoZmllbGRcIiksXCIubW0tYnRuXCIpLHI9eSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9zZWFyY2hcIilbMF0sYz1hLnBhbmVscyxtPWEubm9yZXN1bHRzLGw9YS5saXN0aXRlbXMsZD1hLmRpdmlkZXJzO2lmKGwuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fbm9zdWJpdGVtc1wiKSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbV9vbmx5c3ViaXRlbXNcIiksZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpLHImJih5KHIsXCIubW0tbGlzdHZpZXdcIilbMF0uaW5uZXJIVE1MPVwiXCIpLGMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zY3JvbGxUb3A9MH0pKSx0Lmxlbmd0aCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIil9KSksbC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbixpPXkoZSxcIi
245105tbS1saXN0aXRlbV9fdGV4dFwiKVswXSxhPSExO2kmJihuPWksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5jaGlsZE5vZGVzKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiAzPT1lLm5vZGVUeXBlfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbihcIiBcIikpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT4tMSYmKGkubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV9fYnRuXCIpP3Muc2hvd1N1YlBhbmVscyYmKGE9ITApOihpLm1hdGNoZXMoXCJhXCIpfHxzLnNob3dUZXh0SXRlbXMpJiYoYT0hMCkpLGF8fGUuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKX0pKTt2YXIgcD1sLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIil9KSkubGVuZ3RoO2lmKHMucGFuZWwuYWRkKXt2YXIgdT1bXTtjLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PXcoXyhlLFwiLm1tLWxpc3RpdGVtXCIpKTtpZigodD10LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIil9KSkpLmxlbmd0aCl7aWYocy5wYW5lbC5kaXZpZGVycyl7dmFyIG49ZyhcImxpLm1tLWRpdmlkZXJcIiksaT1fKGUsXCIubW0tbmF2YmFyX190aXRsZVwiKVswXTtpJiYobi5pbm5lckhUTUw9aS5pbm5lckhUTUwsdS5wdXNoKG4pKX10LmZvckVhY2goKGZ1bmN0aW9uKGUpe3UucHVzaChlLmNsb25lTm9kZSghMCkpfSkpfX0pKSx1LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucXVlcnlTZWxlY3RvckFsbChcIi5tbS10b2dnbGUsIC5tbS1jaGVja1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlbW92ZSgpfSkpfSkpLChuPXkocixcIi5tbS1saXN0dmlld1wiKVswXSkuYXBwZW5kLmFwcGx5KG4sdSksdGhpcy5vcGVuUGFuZWwocil9ZWxzZSBzLnNob3dTdWJQYW5lbHMmJmMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dyhfKGUsXCIubW0tbGlzdGl0ZW1cIikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUubW1DaGlsZDt0JiZfKHQsXCIubW0tbGlzdGl0ZW1cIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpfSkpfSkpLE1lKGMpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3ZhciBzPXQubW1QYXJlbnQ7cyYmKHcoXyh0LFwiLm1tLWxpc3RpdGVtXCIpKS5sZW5ndGg/KHMubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIikmJnMuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKSxzLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9vbmx5c3ViaXRlbXNcIikpOmUuY2xvc2VzdChcIi5tbS1wYW5lbFwiKXx8KCh0Lm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkXCIpfHx0Lm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiKSkmJnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aS5vcGVuUGFuZWwocy5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKX0pLChuKzEpKigxLjUqaS5jb25mLm9wZW5pbmdJbnRlcnZhbCkpLHMuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3RpdGVtX25vc3ViaXRlbXNcIikpKX0pKSxjLmZvckVhY2goKGZ1bmN0aW9uKGUpe3coXyhlLFwiLm1tLWxpc3RpdGVtXCIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtMKGUsXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5tYXRjaGVzKFwiLm1tLWhpZGRlblwiKSYmKGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKSxlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9vbmx5c3ViaXRlbXNcIikpfSkpfSkpfSkpLGMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dyhfKGUsXCIubW0tbGlzdGl0ZW1cIikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2k7KXQmJiFpLm1hdGNoZXModCl8fG4ucHVzaChpKSxpPWkucHJldmlvdXNFbGVtZW50U2libGluZztyZXR1cm4gbn0oZSxcIi5tbS1kaXZpZGVyXCIpWzBdO3QmJnQuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKX0pKTtvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1oaWRkZW5cIil9KSksbS5mb3JFYWNoKChmdW5jdGlvbihlKXtfKGUsXCIubW0tcGFuZWxfX25vcmVzdWx0c21zZ1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3RbcD9cImFkZFwiOlwicmVtb3ZlXCJdKFwibW0taGlkZGVuXCIpfSkpfSkpLHMucGFuZWwuYWRkJiYocy5wYW5lbC5zcGxhc2gmJl8ocixcIi5tbS1wYW5lbF9fY29udGVudFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKFwibW0taGlkZGVuXCIpfSkpLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKSxkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1oaWRkZW5cIil9KSkpfWVsc2UgaWYobC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpLGQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKSxvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIil9KSksbS5mb3JFYWNoKChmdW5jdGlvbihlKXtfKGUsXCIubW0tcGFuZWxfX25vcmVzdWx0c21zZ1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKFwibW0taGlkZGVuXCIpfSkpfSkpLHMucGFuZWwuYWRkKWlmKHMucGFuZWwuc3BsYXNoKV8ocixcIi5tbS1wYW5lbF9fY29udGVudFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpO2Vsc2UgaWYoIWUuY2xvc2VzdChcIi5tbS1wYW5lbF9zZWFyY2hcIikpe3ZhciBmPXkodGhpcy5ub2RlLnBubHMsXCIubW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiKTt0aGlzLm9wZW5QYW5lbChmLnNsaWNlKC0xKVswXSl9dGhpcy50cmlnZ2VyKFwidXBkYXRlTGlzdHZpZXdcIil9O3ZhciBIZT17YWRkOiExLGFkZFRvOlwicGFuZWxzXCJ9O00ub3B0aW9ucy5zZWN0aW9uSW5kZXhlcj1IZTt2YXIgamU9e2N1cnJlbnQ6ITAsaG92ZXI6ITEscGFyZW50OiExfTtNLm9wdGlvbnMuc2V0U2VsZWN0ZWQ9amU7dmFyIERlPXtjb2xsYXBzZWQ6e3VzZTohMSxibG9ja01lbnU6ITAsaGlkZURpdmlkZXI6ITEsaGlkZU5hdmJhcjohMH0sZXhwYW5kZWQ6e3VzZTohMSxpbml0aWFsOlwib3BlblwifX07TS5vcHRpb25zLnNpZGViYXI9RGU7TS5jb25maWdzLmNsYXNzTmFtZXMudG9nZ2xlcz17dG9nZ2xlOlwiVG9nZ2xlXCIsY2hlY2s6XCJDaGVja1wifTtcbi8qIVxuICogbW1lbnUuanNcbiAqIG1tZW51anMuY29tXG4gKlxuICogQ29weXJpZ2h0IChjKSBGcmVkIEhldXNzY2hlblxuICogZnJlYnNpdGUubmxcbiAqL1xuTS5hZGRvbnM9e29mZmNhbnZhczpmdW5jdGlvbigpe3ZhciBlPXR
24510oaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMub2ZmQ2FudmFzKTt0aGlzLm9wdHMub2ZmQ2FudmFzPW8odCxNLm9wdGlvbnMub2ZmQ2FudmFzKTt2YXIgbj10aGlzLmNvbmYub2ZmQ2FudmFzO3RoaXMuX2FwaS5wdXNoKFwib3BlblwiLFwiY2xvc2VcIixcInNldFBhZ2VcIiksdGhpcy52YXJzLm9wZW5lZD0hMSx0aGlzLmJpbmQoXCJpbml0TWVudTpiZWZvcmVcIiwoZnVuY3Rpb24oKXtuLmNsb25lJiYoZS5ub2RlLm1lbnU9ZS5ub2RlLm1lbnUuY2xvbmVOb2RlKCEwKSxlLm5vZGUubWVudS5pZCYmKGUubm9kZS5tZW51LmlkPVwibW0tXCIrZS5ub2RlLm1lbnUuaWQpLF8oZS5ub2RlLm1lbnUsXCJbaWRdXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaWQ9XCJtbS1cIitlLmlkfSkpKSxlLm5vZGUud3Jwcj1kb2N1bWVudC5ib2R5LGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobi5tZW51Lmluc2VydFNlbGVjdG9yKVtuLm1lbnUuaW5zZXJ0TWV0aG9kXShlLm5vZGUubWVudSl9KSksdGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtELmNhbGwoZSksZS5zZXRQYWdlKE0ubm9kZS5wYWdlKSxqLmNhbGwoZSksZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfb2ZmY2FudmFzXCIpO3ZhciB0PXdpbmRvdy5sb2NhdGlvbi5oYXNoO2lmKHQpe3ZhciBuPXAoZS5ub2RlLm1lbnUuaWQpO24mJm49PXQuc2xpY2UoMSkmJnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5vcGVuKCl9KSwxZTMpfX0pKSx0aGlzLmJpbmQoXCJzZXRQYWdlOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe00ubm9kZS5ibGNrJiZ5KE0ubm9kZS5ibGNrLFwiYVwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZShcImhyZWZcIixcIiNcIitlLmlkKX0pKX0pKSx0aGlzLmJpbmQoXCJvcGVuOnN0YXJ0OnNyLWFyaWFcIiwoZnVuY3Rpb24oKXtNLnNyX2FyaWEoZS5ub2RlLm1lbnUsXCJoaWRkZW5cIiwhMSl9KSksdGhpcy5iaW5kKFwiY2xvc2U6ZmluaXNoOnNyLWFyaWFcIiwoZnVuY3Rpb24oKXtNLnNyX2FyaWEoZS5ub2RlLm1lbnUsXCJoaWRkZW5cIiwhMCl9KSksdGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXI6c3ItYXJpYVwiLChmdW5jdGlvbigpe00uc3JfYXJpYShlLm5vZGUubWVudSxcImhpZGRlblwiLCEwKX0pKSx0aGlzLmJpbmQoXCJpbml0QmxvY2tlcjphZnRlcjpzci10ZXh0XCIsKGZ1bmN0aW9uKCl7eShNLm5vZGUuYmxjayxcImFcIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pbm5lckhUTUw9TS5zcl90ZXh0KGUuaTE4bihlLmNvbmYuc2NyZWVuUmVhZGVyLnRleHQuY2xvc2VNZW51KSl9KSl9KSksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsbil7dmFyIGk9cChlLm5vZGUubWVudS5pZCk7aWYoaSYmdC5tYXRjaGVzKCdbaHJlZj1cIiMnK2krJ1wiXScpKXtpZihuLmluTWVudSlyZXR1cm4gZS5vcGVuKCksITA7dmFyIHM9dC5jbG9zZXN0KFwiLm1tLW1lbnVcIik7aWYocyl7dmFyIGE9cy5tbUFwaTtpZihhJiZhLmNsb3NlKXJldHVybi
24510BhLmNsb3NlKCksbShzLChmdW5jdGlvbigpe2Uub3BlbigpfSksZS5jb25mLnRyYW5zaXRpb25EdXJhdGlvbiksITB9cmV0dXJuIGUub3BlbigpLCEwfWlmKChpPU0ubm9kZS5wYWdlLmlkKSYmdC5tYXRjaGVzKCdbaHJlZj1cIiMnK2krJ1wiXScpKXJldHVybiBlLmNsb3NlKCksITB9KSl9fSxzY3JlZW5SZWFkZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YXJpYTplLHRleHQ6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksZX0odGhpcy5vcHRzLnNjcmVlblJlYWRlcik7dGhpcy5vcHRzLnNjcmVlblJlYWRlcj1vKHQsTS5vcHRpb25zLnNjcmVlblJlYWRlcik7dmFyIG49dGhpcy5jb25mLnNjcmVlblJlYWRlcjt0LmFyaWEmJih0aGlzLmJpbmQoXCJpbml0QWRkb25zOmFmdGVyXCIsKGZ1bmN0aW9uKCl7ZS5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJpbml0TWVudTphZnRlcjpzci1hcmlhXCIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX0pKSxlLmJpbmQoXCJpbml0TmF2YmFyOmFmdGVyXCIsKGZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKFwiaW5pdE5hdmJhcjphZnRlcjpzci1hcmlhXCIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX0pKSxlLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJvcGVuUGFuZWw6c3RhcnQ6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSksZS5iaW5kKFwiY2xvc2U6c3RhcnRcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJjbG9zZTpzdGFydDpzci1hcmlhXCIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX0pKSxlLmJpbmQoXCJjbG9zZTpmaW5pc2hcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJjbG9zZTpmaW5pc2g6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSksZS5iaW5kKFwib3BlbjpzdGFydFwiLChmdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcIm9wZW46c3RhcnQ6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSksZS5iaW5kKFwiaW5pdE9wZW5lZDphZnRlclwiLChmdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcImluaXRPcGVuZWQ6YWZ0ZXI6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSl9KSksdGhpcy5iaW5kKFwidXBkYXRlTGlzdHZpZXdcIiwoZnVuY3Rpb24oKXtlLm5vZGUucG5scy5xdWVyeVNlbGVjdG9yQWxsKFwiLm1tLWxpc3RpdGVtXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe00uc3JfYXJpYShlLFwiaGlkZGVuXCIsZS5tYXRjaGVzKFwiLm1tLWhpZGRlblwiKSl9KSl9KSksdGhpcy5iaW5kKFwib3BlblBhbmVsOnN0YXJ0XCIsKGZ1bmN0aW9uKHQpe3ZhciBuPV8oZS5ub2RlLnBubHMsXCIubW0tcGFuZWxcIikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tcGFuZWxcIil9KSksaT1bdF07Xyh0LFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsIC5tbS1saXN0aXRlbV9vcGVuZWRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoLmFwcGx5KGkseShlLFwiLm1tLXBhbmVsXCIpKX0pKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe00uc3JfYXJpYShlLFwiaGlkZGVuXCIsITApfSkpLGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7TS5zcl9hcmlhKGUsXCJoaWRkZW5cIiwhMSl9KSl9KSksdGhpcy5iaW5kKFwiY2xvc2VQYW5lbFwiLChmdW5jdGlvbihlKXtNLnNyX2FyaWEoZSxcImhpZGRlblwiLCEwKX0pKSx0aGlzLmJpbmQoXCJpbml0UGFuZWw6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7XyhlLFwiLm1tLWJ0blwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtNLnNyX2FyaWEoZSxcImhhc3BvcHVwXCIsITApO3ZhciB0PWUuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTt0JiZNLnNyX2FyaWEoZSxcIm93bnNcIix0LnJlcGxhY2UoXCIjXCIsXCJcIikpfSkpfSkpLHRoaXMuYmluZChcImluaXROYXZiYXI6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9eShlLFwiLm1tLW5hdmJhclwiKVswXSxuPXQubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIik7TS5zcl9hcmlhKHQsXCJoaWRkZW5cIixuKX0pKSx0LnRleHQmJlwicGFyZW50XCI9PXRoaXMub3B0cy5uYXZiYXIudGl0bGVMaW5rJiZ0aGlzLmJpbmQoXCJpbml0TmF2YmFyOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PXkoZSxcIi
245105tbS1uYXZiYXJcIilbMF0sbj0hIXQucXVlcnlTZWxlY3RvcihcIi5tbS1idG5fcHJldlwiKTtNLnNyX2FyaWEoXyh0LFwiLm1tLW5hdmJhcl9fdGl0bGVcIilbMF0sXCJoaWRkZW5cIixuKX0pKSksdC50ZXh0JiYodGhpcy5iaW5kKFwiaW5pdEFkZG9uczphZnRlclwiLChmdW5jdGlvbigpe2UuYmluZChcInNldFBhZ2U6YWZ0ZXJcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJzZXRQYWdlOmFmdGVyOnNyLXRleHRcIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSkpLGUuYmluZChcImluaXRCbG9ja2VyOmFmdGVyXCIsKGZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKFwiaW5pdEJsb2NrZXI6YWZ0ZXI6c3ItdGV4dFwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSl9KSksdGhpcy5iaW5kKFwiaW5pdE5hdmJhcjphZnRlclwiLChmdW5jdGlvbih0KXt2YXIgaT15KHQsXCIubW0tbmF2YmFyXCIpWzBdO2lmKGkpe3ZhciBzPXkoaSxcIi5tbS1idG5fcHJldlwiKVswXTtzJiYocy5pbm5lckhUTUw9TS5zcl90ZXh0KGUuaTE4bihuLnRleHQuY2xvc2VTdWJtZW51KSkpfX0pKSx0aGlzLmJpbmQoXCJpbml0TGlzdHZpZXc6YWZ0ZXJcIiwoZnVuY3Rpb24odCl7dmFyIGk9dC5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpLm1tUGFyZW50O2lmKGkpe3ZhciBzPXkoaSxcIi5tbS1idG5fbmV4dFwiKVswXTtpZihzKXt2YXIgYT1lLmkxOG4obi50ZXh0W3MucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpP1widG9nZ2xlU3VibWVudVwiOlwib3BlblN1Ym1lbnVcIl0pO3MuaW5uZXJIVE1MKz1NLnNyX3RleHQoYSl9fX0pKSl9LHNjcm9sbEJ1Z0ZpeDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoVyYmdGhpcy5vcHRzLm9mZkNhbnZhcyYmdGhpcy5vcHRzLm9mZkNhbnZhcy5ibG9ja1VJKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXtmaXg6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksZX0odGhpcy5vcHRzLnNjcm9sbEJ1Z0ZpeCk7aWYodGhpcy5vcHRzLnNjcm9sbEJ1Z0ZpeD1vKHQsTS5vcHRpb25zLnNjcm9sbEJ1Z0ZpeCksdC5maXgpe3ZhciBuLGkscz0obj10aGlzLm5vZGUubWVudSxpPVwiXCIsbi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsKGZ1bmN0aW9uKGUpe2k9XCJcIixlLm1vdmVtZW50WT4wP2k9XCJkb3duXCI6ZS5tb3ZlbWVudFk8MCYmKGk9XCJ1cFwiKX0pKSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9fSk7dGhpcy5ub2RlLm1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGEse3Bhc3NpdmU6ITF9KSx0aGlzLm5vZGUubWVudS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LmNsb3Nlc3QoXCIubW0tcGFuZWwsIC5tbS1pY29uYmFyX190b3AsIC5tbS1pY29uYmFyX19ib3R0b21cIik7dCYmdC5jbG9zZXN0KFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiYodD1MKHQsXCIubW0tcGFuZWxcIikucG9wKCkpLHQ/KHQuc2Nyb2xsSGVpZ2h0PT09dC5vZmZzZXRIZWlnaHR8fDA9PXQuc2Nyb2xsVG9wJiZcImRvd25cIj09cy5nZXQoKXx8dC5zY3JvbGxIZWlnaHQ9PXQuc2Nyb2xsVG9wK3Qub2Zmc2V0SGVpZ2h0JiZcInVwXCI9PXMuZ2V0KCkpJiZhKGUpOmEoZSl9KSx7cGFzc2l2ZTohMX0pLHRoaXMuYmluZChcIm9wZW46c3RhcnRcIiwoZnVuY3Rpb24oKXt2YXIgdD15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXTt0JiYodC5zY3JvbGxUb3A9MCl9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLChmdW5jdGlvbih0KXt2YXIgbj15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXTtuJiYobi5zY3JvbGxUb3A9MCxuLnN0eWxlW1wiLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmdcIl09XCJhdXRvXCIsbi5zdHlsZVtcIi13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nXCJdPVwidG91Y2hcIil9KSl9fWZ1bmN0aW9uIGEoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9fSxhdXRvSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmZSYmKGU9e2hlaWdodDpcImF1dG9cIn0pLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT17aGVpZ2h0OmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5hdXRvSGVpZ2h0KTtpZih0aGlzLm9wdHMuYXV0b0hlaWdodD1vKHQsTS5vcHRpb25zLmF1dG9IZWlnaHQpLFwiYXV0b1wiPT10LmhlaWdodHx8XCJoaWdoZXN0XCI9PXQuaGVpZ2h0KXt2YXIgbixpPShuPWZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKSYmKGU9TChlLFwiLm1tLXBhbmVsXCIpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpfSkpWzBdKSxlfSxmdW5jdGlvbigpe2lmKCFlLm9wdHMub2ZmQ2FudmFzfHxlLnZhcnMub3BlbmVkKXt2YXIgaSxzLGE9MCxvPWUubm9kZS5tZW51Lm9mZnNldEhlaWdodC1lLm5vZGUucG5scy5vZmZzZXRIZWlnaHQ7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfYXV0b2hlaWdodC1tZWFzdXJpbmdcIiksXCJhdXRvXCI9PXQuaGVpZ2h0Pygocz15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXSkmJihzPW4ocykpLHN8fChzPXkoZS5ub2RlLnBubHMsXCIubW0tcGFuZWxcIilbMF0pLGE9cy5zY3JvbGxIZWlnaHQpOlwiaGlnaGVzdFwiPT10LmhlaWdodCYmKGk9MCx5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2U9bihlKSxpPU1hdGgubWF4KGksZS5zY3JvbGxIZWlnaHQpfSkpLGE9aSksZS5ub2RlLm1lbnUuc3R5bGUuaGVpZ2h0PWErbytcInB4XCIsZS5ub2RlLm1lbnUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLW1lbnVfYXV0b2hlaWdodC1tZWFzdXJpbmdcIil9fSk7
24510dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9hdXRvaGVpZ2h0XCIpfSkpLHRoaXMub3B0cy5vZmZDYW52YXMmJnRoaXMuYmluZChcIm9wZW46c3RhcnRcIixpKSxcImhpZ2hlc3RcIj09dC5oZWlnaHQmJnRoaXMuYmluZChcImluaXRQYW5lbHM6YWZ0ZXJcIixpKSxcImF1dG9cIj09dC5oZWlnaHQmJih0aGlzLmJpbmQoXCJ1cGRhdGVMaXN0dmlld1wiLGkpLHRoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLGkpKX19LGJhY2tCdXR0b246ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMub3B0cy5vZmZDYW52YXMpe3ZhciB0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e2Nsb3NlOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5iYWNrQnV0dG9uKTt0aGlzLm9wdHMuYmFja0J1dHRvbj1vKHQsTS5vcHRpb25zLmJhY2tCdXR0b24pO3ZhciBuPVwiI1wiK3RoaXMubm9kZS5tZW51LmlkO2lmKHQuY2xvc2Upe3ZhciBpPVtdLHM9ZnVuY3Rpb24oKXtpPVtuXSx5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZCwgLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoKFwiI1wiK2UuaWQpfSkpfTt0aGlzLmJpbmQoXCJvcGVuOmZpbmlzaFwiLChmdW5jdGlvbigpe2hpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsbil9KSksdGhpcy5iaW5kKFwib3BlbjpmaW5pc2hcIixzKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6ZmluaXNoXCIscyksdGhpcy5iaW5kKFwiY2xvc2U6ZmluaXNoXCIsKGZ1bmN0aW9uKCl7aT1bXSxoaXN0b3J5LmJhY2soKSxoaXN0b3J5LnB1c2hTdGF0ZShudWxsLGRvY3VtZW50LnRpdGxlLGxvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLnNlYXJjaCl9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLChmdW5jdGlvbih0KXtpZihlLnZhcnMub3BlbmVkJiZpLmxlbmd0aCl7dmFyIHM9KGk9aS5zbGljZSgwLC0xKSlbaS5sZW5ndGgtMV07cz09bj9lLmNsb3NlKCk6KGUub3BlblBhbmVsKGUubm9kZS5tZW51LnF1ZXJ5U2VsZWN0b3IocykpLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsbikpfX0pKX10Lm9wZW4mJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwoZnVuY3Rpb24odCl7ZS52YXJzLm9wZW5lZHx8bG9jYXRpb24uaGFzaCE9bnx8ZS5vcGVuKCl9KSl9fSxjb2x1bW5zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e2FkZDplfSksXCJudW1iZXJcIj09dHlwZW9mIGUmJihlPXthZGQ6ITAsdmlzaWJsZTplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcIm51bWJlclwiPT10eXBlb2YgZS52aXNpYmxlJiYoZS52aXNpYmxlPXttaW46ZS52aXNpYmxlLG1heDplLnZpc2libGV9KSxlfSh0aGlzLm9wdHMuY29sdW1ucyk7aWYodGhpcy5vcHRzLmNvbHVtbnM9byh0LE0ub3B0aW9ucy5jb2x1bW5zKSx0LmFkZCl7dC52aXNpYmxlLm1pbj1NYXRoLm1heCgxLE1hdGgubWluKDYsdC52aXNpYmxlLm1pbikpLHQudmlzaWJsZS5tYXg9TWF0aC5tYXgodC52aXNpYmxlLm1pbixNYXRoLm1pbig2LHQudmlzaWJsZS5tYXgpKTtmb3IodmFyIG49W10saT1bXSxzPVtcIm1tLXBhbmVsX29wZW5lZFwiLFwibW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiLFwibW0tcGFuZWxfaGlnaGVzdFwiXSxhPTA7YTw9dC52aXNpYmxlLm1heDthKyspbi5wdXNoKFwibW0tbWVudV9jb2x1bW5zLVwiK2EpLGkucHVzaChcIm1tLXBhbmVsX2NvbHVtbnMtXCIrYSk7cy5wdXNoLmFwcGx5KHMsaSksdGhpcy5iaW5kKFwib3BlblBhbmVsOmJlZm9yZVwiLChmdW5jdGlvbih0KXt2YXIgbjtpZih0JiYobj10Lm1tUGFyZW50KSxuJiYhbi5jbGFzc0xpc3QuY29udGFpbnMoXCJtbS1saXN0aXRlbV92ZXJ0aWNhbFwiKSYmKG49bi5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKSl7dmFyIGk9bi5jbGFzc05hbWU7aWYoaS5sZW5ndGgmJihpPWkuc3BsaXQoXCJtbS1wYW5lbF9jb2x1bW5zLVwiKVsxXSkpZm9yKHZhciBhPXBhcnNlSW50KGkuc3BsaXQoXCIgXCIpWzBdLDEwKSsxO2E+MDspe2lmKCEodD15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX2NvbHVtbnMtXCIrYSlbMF0pKXthPS0xO2JyZWFrfWErKyx0LmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIikscy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9KSl9fX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24ocyl7aWYocyl7dmFyIGE9cy5tbVBhcmVudDtpZihhJiZhLmNsYXNzTGlzdC5jb250YWlucyhcIm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpKXJldHVybn12YXIgbz15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikubGVuZ3RoO3MubWF0Y2hlcyhcIi5tbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpfHxvKyssbz1NYXRoLm1pbih0LnZpc2libGUubWF4LE1hdGgubWF4KHQudmlzaWJsZS5taW4sbykpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKSxlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9jb2x1bW5zLVwiK28pO3ZhciByPVtdO3koZS5ub2RlLnBubHMsXCIubW0tcGFuZWxcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5yZW1vdmUodCl9KSksZS5tYXRjaGVzKFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikmJnIucHVzaChlKX0pKSxyLnB1c2gocyksci5zbGljZSgtdC52aXNpYmxlLm1heCkuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtlLmNsYXNzTGlzdC5hZGQoXCJtbS1wYW5lbF9jb2x1bW5zLVwiK3QpfSkpfSkpfX0sY291bnRlcnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YWRkOmUsYWRkVG86XCJwYW5lbHNcIixjb3VudDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcInBhbmVsc1wiPT1lLmFkZFRvJiYoZS5hZGRUbz1cIi5tbS1saXN0dmlld1wiKSxlfSh0aGlzLm9wdHMuY291bnRlcnMpO2lmKHRoaXMub3B0cy5jb3VudGVycz1vKHQsTS5vcHRpb25zLmNvdW50ZXJzKSx0aGlzLmJpbmQoXCJpbml0TGlzdHZpZXc6YWZ0ZXJcIiwoZnVuY3Rpb24odCl7dmFyIG49ZS5jb25mLmNsYXNzTmFtZXMuY291bnRlcnMuY291bnRlcjtfKHQsXCIuXCIrbikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7eChlLG4sXCJtbS1jb3VudGVyXCIpfSkpfSkpLHQuYWRkJiZ0aGlzLmJpbmQoXCJpbml0TGlzdHZpZXc6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaGVzKHQuYWRkVG8pKXt2YXIgbj1lLmNsb3Nlc3QoXCIubW0tcGFuZWxcIikubW1QYXJlbnQ7aWYobiYmIV8obixcIi5tbS1jb3VudGVyXCIpLmxlbmd0aCl7dmFyIGk9eShuLFwiLm1tLWJ0blwiKVswXTtpJiZpLnByZXBlbmQoZyhcInNwYW4ubW0tY291bnRlclwiKSl9fX0pKSx0LmNvdW50KXt2YXIgbj1mdW5jdGlvbih0KXsodD9bdC5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpXTp5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLm1tUGFyZW50O2lmKHQpe3ZhciBuPV8odCxcIi5tbS1jb3VudGVyXCIpWzBdO2lmKG4pe3ZhciBpPVtdO3koZSxcIi5tbS1saXN0dmlld1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2guYXBwbHkoaSx5KGUpKX0pKSxuLmlubmVySFRNTD13KGkpLmxlbmd0aC50b1N0cmluZygpfX19KSl9O3RoaXMuYmluZChcImluaXRMaXN0dmlldzphZnRlclwiLG4pL
24510HRoaXMuYmluZChcInVwZGF0ZUxpc3R2aWV3XCIsbil9fSxkaXZpZGVyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXthZGQ6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksXCJwYW5lbHNcIj09ZS5hZGRUbyYmKGUuYWRkVG89XCIubW0tbGlzdHZpZXdcIiksZX0odGhpcy5vcHRzLmRpdmlkZXJzKTt0aGlzLm9wdHMuZGl2aWRlcnM9byh0LE0ub3B0aW9ucy5kaXZpZGVycyksdGhpcy5iaW5kKFwiaW5pdExpc3R2aWV3OmFmdGVyXCIsKGZ1bmN0aW9uKHQpe3kodCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eCh0LGUuY29uZi5jbGFzc05hbWVzLmRpdmlkZXIsXCJtbS1kaXZpZGVyXCIpLHQubWF0Y2hlcyhcIi5tbS1kaXZpZGVyXCIpJiZ0LmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbVwiKX0pKX0pKSx0LmFkZCYmdGhpcy5iaW5kKFwiaW5pdExpc3R2aWV3OmFmdGVyXCIsKGZ1bmN0aW9uKGUpe2lmKGUubWF0Y2hlcyh0LmFkZFRvKSl7XyhlLFwiLm1tLWRpdmlkZXJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZW1vdmUoKX0pKTt2YXIgbj1cIlwiO3coeShlKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9eSh0LFwiLm1tLWxpc3RpdGVtX190ZXh0XCIpWzBdLnRleHRDb250ZW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpWzBdO2lmKGkubGVuZ3RoJiZpIT1uKXtuPWk7dmFyIHM9ZyhcImxpLm1tLWRpdmlkZXJcIik7cy50ZXh0Q29udGVudD1pLGUuaW5zZXJ0QmVmb3JlKHMsdCl9fSkpfX0pKX0sZHJhZzpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17b3BlbjplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMuZHJhZyk7dGhpcy5vcHRzLmRyYWc9byh0LE0ub3B0aW9ucy5kcmFnKSx0Lm9wZW4mJnRoaXMuYmluZChcInNldFBhZ2U6YWZ0ZXJcIiwoZnVuY3Rpb24obil7Y2UuY2FsbChlLHQubm9kZXx8bil9KSl9fSxkcm9wZG93bjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiZlJiYoZT17ZHJvcDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcInN0cmluZ1wiPT10eXBlb2YgZS5wb3NpdGlvbiYmKGUucG9zaXRpb249e29mOmUucG9zaXRpb259KSxlfSh0aGlzLm9wdHMuZHJvcGRvd24pO3RoaXMub3B0cy5kcm9wZG93bj1vKHQsTS5vcHRpb25zLmRyb3Bkb3duKTt2YXIgbj10aGlzLmNvbmYuZHJvcGRvd247aWYodC5kcm9wKXt2YXIgaTt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe2lmKGUubm9kZS5tZW51LmNsYXNzTGlzdC5hZGQoXCJtbS1tZW51X2Ryb3Bkb3duXCIpLFwic3RyaW5nXCIhPXR5cGVvZiB0LnBvc2l0aW9uLm9mKXt2YXIgbj1wKGUubm9kZS5tZW51LmlkKTtuJiYodC5wb3NpdGlvbi5vZj0nW2hyZWY9XCIjJytuKydcIl0nKX1pZihcInN0cmluZ1wiPT10eXBlb2YgdC5wb3NpdGlvbi5vZil7aT1fKGRvY3VtZW50LmJvZHksdC5wb3NpdGlvbi5vZilbMF07dmFyIHM9dC5ldmVudC5zcGxpdChcIiBcIik7MT09cy5sZW5ndGgmJihzWzFdPXNbMF0pLFwiaG92ZXJcIj09c1swXSYmaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLChmdW5jdGlvbigpe2Uub3BlbigpfSkse3Bhc3NpdmU6ITB9KSxcImhvdmVyXCI9PXNbMV0mJmUubm9kZS5tZW51LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsKGZ1bmN0aW9uKCl7ZS5jbG9zZSgpfSkse3Bhc3NpdmU6ITB9KX19KSksdGhpcy5iaW5kKFwib3BlbjpzdGFydFwiLChmdW5jdGlvbigpe2Uubm9kZS5tZW51Lm1tU3R5bGU9ZS5ub2RlLm1lbnUuZ2V0QXR0cmlidXRlKFwic3R5bGVcIiksZS5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJfZHJvcGRvd25cIil9KSksdGhpcy5iaW5kKFwiY2xvc2U6ZmluaXNoXCIsKGZ1bmN0aW9uKCl7ZS5ub2RlLm1lbnUuc2V0QXR0cmlidXRlKFwic3R5bGVcIixlLm5vZGUubWVudS5tbVN0eWxlKSxlLm5vZGUud3Jwci5jbGFzc0xpc3QucmVtb3ZlKFwibW0td3JhcHBlcl9kcm9wZG93blwiKX0pKTt2YXIgcz1mdW5jdGlvbihlLHMpe3ZhciBhLG8scixjPXNbMF0sbT1zWzFdLGw9XCJ4XCI9PWU/XCJvZmZzZXRXaWR0aFwiOlwib2Zmc2V0SGVpZ2h0XCIsZD1cInhcIj09ZT9cImxlZnRcIjpcInRvcFwiLHA9XCJ4XCI9PWU/XCJyaWdodFwiOlwiYm90dG9tXCIsdT1cInhcIj09ZT9cIndpZHRoXCI6XCJoZWlnaHRcIixmPVwieFwiPT1lP1wiaW5uZXJXaWR0aFwiOlwiaW5uZXJIZWlnaHRcIixoPVwieFwiPT1lP1wibWF4V2lkdGhcIjpcIm1heEhlaWdodFwiLHY9bnVsbCxiPShhPWQsaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVthXStkb2N1bWVudC5ib2R5W1wibGVmdFwiPT09YT9cInNjcm9sbExlZnRcIjpcInNjcm9sbFRvcFwiXSksZz1iK2lbbF0sXz13aW5kb3dbZl0seT1uLm9mZnNldC5idXR0b25bZV0rbi5vZmZzZXQudmlld3BvcnRbZV07aWYodC5wb3NpdGlvbltlXSlzd2l0Y2godC5wb3NpdGlvbltlXSl7Y2FzZVwibGVmdFwiOmNhc2VcImJvdHRvbVwiOnY9XCJhZnRlclwiO2JyZWFrO2Nhc2VcInJpZ2h0XCI6Y2FzZVwidG9wXCI6dj1cImJlZm9yZVwifXJldHVybiBudWxsPT09diYmKHY9YisoZy1iKS8yPF8vMj9cImFmdGVyXCI6XCJiZWZvcmVcIiksXCJhZnRlclwiPT12PyhyPV8tKChvPVwieFwiPT1lP2I6ZykreSksY1tkXT1vK24ub2Zmc2V0LmJ1dHRvbltlXStcInB4XCIsY1twXT1cImF1dG9cIix0LnRpcCYmbS5wdXNoKFwibW0tbWVudV90aXAtXCIrKFwieFwiPT1lP1wibGVmdFwiOlwidG9wXCIpKSk6KHI9KG89XCJ4XCI9PWU/ZzpiKS15LGNbcF09XCJjYWxjKCAxMDAlIC0gXCIrKG8tbi5vZmZzZXQuYnV0dG9uW2VdKStcInB4IClcIixjW2RdPVwiYXV0b1wiLHQudGlwJiZtLnB1c2goXCJtbS1tZW51X3RpcC1cIisoXCJ4XCI9PWU/XCJyaWdodFwiOlwiYm90dG9tXCIpKSksdC5maXRWaWV3cG9ydCYmKGNbaF09TWF0aC5taW4oblt1XS5tYXgscikrXCJweFwiKSxbYyxtXX07dGhpcy5iaW5kKFwib3BlbjpzdGFydFwiLGEpLHdpbmRvdy5hZGR
24510FdmVudExpc3RlbmVyKFwicmVzaXplXCIsKGZ1bmN0aW9uKHQpe2EuY2FsbChlKX0pLHtwYXNzaXZlOiEwfSksdGhpcy5vcHRzLm9mZkNhbnZhcy5ibG9ja1VJfHx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLChmdW5jdGlvbih0KXthLmNhbGwoZSl9KSx7cGFzc2l2ZTohMH0pfX1mdW5jdGlvbiBhKCl7dmFyIGU9dGhpcztpZih0aGlzLnZhcnMub3BlbmVkKXt0aGlzLm5vZGUubWVudS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLHRoaXMubm9kZS5tZW51Lm1tU3R5bGUpO3ZhciBuPVt7fSxbXV07Zm9yKHZhciBpIGluIG49cy5jYWxsKHRoaXMsXCJ5XCIsbiksKG49cy5jYWxsKHRoaXMsXCJ4XCIsbikpWzBdKXRoaXMubm9kZS5tZW51LnN0eWxlW2ldPW5bMF1baV07aWYodC50aXApe1tcIm1tLW1lbnVfdGlwLWxlZnRcIixcIm1tLW1lbnVfdGlwLXJpZ2h0XCIsXCJtbS1tZW51X3RpcC10b3BcIixcIm1tLW1lbnVfdGlwLWJvdHRvbVwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLm5vZGUubWVudS5jbGFzc0xpc3QucmVtb3ZlKHQpfSkpLG5bMV0uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZCh0KX0pKX19fX0sZml4ZWRFbGVtZW50czpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQsbixpPXRoaXMuY29uZi5maXhlZEVsZW1lbnRzO3RoaXMuYmluZChcInNldFBhZ2U6YWZ0ZXJcIiwoZnVuY3Rpb24ocyl7dD1lLmNvbmYuY2xhc3NOYW1lcy5maXhlZEVsZW1lbnRzLmZpeGVkLG49Xyhkb2N1bWVudCxpLmluc2VydFNlbGVjdG9yKVswXSxfKHMsXCIuXCIrdCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7eChlLHQsXCJtbS1zbGlkZW91dFwiKSxuW2kuaW5zZXJ0TWV0aG9kXShlKX0pKX0pKX19LGljb25iYXI6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj1mdW5jdGlvbihlKXtyZXR1cm5cImFycmF5XCI9PXIoZSkmJihlPXt1c2U6ITAsdG9wOmV9KSxcIm9iamVjdFwiIT1yKGUpJiYoZT17fSksdm9pZCAwPT09ZS51c2UmJihlLnVzZT0hMCksXCJib29sZWFuXCI9PXR5cGVvZiBlLnVzZSYmZS51c2UmJihlLnVzZT0hMCksZX0odGhpcy5vcHRzLmljb25iYXIpO2lmKCh0aGlzLm9wdHMuaWNvbmJhcj1vKG4sTS5vcHRpb25zLmljb25iYXIpLG4udXNlKSYmKFtcInRvcFwiLFwiYm90dG9tXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7dmFyIHM9blt0XTtcImFycmF5XCIhPXIocykmJihzPVtzXSk7Zm9yKHZhciBhPWcoXCJkaXYubW0taWNvbmJhcl9fXCIrdCksbz0wLGM9cy5sZW5ndGg7bzxjO28rKylcInN0cmluZ1wiPT10eXBlb2Ygc1tvXT9hLmlubmVySFRNTCs9c1tvXTphLmFwcGVuZChzW29dKTthLmNoaWxkcmVuLmxlbmd0aCYmKGV8fChlPWcoXCJkaXYubW0taWNvbmJhclwiKSksZS5hcHBlbmQoYSkpfSkpLGUpKXt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe3Qubm9kZS5tZW51LnByZXBlbmQoZSl9KSk7dmFyIGk9XCJtbS1tZW51X2ljb25iYXItXCIrbi5wb3NpdGlvbixzPWZ1bmN0aW9uKCl7dC5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChpKSxNLnNyX2FyaWEoZSxcImhpZGRlblwiLCExKX07aWYoXCJib29sZWFuXCI9PXR5cGVvZiBuLnVzZT90aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLHMpOmsobi51c2UscywoZnVuY3Rpb24oKXt0Lm5vZGUubWVudS5jbGFzc0xpc3QucmVtb3ZlKGkpLE0uc3JfYXJpYShlLFwiaGlkZGVuXCIsITApfSkpLFwidGFic1wiPT1uLnR5cGUpe2UuY2xhc3NMaXN0LmFkZChcIm1tLWljb25iYXJfdGFic1wiKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChmdW5jdGlvbihlKXt2YXIgbj1lLnRhcmdldDtpZihuLm1hdGNoZXMoXCJhXCIpKWlmKG4ubWF0Y2hlcyhcIi5tbS1pY29uYmFyX190YWJfc2VsZWN0ZWRcIikpZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtlbHNlIHRyeXt2YXIgaT10Lm5vZGUubWVudS5xdWVyeVNlbGVjdG9yKG4uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSlbMF07aSYmaS5tYXRjaGVzKFwiLm1tLXBhbmVsXCIpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdC5vcGVuUGFuZWwoaSwhMSkpfWNhdGNoKGUpe319KSk7dmFyIGE9ZnVuY3Rpb24odCl7XyhlLFwiYVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1pY29uYmFyX190YWJfc2VsZWN0ZWRcIil9KSk7dmFyIG49XyhlLCdbaHJlZj1cIiMnK3QuaWQrJ1wiXScpWzBdO2lmKG4pbi5jbGFzc0xpc3QuYWRkKFwibW0taWNvbmJhcl9fdGFiX3NlbGVjdGVkXCIpO2Vsc2V7dmFyIGk9dC5tbVBhcmVudDtpJiZhKGkuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSl9fTt0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIixhKX19fSxpY29uUGFuZWxzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e2FkZDplfSksXCJudW1iZXJcIiE9dHlwZW9mIGUmJlwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT17YWRkOiEwLHZpc2libGU6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksZX0odGhpcy5vcHRzLmljb25QYW5lbHMpO3RoaXMub3B0cy5pY29uUGFuZWxzPW8odCxNLm9wdGlvbnMuaWNvblBhbmVscyk7dmFyIG49ITE7aWYoXCJmaXJzdFwiPT10LnZpc2libGUmJihuPSEwLHQudmlzaWJsZT0xKSx0LnZpc2libGU9TWF0aC5taW4oMyxNYXRoLm1heCgxLHQudmlzaWJsZSkpLHQudmlzaWJsZSsrLHQuYWRkKXt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe3ZhciBuPVtcIm1tLW1lbnVfaWNvbnBhbmVsXCJdO3QuaGlkZU5hdmJhciYmbi5wdXNoKFwibW0tbWVudV9oaWRlbmF2YmFyXCIpLHQuaGlkZURpdmlkZXImJm4ucHVzaChcIm1tLW1lbnVfaGlkZWRpdmlkZXJcIiksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKHQpfSkpfSkpO3ZhciBpPVtdO2lmKCFuKWZvcih2YXIgcz0wO3M8PXQudmlzaWJsZTtzKyspaS5wdXNoKFwibW0tcGFuZWxfaWNvbnBhbmVsLVwiK3MpO3RoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLChmdW5jdGlvbihzKXt2YXIgYT15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpO2lmKCEocz1zfHxhWzBdKS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikpaWYobilhLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ZS5jbGFzc0xpc3RbMD09dD9cImFkZFwiOlwicmVtb3ZlXCJdKFwibW0tcGFuZWxfaWNvbnBhbmVsLWZpcnN0XCIpfSkpO2Vsc2V7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKX0pKSxhPWEuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIil9KSk7dmFyIG89ITE7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtzPT09ZSYmKG89ITApfSkpLG98fGEucHVzaChzKSxhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKSwoYT1hLnNsaWNlKC10LnZpc2libGUpKS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2UuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsX2ljb25wYW5lbC1cIit0KX0pKX19KSksdGhpcy5iaW5kKFwiaW5
24510pdFBhbmVsOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe2lmKHQuYmxvY2tQYW5lbCYmIWUucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiYheShlLFwiLm1tLXBhbmVsX19ibG9ja2VyXCIpWzBdKXt2YXIgbj1nKFwiYS5tbS1wYW5lbF9fYmxvY2tlclwiKTtuLnNldEF0dHJpYnV0ZShcImhyZWZcIixcIiNcIitlLmNsb3Nlc3QoXCIubW0tcGFuZWxcIikuaWQpLGUucHJlcGVuZChuKX19KSl9fSxrZXlib2FyZE5hdmlnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFXKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIGUmJlwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT17ZW5hYmxlOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5rZXlib2FyZE5hdmlnYXRpb24pO2lmKHRoaXMub3B0cy5rZXlib2FyZE5hdmlnYXRpb249byh0LE0ub3B0aW9ucy5rZXlib2FyZE5hdmlnYXRpb24pLHQuZW5hYmxlKXt2YXIgbj1nKFwiYnV0dG9uLm1tLXRhYnN0YXJ0Lm1tLXNyb25seVwiKSxpPWcoXCJidXR0b24ubW0tdGFiZW5kLm1tLXNyb25seVwiKSxzPWcoXCJidXR0b24ubW0tdGFiZW5kLm1tLXNyb25seVwiKTt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe3QuZW5oYW5jZSYmZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfa2V5Ym9hcmRmb2N1c1wiKSx2ZS5jYWxsKGUsdC5lbmhhbmNlKX0pKSx0aGlzLmJpbmQoXCJpbml0T3BlbmVkOmJlZm9yZVwiLChmdW5jdGlvbigpe2Uubm9kZS5tZW51LnByZXBlbmQobiksZS5ub2RlLm1lbnUuYXBwZW5kKGkpLHkoZS5ub2RlLm1lbnUsXCIubW0tbmF2YmFycy10b3AsIC5tbS1uYXZiYXJzLWJvdHRvbVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubW0tbmF2YmFyX190aXRsZVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKX0pKX0pKX0pKSx0aGlzLmJpbmQoXCJpbml0QmxvY2tlcjphZnRlclwiLChmdW5jdGlvbigpe00ubm9kZS5ibGNrLmFwcGVuZChzKSx5KE0ubm9kZS5ibGNrLFwiYVwiKVswXS5jbGFzc0xpc3QuYWRkKFwibW0tdGFic3RhcnRcIil9KSk7dmFyIGE9XCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBsYWJlbCwgYVtocmVmXVwiLHI9ZnVuY3Rpb24obil7bj1ufHx5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXTt2YXIgaT1udWxsLHM9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbG9zZXN0KFwiLm1tLW5hdmJhclwiKTtpZighc3x8cy5jbG9zZXN0KFwiLm1tLW1lbnVcIikhPWUubm9kZS5tZW51KXtpZihcImRlZmF1bHRcIj09dC5lbmFibGUmJigoaT1fKG4sXCIubW0tbGlzdHZpZXcgYVtocmVmXTpub3QoLm1tLWhpZGRlbilcIilbMF0pfHwoaT1fKG4sYStcIjpub3QoLm1tLWhpZGRlbilcIilbMF0pLCFpKSl7dmFyIG89W107eShlLm5vZGUubWVudSxcIi5tbS1uYXZiYXJzX3RvcCwgLm1tLW5hdmJhcnNfYm90dG9tXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe28ucHVzaC5hcHBseShvLF8oZSxhK1wiOm5vdCgubW0taGlkZGVuKVwiKSl9KSksaT1vWzBdfWl8fChpPXkoZS5ub2RlLm1lbnUsXCIubW0tdGFic3RhcnRcIilbMF0pLGkmJmkuZm9jdXMoKX19O3RoaXMuYmluZChcIm9wZW46ZmluaXNoXCIsciksdGhpcy5iaW5kKFwib3BlblBhbmVsOmZpbmlzaFwiLHIpLHRoaXMuYmluZChcImluaXRPcGVuZWQ6YWZ0ZXI6c3ItYXJpYVwiLChmdW5jdGlvbigpe1tlLm5vZGUubWVudSxNLm5vZGUuYmxja10uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eShlLFwiLm1tLXRhYnN0YXJ0LCAubW0tdGFiZW5kXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe00uc3JfYXJpYShlLFwiaGlkZGVuXCIsITApLE0uc3Jfcm9sZShlLFwicHJlc2VudGF0aW9uXCIpfSkpfSkpfSkpfX19LGxhenlTdWJtZW51czpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXtsb2FkOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5sYXp5U3VibWVudXMpO3RoaXMub3B0cy5sYXp5U3VibWVudXM9byh0LE0ub3B0aW9ucy5sYXp5U3VibWVudXMpLHQubG9hZCYmKHRoaXMuYmluZChcImluaXRQYW5lbHM6YmVmb3JlXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9W107XyhlLm5vZGUucG5scyxcImxpXCIpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3QucHVzaC5hcHBseSh0LHkobixlLmNvbmYucGFuZWxOb2RldHlwZS5qb2luKFwiLCBcIikpKX0pKSx0LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUubWF0Y2hlcyhcIi5tbS1saXN0dmlld19pbnNldFwiKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0tbm9saXN0dmlld1wiKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0tbm9wYW5lbFwiKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtbXCJtbS1wYW5lbF9sYXp5c3VibWVudVwiLFwibW0tbm9saXN0dmlld1wiLFwibW0tbm9wYW5lbFwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5hZGQodCl9KSl9KSl9KSksdGhpcy5iaW5kKFwiaW5pdFBhbmVsczpiZWZvcmVcIiwoZnVuY3Rpb24oKXt2YXIgdD1bXTtfKGUubm9kZS5wbmxzLFwiLlwiK2UuY29uZi5jbGFzc05hbWVzLnNlbGVjdGVkKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2guYXBwbHkodCxMKGUsXCIubW0tcGFuZWxfbGF6eXN1Ym1lbnVcIikpfSkpLHQubGVuZ3RoJiZ0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2NvbnNvbGUubG9nKGUpO1tcIm1tLXBhbmVsX2xhenlzdWJtZW51XCIsXCJtbS1ub2xpc3R2aWV3XCIsXCJtbS1ub3BhbmVsXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKX0pKX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6YmVmb3JlXCIsKGZ1bmN0aW9uKHQpe3ZhciBuPV8odCxcIi5tbS1wYW5lbF9sYXp5c3VibWVudVwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0tcGFuZWxfbGF6eXN1Ym1lbnUgLm1tLXBhbmVsX2xhenlzdWJtZW51XCIpfSkpO3QubWF0Y2hlcyhcIi5tbS1wYW5lbF9sYXp5c3VibWVudVwiKSYmbi51bnNoaWZ0KHQpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7W1wibW0tcGFuZWxfbGF6eXN1Ym1lbnVcIixcIm1tLW5vbGlzdHZpZXdcIixcIm1tLW5vcGFuZWxcIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSkpLGUuaW5pdFBhbmVsKHQpfSkpfSkpKX0sbmF2YmFyczp5ZSxwYWdlU2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e3Njcm9sbDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMucGFnZVNjcm9sbCk7dGhpcy5vcHRzLnBhZ2VTY3JvbGw9byh0LE0ub3B0aW9ucy5wYWdlU2Nyb2xsKTt2YXIgbixpPXRoaXMuY29uZi5wYWdlU2Nyb2xsO2Z1bmN0aW9uIHMoKXtuJiZ3aW5kb3cuc2Nyb2xsVG8oe3RvcDpuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcC1pLnNjcm9sbE9mZnNldCxiZWhhdmlvcjpcInNtb290aFwifSksbj1udWxsfWZ1bmN0aW9uIGEoZSl7dHJ5e3JldHVyblwiI1wiIT1lJiZcIiNcIj09ZS5zbGljZSgwLDEpP00ubm9kZS5wYWdlLnF1ZXJ5U2VsZWN0b3IoZSk6bnVsbH1jYXRjaChlKXtyZXR1cm4gbnVsbH19aWYodC5zY3JvbGwmJnRoaXMuYmluZChcImNsb3NlOmZpbmlzaFwiLChmdW5jdGlvbigpe3MoKX0pKSx0aGlzLm9wdHMub2ZmQ2FudmFzJiZ0LnNjcm9sbCYmdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsaSl7aWYobj1udWxsLGkuaW5NZW51KXt2YXIgbz10LmdldEF0dHJpYnV0ZShcImhyZWZcIik7aWYobj1hKG8pKXJldHVybi
24510BlLm5vZGUubWVudS5tYXRjaGVzKFwiLm1tLW1lbnVfc2lkZWJhci1leHBhbmRlZFwiKSYmZS5ub2RlLndycHIubWF0Y2hlcyhcIi5tbS13cmFwcGVyX3NpZGViYXItZXhwYW5kZWRcIik/dm9pZCBzKCk6e2Nsb3NlOiEwfX19KSksdC51cGRhdGUpe3ZhciByPVtdO3RoaXMuYmluZChcImluaXRMaXN0dmlldzphZnRlclwiLChmdW5jdGlvbihlKXtFKHkoZSxcIi5tbS1saXN0aXRlbVwiKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9YShlLmdldEF0dHJpYnV0ZShcImhyZWZcIikpO3QmJnIudW5zaGlmdCh0KX0pKX0pKTt2YXIgYz0tMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLChmdW5jdGlvbih0KXtmb3IodmFyIG49d2luZG93LnNjcm9sbFkscz0wO3M8ci5sZW5ndGg7cysrKWlmKHJbc10ub2Zmc2V0VG9wPG4raS51cGRhdGVPZmZzZXQpe2lmKGMhPT1zKXtjPXM7dmFyIGE9RShfKHkoZS5ub2RlLnBubHMsXCIubW0tcGFuZWxfb3BlbmVkXCIpWzBdLFwiLm1tLWxpc3RpdGVtXCIpKTsoYT1hLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcygnW2hyZWY9XCIjJytyW3NdLmlkKydcIl0nKX0pKSkubGVuZ3RoJiZlLnNldFNlbGVjdGVkKGFbMF0ucGFyZW50RWxlbWVudCl9YnJlYWt9fSkpfX0sc2VhcmNoZmllbGQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YWRkOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLFwiYm9vbGVhblwiPT10eXBlb2YgZS5wYW5lbCYmKGUucGFuZWw9e2FkZDplLnBhbmVsfSksXCJvYmplY3RcIiE9dHlwZW9mIGUucGFuZWwmJihlLnBhbmVsPXt9KSxcInBhbmVsXCI9PWUuYWRkVG8mJihlLnBhbmVsLmFkZD0hMCksZS5wYW5lbC5hZGQmJihlLnNob3dTdWJQYW5lbHM9ITEsZS5wYW5lbC5zcGxhc2gmJihlLmNhbmNlbD0hMCkpLGV9KHRoaXMub3B0cy5zZWFyY2hmaWVsZCk7dGhpcy5vcHRzLnNlYXJjaGZpZWxkPW8odCxNLm9wdGlvbnMuc2VhcmNoZmllbGQpO3RoaXMuY29uZi5zZWFyY2hmaWVsZDt0LmFkZCYmKHRoaXMuYmluZChcImNsb3NlOnN0YXJ0XCIsKGZ1bmN0aW9uKCl7XyhlLm5vZGUubWVudSxcIi5tbS1zZWFyY2hmaWVsZFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmJsdXIoKX0pKX0pKSx0aGlzLmJpbmQoXCJpbml0UGFuZWw6YWZ0ZXJcIiwoZnVuY3Rpb24obil7dmFyIGk9bnVsbDt0LnBhbmVsLmFkZCYmKGk9QWUuY2FsbChlKSk7dmFyIHM9bnVsbDtzd2l0Y2godC5hZGRUbyl7Y2FzZVwicGFuZWxzXCI6cz1bbl07YnJlYWs7Y2FzZVwicGFuZWxcIjpzPVtpXTticmVhaztkZWZhdWx0Olwic3RyaW5nXCI9PXR5cGVvZiB0LmFkZFRvP3M9XyhlLm5vZGUubWVudSx0LmFkZFRvKTpcImFycmF5XCI9PXIodC5hZGRUbykmJihzPXQuYWRkVG8pfXMuZm9yRWFjaCgoZnVuY3Rpb24obil7bj1UZS5jYWxsKGUsbiksdC5zZWFyY2gmJm4mJkNlLmNhbGwoZSxuKX0pKSx0Lm5vUmVzdWx0cyYmTmUuY2FsbChlLHQucGFuZWwuYWRkP2k6bil9KSksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsbil7aWYobi5pbk1lbnUmJnQubWF0Y2hlcyhcIi5tbS1zZWFyY2hmaWVsZF9fYnRuXCIpKXtpZih0Lm1hdGNoZXMoXCIubW0tYnRuX2Nsb3NlXCIpKXt2YXIgaT1fKHM9dC5jbG9zZXN0KFwiLm1tLXNlYXJjaGZpZWxkXCIpLFwiaW5wdXRcIilbMF07cmV0dXJuIGkudmFsdWU9XCJcIixlLnNlYXJjaChpKSwhMH12YXIgcztpZih0Lm1hdGNoZXMoXCIubW0tYnRuX25leHRcIikpcmV0dXJuKHM9dC5jbG9zZXN0KFwiZm9ybVwiKSkmJnMuc3VibWl0KCksITB9fSkpKX0sc2VjdGlvbkluZGV4ZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YWRkOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5zZWN0aW9uSW5kZXhlcik7dGhpcy5vcHRzLnNlY3Rpb25JbmRleGVyPW8odCxNLm9wdGlvbnMuc2VjdGlvbkluZGV4ZXIpLHQuYWRkJiZ0aGlzLmJpbmQoXCJpbml0UGFuZWxzOmFmdGVyXCIsKGZ1bmN0aW9uKCl7aWYoIWUubm9kZS5pbmR4KXt2YXIgdD1cIlwiO1wiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIi5zcGxpdChcIlwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz0nPGEgaHJlZj1cIiNcIj4nK2UrXCI8L2E+XCJ9KSk7dmFyIG49ZyhcImRpdi5tbS1zZWN0aW9uaW5kZXhlclwiKTtuLmlubmVySFRNTD10LGUubm9kZS5wbmxzLnByZXBlbmQobiksZS5ub2RlLmluZHg9bixlLm5vZGUuaW5keC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZnVuY3Rpb24oZSl7ZS50YXJnZXQubWF0Y2hlcyhcImFcIikmJmUucHJldmVudERlZmF1bHQoKX0pKTt2YXIgaT1mdW5jdGlvbih0KXtpZih0LnRhcmdldC5tYXRjaGVzKFwiYVwiKSl7dmFyIG49dC50YXJnZXQudGV4dENvbnRlbnQsaT15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXSxzPS0xLGE9aS5zY3JvbGxUb3A7aS5zY3JvbGxUb3A9MCxfKGksXCIubW0tZGl2aWRlclwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0taGlkZGVuXCIpfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3M8MCYmbj09ZS50ZXh0Q29udGVudC50cmltKCkuc2xpY2UoMCwxKS50b0xvd2VyQ2FzZSgpJiYocz1lLm9mZnNldFRvcCl9KSksaS5zY3JvbGxUb3A9cz4tMT9zOmF9fTtXPyhlLm5vZGUuaW5keC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGkpLGUubm9kZS5pbmR4LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixpKSk6ZS5ub2RlLmluZHguYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLGkpfWUuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLChmdW5jdGlvbih0KXt2YXIgbj1fKHQsXCIubW0tZGl2aWRlclwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0taGlkZGVuXCIpfSkpLmxlbmd0aDtlLm5vZGUuaW5keC5jbGFzc0xpc3Rbbj9cImFkZFwiOlwicmVtb3ZlXCJdKFwibW0tc2VjdGlvbmluZGV4ZXJfYWN0aXZlXCIpfSkpfSkpfSxzZXRTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciBlPXR
24510oaXMsdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXtob3ZlcjplLHBhcmVudDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMuc2V0U2VsZWN0ZWQpO2lmKHRoaXMub3B0cy5zZXRTZWxlY3RlZD1vKHQsTS5vcHRpb25zLnNldFNlbGVjdGVkKSxcImRldGVjdFwiPT10LmN1cnJlbnQpe3ZhciBuPWZ1bmN0aW9uKHQpe3Q9dC5zcGxpdChcIj9cIilbMF0uc3BsaXQoXCIjXCIpWzBdO3ZhciBpPWUubm9kZS5tZW51LnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZj1cIicrdCsnXCJdLCBhW2hyZWY9XCInK3QrJy9cIl0nKTtpZihpKWUuc2V0U2VsZWN0ZWQoaS5wYXJlbnRFbGVtZW50KTtlbHNle3ZhciBzPXQuc3BsaXQoXCIvXCIpLnNsaWNlKDAsLTEpO3MubGVuZ3RoJiZuKHMuam9pbihcIi9cIikpfX07dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtuLmNhbGwoZSx3aW5kb3cubG9jYXRpb24uaHJlZil9KSl9ZWxzZSB0LmN1cnJlbnR8fHRoaXMuYmluZChcImluaXRMaXN0dmlldzphZnRlclwiLChmdW5jdGlvbihlKXt5KGUsXCIubW0tbGlzdGl0ZW1fc2VsZWN0ZWRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWRcIil9KSl9KSk7dC5ob3ZlciYmdGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9zZWxlY3RlZC1ob3ZlclwiKX0pKSx0LnBhcmVudCYmKHRoaXMuYmluZChcIm9wZW5QYW5lbDpmaW5pc2hcIiwoZnVuY3Rpb24odCl7XyhlLm5vZGUucG5scyxcIi5tbS1saXN0aXRlbV9zZWxlY3RlZC1wYXJlbnRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWQtcGFyZW50XCIpfSkpO2Zvcih2YXIgbj10Lm1tUGFyZW50O247KW4ubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKXx8bi5jbGFzc0xpc3QuYWRkKFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWQtcGFyZW50XCIpLG49KG49bi5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKS5tbVBhcmVudH0pKSx0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe2Uubm9kZS5tZW51LmNsYXNzTGlzdC5hZGQoXCJtbS1tZW51X3NlbGVjdGVkLXBhcmVudFwiKX0pKSl9LHNpZGViYXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMub3B0cy5vZmZDYW52YXMpe3ZhciB0PWZ1bmN0aW9uKGUpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJib29sZWFuXCI9PXR5cGVvZiBlJiZlfHxcIm51bWJlclwiPT10eXBlb2YgZSkmJihlPXtleHBhbmRlZDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcImJvb2xlYW5cIj09dHlwZW9mIGUuY29sbGFwc2VkJiZlLmNvbGxhcHNlZCYmKGUuY29sbGFwc2VkPXt1c2U6ITB9KSxcInN0cmluZ1wiIT10eXBlb2YgZS5jb2xsYXBzZWQmJlwibnVtYmVyXCIhPXR5cGVvZiBlLmNvbGxhcHNlZHx8KGUuY29sbGFwc2VkPXt1c2U6ZS5jb2xsYXBzZWR9KSxcIm9iamVjdFwiIT10eXBlb2YgZS5jb2xsYXBzZWQmJihlLmNvbGxhcHNlZD17fSksXCJib29sZWFuXCI9PXR5cGVvZiBlLmV4cGFuZGVkJiZlLmV4cGFuZGVkJiYoZS5leHBhbmRlZD17dXNlOiEwfSksXCJzdHJpbmdcIiE9dHlwZW9mIGUuZXhwYW5kZWQmJlwibnVtYmVyXCIhPXR5cGVvZiBlLmV4cGFuZGVkfHwoZS5leHBhbmRlZD17dXNlOmUuZXhwYW5kZWR9KSxcIm9iamVjdFwiIT10eXBlb2YgZS5leHBhbmRlZCYmKGUuZXhwYW5kZWQ9e30pLGV9KHRoaXMub3B0cy5zaWRlYmFyKTtpZih0aGlzLm9wdHMuc2lkZWJhcj1vKHQsTS5vcHRpb25zLnNpZGViYXIpLHQuY29sbGFwc2VkLnVzZSl7dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtpZihlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9zaWRlYmFyLWNvbGxhcHNlZFwiKSx0LmNvbGxhcHNlZC5ibG9ja01lbnUmJmUub3B0cy5vZmZDYW52YXMmJiF5KGUubm9kZS5tZW51LFwiLm1tLW1lbnVfX2Jsb2NrZXJcIilbMF0pe3ZhciBuPWcoXCJhLm1tLW1lbnVfX2Jsb2NrZXJcIik7bi5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIrZS5ub2RlLm1lbnUuaWQpLGUubm9kZS5tZW51LnByZXBlbmQobil9dC5jb2xsYXBzZWQuaGlkZU5hdmJhciYmZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfaGlkZW5hdmJhclwiKSx0LmNvbGxhcHNlZC5oaWRlRGl2aWRlciYmZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfaGlkZWRpdmlkZXJcIil9KSk7dmFyIG49ZnVuY3Rpb24oKXtlLm5vZGUud3Jwci5jbGFzc0xpc3QuYWRkKFwibW0td3JhcHBlcl9zaWRlYmFyLWNvbGxhcHNlZFwiKX0saT1mdW5jdGlvbigpe2Uubm9kZS53cnByLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS13cmFwcGVyX3NpZGViYXItY29sbGFwc2VkXCIpfTtcImJvb2xlYW5cIj09dHlwZW9mIHQuY29sbGFwc2VkLnVzZT90aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLG4pOmsodC5jb2xsYXBzZWQudXNlLG4saSl9aWYodC5leHBhbmRlZC51c2Upe3RoaXMuYmluZChcImluaXRNZW51OmFmdGVyXCIsKGZ1bmN0aW9uKCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfc2lkZWJhci1leHBhbmRlZFwiKX0pKTtuPWZ1bmN0aW9uKCl7ZS5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJfc2lkZWJhci1leHBhbmRlZFwiKSxlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfc2lkZWJhci1jbG9zZWRcIil8fGUub3BlbigpfSxpPWZ1bmN0aW9uKCl7ZS5ub2RlLndycHIuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXdyYXBwZXJfc2lkZWJhci1leHBhbmRlZFwiKSxlLmNsb3NlKCl9O1wiYm9vbGVhblwiPT10eXBlb2YgdC5leHBhbmRlZC51c2U/dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIixuKTprKHQuZXhwYW5kZWQudXNlLG4saSksdGhpcy5iaW5kKFwiY2xvc2U6c3RhcnRcIiwoZnVuY3Rpb24oKXtlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfc2lkZWJhci1leHBhbmRlZFwiKSYmKGUubm9kZS53cnByLmNsYXNzTGlzdC5hZGQoXCJtbS13cmFwcGVyX3NpZGViYXItY2xvc2VkXCIpLFwicmVtZW1iZXJcIj09dC5leHBhbmRlZC5pbml0aWFsJiZ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJtbWVudUV4cGFuZGVkU3RhdGVcIixcImNsb3NlZFwiKSl9KSksdGhpcy5iaW5kKFwib3BlbjpzdGFydFwiLChmdW5jdGlvbigpe2Uubm9kZS53cnByLm1hdGNoZXMoXCIubW0td3JhcHBlcl9zaWRlYmFyLWV4cGFuZGVkXCIpJiYoZS5ub2RlLndycHIuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXdyYXBwZXJfc2lkZWJhci1jbG9zZWRcIiksXCJyZW1lbWJlclwiPT10LmV4cGFuZGVkLmluaXRpYWwmJndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1tZW51RXhwYW5kZWRTdGF0ZVwiLFwib3BlblwiKSl9KSk7dmFyIHM9dC5leHBhbmRlZC5pbml0aWFsO2lmKFwicmVtZW1iZXJcIj09dC5leHBhbmRlZC5pbml0aWFsKXt2YXIgYT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJtbWVudUV4cGFuZGVkU3RhdGVcIik7c3dpdGNoKGEpe2Nhc2VcIm9wZW5cIjpjYXNlXCJjbG9zZWRcIjpzPWF9fVwiY2xvc2VkXCI9PXMmJnRoaXMuYmluZChcImluaXRNZW51OmFmdGVyXCIsKGZ1bmN0aW9uKCl7ZS5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJfc2lkZWJhci1jbG9zZWRcIil9KSksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKG4saSl7aWYoaS5pbk1lbnUmJmkuaW5MaXN0dmlldyYmZS5ub2RlLndycHIubWF0Y2hlcyhcIi5tbS13cmFwcGVyX3NpZGViYXItZXhwYW5kZWRcIikpcmV0dXJue2Nsb3NlOlwiY2xvc2VkXCI9PXQuZXhwYW5kZWQuaW5pdGlhbH19KSl9fX0sdG9nZ2xlczpmdW5jdGlvbigpe3ZhciBlPXR
24510oaXM7dGhpcy5iaW5kKFwiaW5pdFBhbmVsOmFmdGVyXCIsKGZ1bmN0aW9uKHQpe18odCxcImlucHV0XCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3godCxlLmNvbmYuY2xhc3NOYW1lcy50b2dnbGVzLnRvZ2dsZSxcIm1tLXRvZ2dsZVwiKSx4KHQsZS5jb25mLmNsYXNzTmFtZXMudG9nZ2xlcy5jaGVjayxcIm1tLWNoZWNrXCIpfSkpfSkpfX0sTS53cmFwcGVycz17YW5ndWxhcjpmdW5jdGlvbigpe3RoaXMub3B0cy5vbkNsaWNrPXtjbG9zZTohMCxwcmV2ZW50RGVmYXVsdDohMSxzZXRTZWxlY3RlZDohMH19LGJvb3RzdHJhcDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5ub2RlLm1lbnUubWF0Y2hlcyhcIi5uYXZiYXItY29sbGFwc2VcIikpe3RoaXMuY29uZi5vZmZDYW52YXMmJih0aGlzLmNvbmYub2ZmQ2FudmFzLmNsb25lPSExKTt2YXIgdD1nKFwibmF2XCIpLG49ZyhcImRpdlwiKTt0LmFwcGVuZChuKSx5KHRoaXMubm9kZS5tZW51KS5mb3JFYWNoKChmdW5jdGlvbih0KXtzd2l0Y2goITApe2Nhc2UgdC5tYXRjaGVzKFwiLm5hdmJhci1uYXZcIik6bi5hcHBlbmQoZnVuY3Rpb24oZSl7dmFyIHQ9ZyhcInVsXCIpO3JldHVybiBfKGUsXCIubmF2LWl0ZW1cIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZyhcImxpXCIpO2lmKGUubWF0Y2hlcyhcIi5hY3RpdmVcIikmJm4uY2xhc3NMaXN0LmFkZChcIlNlbGVjdGVkXCIpLCFlLm1hdGNoZXMoXCIubmF2LWxpbmtcIikpe3ZhciBpPXkoZSxcIi5kcm9wZG93bi1tZW51XCIpWzBdO2kmJm4uYXBwZW5kKG8oaSkpLGU9eShlLFwiLm5hdi1saW5rXCIpWzBdfW4ucHJlcGVuZChhKGUpKSx0LmFwcGVuZChuKX0pKSx0fSh0KSk7YnJlYWs7Y2FzZSB0Lm1hdGNoZXMoXCIuZHJvcGRvd24tbWVudVwiKTpuLmFwcGVuZChvKHQpKTticmVhaztjYXNlIHQubWF0Y2hlcyhcIi5mb3JtLWlubGluZVwiKTplLmNvbmYuc2VhcmNoZmllbGQuZm9ybT17YWN0aW9uOnQuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpfHxudWxsLG1ldGhvZDp0LmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKXx8bnVsbH0sZS5jb25mLnNlYXJjaGZpZWxkLmlucHV0PXtuYW1lOnQucXVlcnlTZWxlY3RvcihcImlucHV0XCIpLmdldEF0dHJpYnV0ZShcIm5hbWVcIil8fG51bGx9LGUuY29uZi5zZWFyY2hmaWVsZC5jbGVhcj0hMSxlLmNvbmYuc2VhcmNoZmllbGQuc3VibWl0PSEwO2JyZWFrO2RlZmF1bHQ6bi5hcHBlbmQodC5jbG9uZU5vZGUoITApKX19KSksdGhpcy5iaW5kKFwiaW5pdE1lbnU6YmVmb3JlXCIsKGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5wcmVwZW5kKHQpLGUubm9kZS5tZW51PXR9KSk7dmFyIGk9dGhpcy5ub2RlLm1lbnUucGFyZW50RWxlbWVudDtpZihpKXt2YXIgcz1pLnF1ZXJ5U2VsZWN0b3IoXCIubmF2YmFyLXRvZ2dsZXJcIik7cyYmKHMucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS10YXJnZXRcIikscy5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWNvbnRyb2xzXCIpLHMub3V0ZXJIVE1MPXMub3V0ZXJIVE1MLChzPWkucXVlcnlTZWxlY3RvcihcIi5uYXZiYXItdG9nZ2xlclwiKSkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGVbZS52YXJzLm9wZW5lZD9cImNsb3NlXCI6XCJvcGVuXCJdKCl9KSkpfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD1nKGUubWF0Y2hlcyhcImFcIik/XCJhXCI6XCJzcGFuXCIpLG49W1wiaHJlZlwiLFwidGl0bGVcIixcInRhcmdldFwiXSxpPTA7aTxuLmxlbmd0aDtpKyspZS5nZXRBdHRyaWJ1dGUobltpXSkmJnQuc2V0QXR0cmlidXRlKG5baV0sZS5nZXRBdHRyaWJ1dGUobltpXSkpO3JldHVybiB0LmlubmVySFRNTD1lLmlubmVySFRNTCxfKHQsXCIuc3Itb25seVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlbW92ZSgpfSkpLHR9ZnVuY3Rpb24gbyhlKXt2YXIgdD1nKFwidWxcIik7cmV0dXJuIHkoZSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZyhcImxpXCIpO2UubWF0Y2hlcyhcIi5kcm9wZG93bi1kaXZpZGVyXCIpP24uY2xhc3NMaXN0LmFkZChcIkRpdmlkZXJcIik6ZS5tYXRjaGVzKFwiLmRyb3Bkb3duLWl0ZW1cIikmJm4uYXBwZW5kKGEoZSkpLHQuYXBwZW5kKG4pfSkpLHR9fSxvbGFyazpmdW5jdGlvbigpe3RoaXMuY29uZi5vZmZDYW52YXMucGFnZS5ub1NlbGVjdG9yLnB1c2goXCIjb2xhcmtcIil9LHR1cmJvbGlua3M6ZnVuY3Rpb24oKXt2YXIgZTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidHVyYm9saW5rczpiZWZvcmUtdmlzaXRcIiwoZnVuY3Rpb24odCl7ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1tLXdyYXBwZXJcIikuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybi9tbS0vLnRlc3QoZSl9KSl9KSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInR1cmJvbGlua3M6bG9hZFwiLChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tbS13cmFwcGVyXCIpLmNsYXNzTmFtZT1lKX0pKX0sd29yZHByZXNzOmZ1bmN0aW9uKCl7dGhpcy5jb25mLmNsYXNzTmFtZXMuc2VsZWN0ZWQ9XCJjdXJyZW50LW1lbnUtaXRlbVwiO3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid3BhZG1pbmJhclwiKTtlJiYoZS5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsZS5jbGFzc0xpc3QuYWRkKFwibW0tc2xpZGVvdXRcIikpfX07dmFyIE9lO3QuZGVmYXVsdD1NO3dpbmRvdyYmKHdpbmRvdy5NbWVudT1NKSwoT2U9d2luZG93LmpRdWVyeXx8d2luZG93LlplcHRvfHxudWxsKSYmKE9lLmZuLm1tZW51PWZ1bmN0aW9uKGUsdCl7dmFyIG49T2UoKTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihpLHMpe2lmKCFzLm1tQXBpKXt2YXIgYT1uZXcgTShzLGUsdCksbz1PZShhLm5vZGUubWVudSk7by5kYXRhKFwibW1lbnVcIixhLkFQSSksbj1uLmFkZChvKX19KSksbn0pfV0pOyIsIi8qXG4gKlxuICogSlM6IHB4RWFzeUV4cGFuZFxuICpcbiAqIFZlcnNpb24gMS42IC8gMTQuMy4yMDIzXG4gKlxuICovXG5cInVzZSBzdHJpY3RcIjtcblxuXG5jbGFzcyBweEVhc3lFeHBhbmQge1xuXG5cbiAgY29uc3RydWN0b3IgKGJ1dHRvbiwgc2V0dGluZ3MgPSB7fSwgYnV0dG9uU2V0dGluZ3MgPSB7fSkge1xuXG4gICAgdGhpcy5kZWZh
24510dWx0cyA9IHtcbiAgICAgICdzZXRSb290Q2xhc3MnIDogZmFsc2UsIC8vIHNvbGwgZWluZSBLbGFzc2UgaW0gSFRNTCBnZXNldHp0IHdlcmRlblxuICAgICAgJ3N3aXRjaEJ1dHRvbkh0bWwnIDogZmFsc2UsXG4gICAgICAnYWRkQ2xvc2VCdXR0b24nIDogZmFsc2UsXG4gICAgICAnY2xvc2VCdXR0b25Qb3MnIDogZmFsc2UsXG4gICAgICAnY2xvc2VXaXRoRXNjJyA6IGZhbHNlLFxuICAgICAgJ3NldEZvY3VzVG9FbGVtZW50JyA6IGZhbHNlLCAvLyBTZWxlY3RvciBvZGVyIGZhbHNlXG4gICAgICAnc2V0Rm9jdXNUb0ZpcnN0RWxlbWVudCcgOiBmYWxzZSxcbiAgICAgICdrZWVwRm9jdXNJblRhcmdldEVsZW1lbnQnIDogZmFsc2UsXG4gICAgICAnZGlzYWJsZUZvY3VzSGFuZGxpbmcnIDogZmFsc2UsXG4gICAgICAncmVzZXRTY3JvbGxQb3NpdGlvbicgOiBmYWxzZSxcbiAgICAgICdoaWRkZW5BdHRyaWJ1dGUnIDogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICdoaWRkZW5XaGVuT3BlbicgOiBmYWxzZVxuICAgIH07XG5cbiAgICB0aGlzLmZ1bmN0aW9ucyA9IHtcbiAgICAgIGJlZm9yZVRvZ2dsZSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgYWZ0ZXJUb2dnbGUgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBidXR0b25TZXR0aW5ncyA9IHtcbiAgICAvLyAgIGNvbnRyb2xzOiAnJyxcbiAgICAvLyAgIGxhYmVsT3BlbjogJycsXG4gICAgLy8gICBsYWJlbENsb3NlOiAnJyxcbiAgICAvLyAgIHRleHRPcGVuOiAnJyxcbiAgICAvLyAgIHRleHRDbG9zZTogJycsXG4gICAgLy8gICBmb2N1c0hlbHBlclRleHQ6ICcnXG4gICAgLy8gfVxuXG4gICAgLy8gQ29uZmlnIGVyc3RlbGxlblxuICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih0aGlzLmRlZmF1bHRzLHNldHRpbmdzKTtcbiAgICB0aGlzLmNvbmZpZy5vbiA9IE9iamVjdC5hc3NpZ24odGhpcy5mdW5jdGlvbnMsc2V0dGluZ3Mub24pO1xuXG4gICAgdGhpcy5pbml0QnV0dG9ucyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBidXR0b24gPT09ICdzdHJpbmcnIHx8IGJ1dHRvbiBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgdGhpcy5idXR0b25PYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b24ucmVwbGFjZSgnIycsICcnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnV0dG9uT2JqID0gYnV0dG9uO1xuICAgIH1cblxuICAgIC8vIGdld2lzc2VuIEVpZ2Vuc2NoYWZ0ZW4gd2VyZGVuIGFscyBwcm9wZXJ0eSBpbSBCdXR0b24gZ2VzcGVpY2hlcnRcbiAgICBpZiAoIHR5cGVvZih0aGlzLmJ1dHRvbk9iaikgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5idXR0b25PYmogIT0gbnVsbCApIHtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLmNvbnRyb2xzID0gW107XG4gICAgICB0aGlzLmJ1dHRvbk9iai5leHBhbmRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRlciBlaW4tL2F1c3p1YmxlbmRlbmRlIENvbnRhaW5lciB3aXJkIGdlc3BlaWNoZXJ0XG4gICAgdGhpcy50YXJnZXRPYmogPSBbXTtcblxuICAgIGlmICggdGhpcy5idXR0b25PYmogJiYgdGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdkYXRhLWNvbnRyb2xzJykgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xzID0gdGhpcy5idXR0b25PYmouZ2V0QXR0cmlidXRlKCdkYXRhLWNvbnRyb2xzJyk7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtY29udHJvbHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250cm9scyA9IGJ1dHRvblNldHRpbmdzWydjb250cm9scyddO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5jb250cm9scyApIHtcbiAgICAgIGxldCB0YXJnZXRJZHMgPSB0aGlzLmNvbnRyb2xzLnNwbGl0KCcgJylcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0YXJnZXRJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy50YXJnZXRPYmpbaV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggdGFyZ2V0SWRzW2ldICk7XG4gICAgICAgIHRoaXMuYnV0dG9uT2JqLmNvbnRyb2xzW2ldID0gdGhpcy50YXJnZXRPYmpbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggdGhpcy5idXR0b25PYmogJiYgdGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdocmVmJykgKSB7XG4gICAgICB0aGlzLnRhcmdldE9ialswXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYnV0dG9uT2JqLmhhc2gucmVwbGFjZSgnIycsICcnKSk7XG4gICAgfVxuXG4gICAgLy8gQWJicnVjaCBmYWxscyBlcyBrZWluZW4gWmllbC1Db250YWluZXIgZ2lidFxuICAgIGlmICggdGhpcy50YXJnZXRPYmoubGVuZ3RoIDwgMSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQXJpYS1MYWJlbHMgZGVzIEJ1dHRvbnNcbiAgICBpZiAodGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdkYXRhLWxhYmVsLW9wZW4nKSkge1xuICAgICAgdGhpcy5sYWJlbE9wZW4gPSB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtb3BlbicpO1xuICAgICAgdGhpcy5idXR0b25PYmoucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWxhYmVsLW9wZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbE9wZW4gPSBidXR0b25TZXR0aW5nc1snbGFiZWxPcGVuJ10gPyBidXR0b25TZXR0aW5nc1snbGFiZWxPcGVuJ10gOiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqLmhhc0F0dHJpYnV0ZSgnZGF0YS1sYWJlbC1jbG9zZScpKSB7XG4gICAgICB0aGlzLmxhYmVsQ2xvc2UgPSB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtY2xvc2UnKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1sYWJlbC1jbG9zZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhYmVsQ2xvc2UgPSBidXR0b25TZXR0aW5nc1snbGFiZWxDbG9zZSddID8gYnV0dG9uU2V0dGluZ3NbJ2xhYmVsQ2xvc2UnXSA6IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBUZXh0IGRlcyBCdXR0b25zXG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqLmhhc0F0dHJpYnV0ZSgnZGF0YS10ZXh0LW9wZW4nKSkge1xuICAgICAgdGhpcy50ZXh0T3BlbiA9IHRoaXMuYnV0dG9uT2JqLmdldEF0dHJpYnV0ZSgnZGF0YS10ZXh0LW9wZW4nKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXh0LW9wZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0T3BlbiA9IGJ1dHRvblNldHRpbmdzWyd0ZXh0T3BlbiddID8gYnV0dG9uU2V0dGluZ3NbJ3RleHRPcGVuJ10gOiB0aGlzLmxhYmVsT3BlbjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqLmhhc0F0dHJpYnV0ZSgnZGF0YS10ZXh0LWNsb3NlJykpIHtcbiAgICAgIHRoaXMudGV4dENsb3NlID0gdGhpcy5idXR0b25PYmouZ2V0QXR0cmlidXRlKCdkYXRhLXRleHQtY2xvc2UnKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXh0LWNsb3NlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dENsb3NlID0gYnV0dG9uU2V0dGluZ3NbJ3RleHRDbG9zZSddID8gYnV0dG9uU2V0dGluZ3NbJ3RleHRDbG9zZSddIDogdGhpcy5sYWJlbENsb3NlO1xuICAgIH1cblxuICAgIC8vIFRleHQgZGVzIEZvY3VzIEhlbHBlcnNcbiAgICBpZiAodGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdkYXRhLWZvY3VzLWhlbHBlci10ZXh0JykpIHtcbiAgICAgIHRoaXMuZm9jdXNIZWxwZXJUZXh0ID0gdGhpcy5idXR0b25PYmouZ2V0QXR0cmlidXRlKCdkYXRhLWZvY3VzLWhlbHBlci10ZXh0Jyk7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMtaGVscGVyLXRleHQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c0hlbHBlclRleHQgPSBidXR0b25TZXR0aW5nc1snZm9jdXNIZWxwZXJUZXh0J10gPyBidXR0b25TZXR0aW5nc1snZm9jdXNIZWxwZXJUZXh0J10gOiB0aGlzLmxhYmVsQ2xvc2U7XG4gICAgfVxuXG4gICAgLy8gYXVmIGdlaHRzXG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqKSB7XG5cbiAgICAgIC8vIEJ1dHRvbiBpbml0aWFsaXNpZXJlblxuICAgICAgdGhpcy5pbml0QnV0dG9uKCk7XG5cbiAgICAgIC8vIFNjaGxpZcOfZW4tQnV0dG9uIGVpbmbDvGdlblxuICAgICAgaWYgKHRoaXMuY29uZmlnLmFkZENsb3NlQnV0dG9uICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmNsb3NlQnV0dG9uT2JqID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgI
24510HRoaXMuY2xvc2VCdXR0b25PYmouaW5uZXJIVE1MID0gJzxzcGFuPicgKyB0aGlzLnRleHRDbG9zZSArICc8L3NwYW4+JztcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVzKHRoaXMuY2xvc2VCdXR0b25PYmosIHtcbiAgICAgICAgICAnYXJpYS1jb250cm9scyc6IHRoaXMudGFyZ2V0T2JqWzBdLmlkLFxuICAgICAgICAgICdhcmlhLWV4cGFuZGVkJzogJ3RydWUnLFxuICAgICAgICAgICdhcmlhLWxhYmVsJzogdGhpcy5sYWJlbENsb3NlLFxuICAgICAgICAgICdjbGFzcyc6ICdqcy1jbG9zZSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMudG9nZ2xlU3RhdGVzKCk7XG4gICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgaWYgKCBOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29uZmlnLmNsb3NlQnV0dG9uUG9zKSApIHtcbiAgICAgICAgICB0aGlzLnRhcmdldE9ialswXS5pbnNlcnRCZWZvcmUodGhpcy5jbG9zZUJ1dHRvbk9iaix0aGlzLnRhcmdldE9ialswXS5jaGlsZE5vZGVzW3RoaXMuY29uZmlnLmNsb3NlQnV0dG9uUG9zXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50YXJnZXRPYmpbMF0uYXBwZW5kQ2hpbGQodGhpcy5jbG9zZUJ1dHRvbk9iaik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2NobGllw59lbiBtaXQgRVNDXG4gICAgICBpZiAodGhpcy5jb25maWcuY2xvc2VXaXRoRXNjID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0T2JqWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgdmFyIGtleSA9IGV2ZW50LmtleSB8fCBldmVudC5rZXlDb2RlO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdFc2NhcGUnIHx8IGtleSA9PT0gJ0VzYycgfHwga2V5ID09PSAyNykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU3RhdGVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5idXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ2ZhbHNlJykgeyByZXR1cm47IH1cbiAgICAgICAgICB2Y
24510XIga2V5ID0gZXZlbnQua2V5IHx8IGV2ZW50LmtleUNvZGU7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ0VzY2FwZScgfHwga2V5ID09PSAnRXNjJyB8fCBrZXkgPT09IDI3KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVTdGF0ZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBUYXN0YXR1cnN0ZXVlcnVuZyAvIFRhYnJlaWhlbmZvbGdlXG4gICAgICBpZiAodGhpcy5jb25maWcua2VlcEZvY3VzSW5UYXJnZXRFbGVtZW50ID09PSB0cnVlKSB7XG5cbiAgICAgICAgLy8gMS4gYmVpbSBSw7xja3fDpHJ0c3Zlcmxhc3NlbiBkZXMgZXJzdGVuIEVsZW1lbnRzLCB3aXJkIGRlciBGb2N1cyB6dXLDvGNrXG4gICAgICAgIC8vIGF1ZiBkZW4gw5ZmZm5lbi1CdXR0b24gZ2VzY2hvYmVuXG4gICAgICAgIC8vIG9kZXIgYXVmIGRlbiBTY2hsaWXDn2VuLUJ1dHRvbiwgZmFsbHMgZGllc2VyIHZvcmhhbmRlbiBpc3RcbiAgICAgICAgdGhpcy50YXJnZXRPYmpbMF0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuXG4gICAgICAgICAgLy8gQWJicnVjaCBmYWxscyBkYXMgRm9jdXMgSGFuZGxpbmcgZGVha3RpdmllcnQgd3VyZGVcbiAgICAgICAgICBpZiAoIHRoaXMuY29uZmlnLmRpc2FibGVGb2N1c0hhbmRsaW5nID09PSB0cnVlIHx8IHRoaXMuaXNIaWRkZW4oZm9jdXNIZWxwZXIpID09PSB0cnVlICkgeyByZXR1cm47IH1cblxuICAgICAgICAgIGlmICggZXZlbnQuc2hpZnRLZXkgPT09IHRydWUgJiYgKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpID09IDkgKSB7XG5cbiAgICAgICAgICAgIGxldCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMudGFyZ2V0T2JqWzBdLnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbaHJlZl06bm90KC5mb2N1cy1oZWxwZXIpLGlucHV0LHNlbGVjdCxidXR0b24nKTtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNIaWRkZW4oZm9jdXNhYmxlRWxlbWVudHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzLnB1c2goZm9jdXNhYmxlRWxlbWVudHNbaV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGtsZWluZSBTY2h3YWNoc3RlbGxlOiB0aGVvcmV0aXNjaCBrw7ZubnRlbiBhdWNoIGFuZGVyZSBFbGVtZW50ZSBGb2N1cyBlcmhhbHRlblxuICAgICAgICAgICAgaWYgKCB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHNbMF0gPT0gZXZlbnQudGFyZ2V0ICkge1xuXG4gICAgICAgICAgICAgIGlmICggdGhpcy5jb25maWcuYWRkQ2xvc2VCdXR0b24gPT09IHRydWUgKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLmlzSGlkZGVuKHRoaXMuY2xvc2VCdXR0b25PYmopICkge1xuICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VCdXR0b25PYmouZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoICF0aGlzLmlzSGlkZGVuKHRoaXMuYnV0dG9uT2JqKSApIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uT2JqLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gMi4gYmVpbSBFcnJlaWNoZW4gZWluZXMgaGllciBlaW5nZWbDvGd0ZW4gSGlsZnNsaW5rcyBhbSBFbmRlIGRlcyBDb250YWluZXJzLFxuICAgICAgICAvLyB3aXJkIGViZW5mYWxscyBkZXIgRm9jdXMgenVyw7xjayBhdWYgZGVuIMOWZmZuZW4tQnV0dG9uIGdlc2Nob2JlblxuICAgICAgICBsZXQgZm9jdXNIZWxwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyhmb2N1c0hlbHBlciwge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogdGhpcy5mb2N1c0hlbHBlclRleHQsXG4gICAgICAgICAgJ2hyZWYnOiAnIycgKyB0aGlzLmJ1dHRvbk9iai5pZCxcbiAgICAgICAgICAnY2xhc3MnOiAnZm9jdXMtaGVscGVyJ1xuICAgICAgICB9KTtcblxuICAgICAgICBmb2N1c0hlbHBlci5pbm5lckhUTUwgPSAnPHNwYW4+JyArIHRoaXMuZm9jdXNIZWxwZXJUZXh0ICsgJzwvc3Bhbj4nO1xuXG4gICAgICAgIGZvY3VzSGVscGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgaWYgKCB0aGlzLmNvbmZpZy5hZGRDbG9zZUJ1dHRvbiA9PT0gdHJ1ZSApIHtcblxuICAgICAgICAgICAgLy8ga2xlaW5lIFNjaHdhY2hzdGVsbGU6IHRoZW9yZXRpc2NoIGvDtm5udGVuIGF1Y2ggYW5kZXJlIEVsZW1lbnRlIEZvY3VzIGVyaGFsdGVuXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMudGFyZ2V0T2JqWzBdLnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZl0saW5wdXQsc2VsZWN0LGJ1dHRvbicpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uT2JqLmZvY3VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGFyZ2V0T2JqWzBdLmFwcGVuZENoaWxkKGZvY3VzSGVscGVyKTtcblxuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxuXG4gIGlzSGlkZGVuIChlbGVtZW50KSB7XG5cbiAgICAvLyBiZWkgcG9zaXRpb24gZml4ZWQgdW5kIMOkbHRlcmVuIFZlcnNpb25lblxuICAgIC8vIGxldCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIC8vIHJldHVybiAoc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKVxuXG4gICAgcmV0dXJuIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PT0gbnVsbClcblxuICB9XG5cblxuICBzZXRBdHRyaWJ1dGVzIChlbGVtZW50LCBhdHRyaWJ1dGVzKSB7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChrZXkgPT4gZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyaWJ1dGVzW2tleV0pKTtcbiAgfVxuXG5cbiAgc2V0QnV0dG9uIChidXR0b24pIHtcblxuICAgIGxldCBleHBhbmRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnICkge1xuICAgICAgdGhpcy50b2dnbGVTdGF0ZXMoKTtcbiAgICAgIGV4cGFuZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1dHRvbk9iaiA9IGJ1dHRvbjt
24510cblxuICAgIGlmICh0aGlzLmluaXRCdXR0b25zLmluZGV4T2YodGhpcy5idXR0b25PYmopIDwgMCkge1xuICAgICAgdGhpcy5pbml0QnV0dG9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkQXJpYSgpO1xuICAgIH1cblxuICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgdGhpcy50b2dnbGVTdGF0ZXMoKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgaW5pdEJ1dHRvbigpIHtcblxuICAgIC8vIEFyaWEtQXR0cmlidXRlIGVpbmbDvGdlblxuICAgIHRoaXMuYWRkQXJpYSgpO1xuXG4gICAgLy8gQnV0dG9uIGJlbGVnZW4gdW5kIEZ1bmt0aW9uIGFuYmluZGVuXG4gICAgdGhpcy5idXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZVN0YXRlcygpO1xuICAgIH0sIGZhbHNlKTtcblxuICAgIC8vIFRhc3RhdHVyc3RldWVydW5nIC8gVGFicmVpaGVuZm9sZ2U6IG5hY2ggZGVtIFN0ZXVlcnVuZ3NidXR0b24gZGlyZWt0IGluIGRhcyBGZW5zdGVyIHNwcmluZ2VuXG4gICAgLy8gc29sbCBudXIgYmVpIFRBQiBncmVpZmVuIC0+IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSA9PSA5XG4gICAgdGhpcy5idXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgaWYgKCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnICYmIChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSA9PSA5ICYmIHRoaXMuY29uZmlnLmtlZXBGb2N1c0luVGFyZ2V0RWxlbWVudCA9PT0gdHJ1ZSkge1xuXG4gICAgICAgIC8vIEFiYnJ1Y2ggZmFsbHMgZGFzIEZvY3VzIEhhbmRsaW5nIGRlYWt0aXZpZXJ0IHd1cmRlXG4gICAgICAgIGlmICggdGhpcy5jb25maWcuZGlzYWJsZUZvY3VzSGFuZGxpbmcgPT09IHRydWUgKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIEFiYnJ1Y2gsIGZhbGxzIEJ1dHRvbnMgdmVyc3RlY2t0IHNpbmRcbiAgICAgICAgaWYgKCB0aGlzLmNvbmZpZy5hZGRDbG9zZUJ1dHRvbiA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICBpZiAoIHRoaXMuaXNIaWRkZW4odGhpcy5jbG9zZUJ1dHRvbk9iaikgKSB7IHJldHVybjsgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICggdGhpcy5pc0hpZGRlbih0aGlzLmJ1dHRvbk9iaikgKSB7IHJldHVybjsgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAvLyBrbGVpbmUgU2Nod2FjaHN0ZWxsZTogdGhlb3JldGlzY2gga8O2bm50ZW4gYXVjaCBhbmRlcmUgRWxlbWVudGUgRm9jdXMgZXJoYWx0ZW5cbiAgICAgICAgbGV0IGZvY3VzYWJsZUVsZW1lbnRzID0gdGhpcy50YXJnZXRPYmpbMF0ucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmXTpub3QoLmZvY3VzLWhlbHBlciksaW5wdXQsc2VsZWN0LGJ1dHRvbicpO1xuICAgICAgICBsZXQgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdGhpcy5pc0hpZGRlbihmb2N1c2FibGVFbGVtZW50c1tpXSkpIHtcbiAgICAgICAgICAgIHZpc2libGVGb2N1c2FibGVFbGVtZW50cy5wdXNoKGZvY3VzYWJsZUVsZW1lbnRzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIGV2ZW50LnNoaWZ0S2V5ID09PSBmYWxzZSAmJiB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICggZXZlbnQuc2hpZnRLZXkgPT09IHRydWUgJiYgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzW3Zpc2libGVGb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaW5pdEJ1dHRvbnMucHVzaCh0aGlzLmJ1dHRvbk9iaik7XG5cbiAgfVxuXG5cbiAgdG9nZ2xlU3RhdGVzICgpIHtcblxuICAgIGxldCBleHBhbmRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnICkge1xuICAgICAgZXhwYW5kZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLm9uLmJlZm9yZVRvZ2dsZSh0aGlzLmJ1dHRvbk9iaik7XG5cbiAgICAvLyBTY3JvbGx0IGRpZSBTZWl0ZSBuYWNoIGRlbSBTY2hsaWXDn2VuIHp1csO8Y2sgenVyIFBvc2l0aW9uIHZvciBkZW0gw5ZmZm5lblxuICAgIGlmICh0aGlzLmNvbmZpZy5yZXNldFNjcm9sbFBvc2l0aW9uICE9PSBmYWxzZSkge1xuXG4gICAgICBpZiAoIGV4cGFuZGVkID09PSBmYWxzZSApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbiA9IE1hdGgubWF4KHdpbmRvdy5wYWdlWU9mZnNldCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbXVzcyBhdXNnZWbDvGhydCB3ZXJkZW4sIGJldm9yIGRlciBCdXR0b24gRm9jdXMgYmVrb21tdFxuICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cblxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNldFJvb3RDbGFzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXS5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuY29uZmlnLnNldFJvb3RDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnV0dG9uT2JqLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIWV4cGFuZGVkKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLmV4cGFuZGVkID0gIWV4cGFuZGVkO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbE9wZW4gJiYgdGhpcy5sYWJlbENsb3NlKSB7XG4gICAgICAgI
24510HRoaXMuYnV0dG9uT2JqLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsZXhwYW5kZWQgPyB0aGlzLmxhYmVsT3BlbiA6IHRoaXMubGFiZWxDbG9zZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zd2l0Y2hCdXR0b25IdG1sICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmJ1dHRvbk9iai5pbm5lckhUTUwgPSBleHBhbmRlZCA/ICc8c3Bhbj4nICsgdGhpcy50ZXh0T3BlbiArICc8L3NwYW4+JyA6ICc8c3Bhbj4nICsgdGhpcy50ZXh0Q2xvc2UgKyAnPC9zcGFuPic7XG4gICAgICB9XG5cbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnRhcmdldE9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnRhcmdldE9ialtpXS5zZXRBdHRyaWJ1dGUodGhpcy5jb25maWcuaGlkZGVuQXR0cmlidXRlLCBleHBhbmRlZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZmlnLm9uLmFmdGVyVG9nZ2xlKHRoaXMuYnV0dG9uT2JqKTtcblxuICAgIH0pO1xuXG4gICAgbGV0IGhpZGRlbkVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5oaWRkZW5XaGVuT3Blbik7XG5cbiAgICBpZiAoZXhwYW5kZWQpIHtcblxuICAgICAgaWYgKCB0aGlzLmNvbmZpZy5kaXNhYmxlRm9jdXNIYW5kbGluZyAhPT0gdHJ1ZSApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGhpZGRlbkVsZW1lbnRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTb2xsdGUgbmFjaCBBYnNjaGx1c3MgZWluZXIgQW5pbWF0aW9uIGVyZm9sZ2VuXG4gICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgIHRoaXMuYnV0dG9uT2JqLmZvY3VzKCk7XG4gICAgICB9LCA2MDApO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIFxuICAgICAgaWYgKCB0aGlzLmNvbmZpZy5kaXNhYmxlRm9jdXNIYW5kbGluZyAhPT0gdHJ1ZSApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGhpZGRlbkVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIHRoaXMuY29uZmlnLnNldEZvY3VzVG9FbGVtZW50ICE9PSBmYWxzZSApIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnRhcmdldE9ialswXS5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLnNldEZvY3VzVG9FbGVtZW50KTtcbiAgICAgICAgaWYgKCBlbGVtZW50Lmxlbmd0aCAhPT0gbnVsbCApIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNldEZvY3VzVG9GaXJzdEVsZW1lbnQgPT09IHRydWUpIHtcbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICh0aGlzLnRhcmdldE9ialswXS5xdWVyeVNlbGVjdG9yKCdhW2hyZWZdLGlucHV0LHNlbGVjdCxidXR0b24nKSB8fCB0aGlzLnRhcmdldE9ialswXSkuZm9jdXMoKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cblxuICB9O1xuXG5cbiAgaXNJblZpZXdwb3J0KGVsZW1lbnQpIHtcbiAgICBcbiAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgcmVjdC5sZWZ0ID49IDAgJiZcbiAgICAgIHJlY3QuYm90dG9tIDw9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgJiZcbiAgICAgIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aClcbiAgICApO1xuXG4gIH07XG5cblxuICByZXNldFNjcm9sbFBvc2l0aW9uKCkge1xuXG4gICAgaWYgKCAhdGhpcy5pc0luVmlld3BvcnQodGhpcy5idXR0b25PYmopICkge1xuICAgICAgY29uc29sZS5sb2coJ3Njcm9sbCcpO1xuICAgICAgd2luZG93LnNjcm9sbCh7XG4gICAgICAgIHRvcDogdGhpcy5zY3JvbGxQb3NpdGlvbixcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgZGlzYWJsZUZvY3VzSGFuZGxpbmcoc3RhdHVzKSB7XG4gICAgdGhpcy5jb25maWcuZGlzYWJsZUZvY3VzSGFuZGxpbmcgPSBzdGF0dXM7XG4gIH1cblxuXG4gIGFkZEFyaWEgKCkge1xuXG4gICAgbGV0IGNvbnRyb2xzID0gW107XG4gICAgbGV0IGhpZGRlbkF0dHJpYnV0ZSA9IHRoaXMuY29uZmlnLmhpZGRlbkF0dHJpYnV0ZTtcblxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnRhcmdldE9iai5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVzKHRoaXMudGFyZ2V0T2JqW2ldLCB7XG4gICAgICAgIFtoaWRkZW5BdHRyaWJ1dGVdOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnRyb2xzLnB1c2godGhpcy50YXJnZXRPYmpbaV0uaWQpO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5idXR0b25PYmoubm9kZU5hbWUgIT0gJ0JVVFRPTicgKSB7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCdidXR0b24nKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVzKHRoaXMuYnV0dG9uT2JqLCB7XG4gICAgICAnYXJpYS1jb250cm9scyc6IGNvbnRyb2xzLmpvaW4oJyAnKSxcbiAgICAgICdhcmlhLWV4cGFuZGVkJzogJ2ZhbHNlJ1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubGFiZWxPcGVuKSB7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLHRoaXMubGFiZWxPcGVuKTtcbiAgICB9XG5cbiAgfTtcblxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgcHhFYXN5RXhwYW5kO1xuXG4iLCIvKipcbiAqIFN3aXBlciA2LjcuMFxuICogTW9zdCBtb2Rlcm4gbW9iaWxlIHRvdWNoIHNsaWRlciBhbmQgZnJhbWV3b3JrIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbnNcbiAqIGh0dHBzOi8vc3dpcGVyanMuY29tXG4gKlxuICogQ29weXJpZ2h0IDIwMTQtMjAyMSBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICpcbiAqIFJlbGVhc2VkIG9uOiBNYXkgMzEsIDIwMjFcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgP
24510SB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Td2lwZXIgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gICAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTU1IgV2luZG93IDMuMC4wXG4gICAqIEJldHRlciBoYW5kbGluZyBmb3Igd2luZG93IG9iamVjdCBpbiBTU1IgZW52aXJvbm1lbnRcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL25vbGltaXRzNHdlYi9zc3Itd2luZG93XG4gICAqXG4gICAqIENvcHlyaWdodCAyMDIwLCBWbGFkaW1pciBLaGFybGFtcGlkaVxuICAgKlxuICAgKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAgICpcbiAgICogUmVsZWFzZWQgb246IE5vdmVtYmVyIDksIDIwMjBcbiAgICovXG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbiAgZnVuY3Rpb24gaXNPYmplY3QkMShvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICdjb25zdHJ1Y3RvcicgaW4gb2JqICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gZXh0ZW5kJDEodGFyZ2V0LCBzcmMpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB2b2lkIDApIHtcbiAgICAgIHRhcmdldCA9IHt9O1xuICAgIH1cblxuICAgIGlmIChzcmMgPT09IHZvaWQgMCkge1xuICAgICAgc3JjID0ge307XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gPT09ICd1bmRlZmluZWQnKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO2Vsc2UgaWYgKGlzT2JqZWN0JDEoc3JjW2tleV0pICYmIGlzT2JqZWN0JDEodGFyZ2V0W2tleV0pICYmIE9iamVjdC5rZXlzKHNyY1trZXldKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4dGVuZCQxKHRhcmdldFtrZXldLCBzcmNba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3NyRG9jdW1lbnQgPSB7XG4gICAgYm9keToge30sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICBhY3RpdmVFbGVtZW50OiB7XG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge30sXG4gICAgICBub2RlTmFtZTogJydcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3IoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGNyZWF0ZUV2ZW50OiBmdW5jdGlvbiBjcmVhdGVFdmVudCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluaXRFdmVudDogZnVuY3Rpb24gaW5pdEV2ZW50KCkge31cbiAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZSgpIHt9LFxuICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZTogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlRWxlbWVudE5TOiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICBpbXBvcnROb2RlOiBmdW5jdGlvbiBpbXBvcnROb2RlKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgaGFzaDogJycsXG4gICAgICBob3N0OiAnJyxcbiAgICAgIGhvc3RuYW1lOiAnJyxcbiAgICAgIGhyZWY6ICcnLFxuICAgICAgb3JpZ2luOiAnJyxcbiAgICAgIHBhdGhuYW1lOiAnJyxcbiAgICAgIHByb3RvY29sOiAnJyxcbiAgICAgIHNlYXJjaDogJydcbiAgICB9XG4gI
24510H07XG5cbiAgZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG4gICAgdmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHt9O1xuICAgIGV4dGVuZCQxKGRvYywgc3NyRG9jdW1lbnQpO1xuICAgIHJldHVybiBkb2M7XG4gIH1cblxuICB2YXIgc3NyV2luZG93ID0ge1xuICAgIGRvY3VtZW50OiBzc3JEb2N1bWVudCxcbiAgICBuYXZpZ2F0b3I6IHtcbiAgICAgIHVzZXJBZ2VudDogJydcbiAgICB9LFxuICAgIGxvY2F0aW9uOiB7XG4gICAgICBoYXNoOiAnJyxcbiAgICAgIGhvc3Q6ICcnLFxuICAgICAgaG9zdG5hbWU6ICcnLFxuICAgICAgaHJlZjogJycsXG4gICAgICBvcmlnaW46ICcnLFxuICAgICAgcGF0aG5hbWU6ICcnLFxuICAgICAgcHJvdG9jb2w6ICcnLFxuICAgICAgc2VhcmNoOiAnJ1xuICAgIH0sXG4gICAgaGlzdG9yeToge1xuICAgICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiByZXBsYWNlU3RhdGUoKSB7fSxcbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKCkge30sXG4gICAgICBnbzogZnVuY3Rpb24gZ28oKSB7fSxcbiAgICAgIGJhY2s6IGZ1bmN0aW9uIGJhY2soKSB7fVxuICAgIH0sXG4gICAgQ3VzdG9tRXZlbnQ6IGZ1bmN0aW9uIEN1c3RvbUV2ZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKCkge30sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHt9LFxuICAgIGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKCkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIEltYWdlOiBmdW5jdGlvbiBJbWFnZSgpIHt9LFxuICAgIERhdGU6IGZ1bmN0aW9uIERhdGUoKSB7fSxcbiAgICBzY3JlZW46IHt9LFxuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIHNldFRpbWVvdXQoKSB7fSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIGNsZWFyVGltZW91dCgpIHt9LFxuICAgIG1hdGNoTWVkaWE6IGZ1bmN0aW9uIG1hdGNoTWVkaWEoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBzZXRUaW
245101lb3V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICAgIH0sXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKSB7XG4gICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuICAgIHZhciB3aW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9O1xuICAgIGV4dGVuZCQxKHdpbiwgc3NyV2luZG93KTtcbiAgICByZXR1cm4gd2luO1xuICB9XG5cbiAgLyoqXG4gICAqIERvbTcgMy4wLjBcbiAgICogTWluaW1hbGlzdGljIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgRE9NIG1hbmlwdWxhdGlvbiwgd2l0aCBhIGpRdWVyeS1jb21wYXRpYmxlIEFQSVxuICAgKiBodHRwczovL2ZyYW1ld29yazcuaW8vZG9jcy9kb203Lmh0bWxcbiAgICpcbiAgICogQ29weXJpZ2h0IDIwMjAsIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gICAqXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICAgKlxuICAgKiBSZWxlYXNlZCBvbjogTm92ZW1iZXIgOSwgMjAyMFxuICAgKi9cblxuICBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICAgIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICAgIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG4gIH1cblxuICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICByZXR1cm4gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgIGlmIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgICB2Y
24510XIgYSA9IFtudWxsXTtcbiAgICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICBpZiAoQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG5cbiAgICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFfaXNOYXRpdmVGdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzcztcblxuICAgICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiBfY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgICB9XG5cbiAgICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxmO1xuICB9XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cblxuICBmdW5jdGlvbiBtYWtlUmVhY3RpdmUob2JqKSB7XG4gICAgdmFyIHByb3RvID0gb2JqLl9fcHJvdG9fXztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19wcm90b19fJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBwcm90bztcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICBwcm90by5fX3Byb3RvX18gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBEb203ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXJyYXkpIHtcbiAgICBfaW5oZXJpdHNMb29zZShEb203LCBfQXJyYXkpO1xuXG4gICAgZnVuY3Rpb24gRG9tNyhpdGVtcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9BcnJheS5jYWxsLmFwcGx5KF9BcnJheSwgW3RoaXNdLmNvbmNhdChpdGVtcykpIHx8IHRoaXM7XG4gICAgICBtYWtlUmVhY3RpdmUoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBEb203O1xuICB9KCAvKiNfX1BVUkVfXyovX3dyYXBOYXRpdmVTdXBlcihBcnJheSkpO1xuXG4gIGZ1bmN0aW9uIGFycmF5RmxhdChhcnIpIHtcbiAgICBpZiAoYXJyID09PSB2b2lkIDApIHtcbiAgICAgIGFyciA9IFtdO1xuICAgIH1cblxuICAgIHZhciByZXMgPSBbXTtcbiAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsKSkge1xuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGFycmF5RmxhdChlbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2goZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBmdW5jdGlvbiBhcnJheUZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhcnIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5VW5pcXVlKGFycikge1xuICAgIHZhciB1bmlxdWVBcnJheSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh1bmlxdWVBcnJheS5pbmRleE9mKGFycltpXSkgPT09IC0xKSB1bmlxdWVBcnJheS5wdXNoKGFycltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXF1ZUFycmF5O1xuICB9XG5cbiAgZnVuY3Rpb24gcXNhKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBbc2VsZWN0b3JdO1xuICAgIH1cblxuICAgIHZhciBhID0gW107XG4gICAgdmFyIHJlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgYS5wdXNoKHJlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIGFyciA9IFtdO1xuXG4gICAgaWYgKCFjb250ZXh0ICYmIHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybi
24510BuZXcgRG9tNyhhcnIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgaHRtbCA9IHNlbGVjdG9yLnRyaW0oKTtcblxuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPCcpID49IDAgJiYgaHRtbC5pbmRleE9mKCc+JykgPj0gMCkge1xuICAgICAgICB2YXIgdG9DcmVhdGUgPSAnZGl2JztcbiAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignPGxpJykgPT09IDApIHRvQ3JlYXRlID0gJ3VsJztcbiAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRyJykgPT09IDApIHRvQ3JlYXRlID0gJ3Rib2R5JztcbiAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRkJykgPT09IDAgfHwgaHRtbC5pbmRleE9mKCc8dGgnKSA9PT0gMCkgdG9DcmVhdGUgPSAndHInO1xuICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dGJvZHknKSA9PT0gMCkgdG9DcmVhdGUgPSAndGFibGUnO1xuICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8b3B0aW9uJykgPT09IDApIHRvQ3JlYXRlID0gJ3NlbGVjdCc7XG4gICAgICAgIHZhciB0ZW1wUGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0b0NyZWF0ZSk7XG4gICAgICAgIHRlbXBQYXJlbnQuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXBQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGFyci5wdXNoKHRlbXBQYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyciA9IHFzYShzZWxlY3Rvci50cmltKCksIGNvbnRleHQgfHwgZG9jdW1lbnQpO1xuICAgICAgfSAvLyBhcnIgPSBxc2Eoc2VsZWN0b3IsIGRvY3VtZW50KTtcblxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgPT09IHdpbmRvdyB8fCBzZWxlY3RvciA9PT0gZG9jdW1lbnQpIHtcbiAgICAgIGFyci5wdXNoKHNlbGVjdG9yKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0b3IpKSB7XG4gICAgICBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSByZXR1cm4gc2VsZWN0b3I7XG4gICAgICBhcnIgPSBzZWxlY3RvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERvbTcoYXJyYXlVbmlxdWUoYXJyKSk7XG4gIH1cblxuICAkLmZuID0gRG9tNy5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gYWRkQ2xhc3MoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBjbGFzc2VzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2Y
24510XIgX2VsJGNsYXNzTGlzdDtcblxuICAgICAgKF9lbCRjbGFzc0xpc3QgPSBlbC5jbGFzc0xpc3QpLmFkZC5hcHBseShfZWwkY2xhc3NMaXN0LCBjbGFzc05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgY2xhc3Nlc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2YXIgX2VsJGNsYXNzTGlzdDI7XG5cbiAgICAgIChfZWwkY2xhc3NMaXN0MiA9IGVsLmNsYXNzTGlzdCkucmVtb3ZlLmFwcGx5KF9lbCRjbGFzc0xpc3QyLCBjbGFzc05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCkge1xuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgY2xhc3Nlc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICBjbGFzc05hbWVzLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc0NsYXNzKCkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgY2xhc3Nlc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gYXJyYXlGaWx0ZXIodGhpcywgZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gICAgICB9KS5sZW5ndGggPiAwO1xuICAgIH0pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyKGF0dHJzLCB2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhdHRycyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEdldCBhdHRyXG4gICAgICBpZiAodGhpc1swXSkgcmV0dXJuIHRoaXNbMF0uZ2V0QXR0cmlidXRlKGF0dHJzKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSAvLyBTZXQgYXR0cnNcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBmb3IgKHZhciBhdHRyTmFtZSBpbiBhdHRycykge1xuICAgICAgICAgIHRoaXNbaV1bYXR0ck5hbWVdID0gYXR0cnNbYXR0ck5hbWVdO1xuICAgICAgICAgIHRoaXNbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyc1thdHRyTmFtZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBdHRyKGF0dHIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtKHRyYW5zZm9ybSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdGhpc1tpXS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uJDEoZHVyYXRpb24pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uICE9PSAnc3RyaW5nJyA/IGR1cmF0aW9uICsgXCJtc1wiIDogZHVyYXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBvbigpIHtcbiAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICB9XG5cbiAgICB2YXIgZXZlbnRUeXBlID0gYXJnc1swXSxcbiAgICAgICAgdGFyZ2V0U2VsZWN0b3IgPSBhcmdzWzFdLFxuICAgICAgICBsaXN0ZW5lciA9IGFyZ3NbMl0sXG4gICAgICAgIGNhcHR1cmUgPSBhcmdzWzNdO1xuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBldmVudFR5cGUgPSBhcmdzWzBdO1xuICAgICAgbGlzdGVuZXIgPSBhcmdzWzFdO1xuICAgICAgY2FwdHVyZSA9IGFyZ3NbMl07XG4gICAgICB0YXJnZXRTZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWNhcHR1cmUpIGNhcHR1cmUgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUxpdmVFdmVudChlKSB7XG4gICAgICB2Y
24510XIgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuICAgICAgdmFyIGV2ZW50RGF0YSA9IGUudGFyZ2V0LmRvbTdFdmVudERhdGEgfHwgW107XG5cbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkKHRhcmdldCkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7ZWxzZSB7XG4gICAgICAgIHZhciBfcGFyZW50cyA9ICQodGFyZ2V0KS5wYXJlbnRzKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgX3BhcmVudHMubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgICAgICBpZiAoJChfcGFyZW50c1trXSkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseShfcGFyZW50c1trXSwgZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGUpIHtcbiAgICAgIHZhciBldmVudERhdGEgPSBlICYmIGUudGFyZ2V0ID8gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXSA6IFtdO1xuXG4gICAgICBpZiAoZXZlbnREYXRhLmluZGV4T2YoZSkgPCAwKSB7XG4gICAgICAgIGV2ZW50RGF0YS51bnNoaWZ0KGUpO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIHZhciBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcbiAgICB2YXIgajtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGVsID0gdGhpc1tpXTtcblxuICAgICAgaWYgKCF0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVycykgZWwuZG9tN0xpc3RlbmVycyA9IHt9O1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVyc1tldmVudF0pIGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgICAgZWwuZG9tN0xpc3RlbmVyc1tldmVudF0ucHVzaCh7XG4gICAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgICAgICBwcm94eUxpc3RlbmVyOiBoYW5kbGVFdmVudFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGl2ZSBldmVudHNcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHZhciBfZXZlbnQgPSBldmVudHNbal07XG4gICAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVycykgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgICBpZiAoIWVsLmRvbTdMaXZlTGlzdGVuZXJzW19ldmVudF0pIGVsLmRvbTdMaXZlTGlzdGVuZXJzW19ldmVudF0gPSBbXTtcblxuICAgICAgICAgIGVsLmRvbTdMaXZlTGlzdGVuZXJzW19ldmVudF0ucHVzaCh7XG4gICAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgICAgICBwcm94eUxpc3RlbmVyOiBoYW5kbGVMaXZlRXZlbnRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoX2V2ZW50LCBoYW5kbGVMaXZlRXZlbnQsIGNhcHR1cmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBvZmYoKSB7XG4gICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50VHlwZSA9IGFyZ3NbMF0sXG4gICAgICAgIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXSxcbiAgICAgICAgbGlzdGVuZXIgPSBhcmdzWzJdLFxuICAgICAgICBjYXB0dXJlID0gYXJnc1szXTtcblxuICAgIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXZlbnRUeXBlID0gYXJnc1swXTtcbiAgICAgIGxpc3RlbmVyID0gYXJnc1sxXTtcbiAgICAgIGNhcHR1cmUgPSBhcmdzWzJdO1xuICAgICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFjYXB0dXJlKSBjYXB0dXJlID0gZmFsc2U7XG4gICAgdmFyIGV2ZW50cyA9IGV2ZW50VHlwZS5zcGxpdCgnICcpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBldmVudCA9IGV2ZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXNbal07XG4gICAgICAgIHZhciBoYW5kbGVycyA9IHZvaWQgMDtcblxuICAgICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBoYW5kbGVycyA9IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFuZGxlcnMgJiYgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yICh2YXIgayA9IGhhbmRsZXJzLmxlbmd0aCAtIDE7IGsgPj0gMDsgayAtPSAxKSB7XG4gICAgICAgICAgICB2Y
24510XIgaGFuZGxlciA9IGhhbmRsZXJzW2tdO1xuXG4gICAgICAgICAgICBpZiAobGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKGssIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiB0cmlnZ2VyKCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgIGZvciAodmFyIF9sZW45ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOSksIF9rZXk5ID0gMDsgX2tleTkgPCBfbGVuOTsgX2tleTkrKykge1xuICAgICAgYXJnc1tfa2V5OV0gPSBhcmd1bWVudHNbX2tleTldO1xuICAgIH1cblxuICAgIHZhciBldmVudHMgPSBhcmdzWzBdLnNwbGl0KCcgJyk7XG4gICAgdmFyIGV2ZW50RGF0YSA9IGFyZ3NbMV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpc1tqXTtcblxuICAgICAgICBpZiAod2luZG93LkN1c3RvbUV2ZW50KSB7XG4gICAgICAgICAgdmFyIGV2dCA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICAgIGRldGFpbDogZXZlbnREYXRhLFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibG
24510U6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbC5kb203RXZlbnREYXRhID0gYXJncy5maWx0ZXIoZnVuY3Rpb24gKGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFJbmRleCA+IDA7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgIGVsLmRvbTdFdmVudERhdGEgPSBbXTtcbiAgICAgICAgICBkZWxldGUgZWwuZG9tN0V2ZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCQxKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRvbSA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGUpO1xuICAgICAgZG9tLm9mZigndHJhbnNpdGlvbmVuZCcsIGZpcmVDYWxsQmFjayk7XG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBkb20ub24oJ3RyYW5zaXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lucykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChpbmNsdWRlTWFyZ2lucykge1xuICAgICAgICB2YXIgX3N0eWxlcyA9IHRoaXMuc3R5bGVzKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0V2lkdGggKyBwYXJzZU
24510Zsb2F0KF9zdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXJpZ2h0JykpICsgcGFyc2VGbG9hdChfc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICAgIHZhciBfc3R5bGVzMiA9IHRoaXMuc3R5bGVzKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdChfc3R5bGVzMi5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tdG9wJykpICsgcGFyc2VGbG9hdChfc3R5bGVzMi5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tYm90dG9tJykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBvZmZzZXQoKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgICB2YXIgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICB2Y
24510XIgY2xpZW50VG9wID0gZWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XG4gICAgICB2YXIgY2xpZW50TGVmdCA9IGVsLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gZWwgPT09IHdpbmRvdyA/IHdpbmRvdy5zY3JvbGxZIDogZWwuc2Nyb2xsVG9wO1xuICAgICAgdmFyIHNjcm9sbExlZnQgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFggOiBlbC5zY3JvbGxMZWZ0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBib3gudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wLFxuICAgICAgICBsZWZ0OiBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGVzKCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICBpZiAodGhpc1swXSkgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzcyhwcm9wcywgdmFsdWUpIHtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gLmNzcygnd2lkdGgnKVxuICAgICAgICBpZiAodGhpc1swXSkgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gLmNzcyh7IHdpZHRoOiAnMTAwcHgnIH0pXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgZm9yICh2YXIgX3Byb3AgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uc3R5bGVbX3Byb3BdID0gcHJvcHNbX3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIC5jc3MoJ3dpZHRoJywgJzEwMHB4JylcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcHNdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gZWFjaChjYWxsYmFjaykge1xuICAgIGlmICghY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7XG4gICAgICBjYWxsYmFjay5hcHBseShlbCwgW2VsLCBpbmRleF0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdCA9IGFycmF5RmlsdGVyKHRoaXMsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gJChyZXN1bHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbChodG1sKSB7XG4gICAgaWYgKHR5cGVvZiBodG1sID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLmlubmVySFRNTCA6IG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLmlubmVySFRNTCA9IGh0bWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KHRleHQpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpc1swXSA/IHRoaXNbMF0udGV4dENvbnRlbnQudHJpbSgpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gaXMoc2VsZWN0b3IpIHtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgIHZhciBjb21wYXJlV2l0aDtcbiAgICB2YXIgaTtcbiAgICBpZiAoIWVsIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZWwubWF0Y2hlcykgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgaWYgKGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcikgcmV0dXJuIGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBpZiAoZWwubXNNYXRjaGVzU2VsZWN0b3IpIHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBjb21wYXJlV2l0aCA9ICQoc2VsZWN0b3IpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcGFyZVdpdGgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0b3IgPT09IGRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gZWwgPT09IGRvY3VtZW50O1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gd2luZG93KSB7XG4gICAgICByZXR1cm4gZWwgPT09IHdpbmRvdztcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICBjb21wYXJlV2l0aCA9IHNlbGVjdG9yLm5vZGVUeXBlID8gW3NlbGVjdG9yXSA6IHNlbGVjdG9yO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcGFyZVdpdGgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybi
24510BmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpbmRleCgpIHtcbiAgICB2YXIgY2hpbGQgPSB0aGlzWzBdO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBpID0gMDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgaSArPSAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZXEoaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHRoaXM7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXG4gICAgaWYgKGluZGV4ID4gbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuICQoW10pO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHZhciByZXR1cm5JbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgICAgaWYgKHJldHVybkluZGV4IDwgMCkgcmV0dXJuICQoW10pO1xuICAgICAgcmV0dXJuICQoW3RoaXNbcmV0dXJuSW5kZXhdXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICQoW3RoaXNbaW5kZXhdXSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmQoKSB7XG4gICAgdmFyIG5ld0NoaWxkO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50cy5sZW5ndGg7IGsgKz0gMSkge1xuICAgICAgbmV3Q2hpbGQgPSBrIDwgMCB8fCBhcmd1bWVudHMubGVuZ3RoIDw9IGsgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNba107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcblxuICAgICAgICAgIHdoaWxlICh0ZW1wRGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZChuZXdDaGlsZFtqXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwZW5kKG5ld0NoaWxkKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICB2YXIgaTtcbiAgICB2YXIgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2Y
24510XIgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IG5ld0NoaWxkO1xuXG4gICAgICAgIGZvciAoaiA9IHRlbXBEaXYuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBqID49IDA7IGogLT0gMSkge1xuICAgICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKHRlbXBEaXYuY2hpbGROb2Rlc1tqXSwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG5ld0NoaWxkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUobmV3Q2hpbGRbal0sIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dChzZWxlY3Rvcikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcgJiYgJCh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuICQoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJChbXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykgcmV0dXJuICQoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7XG4gICAgICByZXR1cm4gJChbXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICQoW10pO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dEFsbChzZWxlY3Rvcikge1xuICAgIHZhciBuZXh0RWxzID0gW107XG4gICAgdmFyIGVsID0gdGhpc1swXTtcbiAgICBpZiAoIWVsKSByZXR1cm4gJChbXSk7XG5cbiAgICB3aGlsZSAoZWwubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgICB2Y
24510XIgX25leHQgPSBlbC5uZXh0RWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICgkKF9uZXh0KS5pcyhzZWxlY3RvcikpIG5leHRFbHMucHVzaChfbmV4dCk7XG4gICAgICB9IGVsc2UgbmV4dEVscy5wdXNoKF9uZXh0KTtcblxuICAgICAgZWwgPSBfbmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gJChuZXh0RWxzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXYoc2VsZWN0b3IpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzWzBdO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgJChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKS5pcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gJChbZWwucHJldmlvdXNFbGVtZW50U2libGluZ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICQoW10pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykgcmV0dXJuICQoW2VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmddKTtcbiAgICAgIHJldHVybiAkKFtdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmV2QWxsKHNlbGVjdG9yKSB7XG4gICAgdmFyIHByZXZFbHMgPSBbXTtcbiAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgIGlmICghZWwpIHJldHVybiAkKFtdKTtcblxuICAgIHdoaWxlIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgICB2Y
24510XIgX3ByZXYgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJChfcHJldikuaXMoc2VsZWN0b3IpKSBwcmV2RWxzLnB1c2goX3ByZXYpO1xuICAgICAgfSBlbHNlIHByZXZFbHMucHVzaChfcHJldik7XG5cbiAgICAgIGVsID0gX3ByZXY7XG4gICAgfVxuXG4gICAgcmV0dXJuICQocHJldkVscyk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJlbnQoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgaWYgKCQodGhpc1tpXS5wYXJlbnROb2RlKS5pcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICQocGFyZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJlbnRzKHNlbGVjdG9yKSB7XG4gICAgdmFyIHBhcmVudHMgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2Y
24510XIgX3BhcmVudCA9IHRoaXNbaV0ucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgICB3aGlsZSAoX3BhcmVudCkge1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICBpZiAoJChfcGFyZW50KS5pcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChfcGFyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRzLnB1c2goX3BhcmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBfcGFyZW50ID0gX3BhcmVudC5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkKHBhcmVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VzdChzZWxlY3Rvcikge1xuICAgIHZhciBjbG9zZXN0ID0gdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAkKFtdKTtcbiAgICB9XG5cbiAgICBpZiAoIWNsb3Nlc3QuaXMoc2VsZWN0b3IpKSB7XG4gICAgICBjbG9zZXN0ID0gY2xvc2VzdC5wYXJlbnRzKHNlbGVjdG9yKS5lcSgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvc2VzdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgICB2YXIgZm91bmRFbGVtZW50cyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZm91bmQgPSB0aGlzW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHNlbGVjdG9yKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBmb3VuZEVsZW1lbnRzLnB1c2goZm91bmRbal0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkKGZvdW5kRWxlbWVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2Y
24510XIgY2hpbGROb2RlcyA9IHRoaXNbaV0uY2hpbGRyZW47XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBpZiAoIXNlbGVjdG9yIHx8ICQoY2hpbGROb2Rlc1tqXSkuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkKGNoaWxkcmVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUpIHRoaXNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBNZXRob2RzID0ge1xuICAgIGFkZENsYXNzOiBhZGRDbGFzcyxcbiAgICByZW1vdmVDbGFzczogcmVtb3ZlQ2xhc3MsXG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIHRvZ2dsZUNsYXNzOiB0b2dnbGVDbGFzcyxcbiAgICBhdHRyOiBhdHRyLFxuICAgIHJlbW92ZUF0dHI6IHJlbW92ZUF0dHIsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbiQxLFxuICAgIG9uOiBvbixcbiAgICBvZmY6IG9mZixcbiAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQkMSxcbiAgICBvdXRlcldpZHRoOiBvdXRlcldpZHRoLFxuICAgIG91dGVySGVpZ2h0OiBvdXRlckhlaWdodCxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICBjc3M6IGNzcyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIGh0bWw6IGh0bWwsXG4gICAgdGV4dDogdGV4dCxcbiAgICBpczogaXMsXG4gICAgaW5kZXg6IGluZGV4LFxuICAgIGVxOiBlcSxcbiAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgIG5leHQ6IG5leHQsXG4gICAgbmV4dEFsbDogbmV4dEFsbCxcbiAgICBwcmV2OiBwcmV2LFxuICAgIHByZXZBbGw6IHByZXZBbGwsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcGFyZW50czogcGFyZW50cyxcbiAgICBjbG9zZXN0OiBjbG9zZXN0LFxuICAgIGZpbmQ6IGZpbmQsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIHJlbW92ZTogcmVtb3ZlXG4gIH07XG4gIE9iamVjdC5rZXlzKE1ldGhvZHMpLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJC5mbiwgbWV0aG9kTmFtZSwge1xuICAgICAgdmFsdWU6IE1ldGhvZHNbbWV0aG9kTmFtZV0sXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBkZWxldGVQcm9wcyhvYmopIHtcbiAgICB2YXIgb2JqZWN0ID0gb2JqO1xuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7Ly8gbm8gZ2V0dGVyIGZvciBvYmplY3RcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICAgICAgfSBjYXRjaCAoZSkgey8vIHNvbWV0aGluZyBnb3Qgd3JvbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRUaWNrKGNhbGxiYWNrLCBkZWxheSkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxheSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUkMShlbCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICB2YXIgc3R5bGU7XG5cbiAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcbiAgICAgIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuICAgIH1cblxuICAgIGlmICghc3R5bGUgJiYgZWwuY3VycmVudFN0eWxlKSB7XG4gICAgICBzdHlsZSA9IGVsLmN1cnJlbnRTdHlsZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBzdHlsZSA9IGVsLnN0eWxlO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRyYW5zbGF0ZShlbCwgYXhpcykge1xuICAgIGlmIChheGlzID09PSB2b2lkIDApIHtcbiAgICAgIGF4aXMgPSAneCc7XG4gICAgfVxuXG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBtYXRyaXg7XG4gICAgdmFyIGN1clRyYW5zZm9ybTtcbiAgICB2YXIgdHJhbnNmb3JtTWF0cml4O1xuICAgIHZhciBjdXJTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUkMShlbCk7XG5cbiAgICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkge1xuICAgICAgY3VyVHJhbnNmb3JtID0gY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLndlYmtpdFRyYW5zZm9ybTtcblxuICAgICAgaWYgKGN1clRyYW5zZm9ybS5zcGxpdCgnLCcpLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgY3VyVHJhbnNmb3JtID0gY3VyVHJhbnNmb3JtLnNwbGl0KCcsICcpLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgICB9KS5qb2luKCcsICcpO1xuICAgICAgfSAvLyBTb21lIG9sZCB2ZXJzaW9ucyBvZiBXZWJraXQgY2hva2Ugd2hlbiAnbm9uZScgaXMgcGFzc2VkOyBwYXNzXG4gICAgICAvLyBlbXB0eSBzdHJpbmcgaW5zdGVhZCBpbiB0aGlzIGNhc2VcblxuXG4gICAgICB0cmFuc2Zvcm1NYXRyaXggPSBuZXcgd2luZG93LldlYktpdENTU01hdHJpeChjdXJUcmFuc2Zvcm0gPT09ICdub25lJyA/ICcnIDogY3VyVHJhbnNmb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmb3JtTWF0cml4ID0gY3VyU3R5bGUuTW96VHJhbnNmb3JtIHx8IGN1clN0eWxlLk9UcmFuc2Zvcm0gfHwgY3VyU3R5bGUuTXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUubXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpLnJlcGxhY2UoJ3RyYW5zbGF0ZSgnLCAnbWF0cml4KDEsIDAsIDAsIDEsJyk7XG4gICAgICBtYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXgudG9TdHJpbmc
24510oKS5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkgY3VyVHJhbnNmb3JtID0gdHJhbnNmb3JtTWF0cml4Lm00MTsgLy8gQ3JhenkgSUUxMCBNYXRyaXhcbiAgICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pOyAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICAgICAgZWxzZSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFs0XSk7XG4gICAgfVxuXG4gICAgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQyOyAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzEzXSk7IC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgICAgICBlbHNlIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VyVHJhbnNmb3JtIHx8IDA7XG4gIH1cblxuICBmdW5jdGlvbiBpc09iamVjdChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvICE9PSBudWxsICYmIG8uY29uc3RydWN0b3IgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKSA9PT0gJ09iamVjdCc7XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRvID0gT2JqZWN0KGFyZ3VtZW50cy5sZW5ndGggPD0gMCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIG5vRXh0ZW5kID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIG5leHRTb3VyY2UgPSBpIDwgMCB8fCBhcmd1bWVudHMubGVuZ3RoIDw9IGkgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbaV07XG5cbiAgICAgIGlmIChuZXh0U291cmNlICE9PSB1bmRlZmluZWQgJiYgbmV4dFNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICB2Y
24510XIga2V5c0FycmF5ID0gT2JqZWN0LmtleXMoT2JqZWN0KG5leHRTb3VyY2UpKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBub0V4dGVuZC5pbmRleE9mKGtleSkgPCAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCArPSAxKSB7XG4gICAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmV4dFNvdXJjZSwgbmV4dEtleSk7XG5cbiAgICAgICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkICYmIGRlc2MuZW51bWVyYWJsZSkge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgICBpZiAobmV4dFNvdXJjZVtuZXh0S2V5XS5fX3N3aXBlcl9fKSB7XG4gICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IHt9O1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0U291cmNlW25leHRLZXldLl9fc3dpcGVyX18pIHtcbiAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRvW25leHRLZXldLCBuZXh0U291cmNlW25leHRLZXldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0bztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRNb2R1bGVNZXRob2RzKGluc3RhbmNlLCBvYmopIHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgICBPYmplY3Qua2V5cyhvYmpba2V5XSkuZm9yRWFjaChmdW5jdGlvbiAoc3ViS2V5KSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XVtzdWJLZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvYmpba2V5XVtzdWJLZXldID0gb2JqW2tleV1bc3ViS2V5XS5iaW5kKGluc3RhbmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZVtrZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc2VzVG9TZWxlY3RvcihjbGFzc2VzKSB7XG4gICAgaWYgKGNsYXNzZXMgPT09IHZvaWQgMCkge1xuICAgICAgY2xhc3NlcyA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBcIi5cIiArIGNsYXNzZXMudHJpbSgpLnJlcGxhY2UoLyhbXFwuOlxcL10pL2csICdcXFxcJDEnKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgLnJlcGxhY2UoLyAvZywgJy4nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoJGNvbnRhaW5lciwgcGFyYW1zLCBjcmVhdGVFbGVtZW50cywgY2hlY2tQcm9wcykge1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICBpZiAoY3JlYXRlRWxlbWVudHMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNoZWNrUHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIXBhcmFtc1trZXldICYmIHBhcmFtcy5hdXRvID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGNoZWNrUHJvcHNba2V5XTtcbiAgICAgICAgICAkY29udGFpbmVyLmFwcGVuZChlbGVtZW50KTtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICB2YXIgc3VwcG9ydDtcblxuICBmdW5jdGlvbiBjYWxjU3VwcG9ydCgpIHtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG91Y2g6ICEhKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCB3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICEhd2luZG93LlBvaW50ZXJFdmVudCAmJiAnbWF4VG91Y2hQb2ludHMnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+PSAwLFxuICAgICAgb2JzZXJ2ZXI6IGZ1bmN0aW9uIGNoZWNrT2JzZXJ2ZXIoKSB7XG4gICAgICAgIHJldHVybiAnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luZG93IHx8ICdXZWJraXRNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW5kb3c7XG4gICAgICB9KCksXG4gICAgICBwYXNzaXZlTGlzdGVuZXI6IGZ1bmN0aW9uIGNoZWNrUGFzc2l2ZUxpc3RlbmVyKCkge1xuICAgICAgICB2Y
24510XIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUxpc3RlbmVyJywgbnVsbCwgb3B0cyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsvLyBObyBzdXBwb3J0XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlO1xuICAgICAgfSgpLFxuICAgICAgZ2VzdHVyZXM6IGZ1bmN0aW9uIGNoZWNrR2VzdHVyZXMoKSB7XG4gICAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbmRvdztcbiAgICAgIH0oKVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdXBwb3J0KCkge1xuICAgIGlmICghc3VwcG9ydCkge1xuICAgICAgc3VwcG9ydCA9IGNhbGNTdXBwb3J0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvcnQ7XG4gIH1cblxuICB2YXIgZGV2aWNlO1xuXG4gIGZ1bmN0aW9uIGNhbGNEZXZpY2UoX3RlbXApIHtcbiAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLFxuICAgICAgICB1c2VyQWdlbnQgPSBfcmVmLnVzZXJBZ2VudDtcblxuICAgIHZhciBzdXBwb3J0ID0gZ2V0U3VwcG9ydCgpO1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICB2YXIgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtO1xuICAgIHZhciB1YSA9IHVzZXJBZ2VudCB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICB2YXIgZGV2aWNlID0ge1xuICAgICAgaW9zOiBmYWxzZSxcbiAgICAgIGFuZHJvaWQ6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgc2NyZWVuV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoO1xuICAgIHZhciBzY3JlZW5IZWlnaHQgPSB3aW5kb3cuc2NyZWVuLmhlaWdodDtcbiAgICB2YXIgYW5kcm9pZCA9IHVhLm1hdGNoKC8oQW5kcm9pZCk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgdmFyIGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICAgIHZhciBpcG9kID0gdWEubWF0Y2goLyhpUG9kKSguKk9TXFxzKFtcXGRfXSspKT8vKTtcbiAgICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gICAgdmFyIHdpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gJ1dpbjMyJztcbiAgICB2YXIgbWFjb3MgPSBwbGF0Zm9ybSA9PT0gJ01hY0ludGVsJzsgLy8gaVBhZE9zIDEzIGZpeFxuXG4gICAgdmFyIGlQYWRTY3JlZW5zID0gWycxMDI0eDEzNjYnLCAnMTM2NngxMDI0JywgJzgzNHgxMTk0JywgJzExOTR4ODM0JywgJzgzNHgxMTEyJywgJzExMTJ4ODM0JywgJzc2OHgxMDI0JywgJzEwMjR4NzY4JywgJzgyMHgxMTgwJywgJzExODB4ODIwJywgJzgxMHgxMDgwJywgJzEwODB4ODEwJ107XG5cbiAgICBpZiAoIWlwYWQgJiYgbWFjb3MgJiYgc3VwcG9ydC50b3VjaCAmJiBpUGFkU2NyZWVucy5pbmRleE9mKHNjcmVlbldpZHRoICsgXCJ4XCIgKyBzY3JlZW5IZWlnaHQpID49IDApIHtcbiAgICAgIGlwYWQgPSB1YS5tYXRjaCgvKFZlcnNpb24pXFwvKFtcXGQuXSspLyk7XG4gICAgICBpZiAoIWlwYWQpIGlwYWQgPSBbMCwgMSwgJzEzXzBfMCddO1xuICAgICAgbWFjb3MgPSBmYWxzZTtcbiAgICB9IC8vIEFuZHJvaWRcblxuXG4gICAgaWYgKGFuZHJvaWQgJiYgIXdpbmRvd3MpIHtcbiAgICAgIGRldmljZS5vcyA9ICdhbmRyb2lkJztcbiAgICAgIGRldmljZS5hbmRyb2lkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXBhZCB8fCBpcGhvbmUgfHwgaXBvZCkge1xuICAgICAgZGV2aWNlLm9zID0gJ2lvcyc7XG4gICAgICBkZXZpY2UuaW9zID0gdHJ1ZTtcbiAgICB9IC8vIEV4cG9ydCBvYmplY3RcblxuXG4gICAgcmV0dXJuIGRldmljZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERldmljZShvdmVycmlkZXMpIHtcbiAgICBpZiAob3ZlcnJpZGVzID09PSB2b2lkIDApIHtcbiAgICAgIG92ZXJyaWRlcyA9IHt9O1xuICAgIH1cblxuICAgIGlmICghZGV2aWNlKSB7XG4gICAgICBkZXZpY2UgPSBjYWxjRGV2aWNlKG92ZXJyaWRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRldmljZTtcbiAgfVxuXG4gIHZhciBicm93c2VyO1xuXG4gIGZ1bmN0aW9uIGNhbGNCcm93c2VyKCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgIGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiB1YS5pbmRleE9mKCdzYWZhcmknKSA+PSAwICYmIHVhLmluZGV4T2YoJ2Nocm9tZScpIDwgMCAmJiB1YS5pbmRleE9mKCdhbmRyb2lkJykgPCAwO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc0VkZ2U6ICEhd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2UvZyksXG4gICAgICBpc1NhZmFyaTogaXNTYWZhcmkoKSxcbiAgICAgIGlzV2ViVmlldzogLyhpUGhvbmV8aVBvZHxpUGFkKS4qQXBwbGVXZWJLaXQoPyEuKlNhZmFyaSkvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCcm93c2VyKCkge1xuICAgIGlmICghYnJvd3Nlcikge1xuICAgICAgYnJvd3NlciA9IGNhbGNCcm93c2VyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXI7XG4gIH1cblxuICB2YXIgc3VwcG9ydHNSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIHN1cHBvcnRzUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgfTtcblxuICB2Y
24510XIgUmVzaXplID0ge1xuICAgIG5hbWU6ICdyZXNpemUnLFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIHJlc2l6ZToge1xuICAgICAgICAgIG9ic2VydmVyOiBudWxsLFxuICAgICAgICAgIGNyZWF0ZU9ic2VydmVyOiBmdW5jdGlvbiBjcmVhdGVPYnNlcnZlcigpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLnJlc2l6ZS5vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykge1xuICAgICAgICAgICAgICB2YXIgd2lkdGggPSBzd2lwZXIud2lkdGgsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQgPSBzd2lwZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICB2YXIgbmV3V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgdmFyIG5ld0hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRCb3hTaXplID0gX3JlZi5jb250ZW50Qm94U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFJlY3QgPSBfcmVmLmNvbnRlbnRSZWN0LFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gc3dpcGVyLmVsKSByZXR1cm47XG4gICAgICAgICAgICAgICAgbmV3V2lkdGggPSBjb250ZW50UmVjdCA/IGNvbnRlbnRSZWN0LndpZHRoIDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5pbmxpbmVTaXplO1xuICAgICAgICAgICAgICAgIG5ld0hlaWdodCA9IGNvbnRlbnRSZWN0ID8gY29udGVudFJlY3QuaGVpZ2h0IDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5ibG9ja1NpemU7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChuZXdXaWR0aCAhPT0gd2lkdGggfHwgbmV3SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBzd2lwZXIucmVzaXplLnJlc2l6ZUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzd2lwZXIucmVzaXplLm9ic2VydmVyLm9ic2VydmUoc3dpcGVyLmVsKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbW92ZU9ic2VydmVyOiBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcigpIHtcbiAgICAgICAgICAgIGlmIChzd2lwZXIucmVzaXplLm9ic2VydmVyICYmIHN3aXBlci5yZXNpemUub2JzZXJ2ZXIudW5vYnNlcnZlICYmIHN3aXBlci5lbCkge1xuICAgICAgICAgICAgICBzd2lwZXIucmVzaXplLm9ic2VydmVyLnVub2JzZXJ2ZShzd2lwZXIuZWwpO1xuICAgICAgICAgICAgICBzd2lwZXIucmVzaXplLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2l6ZUhhbmRsZXI6IGZ1bmN0aW9uIHJlc2l6ZUhhbmRsZXIoKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdyZXNpemUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcjogZnVuY3Rpb24gb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKCkge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnb3JpZW50YXRpb25jaGFuZ2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5yZXNpemVPYnNlcnZlciAmJiBzdXBwb3J0c1Jlc2l6ZU9ic2VydmVyKCkpIHtcbiAgICAgICAgICBzd2lwZXIucmVzaXplLmNyZWF0ZU9ic2VydmVyKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIEVtaXQgcmVzaXplXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3dpcGVyLnJlc2l6ZS5yZXNpemVIYW5kbGVyKTsgLy8gRW1pdCBvcmllbnRhdGlvbmNoYW5nZVxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICB2Y
24510XIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICAgIHN3aXBlci5yZXNpemUucmVtb3ZlT2JzZXJ2ZXIoKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcik7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIE9ic2VydmVyID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24gYXR0YWNoKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIE9ic2VydmVyRnVuYyA9IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJraXRNdXRhdGlvbk9ic2VydmVyO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgIC8vIFRoZSBvYnNlcnZlclVwZGF0ZSBldmVudCBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gb25jZSBkZXNwaXRlIHRoZSBudW1iZXIgb2YgbXV0YXRpb25zLiAgQWRkaXRpb25hbFxuICAgICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvYnNlcnZlclVwZGF0ZSA9IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdvYnNlcnZlclVwZGF0ZScsIG11dGF0aW9uc1swXSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9ic2VydmVyVXBkYXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChvYnNlcnZlclVwZGF0ZSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgICBjaGlsZExpc3Q6IHR5cGVvZiBvcHRpb25zLmNoaWxkTGlzdCA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGlsZExpc3QsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHR5cGVvZiBvcHRpb25zLmNoYXJhY3RlckRhdGEgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hhcmFjdGVyRGF0YVxuICAgICAgfSk7XG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuc3VwcG9ydC5vYnNlcnZlciB8fCAhc3dpcGVyLnBhcmFtcy5vYnNlcnZlcikgcmV0dXJuO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5vYnNlcnZlUGFyZW50cykge1xuICAgICAgICB2Y
24510XIgY29udGFpbmVyUGFyZW50cyA9IHN3aXBlci4kZWwucGFyZW50cygpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGFpbmVyUGFyZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goY29udGFpbmVyUGFyZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gT2JzZXJ2ZSBjb250YWluZXJcblxuXG4gICAgICBzd2lwZXIub2JzZXJ2ZXIuYXR0YWNoKHN3aXBlci4kZWxbMF0sIHtcbiAgICAgICAgY2hpbGRMaXN0OiBzd2lwZXIucGFyYW1zLm9ic2VydmVTbGlkZUNoaWxkcmVuXG4gICAgICB9KTsgLy8gT2JzZXJ2ZSB3cmFwcGVyXG5cbiAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goc3dpcGVyLiR3cmFwcGVyRWxbMF0sIHtcbiAgICAgICAgYXR0cmlidXRlczogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLm9ic2VydmVyLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5vYnNlcnZlci5vYnNlcnZlcnMgPSBbXTtcbiAgICB9XG4gIH07XG4gIHZhciBPYnNlcnZlciQxID0ge1xuICAgIG5hbWU6ICdvYnNlcnZlcicsXG4gICAgcGFyYW1zOiB7XG4gICAgICBvYnNlcnZlcjogZmFsc2UsXG4gICAgICBvYnNlcnZlUGFyZW50czogZmFsc2UsXG4gICAgICBvYnNlcnZlU2xpZGVDaGlsZHJlbjogZmFsc2VcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgb2JzZXJ2ZXI6IF9leHRlbmRzKHt9LCBPYnNlcnZlciwge1xuICAgICAgICAgIG9ic2VydmVyczogW11cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5vYnNlcnZlci5pbml0KCk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLm9ic2VydmVyLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIG1vZHVsYXIgPSB7XG4gICAgdXNlUGFyYW1zOiBmdW5jdGlvbiB1c2VQYXJhbXMoaW5zdGFuY2VQYXJhbXMpIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7XG4gICAgICBpZiAoIWluc3RhbmNlLm1vZHVsZXMpIHJldHVybjtcbiAgICAgIE9iamVjdC5rZXlzKGluc3RhbmNlLm1vZHVsZXMpLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbmNlLm1vZHVsZXNbbW9kdWxlTmFtZV07IC8vIEV4dGVuZCBwYXJhbXNcblxuICAgICAgICBpZiAobW9kdWxlLnBhcmFtcykge1xuICAgICAgICAgIGV4dGVuZChpbnN0YW5jZVBhcmFtcywgbW9kdWxlLnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdXNlTW9kdWxlczogZnVuY3Rpb24gdXNlTW9kdWxlcyhtb2R1bGVzUGFyYW1zKSB7XG4gICAgICBpZiAobW9kdWxlc1BhcmFtcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgIG1vZHVsZXNQYXJhbXMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlID0gdGhpcztcbiAgICAgIGlmICghaW5zdGFuY2UubW9kdWxlcykgcmV0dXJuO1xuICAgICAgT2JqZWN0LmtleXMoaW5zdGFuY2UubW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgICAgICB2Y
24510XIgbW9kdWxlID0gaW5zdGFuY2UubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZXNQYXJhbXNbbW9kdWxlTmFtZV0gfHwge307IC8vIEFkZCBldmVudCBsaXN0ZW5lcnNcblxuICAgICAgICBpZiAobW9kdWxlLm9uICYmIGluc3RhbmNlLm9uKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLm9uKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVFdmVudE5hbWUpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLm9uKG1vZHVsZUV2ZW50TmFtZSwgbW9kdWxlLm9uW21vZHVsZUV2ZW50TmFtZV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IC8vIE1vZHVsZSBjcmVhdGUgY2FsbGJhY2tcblxuXG4gICAgICAgIGlmIChtb2R1bGUuY3JlYXRlKSB7XG4gICAgICAgICAgbW9kdWxlLmNyZWF0ZS5iaW5kKGluc3RhbmNlKShtb2R1bGVQYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgdmFyIGV2ZW50c0VtaXR0ZXIgPSB7XG4gICAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgICB2YXIgbWV0aG9kID0gcHJpb3JpdHkgPyAndW5zaGlmdCcgOiAncHVzaCc7XG4gICAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XVttZXRob2RdKGhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9LFxuICAgIG9uY2U6IGZ1bmN0aW9uIG9uY2UoZXZlbnRzLCBoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcblxuICAgICAgZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgICAgIHNlbGYub2ZmKGV2ZW50cywgb25jZUhhbmRsZXIpO1xuXG4gICAgICAgIGlmIChvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSkge1xuICAgICAgICAgIGRlbGV0ZSBvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSA9IGhhbmRsZXI7XG4gICAgICByZXR1cm4gc2VsZi5vbihldmVudHMsIG9uY2VIYW5kbGVyLCBwcmlvcml0eSk7XG4gICAgfSxcbiAgICBvbkFueTogZnVuY3Rpb24gb25BbnkoaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgICB2Y
24510XIgbWV0aG9kID0gcHJpb3JpdHkgPyAndW5zaGlmdCcgOiAncHVzaCc7XG5cbiAgICAgIGlmIChzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5pbmRleE9mKGhhbmRsZXIpIDwgMCkge1xuICAgICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVyc1ttZXRob2RdKGhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9LFxuICAgIG9mZkFueTogZnVuY3Rpb24gb2ZmQW55KGhhbmRsZXIpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICghc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgICAgdmFyIGluZGV4ID0gc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMuaW5kZXhPZihoYW5kbGVyKTtcblxuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSxcbiAgICBvZmY6IGZ1bmN0aW9uIG9mZihldmVudHMsIGhhbmRsZXIpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyID09PSB
24510oYW5kbGVyIHx8IGV2ZW50SGFuZGxlci5fX2VtaXR0ZXJQcm94eSAmJiBldmVudEhhbmRsZXIuX19lbWl0dGVyUHJveHkgPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgICB2YXIgZXZlbnRzO1xuICAgICAgdmFyIGRhdGE7XG4gICAgICB2YXIgY29udGV4dDtcblxuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgIGV2ZW50cyA9IGFyZ3NbMF07XG4gICAgICAgIGRhdGEgPSBhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKTtcbiAgICAgICAgY29udGV4dCA9IHNlbGY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHMgPSBhcmdzWzBdLmV2ZW50cztcbiAgICAgICAgZGF0YSA9IGFyZ3NbMF0uZGF0YTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnVuc2hpZnQoY29udGV4dCk7XG4gICAgICB2Y
24510XIgZXZlbnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGV2ZW50cykgPyBldmVudHMgOiBldmVudHMuc3BsaXQoJyAnKTtcbiAgICAgIGV2ZW50c0FycmF5LmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChzZWxmLmV2ZW50c0FueUxpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBbZXZlbnRdLmNvbmNhdChkYXRhKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VsZi5ldmVudHNMaXN0ZW5lcnMgJiYgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmFwcGx5KGNvbnRleHQsIGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuXG4gICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zLndpZHRoICE9PSAndW5kZWZpbmVkJyAmJiBzd2lwZXIucGFyYW1zLndpZHRoICE9PSBudWxsKSB7XG4gICAgICB3aWR0aCA9IHN3aXBlci5wYXJhbXMud2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gJGVsWzBdLmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy5oZWlnaHQgIT09ICd1bmRlZmluZWQnICYmIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgICBoZWlnaHQgPSBzd2lwZXIucGFyYW1zLmhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVpZ2h0ID0gJGVsWzBdLmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICBpZiAod2lkdGggPT09IDAgJiYgc3dpcGVyLmlzSG9yaXpvbnRhbCgpIHx8IGhlaWdodCA9PT0gMCAmJiBzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTdWJ0cmFjdCBwYWRkaW5nc1xuXG5cbiAgICB3aWR0aCA9IHdpZHRoIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1sZWZ0JykgfHwgMCwgMTApIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1yaWdodCcpIHx8IDAsIDEwKTtcbiAgICBoZWlnaHQgPSBoZWlnaHQgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXRvcCcpIHx8IDAsIDEwKSAtIHBhcnNlSW50KCRlbC5jc3MoJ3BhZGRpbmctYm90dG9tJykgfHwgMCwgMTApO1xuICAgIGlmIChOdW1iZXIuaXNOYU4od2lkdGgpKSB3aWR0aCA9IDA7XG4gICAgaWYgKE51bWJlci5pc05hTihoZWlnaHQpKSBoZWlnaHQgPSAwO1xuICAgIGV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgc2l6ZTogc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gd2lkdGggOiBoZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlcygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGdldERpcmVjdGlvbkxhYmVsKHByb3BlcnR5KSB7XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICAgIH0gLy8gcHJldHRpZXItaWdub3JlXG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3dpZHRoJzogJ2hlaWdodCcsXG4gICAgICAgICdtYXJnaW4tdG9wJzogJ21hcmdpbi1sZWZ0JyxcbiAgICAgICAgJ21hcmdpbi1ib3R0b20gJzogJ21hcmdpbi1yaWdodCcsXG4gICAgICAgICdtYXJnaW4tbGVmdCc6ICdtYXJnaW4tdG9wJyxcbiAgICAgICAgJ21hcmdpbi1yaWdodCc6ICdtYXJnaW4tYm90dG9tJyxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCc6ICdwYWRkaW5nLXRvcCcsXG4gICAgICAgICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICAgJ21hcmdpblJpZ2h0JzogJ21hcmdpbkJvdHRvbSdcbiAgICAgIH1bcHJvcGVydHldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERpcmVjdGlvblByb3BlcnR5VmFsdWUobm9kZSwgbGFiZWwpIHtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KG5vZGUuZ2V0UHJvcGVydHlWYWx1ZShnZXREaXJlY3Rpb25MYWJlbChsYWJlbCkpIHx8IDApO1xuICAgIH1cblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgIHN3aXBlclNpemUgPSBzd2lwZXIuc2l6ZSxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgd3JvbmdSVEwgPSBzd2lwZXIud3JvbmdSVEw7XG4gICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgdmFyIHByZXZpb3VzU2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIHZhciBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKTtcbiAgICB2YXIgc2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHNsaWRlcy5sZW5ndGg7XG4gICAgdmFyIHNuYXBHcmlkID0gW107XG4gICAgdmFyIHNsaWRlc0dyaWQgPSBbXTtcbiAgICB2YXIgc2xpZGVzU2l6ZXNHcmlkID0gW107XG4gICAgdmFyIG9mZnNldEJlZm9yZSA9IHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmU7XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldEJlZm9yZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZS5jYWxsKHN3aXBlcik7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldEFmdGVyID0gcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXRBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIuY2FsbChzd2lwZXIpO1xuICAgIH1cblxuICAgI
24510HZhciBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICB2YXIgcHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoID0gc3dpcGVyLnNsaWRlc0dyaWQubGVuZ3RoO1xuICAgIHZhciBzcGFjZUJldHdlZW4gPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIHZhciBzbGlkZVBvc2l0aW9uID0gLW9mZnNldEJlZm9yZTtcbiAgICB2YXIgcHJldlNsaWRlU2l6ZSA9IDA7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIGlmICh0eXBlb2Ygc3dpcGVyU2l6ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICBzcGFjZUJldHdlZW4gPSBwYXJzZUZsb2F0KHNwYWNlQmV0d2Vlbi5yZXBsYWNlKCclJywgJycpKSAvIDEwMCAqIHN3aXBlclNpemU7XG4gICAgfVxuXG4gICAgc3dpcGVyLnZpcnR1YWxTaXplID0gLXNwYWNlQmV0d2VlbjsgLy8gcmVzZXQgbWFyZ2luc1xuXG4gICAgaWYgKHJ0bCkgc2xpZGVzLmNzcyh7XG4gICAgICBtYXJnaW5MZWZ0OiAnJyxcbiAgICAgIG1hcmdpblRvcDogJydcbiAgICB9KTtlbHNlIHNsaWRlcy5jc3Moe1xuICAgICAgbWFyZ2luUmlnaHQ6ICcnLFxuICAgICAgbWFyZ2luQm90dG9tOiAnJ1xuICAgIH0pO1xuICAgIHZhciBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzO1xuXG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxKSB7XG4gICAgICBpZiAoTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSA9PT0gc2xpZGVzTGVuZ3RoIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pIHtcbiAgICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IHNsaWRlc0xlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBNYXRoLmNlaWwoc2xpZGVzTGVuZ3RoIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJyAmJiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ3JvdycpIHtcbiAgICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IE1hdGgubWF4KHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MsIHBhcmFtcy5zbGlkZXNQZXJWaWV3ICogcGFyYW1zLnNsaWRlc1BlckNvbHVtbik7XG4gICAgICB9XG4gICAgfSAvLyBDYWxjIHNsaWRlc1xuXG5cbiAgICB2YXIgc2xpZGVTaXplO1xuICAgIHZhciBzbGlkZXNQZXJDb2x1bW4gPSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgIHZhciBzbGlkZXNQZXJSb3cgPSBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzIC8gc2xpZGVzUGVyQ29sdW1uO1xuICAgIHZhciBudW1GdWxsQ29sdW1ucyA9IE1hdGguZmxvb3Ioc2xpZGVzTGVuZ3RoIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZVNpemUgPSAwO1xuICAgICAgdmFyIHNsaWRlID0gc2xpZGVzLmVxKGkpO1xuXG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgICAgLy8gU2V0IHNsaWRlcyBvcmRlclxuICAgICAgICB2Y
24510XIgbmV3U2xpZGVPcmRlckluZGV4ID0gdm9pZCAwO1xuICAgICAgICB2YXIgY29sdW1uID0gdm9pZCAwO1xuICAgICAgICB2YXIgcm93ID0gdm9pZCAwO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ3JvdycgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwID4gMSkge1xuICAgICAgICAgIHZhciBncm91cEluZGV4ID0gTWF0aC5mbG9vcihpIC8gKHBhcmFtcy5zbGlkZXNQZXJHcm91cCAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pKTtcbiAgICAgICAgICB2YXIgc2xpZGVJbmRleEluR3JvdXAgPSBpIC0gcGFyYW1zLnNsaWRlc1BlckNvbHVtbiAqIHBhcmFtcy5zbGlkZXNQZXJHcm91cCAqIGdyb3VwSW5kZXg7XG4gICAgICAgICAgdmFyIGNvbHVtbnNJbkdyb3VwID0gZ3JvdXBJbmRleCA9PT0gMCA/IHBhcmFtcy5zbGlkZXNQZXJHcm91cCA6IE1hdGgubWluKE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gZ3JvdXBJbmRleCAqIHNsaWRlc1BlckNvbHVtbiAqIHBhcmFtcy5zbGlkZXNQZXJHcm91cCkgLyBzbGlkZXNQZXJDb2x1bW4pLCBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgICAgICAgIHJvdyA9IE1hdGguZmxvb3Ioc2xpZGVJbmRleEluR3JvdXAgLyBjb2x1bW5zSW5Hcm91cCk7XG4gICAgICAgICAgY29sdW1uID0gc2xpZGVJbmRleEluR3JvdXAgLSByb3cgKiBjb2x1bW5zSW5Hcm91cCArIGdyb3VwSW5kZXggKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICAgICAgbmV3U2xpZGVPcmRlckluZGV4ID0gY29sdW1uICsgcm93ICogc2xpZGVzTnVtYmVyRXZlblRvUm93cyAvIHNsaWRlc1BlckNvbHVtbjtcbiAgICAgICAgICBzbGlkZS5jc3Moe1xuICAgICAgICAgICAgJy13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXAnOiBuZXdTbGlkZU9yZGVySW5kZXgsXG4gICAgICAgICAgICAnLW1vei1ib3gtb3JkaW5hbC1ncm91cCc6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICctbXMtZmxleC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICctd2Via2l0LW9yZGVyJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgb3JkZXI6IG5ld1NsaWRlT3JkZXJJbmRleFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAnY29sdW1uJykge1xuICAgICAgICAgIGNvbHVtbiA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgICAgcm93ID0gaSAtIGNvbHVtbiAqIHNsaWRlc1BlckNvbHVtbjtcblxuICAgICAgICAgIGlmIChjb2x1bW4gPiBudW1GdWxsQ29sdW1ucyB8fCBjb2x1bW4gPT09IG51bUZ1bGxDb2x1bW5zICYmIHJvdyA9PT0gc2xpZGVzUGVyQ29sdW1uIC0gMSkge1xuICAgICAgICAgICAgcm93ICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChyb3cgPj0gc2xpZGVzUGVyQ29sdW1uKSB7XG4gICAgICAgICAgICAgIHJvdyA9IDA7XG4gICAgICAgICAgICAgIGNvbHVtbiArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKGkgLyBzbGlkZXNQZXJSb3cpO1xuICAgICAgICAgIGNvbHVtbiA9IGkgLSByb3cgKiBzbGlkZXNQZXJSb3c7XG4gICAgICAgIH1cblxuICAgICAgICBzbGlkZS5jc3MoZ2V0RGlyZWN0aW9uTGFiZWwoJ21hcmdpbi10b3AnKSwgcm93ICE9PSAwICYmIHBhcmFtcy5zcGFjZUJldHdlZW4gJiYgcGFyYW1zLnNwYWNlQmV0d2VlbiArIFwicHhcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzbGlkZS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgICB2Y
24510XIgc2xpZGVTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKHNsaWRlWzBdKTtcbiAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgIHZhciBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuXG4gICAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtID0gJ25vbmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRXZWJLaXRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBzbGlkZVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnbm9uZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHNsaWRlLm91dGVyV2lkdGgodHJ1ZSkgOiBzbGlkZS5vdXRlckhlaWdodCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICB2YXIgd2lkdGggPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnd2lkdGgnKTtcbiAgICAgICAgICB2YXIgcGFkZGluZ0xlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAncGFkZGluZy1sZWZ0Jyk7XG4gICAgICAgICAgdmFyIHBhZGRpbmdSaWdodCA9IGdldERpcmVjdGlvblByb3BlcnR5VmFsdWUoc2xpZGVTdHlsZXMsICdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICAgdmFyIG1hcmdpbkxlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLWxlZnQnKTtcbiAgICAgICAgICB2Y
24510XIgbWFyZ2luUmlnaHQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLXJpZ2h0Jyk7XG4gICAgICAgICAgdmFyIGJveFNpemluZyA9IHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuICAgICAgICAgIGlmIChib3hTaXppbmcgJiYgYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgICAgICAgIHNsaWRlU2l6ZSA9IHdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX3NsaWRlJCA9IHNsaWRlWzBdLFxuICAgICAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX3NsaWRlJC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICBvZmZzZXRXaWR0aCA9IF9zbGlkZSQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBzbGlkZVNpemUgPSB3aWR0aCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0ICsgKG9mZnNldFdpZHRoIC0gY2xpZW50V2lkdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtID0gY3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtID0gY3VycmVudFdlYktpdFRyYW5zZm9ybTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVNpemUgPSBNYXRoLmZsb29yKHNsaWRlU2l6ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZVNpemUgPSAoc3dpcGVyU2l6ZSAtIChwYXJhbXMuc2xpZGVzUGVyVmlldyAtIDEpICogc3BhY2VCZXR3ZWVuKSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpO1xuXG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgICBzbGlkZXNbaV0uc3R5bGVbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gc2xpZGVTaXplICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcbiAgICAgIH1cblxuICAgICAgc2xpZGVzU2l6ZXNHcmlkLnB1c2goc2xpZGVTaXplKTtcblxuICAgICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSAvIDIgKyBwcmV2U2xpZGVTaXplIC8gMiArIHNwYWNlQmV0d2VlbjtcbiAgICAgICAgaWYgKHByZXZTbGlkZVNpemUgPT09IDAgJiYgaSAhPT0gMCkgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gLSBzd2lwZXJTaXplIC8gMiAtIHNwYWNlQmV0d2VlbjtcbiAgICAgICAgaWYgKGkgPT09IDApIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gc3dpcGVyU2l6ZSAvIDIgLSBzcGFjZUJldHdlZW47XG4gICAgICAgIGlmIChNYXRoLmFicyhzbGlkZVBvc2l0aW9uKSA8IDEgLyAxMDAwKSBzbGlkZVBvc2l0aW9uID0gMDtcbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlUG9zaXRpb24gPSBNYXRoLmZsb29yKHNsaWRlUG9zaXRpb24pO1xuICAgICAgICBpZiAoaW5kZXggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgICAgaWYgKChpbmRleCAtIE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCkpICUgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgICAgc2xpZGVzR3JpZC5wdXNoKHNsaWRlUG9zaXRpb24pO1xuICAgICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLnZpcnR1YWxTaXplICs9IHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICAgIHByZXZTbGlkZVNpemUgPSBzbGlkZVNpemU7XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cblxuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IE1hdGgubWF4KHN3aXBlci52aXJ0dWFsU2l6ZSwgc3dpcGVyU2l6ZSkgKyBvZmZzZXRBZnRlcjtcbiAgICB2YXIgbmV3U2xpZGVzR3JpZDtcblxuICAgIGlmIChydGwgJiYgd3JvbmdSVEwgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2NvdmVyZmxvdycpKSB7XG4gICAgICAkd3JhcHBlckVsLmNzcyh7XG4gICAgICAgIHdpZHRoOiBzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuICsgXCJweFwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNldFdyYXBwZXJTaXplKSB7XG4gICAgICB2Y
24510XIgXyR3cmFwcGVyRWwkY3NzO1xuXG4gICAgICAkd3JhcHBlckVsLmNzcygoXyR3cmFwcGVyRWwkY3NzID0ge30sIF8kd3JhcHBlckVsJGNzc1tnZXREaXJlY3Rpb25MYWJlbCgnd2lkdGgnKV0gPSBzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuICsgXCJweFwiLCBfJHdyYXBwZXJFbCRjc3MpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIHZhciBfJHdyYXBwZXJFbCRjc3MyO1xuXG4gICAgICBzd2lwZXIudmlydHVhbFNpemUgPSAoc2xpZGVTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbikgKiBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzO1xuICAgICAgc3dpcGVyLnZpcnR1YWxTaXplID0gTWF0aC5jZWlsKHN3aXBlci52aXJ0dWFsU2l6ZSAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pIC0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcbiAgICAgICR3cmFwcGVyRWwuY3NzKChfJHdyYXBwZXJFbCRjc3MyID0ge30sIF8kd3JhcHBlckVsJGNzczJbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbiArIFwicHhcIiwgXyR3cmFwcGVyRWwkY3NzMikpO1xuXG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIG5ld1NsaWRlc0dyaWQgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc25hcEdyaWQubGVuZ3RoOyBfaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlc0dyaWRJdGVtID0gc25hcEdyaWRbX2ldO1xuICAgICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZXNHcmlkSXRlbSA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZEl0ZW0pO1xuICAgICAgICAgIGlmIChzbmFwR3JpZFtfaV0gPCBzd2lwZXIudmlydHVhbFNpemUgKyBzbmFwR3JpZFswXSkgbmV3U2xpZGVzR3JpZC5wdXNoKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcbiAgICAgIH1cbiAgICB9IC8vIFJlbW92ZSBsYXN0IGdyaWQgZWxlbWVudHMgZGVwZW5kaW5nIG9uIHdpZHRoXG5cblxuICAgIGlmICghcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBuZXdTbGlkZXNHcmlkID0gW107XG5cbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHNuYXBHcmlkLmxlbmd0aDsgX2kyICs9IDEpIHtcbiAgICAgICAgdmFyIF9zbGlkZXNHcmlkSXRlbSA9IHNuYXBHcmlkW19pMl07XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBfc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKF9zbGlkZXNHcmlkSXRlbSk7XG5cbiAgICAgICAgaWYgKHNuYXBHcmlkW19pMl0gPD0gc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkge1xuICAgICAgICAgIG5ld1NsaWRlc0dyaWQucHVzaChfc2xpZGVzR3JpZEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcblxuICAgICAgaWYgKE1hdGguZmxvb3Ioc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkgLSBNYXRoLmZsb29yKHNuYXBHcmlkW3NuYXBHcmlkLmxlbmd0aCAtIDFdKSA+IDEpIHtcbiAgICAgICAgc25hcEdyaWQucHVzaChzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc25hcEdyaWQubGVuZ3RoID09PSAwKSBzbmFwR3JpZCA9IFswXTtcblxuICAgIGlmIChwYXJhbXMuc3BhY2VCZXR3ZWVuICE9PSAwKSB7XG4gICAgICB2Y
24510XIgX3NsaWRlcyRmaWx0ZXIkY3NzO1xuXG4gICAgICB2YXIga2V5ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHJ0bCA/ICdtYXJnaW5MZWZ0JyA6IGdldERpcmVjdGlvbkxhYmVsKCdtYXJnaW5SaWdodCcpO1xuICAgICAgc2xpZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgc2xpZGVJbmRleCkge1xuICAgICAgICBpZiAoIXBhcmFtcy5jc3NNb2RlKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBpZiAoc2xpZGVJbmRleCA9PT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pLmNzcygoX3NsaWRlcyRmaWx0ZXIkY3NzID0ge30sIF9zbGlkZXMkZmlsdGVyJGNzc1trZXldID0gc3BhY2VCZXR3ZWVuICsgXCJweFwiLCBfc2xpZGVzJGZpbHRlciRjc3MpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5jZW50ZXJlZFNsaWRlc0JvdW5kcykge1xuICAgICAgdmFyIGFsbFNsaWRlc1NpemUgPSAwO1xuICAgICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlU2l6ZVZhbHVlKSB7XG4gICAgICAgIGFsbFNsaWRlc1NpemUgKz0gc2xpZGVTaXplVmFsdWUgKyAocGFyYW1zLnNwYWNlQmV0d2VlbiA/IHBhcmFtcy5zcGFjZUJldHdlZW4gOiAwKTtcbiAgICAgIH0pO1xuICAgICAgYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgICAgdmFyIG1heFNuYXAgPSBhbGxTbGlkZXNTaXplIC0gc3dpcGVyU2l6ZTtcbiAgICAgIHNuYXBHcmlkID0gc25hcEdyaWQubWFwKGZ1bmN0aW9uIChzbmFwKSB7XG4gICAgICAgIGlmIChzbmFwIDwgMCkgcmV0dXJuIC1vZmZzZXRCZWZvcmU7XG4gICAgICAgIGlmIChzbmFwID4gbWF4U25hcCkgcmV0dXJuIG1heFNuYXAgKyBvZmZzZXRBZnRlcjtcbiAgICAgICAgcmV0dXJuIHNuYXA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlckluc3VmZmljaWVudFNsaWRlcykge1xuICAgICAgdmFyIF9hbGxTbGlkZXNTaXplID0gMDtcbiAgICAgIHNsaWRlc1NpemVzR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZVNpemVWYWx1ZSkge1xuICAgICAgICBfYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChwYXJhbXMuc3BhY2VCZXR3ZWVuID8gcGFyYW1zLnNwYWNlQmV0d2VlbiA6IDApO1xuICAgICAgfSk7XG4gICAgICBfYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuXG4gICAgICBpZiAoX2FsbFNsaWRlc1NpemUgPCBzd2lwZXJTaXplKSB7XG4gICAgICAgIHZhciBhbGxTbGlkZXNPZmZzZXQgPSAoc3dpcGVyU2l6ZSAtIF9hbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICAgIHNuYXBHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNuYXAsIHNuYXBJbmRleCkge1xuICAgICAgICAgIHNuYXBHcmlkW3NuYXBJbmRleF0gPSBzbmFwIC0gYWxsU2xpZGVzT2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgICAgc2xpZGVzR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgICAgICBzbGlkZXNHcmlkW3NuYXBJbmRleF0gPSBzbmFwICsgYWxsU2xpZGVzT2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICBzbGlkZXM6IHNsaWRlcyxcbiAgICAgIHNuYXBHcmlkOiBzbmFwR3JpZCxcbiAgICAgIHNsaWRlc0dyaWQ6IHNsaWRlc0dyaWQsXG4gICAgICBzbGlkZXNTaXplc0dyaWQ6IHNsaWRlc1NpemVzR3JpZFxuICAgIH0pO1xuXG4gICAgaWYgKHNsaWRlc0xlbmd0aCAhPT0gcHJldmlvdXNTbGlkZXNMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZXNMZW5ndGhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAoc25hcEdyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgICAgc3dpcGVyLmVtaXQoJ3NuYXBHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlc0dyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZXNHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVBdXRvSGVpZ2h0KHNwZWVkKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZVNsaWRlcyA9IFtdO1xuICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgICB2YXIgbmV3SGVpZ2h0ID0gMDtcbiAgICB2YXIgaTtcblxuICAgIGlmICh0eXBlb2Ygc3BlZWQgPT09ICdudW1iZXInKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCk7XG4gICAgfVxuXG4gICAgdmFyIGdldFNsaWRlQnlJbmRleCA9IGZ1bmN0aW9uIGdldFNsaWRlQnlJbmRleChpbmRleCkge1xuICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnNsaWRlcy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApID09PSBpbmRleDtcbiAgICAgICAgfSlbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzd2lwZXIuc2xpZGVzLmVxKGluZGV4KVswXTtcbiAgICB9OyAvLyBGaW5kIHNsaWRlcyBjdXJyZW50bHkgaW4gdmlld1xuXG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMuZWFjaChmdW5jdGlvbiAoc2xpZGUpIHtcbiAgICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgI
24510H0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IE1hdGguY2VpbChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcpOyBpICs9IDEpIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXggKyBpO1xuICAgICAgICAgIGlmIChpbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoICYmICFpc1ZpcnR1YWwpIGJyZWFrO1xuICAgICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKGdldFNsaWRlQnlJbmRleChpbmRleCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKGdldFNsaWRlQnlJbmRleChzd2lwZXIuYWN0aXZlSW5kZXgpKTtcbiAgICB9IC8vIEZpbmQgbmV3IGhlaWdodCBmcm9tIGhpZ2hlc3Qgc2xpZGUgaW4gdmlld1xuXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgYWN0aXZlU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIGFjdGl2ZVNsaWRlc1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGhlaWdodCA9IGFjdGl2ZVNsaWRlc1tpXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIG5ld0hlaWdodCA9IGhlaWdodCA+IG5ld0hlaWdodCA/IGhlaWdodCA6IG5ld0hlaWdodDtcbiAgICAgIH1cbiAgICB9IC8vIFVwZGF0ZSBIZWlnaHRcblxuXG4gICAgaWYgKG5ld0hlaWdodCkgc3dpcGVyLiR3cmFwcGVyRWwuY3NzKCdoZWlnaHQnLCBuZXdIZWlnaHQgKyBcInB4XCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xpZGVzT2Zmc2V0KCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNsaWRlc1tpXS5zd2lwZXJTbGlkZU9mZnNldCA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHNsaWRlc1tpXS5vZmZzZXRMZWZ0IDogc2xpZGVzW2ldLm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUpIHtcbiAgICBpZiAodHJhbnNsYXRlID09PSB2b2lkIDApIHtcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMgJiYgdGhpcy50cmFuc2xhdGUgfHwgMDtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICBpZiAoc2xpZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygc2xpZGVzWzBdLnN3aXBlclNsaWRlT2Zmc2V0ID09PSAndW5kZWZpbmVkJykgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICAgIHZhciBvZmZzZXRDZW50ZXIgPSAtdHJhbnNsYXRlO1xuICAgIGlmIChydGwpIG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTsgLy8gVmlzaWJsZSBTbGlkZXNcblxuICAgIHNsaWRlcy5yZW1vdmVDbGFzcyhwYXJhbXMuc2xpZGVWaXNpYmxlQ2xhc3MpO1xuICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcyA9IFtdO1xuICAgIHN3aXBlci52aXNpYmxlU2xpZGVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIHNsaWRlID0gc2xpZGVzW2ldO1xuICAgICAgdmFyIHNsaWRlUHJvZ3Jlc3MgPSAob2Zmc2V0Q2VudGVyICsgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5taW5UcmFuc2xhdGUoKSA6IDApIC0gc2xpZGUuc3dpcGVyU2xpZGVPZmZzZXQpIC8gKHNsaWRlLnN3aXBlclNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pO1xuXG4gICAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSB8fCBwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgdmFyIHNsaWRlQmVmb3JlID0gLShvZmZzZXRDZW50ZXIgLSBzbGlkZS5zd2lwZXJTbGlkZU9mZnNldCk7XG4gICAgICAgIHZhciBzbGlkZUFmdGVyID0gc2xpZGVCZWZvcmUgKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2Y
24510XIgaXNWaXNpYmxlID0gc2xpZGVCZWZvcmUgPj0gMCAmJiBzbGlkZUJlZm9yZSA8IHN3aXBlci5zaXplIC0gMSB8fCBzbGlkZUFmdGVyID4gMSAmJiBzbGlkZUFmdGVyIDw9IHN3aXBlci5zaXplIHx8IHNsaWRlQmVmb3JlIDw9IDAgJiYgc2xpZGVBZnRlciA+PSBzd2lwZXIuc2l6ZTtcblxuICAgICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgICAgICAgc2xpZGVzLmVxKGkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2xpZGUucHJvZ3Jlc3MgPSBydGwgPyAtc2xpZGVQcm9ncmVzcyA6IHNsaWRlUHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgc3dpcGVyLnZpc2libGVTbGlkZXMgPSAkKHN3aXBlci52aXNpYmxlU2xpZGVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgaWYgKHR5cGVvZiB0cmFuc2xhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyAtMSA6IDE7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG4gICAgICB0cmFuc2xhdGUgPSBzd2lwZXIgJiYgc3dpcGVyLnRyYW5zbGF0ZSAmJiBzd2lwZXIudHJhbnNsYXRlICogbXVsdGlwbGllciB8fCAwO1xuICAgIH1cblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICB2YXIgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3MsXG4gICAgICAgIGlzQmVnaW5uaW5nID0gc3dpcGVyLmlzQmVnaW5uaW5nLFxuICAgICAgICBpc0VuZCA9IHN3aXBlci5pc0VuZDtcbiAgICB2YXIgd2FzQmVnaW5uaW5nID0gaXNCZWdpbm5pbmc7XG4gICAgdmFyIHdhc0VuZCA9IGlzRW5kO1xuXG4gICAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICBpc0JlZ2lubmluZyA9IHRydWU7XG4gICAgICBpc0VuZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzID0gKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyB0cmFuc2xhdGVzRGlmZjtcbiAgICAgIGlzQmVnaW5uaW5nID0gcHJvZ3Jlc3MgPD0gMDtcbiAgICAgIGlzRW5kID0gcHJvZ3Jlc3MgPj0gMTtcbiAgICB9XG5cbiAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgICBpc0JlZ2lubmluZzogaXNCZWdpbm5pbmcsXG4gICAgICBpc0VuZDogaXNFbmRcbiAgICB9KTtcbiAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSB8fCBwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmF1dG9IZWlnaHQpIHN3aXBlci51cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUpO1xuXG4gICAgaWYgKGlzQmVnaW5uaW5nICYmICF3YXNCZWdpbm5pbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFjaEJlZ2lubmluZyB0b0VkZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbmQgJiYgIXdhc0VuZCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3JlYWNoRW5kIHRvRWRnZScpO1xuICAgIH1cblxuICAgIGlmICh3YXNCZWdpbm5pbmcgJiYgIWlzQmVnaW5uaW5nIHx8IHdhc0VuZCAmJiAhaXNFbmQpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdmcm9tRWRnZScpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdwcm9ncmVzcycsIHByb2dyZXNzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc0NsYXNzZXMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgIHJlYWxJbmRleCA9IHN3aXBlci5yZWFsSW5kZXg7XG4gICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgc2xpZGVzLnJlbW92ZUNsYXNzKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzICsgXCIgXCIgKyBwYXJhbXMuc2xpZGVOZXh0Q2xhc3MgKyBcIiBcIiArIHBhcmFtcy5zbGlkZVByZXZDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MgKyBcIiBcIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlUHJldkNsYXNzKTtcbiAgICB2YXIgYWN0aXZlU2xpZGU7XG5cbiAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICBhY3RpdmVTbGlkZSA9IHN3aXBlci4kd3JhcHBlckVsLmZpbmQoXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGFjdGl2ZUluZGV4ICsgXCJcXFwiXVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZlU2xpZGUgPSBzbGlkZXMuZXEoYWN0aXZlSW5kZXgpO1xuICAgIH0gLy8gQWN0aXZlIGNsYXNzZXNcblxuXG4gICAgYWN0aXZlU2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICAvLyBEdXBsaWNhdGUgdG8gYWxsIGxvb3BlZCBzbGlkZXNcbiAgICAgIGlmIChhY3RpdmVTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCI6bm90KC5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl1cIikuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCIuXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl1cIikuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MpO1xuICAgICAgfVxuICAgIH0gLy8gTmV4dCBTbGlkZVxuXG5cbiAgICB2YXIgbmV4dFNsaWRlID0gYWN0aXZlU2xpZGUubmV4dEFsbChcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzKS5lcSgwKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy5sb29w
24510ICYmIG5leHRTbGlkZS5sZW5ndGggPT09IDApIHtcbiAgICAgIG5leHRTbGlkZSA9IHNsaWRlcy5lcSgwKTtcbiAgICAgIG5leHRTbGlkZS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpO1xuICAgIH0gLy8gUHJldiBTbGlkZVxuXG5cbiAgICB2YXIgcHJldlNsaWRlID0gYWN0aXZlU2xpZGUucHJldkFsbChcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzKS5lcSgwKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVQcmV2Q2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wICYmIHByZXZTbGlkZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHByZXZTbGlkZSA9IHNsaWRlcy5lcSgtMSk7XG4gICAgICBwcmV2U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgICAgaWYgKG5leHRTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCI6bm90KC5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIG5leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpICsgXCJcXFwiXVwiKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCIuXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIG5leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpICsgXCJcXFwiXVwiKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldlNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIjpub3QoLlwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MgKyBcIilbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgKyBcIlxcXCJdXCIpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgKyBcIlxcXCJdXCIpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXRTbGlkZXNDbGFzc2VzKCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVBY3RpdmVJbmRleChuZXdBY3RpdmVJbmRleCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICAgIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkLFxuICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgICAgICBwcmV2aW91c1JlYWxJbmRleCA9IHN3aXBlci5yZWFsSW5kZXgsXG4gICAgICAgIHByZXZpb3VzU25hcEluZGV4ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBuZXdBY3RpdmVJbmRleDtcbiAgICB2YXIgc25hcEluZGV4O1xuXG4gICAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSAtIChzbGlkZXNHcmlkW2kgKyAxXSAtIHNsaWRlc0dyaWRbaV0pIC8gMikge1xuICAgICAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0gJiYgdHJhbnNsYXRlIDwgc2xpZGVzR3JpZFtpICsgMV0pIHtcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZSA+PSBzbGlkZXNHcmlkW2ldKSB7XG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9IC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG5cblxuICAgICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICAgIGlmIChhY3RpdmVJbmRleCA8IDAgfHwgdHlwZW9mIGFjdGl2ZUluZGV4ID09PSAndW5kZWZpbmVkJykgYWN0aXZlSW5kZXggPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSkgPj0gMCkge1xuICAgICAgc25hcEluZGV4ID0gc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2Y
24510XIgc2tpcCA9IE1hdGgubWluKHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGFjdGl2ZUluZGV4KTtcbiAgICAgIHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChhY3RpdmVJbmRleCAtIHNraXApIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICB9XG5cbiAgICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcblxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKHNuYXBJbmRleCAhPT0gcHJldmlvdXNTbmFwSW5kZXgpIHtcbiAgICAgICAgc3dpcGVyLnNuYXBJbmRleCA9IHNuYXBJbmRleDtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NuYXBJbmRleENoYW5nZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBHZXQgcmVhbCBpbmRleFxuXG5cbiAgICB2YXIgcmVhbEluZGV4ID0gcGFyc2VJbnQoc3dpcGVyLnNsaWRlcy5lcShhY3RpdmVJbmRleCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSB8fCBhY3RpdmVJbmRleCwgMTApO1xuICAgIGV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHNuYXBJbmRleDogc25hcEluZGV4LFxuICAgICAgcmVhbEluZGV4OiByZWFsSW5kZXgsXG4gICAgICBwcmV2aW91c0luZGV4OiBwcmV2aW91c0luZGV4LFxuICAgICAgYWN0aXZlSW5kZXg6IGFjdGl2ZUluZGV4XG4gICAgfSk7XG4gICAgc3dpcGVyLmVtaXQoJ2FjdGl2ZUluZGV4Q2hhbmdlJyk7XG4gICAgc3dpcGVyLmVtaXQoJ3NuYXBJbmRleENoYW5nZScpO1xuXG4gICAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFsSW5kZXhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkIHx8IHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2UnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDbGlja2VkU2xpZGUoZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBzbGlkZSA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcylbMF07XG4gICAgdmFyIHNsaWRlRm91bmQgPSBmYWxzZTtcbiAgICB2YXIgc2xpZGVJbmRleDtcblxuICAgIGlmIChzbGlkZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2ldID09PSBzbGlkZSkge1xuICAgICAgICAgIHNsaWRlRm91bmQgPSB0cnVlO1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlICYmIHNsaWRlRm91bmQpIHtcbiAgICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSBzbGlkZTtcblxuICAgICAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSBwYXJzZUludCgkKHNsaWRlKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gc2xpZGVJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmNsaWNrZWRTbGlkZSA9IHVuZGVmaW5lZDtcbiAgICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zbGlkZVRvQ2xpY2tlZFNsaWRlICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHVuZGVmaW5lZCAmJiBzd2lwZXIuY2xpY2tlZEluZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICB1cGRhdGVTaXplOiB1cGRhdGVTaXplLFxuICAgIHVwZGF0ZVNsaWRlczogdXBkYXRlU2xpZGVzLFxuICAgIHVwZGF0ZUF1dG9IZWlnaHQ6IHVwZGF0ZUF1dG9IZWlnaHQsXG4gICAgdXBkYXRlU2xpZGVzT2Zmc2V0OiB1cGRhdGVTbGlkZXNPZmZzZXQsXG4gICAgdXBkYXRlU2xpZGVzUHJvZ3Jlc3M6IHVwZGF0ZVNsaWRlc1Byb2dyZXNzLFxuICAgIHVwZGF0ZVByb2dyZXNzOiB1cGRhdGVQcm9ncmVzcyxcbiAgICB1cGRhdGVTbGlkZXNDbGFzc2VzOiB1cGRhdGVTbGlkZXNDbGFzc2VzLFxuICAgIHVwZGF0ZUFjdGl2ZUluZGV4OiB1cGRhdGVBY3RpdmVJbmRleCxcbiAgICB1cGRhdGVDbGlja2VkU2xpZGU6IHVwZGF0ZUNsaWNrZWRTbGlkZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldFN3aXBlclRyYW5zbGF0ZShheGlzKSB7XG4gICAgaWYgKGF4aXMgPT09IHZvaWQgMCkge1xuICAgICAgYXhpcyA9IHRoaXMuaXNIb3Jpem9udGFsKCkgPyAneCcgOiAneSc7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgIHRyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGUsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcblxuICAgIGlmIChwYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkge1xuICAgICAgcmV0dXJuIHJ0bCA/IC10cmFuc2xhdGUgOiB0cmFuc2xhdGU7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50VHJhbnNsYXRlID0gZ2V0VHJhbnNsYXRlKCR3cmFwcGVyRWxbMF0sIGF4aXMpO1xuICAgIGlmIChydGwpIGN1cnJlbnRUcmFuc2xhdGUgPSAtY3VycmVudFRyYW5zbGF0ZTtcbiAgICByZXR1cm4gY3VycmVudFRyYW5zbGF0ZSB8fCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgI
24510HBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICAgICAgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gICAgdmFyIHggPSAwO1xuICAgIHZhciB5ID0gMDtcbiAgICB2YXIgeiA9IDA7XG5cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICB4ID0gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgeSA9IHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgeCA9IE1hdGguZmxvb3IoeCk7XG4gICAgICB5ID0gTWF0aC5mbG9vcih5KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHdyYXBwZXJFbFtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAteCA6IC15O1xuICAgIH0gZWxzZSBpZiAoIXBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgICAkd3JhcHBlckVsLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIFwiICsgeiArIFwicHgpXCIpO1xuICAgIH1cblxuICAgIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHggOiB5OyAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSBwcm9ncmVzc1xuXG4gICAgdmFyIG5ld1Byb2dyZXNzO1xuICAgIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcblxuICAgIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgICAgbmV3UHJvZ3Jlc3MgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiBtaW5UcmFuc2xhdGUoKSB7XG4gICAgcmV0dXJuIC10aGlzLnNuYXBHcmlkWzBdO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF4VHJhbnNsYXRlKCkge1xuICAgIHJldHVybiAtdGhpcy5zbmFwR3JpZFt0aGlzLnNuYXBHcmlkLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlVG8odHJhbnNsYXRlLCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCB0cmFuc2xhdGVCb3VuZHMsIGludGVybmFsKSB7XG4gICAgaWYgKHRyYW5zbGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB0cmFuc2xhdGUgPSAwO1xuICAgIH1cblxuICAgIGlmIChzcGVlZCA9PT0gdm9pZCAwKSB7XG4gICAgICBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIH1cblxuICAgIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNsYXRlQm91bmRzID09PSB2b2lkIDApIHtcbiAgICAgIHRyYW5zbGF0ZUJvdW5kcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHdyYXBwZXJFbCA9IHN3aXBlci53cmFwcGVyRWw7XG5cbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICB2YXIgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgIHZhciBuZXdUcmFuc2xhdGU7XG4gICAgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPiBtaW5UcmFuc2xhdGUpIG5ld1RyYW5zbGF0ZSA9IG1pblRyYW5zbGF0ZTtlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMgJiYgdHJhbnNsYXRlIDwgbWF4VHJhbnNsYXRlKSBuZXdUcmFuc2xhdGUgPSBtYXhUcmFuc2xhdGU7ZWxzZSBuZXdUcmFuc2xhdGUgPSB0cmFuc2xhdGU7IC8vIFVwZGF0ZSBwcm9ncmVzc1xuXG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHZhciBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG5cbiAgICAgIGlmIChzcGVlZCA9PT0gMCkge1xuICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAod3JhcHBlckVsLnNjcm9sbFRvKSB7XG4gICAgICAgICAgdmFyIF93cmFwcGVyRWwkc2Nyb2xsVG87XG5cbiAgICAgICAgICB3cmFwcGVyRWwuc2Nyb2xsVG8oKF93cmFwcGVyRWwkc2Nyb2xsVG8gPSB7fSwgX3dyYXBwZXJFbCRzY3JvbGxUb1tpc0ggPyAnbGVmdCcgOiAndG9wJ10gPSAtbmV3VHJhbnNsYXRlLCBfd3JhcHBlckVsJHNjcm9sbFRvLmJlaGF2aW9yID0gJ3Ntb290aCcsIF93cmFwcGVyRWwkc2Nyb2xsVG8pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuXG4gICAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICAgI
24510HN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICAgIGlmIChydW5DYWxsYmFja3MpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCkge1xuICAgICAgICAgIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IG51bGw7XG4gICAgICAgICAgICBkZWxldGUgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcblxuICAgICAgICAgICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgICAgICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciB0cmFuc2xhdGUgPSB7XG4gICAgZ2V0VHJhbnNsYXRlOiBnZXRTd2lwZXJUcmFuc2xhdGUsXG4gICAgc2V0VHJhbnNsYXRlOiBzZXRUcmFuc2xhdGUsXG4gICAgbWluVHJhbnNsYXRlOiBtaW5UcmFuc2xhdGUsXG4gICAgbWF4VHJhbnNsYXRlOiBtYXhUcmFuc2xhdGUsXG4gICAgdHJhbnNsYXRlVG86IHRyYW5zbGF0ZVRvXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zaXRpb24nLCBkdXJhdGlvbiwgYnlDb250cm9sbGVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MsIGRpcmVjdGlvbikge1xuICAgIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHByZXZpb3VzSW5kZXggPSBzd2lwZXIucHJldmlvdXNJbmRleDtcbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHJldHVybjtcblxuICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICB9XG5cbiAgICB2YXIgZGlyID0gZGlyZWN0aW9uO1xuXG4gICAgaWYgKCFkaXIpIHtcbiAgICAgIGlmIChhY3RpdmVJbmRleCA+IHByZXZpb3VzSW5kZXgpIGRpciA9ICduZXh0JztlbHNlIGlmIChhY3RpdmVJbmRleCA8IHByZXZpb3VzSW5kZXgpIGRpciA9ICdwcmV2JztlbHNlIGRpciA9ICdyZXNldCc7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25TdGFydCcpO1xuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVSZXNldFRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZVRyYW5zaXRpb25TdGFydCcpO1xuXG4gICAgICBpZiAoZGlyID09PSAnbmV4dCcpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlTmV4dFRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pIHtcbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgICAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXgsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgIHZhciBkaXIgPSBkaXJlY3Rpb247XG5cbiAgICBpZiAoIWRpcikge1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgZGlyID0gJ25leHQnO2Vsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgZGlyID0gJ3ByZXYnO2Vsc2UgZGlyID0gJ3Jlc2V0JztcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVSZXNldFRyYW5zaXRpb25FbmQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2VUcmFuc2l0aW9uRW5kJyk7XG5cbiAgICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvbkVuZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25FbmQnKTtcbiAgICAgIH1cbiAgICB9XG4gI
24510H1cblxuICB2YXIgdHJhbnNpdGlvbiA9IHtcbiAgICBzZXRUcmFuc2l0aW9uOiBzZXRUcmFuc2l0aW9uLFxuICAgIHRyYW5zaXRpb25TdGFydDogdHJhbnNpdGlvblN0YXJ0LFxuICAgIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmRcbiAgfTtcblxuICBmdW5jdGlvbiBzbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCwgaW5pdGlhbCkge1xuICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7XG4gICAgICBpbmRleCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHNwZWVkID09PSB2b2lkIDApIHtcbiAgICAgIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwKSB7XG4gICAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInICYmIHR5cGVvZiBpbmRleCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnaW5kZXgnIGFyZ3VtZW50IGNhbm5vdCBoYXZlIHR5cGUgb3RoZXIgdGhhbiAnbnVtYmVyJyBvciAnc3RyaW5nJy4gW1wiICsgdHlwZW9mIGluZGV4ICsgXCJdIGdpdmVuLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ID09PSAnc3RyaW5nJykge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgYGluZGV4YCBhcmd1bWVudCBjb252ZXJ0ZWQgZnJvbSBgc3RyaW5nYCB0byBgbnVtYmVyYC5cbiAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIHZhciBpbmRleEFzTnVtYmVyID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcbiAgICAgIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR
24510oZSBgaW5kZXhgIGFyZ3VtZW50IGlzIGEgdmFsaWQgYG51bWJlcmBcbiAgICAgICAqIGFmdGVyIGJlaW5nIGNvbnZlcnRlZCBmcm9tIHRoZSBgc3RyaW5nYCB0eXBlLlxuICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgKi9cblxuICAgICAgdmFyIGlzVmFsaWROdW1iZXIgPSBpc0Zpbml0ZShpbmRleEFzTnVtYmVyKTtcblxuICAgICAgaWYgKCFpc1ZhbGlkTnVtYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXNzZWQtaW4gJ2luZGV4JyAoc3RyaW5nKSBjb3VsZG4ndCBiZSBjb252ZXJ0ZWQgdG8gJ251bWJlcicuIFtcIiArIGluZGV4ICsgXCJdIGdpdmVuLlwiKTtcbiAgICAgIH0gLy8gS25vd2luZyB0aGF0IHRoZSBjb252ZXJ0ZWQgYGluZGV4YCBpcyBhIHZhbGlkIG51bWJlcixcbiAgICAgIC8vIHdlIGNhbiB1cGRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50J3MgdmFsdWUuXG5cblxuICAgICAgaW5kZXggPSBpbmRleEFzTnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBzbGlkZUluZGV4ID0gaW5kZXg7XG4gICAgaWYgKHNsaWRlSW5kZXggPCAwKSBzbGlkZUluZGV4ID0gMDtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICAgIHNsaWRlc0dyaWQgPSBzd2lwZXIuc2xpZGVzR3JpZCxcbiAgICAgICAgcHJldmlvdXNJbmRleCA9IHN3aXBlci5wcmV2aW91c0luZGV4LFxuICAgICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICAgICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuXG4gICAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbiB8fCAhZW5hYmxlZCAmJiAhaW50ZXJuYWwgJiYgIWluaXRpYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgc2tpcCA9IE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBzbGlkZUluZGV4KTtcbiAgICB2YXIgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKHNsaWRlSW5kZXggLSBza2lwKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxO1xuXG4gICAgaWYgKChhY3RpdmVJbmRleCB8fCBwYXJhbXMuaW5pdGlhbFNsaWRlIHx8IDApID09PSAocHJldmlvdXNJbmRleCB8fCAwKSAmJiBydW5DYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVTbGlkZUNoYW5nZVN0YXJ0Jyk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zbGF0ZSA9IC1zbmFwR3JpZFtzbmFwSW5kZXhdOyAvLyBVcGRhdGUgcHJvZ3Jlc3NcblxuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyh0cmFuc2xhdGUpOyAvLyBOb3JtYWxpemUgc2xpZGVJbmRleFxuXG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPSAtTWF0aC5mbG9vcih0cmFuc2xhdGUgKiAxMDApO1xuICAgICAgICB2Y
24510XIgbm9ybWFsaXplZEdpcmQgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRbaV0gKiAxMDApO1xuICAgICAgICB2YXIgbm9ybWFsaXplZEdyaWROZXh0ID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2kgKyAxXSAqIDEwMCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyAxXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR2lyZCAmJiBub3JtYWxpemVkVHJhbnNsYXRlIDwgbm9ybWFsaXplZEdyaWROZXh0IC0gKG5vcm1hbGl6ZWRHcmlkTmV4dCAtIG5vcm1hbGl6ZWRHaXJkKSAvIDIpIHtcbiAgICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR2lyZCAmJiBub3JtYWxpemVkVHJhbnNsYXRlIDwgbm9ybWFsaXplZEdyaWROZXh0KSB7XG4gICAgICAgICAgICBzbGlkZUluZGV4ID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gbm9ybWFsaXplZEdpcmQpIHtcbiAgICAgICAgICBzbGlkZUluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gRGlyZWN0aW9ucyBsb2Nrc1xuXG5cbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkICYmIHNsaWRlSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiB0cmFuc2xhdGUgPCBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIHRyYW5zbGF0ZSA+IHN3aXBlci50cmFuc2xhdGUgJiYgdHJhbnNsYXRlID4gc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGlmICgoYWN0aXZlSW5kZXggfHwgMCkgIT09IHNsaWRlSW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlyZWN0aW9uO1xuICAgIGlmIChzbGlkZUluZGV4ID4gYWN0aXZlSW5kZXgpIGRpcmVjdGlvbiA9ICduZXh0JztlbHNlIGlmIChzbGlkZUluZGV4IDwgYWN0aXZlSW5kZXgpIGRpcmVjdGlvbiA9ICdwcmV2JztlbHNlIGRpcmVjdGlvbiA9ICdyZXNldCc7IC8vIFVwZGF0ZSBJbmRleFxuXG4gICAgaWYgKHJ0bCAmJiAtdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlIHx8ICFydGwgJiYgdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlKSB7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7IC8vIFVwZGF0ZSBIZWlnaHRcblxuICAgICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgIGlmIChwYXJhbXMuZWZmZWN0ICE9PSAnc2xpZGUnKSB7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICB2Y
24510XIgaXNIID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIHQgPSAtdHJhbnNsYXRlO1xuXG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIHQgPSB3cmFwcGVyRWwuc2Nyb2xsV2lkdGggLSB3cmFwcGVyRWwub2Zmc2V0V2lkdGggLSB0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgaWYgKHdyYXBwZXJFbC5zY3JvbGxUbykge1xuICAgICAgICAgIHZhciBfd3JhcHBlckVsJHNjcm9sbFRvO1xuXG4gICAgICAgICAgd3JhcHBlckVsLnNjcm9sbFRvKChfd3JhcHBlckVsJHNjcm9sbFRvID0ge30sIF93cmFwcGVyRWwkc2Nyb2xsVG9baXNIID8gJ2xlZnQnIDogJ3RvcCddID0gdCwgX3dyYXBwZXJFbCRzY3JvbGxUby5iZWhhdmlvciA9ICdzbW9vdGgnLCBfd3JhcHBlckVsJHNjcm9sbFRvKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcblxuICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICAgICAgZGVsZXRlIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcbiAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVUb0xvb3AoaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHtcbiAgICAgIGluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICB9XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIG5ld0luZGV4ID0gaW5kZXg7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICBuZXdJbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlTmV4dChzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCkge1xuICAgIGlmIChzcGVlZCA9PT0gdm9pZCAwKSB7XG4gICAgICBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIH1cblxuICAgIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgYW5pbWF0aW5nID0gc3dpcGVyLmFuaW1hdGluZyxcbiAgICAgICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuICAgIGlmICghZW5hYmxlZCkgcmV0dXJuIHN3aXBlcjtcbiAgICB2YXIgaW5jcmVtZW50ID0gc3dpcGVyLmFjdGl2ZUluZGV4IDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChhbmltYXRpbmcgJiYgcGFyYW1zLmxvb3BQcmV2ZW50c1NsaWRlKSByZXR1cm4gZmFsc2U7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4ICsgaW5jcmVtZW50LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cblxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbiAgZnVuY3Rpb24gc2xpZGVQcmV2KHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKHNwZWVkID09PSB2b2lkIDApIHtcbiAgICAgIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwKSB7XG4gICAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICAgIH1cblxuICAgI
24510HZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICBhbmltYXRpbmcgPSBzd2lwZXIuYW5pbWF0aW5nLFxuICAgICAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZCxcbiAgICAgICAgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgICAgICBydGxUcmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm4gc3dpcGVyO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBpZiAoYW5pbWF0aW5nICYmIHBhcmFtcy5sb29wUHJldmVudHNTbGlkZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc3dpcGVyLmxvb3BGaXgoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICAgIHN3aXBlci5fY2xpZW50TGVmdCA9IHN3aXBlci4kd3JhcHBlckVsWzBdLmNsaWVudExlZnQ7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zbGF0ZSA9IHJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWwpIHtcbiAgICAgIGlmICh2YWwgPCAwKSByZXR1cm4gLU1hdGguZmxvb3IoTWF0aC5hYnModmFsKSk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwpO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkVHJhbnNsYXRlID0gbm9ybWFsaXplKHRyYW5zbGF0ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTbmFwR3JpZCA9IHNuYXBHcmlkLm1hcChmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplKHZhbCk7XG4gICAgfSk7XG4gICAgc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSldO1xuICAgIHZhciBwcmV2U25hcCA9IHNuYXBHcmlkW25vcm1hbGl6ZWRTbmFwR3JpZC5pbmRleE9mKG5vcm1hbGl6ZWRUcmFuc2xhdGUpIC0gMV07XG5cbiAgICBpZiAodHlwZW9mIHByZXZTbmFwID09PSAndW5kZWZpbmVkJyAmJiBwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc25hcEdyaWQuZm9yRWFjaChmdW5jdGlvbiAoc25hcCkge1xuICAgICAgICBpZiAoIXByZXZTbmFwICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gc25hcCkgcHJldlNuYXAgPSBzbmFwO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZJbmRleDtcblxuICAgIGlmICh0eXBlb2YgcHJldlNuYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwcmV2SW5kZXggPSBzbGlkZXNHcmlkLmluZGV4T2YocHJldlNuYXApO1xuICAgICAgaWYgKHByZXZJbmRleCA8IDApIHByZXZJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHByZXZJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlUmVzZXQoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICB9XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlVG9DbG9zZXN0KHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICB9XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAwLjU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBza2lwID0gTWF0aC5taW4oc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGluZGV4KTtcbiAgICB2YXIgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKGluZGV4IC0gc2tpcCkgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICAgIGlmICh0cmFuc2xhdGUgPj0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF0pIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyYW5zbGF0ZSBpcyBvbiBvciBhZnRlciB0aGUgY3VycmVudCBzbmFwIGluZGV4LCBzbyB0aGUgY2hvaWNlXG4gICAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGFmdGVyIGl0LlxuICAgICAgdmFyIGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgICB2Y
24510XIgbmV4dFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4ICsgMV07XG5cbiAgICAgIGlmICh0cmFuc2xhdGUgLSBjdXJyZW50U25hcCA+IChuZXh0U25hcCAtIGN1cnJlbnRTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgICBpbmRleCArPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmFuc2xhdGUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAgIC8vIGlzIGJldHdlZW4gdGhlIGN1cnJlbnQgaW5kZXggYW5kIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgICAgdmFyIHByZXZTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCAtIDFdO1xuICAgICAgdmFyIF9jdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuXG4gICAgICBpZiAodHJhbnNsYXRlIC0gcHJldlNuYXAgPD0gKF9jdXJyZW50U25hcCAtIHByZXZTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgICBpbmRleCAtPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4ID0gTWF0aC5tYXgoaW5kZXgsIDApO1xuICAgIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHN3aXBlci5zbGlkZXNHcmlkLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhpbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVUb0NsaWNrZWRTbGlkZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBzbGlkZXNQZXJWaWV3ID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyA/IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpIDogcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgdmFyIHNsaWRlVG9JbmRleCA9IHN3aXBlci5jbGlja2VkSW5kZXg7XG4gICAgdmFyIHJlYWxJbmRleDtcblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgaWYgKHN3aXBlci5hbmltYXRpbmcpIHJldHVybjtcbiAgICAgIHJlYWxJbmRleCA9IHBhcnNlSW50KCQoc3dpcGVyLmNsaWNrZWRTbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuXG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIGlmIChzbGlkZVRvSW5kZXggPCBzd2lwZXIubG9vcGVkU2xpZGVzIC0gc2xpZGVzUGVyVmlldyAvIDIgfHwgc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICsgc2xpZGVzUGVyVmlldyAvIDIpIHtcbiAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgIHNsaWRlVG9JbmRleCA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl06bm90KC5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpXCIpLmVxKDApLmluZGV4KCk7XG4gICAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlVG9JbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gc2xpZGVzUGVyVmlldykge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdOm5vdCguXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiKVwiKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGlkZSA9IHtcbiAgICBzbGlkZVRvOiBzbGlkZVRvLFxuICAgIHNsaWRlVG9Mb29wOiBzbGlkZVRvTG9vcCxcbiAgICBzbGlkZU5leHQ6IHNsaWRlTmV4dCxcbiAgICBzbGlkZVByZXY6IHNsaWRlUHJldixcbiAgICBzbGlkZVJlc2V0OiBzbGlkZVJlc2V0LFxuICAgIHNsaWRlVG9DbG9zZXN0OiBzbGlkZVRvQ2xvc2VzdCxcbiAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBzbGlkZVRvQ2xpY2tlZFNsaWRlXG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcENyZWF0ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7IC8vIFJlbW92ZSBkdXBsaWNhdGVkIHNsaWRlc1xuXG4gICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCIuXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykucmVtb3ZlKCk7XG4gICAgdmFyIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG5cbiAgICBpZiAocGFyYW1zLmxvb3BGaWxsR3JvdXBXaXRoQmxhbmspIHtcbiAgICAgIHZhciBibGFua1NsaWRlc051bSA9IHBhcmFtcy5zbGlkZXNQZXJHcm91cCAtIHNsaWRlcy5sZW5ndGggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICAgIGlmIChibGFua1NsaWRlc051bSAhPT0gcGFyYW1zLnNsaWRlc1Blckdyb3VwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxhbmtTbGlkZXNOdW07IGkgKz
245100gMSkge1xuICAgICAgICAgIHZhciBibGFua05vZGUgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlQmxhbmtDbGFzcyk7XG4gICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoYmxhbmtOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgIXBhcmFtcy5sb29wZWRTbGlkZXMpIHBhcmFtcy5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICAgIHN3aXBlci5sb29wZWRTbGlkZXMgPSBNYXRoLmNlaWwocGFyc2VGbG9hdChwYXJhbXMubG9vcGVkU2xpZGVzIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3LCAxMCkpO1xuICAgIHN3aXBlci5sb29wZWRTbGlkZXMgKz0gcGFyYW1zLmxvb3BBZGRpdGlvbmFsU2xpZGVzO1xuXG4gICAgaWYgKHN3aXBlci5sb29wZWRTbGlkZXMgPiBzbGlkZXMubGVuZ3RoKSB7XG4gICAgICBzd2lwZXIubG9vcGVkU2xpZGVzID0gc2xpZGVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgcHJlcGVuZFNsaWRlcyA9IFtdO1xuICAgIHZhciBhcHBlbmRTbGlkZXMgPSBbXTtcbiAgICBzbGlkZXMuZWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7XG4gICAgICB2YXIgc2xpZGUgPSAkKGVsKTtcblxuICAgICAgaWYgKGluZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcykge1xuICAgICAgICBhcHBlbmRTbGlkZXMucHVzaChlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCA8IHNsaWRlcy5sZW5ndGggJiYgaW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpIHtcbiAgICAgICAgcHJlcGVuZFNsaWRlcy5wdXNoKGVsKTtcbiAgICAgIH1cblxuICAgICAgc2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgfSk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXBwZW5kU2xpZGVzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoJChhcHBlbmRTbGlkZXNbX2ldLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaTIgPSBwcmVwZW5kU2xpZGVzLmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTIgLT0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5wcmVwZW5kKCQocHJlcGVuZFNsaWRlc1tfaTJdLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29wRml4KCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVMb29wRml4Jyk7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzLFxuICAgICAgICBsb29wZWRTbGlkZXMgPSBzd2lwZXIubG9vcGVkU2xpZGVzLFxuICAgICAgICBhbGxvd1NsaWRlUHJldiA9IHN3aXBlci5hbGxvd1NsaWRlUHJldixcbiAgICAgICAgYWxsb3dTbGlkZU5leHQgPSBzd2lwZXIuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkLFxuICAgICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgIHZhciBuZXdJbmRleDtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSB0cnVlO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gICAgdmFyIHNuYXBUcmFuc2xhdGUgPSAtc25hcEdyaWRbYWN0aXZlSW5kZXhdO1xuICAgIHZhciBkaWZmID0gc25hcFRyYW5zbGF0ZSAtIHN3aXBlci5nZXRUcmFuc2xhdGUoKTsgLy8gRml4IEZvciBOZWdhdGl2ZSBPdmVyc2xpZGluZ1xuXG4gICAgaWYgKGFjdGl2ZUluZGV4IDwgbG9vcGVkU2xpZGVzKSB7XG4gICAgICBuZXdJbmRleCA9IHNsaWRlcy5sZW5ndGggLSBsb29wZWRTbGlkZXMgKiAzICsgYWN0aXZlSW5kZXg7XG4gICAgICBuZXdJbmRleCArPSBsb29wZWRTbGlkZXM7XG4gICAgICB2Y
24510XIgc2xpZGVDaGFuZ2VkID0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgaWYgKHNsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoKHJ0bCA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZSkgLSBkaWZmKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID49IHNsaWRlcy5sZW5ndGggLSBsb29wZWRTbGlkZXMpIHtcbiAgICAgIC8vIEZpeCBGb3IgUG9zaXRpdmUgT3ZlcnNsaWRpbmdcbiAgICAgIG5ld0luZGV4ID0gLXNsaWRlcy5sZW5ndGggKyBhY3RpdmVJbmRleCArIGxvb3BlZFNsaWRlcztcbiAgICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcblxuICAgICAgdmFyIF9zbGlkZUNoYW5nZWQgPSBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuXG4gICAgICBpZiAoX3NsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoKHJ0bCA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZSkgLSBkaWZmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSBhbGxvd1NsaWRlTmV4dDtcbiAgICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9vcERlc3Ryb3koKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIsLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpLnJlbW92ZSgpO1xuICAgIHNsaWRlcy5yZW1vdmVBdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICB9XG5cbiAgdmFyIGxvb3AgPSB7XG4gICAgbG9vcENyZWF0ZTogbG9vcENyZWF0ZSxcbiAgICBsb29wRml4OiBsb29wRml4LFxuICAgIGxvb3BEZXN0cm95OiBsb29wRGVzdHJveVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldEdyYWJDdXJzb3IobW92aW5nKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5zdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggfHwgc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHJldHVybjtcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xuICAgIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctd2Via2l0LWdyYWJiaW5nJyA6ICctd2Via2l0LWdyYWInO1xuICAgIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctbW96LWdyYWJiaW4nIDogJy1tb3otZ3JhYic7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJ2dyYWJiaW5nJyA6ICdncmFiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2V0R3JhYkN1cnNvcigpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIGlmIChzd2lwZXIuc3VwcG9ydC50b3VjaCB8fCBzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkIHx8IHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXBlci5lbC5zdHlsZS5jdXJzb3IgPSAnJztcbiAgfVxuXG4gIHZhciBncmFiQ3Vyc29yID0ge1xuICAgIHNldEdyYWJDdXJzb3I6IHNldEdyYWJDdXJzb3IsXG4gICAgdW5zZXRHcmFiQ3Vyc29yOiB1bnNldEdyYWJDdXJzb3JcbiAgfTtcblxuICBmdW5jdGlvbiBhcHBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldKSAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXMpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgc3dpcGVyLnN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGVuZFNsaWRlKHNsaWRlcykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIDE7XG5cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldKSAkd3JhcHBlckVsLnByZXBlbmQoc2xpZGVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIHNsaWRlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWwucHJlcGVuZChzbGlkZXMpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgc3dpcGVyLnN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDAsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFNsaWRlKGluZGV4LCBzbGlkZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgYWN0aXZlSW5kZXhCdWZmZXIgPSBhY3RpdmVJbmRleDtcblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgYWN0aXZlSW5kZXhCdWZmZXIgLT0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgc3dpcGVyLnNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VMZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcblxuICAgIGlmIChpbmRleCA8PSAwKSB7XG4gICAgICBzd2lwZXIucHJlcGVuZFNsaWRlKHNsaWRlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID49IGJhc2VMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5hcHBlbmRTbGlkZShzbGlkZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgI
24510HZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyID4gaW5kZXggPyBhY3RpdmVJbmRleEJ1ZmZlciArIDEgOiBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB2YXIgc2xpZGVzQnVmZmVyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gYmFzZUxlbmd0aCAtIDE7IGkgPj0gaW5kZXg7IGkgLT0gMSkge1xuICAgICAgdmFyIGN1cnJlbnRTbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICBjdXJyZW50U2xpZGUucmVtb3ZlKCk7XG4gICAgICBzbGlkZXNCdWZmZXIudW5zaGlmdChjdXJyZW50U2xpZGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBzbGlkZXMubGVuZ3RoOyBfaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbX2ldKSAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXNbX2ldKTtcbiAgICAgIH1cblxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlciA+IGluZGV4ID8gYWN0aXZlSW5kZXhCdWZmZXIgKyBzbGlkZXMubGVuZ3RoIDogYWN0aXZlSW5kZXhCdWZmZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgc2xpZGVzQnVmZmVyLmxlbmd0aDsgX2kyICs9IDEpIHtcbiAgICAgICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlc0J1ZmZlcltfaTJdKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIHN3aXBlci5zdXBwb3J0Lm9ic2VydmVyKSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXggKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlU2xpZGUoc2xpZGVzSW5kZXhlcykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBhY3RpdmVJbmRleEJ1ZmZlciAtPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgICBzd2lwZXIuc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzKTtcbiAgICB9XG5cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB2YXIgaW5kZXhUb1JlbW92ZTtcblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzSW5kZXhlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzSW5kZXhlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNJbmRleGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzW2ldO1xuICAgICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpbmRleFRvUmVtb3ZlXSkgc3dpcGVyLnNsaWRlcy5lcShpbmRleFRvUmVtb3ZlKS5yZW1vdmUoKTtcbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgbmV3QWN0aXZlSW5kZXggLT0gMTtcbiAgICAgIH1cblxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzO1xuICAgICAgaWYgKHN3aXBlci5zbGlkZXNbaW5kZXhUb1JlbW92ZV0pIHN3aXBlci5zbGlkZXMuZXEoaW5kZXhUb1JlbW92ZSkucmVtb3ZlKCk7XG4gICAgICBpZiAoaW5kZXhUb1JlbW92ZSA8IG5ld0FjdGl2ZUluZGV4KSBuZXdBY3RpdmVJbmRleCAtPSAxO1xuICAgICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgIH1cblxuICAgIGlmICghKHBhcmFtcy5vYnNlcnZlciAmJiBzd2lwZXIuc3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4ICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCwgMCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUFsbFNsaWRlcygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgc2xpZGVzSW5kZXhlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgfVxuXG4gICAgc3dpcGVyLnJlbW92ZVNsaWRlKHNsaWRlc0luZGV4ZXMpO1xuICB9XG5cbiAgdmFyIG1hbmlwdWxhdGlvbiA9IHtcbiAgICBhcHBlbmRTbGlkZTogYXBwZW5kU2xpZGUsXG4gICAgcHJlcGVuZFNsaWRlOiBwcmVwZW5kU2xpZGUsXG4gICAgYWRkU2xpZGU6IGFkZFNsaWRlLFxuICAgIHJlbW92ZVNsaWRlOiByZW1vdmVTbGlkZSxcbiAgICByZW1vdmVBbGxTbGlkZXM6IHJlbW92ZUFsbFNsaWRlc1xuICB9O1xuXG4gIGZ1bmN0aW9uIG9uVG91Y2hTdGFydChldmVudCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG5cbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSBlID0gZS5vcmlnaW5hbEV2ZW50O1xuICAgIHZhciAkdGFyZ2V0RWwgPSAkKGUudGFyZ2V0KTtcblxuICAgIGlmIChwYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICd3cmFwcGVyJykge1xuICAgICAgaWYgKCEkdGFyZ2V0RWwuY2xvc2VzdChzd2lwZXIud3JhcHBlckVsKS5sZW5ndGgpIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmlzVG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuICAgIGlmICghZGF0YS5pc1RvdWNoRXZlbnQgJiYgJ3doaWNoJyBpbiBlICYmIGUud2hpY2ggPT09IDMpIHJldHVybjtcbiAgICBpZiAoIWRhdGEuaXNUb3VjaEV2ZW50ICYmICdidXR0b24nIGluIGUgJiYgZS5idXR0b24gPiAwKSByZXR1cm47XG4gICAgaWYgKGRhdGEuaXNUb3VjaGVkICYmIGRhdGEuaXNNb3ZlZCkgcmV0dXJuOyAvLyBjaGFuZ2UgdGFyZ2V0IGVsIGZvciBzaGFkb3cgcm9vdCBjb21wb25lbmV0XG5cbiAgICB2YXIgc3dpcGluZ0NsYXNzSGFzVmFsdWUgPSAhIXBhcmFtcy5ub1N3aXBpbmdDbGFzcyAmJiBwYXJhbXMubm9Td2lwaW5nQ2xhc3MgIT09ICcnO1xuXG4gICAgaWYgKHN3aXBpbmdDbGFzc0hhc1ZhbHVlICYmIGUudGFyZ2V0ICYmIGUudGFyZ2V0LnNoYWRvd1Jvb3QgJiYgZXZlbnQucGF0aCAmJi
24510BldmVudC5wYXRoWzBdKSB7XG4gICAgICAkdGFyZ2V0RWwgPSAkKGV2ZW50LnBhdGhbMF0pO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubm9Td2lwaW5nICYmICR0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA/IHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA6IFwiLlwiICsgcGFyYW1zLm5vU3dpcGluZ0NsYXNzKVswXSkge1xuICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc3dpcGVIYW5kbGVyKSB7XG4gICAgICBpZiAoISR0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5zd2lwZUhhbmRsZXIpWzBdKSByZXR1cm47XG4gICAgfVxuXG4gICAgdG91Y2hlcy5jdXJyZW50WCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICB0b3VjaGVzLmN1cnJlbnRZID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIHZhciBzdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICAgIHZhciBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZOyAvLyBEbyBOT1Qgc3RhcnQgaWYgaU9TIGVkZ2Ugc3dpcGUgaXMgZGV0ZWN0ZWQuIE90aGVyd2lzZSBpT1MgYXBwIGNhbm5vdCBzd2lwZS10by1nby1iYWNrIGFueW1vcmVcblxuICAgIHZhciBlZGdlU3dpcGVEZXRlY3Rpb24gPSBwYXJhbXMuZWRnZVN3aXBlRGV0ZWN0aW9uIHx8IHBhcmFtcy5pT1NFZGdlU3dpcGVEZXRlY3Rpb247XG4gICAgdmFyIGVkZ2VTd2lwZVRocmVzaG9sZCA9IHBhcmFtcy5lZGdlU3dpcGVUaHJlc2hvbGQgfHwgcGFyYW1zLmlPU0VkZ2VTd2lwZVRocmVzaG9sZDtcblxuICAgIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gJiYgKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQgfHwgc3RhcnRYID49IHdpbmRvdy5pbm5lcldpZHRoIC0gZWRnZVN3aXBlVGhyZXNob2xkKSkge1xuICAgICAgaWYgKGVkZ2VTd2lwZURldGVjdGlvbiA9PT0gJ3ByZXZlbnQnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXh0ZW5kKGRhdGEsIHtcbiAgICAgIGlzVG91Y2hlZDogdHJ1ZSxcbiAgICAgIGlzTW92ZWQ6IGZhbHNlLFxuICAgICAgYWxsb3dUb3VjaENhbGxiYWNrczogdHJ1ZSxcbiAgICAgIGlzU2Nyb2xsaW5nOiB1bmRlZmluZWQsXG4gICAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgdG91Y2hlcy5zdGFydFggPSBzdGFydFg7XG4gICAgdG91Y2hlcy5zdGFydFkgPSBzdGFydFk7XG4gICAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICAgIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyYW1zLnRocmVzaG9sZCA+IDApIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gZmFsc2U7XG5cbiAgICBpZiAoZS50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoJHRhcmdldEVsLmlzKGRhdGEuZm9ybUVsZW1lbnRzKSkgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcblxuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhkYXRhLmZvcm1FbGVtZW50cykgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gJHRhcmdldEVsWzBdKSB7XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdCAmJiBzd2lwZXIuYWxsb3dUb3VjaE1vdmUgJiYgcGFyYW1zLnRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDtcblxuICAgICAgaWYgKChwYXJhbXMudG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQgfHwgc2hvdWxkUHJldmVudERlZmF1bHQpICYmICEkdGFyZ2V0RWxbMF0uaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCd0b3VjaFN0YXJ0JywgZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblRvdWNoTW92ZShldmVudCkge1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICB0b3VjaGVzID0gc3dpcGVyLnRvdWNoZXMsXG4gICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgIGVuYWJsZWQgPSBzd2lwZXIuZW5hYmxlZDtcbiAgICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgICB2YXIgZSA9IGV2ZW50O1xuICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBpZiAoZGF0YS5zdGFydE1vdmluZyAmJiBkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGUudHlwZSAhPT0gJ3RvdWNobW92ZScpIHJldHVybjtcbiAgICB2YXIgdGFyZ2V0VG91Y2ggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnICYmIGUudGFyZ2V0VG91Y2hlcyAmJiAoZS50YXJnZXRUb3VjaGVzWzBdIHx8IGUuY2hhbmdlZFRvdWNoZXNbMF0pO1xuICAgIHZhciBwYWdlWCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWCA6IGUucGFnZVg7XG4gICAgdmFyIHBhZ2VZID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IHRhcmdldFRvdWNoLnBhZ2VZIDogZS5wYWdlWTtcblxuICAgIGlmIChlLnByZXZlbnRlZEJ5TmVzdGVkU3dpcGVyKSB7XG4gICAgICB0b3VjaGVzLnN0YXJ0WCA9IHBhZ2VYO1xuICAgICAgdG91Y2hlcy5zdGFydFkgPSBwYWdlWTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5hbGxvd1RvdWNoTW92ZSkge1xuICAgICAgLy8gaXNNb3ZlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuXG4gICAgICBpZiAoZGF0YS5pc1RvdWNoZWQpIHtcbiAgICAgICAgZXh0ZW5kKHRvdWNoZXMsIHtcbiAgICAgICAgICBzdGFydFg6IHBhZ2VYLFxuICAgICAgICAgIHN0YXJ0WTogcGFnZVksXG4gICAgICAgICAgY3VycmVudFg6IHBhZ2VYLFxuICAgICAgICAgIGN1cnJlbnRZOiBwYWdlWVxuICAgICAgICB9KTtcbiAgICAgICAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzICYmICFwYXJhbXMubG9vcCkge1xuICAgICAgaWYgKHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgICAgLy8gVmVydGljYWxcbiAgICAgICAgaWYgKHBhZ2VZIDwgdG91Y2hlcy5zdGFydFkgJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVkgPiB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VYIDwgdG91Y2hlcy5zdGFydFggJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVggPiB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAkKGUudGFyZ2V0KS5pcyhkYXRhLmZvcm1FbGVtZW50cykpIHtcbiAgICAgICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmUnLCBlKTtcbiAgICB9XG5cbiAgICBpZiAoZS50YXJnZXRUb3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPiAxKSByZXR1cm47XG4gICAgdG91Y2hlcy5jdXJyZW50WCA9IHBhZ2VYO1xuICAgIHRvdWNoZXMuY3VycmVudFkgPSBwYWdlWTtcbiAgICB2YXIgZGlmZlggPSB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFg7XG4gICAgdmFyIGRpZmZZID0gdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnRocmVzaG9sZCAmJiBNYXRoLnNxcnQoTWF0aC5wb3coZGlmZlgsIDIpICsgTWF0aC5wb3coZGlmZlksIDIpKSA8IHN3aXBlci5wYXJhbXMudGhyZXNob2xkKSByZXR1cm47XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuaXNTY3JvbGxpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2Y
24510XIgdG91Y2hBbmdsZTtcblxuICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRZID09PSB0b3VjaGVzLnN0YXJ0WSB8fCBzd2lwZXIuaXNWZXJ0aWNhbCgpICYmIHRvdWNoZXMuY3VycmVudFggPT09IHRvdWNoZXMuc3RhcnRYKSB7XG4gICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAoZGlmZlggKiBkaWZmWCArIGRpZmZZICogZGlmZlkgPj0gMjUpIHtcbiAgICAgICAgICB0b3VjaEFuZ2xlID0gTWF0aC5hdGFuMihNYXRoLmFicyhkaWZmWSksIE1hdGguYWJzKGRpZmZYKSkgKiAxODAgLyBNYXRoLlBJO1xuICAgICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUgOiA5MCAtIHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuc3RhcnRNb3ZpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodG91Y2hlcy5jdXJyZW50WCAhPT0gdG91Y2hlcy5zdGFydFggfHwgdG91Y2hlcy5jdXJyZW50WSAhPT0gdG91Y2hlcy5zdGFydFkpIHtcbiAgICAgICAgZGF0YS5zdGFydE1vdmluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLnN0YXJ0TW92aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcblxuICAgIGlmICghcGFyYW1zLmNzc01vZGUgJiYgZS5jYW5jZWxhYmxlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50b3VjaE1vdmVTdG9wUHJvcGFnYXRpb24gJiYgIXBhcmFtcy5uZXN0ZWQpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmlzTW92ZWQpIHtcbiAgICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnN0YXJ0VHJhbnNsYXRlID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpO1xuICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG5cbiAgICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnRyaWdnZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZCcpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSBmYWxzZTsgLy8gR3JhYiBDdXJzb3JcblxuICAgICAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlckZpcnN0TW92ZScsIGUpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdzbGlkZXJNb3ZlJywgZSk7XG4gICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICB2YXIgZGlmZiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IGRpZmZYIDogZGlmZlk7XG4gICAgdG91Y2hlcy5kaWZmID0gZGlmZjtcbiAgICBkaWZmICo9IHBhcmFtcy50b3VjaFJhdGlvO1xuICAgIGlmIChydGwpIGRpZmYgPSAtZGlmZjtcbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkaWZmICsgZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICB2YXIgZGlzYWJsZVBhcmVudFN3aXBlciA9IHRydWU7XG4gICAgdmFyIHJlc2lzdGFuY2VSYXRpbyA9IHBhcmFtcy5yZXNpc3RhbmNlUmF0aW87XG5cbiAgICBpZiAocGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgIHJlc2lzdGFuY2VSYXRpbyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGRpZmYgPiAwICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgLSAxICsgTWF0aC5wb3coLXN3aXBlci5taW5UcmFuc2xhdGUoKSArIGRhdGEuc3RhcnRUcmFuc2xhdGUgKyBkaWZmLCByZXNpc3RhbmNlUmF0aW8pO1xuICAgIH0gZWxzZSBpZiAoZGlmZiA8IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLnJlc2lzdGFuY2UpIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIDEgLSBNYXRoLnBvdyhzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBkYXRhLnN0YXJ0VHJhbnNsYXRlIC0gZGlmZiwgcmVzaXN0YW5jZVJhdGlvKTtcbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlcikge1xuICAgICAgZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlciA9IHRydWU7XG4gICAgfSAvLyBEaXJlY3Rpb25zIGxvY2tzXG5cblxuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiAhc3dpcGVyLmFsbG93U2xpZGVOZXh0KSB7XG4gICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICAgIH0gLy8gVGhyZXNob2xkXG5cblxuICAgIGlmIChwYXJhbXMudGhyZXNob2xkID4gMCkge1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmYpID4gcGFyYW1zLnRocmVzaG9sZCB8fCBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgICBpZiAoIWRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlKSB7XG4gICAgICAgICAgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgPSB0cnVlO1xuICAgICAgICAgI
24510HRvdWNoZXMuc3RhcnRYID0gdG91Y2hlcy5jdXJyZW50WDtcbiAgICAgICAgICB0b3VjaGVzLnN0YXJ0WSA9IHRvdWNoZXMuY3VycmVudFk7XG4gICAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgICB0b3VjaGVzLmRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFggOiB0b3VjaGVzLmN1cnJlbnRZIC0gdG91Y2hlcy5zdGFydFk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMuZm9sbG93RmluZ2VyIHx8IHBhcmFtcy5jc3NNb2RlKSByZXR1cm47IC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAvLyBWZWxvY2l0eVxuICAgICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGF0YS52ZWxvY2l0aWVzLnB1c2goe1xuICAgICAgICAgIHBvc2l0aW9uOiB0b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzdGFydFgnIDogJ3N0YXJ0WSddLFxuICAgICAgICAgIHRpbWU6IGRhdGEudG91Y2hTdGFydFRpbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEudmVsb2NpdGllcy5wdXNoKHtcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2N1cnJlbnRYJyA6ICdjdXJyZW50WSddLFxuICAgICAgICB0aW1lOiBub3coKVxuICAgICAgfSk7XG4gICAgfSAvLyBVcGRhdGUgcHJvZ3Jlc3NcblxuXG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7IC8vIFVwZGF0ZSB0cmFuc2xhdGVcblxuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcyxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICAgIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSBlID0gZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3RvdWNoRW5kJywgZSk7XG4gICAgfVxuXG4gICAgZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzID0gZmFsc2U7XG5cbiAgICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBpZiAoZGF0YS5pc01vdmVkICYmIHBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZXR1cm4gR3JhYiBDdXJzb3JcblxuXG4gICAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIGRhdGEuaXNNb3ZlZCAmJiBkYXRhLmlzVG91Y2hlZCAmJiAoc3dpcGVyLmFsbG93U2xpZGVOZXh0ID09PSB0cnVlIHx8IHN3aXBlci5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgICB9IC8vIFRpbWUgZGlmZlxuXG5cbiAgICB2YXIgdG91Y2hFbmRUaW1lID0gbm93KCk7XG4gICAgdmFyIHRpbWVEaWZmID0gdG91Y2hFbmRUaW1lIC0gZGF0YS50b3VjaFN0YXJ0VGltZTsgLy8gVGFwLCBkb3VibGVUYXAsIENsaWNrXG5cbiAgICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUoZSk7XG4gICAgICBzd2lwZXIuZW1pdCgndGFwIGNsaWNrJywgZSk7XG5cbiAgICAgIGlmICh0aW1lRGlmZiA8IDMwMCAmJiB0b3VjaEVuZFRpbWUgLSBkYXRhLmxhc3RDbGlja1RpbWUgPCAzMDApIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2RvdWJsZVRhcCBkb3VibGVDbGljaycsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEubGFzdENsaWNrVGltZSA9IG5vdygpO1xuICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3dpcGVyLmRlc3Ryb3llZCkgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhLmlzVG91Y2hlZCB8fCAhZGF0YS5pc01vdmVkIHx8ICFzd2lwZXIuc3dpcGVEaXJlY3Rpb24gfHwgdG91Y2hlcy5kaWZmID09PSAwIHx8IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9PT0gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgIHZhciBjdXJyZW50UG9zO1xuXG4gICAgaWYgKHBhcmFtcy5mb2xsb3dGaW5nZXIpIHtcbiAgICAgIGN1cnJlbnRQb3MgPSBydGwgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRQb3MgPSAtZGF0YS5jdXJyZW50VHJhbnNsYXRlO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIGlmIChjdXJyZW50UG9zIDwgLXN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50UG9zID4gLXN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggPCBzbmFwR3JpZC5sZW5ndGgpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbmFwR3JpZC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW0pIHtcbiAgICAgICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmFyIGxhc3RNb3ZlRXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgICAgdmFyIHZlbG9jaXR5RXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgICAgdmFyIGRpc3R
24510hbmNlID0gbGFzdE1vdmVFdmVudC5wb3NpdGlvbiAtIHZlbG9jaXR5RXZlbnQucG9zaXRpb247XG4gICAgICAgICAgdmFyIHRpbWUgPSBsYXN0TW92ZUV2ZW50LnRpbWUgLSB2ZWxvY2l0eUV2ZW50LnRpbWU7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gZGlzdGFuY2UgLyB0aW1lO1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSAvPSAyO1xuXG4gICAgICAgICAgaWYgKE1hdGguYWJzKHN3aXBlci52ZWxvY2l0eSkgPCBwYXJhbXMuZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHkpIHtcbiAgICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgICAgfSAvLyB0aGlzIGltcGxpZXMgdGhhdCB0aGUgdXNlciBzdG9wcGVkIG1vdmluZyBhIGZpbmdlciB0aGVuIHJlbGVhc2VkLlxuICAgICAgICAgIC8vIFRoZXJlIHdvdWxkIGJlIG5vIGV2ZW50cyB3aXRoIGRpc3RhbmNlIHplcm8sIHNvIHRoZSBsYXN0IGV2ZW50IGlzIHN0YWxlLlxuXG5cbiAgICAgICAgICBpZiAodGltZSA+IDE1MCB8fCBub3coKSAtIGxhc3RNb3ZlRXZlbnQudGltZSA+IDMwMCkge1xuICAgICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci52ZWxvY2l0eSAqPSBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVZlbG9jaXR5UmF0aW87XG4gICAgICAgIGRhdGEudmVsb2NpdGllcy5sZW5ndGggPSAwO1xuICAgICAgICB2YXIgbW9tZW50dW1EdXJhdGlvbiA9IDEwMDAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVJhdGlvO1xuICAgICAgICB2Y
24510XIgbW9tZW50dW1EaXN0YW5jZSA9IHN3aXBlci52ZWxvY2l0eSAqIG1vbWVudHVtRHVyYXRpb247XG4gICAgICAgIHZhciBuZXdQb3NpdGlvbiA9IHN3aXBlci50cmFuc2xhdGUgKyBtb21lbnR1bURpc3RhbmNlO1xuICAgICAgICBpZiAocnRsKSBuZXdQb3NpdGlvbiA9IC1uZXdQb3NpdGlvbjtcbiAgICAgICAgdmFyIGRvQm91bmNlID0gZmFsc2U7XG4gICAgICAgIHZhciBhZnRlckJvdW5jZVBvc2l0aW9uO1xuICAgICAgICB2YXIgYm91bmNlQW1vdW50ID0gTWF0aC5hYnMoc3dpcGVyLnZlbG9jaXR5KSAqIDIwICogcGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2VSYXRpbztcbiAgICAgICAgdmFyIG5lZWRzTG9vcEZpeDtcblxuICAgICAgICBpZiAobmV3UG9zaXRpb24gPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICAgIGlmIChuZXdQb3NpdGlvbiArIHN3aXBlci5tYXhUcmFuc2xhdGUoKSA8IC1ib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFmdGVyQm91bmNlUG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgICAgICBkb0JvdW5jZSA9IHRydWU7XG4gICAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvc2l0aW9uID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtQm91bmNlKSB7XG4gICAgICAgICAgICBpZiAobmV3UG9zaXRpb24gLSBzd2lwZXIubWluVHJhbnNsYXRlKCkgPiBib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFmdGVyQm91bmNlUG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICAgICAgICBkb0JvdW5jZSA9IHRydWU7XG4gICAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHZhciBuZXh0U2xpZGU7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNuYXBHcmlkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgICBpZiAoc25hcEdyaWRbal0gPiAtbmV3UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgbmV4dFNsaWRlID0gajtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKE1hdGguYWJzKHNuYXBHcmlkW25leHRTbGlkZV0gLSBuZXdQb3NpdGlvbikgPCBNYXRoLmFicyhzbmFwR3JpZFtuZXh0U2xpZGUgLSAxXSAtIG5ld1Bvc2l0aW9uKSB8fCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzbmFwR3JpZFtuZXh0U2xpZGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNuYXBHcmlkW25leHRTbGlkZSAtIDFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gLW5ld1Bvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lZWRzTG9vcEZpeCkge1xuICAgICAgICAgIHN3aXBlci5vbmNlKCd0cmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAvLyBGaXggZHVyYXRpb25cblxuXG4gICAgICAgIGlmIChzd2lwZXIudmVsb2NpdHkgIT09IDApIHtcbiAgICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gTWF0aC5hYnMoKC1uZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGguYWJzKChuZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgICAgICAvLyBJZiBmcmVlTW9kZVN0aWNreSBpcyBhY3RpdmUgYW5kIHRoZSB1c2VyIGVuZHMgYSBzd2lwZSB3aXRoIGEgc2xvdy12ZWxvY2l0eVxuICAgICAgICAgICAgLy8gZXZlbnQsIHRoZW4gZHVyYXRpb25zIGNhbiBiZSAyMCsgc2Vjb25kcyB0byBzbGlkZSBvbmUgKG9yIHplcm8hKSBzbGlkZXMuXG4gICAgICAgICAgICAvLyBJdCdzIGVhc3kgdG8gc2VlIHRoaXMgd2hlbiBzaW11bGF0aW5nIHRvdWNoIHdpdGggbW91c2UgZXZlbnRzLiBUbyBmaXggdGhpcyxcbiAgICAgICAgICAgIC8vIGxpbWl0IHNpbmdsZS1zbGlkZSBzd2lwZXMgdG8gdGhlIGRlZmF1bHQgc2xpZGUgZHVyYXRpb24uIFRoaXMgYWxzbyBoYXMgdGhlXG4gICAgICAgICAgICAvLyBuaWNlIHNpZGUgZWZmZWN0IG9mIG1hdGNoaW5nIHNsaWRlIHNwZWVkIGlmIHRoZSB1c2VyIHN0b3BwZWQgbW92aW5nIGJlZm9yZVxuICAgICAgICAgICAgLy8gbGlmdGluZyBmaW5nZXIgb3IgbW91c2UgdnMuIG1vdmluZyBzbG93bHkgYmVmb3JlIGxpZnRpbmcgdGhlIGZpbmdlci9tb3VzZS5cbiAgICAgICAgICAgIC8vIEZvciBmYXN0ZXIgc3dpcGVzLCBhbHNvIGFwcGx5IGxpbWl0cyAoYWxiZWl0IGhpZ2hlciBvbmVzKS5cbiAgICAgICAgICAgI
24510HZhciBtb3ZlRGlzdGFuY2UgPSBNYXRoLmFicygocnRsID8gLW5ld1Bvc2l0aW9uIDogbmV3UG9zaXRpb24pIC0gc3dpcGVyLnRyYW5zbGF0ZSk7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNsaWRlU2l6ZSA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWRbc3dpcGVyLmFjdGl2ZUluZGV4XTtcblxuICAgICAgICAgICAgaWYgKG1vdmVEaXN0YW5jZSA8IGN1cnJlbnRTbGlkZVNpemUpIHtcbiAgICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW92ZURpc3RhbmNlIDwgMiAqIGN1cnJlbnRTbGlkZVNpemUpIHtcbiAgICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZCAqIDEuNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBwYXJhbXMuc3BlZWQgKiAyLjU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZSAmJiBkb0JvdW5jZSkge1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhhZnRlckJvdW5jZVBvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHRydWUsIHN3aXBlci5zd2lwZURpcmVjdGlvbik7XG4gICAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIWRhdGEuYWxsb3dNb21lbnR1bUJvdW5jZSkgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ21vbWVudHVtQm91bmNlJyk7XG4gICAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihwYXJhbXMuc3BlZWQpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnZlbG9jaXR5KSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHRydWUsIHN3aXBlci5zd2lwZURpcmVjdGlvbik7XG5cbiAgICAgICAgICBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdfZnJlZU1vZGVOb01vbWVudHVtUmVsZWFzZScpO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgICBzd2lwZXIuZW1pdCgnX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2UnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXJhbXMuZnJlZU1vZGVNb21lbnR1bSB8fCB0aW1lRGlmZiA+PSBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmluZCBjdXJyZW50IHNsaWRlXG5cblxuICAgIHZhciBzdG9wSW5kZXggPSAwO1xuICAgIHZhciBncm91cFNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSBpIDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIHtcbiAgICAgIHZhciBfaW5jcmVtZW50ID0gaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgLSAxID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcblxuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBfaW5jcmVtZW50XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRQb3MgPj0gc2xpZGVzR3JpZFtpXSAmJiBjdXJyZW50UG9zIDwgc2xpZGVzR3JpZFtpICsgX2luY3JlbWVudF0pIHtcbiAgICAgICAgICBzdG9wSW5kZXggPSBpO1xuICAgICAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbaSArIF9pbmNyZW1lbnRdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDFdIC0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDJdO1xuICAgICAgfVxuICAgIH0gLy8gRmluZCBjdXJyZW50IHNsaWRlIHNpemVcblxuXG4gICAgdmFyIHJhdGlvID0gKGN1cnJlbnRQb3MgLSBzbGlkZXNHcmlkW3N0b3BJbmRleF0pIC8gZ3JvdXBTaXplO1xuICAgIHZhciBpbmNyZW1lbnQgPSBzdG9wSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICBpZiAodGltZURpZmYgPiBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgICAvLyBMb25nIHRvdWNoZXNcbiAgICAgIGlmICghcGFyYW1zLmxvbmdTd2lwZXMpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgaWYgKHJhdGlvID49IHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7ZWxzZSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgaWYgKHJhdGlvID4gMSAtIHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7ZWxzZSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaG9ydCBzd2lwZXNcbiAgICAgIGlmICghcGFyYW1zLnNob3J0U3dpcGVzKSB7XG4gICAgICAgI
24510HN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzTmF2QnV0dG9uVGFyZ2V0ID0gc3dpcGVyLm5hdmlnYXRpb24gJiYgKGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgfHwgZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCk7XG5cbiAgICAgIGlmICghaXNOYXZCdXR0b25UYXJnZXQpIHtcbiAgICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4ICsgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgZWwgPSBzd2lwZXIuZWw7XG4gICAgaWYgKGVsICYmIGVsLm9mZnNldFdpZHRoID09PSAwKSByZXR1cm47IC8vIEJyZWFrcG9pbnRzXG5cbiAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH0gLy8gU2F2ZSBsb2Nrc1xuXG5cbiAgICB2YXIgYWxsb3dTbGlkZU5leHQgPSBzd2lwZXIuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIGFsbG93U2xpZGVQcmV2ID0gc3dpcGVyLmFsbG93U2xpZGVQcmV2LFxuICAgICAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDsgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcblxuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gdHJ1ZTtcbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgaWYgKChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLmF1dG9wbGF5ICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICB9IC8vIFJldHVybiBsb2NrcyBhZnRlciByZXNpemVcblxuXG4gICAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHNuYXBHcmlkICE9PSBzd2lwZXIuc25hcEdyaWQpIHtcbiAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgaWYgKCFzd2lwZXIuYWxsb3dDbGljaykge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMucHJldmVudENsaWNrcykgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24gJiYgc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgICBydGxUcmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gICAgc3dpcGVyLnByZXZpb3VzVHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcblxuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIGlmIChydGxUcmFuc2xhdGUpIHtcbiAgICAgICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHdyYXBwZXJFbC5zY3JvbGxXaWR0aCAtIHdyYXBwZXJFbC5vZmZzZXRXaWR0aCAtIHdyYXBwZXJFbC5zY3JvbGxMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsTGVmdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsVG9wO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cblxuICAgIGlmIChzd2lwZXIudHJhbnNsYXRlID09PSAtMCkgc3dpcGVyLnRyYW5zbGF0ZSA9IDA7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB2YXIgbmV3UHJvZ3Jlc3M7XG4gICAgdmFyIHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuXG4gICAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgICBuZXdQcm9ncmVzcyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1Byb2dyZXNzID0gKHN3aXBlci50cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBzd2lwZXIucHJvZ3Jlc3MpIHtcbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhydGxUcmFuc2xhdGUgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpO1xuICAgIH1cblxuICAgI
24510HN3aXBlci5lbWl0KCdzZXRUcmFuc2xhdGUnLCBzd2lwZXIudHJhbnNsYXRlLCBmYWxzZSk7XG4gIH1cblxuICB2YXIgZHVtbXlFdmVudEF0dGFjaGVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZHVtbXlFdmVudExpc3RlbmVyKCkge31cblxuICBmdW5jdGlvbiBhdHRhY2hFdmVudHMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgdG91Y2hFdmVudHMgPSBzd2lwZXIudG91Y2hFdmVudHMsXG4gICAgICAgIGVsID0gc3dpcGVyLmVsLFxuICAgICAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgICBkZXZpY2UgPSBzd2lwZXIuZGV2aWNlLFxuICAgICAgICBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgc3dpcGVyLm9uVG91Y2hTdGFydCA9IG9uVG91Y2hTdGFydC5iaW5kKHN3aXBlcik7XG4gICAgc3dpcGVyLm9uVG91Y2hNb3ZlID0gb25Ub3VjaE1vdmUuYmluZChzd2lwZXIpO1xuICAgIHN3aXBlci5vblRvdWNoRW5kID0gb25Ub3VjaEVuZC5iaW5kKHN3aXBlcik7XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci5vblNjcm9sbCA9IG9uU2Nyb2xsLmJpbmQoc3dpcGVyKTtcbiAgICB9XG5cbiAgICBzd2lwZXIub25DbGljayA9IG9uQ2xpY2suYmluZChzd2lwZXIpO1xuICAgIHZhciBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkOyAvLyBUb3VjaCBFdmVudHNcblxuICAgIGlmICghc3VwcG9ydC50b3VjaCAmJiBzdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB2Y
24510XIgcGFzc2l2ZUxpc3RlbmVyID0gdG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgICAgIH0gOiBmYWxzZTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyID8ge1xuICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgIGNhcHR1cmU6IGNhcHR1cmVcbiAgICAgICAgfSA6IGNhcHR1cmUpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG5cbiAgICAgICAgaWYgKHRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuY2FuY2VsLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZHVtbXlFdmVudEF0dGFjaGVkKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGR1bW15RXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgZHVtbXlFdmVudEF0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIWRldmljZS5pb3MgJiYgIWRldmljZS5hbmRyb2lkIHx8IHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFzdXBwb3J0LnRvdWNoICYmIGRldmljZS5pb3MpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2
24510N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IC8vIFByZXZlbnQgTGlua3MgQ2xpY2tzXG5cblxuICAgIGlmIChwYXJhbXMucHJldmVudENsaWNrcyB8fCBwYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uKSB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN3aXBlci5vbkNsaWNrLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHdyYXBwZXJFbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzd2lwZXIub25TY3JvbGwpO1xuICAgIH0gLy8gUmVzaXplIGhhbmRsZXJcblxuXG4gICAgaWYgKHBhcmFtcy51cGRhdGVPbldpbmRvd1Jlc2l6ZSkge1xuICAgICAgc3dpcGVyLm9uKGRldmljZS5pb3MgfHwgZGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5vbignb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGV0YWNoRXZlbnRzKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHRvdWNoRXZlbnRzID0gc3dpcGVyLnRvdWNoRXZlbnRzLFxuICAgICAgICBlbCA9IHN3aXBlci5lbCxcbiAgICAgICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICAgICAgZGV2aWNlID0gc3dpcGVyLmRldmljZSxcbiAgICAgICAgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0O1xuICAgIHZhciBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkOyAvLyBUb3VjaCBFdmVudHNcblxuICAgIGlmICghc3VwcG9ydC50b3VjaCAmJiBzdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB2Y
24510XIgcGFzc2l2ZUxpc3RlbmVyID0gdG91Y2hFdmVudHMuc3RhcnQgPT09ICdvblRvdWNoU3RhcnQnICYmIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgICAgfSA6IGZhbHNlO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcblxuICAgICAgICBpZiAodG91Y2hFdmVudHMuY2FuY2VsKSB7XG4gICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5jYW5jZWwsIHN3aXBlci5vblRvdWNoRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhZGV2aWNlLmlvcyAmJiAhZGV2aWNlLmFuZHJvaWQgfHwgcGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIXN1cHBvcnQudG91Y2ggJiYgZGV2aWNlLmlvcykge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gLy8gUHJldmVudCBMaW5rcyBDbGlja3NcblxuXG4gICAgaWYgKHBhcmFtcy5wcmV2ZW50Q2xpY2tzIHx8IHBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24pIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3dpcGVyLm9uQ2xpY2ssIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgd3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN3aXBlci5vblNjcm9sbCk7XG4gICAgfSAvLyBSZXNpemUgaGFuZGxlclxuXG5cbiAgICBzd2lwZXIub2ZmKGRldmljZS5pb3MgfHwgZGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSk7XG4gIH1cblxuICB2YXIgZXZlbnRzID0ge1xuICAgIGF0dGFjaEV2ZW50czogYXR0YWNoRXZlbnRzLFxuICAgIGRldGFjaEV2ZW50czogZGV0YWNoRXZlbnRzXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludCgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgIGluaXRpYWxpemVkID0gc3dpcGVyLmluaXRpYWxpemVkLFxuICAgICAgICBfc3dpcGVyJGxvb3BlZFNsaWRlcyA9IHN3aXBlci5sb29wZWRTbGlkZXMsXG4gICAgICAgIGxvb3BlZFNsaWRlcyA9IF9zd2lwZXIkbG9vcGVkU2xpZGVzID09PSB2b2lkIDAgPyAwIDogX3N3aXBlciRsb29wZWRTbGlkZXMsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICRlbCA9IHN3aXBlci4kZWw7XG4gICAgdmFyIGJyZWFrcG9pbnRzID0gcGFyYW1zLmJyZWFrcG9pbnRzO1xuICAgIGlmICghYnJlYWtwb2ludHMgfHwgYnJlYWtwb2ludHMgJiYgT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuOyAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93IHdpZHRoIGFuZCB1cGRhdGUgcGFyYW1ldGVyc1xuXG4gICAgdmFyIGJyZWFrcG9pbnQgPSBzd2lwZXIuZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgc3dpcGVyLnBhcmFtcy5icmVha3BvaW50c0Jhc2UsIHN3aXBlci5lbCk7XG4gICAgaWYgKCFicmVha3BvaW50IHx8IHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCA9PT0gYnJlYWtwb2ludCkgcmV0dXJuO1xuICAgIHZhciBicmVha3BvaW50T25seVBhcmFtcyA9IGJyZWFrcG9pbnQgaW4gYnJlYWtwb2ludHMgPyBicmVha3BvaW50c1ticmVha3BvaW50XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChicmVha3BvaW50T25seVBhcmFtcykge1xuICAgICAgWydzbGlkZXNQZXJWaWV3JywgJ3NwYWNlQmV0d2VlbicsICdzbGlkZXNQZXJHcm91cCcsICdzbGlkZXNQZXJHcm91cFNraXAnLCAnc2xpZGVzUGVyQ29sdW1uJ10uZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgdmFyIHBhcmFtVmFsdWUgPSBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV07XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgICAgICBpZiAocGFyYW0gPT09ICdzbGlkZXNQZXJWaWV3JyAmJiAocGFyYW1WYWx1ZSA9PT0gJ0FVVE8nIHx8IHBhcmFtVmFsdWUgPT09ICdhdXRvJykpIHtcbiAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSAnYXV0byc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT09ICdzbGlkZXNQZXJWaWV3Jykge1xuICAgICAgICAgIGJyZWFrcG9pbnRPbmx5UGFyYW1zW3BhcmFtXSA9IHBhcnNlRmxvYXQocGFyYW1WYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtwb2ludE9ubHlQYXJhbXNbcGFyYW1dID0gcGFyc2VJbnQocGFyYW1WYWx1ZSwgMTApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgYnJlYWtwb2ludFBhcmFtcyA9IGJyZWFrcG9pbnRPbmx5UGFyYW1zIHx8IHN3aXBlci5vcmlnaW5hbFBhcmFtcztcbiAgICB2YXIgd2FzTXVsdGlSb3cgPSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMTtcbiAgICB2YXIgaXNNdWx0aVJvdyA9IGJyZWFrcG9pbnRQYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMTtcbiAgICB2YXIgd2FzRW5hYmxlZCA9IHBhcmFtcy5lbmFibGVkO1xuXG4gICAgaWYgKHdhc011bHRpUm93ICYmICFpc011bHRpUm93KSB7XG4gICAgICAkZWwucmVtb3ZlQ2xhc3MocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIm11bHRpcm93IFwiICsgcGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIm11bHRpcm93LWNvbHVtblwiKTtcbiAgICAgIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xuICAgIH0gZWxzZSBpZiAoIXdhc011bHRpUm93ICYmIGlzTXVsdGlSb3cpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwibXVsdGlyb3dcIik7XG5cbiAgICAgIGlmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdjb2x1bW4nKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwibXVsdGlyb3ctY29sdW1uXCIpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdENvb
24510nRhaW5lckNsYXNzZXMoKTtcbiAgICB9XG5cbiAgICB2YXIgZGlyZWN0aW9uQ2hhbmdlZCA9IGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICYmIGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICE9PSBwYXJhbXMuZGlyZWN0aW9uO1xuICAgIHZhciBuZWVkc1JlTG9vcCA9IHBhcmFtcy5sb29wICYmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlclZpZXcgIT09IHBhcmFtcy5zbGlkZXNQZXJWaWV3IHx8IGRpcmVjdGlvbkNoYW5nZWQpO1xuXG4gICAgaWYgKGRpcmVjdGlvbkNoYW5nZWQgJiYgaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHN3aXBlci5jaGFuZ2VEaXJlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBleHRlbmQoc3dpcGVyLnBhcmFtcywgYnJlYWtwb2ludFBhcmFtcyk7XG4gICAgdmFyIGlzRW5hYmxlZCA9IHN3aXBlci5wYXJhbXMuZW5hYmxlZDtcbiAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICAgIGFsbG93U2xpZGVOZXh0OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVOZXh0LFxuICAgICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXZcbiAgICB9KTtcblxuICAgIGlmICh3YXNFbmFibGVkICYmICFpc0VuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIGlmICghd2FzRW5hYmxlZCAmJiBpc0VuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuY3VycmVudEJyZWFrcG9pbnQgPSBicmVha3BvaW50O1xuICAgIHN3aXBlci5lbWl0KCdfYmVmb3JlQnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuXG4gICAgaWYgKG5lZWRzUmVMb29wICYmIGluaXRpYWxpemVkKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhhY3RpdmVJbmRleCAtIGxvb3BlZFNsaWRlcyArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgYmFzZSwgY29udGFpbmVyRWwpIHtcbiAgICBpZiAoYmFzZSA9PT0gdm9pZCAwKSB7XG4gICAgICBiYXNlID0gJ3dpbmRvdyc7XG4gICAgfVxuXG4gICAgaWYgKCFicmVha3BvaW50cyB8fCBiYXNlID09PSAnY29udGFpbmVyJyAmJiAhY29udGFpbmVyRWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdmFyIGJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGN1cnJlbnRXaWR0aCA9IGJhc2UgPT09ICd3aW5kb3cnID8gd2luZG93LmlubmVyV2lkdGggOiBjb250YWluZXJFbC5jbGllbnRXaWR0aDtcbiAgICB2YXIgY3VycmVudEhlaWdodCA9IGJhc2UgPT09ICd3aW5kb3cnID8gd2luZG93LmlubmVySGVpZ2h0IDogY29udGFpbmVyRWwuY2xpZW50SGVpZ2h0O1xuICAgIHZhciBwb2ludHMgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykubWFwKGZ1bmN0aW9uIChwb2ludCkge1xuICAgICAgaWYgKHR5cGVvZiBwb2ludCA9PT0gJ3N0cmluZycgJiYgcG9pbnQuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICAgIHZhciBtaW5SYXRpbyA9IHBhcnNlRmxvYXQocG9pbnQuc3Vic3RyKDEpKTtcbiAgICAgICAgdmFyIHZhbHVlID0gY3VycmVudEhlaWdodCAqIG1pblJhdGlvO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwb2ludDogcG9pbnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHBvaW50LFxuICAgICAgICBwb2ludDogcG9pbnRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcG9pbnRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBwYXJzZUludChhLnZhbHVlLCAxMCkgLSBwYXJzZUludChiLnZhbHVlLCAxMCk7XG4gICAgfSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIF9wb2ludHMkaSA9IHBvaW50c1tpXSxcbiAgICAgICAgICBwb2ludCA9IF9wb2ludHMkaS5wb2ludCxcbiAgICAgICAgICB2YWx1ZSA9IF9wb2ludHMkaS52YWx1ZTtcblxuICAgICAgaWYgKHZhbHVlIDw9IGN1cnJlbnRXaWR0aCkge1xuICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyZWFrcG9pbnQgfHwgJ21heCc7XG4gIH1cblxuICB2YXIgYnJlYWtwb2ludHMgPSB7XG4gICAgc2V0QnJlYWtwb2ludDogc2V0QnJlYWtwb2ludCxcbiAgICBnZXRCcmVha3BvaW50OiBnZXRCcmVha3BvaW50XG4gIH07XG5cbiAgZnVuY3Rpb24gcHJlcGFyZUNsYXNzZXMoZW50cmllcywgcHJlZml4KSB7XG4gICAgdmFyIHJlc3VsdENsYXNzZXMgPSBbXTtcbiAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lcykge1xuICAgICAgICAgIGlmIChpdGVtW2NsYXNzTmFtZXNdKSB7XG4gICAgICAgICAgICByZXN1bHRDbGFzc2VzLnB1c2gocHJlZml4ICsgY2xhc3NOYW1lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlc3VsdENsYXNzZXMucHVzaChwcmVmaXggKyBpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0Q2xhc3NlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzZXMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGNsYXNzTmFtZXMgPSBzd2lwZXIuY2xhc3NOYW1lcyxcbiAgICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bCxcbiAgICAgICAgJGVsID0gc3dpcGVyLiRlbCxcbiAgICAgICAgZGV2aWNlID0gc3dpcGVyLmRldmljZSxcbiAgICAgICAgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0OyAvLyBwcmV0dGllci1pZ25vcmVcblxuICAgI
24510HZhciBzdWZmaXhlcyA9IHByZXBhcmVDbGFzc2VzKFsnaW5pdGlhbGl6ZWQnLCBwYXJhbXMuZGlyZWN0aW9uLCB7XG4gICAgICAncG9pbnRlci1ldmVudHMnOiBzdXBwb3J0LnBvaW50ZXJFdmVudHMgJiYgIXN1cHBvcnQudG91Y2hcbiAgICB9LCB7XG4gICAgICAnZnJlZS1tb2RlJzogcGFyYW1zLmZyZWVNb2RlXG4gICAgfSwge1xuICAgICAgJ2F1dG9oZWlnaHQnOiBwYXJhbXMuYXV0b0hlaWdodFxuICAgIH0sIHtcbiAgICAgICdydGwnOiBydGxcbiAgICB9LCB7XG4gICAgICAnbXVsdGlyb3cnOiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMVxuICAgIH0sIHtcbiAgICAgICdtdWx0aXJvdy1jb2x1bW4nOiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSAmJiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ2NvbHVtbidcbiAgICB9LCB7XG4gICAgICAnYW5kcm9pZCc6IGRldmljZS5hbmRyb2lkXG4gICAgfSwge1xuICAgICAgJ2lvcyc6IGRldmljZS5pb3NcbiAgICB9LCB7XG4gICAgICAnY3NzLW1vZGUnOiBwYXJhbXMuY3NzTW9kZVxuICAgIH1dLCBwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyk7XG4gICAgY2xhc3NOYW1lcy5wdXNoLmFwcGx5KGNsYXNzTmFtZXMsIHN1ZmZpeGVzKTtcbiAgICAkZWwuYWRkQ2xhc3MoW10uY29uY2F0KGNsYXNzTmFtZXMpLmpvaW4oJyAnKSk7XG4gICAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsLFxuICAgICAgICBjbGFzc05hbWVzID0gc3dpcGVyLmNsYXNzTmFtZXM7XG4gICAgJGVsLnJlbW92ZUNsYXNzKGNsYXNzTmFtZXMuam9pbignICcpKTtcbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgfVxuXG4gIHZhciBjbGFzc2VzID0ge1xuICAgIGFkZENsYXNzZXM6IGFkZENsYXNzZXMsXG4gICAgcmVtb3ZlQ2xhc3NlczogcmVtb3ZlQ2xhc3Nlc1xuICB9O1xuXG4gIGZ1bmN0aW9uIGxvYWRJbWFnZShpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBpbWFnZTtcblxuICAgIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzUGljdHVyZSA9ICQoaW1hZ2VFbCkucGFyZW50KCdwaWN0dXJlJylbMF07XG5cbiAgICBpZiAoIWlzUGljdHVyZSAmJiAoIWltYWdlRWwuY29tcGxldGUgfHwgIWNoZWNrRm9yQ29tcGxldGUpKSB7XG4gICAgICBpZiAoc3JjKSB7XG4gICAgICAgIGltYWdlID0gbmV3IHdpbmRvdy5JbWFnZSgpO1xuICAgICAgICBpbWFnZS5vbmxvYWQgPSBvblJlYWR5O1xuICAgICAgICBpbWFnZS5vbmVycm9yID0gb25SZWFkeTtcblxuICAgICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgICBpbWFnZS5zaXplcyA9IHNpemVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNyY3NldCkge1xuICAgICAgICAgIGltYWdlLnNyY3NldCA9IHNyY3NldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW1hZ2UgYWxyZWFkeSBsb2FkZWQuLi5cbiAgICAgIG9uUmVhZHkoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVsb2FkSW1hZ2VzKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5pbWFnZXNUb0xvYWQgPSBzd2lwZXIuJGVsLmZpbmQoJ2ltZycpO1xuXG4gICAgZnVuY3Rpb24gb25SZWFkeSgpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3dpcGVyID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIgPT09IG51bGwgfHwgIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCAhPT0gdW5kZWZpbmVkKSBzd2lwZXIuaW1hZ2VzTG9hZGVkICs9IDE7XG5cbiAgICAgIGlmIChzd2lwZXIuaW1hZ2VzTG9hZGVkID09PSBzd2lwZXIuaW1hZ2VzVG9Mb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy51cGRhdGVPbkltYWdlc1JlYWR5KSBzd2lwZXIudXBkYXRlKCk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdpbWFnZXNSZWFkeScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGltYWdlRWwgPSBzd2lwZXIuaW1hZ2VzVG9Mb2FkW2ldO1xuICAgICAgc3dpcGVyLmxvYWRJbWFnZShpbWFnZUVsLCBpbWFnZUVsLmN1cnJlbnRTcmMgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyYycpLCBpbWFnZUVsLnNyY3NldCB8fCBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JyksIGltYWdlRWwuc2l6ZXMgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NpemVzJyksIHRydWUsIG9uUmVhZHkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbWFnZXMgPSB7XG4gICAgbG9hZEltYWdlOiBsb2FkSW1hZ2UsXG4gICAgcHJlbG9hZEltYWdlczogcHJlbG9hZEltYWdlc1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3coKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHdhc0xvY2tlZCA9IHN3aXBlci5pc0xvY2tlZDtcbiAgICB2YXIgbGFzdFNsaWRlUG9zaXRpb24gPSBzd2lwZXIuc2xpZGVzLmxlbmd0aCA+IDAgJiYgcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZSArIHBhcmFtcy5zcGFjZUJldHdlZW4gKiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxKSArIHN3aXBlci5zbGlkZXNbMF0ub2Zmc2V0V2lkdGggKiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcblxuICAgIGlmIChwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlICYmIHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlciAmJiBsYXN0U2xpZGVQb3NpdGlvbikge1xuICAgICAgc3dpcGVyLmlzTG9ja2VkID0gbGFzdFNsaWRlUG9zaXRpb24gPD0gc3dpcGVyLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5pc0xvY2tlZCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGggPT09IDE7XG4gICAgfVxuXG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gIXN3aXBlci5pc0xvY2tlZDtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSAhc3dpcGVyLmlzTG9ja2VkOyAvLyBldmVudHNcblxuICAgIGlmICh3YXNMb2NrZWQgIT09I
24510HN3aXBlci5pc0xvY2tlZCkgc3dpcGVyLmVtaXQoc3dpcGVyLmlzTG9ja2VkID8gJ2xvY2snIDogJ3VubG9jaycpO1xuXG4gICAgaWYgKHdhc0xvY2tlZCAmJiB3YXNMb2NrZWQgIT09IHN3aXBlci5pc0xvY2tlZCkge1xuICAgICAgc3dpcGVyLmlzRW5kID0gZmFsc2U7XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24pIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGVja092ZXJmbG93JDEgPSB7XG4gICAgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvd1xuICB9O1xuXG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBpbml0OiB0cnVlLFxuICAgIGRpcmVjdGlvbjogJ2hvcml6b250YWwnLFxuICAgIHRvdWNoRXZlbnRzVGFyZ2V0OiAnY29udGFpbmVyJyxcbiAgICBpbml0aWFsU2xpZGU6IDAsXG4gICAgc3BlZWQ6IDMwMCxcbiAgICBjc3NNb2RlOiBmYWxzZSxcbiAgICB1cGRhdGVPbldpbmRvd1Jlc2l6ZTogdHJ1ZSxcbiAgICByZXNpemVPYnNlcnZlcjogZmFsc2UsXG4gICAgbmVzdGVkOiBmYWxzZSxcbiAgICBjcmVhdGVFbGVtZW50czogZmFsc2UsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvLyBPdmVycmlkZXNcbiAgICB3aWR0aDogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgLy9cbiAgICBwcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb246IGZhbHNlLFxuICAgIC8vIHNzclxuICAgIHVzZXJBZ2VudDogbnVsbCxcbiAgICB1cmw6IG51bGwsXG4gICAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICAgIGVkZ2VTd2lwZURldGVjdGlvbjogZmFsc2UsXG4gICAgZWRnZVN3aXBlVGhyZXNob2xkOiAyMCxcbiAgICAvLyBGcmVlIG1vZGVcbiAgICBmcmVlTW9kZTogZmFsc2UsXG4gICAgZnJlZU1vZGVNb21lbnR1bTogdHJ1ZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtUmF0aW86IDEsXG4gICAgZnJlZU1vZGVNb21lbnR1bUJvdW5jZTogdHJ1ZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtQm91bmNlUmF0aW86IDEsXG4gICAgZnJlZU1vZGVNb21lbnR1bVZlbG9jaXR5UmF0aW86IDEsXG4gICAgZnJlZU1vZGVTdGlja3k6IGZhbHNlLFxuICAgIGZyZWVNb2RlTWluaW11bVZlbG9jaXR5OiAwLjAyLFxuICAgIC8vIEF1dG9oZWlnaHRcbiAgICBhdXRvSGVpZ2h0OiBmYWxzZSxcbiAgICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICAgIHNldFdyYXBwZXJTaXplOiBmYWxzZSxcbiAgICAvLyBWaXJ0dWFsIFRyYW5zbGF0ZVxuICAgIHZpcnR1YWxUcmFuc2xhdGU6IGZhbHNlLFxuICAgIC8vIEVmZmVjdHNcbiAgICBlZmZlY3Q6ICdzbGlkZScsXG4gICAgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuICAgIC8vIEJyZWFrcG9pbnRzXG4gICAgYnJlYWtwb2ludHM6IHVuZGVmaW5lZCxcbiAgICBicmVha3BvaW50c0Jhc2U6ICd3aW5kb3cnLFxuICAgIC8vIFNsaWRlcyBncmlkXG4gICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgIHNsaWRlc1BlckNvbHVtbkZpbGw6ICdjb2x1bW4nLFxuICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgIHNsaWRlc1Blckdyb3VwU2tpcDogMCxcbiAgICBjZW50ZXJlZFNsaWRlczogZmFsc2UsXG4gICAgY2VudGVyZWRTbGlkZXNCb3VuZHM6IGZhbHNlLFxuICAgIHNsaWRlc09mZnNldEJlZm9yZTogMCxcbiAgICAvLyBpbiBweFxuICAgIHNsaWRlc09mZnNldEFmdGVyOiAwLFxuICAgIC8vIGluIHB4XG4gICAgbm9ybWFsaXplU2xpZGVJbmRleDogdHJ1ZSxcbiAgICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IGZhbHNlLFxuICAgIC8vIERpc2FibGUgc3dpcGVyIGFuZCBoaWRlIG5hdmlnYXRpb24gd2hlbiBjb250YWluZXIgbm90IG92ZXJmbG93XG4gICAgd2F0Y2hPdmVyZmxvdzogZmFsc2UsXG4gICAgLy8gUm91bmQgbGVuZ3RoXG4gICAgcm91bmRMZW5ndGhzOiBmYWxzZSxcbiAgICAvLyBUb3VjaGVzXG4gICAgdG91Y2hSYXRpbzogMSxcbiAgICB0b3VjaEFuZ2xlOiA0NSxcbiAgICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICAgIHNob3J0U3dpcGVzOiB0cnVlLFxuICAgIGxvbmdTd2lwZXM6IHRydWUsXG4gICAgbG9uZ1N3aXBlc1JhdGlvOiAwLjUsXG4gICAgbG9uZ1N3aXBlc01zOiAzMDAsXG4gICAgZm9sbG93RmluZ2VyOiB0cnVlLFxuICAgIGFsbG93VG91Y2hNb3ZlOiB0cnVlLFxuICAgIHRocmVzaG9sZDogMCxcbiAgICB0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb246IGZhbHNlLFxuICAgIHRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgICB0b3VjaFN0YXJ0Rm9yY2VQcmV2ZW50RGVmYXVsdDogZmFsc2UsXG4gICAgdG91Y2hSZWxlYXNlT25FZGdlczogZmFsc2UsXG4gICAgLy8gVW5pcXVlIE5hdmlnYXRpb24gRWxlbWVudHNcbiAgICB1bmlxdWVOYXZFbGVtZW50czogdHJ1ZSxcbiAgICAvLyBSZXNpc3RhbmNlXG4gICAgcmVzaXN0YW5jZTogdHJ1ZSxcbiAgICByZXNpc3RhbmNlUmF0aW86IDAuODUsXG4gICAgLy8gUHJvZ3Jlc3NcbiAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiBmYWxzZSxcbiAgICB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IGZhbHNlLFxuICAgIC8vIEN1cnNvclxuICAgIGdyYWJDdXJzb3I6IGZhbHNlLFxuICAgIC8vIENsaWNrc1xuICAgIHByZXZlbnRDbGlja3M6IHRydWUsXG4gICAgcHJldmVudENsaWNrc1Byb3BhZ2F0aW9uOiB0cnVlLFxuICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuICAgIC8vIEltYWdlc1xuICAgIHByZWxvYWRJbWFnZXM6IHRydWUsXG4gICAgdXBkYXRlT25JbWFnZXNSZWFkeTogdHJ1ZSxcbiAgICAvLyBsb29wXG4gICAgbG9vcDogZmFsc2UsXG4gICAgbG9vcEFkZGl0aW9uYWxTbGlkZXM6IDAsXG4gICAgbG9vcGVkU2xpZGVzOiBudWxsLFxuICAgIGxvb3BGaWxsR3JvdXBXaXRoQmxhbms6IGZhbHNlLFxuICAgIGxvb3BQcmV2ZW50c1NsaWRlOiB0cnVlLFxuICAgIC8vIFN3aXBpbmcvbm8gc3dpcGluZ1xuICAgIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICAgIGFsbG93U2xpZGVOZXh0OiB0cnVlLFxuICAgIHN3aXBlSGFuZGxlcjogbnVsbCxcbiAgICAvLyAnLnN3aXBlLWhhbmRsZXInLFxuICAgIG5vU3dpcGluZzogdHJ1ZSxcbiAgICBub1N3aXBpbmdDbGFzczogJ3N3aXBlci1uby1zd2lwaW5nJyxcbiAgICBub1N3aXBpbmdTZWxlY3RvcjogbnVsbCxcbiAgICAvLyBQYXNzaXZlIExpc3RlbmVyc1xuICAgIHBhc3NpdmVMaXN0ZW5lcnM6IHRydWUsXG4gICAgLy8gTlNcbiAgICBjb250YWluZXJNb2RpZmllckNsYXNzOiAnc3dpcGVyLWNvbnRhaW5lci0nLFxuICAgIC8vIE5FV1xuICAgIHNsaWRlQ2xhc3M6ICdzd2lwZXItc2xpZGUnLFxuICAgIHNsaWRlQmxhbmtDbGFzczogJ3N3aXBlci1zbGlkZS1pbnZpc2libGUtYmxhbmsnLFxuICAgIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgICBzbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1hY3RpdmUnLFxuICAgIHNsaWRlVmlzaWJsZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXZpc2libGUnLFxuICAgIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgICBzbGlkZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1uZXh0JyxcbiAgICBzbGlkZUR1cGxpY2F0ZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtbmV4dCcsXG4gICAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gICAgc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlLXByZXYnLFxuICAgIHdyYXBwZXJDbGFzczogJ3N3aXBlci13cmFwcGVyJyxcbiAgICAvLyBDYWxsYmFja3NcbiAgICBydW5DYWxsYmFja3NPbkluaXQ6IHRydWUsXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgX2VtaXRDbGFzc2VzOiBmYWxzZVxuICB9O1xuXG4gIHZhciBwcm90b3R5cGVzID0ge1xuICAgIG1vZHVsYXI6IG1vZHVsYXIsXG4gICAgZXZlbnRzRW1pdHRlcjogZXZlbnRzRW1pdHRlcixcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICB0cmFuc2xhdGU6IHRyYW5zbGF0ZSxcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uLFxuICAgIHNsaWRlOiBzbGlkZSxcbiAgICBsb29wOiBsb29wLFxuICAgIGdyYWJDdXJzb3I6IGdyYWJDdXJzb3IsXG4gICAgbWFuaXB1bGF0aW9uOiBtYW5pcHVsYXRpb24sXG4gICAgZXZlbnRzOiBldmVudHMsXG4gICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzLFxuICAgIGNoZWNrT3ZlcmZsb3c6IGNoZWNrT3ZlcmZsb3ckMSxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGltYWdlczogaW1hZ2VzXG4gIH07XG4gIHZhciBleHRlbmRlZERlZmF1bHRzID0ge307XG5cbiAgdmFyIFN3aXBlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3dpcGVyKCkge1xuICAgICAgdmFyIGVsO1xuICAgICAgdmFyIHBhcmFtcztcblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJi
24510BhcmdzWzBdLmNvbnN0cnVjdG9yICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmdzWzBdKS5zbGljZSg4LCAtMSkgPT09ICdPYmplY3QnKSB7XG4gICAgICAgIHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbCA9IGFyZ3NbMF07XG4gICAgICAgIHBhcmFtcyA9IGFyZ3NbMV07XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyYW1zKSBwYXJhbXMgPSB7fTtcbiAgICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICAgIGlmIChlbCAmJiAhcGFyYW1zLmVsKSBwYXJhbXMuZWwgPSBlbDtcblxuICAgICAgaWYgKHBhcmFtcy5lbCAmJiAkKHBhcmFtcy5lbCkubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgc3dpcGVycyA9IFtdO1xuICAgICAgICAkKHBhcmFtcy5lbCkuZWFjaChmdW5jdGlvbiAoY29udGFpbmVyRWwpIHtcbiAgICAgICAgICB2YXIgbmV3UGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMsIHtcbiAgICAgICAgICAgIGVsOiBjb250YWluZXJFbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN3aXBlcnMucHVzaChuZXcgU3dpcGVyKG5ld1BhcmFtcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN3aXBlcnM7XG4gICAgICB9IC8vIFN3aXBlciBJbnN0YW5jZVxuXG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLl9fc3dpcGVyX18gPSB0cnVlO1xuICAgICAgc3dpcGVyLnN1cHBvcnQgPSBnZXRTdXBwb3J0KCk7XG4gICAgICBzd2lwZXIuZGV2aWNlID0gZ2V0RGV2aWNlKHtcbiAgICAgICAgdXNlckFnZW50OiBwYXJhbXMudXNlckFnZW50XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5icm93c2VyID0gZ2V0QnJvd3NlcigpO1xuICAgICAgc3dpcGVyLmV2ZW50c0xpc3RlbmVycyA9IHt9O1xuICAgICAgc3dpcGVyLmV2ZW50c0FueUxpc3RlbmVycyA9IFtdO1xuXG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5tb2R1bGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzd2lwZXIubW9kdWxlcyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBPYmplY3Qua2V5cyhzd2lwZXIubW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgICAgICB2Y
24510XIgbW9kdWxlID0gc3dpcGVyLm1vZHVsZXNbbW9kdWxlTmFtZV07XG5cbiAgICAgICAgaWYgKG1vZHVsZS5wYXJhbXMpIHtcbiAgICAgICAgICB2YXIgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMobW9kdWxlLnBhcmFtcylbMF07XG4gICAgICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZS5wYXJhbXNbbW9kdWxlUGFyYW1OYW1lXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZVBhcmFtcyAhPT0gJ29iamVjdCcgfHwgbW9kdWxlUGFyYW1zID09PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoWyduYXZpZ2F0aW9uJywgJ3BhZ2luYXRpb24nLCAnc2Nyb2xsYmFyJ10uaW5kZXhPZihtb2R1bGVQYXJhbU5hbWUpID49IDAgJiYgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0ge1xuICAgICAgICAgICAgICBhdXRvOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghKG1vZHVsZVBhcmFtTmFtZSBpbiBwYXJhbXMgJiYgJ2VuYWJsZWQnIGluIG1vZHVsZVBhcmFtcykpIHJldHVybjtcblxuICAgICAgICAgIGlmIChwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gJ29iamVjdCcgJiYgISgnZW5hYmxlZCcgaW4gcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0pKSB7XG4gICAgICAgICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXS5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdKSBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7IC8vIEV4dGVuZCBkZWZhdWx0cyB3aXRoIG1vZHVsZXMgcGFyYW1zXG5cbiAgICAgIHZhciBzd2lwZXJQYXJhbXMgPSBleHRlbmQoe30sIGRlZmF1bHRzKTtcbiAgICAgIHN3aXBlci51c2VQYXJhbXMoc3dpcGVyUGFyYW1zKTsgLy8gRXh0ZW5kIGRlZmF1bHRzIHdpdGggcGFzc2VkIHBhcmFtc1xuXG4gICAgICBzd2lwZXIucGFyYW1zID0gZXh0ZW5kKHt9LCBzd2lwZXJQYXJhbXMsIGV4dGVuZGVkRGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlci5wYXJhbXMpO1xuICAgICAgc3dpcGVyLnBhc3NlZFBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTsgLy8gYWRkIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcyAmJiBzd2lwZXIucGFyYW1zLm9uKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHN3aXBlci5wYXJhbXMub24pLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgIHN3aXBlci5vbihldmVudE5hbWUsIHN3aXBlci5wYXJhbXMub25bZXZlbnROYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcyAmJiBzd2lwZXIucGFyYW1zLm9uQW55KSB7XG4gICAgICAgIHN3aXBlci5vbkFueShzd2lwZXIucGFyYW1zLm9uQW55KTtcbiAgICAgIH0gLy8gU2F2ZSBEb20gbGliXG5cblxuICAgICAgc3dpcGVyLiQgPSAkOyAvLyBFeHRlbmQgU3dpcGVyXG5cbiAgICAgIGV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgZW5hYmxlZDogc3dpcGVyLnBhcmFtcy5lbmFibGVkLFxuICAgICAgICBlbDogZWwsXG4gICAgICAgIC8vIENsYXNzZXNcbiAgICAgICAgY2xhc3NOYW1lczogW10sXG4gICAgICAgIC8vIFNsaWRlc1xuICAgICAgICBzbGlkZXM6ICQoKSxcbiAgICAgICAgc2xpZGVzR3JpZDogW10sXG4gICAgICAgIHNuYXBHcmlkOiBbXSxcbiAgICAgICAgc2xpZGVzU2l6ZXNHcmlkOiBbXSxcbiAgICAgICAgLy8gaXNEaXJlY3Rpb25cbiAgICAgICAgaXNIb3Jpem9udGFsOiBmdW5jdGlvbiBpc0hvcml6b250YWwoKSB7XG4gICAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH0sXG4gICAgICAgIGlzVmVydGljYWw6IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnO1xuICAgICAgICB9LFxuICAgICAgICAvLyBJbmRleGVzXG4gICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICByZWFsSW5kZXg6IDAsXG4gICAgICAgIC8vXG4gICAgICAgIGlzQmVnaW5uaW5nOiB0cnVlLFxuICAgICAgICBpc0VuZDogZmFsc2UsXG4gICAgICAgIC8vIFByb3BzXG4gICAgICAgIHRyYW5zbGF0ZTogMCxcbiAgICAgICAgcHJldmlvdXNUcmFuc2xhdGU6IDAsXG4gICAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgICB2ZWxvY2l0eTogMCxcbiAgICAgICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgLy8gTG9ja3NcbiAgICAgICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuICAgICAgICAvLyBUb3VjaCBFdmVudHNcbiAgICAgICAgdG91Y2hFdmVudHM6IGZ1bmN0aW9uIHRvdWNoRXZlbnRzKCkge1xuICAgICAgICAgIHZhciB0b3VjaCA9IFsndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnXTtcbiAgICAgICAgICB2Y
24510XIgZGVza3RvcCA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJ107XG5cbiAgICAgICAgICBpZiAoc3dpcGVyLnN1cHBvcnQucG9pbnRlckV2ZW50cykge1xuICAgICAgICAgICAgZGVza3RvcCA9IFsncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJ107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2ggPSB7XG4gICAgICAgICAgICBzdGFydDogdG91Y2hbMF0sXG4gICAgICAgICAgICBtb3ZlOiB0b3VjaFsxXSxcbiAgICAgICAgICAgIGVuZDogdG91Y2hbMl0sXG4gICAgICAgICAgICBjYW5jZWw6IHRvdWNoWzNdXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wID0ge1xuICAgICAgICAgICAgc3RhcnQ6IGRlc2t0b3BbMF0sXG4gICAgICAgICAgICBtb3ZlOiBkZXNrdG9wWzFdLFxuICAgICAgICAgICAgZW5kOiBkZXNrdG9wWzJdXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gc3dpcGVyLnN1cHBvcnQudG91Y2ggfHwgIXN3aXBlci5wYXJhbXMuc2ltdWxhdGVUb3VjaCA/IHN3aXBlci50b3VjaEV2ZW50c1RvdWNoIDogc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcDtcbiAgICAgICAgfSgpLFxuICAgICAgICB0b3VjaEV2ZW50c0RhdGE6IHtcbiAgICAgICAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc01vdmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWxsb3dUb3VjaENhbGxiYWNrczogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvdWNoU3RhcnRUaW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjdXJyZW50VHJhbnNsYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc3RhcnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhbGxvd1RocmVzaG9sZE1vdmU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAvLyBGb3JtIGVsZW1lbnRzIHRvIG1hdGNoXG4gICAgICAgICAgZm9ybUVsZW1lbnRzOiAnaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCB0ZXh0YXJlYSwgYnV0dG9uLCB2aWRlbywgbGFiZWwnLFxuICAgICAgICAgIC8vIExhc3QgY2xpY2sgdGltZVxuICAgICAgICAgIGxhc3RDbGlja1RpbWU6IG5vdygpLFxuICAgICAgICAgIGNsaWNrVGltZW91dDogdW5kZWZpbmVkLFxuICAgICAgICAgIC8vIFZlbG9jaXRpZXNcbiAgICAgICAgICB2ZWxvY2l0aWVzOiBbXSxcbiAgICAgICAgICBhbGxvd01vbWVudHVtQm91bmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNUb3VjaEV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgc3RhcnRNb3Zpbmc6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICAvLyBDbGlja3NcbiAgICAgICAgYWxsb3dDbGljazogdHJ1ZSxcbiAgICAgICAgLy8gVG91Y2hlc1xuICAgICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICAgICAgdG91Y2hlczoge1xuICAgICAgICAgIHN0YXJ0WDogMCxcbiAgICAgICAgICBzdGFydFk6IDAsXG4gICAgICAgICAgY3VycmVudFg6IDAsXG4gICAgICAgICAgY3VycmVudFk6IDAsXG4gICAgICAgICAgZGlmZjogMFxuICAgICAgICB9LFxuICAgICAgICAvLyBJbWFnZXNcbiAgICAgICAgaW1hZ2VzVG9Mb2FkOiBbXSxcbiAgICAgICAgaW1hZ2VzTG9hZGVkOiAwXG4gICAgICB9KTsgLy8gSW5zdGFsbCBNb2R1bGVzXG5cbiAgICAgIHN3aXBlci51c2VNb2R1bGVzKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnX3N3aXBlcicpOyAvLyBJbml0XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmluaXQpIHtcbiAgICAgICAgc3dpcGVyLmluaXQoKTtcbiAgICAgIH0gLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuXG5cbiAgICAgIHJldHVybiBzd2lwZXI7XG4gICAgfVxuXG4gICAgdmFyIF9wcm90byA9IFN3aXBlci5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnZW5hYmxlJyk7XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNhYmxlID0gZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLmVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIudW5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdkaXNhYmxlJyk7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRQcm9ncmVzcyA9IGZ1bmN0aW9uIHNldFByb2dyZXNzKHByb2dyZXNzLCBzcGVlZCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBwcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHByb2dyZXNzLCAwKSwgMSk7XG4gICAgICB2Y
24510XIgbWluID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgdmFyIG1heCA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICAgIHZhciBjdXJyZW50ID0gKG1heCAtIG1pbikgKiBwcm9ncmVzcyArIG1pbjtcbiAgICAgIHN3aXBlci50cmFuc2xhdGVUbyhjdXJyZW50LCB0eXBlb2Ygc3BlZWQgPT09ICd1bmRlZmluZWQnID8gMCA6IHNwZWVkKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmVtaXRDb250YWluZXJDbGFzc2VzID0gZnVuY3Rpb24gZW1pdENvbnRhaW5lckNsYXNzZXMoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5fZW1pdENsYXNzZXMgfHwgIXN3aXBlci5lbCkgcmV0dXJuO1xuICAgICAgdmFyIGNsYXNzZXMgPSBzd2lwZXIuZWwuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItY29udGFpbmVyJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSA9PT0gMDtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLmVtaXQoJ19jb250YWluZXJDbGFzc2VzJywgY2xhc3Nlcy5qb2luKCcgJykpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0U2xpZGVDbGFzc2VzID0gZnVuY3Rpb24gZ2V0U2xpZGVDbGFzc2VzKHNsaWRlRWwpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgcmV0dXJuIHNsaWRlRWwuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItc2xpZGUnKSA9PT0gMCB8fCBjbGFzc05hbWUuaW5kZXhPZihzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpID09PSAwO1xuICAgICAgfSkuam9pbignICcpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZW1pdFNsaWRlc0NsYXNzZXMgPSBmdW5jdGlvbiBlbWl0U2xpZGVzQ2xhc3NlcygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLl9lbWl0Q2xhc3NlcyB8fCAhc3dpcGVyLmVsKSByZXR1cm47XG4gICAgICB2Y
24510XIgdXBkYXRlcyA9IFtdO1xuICAgICAgc3dpcGVyLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgIHZhciBjbGFzc05hbWVzID0gc3dpcGVyLmdldFNsaWRlQ2xhc3NlcyhzbGlkZUVsKTtcbiAgICAgICAgdXBkYXRlcy5wdXNoKHtcbiAgICAgICAgICBzbGlkZUVsOiBzbGlkZUVsLFxuICAgICAgICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdfc2xpZGVDbGFzcycsIHNsaWRlRWwsIGNsYXNzTmFtZXMpO1xuICAgICAgfSk7XG4gICAgICBzd2lwZXIuZW1pdCgnX3NsaWRlQ2xhc3NlcycsIHVwZGF0ZXMpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2xpZGVzUGVyVmlld0R5bmFtaWMgPSBmdW5jdGlvbiBzbGlkZXNQZXJWaWV3RHluYW1pYygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICAgICAgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplLFxuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyIHNwdiA9IDE7XG5cbiAgICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdmFyIHNsaWRlU2l6ZSA9IHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICB2YXIgYnJlYWtMb29wO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBhY3RpdmVJbmRleCArIDE7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoc2xpZGVzW2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgYnJlYWtMb29wID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfaSA9IGFjdGl2ZUluZGV4IC0gMTsgX2kgPj0gMDsgX2kgLT0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbX2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbX2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgICAgaWYgKHNsaWRlU2l6ZSA+IHN3aXBlclNpemUpIGJyZWFrTG9vcCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSBhY3RpdmVJbmRleCArIDE7IF9pMiA8IHNsaWRlcy5sZW5ndGg7IF9pMiArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc0dyaWRbX2kyXSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzcHY7XG4gICAgfTtcblxuICAgIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIHZhciBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZCxcbiAgICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zOyAvLyBCcmVha3BvaW50c1xuXG4gICAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgIGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHRyYW5zbGF0ZVZhbHVlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgKiAtMSA6IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICAgIHZhciBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heCh0cmFuc2xhdGVWYWx1ZSwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRyYW5zbGF0ZWQ7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgICBzd2lwZXIudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpICYmIHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICAgIHRyYW5zbGF0ZWQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmFuc2xhdGVkID0gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09I
24510HN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgndXBkYXRlJyk7XG4gICAgfTtcblxuICAgIF9wcm90by5jaGFuZ2VEaXJlY3Rpb24gPSBmdW5jdGlvbiBjaGFuZ2VEaXJlY3Rpb24obmV3RGlyZWN0aW9uLCBuZWVkVXBkYXRlKSB7XG4gICAgICBpZiAobmVlZFVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIG5lZWRVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBjdXJyZW50RGlyZWN0aW9uID0gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb247XG5cbiAgICAgIGlmICghbmV3RGlyZWN0aW9uKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBuZXdEaXJlY3Rpb24gPSBjdXJyZW50RGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3RGlyZWN0aW9uID09PSBjdXJyZW50RGlyZWN0aW9uIHx8IG5ld0RpcmVjdGlvbiAhPT0gJ2hvcml6b250YWwnICYmIG5ld0RpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICByZXR1cm4gc3dpcGVyO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuJGVsLnJlbW92ZUNsYXNzKFwiXCIgKyBzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBjdXJyZW50RGlyZWN0aW9uKS5hZGRDbGFzcyhcIlwiICsgc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgbmV3RGlyZWN0aW9uKTtcbiAgICAgIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xuICAgICAgc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPSBuZXdEaXJlY3Rpb247XG4gICAgICBzd2lwZXIuc2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgICAgaWYgKG5ld0RpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNsaWRlRWwuc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbGlkZUVsLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5lbWl0KCdjaGFuZ2VEaXJlY3Rpb24nKTtcbiAgICAgIGlmIChuZWVkVXBkYXRlKSBzd2lwZXIudXBkYXRlKCk7XG4gICAgICByZXR1cm4gc3dpcGVyO1xuICAgIH07XG5cbiAgICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudChlbCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLm1vdW50ZWQpIHJldHVybiB0cnVlOyAvLyBGaW5kIGVsXG5cbiAgICAgIHZhciAkZWwgPSAkKGVsIHx8IHN3aXBlci5wYXJhbXMuZWwpO1xuICAgICAgZWwgPSAkZWxbMF07XG5cbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBlbC5zd2lwZXIgPSBzd2lwZXI7XG5cbiAgICAgIHZhciBnZXRXcmFwcGVyID0gZnVuY3Rpb24gZ2V0V3JhcHBlcigpIHtcbiAgICAgICAgaWYgKGVsICYmIGVsLnNoYWRvd1Jvb3QgJiYgZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICAgICAgdmFyIHJlcyA9ICQoZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLlwiICsgc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3MpKTsgLy8gQ2hpbGRyZW4gbmVlZHMgdG8gcmV0dXJuIHNsb3QgaXRlbXNcblxuICAgICAgICAgIHJlcy5jaGlsZHJlbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gJGVsLmNoaWxkcmVuKG9wdGlvbnMpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICRlbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzKTtcbiAgICAgIH07IC8vIEZpbmQgV3JhcHBlclxuXG5cbiAgICAgIHZhciAkd3JhcHBlckVsID0gZ2V0V3JhcHBlcigpO1xuXG4gICAgICBpZiAoJHdyYXBwZXJFbC5sZW5ndGggPT09IDAgJiYgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cykge1xuICAgICAgICB2Y
24510XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAkd3JhcHBlckVsID0gJCh3cmFwcGVyKTtcbiAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSBzd2lwZXIucGFyYW1zLndyYXBwZXJDbGFzcztcbiAgICAgICAgJGVsLmFwcGVuZCh3cmFwcGVyKTtcbiAgICAgICAgJGVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKS5lYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVFbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICAgICRlbDogJGVsLFxuICAgICAgICBlbDogZWwsXG4gICAgICAgICR3cmFwcGVyRWw6ICR3cmFwcGVyRWwsXG4gICAgICAgIHdyYXBwZXJFbDogJHdyYXBwZXJFbFswXSxcbiAgICAgICAgbW91bnRlZDogdHJ1ZSxcbiAgICAgICAgLy8gUlRMXG4gICAgICAgIHJ0bDogZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8ICRlbC5jc3MoJ2RpcmVjdGlvbicpID09PSAncnRsJyxcbiAgICAgICAgcnRsVHJhbnNsYXRlOiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIChlbC5kaXIudG9Mb3dlckNhc2UoKSA9PT0gJ3J0bCcgfHwgJGVsLmNzcygnZGlyZWN0aW9uJykgPT09ICdydGwnKSxcbiAgICAgICAgd3JvbmdSVEw6ICR3cmFwcGVyRWwuY3NzKCdkaXNwbGF5JykgPT09ICctd2Via2l0LWJveCdcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdChlbCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm4gc3dpcGVyO1xuICAgICAgdmFyIG1vdW50ZWQgPSBzd2lwZXIubW91bnQoZWwpO1xuICAgICAgaWYgKG1vdW50ZWQgPT09IGZhbHNlKSByZXR1cm4gc3dpcGVyO1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZUluaXQnKTsgLy8gU2V0IGJyZWFrcG9pbnRcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgICAgc3dpcGVyLnNldEJyZWFrcG9pbnQoKTtcbiAgICAgIH0gLy8gQWRkIENsYXNzZXNcblxuXG4gICAgICBzd2lwZXIuYWRkQ2xhc3NlcygpOyAvLyBDcmVhdGUgbG9vcFxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgICB9IC8vIFVwZGF0ZSBzaXplXG5cblxuICAgICAgc3dpcGVyLnVwZGF0ZVNpemUoKTsgLy8gVXBkYXRlIHNsaWRlc1xuXG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHtcbiAgICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICAgIH0gLy8gU2V0IEdyYWIgQ3Vyc29yXG5cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvciAmJiBzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICAgIHN3aXBlci5wcmVsb2FkSW1hZ2VzKCk7XG4gICAgICB9IC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcblxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgZmFsc2UsIHRydWUpO1xuICAgICAgfSAvLyBBdHRhY2ggZXZlbnRzXG5cblxuICAgICAgc3dpcGVyLmF0dGFjaEV2ZW50cygpOyAvLyBJbml0IEZsYWdcblxuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTsgLy8gRW1pdFxuXG4gICAgICBzd2lwZXIuZW1pdCgnaW5pdCcpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2FmdGVySW5pdCcpO1xuICAgICAgcmV0dXJuIHN3aXBlcjtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KGRlbGV0ZUluc3RhbmNlLCBjbGVhblN0eWxlcykge1xuICAgICAgaWYgKGRlbGV0ZUluc3RhbmNlID09PSB2b2lkIDApIHtcbiAgICAgICAgZGVsZXRlSW5zdGFuY2UgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xlYW5TdHlsZXMgPT09IHZvaWQgMCkge1xuICAgICAgICBjbGVhblN0eWxlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICAgJGVsID0gc3dpcGVyLiRlbCxcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcblxuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpOyAvLyBJbml0IEZsYWdcblxuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gZmFsc2U7IC8vIERldGFjaCBldmVudHNcblxuICAgICAgc3dpcGVyLmRldGFjaEV2ZW50cygpOyAvLyBEZXN0cm95IGxvb3BcblxuICAgICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgfSAvLyBDbGVhbnVwIHN0eWxlc1xuXG5cbiAgICAgIGlmIChjbGVhblN0eWxlcykge1xuICAgICAgICBzd2lwZXIucmVtb3ZlQ2xhc3NlcygpO1xuICAgICAgICAkZWwucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgICAgJHdyYXBwZXJFbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXG4gICAgICAgIGlmIChzbGlkZXMgJiYgc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgI
24510HNsaWRlcy5yZW1vdmVDbGFzcyhbcGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzLCBwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcywgcGFyYW1zLnNsaWRlTmV4dENsYXNzLCBwYXJhbXMuc2xpZGVQcmV2Q2xhc3NdLmpvaW4oJyAnKSkucmVtb3ZlQXR0cignc3R5bGUnKS5yZW1vdmVBdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdkZXN0cm95Jyk7IC8vIERldGFjaCBlbWl0dGVyIGV2ZW50c1xuXG4gICAgICBPYmplY3Qua2V5cyhzd2lwZXIuZXZlbnRzTGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgc3dpcGVyLm9mZihldmVudE5hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkZWxldGVJbnN0YW5jZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgc3dpcGVyLiRlbFswXS5zd2lwZXIgPSBudWxsO1xuICAgICAgICBkZWxldGVQcm9wcyhzd2lwZXIpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBTd2lwZXIuZXh0ZW5kRGVmYXVsdHMgPSBmdW5jdGlvbiBleHRlbmREZWZhdWx0cyhuZXdEZWZhdWx0cykge1xuICAgICAgZXh0ZW5kKGV4dGVuZGVkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKTtcbiAgICB9O1xuXG4gICAgU3dpcGVyLmluc3RhbGxNb2R1bGUgPSBmdW5jdGlvbiBpbnN0YWxsTW9kdWxlKG1vZHVsZSkge1xuICAgICAgaWYgKCFTd2lwZXIucHJvdG90eXBlLm1vZHVsZXMpIFN3aXBlci5wcm90b3R5cGUubW9kdWxlcyA9IHt9O1xuICAgICAgdmFyIG5hbWUgPSBtb2R1bGUubmFtZSB8fCBPYmplY3Qua2V5cyhTd2lwZXIucHJvdG90eXBlLm1vZHVsZXMpLmxlbmd0aCArIFwiX1wiICsgbm93KCk7XG4gICAgICBTd2lwZXIucHJvdG90eXBlLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGU7XG4gICAgfTtcblxuICAgIFN3aXBlci51c2UgPSBmdW5jdGlvbiB1c2UobW9kdWxlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGUpKSB7XG4gICAgICAgIG1vZHVsZS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIFN3aXBlci5pbnN0YWxsTW9kdWxlKG0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFN3aXBlcjtcbiAgICAgIH1cblxuICAgICAgU3dpcGVyLmluc3RhbGxNb2R1bGUobW9kdWxlKTtcbiAgICAgIHJldHVybiBTd2lwZXI7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhTd2lwZXIsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiZXh0ZW5kZWREZWZhdWx0c1wiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmRlZERlZmF1bHRzO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkZWZhdWx0c1wiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gU3dpcGVyO1xuICB9KCk7XG5cbiAgT2JqZWN0LmtleXMocHJvdG90eXBlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvdG90eXBlR3JvdXApIHtcbiAgICBPYmplY3Qua2V5cyhwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXSkuZm9yRWFjaChmdW5jdGlvbiAocHJvdG9NZXRob2QpIHtcbiAgICAgIFN3aXBlci5wcm90b3R5cGVbcHJvdG9NZXRob2RdID0gcHJvdG90eXBlc1twcm90b3R5cGVHcm91cF1bcHJvdG9NZXRob2RdO1xuICAgIH0pO1xuICB9KTtcbiAgU3dpcGVyLnVzZShbUmVzaXplLCBPYnNlcnZlciQxXSk7XG5cbiAgdmFyIFZpcnR1YWwgPSB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZm9yY2UpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIF9zd2lwZXIkcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3ID0gX3N3aXBlciRwYXJhbXMuc2xpZGVzUGVyVmlldyxcbiAgICAgICAgICBzbGlkZXNQZXJHcm91cCA9IF9zd2lwZXIkcGFyYW1zLnNsaWRlc1Blckdyb3VwLFxuICAgICAgICAgIGNlbnRlcmVkU2xpZGVzID0gX3N3aXBlciRwYXJhbXMuY2VudGVyZWRTbGlkZXM7XG4gICAgICB2Y
24510XIgX3N3aXBlciRwYXJhbXMkdmlydHVhID0gc3dpcGVyLnBhcmFtcy52aXJ0dWFsLFxuICAgICAgICAgIGFkZFNsaWRlc0JlZm9yZSA9IF9zd2lwZXIkcGFyYW1zJHZpcnR1YS5hZGRTbGlkZXNCZWZvcmUsXG4gICAgICAgICAgYWRkU2xpZGVzQWZ0ZXIgPSBfc3dpcGVyJHBhcmFtcyR2aXJ0dWEuYWRkU2xpZGVzQWZ0ZXI7XG4gICAgICB2YXIgX3N3aXBlciR2aXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwsXG4gICAgICAgICAgcHJldmlvdXNGcm9tID0gX3N3aXBlciR2aXJ0dWFsLmZyb20sXG4gICAgICAgICAgcHJldmlvdXNUbyA9IF9zd2lwZXIkdmlydHVhbC50byxcbiAgICAgICAgICBzbGlkZXMgPSBfc3dpcGVyJHZpcnR1YWwuc2xpZGVzLFxuICAgICAgICAgIHByZXZpb3VzU2xpZGVzR3JpZCA9IF9zd2lwZXIkdmlydHVhbC5zbGlkZXNHcmlkLFxuICAgICAgICAgIHJlbmRlclNsaWRlID0gX3N3aXBlciR2aXJ0dWFsLnJlbmRlclNsaWRlLFxuICAgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gX3N3aXBlciR2aXJ0dWFsLm9mZnNldDtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IHx8IDA7XG4gICAgICB2YXIgb2Zmc2V0UHJvcDtcbiAgICAgIGlmIChzd2lwZXIucnRsVHJhbnNsYXRlKSBvZmZzZXRQcm9wID0gJ3JpZ2h0JztlbHNlIG9mZnNldFByb3AgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJztcbiAgICAgIHZhciBzbGlkZXNBZnRlcjtcbiAgICAgIHZhciBzbGlkZXNCZWZvcmU7XG5cbiAgICAgIGlmIChjZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBzbGlkZXNBZnRlciA9IE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpICsgc2xpZGVzUGVyR3JvdXAgKyBhZGRTbGlkZXNBZnRlcjtcbiAgICAgICAgc2xpZGVzQmVmb3JlID0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyBzbGlkZXNQZXJHcm91cCArIGFkZFNsaWRlc0JlZm9yZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlc0FmdGVyID0gc2xpZGVzUGVyVmlldyArIChzbGlkZXNQZXJHcm91cCAtIDEpICsgYWRkU2xpZGVzQWZ0ZXI7XG4gICAgICAgIHNsaWRlc0JlZm9yZSA9IHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQmVmb3JlO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgZnJvbSA9IE1hdGgubWF4KChhY3RpdmVJbmRleCB8fCAwKSAtIHNsaWRlc0JlZm9yZSwgMCk7XG4gICAgICB2YXIgdG8gPSBNYXRoLm1pbigoYWN0aXZlSW5kZXggfHwgMCkgKyBzbGlkZXNBZnRlciwgc2xpZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgdmFyIG9mZnNldCA9IChzd2lwZXIuc2xpZGVzR3JpZFtmcm9tXSB8fCAwKSAtIChzd2lwZXIuc2xpZGVzR3JpZFswXSB8fCAwKTtcbiAgICAgIGV4dGVuZChzd2lwZXIudmlydHVhbCwge1xuICAgICAgICBmcm9tOiBmcm9tLFxuICAgICAgICB0bzogdG8sXG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzbGlkZXNHcmlkOiBzd2lwZXIuc2xpZGVzR3JpZFxuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIG9uUmVuZGVyZWQoKSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgICAgaWYgKHN3aXBlci5sYXp5ICYmIHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2aW91c0Zyb20gPT09IGZyb20gJiYgcHJldmlvdXNUbyA9PT0gdG8gJiYgIWZvcmNlKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzR3JpZCAhPT0gcHJldmlvdXNTbGlkZXNHcmlkICYmIG9mZnNldCAhPT0gcHJldmlvdXNPZmZzZXQpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVzLmNzcyhvZmZzZXRQcm9wLCBvZmZzZXQgKyBcInB4XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5yZW5kZXJFeHRlcm5hbCkge1xuICAgICAgICBzd2lwZXIucGFyYW1zLnZpcnR1YWwucmVuZGVyRXh0ZXJuYWwuY2FsbChzd2lwZXIsIHtcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICBmcm9tOiBmcm9tLFxuICAgICAgICAgIHRvOiB0byxcbiAgICAgICAgICBzbGlkZXM6IGZ1bmN0aW9uIGdldFNsaWRlcygpIHtcbiAgICAgICAgICAgIHZhciBzbGlkZXNUb1JlbmRlciA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8PSB0bzsgaSArPSAxKSB7XG4gICAgICAgICAgICAgIHNsaWRlc1RvUmVuZGVyLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNsaWRlc1RvUmVuZGVyO1xuICAgICAgICAgIH0oKVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnJlbmRlckV4dGVybmFsVXBkYXRlKSB7XG4gICAgICAgICAgb25SZW5kZXJlZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcHJlcGVuZEluZGV4ZXMgPSBbXTtcbiAgICAgIHZhciBhcHBlbmRJbmRleGVzID0gW107XG5cbiAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKS5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBwcmV2aW91c0Zyb207IGkgPD0gcHJldmlvdXNUbzsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKGkgPCBmcm9tIHx8IGkgPiB0bykge1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuZmluZChcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGkgKyBcIlxcXCJdXCIpLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc2xpZGVzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgICAgICBpZiAoX2kgPj0gZnJvbSAmJiBfaSA8PSB0bykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJldmlvdXNUbyA9PT0gJ3VuZGVmaW5lZCcgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIGFwcGVuZEluZGV4ZXMucHVzaChfaSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfaSA+IHByZXZpb3VzVG8pIGFwcGVuZEluZGV4ZXMucHVzaChfaSk7XG4gICAgICAgICAgICBpZiAoX2kgPCBwcmV2aW91c0Zyb20pIHByZXBlbmRJbmRleGVzLnB1c2goX2kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhcHBlbmRJbmRleGVzLmZvckVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLmFwcGVuZChyZW5kZXJTbGlkZShzbGlkZXNbaW5kZXhdLCBpbmRleCkpO1xuICAgICAgfSk7XG4gICAgICBwcmVwZW5kSW5kZXhlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBiIC0gYTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnByZXBlbmQocmVuZGVyU2xpZGUoc2xpZGVzW2luZGV4XSwgaW5kZXgpKTtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oJy5zd2lwZXItc2xpZGUnKS5jc3Mob2Zmc2V0UHJvcCwgb2Zmc2V0ICsgXCJweFwiKTtcbiAgICAgIG9uUmVuZGVyZWQoKTtcbiAgICB9LFxuICAgIHJlbmRlclNsaWRlOiBmdW5jdGlvbiByZW5kZXJTbGlkZShzbGlkZSwgaW5kZXgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcblxuICAgICAgaWYgKHBhcmFtcy5jYWNoZSAmJiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0pIHtcbiAgICAgICAgcmV0dXJuIHN3aXBlci52aXJ0dWFsLmNhY2hlW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgdmFyICRzbGlkZUVsID0gcGFyYW1zLnJlbmRlclNsaWRlID8gJChwYXJhbXMucmVuZGVyU2xpZGUuY2FsbChzd2lwZXIsIHNsaWRlLCBpbmRleCkpIDogJChcIjxkaXYgY2xhc3M9XFxcIlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzICsgXCJcXFwiIGRhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGluZGV4ICsgXCJcXFwiPlwiICsgc2xpZGUgKyBcIjwvZGl2PlwiKTtcbiAgICAgIGlmICghJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgICBpZiAocGFyYW1zLmNhY2hlKSBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0gPSAkc2xpZGVFbDtcbiAgICAgIHJldHVybiAkc2xpZGVFbDtcbiAgICB9LFxuICAgIGFwcGVuZFNsaWRlOiBmdW5jdGlvbiBhcHBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc1tpXSkgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgIH0sXG4gICAgcHJlcGVuZFNsaWRlOiBmdW5jdGlvbiBwcmVwZW5kU2xpZGUoc2xpZGVzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4ICsgMTtcbiAgICAgIHZhciBudW1iZXJPZk5ld1NsaWRlcyA9IDE7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNsaWRlcykpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoc2xpZGVzW2ldKSBzd2lwZXIudmlydHVhbC5zbGlkZXMudW5zaGlmdChzbGlkZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIHNsaWRlcy5sZW5ndGg7XG4gICAgICAgIG51bWJlck9mTmV3U2xpZGVzID0gc2xpZGVzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy51bnNoaWZ0KHNsaWRlcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gc3dpcGVyLnZpcnR1YWwuY2FjaGU7XG4gICAgICAgIHZhciBuZXdDYWNoZSA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhjYWNoZSkuZm9yRWFjaChmdW5jdGlvbiAoY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgICB2YXIgJGNhY2hlZEVsID0gY2FjaGVbY2FjaGVkSW5kZXhdO1xuICAgICAgICAgIHZhciBjYWNoZWRFbEluZGV4ID0gJGNhY2hlZEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG5cbiAgICAgICAgICBpZiAoY2FjaGVkRWxJbmRleCkge1xuICAgICAgICAgICAgJGNhY2hlZEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JywgcGFyc2VJbnQoY2FjaGVkRWxJbmRleCwgMTApICsgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3Q2FjaGVbcGFyc2VJbnQoY2FjaGVkSW5kZXgsIDEwKSArIG51bWJlck9mTmV3U2xpZGVzXSA9ICRjYWNoZWRFbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLmNhY2hlID0gbmV3Q2FjaGU7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSh0cnVlKTtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgICB9LFxuICAgIHJlbW92ZVNsaWRlOiBmdW5jdGlvbiByZW1vdmVTbGlkZShzbGlkZXNJbmRleGVzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzSW5kZXhlcyA9PT0gJ3VuZGVmaW5lZCcgfHwgc2xpZGVzSW5kZXhlcyA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzbGlkZXNJbmRleGVzKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gc2xpZGVzSW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5zcGxpY2Uoc2xpZGVzSW5kZXhlc1tpXSwgMSk7XG5cbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmNhY2hlKSB7XG4gICAgICAgICAgICBkZWxldGUgc3dpcGVyLnZpcnR1YWwuY2FjaGVbc2xpZGVzSW5kZXhlc1tpXV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXNbaV0gPCBhY3RpdmVJbmRleCkgYWN0aXZlSW5kZXggLT0gMTtcbiAgICAgICAgICBhY3RpdmVJbmRleCA9IE1hdGgubWF4KGFjdGl2ZUluZGV4LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnNwbGljZShzbGlkZXNJbmRleGVzLCAxKTtcblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmNhY2hlKSB7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci52aXJ0dWFsLmNhY2hlW3NsaWRlc0luZGV4ZXNdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXMgPCBhY3RpdmVJbmRleCkgYWN0aXZlSW5kZXggLT0gMTtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCwgMCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSh0cnVlKTtcbiAgICAgIHN3aXBlci5zbGlkZVRvKGFjdGl2ZUluZGV4LCAwKTtcbiAgICB9LFxuICAgIHJlbW92ZUFsbFNsaWRlczogZnVuY3Rpb24gcmVtb3ZlQWxsU2xpZGVzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMgPSBbXTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUodHJ1ZSk7XG4gICAgICBzd2lwZXIuc2xpZGVUbygwLCAwKTtcbiAgICB9XG4gIH07XG4gIHZhciBWaXJ0dWFsJDEgPSB7XG4gICAgbmFtZTogJ3ZpcnR1YWwnLFxuICAgIHBhcmFtczoge1xuICAgICAgdmlydHVhbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc2xpZGVzOiBbXSxcbiAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgIHJlbmRlclNsaWRlOiBudWxsLFxuICAgICAgICByZW5kZXJFeHRlcm5hbDogbnVsbCxcbiAgICAgICAgcmVuZGVyRXh0ZXJuYWxVcGRhdGU6IHRydWUsXG4gICAgICAgIGFkZFNsaWRlc0JlZm9yZTogMCxcbiAgICAgICAgYWRkU2xpZGVzQWZ0ZXI6IDBcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgdmlydHVhbDogX2V4dGVuZHMoe30sIFZpcnR1YWwsIHtcbiAgICAgICAgICBzbGlkZXM6IHN3aXBlci5wYXJhbXMudmlydHVhbC5zbGlkZXMsXG4gICAgICAgICAgY2FjaGU6IHt9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJ2aXJ0dWFsXCIpO1xuICAgICAgICB2Y
24510XIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgZXh0ZW5kKHN3aXBlci5wYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICAgIGV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSkge1xuICAgICAgICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBLZXlib2FyZCA9IHtcbiAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gICAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgZSA9IGV2ZW50O1xuICAgICAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDsgLy8ganF1ZXJ5IGZpeFxuXG4gICAgICB2YXIga2MgPSBlLmtleUNvZGUgfHwgZS5jaGFyQ29kZTtcbiAgICAgIHZhciBwYWdlVXBEb3duID0gc3dpcGVyLnBhcmFtcy5rZXlib2FyZC5wYWdlVXBEb3duO1xuICAgICAgdmFyIGlzUGFnZVVwID0gcGFnZVVwRG93biAmJiBrYyA9PT0gMzM7XG4gICAgICB2Y
24510XIgaXNQYWdlRG93biA9IHBhZ2VVcERvd24gJiYga2MgPT09IDM0O1xuICAgICAgdmFyIGlzQXJyb3dMZWZ0ID0ga2MgPT09IDM3O1xuICAgICAgdmFyIGlzQXJyb3dSaWdodCA9IGtjID09PSAzOTtcbiAgICAgIHZhciBpc0Fycm93VXAgPSBrYyA9PT0gMzg7XG4gICAgICB2YXIgaXNBcnJvd0Rvd24gPSBrYyA9PT0gNDA7IC8vIERpcmVjdGlvbnMgbG9ja3NcblxuICAgICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZU5leHQgJiYgKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBpc0Fycm93UmlnaHQgfHwgc3dpcGVyLmlzVmVydGljYWwoKSAmJiBpc0Fycm93RG93biB8fCBpc1BhZ2VEb3duKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgJiYgaXNBcnJvd0xlZnQgfHwgc3dpcGVyLmlzVmVydGljYWwoKSAmJiBpc0Fycm93VXAgfHwgaXNQYWdlVXApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50Lm5vZGVOYW1lICYmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGV4dGFyZWEnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5rZXlib2FyZC5vbmx5SW5WaWV3cG9ydCAmJiAoaXNQYWdlVXAgfHwgaXNQYWdlRG93biB8fCBpc0Fycm93TGVmdCB8fCBpc0Fycm93UmlnaHQgfHwgaXNBcnJvd1VwIHx8IGlzQXJyb3dEb3duKSkge1xuICAgICAgICB2Y
24510XIgaW5WaWV3ID0gZmFsc2U7IC8vIENoZWNrIHRoYXQgc3dpcGVyIHNob3VsZCBiZSBpbnNpZGUgb2YgdmlzaWJsZSBhcmVhIG9mIHdpbmRvd1xuXG4gICAgICAgIGlmIChzd2lwZXIuJGVsLnBhcmVudHMoXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpLmxlbmd0aCA+IDAgJiYgc3dpcGVyLiRlbC5wYXJlbnRzKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgICAgIHZhciBzd2lwZXJXaWR0aCA9ICRlbFswXS5jbGllbnRXaWR0aDtcbiAgICAgICAgdmFyIHN3aXBlckhlaWdodCA9ICRlbFswXS5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICB2YXIgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICB2YXIgc3dpcGVyT2Zmc2V0ID0gc3dpcGVyLiRlbC5vZmZzZXQoKTtcbiAgICAgICAgaWYgKHJ0bCkgc3dpcGVyT2Zmc2V0LmxlZnQgLT0gc3dpcGVyLiRlbFswXS5zY3JvbGxMZWZ0O1xuICAgICAgICB2YXIgc3dpcGVyQ29vcmQgPSBbW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wXSwgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyV2lkdGgsIHN3aXBlck9mZnNldC50b3BdLCBbc3dpcGVyT2Zmc2V0LmxlZnQsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXJIZWlnaHRdLCBbc3dpcGVyT2Zmc2V0LmxlZnQgKyBzd2lwZXJXaWR0aCwgc3dpcGVyT2Zmc2V0LnRvcCArIHN3aXBlckhlaWdodF1dO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyQ29vcmQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICB2Y
24510XIgcG9pbnQgPSBzd2lwZXJDb29yZFtpXTtcblxuICAgICAgICAgIGlmIChwb2ludFswXSA+PSAwICYmIHBvaW50WzBdIDw9IHdpbmRvd1dpZHRoICYmIHBvaW50WzFdID49IDAgJiYgcG9pbnRbMV0gPD0gd2luZG93SGVpZ2h0KSB7XG4gICAgICAgICAgICBpZiAocG9pbnRbMF0gPT09IDAgJiYgcG9pbnRbMV0gPT09IDApIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgICAgICAgIGluVmlldyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpblZpZXcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKGlzUGFnZVVwIHx8IGlzUGFnZURvd24gfHwgaXNBcnJvd0xlZnQgfHwgaXNBcnJvd1JpZ2h0KSB7XG4gICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoaXNQYWdlRG93biB8fCBpc0Fycm93UmlnaHQpICYmICFydGwgfHwgKGlzUGFnZVVwIHx8IGlzQXJyb3dMZWZ0KSAmJiBydGwpIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgICAgaWYgKChpc1BhZ2VVcCB8fCBpc0Fycm93TGVmdCkgJiYgIXJ0bCB8fCAoaXNQYWdlRG93biB8fCBpc0Fycm93UmlnaHQpICYmIHJ0bCkgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUGFnZVVwIHx8IGlzUGFnZURvd24gfHwgaXNBcnJvd1VwIHx8IGlzQXJyb3dEb3duKSB7XG4gICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1BhZ2VEb3duIHx8IGlzQXJyb3dEb3duKSBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgICAgIGlmIChpc1BhZ2VVcCB8fCBpc0Fycm93VXApIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ2tleVByZXNzJywga2MpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgaWYgKHN3aXBlci5rZXlib2FyZC5lbmFibGVkKSByZXR1cm47XG4gICAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsIHN3aXBlci5rZXlib2FyZC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIGlmICghc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHJldHVybjtcbiAgICAgICQoZG9jdW1lbnQpLm9mZigna2V5ZG93bicsIHN3aXBlci5rZXlib2FyZC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG4gIHZhciBLZXlib2FyZCQxID0ge1xuICAgIG5hbWU6ICdrZXlib2FyZCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBrZXlib2FyZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgb25seUluVmlld3BvcnQ6IHRydWUsXG4gICAgICAgIHBhZ2VVcERvd246IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAga2V5Ym9hcmQ6IF9leHRlbmRzKHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICB9LCBLZXlib2FyZClcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIua2V5Ym9hcmQuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG5cbiAgZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZCgpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgIHZhciBldmVudE5hbWUgPSAnb253aGVlbCc7XG4gICAgdmFyIGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBkb2N1bWVudCk7XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgICB2Y
24510XIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGlmICghaXNTdXBwb3J0ZWQgJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJiAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gICAgLy8gQHNlZSBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWRvbWltcGxlbWVudGF0aW9uLWhhc2ZlYXR1cmVcbiAgICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCcnLCAnJykgIT09IHRydWUpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHRlc3Qgc3VwcG9ydCBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgaW4gSUU5Ky5cbiAgICAgIGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgfVxuXG4gIHZhciBNb3VzZXdoZWVsID0ge1xuICAgIGxhc3RTY3JvbGxUaW1lOiBub3coKSxcbiAgICBsYXN0RXZlbnRCZWZvcmVTbmFwOiB1bmRlZmluZWQsXG4gICAgcmVjZW50V2hlZWxFdmVudHM6IFtdLFxuICAgIGV2ZW50OiBmdW5jdGlvbiBldmVudCgpIHtcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdmaXJlZm94JykgPiAtMSkgcmV0dXJuICdET01Nb3VzZVNjcm9sbCc7XG4gICAgICByZXR1cm4gaXNFdmVudFN1cHBvcnRlZCgpID8gJ3doZWVsJyA6ICdtb3VzZXdoZWVsJztcbiAgICB9LFxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gbm9ybWFsaXplKGUpIHtcbiAgICAgIC8vIFJlYXNvbmFibGUgZGVmYXVsdHNcbiAgICAgIHZhciBQSVhFTF9TVEVQID0gMTA7XG4gICAgICB2Y
24510XIgTElORV9IRUlHSFQgPSA0MDtcbiAgICAgIHZhciBQQUdFX0hFSUdIVCA9IDgwMDtcbiAgICAgIHZhciBzWCA9IDA7XG4gICAgICB2YXIgc1kgPSAwOyAvLyBzcGluWCwgc3BpbllcblxuICAgICAgdmFyIHBYID0gMDtcbiAgICAgIHZhciBwWSA9IDA7IC8vIHBpeGVsWCwgcGl4ZWxZXG4gICAgICAvLyBMZWdhY3lcblxuICAgICAgaWYgKCdkZXRhaWwnIGluIGUpIHtcbiAgICAgICAgc1kgPSBlLmRldGFpbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCd3aGVlbERlbHRhJyBpbiBlKSB7XG4gICAgICAgIHNZID0gLWUud2hlZWxEZWx0YSAvIDEyMDtcbiAgICAgIH1cblxuICAgICAgaWYgKCd3aGVlbERlbHRhWScgaW4gZSkge1xuICAgICAgICBzWSA9IC1lLndoZWVsRGVsdGFZIC8gMTIwO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3doZWVsRGVsdGFYJyBpbiBlKSB7XG4gICAgICAgIHNYID0gLWUud2hlZWxEZWx0YVggLyAxMjA7XG4gICAgICB9IC8vIHNpZGUgc2Nyb2xsaW5nIG9uIEZGIHdpdGggRE9NTW91c2VTY3JvbGxcblxuXG4gICAgICBpZiAoJ2F4aXMnIGluIGUgJiYgZS5heGlzID09PSBlLkhPUklaT05UQUxfQVhJUykge1xuICAgICAgICBzWCA9IHNZO1xuICAgICAgICBzWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHBYID0gc1ggKiBQSVhFTF9TVEVQO1xuICAgICAgcFkgPSBzWSAqIFBJWEVMX1NURVA7XG5cbiAgICAgIGlmICgnZGVsdGFZJyBpbiBlKSB7XG4gICAgICAgIHBZID0gZS5kZWx0YVk7XG4gICAgICB9XG5cbiAgICAgIGlmICgnZGVsdGFYJyBpbiBlKSB7XG4gICAgICAgIHBYID0gZS5kZWx0YVg7XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnNoaWZ0S2V5ICYmICFwWCkge1xuICAgICAgICAvLyBpZiB1c2VyIHNjcm9sbHMgd2l0aCBzaGlmdCBoZSB3YW50cyBob3Jpem9udGFsIHNjcm9sbFxuICAgICAgICBwWCA9IHBZO1xuICAgICAgICBwWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICgocFggfHwgcFkpICYmIGUuZGVsdGFNb2RlKSB7XG4gICAgICAgIGlmIChlLmRlbHRhTW9kZSA9PT0gMSkge1xuICAgICAgICAgIC8vIGRlbHRhIGluIExJTkUgdW5pdHNcbiAgICAgICAgICBwWCAqPSBMSU5FX0hFSUdIVDtcbiAgICAgICAgICBwWSAqPSBMSU5FX0hFSUdIVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZWx0YSBpbiBQQUdFIHVuaXRzXG4gICAgICAgICAgcFggKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgICAgcFkgKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRmFsbC1iYWNrIGlmIHNwaW4gY2Fubm90IGJlIGRldGVybWluZWRcblxuXG4gICAgICBpZiAocFggJiYgIXNYKSB7XG4gICAgICAgIHNYID0gcFggPCAxID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAocFkgJiYgIXNZKSB7XG4gICAgICAgIHNZID0gcFkgPCAxID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzcGluWDogc1gsXG4gICAgICAgIHNwaW5ZOiBzWSxcbiAgICAgICAgcGl4ZWxYOiBwWCxcbiAgICAgICAgcGl4ZWxZOiBwWVxuICAgICAgfTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5tb3VzZUVudGVyZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICAgIHZhciBlID0gZXZlbnQ7XG4gICAgICB2YXIgZGlzYWJsZVBhcmVudFN3aXBlciA9IHRydWU7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGFyZ2V0ID0gc3dpcGVyLiRlbDtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZXQgIT09ICdjb250YWluZXInKSB7XG4gICAgICAgIHRhcmdldCA9ICQoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLm1vdXNlRW50ZXJlZCAmJiAhdGFyZ2V0WzBdLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiAhcGFyYW1zLnJlbGVhc2VPbkVkZ2VzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7IC8vIGpxdWVyeSBmaXhcblxuICAgICAgdmFyIGRlbHRhID0gMDtcbiAgICAgIHZhciBydGxGYWN0b3IgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLTEgOiAxO1xuICAgICAgdmFyIGRhdGEgPSBNb3VzZXdoZWVsLm5vcm1hbGl6ZShlKTtcblxuICAgICAgaWYgKHBhcmFtcy5mb3JjZVRvQXhpcykge1xuICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSkgZGVsdGEgPSAtZGF0YS5waXhlbFggKiBydGxGYWN0b3I7ZWxzZSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhkYXRhLnBpeGVsWSkgPiBNYXRoLmFicyhkYXRhLnBpeGVsWCkpIGRlbHRhID0gLWRhdGEucGl4ZWxZO2Vsc2UgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWx0YSA9IE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSA/IC1kYXRhLnBpeGVsWCAqIHJ0bEZhY3RvciA6IC1kYXRhLnBpeGVsWTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlbHRhID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChwYXJhbXMuaW52ZXJ0KSBkZWx0YSA9IC1kZWx0YTsgLy8gR2V0IHRoZSBzY3JvbGwgcG9zaXRpb25zXG5cbiAgICAgIHZhciBwb3NpdGlvbnMgPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCkgKyBkZWx0YSAqIHBhcmFtcy5zZW5zaXRpdml0eTtcbiAgICAgIGlmIChwb3NpdGlvbnMgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSBwb3NpdGlvbnMgPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICBpZiAocG9zaXRpb25zIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgcG9zaXRpb25zID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpOyAvLyBXaGVuIGxvb3AgaXMgdHJ1ZTpcbiAgICAgIC8vICAgICB0aGUgZGlzYWJsZVBhcmVudFN3aXBlciB3aWxsIGJlIHRydWUuXG4gICAgICAvLyBXaGVuIGxvb3AgaXMgZmFsc2U6XG4gICAgICAvLyAgICAgaWYgdGhlIHNjcm9sbCBwb3NpdGlvbnMgaXMgbm90IG9uIGVkZ2UsXG4gICAgICAvLyAgICAgdGhlbiB0aGUgZGlzYWJsZVBhcmVudFN3aXBlciB3aWxsIGJlIHRydWUuXG4gICAgICAvLyAgICAgaWYgdGhlIHNjcm9sbCBvbiBlZGdlIHBvc2l0aW9ucyxcbiAgICAgIC8vICAgICB0aGVuIHRoZSBkaXNhYmxlUGFyZW50U3dpcGVyIHdpbGwgYmUgZmFsc2UuXG5cbiAgICAgIGRpc2FibGVQYXJlbnRTd2lwZXIgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyB0cnVlIDogIShwb3NpdGlvbnMgPT09IHN3aXBlci5taW5UcmFuc2xhdGUoKSB8fCBwb3NpdGlvbnMgPT09IHN3aXBlci5tYXhUcmFuc2xhdGUoKSk7XG4gICAgICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlciAmJiBzd2lwZXIucGFyYW1zLm5lc3RlZCkgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgZXZlbnQgaW4gYSB2YXJpYWJsZSB3aGljaCBzdG9yZXMgdGhlIHJlbGV2YW50IGRhdGFcbiAgICAgICAgdmFyIG5ld0V2ZW50ID0ge1xuICAgICAgICAgIHRpbWU6IG5vdygpLFxuICAgICAgICAgIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksXG4gICAgICAgICAgZGlyZWN0aW9uOiBNYXRoLnNpZ24oZGVsdGEpLFxuICAgICAgICAgIHJhdzogZXZlbnRcbiAgICAgICAgfTsgLy8gS2VlcCB0aGUgbW9zdCByZWNlbnQgZXZlbnRzXG5cbiAgICAgICAgdmFyIHJlY2VudFdoZWVsRXZlbnRzID0gc3dpcGVyLm1vdXNld2hlZWwucmVjZW50V2hlZWxFdmVudHM7XG5cbiAgICAgICAgaWYgKHJlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgcmVjZW50V2hlZWxFdmVudHMuc2hpZnQoKTsgLy8gb25seSBzdG9yZSB0aGUgbGFzdCBOIGV2ZW50c1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByZXZFdmVudCA9IHJlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA/IHJlY2VudFdoZWVsRXZlbnRzW3JlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5wdXNoKG5ld0V2ZW50KTsgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByZXZpb3VzIHJlY29yZGVkIGV2ZW50OlxuICAgICAgICAvLyAgIElmIGRpcmVjdGlvbiBoYXMgY2hhbmdlZCBvclxuICAgICAgICAvLyAgIGlmIHRoZSBzY3JvbGwgaXMgcXVpY2tlciB0aGFuIHRoZSBwcmV2aW91cyBvbmU6XG4gICAgICAgIC8vICAgICBBbmltYXRlIHRoZSBzbGlkZXIuXG4gICAgICAgIC8vIEVsc2UgKHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHdoZWVsIGlzIG1vdmVkKTpcbiAgICAgICAgLy8gICAgIEFuaW1hdGUgdGhlIHNsaWRlci5cblxuICAgICAgICBpZiAocHJldkV2ZW50KSB7XG4gICAgICAgICAgaWYgKG5ld0V2ZW50LmRpcmVjdGlvbiAhPT0gcHJldkV2ZW50LmRpcmVjdGlvbiB8fCBuZXdFdmVudC5kZWx0YSA+IHByZXZFdmVudC5kZWx0YSB8fCBuZXdFdmVudC50aW1lID4gcHJldkV2ZW50LnRpbWUgKyAxNTApIHtcbiAgICAgICAgICAgI
24510HN3aXBlci5tb3VzZXdoZWVsLmFuaW1hdGVTbGlkZXIobmV3RXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC5hbmltYXRlU2xpZGVyKG5ld0V2ZW50KTtcbiAgICAgICAgfSAvLyBJZiBpdCdzIHRpbWUgdG8gcmVsZWFzZSB0aGUgc2Nyb2xsOlxuICAgICAgICAvLyAgIFJldHVybiBub3cgc28geW91IGRvbid0IGhpdCB0aGUgcHJldmVudERlZmF1bHQuXG5cblxuICAgICAgICBpZiAoc3dpcGVyLm1vdXNld2hlZWwucmVsZWFzZVNjcm9sbChuZXdFdmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRnJlZW1vZGUgb3Igc2Nyb2xsQ29udGFpbmVyOlxuICAgICAgICAvLyBJZiB3ZSByZWNlbnRseSBzbmFwcGVkIGFmdGVyIGEgbW9tZW50dW0gc2Nyb2xsLCB0aGVuIGlnbm9yZSB3aGVlbCBldmVudHNcbiAgICAgICAgLy8gdG8gZ2l2ZSB0aW1lIGZvciB0aGUgZGVjZWxlcmF0aW9uIHRvIGZpbmlzaC4gU3RvcCBpZ25vcmluZyBhZnRlciA1MDAgbXNlY3NcbiAgICAgICAgLy8gb3IgaWYgaXQncyBhIG5ldyBzY3JvbGwgKGxhcmdlciBkZWx0YSBvciBpbnZlcnNlIHNpZ24gYXMgbGFzdCBldmVudCBiZWZvcmVcbiAgICAgICAgLy8gYW4gZW5kLW9mLW1vbWVudHVtIHNuYXApLlxuICAgICAgICB2YXIgX25ld0V2ZW50ID0ge1xuICAgICAgICAgIHRpbWU6IG5vdygpLFxuICAgICAgICAgIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksXG4gICAgICAgICAgZGlyZWN0aW9uOiBNYXRoLnNpZ24oZGVsdGEpXG4gICAgICAgIH07XG4gICAgICAgIHZhciBsYXN0RXZlbnRCZWZvcmVTbmFwID0gc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcDtcbiAgICAgICAgdmFyIGlnbm9yZVdoZWVsRXZlbnRzID0gbGFzdEV2ZW50QmVmb3JlU25hcCAmJiBfbmV3RXZlbnQudGltZSA8IGxhc3RFdmVudEJlZm9yZVNuYXAudGltZSArIDUwMCAmJiBfbmV3RXZlbnQuZGVsdGEgPD0gbGFzdEV2ZW50QmVmb3JlU25hcC5kZWx0YSAmJiBfbmV3RXZlbnQuZGlyZWN0aW9uID09PSBsYXN0RXZlbnRCZWZvcmVTbmFwLmRpcmVjdGlvbjtcblxuICAgICAgICBpZiAoIWlnbm9yZVdoZWVsRXZlbnRzKSB7XG4gICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpICsgZGVsdGEgKiBwYXJhbXMuc2Vuc2l0aXZpdHk7XG4gICAgICAgICAgdmFyIHdhc0JlZ2lubmluZyA9IHN3aXBlci5pc0JlZ2lubmluZztcbiAgICAgICAgICB2Y
24510XIgd2FzRW5kID0gc3dpcGVyLmlzRW5kO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHBvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUocG9zaXRpb24pO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgICAgICBpZiAoIXdhc0JlZ2lubmluZyAmJiBzd2lwZXIuaXNCZWdpbm5pbmcgfHwgIXdhc0VuZCAmJiBzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2hlZWwgc2Nyb2xsaW5nIHN0YXJ0cyB3aXRoIHN0aWNreSAoYWthIHNuYXApIGVuYWJsZWQsIHRoZW4gZGV0ZWN0XG4gICAgICAgICAgICAvLyB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsIGJ5IHN0b3JpbmcgcmVjZW50IChOPTE1Pykgd2hlZWwgZXZlbnRzLlxuICAgICAgICAgICAgLy8gMS4gZG8gYWxsIE4gZXZlbnRzIGhhdmUgZGVjcmVhc2luZyBvciBzYW1lIChhYnNvbHV0ZSB2YWx1ZSkgZGVsdGE/XG4gICAgICAgICAgICAvLyAyLiBkaWQgYWxsIE4gZXZlbnRzIGFycml2ZSBpbiB0aGUgbGFzdCBNIChNPTUwMD8pIG1zZWNzP1xuICAgICAgICAgICAgLy8gMy4gZG9lcyB0aGUgZWFybGllc3QgZXZlbnQgaGF2ZSBhbiAoYWJzb2x1dGUgdmFsdWUpIGRlbHRhIHRoYXQnc1xuICAgICAgICAgICAgLy8gICAgYXQgbGVhc3QgUCAoUD0xPykgbGFyZ2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGV2ZW50J3MgZGVsdGE/XG4gICAgICAgICAgICAvLyA0LiBkb2VzIHRoZSBsYXRlc3QgZXZlbnQgaGF2ZSBhIGRlbHRhIHRoYXQncyBzbWFsbGVyIHRoYW4gUSAoUT02PykgcGl4ZWxzP1xuICAgICAgICAgICAgLy8gSWYgMS00IGFyZSBcInllc1wiIHRoZW4gd2UncmUgbmVhciB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsIGRlY2VsZXJhdGlvbi5cbiAgICAgICAgICAgIC8vIFNuYXAgaW1tZWRpYXRlbHkgYW5kIGlnbm9yZSByZW1haW5pbmcgd2hlZWwgZXZlbnRzIGluIHRoaXMgc2Nyb2xsLlxuICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgZm9yIFwicmVtYWluaW5nIHdoZWVsIGV2ZW50cyBpbiB0aGlzIHNjcm9sbFwiIGRldGVybWluYXRpb24uXG4gICAgICAgICAgICAvLyBJZiAxLTQgYXJlbid0IHNhdGlzZmllZCwgdGhlbiB3YWl0IHRvIHNuYXAgdW50aWwgNTAwbXMgYWZ0ZXIgdGhlIGxhc3QgZXZlbnQuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLm1vdXNld2hlZWwudGltZW91dCk7XG4gICAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIF9yZWNlbnRXaGVlbEV2ZW50cyA9IHN3aXBlci5tb3VzZXdoZWVsLnJlY2VudFdoZWVsRXZlbnRzO1xuXG4gICAgICAgICAgICBpZiAoX3JlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA+PSAxNSkge1xuICAgICAgICAgICAgICBfcmVjZW50V2hlZWxFdmVudHMuc2hpZnQoKTsgLy8gb25seSBzdG9yZSB0aGUgbGFzdCBOIGV2ZW50c1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBfcHJldkV2ZW50ID0gX3JlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA/IF9yZWNlbnRXaGVlbEV2ZW50c1tfcmVjZW50V2hlZWxFdmVudHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIHZhciBmaXJzdEV2ZW50ID0gX3JlY2VudFdoZWVsRXZlbnRzWzBdO1xuXG4gICAgICAgICAgICBfcmVjZW50V2hlZWxFdmVudHMucHVzaChfbmV3RXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoX3ByZXZFdmVudCAmJiAoX25ld0V2ZW50LmRlbHRhID4gX3ByZXZFdmVudC5kZWx0YSB8fCBfbmV3RXZlbnQuZGlyZWN0aW9uICE9PSBfcHJldkV2ZW50LmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgLy8gSW5jcmVhc2luZyBvciByZXZlcnNlLXNpZ24gZGVsdGEgbWVhbnMgdGhlIHVzZXIgc3RhcnRlZCBzY3JvbGxpbmcgYWdhaW4uIENsZWFyIHRoZSB3aGVlbCBldmVudCBsb2cuXG4gICAgICAgICAgICAgIF9yZWNlbnRXaGVlbEV2ZW50cy5zcGxpY2UoMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9yZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPj0gMTUgJiYgX25ld0V2ZW50LnRpbWUgLSBmaXJzdEV2ZW50LnRpbWUgPCA1MDAgJiYgZmlyc3RFdmVudC5kZWx0YSAtIF9uZXdFdmVudC5kZWx0YSA+PSAxICYmIF9uZXdFdmVudC5kZWx0YSA8PSA2KSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGRlY2VsZXJhdGlvbiBvZiBhIG1vbWVudHVtIHNjcm9sbCwgc28gdGhlcmUncyBubyBuZWVkXG4gICAgICAgICAgICAgIC8vIHRvIHdhaXQgZm9yIG1vcmUgZXZlbnRzLiBTbmFwIEFTQVAgb24gdGhlIG5leHQgdGljay5cbiAgICAgICAgICAgICAgLy8gQWxzbywgYmVjYXVzZSB0aGVyZSdzIHNvbWUgcmVtYWluaW5nIG1vbWVudHVtIHdlJ2xsIGJpYXMgdGhlIHNuYXAgaW4gdGhlXG4gICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiBvZiB0aGUgb25nb2luZyBzY3JvbGwgYmVjYXVzZSBpdCdzIGJldHRlciBVWCBmb3IgdGhlIHNjcm9sbCB0byBzbmFwXG4gICAgICAgICAgICAgIC8vIGluIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgc2Nyb2xsIGluc3RlYWQgb2YgcmV2ZXJzaW5nIHRvIHNuYXAuICBUaGVyZWZvcmUsXG4gICAgICAgICAgICAgIC8vIGlmIGl0J3MgYWxyZWFkeSBzY3JvbGxlZCBtb3JlIHRoYW4gMjAlIGluIHRoZSBjdXJyZW50IGRpcmVjdGlvbiwga2VlcCBnb2luZy5cbiAgICAgICAgICAgICAgdmFyIHNuYXBUb1RocmVzaG9sZCA9IGRlbHRhID4gMCA/IDAuOCA6IDAuMjtcbiAgICAgICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcCA9IF9uZXdFdmVudDtcblxuICAgICAgICAgICAgICBfcmVjZW50V2hlZWxFdmVudHMuc3BsaWNlKDApO1xuXG4gICAgICAgICAgICAgI
24510HN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHVuZGVmaW5lZCwgc25hcFRvVGhyZXNob2xkKTtcbiAgICAgICAgICAgICAgfSwgMCk7IC8vIG5vIGRlbGF5OyBtb3ZlIG9uIG5leHQgdGlja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UgaGF2ZW4ndCBkZXRlY3RlZCB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsLCBzb1xuICAgICAgICAgICAgICAvLyB3ZSdsbCBjb25zaWRlciBhIHNjcm9sbCBcImNvbXBsZXRlXCIgd2hlbiB0aGVyZSBoYXZlbid0IGJlZW4gYW55IHdoZWVsIGV2ZW50c1xuICAgICAgICAgICAgICAvLyBmb3IgNTAwbXMuXG4gICAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNuYXBUb1RocmVzaG9sZCA9IDAuNTtcbiAgICAgICAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC5sYXN0RXZlbnRCZWZvcmVTbmFwID0gX25ld0V2ZW50O1xuXG4gICAgICAgICAgICAgICAgX3JlY2VudFdoZWVsRXZlbnRzLnNwbGljZSgwKTtcblxuICAgICAgICAgICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB1bmRlZmluZWQsIHNuYXBUb1RocmVzaG9sZCk7XG4gICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBFbWl0IGV2ZW50XG5cblxuICAgICAgICAgIGlmICghaWdub3JlV2hlZWxFdmVudHMpIHN3aXBlci5lbWl0KCdzY3JvbGwnLCBlKTsgLy8gU3RvcCBhdXRvcGxheVxuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkgJiYgc3dpcGVyLnBhcmFtcy5hdXRvcGxheURpc2FibGVPbkludGVyYWN0aW9uKSBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpOyAvLyBSZXR1cm4gcGFnZSBzY3JvbGwgb24gZWRnZSBwb3NpdGlvbnNcblxuICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIHx8IHBvc2l0aW9uID09PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBhbmltYXRlU2xpZGVyOiBmdW5jdGlvbiBhbmltYXRlU2xpZGVyKG5ld0V2ZW50KSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgICAgaWYgKHRoaXMucGFyYW1zLm1vdXNld2hlZWwudGhyZXNob2xkRGVsdGEgJiYgbmV3RXZlbnQuZGVsdGEgPCB0aGlzLnBhcmFtcy5tb3VzZXdoZWVsLnRocmVzaG9sZERlbHRhKSB7XG4gICAgICAgIC8vIFByZXZlbnQgaWYgZGVsdGEgb2Ygd2hlZWwgc2Nyb2xsIGRlbHRhIGlzIGJlbG93IGNvbmZpZ3VyZWQgdGhyZXNob2xkXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGFyYW1zLm1vdXNld2hlZWwudGhyZXNob2xkVGltZSAmJiBub3coKSAtIHN3aXBlci5tb3VzZXdoZWVsLmxhc3RTY3JvbGxUaW1lIDwgdGhpcy5wYXJhbXMubW91c2V3aGVlbC50aHJlc2hvbGRUaW1lKSB7XG4gICAgICAgIC8vIFByZXZlbnQgaWYgdGltZSBiZXR3ZWVuIHNjcm9sbHMgaXMgYmVsb3cgY29uZmlndXJlZCB0aHJlc2hvbGRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBJZiB0aGUgbW92ZW1lbnQgaXMgTk9UIGJpZyBlbm91Z2ggYW5kXG4gICAgICAvLyBpZiB0aGUgbGFzdCB0aW1lIHRoZSB1c2VyIHNjcm9sbGVkIHdhcyB0b28gY2xvc2UgdG8gdGhlIGN1cnJlbnQgb25lIChhdm9pZCBjb250aW51b3VzbHkgdHJpZ2dlcmluZyB0aGUgc2xpZGVyKTpcbiAgICAgIC8vICAgRG9uJ3QgZ28gYW55IGZ1cnRoZXIgKGF2b2lkIGluc2lnbmlmaWNhbnQgc2Nyb2xsIG1vdmVtZW50KS5cblxuXG4gICAgICBpZiAobmV3RXZlbnQuZGVsdGEgPj0gNiAmJiBub3coKSAtIHN3aXBlci5tb3VzZXdoZWVsLmxhc3RTY3JvbGxUaW1lIDwgNjApIHtcbiAgICAgICAgLy8gUmV0dXJuIGZhbHNlIGFzIGEgZGVmYXVsdFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gSWYgdXNlciBpcyBzY3JvbGxpbmcgdG93YXJkcyB0aGUgZW5kOlxuICAgICAgLy8gICBJZiB0aGUgc2xpZGVyIGhhc24ndCBoaXQgdGhlIGxhdGVzdCBzbGlkZSBvclxuICAgICAgLy8gICBpZiB0aGUgc2xpZGVyIGlzIGEgbG9vcCBhbmRcbiAgICAgIC8vICAgaWYgdGhlIHNsaWRlciBpc24ndCBtb3ZpbmcgcmlnaHQgbm93OlxuICAgICAgLy8gICAgIEdvIHRvIG5leHQgc2xpZGUgYW5kXG4gICAgICAvLyAgICAgZW1pdCBhIHNjcm9sbCBldmVudC5cbiAgICAgIC8vIEVsc2UgKHRoZSB1c2VyIGlzIHNjcm9sbGluZyB0b3dhcmRzIHRoZSBiZWdpbm5pbmcpIGFuZFxuICAgICAgLy8gaWYgdGhlIHNsaWRlciBoYXNuJ3QgaGl0IHRoZSBmaXJzdCBzbGlkZSBvclxuICAgICAgLy8gaWYgdGhlIHNsaWRlciBpcyBhIGxvb3AgYW5kXG4gICAgICAvLyBpZiB0aGUgc2xpZGVyIGlzbid0IG1vdmluZyByaWdodCBub3c6XG4gICAgICAvLyAgIEdvIHRvIHByZXYgc2xpZGUgYW5kXG4gICAgICAvLyAgIGVtaXQgYSBzY3JvbGwgZXZlbnQuXG5cblxuICAgICAgaWYgKG5ld0V2ZW50LmRpcmVjdGlvbiA8IDApIHtcbiAgICAgICAgaWYgKCghc3dpcGVyLmlzRW5kIHx8IHN3aXBlci5wYXJhbXMubG9vcCkgJiYgIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIG5ld0V2ZW50LnJhdyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKCFzd2lwZXIuaXNCZWdpbm5pbmcgfHwgc3dpcGVyLnBhcmFtcy5sb29wKSAmJiAhc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdzY3JvbGwnLCBuZXdFdmVudC5yYXcpO1xuICAgICAgfSAvLyBJZiB5b3UgZ290IGhlcmUgaXMgYmVjYXVzZSBhbiBhbmltYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIHNvIHN0b3JlIHRoZSBjdXJyZW50IHRpbWVcblxuXG4gICAgICBzd2lwZXIubW91c2V3aGVlbC5sYXN0U2Nyb2xsVGltZSA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTsgLy8gUmV0dXJuIGZhbHNlIGFzIGEgZGVmYXVsdFxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICByZWxlYXNlU2Nyb2xsOiBmdW5jdGlvbiByZWxlYXNlU2Nyb2xsKG5ld0V2ZW50KSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG5cbiAgICAgIGlmIChuZXdFdmVudC5kaXJlY3Rpb24gPCAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gdHJ1ZSB0byBhbmltYXRlIHNjcm9sbCBvbiBlZGdlc1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmIHBhcmFtcy5yZWxlYXNlT25FZGdlcykge1xuICAgICAgICAvLyBSZXR1cm4gdHJ1ZSB0byBhbmltYXRlIHNjcm9sbCBvbiBlZGdlc1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgZW5hYmxlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBldmVudCA9IE1vdXNld2hlZWwuZXZlbnQoKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIHRhcmdldCA9IHN3aXBlci4kZWw7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2V0ICE9PSAnY29udGFpbmVyJykge1xuICAgICAgICB0YXJnZXQgPSAkKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZXQpO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXQub24oJ21vdXNlZW50ZXInLCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGVNb3VzZUVudGVyKTtcbiAgICAgIHRhcmdldC5vbignbW91c2VsZWF2ZScsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZU1vdXNlTGVhdmUpO1xuICAgICAgdGFyZ2V0Lm9uKGV2ZW50LCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBldmVudCA9IE1vdXNld2hlZWwuZXZlbnQoKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIXN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciB0YXJnZXQgPSBzd2lwZXIuJGVsO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdldCAhPT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgdGFyZ2V0ID0gJChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0Lm9mZihldmVudCwgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlKTtcbiAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIE1vdXNld2hlZWwkMSA9IHtcbiAgICBuYW1lOiAnbW91c2V3aGVlbCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBtb3VzZXdoZWVsOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByZWxlYXNlT25FZGdlczogZmFsc2UsXG4gICAgICAgIGludmVydDogZmFsc2UsXG4gICAgICAgIGZvcmNlVG9BeGlzOiBmYWxzZSxcbiAgICAgICAgc2Vuc2l0aXZpdHk6IDEsXG4gICAgICAgIGV2ZW50c1RhcmdldDogJ2NvbnRhaW5lcicsXG4gICAgICAgIHRocmVzaG9sZERlbHRhOiBudWxsLFxuICAgICAgICB0aHJlc2hvbGRUaW1lOiBudWxsXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIG1vdXNld2hlZWw6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBsYXN0U2Nyb2xsVGltZTogbm93KCksXG4gICAgICAgICAgbGFzdEV2ZW50QmVmb3JlU25hcDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlY2VudFdoZWVsRXZlbnRzOiBbXSxcbiAgICAgICAgICBlbmFibGU6IE1vdXNld2hlZWwuZW5hYmxlLFxuICAgICAgICAgIGRpc2FibGU6IE1vdXNld2hlZWwuZGlzYWJsZSxcbiAgICAgICAgICBoYW5kbGU6IE1vdXNld2hlZWwuaGFuZGxlLFxuICAgICAgICAgIGhhbmRsZU1vdXNlRW50ZXI6IE1vdXNld2hlZWwuaGFuZGxlTW91c2VFbnRlcixcbiAgICAgICAgICBoYW5kbGVNb3VzZUxlYXZlOiBNb3VzZXdoZWVsLmhhbmRsZU1vdXNlTGVhdmUsXG4gICAgICAgICAgYW5pbWF0ZVNsaWRlcjogTW91c2V3aGVlbC5hbmltYXRlU2xpZGVyLFxuICAgICAgICAgIHJlbGVhc2VTY3JvbGw6IE1vdXNld2hlZWwucmVsZWFzZVNjcm9sbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmRpc2FibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZW5hYmxlZCkgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlKCk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHN3aXBlci5tb3VzZXdoZWVsLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIE5hdmlnYXRpb24gPSB7XG4gICAgdG9nZ2xlRWw6IGZ1bmN0aW9uIHRvZ2dsZUVsKCRlbCwgZGlzYWJsZWQpIHtcbiAgICAgICRlbFtkaXNhYmxlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSh0aGlzLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgaWYgKCRlbFswXSAmJiAkZWxbMF0udGFnTmFtZSA9PT0gJ0JVVFRPTicpICRlbFswXS5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAvLyBVcGRhdGUgTmF2aWdhdGlvbiBCdXR0b25zXG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgICB2YXIgdG9nZ2xlRWwgPSBzd2lwZXIubmF2aWdhdGlvbi50b2dnbGVFbDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb24gPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uLiRuZXh0RWwsXG4gICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbi4kcHJldkVsO1xuXG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHRvZ2dsZUVsKCRwcmV2RWwsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvZ2dsZUVsKCRwcmV2RWwsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgICAkcHJldkVsW3N3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0VuZCkge1xuICAgICAgICAgIHRvZ2dsZUVsKCRuZXh0RWwsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvZ2dsZUVsKCRuZXh0RWwsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgICAkbmV4dEVsW3N3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgb25QcmV2Q2xpY2s6IGZ1bmN0aW9uIG9uUHJldkNsaWNrKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSByZXR1cm47XG4gICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfSxcbiAgICBvbk5leHRDbGljazogZnVuY3Rpb24gb25OZXh0Q2xpY2soZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgICBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24gPSBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlci4kZWwsIHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbiwgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cywge1xuICAgICAgICBuZXh0RWw6ICdzd2lwZXItYnV0dG9uLW5leHQnLFxuICAgICAgICBwcmV2RWw6ICdzd2lwZXItYnV0dG9uLXByZXYnXG4gICAgICB9KTtcbiAgICAgIGlmICghKHBhcmFtcy5uZXh0RWwgfHwgcGFyYW1zLnByZXZFbCkpIHJldHVybjtcbiAgICAgIHZhciAkbmV4dEVsO1xuICAgICAgdmFyICRwcmV2RWw7XG5cbiAgICAgIGlmIChwYXJhbXMubmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSAkKHBhcmFtcy5uZXh0RWwpO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzICYmIHR5cGVvZiBwYXJhbXMubmV4dEVsID09PSAnc3RyaW5nJyAmJiAkbmV4dEVsLmxlbmd0aCA+IDEgJiYgc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5uZXh0RWwpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICRuZXh0RWwgPSBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLm5leHRFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5wcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9ICQocGFyYW1zLnByZXZFbCk7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5wcmV2RWwgPT09ICdzdHJpbmcnICYmICRwcmV2RWwubGVuZ3RoID4gMSAmJiBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLnByZXZFbCkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgJHByZXZFbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMucHJldkVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgJG5leHRFbC5vbignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vbk5leHRDbGljayk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAkcHJldkVsLm9uKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uUHJldkNsaWNrKTtcbiAgICAgIH1cblxuICAgICAgZXh0ZW5kKHN3aXBlci5uYXZpZ2F0aW9uLCB7XG4gICAgICAgICRuZXh0RWw6ICRuZXh0RWwsXG4gICAgICAgIG5leHRFbDogJG5leHRFbCAmJiAkbmV4dEVsWzBdLFxuICAgICAgICAkcHJldkVsOiAkcHJldkVsLFxuICAgICAgICBwcmV2RWw6ICRwcmV2RWwgJiYgJHByZXZFbFswXVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgaWYgKCRuZXh0RWwpICRuZXh0RWwuYWRkQ2xhc3MocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICAgIGlmICgkcHJldkVsKSAkcHJldkVsLmFkZENsYXNzKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIF9zd2lwZXIkbmF2aWdhdGlvbjIgPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uMi4kbmV4dEVsLFxuICAgICAgICAgICRwcmV2RWwgPSBfc3dpcGVyJG5hdmlnYXRpb24yLiRwcmV2RWw7XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoKSB7XG4gICAgICAgICRuZXh0RWwub2ZmKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uTmV4dENsaWNrKTtcbiAgICAgICAgJG5leHRFbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uZGlzYWJsZWRDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoKSB7XG4gICAgICAgICRwcmV2RWwub2ZmKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uUHJldkNsaWNrKTtcbiAgICAgICAgJHByZXZFbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uZGlzYWJsZWRDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgTmF2aWdhdGlvbiQxID0ge1xuICAgIG5hbWU6ICduYXZpZ2F0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgbmV4dEVsOiBudWxsLFxuICAgICAgICBwcmV2RWw6IG51bGwsXG4gICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWRDbGFzczogJ3N3aXBlci1idXR0b24tZGlzYWJsZWQnLFxuICAgICAgICBoaWRkZW5DbGFzczogJ3N3aXBlci1idXR0b24taGlkZGVuJyxcbiAgICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLWJ1dHRvbi1sb2NrJ1xuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBuYXZpZ2F0aW9uOiBfZXh0ZW5kcyh7fSwgTmF2aWdhdGlvbilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLmluaXQoKTtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgdG9FZGdlOiBmdW5jdGlvbiB0b0VkZ2Uoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIGZyb21FZGdlOiBmdW5jdGlvbiBmcm9tRWRnZShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgICdlbmFibGUgZGlzYWJsZSc6IGZ1bmN0aW9uIGVuYWJsZURpc2FibGUoc3dpcGVyKSB7XG4gICAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb24zID0gc3dpcGVyLm5hdmlnYXRpb24sXG4gICAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uMy4kbmV4dEVsLFxuICAgICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbjMuJHByZXZFbDtcblxuICAgICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICAgICRuZXh0RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHByZXZFbCkge1xuICAgICAgICAgICRwcmV2RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbGljazogZnVuY3Rpb24gY2xpY2soc3dpcGVyLCBlKSB7XG4gICAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb240ID0gc3dpcGVyLm5hdmlnYXRpb24sXG4gICAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uNC4kbmV4dEVsLFxuICAgICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbjQuJHByZXZFbDtcbiAgICAgICAgdmFyIHRhcmdldEVsID0gZS50YXJnZXQ7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRlT25DbGljayAmJiAhJCh0YXJnZXRFbCkuaXMoJHByZXZFbCkgJiYgISQodGFyZ2V0RWwpLmlzKCRuZXh0RWwpKSB7XG4gICAgICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIChzd2lwZXIucGFnaW5hdGlvbi5lbCA9PT0gdGFyZ2V0RWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uZWwuY29udGFpbnModGFyZ2V0RWwpKSkgcmV0dXJuO1xuICAgICAgICAgIHZhciBpc0hpZGRlbjtcblxuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICBpc0hpZGRlbiA9ICRuZXh0RWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAgIGlzSGlkZGVuID0gJHByZXZFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ25hdmlnYXRpb25TaG93Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCduYXZpZ2F0aW9uSGlkZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICAkbmV4dEVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAgICRwcmV2RWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIFBhZ2luYXRpb24gPSB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAvLyBSZW5kZXIgfHwgVXBkYXRlIFBhZ2luYXRpb24gYnVsbGV0cy9pdGVtc1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgcnRsID0gc3dpcGVyLnJ0bDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLiRlbCB8fCBzd2lwZXIucGFnaW5hdGlvbi4kZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB2YXIgc2xpZGVzTGVuZ3RoID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsOyAvLyBDdXJyZW50L1RvdGFsXG5cbiAgICAgIHZhciBjdXJyZW50O1xuICAgICAgdmFyIHRvdGFsID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMikgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKSA6IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgY3VycmVudCA9IE1hdGguY2VpbCgoc3dpcGVyLmFjdGl2ZUluZGV4IC0gc3dpcGVyLmxvb3BlZFNsaWRlcykgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcblxuICAgICAgICBpZiAoY3VycmVudCA+IHNsaWRlc0xlbmd0aCAtIDEgLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMikge1xuICAgICAgICAgIGN1cnJlbnQgLT0gc2xpZGVzTGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA+IHRvdGFsIC0gMSkgY3VycmVudCAtPSB0b3RhbDtcbiAgICAgICAgaWYgKGN1cnJlbnQgPCAwICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvblR5cGUgIT09ICdidWxsZXRzJykgY3VycmVudCA9IHRvdGFsICsgY3VycmVudDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGN1cnJlbnQgPSBzd2lwZXIuc25hcEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuICAgICAgfSAvLyBUeXBlc1xuXG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBidWxsZXRzID0gc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cztcbiAgICAgICAgdmFyIGZpcnN0SW5kZXg7XG4gICAgICAgIHZhciBsYXN0SW5kZXg7XG4gICAgICAgIHZhciBtaWRJbmRleDtcblxuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSA9IGJ1bGxldHMuZXEoMClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ291dGVyV2lkdGgnIDogJ291dGVySGVpZ2h0J10odHJ1ZSk7XG4gICAgICAgICAgJGVsLmNzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnd2lkdGgnIDogJ2hlaWdodCcsIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgKiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyArIDQpICsgXCJweFwiKTtcblxuICAgICAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID4gMSAmJiBzd2lwZXIucHJldmlvdXNJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggKz0gY3VycmVudCAtIHN3aXBlci5wcmV2aW91c0luZGV4O1xuXG4gICAgICAgICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID4gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDEpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaXJzdEluZGV4ID0gY3VycmVudCAtIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleDtcbiAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4ICsgKE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzKSAtIDEpO1xuICAgICAgICAgIG1pZEluZGV4ID0gKGxhc3RJbmRleCArIGZpcnN0SW5kZXgpIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1bGxldHMucmVtb3ZlQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCIgXCIgKyBwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0IFwiICsgcGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dC1uZXh0IFwiICsgcGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItcHJldiBcIiArIHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXYtcHJldiBcIiArIHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW1haW5cIik7XG5cbiAgICAgICAgaWYgKCRlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgYnVsbGV0cy5lYWNoKGZ1bmN0aW9uIChidWxsZXQpIHtcbiAgICAgICAgICAgIHZhciAkYnVsbGV0ID0gJChidWxsZXQpO1xuICAgICAgICAgICAgdmFyIGJ1bGxldEluZGV4ID0gJGJ1bGxldC5pbmRleCgpO1xuXG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgJGJ1bGxldC5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA+PSBmaXJzdEluZGV4ICYmIGJ1bGxldEluZGV4IDw9IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICRidWxsZXQuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbWFpblwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gZmlyc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICRidWxsZXQucHJldigpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZX
24510ZcIikucHJldigpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXYtcHJldlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgJGJ1bGxldC5uZXh0KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dFwiKS5uZXh0KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dC1uZXh0XCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyICRidWxsZXQgPSBidWxsZXRzLmVxKGN1cnJlbnQpO1xuICAgICAgICAgIHZhciBidWxsZXRJbmRleCA9ICRidWxsZXQuaW5kZXgoKTtcbiAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgICB2YXIgJGZpcnN0RGlzcGxheWVkQnVsbGV0ID0gYnVsbGV0cy5lcShmaXJzdEluZGV4KTtcbiAgICAgICAgICAgIHZhciAkbGFzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEobGFzdEluZGV4KTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0SW5kZXg7IGkgPD0gbGFzdEluZGV4OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgYnVsbGV0cy5lcShpKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1tYWluXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA+PSBidWxsZXRzLmxlbmd0aCAtIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHM7IF9pID49IDA7IF9pIC09IDEpIHtcbiAgICAgICAgICAgICAgICAgIGJ1bGxldHMuZXEoYnVsbGV0cy5sZW5ndGggLSBfaSkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbWFpblwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDEpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXZcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0LnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2XCIpLnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2LXByZXZcIik7XG4gICAgICAgICAgICAgICAgJGxhc3REaXNwbGF5ZWRCdWxsZXQubmV4dCgpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW5leHRcIikubmV4dCgpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW5leHQtbmV4dFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0LnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2XCIpLnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2LXByZXZcIik7XG4gICAgICAgICAgICAgICRsYXN0RGlzcGxheWVkQnVsbGV0Lm5leHQoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0XCIpLm5leHQoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0LW5leHRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgIHZhciBkeW5hbWljQnVsbGV0c0xlbmd0aCA9IE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzICsgNCk7XG4gICAgICAgICAgdmFyIGJ1bGxldHNPZmZzZXQgPSAoc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSAqIGR5bmFtaWNCdWxsZXRzTGVuZ3RoIC0gc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSkgLyAyIC0gbWlkSW5kZXggKiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplO1xuICAgICAgICAgIHZhciBvZmZzZXRQcm9wID0gcnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgICBidWxsZXRzLmNzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBvZmZzZXRQcm9wIDogJ3RvcCcsIGJ1bGxldHNPZmZzZXQgKyBcInB4XCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2ZyYWN0aW9uJykge1xuICAgICAgICAkZWwuZmluZChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuY3VycmVudENsYXNzKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25DdXJyZW50KGN1cnJlbnQgKyAxKSk7XG4gICAgICAgICRlbC5maW5kKGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy50b3RhbENsYXNzKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25Ub3RhbCh0b3RhbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgdmFyIHByb2dyZXNzYmFyRGlyZWN0aW9uO1xuXG4gICAgICAgIGlmIChwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgICAgIHByb2dyZXNzYmFyRGlyZWN0aW9uID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgc2NhbGUgPSAoY3VycmVudCArIDEpIC8gdG90YWw7XG4gICAgICAgIHZhciBzY2FsZVggPSAxO1xuICAgICAgICB2YXIgc2NhbGVZID0gMTtcblxuICAgICAgICBpZiAocHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIHNjYWxlWCA9IHNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlWSA9IHNjYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVsLmZpbmQoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKSkudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWChcIiArIHNjYWxlWCArIFwiKSBzY2FsZVkoXCIgKyBzY2FsZVkgKyBcIilcIikudHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnY3VzdG9tJyAmJiBwYXJhbXMucmVuZGVyQ3VzdG9tKSB7XG4gICAgICAgICRlbC5odG1sKHBhcmFtcy5yZW5kZXJDdXN0b20oc3dpcGVyLCBjdXJyZW50ICsgMSwgdG90YWwpKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCAkZWxbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25VcGRhdGUnLCAkZWxbMF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgICRlbFtzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIC8vIFJlbmRlciBDb250YWluZXJcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICAgIGlmICghcGFyYW1zLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciBzbGlkZXNMZW5ndGggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG4gICAgICB2Y
24510XIgcGFnaW5hdGlvbkhUTUwgPSAnJztcblxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycpIHtcbiAgICAgICAgdmFyIG51bWJlck9mQnVsbGV0cyA9IHN3aXBlci5wYXJhbXMubG9vcCA/IE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmICFzd2lwZXIucGFyYW1zLmxvb3AgJiYgbnVtYmVyT2ZCdWxsZXRzID4gc2xpZGVzTGVuZ3RoKSB7XG4gICAgICAgICAgbnVtYmVyT2ZCdWxsZXRzID0gc2xpZGVzTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkJ1bGxldHM7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChwYXJhbXMucmVuZGVyQnVsbGV0KSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBwYXJhbXMucmVuZGVyQnVsbGV0LmNhbGwoc3dpcGVyLCBpLCBwYXJhbXMuYnVsbGV0Q2xhc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBcIjxcIiArIHBhcmFtcy5idWxsZXRFbGVtZW50ICsgXCIgY2xhc3M9XFxcIlwiICsgcGFyYW1zLmJ1bGxldENsYXNzICsgXCJcXFwiPjwvXCIgKyBwYXJhbXMuYnVsbGV0RWxlbWVudCArIFwiPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICRlbC5odG1sKHBhZ2luYXRpb25IVE1MKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyA9ICRlbC5maW5kKGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy5idWxsZXRDbGFzcykpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJGcmFjdGlvbikge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gcGFyYW1zLnJlbmRlckZyYWN0aW9uLmNhbGwoc3dpcGVyLCBwYXJhbXMuY3VycmVudENsYXNzLCBwYXJhbXMudG90YWxDbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBcIjxzcGFuIGNsYXNzPVxcXCJcIiArIHBhcmFtcy5jdXJyZW50Q2xhc3MgKyBcIlxcXCI+PC9zcGFuPlwiICsgJyAvICcgKyAoXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyBwYXJhbXMudG90YWxDbGFzcyArIFwiXFxcIj48L3NwYW4+XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJQcm9ncmVzc2Jhcikge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gcGFyYW1zLnJlbmRlclByb2dyZXNzYmFyLmNhbGwoc3dpcGVyLCBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MgKyBcIlxcXCI+PC9zcGFuPlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uUmVuZGVyJywgc3dpcGVyLnBhZ2luYXRpb24uJGVsWzBdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiA9IGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoc3dpcGVyLiRlbCwgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLCBzd2lwZXIucGFyYW1zLmNyZWF0ZUVsZW1lbnRzLCB7XG4gICAgICAgIGVsOiAnc3dpcGVyLXBhZ2luYXRpb24nXG4gICAgICB9KTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCkgcmV0dXJuO1xuICAgICAgdmFyICRlbCA9ICQocGFyYW1zLmVsKTtcbiAgICAgIGlmICgkZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzICYmIHR5cGVvZiBwYXJhbXMuZWwgPT09ICdzdHJpbmcnICYmICRlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY2xpY2thYmxlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLm1vZGlmaWVyQ2xhc3MgKyBwYXJhbXMudHlwZSk7XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAkZWwuYWRkQ2xhc3MoXCJcIiArIHBhcmFtcy5tb2RpZmllckNsYXNzICsgcGFyYW1zLnR5cGUgKyBcIi1keW5hbWljXCIpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPSAwO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIDwgMSkge1xuICAgICAgICAgIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ3Byb2dyZXNzYmFyJyAmJiBwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGVDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5vbignY2xpY2snLCBjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuYnVsbGV0Q2xhc3MpLCBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5pbmRleCgpICogc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSBpbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGV4dGVuZChzd2lwZXIucGFnaW5hdGlvbiwge1xuICAgICAgICAkZWw6ICRlbCxcbiAgICAgICAgZWw6ICRlbFswXVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgJGVsLmFkZENsYXNzKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICAgIGlmICghcGFyYW1zLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG4gICAgICAkZWwucmVtb3ZlQ2xhc3MocGFyYW1zLmhpZGRlbkNsYXNzKTtcbiAgICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzKSBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLnJlbW92ZUNsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG5cbiAgICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5vZmYoJ2NsaWNrJywgY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmJ1bGxldENsYXNzKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgUGFnaW5hdGlvbiQxID0ge1xuICAgIG5hbWU6ICdwYWdpbmF0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgZWw6IG51bGwsXG4gICAgICAgIGJ1bGxldEVsZW1lbnQ6ICdzcGFuJyxcbiAgICAgICAgY2xpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICByZW5kZXJCdWxsZXQ6IG51bGwsXG4gICAgICAgIHJlbmRlclByb2dyZXNzYmFyOiBudWxsLFxuICAgICAgICByZW5kZXJGcmFjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyQ3VzdG9tOiBudWxsLFxuICAgICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2J1bGxldHMnLFxuICAgICAgICAvLyAnYnVsbGV0cycgb3IgJ3Byb2dyZXNzYmFyJyBvciAnZnJhY3Rpb24nIG9yICdjdXN0b20nXG4gICAgICAgIGR5bmFtaWNCdWxsZXRzOiBmYWxzZSxcbiAgICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgICBmb3JtYXRGcmFjdGlvbkN1cnJlbnQ6IGZ1bmN0aW9uIGZvcm1hdEZyYWN0aW9uQ3VycmVudChudW1iZXIpIHtcbiAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXRGcmFjdGlvblRvdGFsOiBmdW5jdGlvbiBmb3JtYXRGcmFjdGlvblRvdGFsKG51bWJlcikge1xuICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGJ1bGxldENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0JyxcbiAgICAgICAgYnVsbGV0QWN0aXZlQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlJyxcbiAgICAgICAgbW9kaWZpZXJDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLScsXG4gICAgICAgIC8vIE5FV1xuICAgICAgICBjdXJyZW50Q2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1jdXJyZW50JyxcbiAgICAgICAgdG90YWxDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLXRvdGFsJyxcbiAgICAgICAgaGlkZGVuQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1oaWRkZW4nLFxuICAgICAgICBwcm9ncmVzc2JhckZpbGxDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGwnLFxuICAgICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZScsXG4gICAgICAgIGNsaWNrYWJsZUNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tY2xpY2thYmxlJyxcbiAgICAgICAgLy8gTkVXXG4gICAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWxvY2snXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgI
24510HBhZ2luYXRpb246IF9leHRlbmRzKHtcbiAgICAgICAgICBkeW5hbWljQnVsbGV0SW5kZXg6IDBcbiAgICAgICAgfSwgUGFnaW5hdGlvbilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmluaXQoKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24ucmVuZGVyKCk7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIGFjdGl2ZUluZGV4Q2hhbmdlOiBmdW5jdGlvbiBhY3RpdmVJbmRleENoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzd2lwZXIuc25hcEluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc25hcEluZGV4Q2hhbmdlOiBmdW5jdGlvbiBzbmFwSW5kZXhDaGFuZ2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbGlkZXNMZW5ndGhDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlc0xlbmd0aENoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc25hcEdyaWRMZW5ndGhDaGFuZ2U6IGZ1bmN0aW9uIHNuYXBHcmlkTGVuZ3RoQ2hhbmdlKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgICdlbmFibGUgZGlzYWJsZSc6IGZ1bmN0aW9uIGVuYWJsZURpc2FibGUoc3dpcGVyKSB7XG4gICAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG5cbiAgICAgICAgaWYgKCRlbCkge1xuICAgICAgICAgICRlbFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXShzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljayhzd2lwZXIsIGUpIHtcbiAgICAgICAgdmFyIHRhcmdldEVsID0gZS50YXJnZXQ7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbCAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZU9uQ2xpY2sgJiYgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA+IDAgJiYgISQodGFyZ2V0RWwpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcykpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgKHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCAmJiB0YXJnZXRFbCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsIHx8IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCAmJiB0YXJnZXRFbCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsKSkgcmV0dXJuO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblNob3cnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25IaWRlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIFNjcm9sbGJhciA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgICBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcztcbiAgICAgIHZhciBkcmFnU2l6ZSA9IHNjcm9sbGJhci5kcmFnU2l6ZSxcbiAgICAgICAgICB0cmFja1NpemUgPSBzY3JvbGxiYXIudHJhY2tTaXplLFxuICAgICAgICAgICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbCxcbiAgICAgICAgICAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgICAgdmFyIG5ld1NpemUgPSBkcmFnU2l6ZTtcbiAgICAgIHZhciBuZXdQb3MgPSAodHJhY2tTaXplIC0gZHJhZ1NpemUpICogcHJvZ3Jlc3M7XG5cbiAgICAgIGlmIChydGwpIHtcbiAgICAgICAgbmV3UG9zID0gLW5ld1BvcztcblxuICAgICAgICBpZiAobmV3UG9zID4gMCkge1xuICAgICAgICAgIG5ld1NpemUgPSBkcmFnU2l6ZSAtIG5ld1BvcztcbiAgICAgICAgICBuZXdQb3MgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKC1uZXdQb3MgKyBkcmFnU2l6ZSA+IHRyYWNrU2l6ZSkge1xuICAgICAgICAgIG5ld1NpemUgPSB0cmFja1NpemUgKyBuZXdQb3M7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobmV3UG9zIDwgMCkge1xuICAgICAgICBuZXdTaXplID0gZHJhZ1NpemUgKyBuZXdQb3M7XG4gICAgICAgIG5ld1BvcyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BvcyArIGRyYWdTaXplID4gdHJhY2tTaXplKSB7XG4gICAgICAgIG5ld1NpemUgPSB0cmFja1NpemUgLSBuZXdQb3M7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZChcIiArIG5ld1BvcyArIFwicHgsIDAsIDApXCIpO1xuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gbmV3U2l6ZSArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRkcmFnRWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoMHB4LCBcIiArIG5ld1BvcyArIFwicHgsIDApXCIpO1xuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLmhlaWdodCA9IG5ld1NpemUgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuaGl
24510kZSkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci50aW1lb3V0KTtcbiAgICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAxO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICAgICAgJGVsLnRyYW5zaXRpb24oNDAwKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuJGRyYWdFbC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9LFxuICAgIHVwZGF0ZVNpemU6IGZ1bmN0aW9uIHVwZGF0ZVNpemUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbCxcbiAgICAgICAgICAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIHZhciB0cmFja1NpemUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkZWxbMF0ub2Zmc2V0V2lkdGggOiAkZWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgdmFyIGRpdmlkZXIgPSBzd2lwZXIuc2l6ZSAvIHN3aXBlci52aXJ0dWFsU2l6ZTtcbiAgICAgIHZhciBtb3ZlRGl2aWRlciA9IGRpdmlkZXIgKiAodHJhY2tTaXplIC8gc3dpcGVyLnNpemUpO1xuICAgICAgdmFyIGRyYWdTaXplO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ1NpemUgPT09ICdhdXRvJykge1xuICAgICAgICBkcmFnU2l6ZSA9IHRyYWNrU2l6ZSAqIGRpdmlkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmFnU2l6ZSA9IHBhcnNlSW50KHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdTaXplLCAxMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9IGRyYWdTaXplICsgXCJweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSBkcmFnU2l6ZSArIFwicHhcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpdmlkZXIgPj0gMSkge1xuICAgICAgICAkZWxbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRlbFswXS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5oaWRlKSB7XG4gICAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgIH1cblxuICAgICAgZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgICB0cmFja1NpemU6IHRyYWNrU2l6ZSxcbiAgICAgICAgZGl2aWRlcjogZGl2aWRlcixcbiAgICAgICAgbW92ZURpdmlkZXI6IG1vdmVEaXZpZGVyLFxuICAgICAgICBkcmFnU2l6ZTogZHJhZ1NpemVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgIHNjcm9sbGJhci4kZWxbc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQb2ludGVyUG9zaXRpb246IGZ1bmN0aW9uIGdldFBvaW50ZXJQb3NpdGlvbihlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICByZXR1cm4gZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYIDogZS5jbGllbnRYO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZIDogZS5jbGllbnRZO1xuICAgIH0sXG4gICAgc2V0RHJhZ1Bvc2l0aW9uOiBmdW5jdGlvbiBzZXREcmFnUG9zaXRpb24oZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWwsXG4gICAgICAgICAgZHJhZ1NpemUgPSBzY3JvbGxiYXIuZHJhZ1NpemUsXG4gICAgICAgICAgdHJhY2tTaXplID0gc2Nyb2xsYmFyLnRyYWNrU2l6ZSxcbiAgICAgICAgICBkcmFnU3RhcnRQb3MgPSBzY3JvbGxiYXIuZHJhZ1N0YXJ0UG9zO1xuICAgICAgdmFyIHBvc2l0aW9uUmF0aW87XG4gICAgICBwb3NpdGlvblJhdGlvID0gKHNjcm9sbGJhci5nZXRQb2ludGVyUG9zaXRpb24oZSkgLSAkZWwub2Zmc2V0KClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCddIC0gKGRyYWdTdGFydFBvcyAhPT0gbnVsbCA/IGRyYWdTdGFydFBvcyA6IGRyYWdTaXplIC8gMikpIC8gKHRyYWNrU2l6ZSAtIGRyYWdTaXplKTtcbiAgICAgIHBvc2l0aW9uUmF0aW8gPSBNYXRoLm1heChNYXRoLm1pbihwb3NpdGlvblJhdGlvLCAxKSwgMCk7XG5cbiAgICAgIGlmIChydGwpIHtcbiAgICAgICAgcG9zaXRpb25SYXRpbyA9IDEgLSBwb3NpdGlvblJhdGlvO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAqIHBvc2l0aW9uUmF0aW87XG4gICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MocG9zaXRpb24pO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShwb3NpdGlvbik7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfSxcbiAgICBvbkRyYWdTdGFydDogZnVuY3Rpb24gb25EcmFnU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbCxcbiAgICAgICAgICAkZHJhZ0VsID0gc2Nyb2xsYmFyLiRkcmFnRWw7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdTdGFydFBvcyA9IGUudGFyZ2V0ID09PSAkZHJhZ0VsWzBdIHx8IGUudGFyZ2V0ID09PSAkZHJhZ0VsID8gc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnXSA6IG51bGw7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKDEwMCk7XG4gICAgICAkZHJhZ0VsLnRyYW5zaXRpb24oMTAwKTtcbiAgICAgIHNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24oZSk7XG4gICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci5kcmFnVGltZW91dCk7XG4gICAgICAkZWwudHJhbnNpdGlvbigwKTtcblxuICAgICAgaWYgKHBhcmFtcy5oaWRlKSB7XG4gICAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5jc3MoJ3Njcm9sbC1zbmFwLXR5cGUnLCAnbm9uZScpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsYmFyRHJhZ1N0YXJ0JywgZSk7XG4gICAgfSxcbiAgICBvbkRyYWdNb3ZlOiBmdW5jdGlvbiBvbkRyYWdNb3ZlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWwsXG4gICAgICAgICAgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgICAgaWYgKCFzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCkgcmV0dXJuO1xuICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIHNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24oZSk7XG4gICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb24oMCk7XG4gICAgICAkZWwudHJhbnNpdGlvbigwKTtcbiAgICAgICRkcmFnRWwudHJhbnNpdGlvbigwKTtcbiAgICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnTW92ZScsIGUpO1xuICAgIH0sXG4gICAgb25EcmFnRW5kOiBmdW5jdGlvbiBvbkRyYWdFbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIGlmICghc3dpcGVyLnNjcm9sbGJhci5pc1RvdWNoZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuY3NzKCdzY3JvbGwtc25hcC10eXBlJywgJycpO1xuICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb24oJycpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdUaW1lb3V0ID0gbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgICAkZWwudHJhbnNpdGlvbig0MDApO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdFbmQnLCBlKTtcblxuICAgICAgaWYgKHBhcmFtcy5zbmFwT25SZWxlYXNlKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW5hYmxlRHJhZ2dhYmxlOiBmdW5jdGlvbiBlbmFibGVEcmFnZ2FibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICB0b3VjaEV2ZW50c1RvdWNoID0gc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2gsXG4gICAgICAgICAgdG91Y2hFdmVudHNEZXNrdG9wID0gc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCxcbiAgICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAgIHN1cHBvcnQgPSBzd2lwZXIuc3VwcG9ydDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHRhcmdldCA9ICRlbFswXTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lciA9IHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG5cbiAgICAgIGlmICghc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc2FibGVEcmFnZ2FibGU6IGZ1bmN0aW9uIGRpc2FibGVEcmFnZ2FibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICB0b3VjaEV2ZW50c1RvdWNoID0gc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2gsXG4gICAgICAgICAgdG91Y2hFdmVudHNEZXNrdG9wID0gc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCxcbiAgICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAgIHN1cHBvcnQgPSBzd2lwZXIuc3VwcG9ydDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHRhcmdldCA9ICRlbFswXTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lciA9IHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG5cbiAgICAgIGlmICghc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyLFxuICAgICAgICAgICRzd2lwZXJFbCA9IHN3aXBlci4kZWw7XG4gICAgICBzd2lwZXIucGFyYW1zLnNjcm9sbGJhciA9IGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoJHN3aXBlckVsLCBzd2lwZXIucGFyYW1zLnNjcm9sbGJhciwgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cywge1xuICAgICAgICBlbDogJ3N3aXBlci1zY3JvbGxiYXInXG4gICAgICB9KTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcbiAgICAgIGlmICghcGFyYW1zLmVsKSByZXR1cm47XG4gICAgICB2YXIgJGVsID0gJChwYXJhbXMuZWwpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50cyAmJiB0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJyAmJiAkZWwubGVuZ3RoID4gMSAmJiAkc3dpcGVyRWwuZmluZChwYXJhbXMuZWwpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAkZWwgPSAkc3dpcGVyRWwuZmluZChwYXJhbXMuZWwpO1xuICAgICAgfVxuXG4gICAgICB2YXIgJGRyYWdFbCA9ICRlbC5maW5kKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ0NsYXNzKTtcblxuICAgICAgaWYgKCRkcmFnRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICRkcmFnRWwgPSAkKFwiPGRpdiBjbGFzcz1cXFwiXCIgKyBzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnQ2xhc3MgKyBcIlxcXCI+PC9kaXY+XCIpO1xuICAgICAgICAkZWwuYXBwZW5kKCRkcmFnRWwpO1xuICAgICAgfVxuXG4gICAgICBleHRlbmQoc2Nyb2xsYmFyLCB7XG4gICAgICAgICRlbDogJGVsLFxuICAgICAgICBlbDogJGVsWzBdLFxuICAgICAgICAkZHJhZ0VsOiAkZHJhZ0VsLFxuICAgICAgICBkcmFnRWw6ICRkcmFnRWxbMF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocGFyYW1zLmRyYWdnYWJsZSkge1xuICAgICAgICBzY3JvbGxiYXIuZW5hYmxlRHJhZ2dhYmxlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkZWwpIHtcbiAgICAgICAgJGVsW3N3aXBlci5lbmFibGVkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRpc2FibGVEcmFnZ2FibGUoKTtcbiAgICB9XG4gIH07XG4gIHZhciBTY3JvbGxiYXIkMSA9IHtcbiAgICBuYW1lOiAnc2Nyb2xsYmFyJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICBlbDogbnVsbCxcbiAgICAgICAgZHJhZ1NpemU6ICdhdXRvJyxcbiAgICAgICAgaGlkZTogZmFsc2UsXG4gICAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgICAgIHNuYXBPblJlbGVhc2U6IHRydWUsXG4gICAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1zY3JvbGxiYXItbG9jaycsXG4gICAgICAgIGRyYWdDbGFzczogJ3N3aXBlci1zY3JvbGxiYXItZHJhZydcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgc2Nyb2xsYmFyOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgICAgIGRyYWdUaW1lb3V0OiBudWxsXG4gICAgICAgIH0sIFNjcm9sbGJhcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuaW5pdCgpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgICAgfSxcbiAgICAgIG9ic2VydmVyVXBkYXRlOiBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9LFxuICAgICAgJ2VuYWJsZSBkaXNhYmxlJzogZnVuY3Rpb24gZW5hYmxlRGlzYWJsZShzd2lwZXIpIHtcbiAgICAgICAgdmFyICRlbCA9IHN3aXBlci5zY3JvbGxiYXIuJGVsO1xuXG4gICAgICAgIGlmICgkZWwpIHtcbiAgICAgICAgICAkZWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgUGFyYWxsYXggPSB7XG4gICAgc2V0VHJhbnNmb3JtOiBmdW5jdGlvbiBzZXRUcmFuc2Zvcm0oZWwsIHByb2dyZXNzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsO1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuICAgICAgdmFyIHJ0bEZhY3RvciA9IHJ0bCA/IC0xIDogMTtcbiAgICAgIHZhciBwID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4JykgfHwgJzAnO1xuICAgICAgdmFyIHggPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteCcpO1xuICAgICAgdmFyIHkgPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteScpO1xuICAgICAgdmFyIHNjYWxlID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlJyk7XG4gICAgICB2YXIgb3BhY2l0eSA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5Jyk7XG5cbiAgICAgIGlmICh4IHx8IHkpIHtcbiAgICAgICAgeCA9IHggfHwgJzAnO1xuICAgICAgICB5ID0geSB8fCAnMCc7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB4ID0gcDtcbiAgICAgICAgeSA9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkgPSBwO1xuICAgICAgICB4ID0gJzAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoeC5pbmRleE9mKCclJykgPj0gMCkge1xuICAgICAgICB4ID0gcGFyc2VJbnQoeCwgMTApICogcHJvZ3Jlc3MgKiBydGxGYWN0b3IgKyBcIiVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSB4ICogcHJvZ3Jlc3MgKiBydGxGYWN0b3IgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh5LmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICAgIHkgPSBwYXJzZUludCh5LCAxMCkgKiBwcm9ncmVzcyArIFwiJVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeSA9IHkgKiBwcm9ncmVzcyArIFwicHhcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcGFjaXR5ICE9PSAndW5kZWZpbmVkJyAmJiBvcGFjaXR5ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBjdXJyZW50T3BhY2l0eSA9IG9wYWNpdHkgLSAob3BhY2l0eSAtIDEpICogKDEgLSBNYXRoLmFicyhwcm9ncmVzcykpO1xuICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IGN1cnJlbnRPcGFjaXR5O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHNjYWxlID09PSAndW5kZWZpbmVkJyB8fCBzY2FsZSA9PT0gbnVsbCkge1xuICAgICAgICAkZWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCIsIFwiICsgeSArIFwiLCAwcHgpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTY2FsZSA9IHNjYWxlIC0gKHNjYWxlIC0gMSkgKiAoMSAtIE1hdGguYWJzKHByb2dyZXNzKSk7XG4gICAgICAgICRlbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIsIDBweCkgc2NhbGUoXCIgKyBjdXJyZW50U2NhbGUgKyBcIilcIik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9IHN3aXBlci4kZWwsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcyxcbiAgICAgICAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgICAgICRlbC5jaGlsZHJlbignW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXScpLmVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2Zvcm0oZWwsIHByb2dyZXNzKTtcbiAgICAgIH0pO1xuICAgICAgc2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlRWwsIHNsaWRlSW5kZXgpIHtcbiAgICAgICAgdmFyIHNsaWRlUHJvZ3Jlc3MgPSBzbGlkZUVsLnByb2dyZXNzO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwID4gMSAmJiBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJykge1xuICAgICAgICAgIHNsaWRlUHJvZ3Jlc3MgKz0gTWF0aC5jZWlsKHNsaWRlSW5kZXggLyAyKSAtIHByb2dyZXNzICogKHNuYXBHcmlkLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2xpZGVQcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHNsaWRlUHJvZ3Jlc3MsIC0xKSwgMSk7XG4gICAgICAgICQoc2xpZGVFbCkuZmluZCgnW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXScpLmVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zZm9ybShlbCwgc2xpZGVQcm9ncmVzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICBpZiAoZHVyYXRpb24gPT09IHZvaWQgMCkge1xuICAgICAgICBkdXJhdGlvbiA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgICAgJGVsLmZpbmQoJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKS5lYWNoKGZ1bmN0aW9uIChwYXJhbGxheEVsKSB7XG4gICAgICAgIHZhciAkcGFyYWxsYXhFbCA9ICQocGFyYWxsYXhFbCk7XG4gICAgICAgIHZhciBwYXJhbGxheER1cmF0aW9uID0gcGFyc2VJbnQoJHBhcmFsbGF4RWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgtZHVyYXRpb24nKSwgMTApIHx8IGR1cmF0aW9uO1xuICAgICAgICBpZiAoZHVyYXRpb24gPT09IDApIHBhcmFsbGF4RHVyYXRpb24gPSAwO1xuICAgICAgICAkcGFyYWxsYXhFbC50cmFuc2l0aW9uKHBhcmFsbGF4RHVyYXRpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICB2YXIgUGFyYWxsYXgkMSA9IHtcbiAgICBuYW1lOiAncGFyYWxsYXgnLFxuICAgIHBhcmFtczoge1xuICAgICAgcGFyYWxsYXg6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgcGFyYWxsYXg6IF9leHRlbmRzKHt9LCBQYXJhbGxheClcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIHN3aXBlci5vcmlnaW5hbFBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFyYWxsYXguZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgWm9vbSA9IHtcbiAgICAvLyBDYWxjIFNjYWxlIEZyb20gTXVsdGktdG91Y2hlc1xuICAgIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXM6IGZ1bmN0aW9uIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSByZXR1cm4gMTtcbiAgICAgIHZhciB4MSA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWDtcbiAgICAgIHZhciB5MSA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWTtcbiAgICAgIHZhciB4MiA9IGUudGFyZ2V0VG91Y2hlc1sxXS5wYWdlWDtcbiAgICAgIHZhciB5MiA9IGUudGFyZ2V0VG91Y2hlc1sxXS5wYWdlWTtcbiAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChNYXRoLnBvdyh4MiAtIHgxLCAyKSArIE1hdGgucG93KHkyIC0geTEsIDIpKTtcbiAgICAgIHJldHVybiBkaXN0YW5jZTtcbiAgICB9LFxuICAgIC8vIEV2ZW50c1xuICAgIG9uR2VzdHVyZVN0YXJ0OiBmdW5jdGlvbiBvbkdlc3R1cmVTdGFydChlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSB0cnVlO1xuICAgICAgICBnZXN0dXJlLnNjYWxlU3RhcnQgPSBab29tLmdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VzdHVyZS4kc2xpZGVFbCB8fCAhZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGgpIHtcbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpO1xuICAgICAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGggPT09IDApIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSBnZXN0dXJlLiRzbGlkZUVsLmZpbmQoJ2ltZywgc3ZnLCBjYW52YXMsIHBpY3R1cmUsIC5zd2lwZXItem9vbS10YXJnZXQnKTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSBnZXN0dXJlLiRpbWFnZUVsLnBhcmVudChcIi5cIiArIHBhcmFtcy5jb250YWluZXJDbGFzcyk7XG4gICAgICAgIGdlc3R1cmUubWF4UmF0aW8gPSBnZXN0dXJlLiRpbWFnZVdyYXBFbC5hdHRyKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuXG4gICAgICAgIGlmIChnZXN0dXJlLiRpbWFnZVdyYXBFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2VzdHVyZS4kaW1hZ2VFbCkge1xuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oMCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci56b29tLmlzU2NhbGluZyA9IHRydWU7XG4gICAgfSxcbiAgICBvbkdlc3R1cmVDaGFuZ2U6IGZ1bmN0aW9uIG9uR2VzdHVyZUNoYW5nZShlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuXG4gICAgICBpZiAoIXN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNobW92ZScgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IHRydWU7XG4gICAgICAgIGdlc3R1cmUuc2NhbGVNb3ZlID0gWm9vbS5nZXREaXN0YW5jZUJldHdlZW5Ub3VjaGVzKGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2dlc3R1cmVjaGFuZ2UnKSB6b29tLm9uR2VzdHVyZVN0YXJ0KGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHpvb20uc2NhbGUgPSBlLnNjYWxlICogem9vbS5jdXJyZW50U2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB6b29tLnNjYWxlID0gZ2VzdHVyZS5zY2FsZU1vdmUgLyBnZXN0dXJlLnNjYWxlU3RhcnQgKiB6b29tLmN1cnJlbnRTY2FsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHpvb20uc2NhbGUgPiBnZXN0dXJlLm1heFJhdGlvKSB7XG4gICAgICAgIHpvb20uc2NhbGUgPSBnZXN0dXJlLm1heFJhdGlvIC0gMSArIE1hdGgucG93KHpvb20uc2NhbGUgLSBnZXN0dXJlLm1heFJhdGlvICsgMSwgMC41KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHpvb20uc2NhbGUgPCBwYXJhbXMubWluUmF0aW8pIHtcbiAgICAgICAgem9vbS5zY2FsZSA9IHBhcmFtcy5taW5SYXRpbyArIDEgLSBNYXRoLnBvdyhwYXJhbXMubWluUmF0aW8gLSB6b29tLnNjYWxlICsgMSwgMC41KTtcbiAgICAgIH1cblxuICAgICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyB6b29tLnNjYWxlICsgXCIpXCIpO1xuICAgIH0sXG4gICAgb25HZXN0dXJlRW5kOiBmdW5jdGlvbiBvbkdlc3R1cmVFbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZGV2aWNlID0gc3dpcGVyLmRldmljZTtcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuXG4gICAgICBpZiAoIXN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKCF6b29tLmZha2VHZXN0dXJlVG91Y2hlZCB8fCAhem9vbS5mYWtlR2VzdHVyZU1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNoZW5kJyB8fCBlLnR5cGUgPT09ICd0b3VjaGVuZCcgJiYgZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPCAyICYmICFkZXZpY2UuYW5kcm9pZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHpvb20uc2NhbGUgPSBNYXRoLm1heChNYXRoLm1pbih6b29tLnNjYWxlLCBnZXN0dXJlLm1heFJhdGlvKSwgcGFyYW1zLm1pblJhdGlvKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKS50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyB6b29tLnNjYWxlICsgXCIpXCIpO1xuICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSB6b29tLnNjYWxlO1xuICAgICAgem9vbS5pc1NjYWxpbmcgPSBmYWxzZTtcbiAgICAgIGlmICh6b29tLnNjYWxlID09PSAxKSBnZXN0dXJlLiRzbGlkZUVsID0gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZGV2aWNlID0gc3dpcGVyLmRldmljZTtcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZSxcbiAgICAgICAgICBpbWFnZSA9IHpvb20uaW1hZ2U7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIGlmIChpbWFnZS5pc1RvdWNoZWQpIHJldHVybjtcbiAgICAgIGlmIChkZXZpY2UuYW5kcm9pZCAmJiBlLmNhbmNlbGFibGUpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGltYWdlLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgICBpbWFnZS50b3VjaGVzU3RhcnQueCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgIGltYWdlLnRvdWNoZXNTdGFydC55ID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIH0sXG4gICAgb25Ub3VjaE1vdmU6IGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlLFxuICAgICAgICAgIGltYWdlID0gem9vbS5pbWFnZSxcbiAgICAgICAgICB2ZWxvY2l0eSA9IHpvb20udmVsb2NpdHk7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgICBpZiAoIWltYWdlLmlzVG91Y2hlZCB8fCAhZ2VzdHVyZS4kc2xpZGVFbCkgcmV0dXJuO1xuXG4gICAgICBpZiAoIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgICAgaW1hZ2Uud2lkdGggPSBnZXN0dXJlLiRpbWFnZUVsWzBdLm9mZnNldFdpZHRoO1xuICAgICAgICBpbWFnZS5oZWlnaHQgPSBnZXN0dXJlLiRpbWFnZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgaW1hZ2Uuc3RhcnRYID0gZ2V0VHJhbnNsYXRlKGdlc3R1cmUuJGltYWdlV3JhcEVsWzBdLCAneCcpIHx8IDA7XG4gICAgICAgIGltYWdlLnN0YXJ0WSA9IGdldFRyYW5zbGF0ZShnZXN0dXJlLiRpbWFnZVdyYXBFbFswXSwgJ3knKSB8fCAwO1xuICAgICAgICBnZXN0dXJlLnNsaWRlV2lkdGggPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldFdpZHRoO1xuICAgICAgICBnZXN0dXJlLnNsaWRlSGVpZ2h0ID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsLnRyYW5zaXRpb24oMCk7XG5cbiAgICAgICAgaWYgKHN3aXBlci5ydGwpIHtcbiAgICAgICAgICBpbWFnZS5zdGFydFggPSAtaW1hZ2Uuc3RhcnRYO1xuICAgICAgICAgIGltYWdlLnN0YXJ0WSA9IC1pbWFnZS5zdGFydFk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRGVmaW5lIGlmIHdlIG5lZWQgaW1hZ2UgZHJhZ1xuXG5cbiAgICAgIHZhciBzY2FsZWRXaWR0aCA9IGltYWdlLndpZHRoICogem9vbS5zY2FsZTtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQgPSBpbWFnZS5oZWlnaHQgKiB6b29tLnNjYWxlO1xuICAgICAgaWYgKHNjYWxlZFdpZHRoIDwgZ2VzdHVyZS5zbGlkZVdpZHRoICYmIHNjYWxlZEhlaWdodCA8IGdlc3R1cmUuc2xpZGVIZWlnaHQpIHJldHVybjtcbiAgICAgIGltYWdlLm1pblggPSBNYXRoLm1pbihnZXN0dXJlLnNsaWRlV2lkdGggLyAyIC0gc2NhbGVkV2lkdGggLyAyLCAwKTtcbiAgICAgIGltYWdlLm1heFggPSAtaW1hZ2UubWluWDtcbiAgICAgIGltYWdlLm1pblkgPSBNYXRoLm1pbihnZXN0dXJlLnNsaWRlSGVpZ2h0IC8gMiAtIHNjYWxlZEhlaWdodCAvIDIsIDApO1xuICAgICAgaW1hZ2UubWF4WSA9IC1pbWFnZS5taW5ZO1xuICAgICAgaW1hZ2UudG91Y2hlc0N1cnJlbnQueCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICAgICAgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuXG4gICAgICBpZiAoIWltYWdlLmlzTW92ZWQgJiYgIXpvb20uaXNTY2FsaW5nKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgJiYgKE1hdGguZmxvb3IoaW1hZ2UubWluWCkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRYKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC54IDwgaW1hZ2UudG91Y2hlc1N0YXJ0LnggfHwgTWF0aC5mbG9vcihpbWFnZS5tYXhYKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFgpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPiBpbWFnZS50b3VjaGVzU3RhcnQueCkpIHtcbiAgICAgICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN3aXBlci5pc0hvcml6b250YWwoKSAmJiAoTWF0aC5mbG9vcihpbWFnZS5taW5ZKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFkpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnkgPCBpbWFnZS50b3VjaGVzU3RhcnQueSB8fCBNYXRoLmZsb29yKGltYWdlLm1heFkpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WSkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA+IGltYWdlLnRvdWNoZXNTdGFydC55KSkge1xuICAgICAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZS5jYW5jZWxhYmxlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGltYWdlLmlzTW92ZWQgPSB0cnVlO1xuICAgICAgaW1hZ2UuY3VycmVudFggPSBpbWFnZS50b3VjaGVzQ3VycmVudC54IC0gaW1hZ2UudG91Y2hlc1N0YXJ0LnggKyBpbWFnZS5zdGFydFg7XG4gICAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSBpbWFnZS50b3VjaGVzU3RhcnQueSArIGltYWdlLnN0YXJ0WTtcblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRYIDwgaW1hZ2UubWluWCkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WCA9IGltYWdlLm1pblggKyAxIC0gTWF0aC5wb3coaW1hZ2UubWluWCAtIGltYWdlLmN1cnJlbnRYICsgMSwgMC44KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRYID4gaW1hZ2UubWF4WCkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WCA9IGltYWdlLm1heFggLSAxICsgTWF0aC5wb3coaW1hZ2UuY3VycmVudFggLSBpbWFnZS5tYXhYICsgMSwgMC44KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRZIDwgaW1hZ2UubWluWSkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLm1pblkgKyAxIC0gTWF0aC5wb3coaW1hZ2UubWluWSAtIGltYWdlLmN1cnJlbnRZICsgMSwgMC44KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRZID4gaW1hZ2UubWF4WSkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLm1heFkgLSAxICsgTWF0aC5wb3coaW1hZ2UuY3VycmVudFkgLSBpbWFnZS5tYXhZICsgMSwgMC44KTtcbiAgICAgIH0gLy8gVmVsb2NpdHlcblxuXG4gICAgICBpZiAoIXZlbG9jaXR5LnByZXZQb3NpdGlvblgpIHZlbG9jaXR5LnByZXZQb3NpdGlvblggPSBpbWFnZS50b3VjaGVzQ3VycmVudC54O1xuICAgICAgaWYgKCF2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZKSB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueTtcbiAgICAgIGlmICghdmVsb2NpdHkucHJldlRpbW
24510UpIHZlbG9jaXR5LnByZXZUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHZlbG9jaXR5LnggPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIC8gKERhdGUubm93KCkgLSB2ZWxvY2l0eS5wcmV2VGltZSkgLyAyO1xuICAgICAgdmVsb2NpdHkueSA9IChpbWFnZS50b3VjaGVzQ3VycmVudC55IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgLyAoRGF0ZS5ub3coKSAtIHZlbG9jaXR5LnByZXZUaW1lKSAvIDI7XG4gICAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIDwgMikgdmVsb2NpdHkueCA9IDA7XG4gICAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueSAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblkpIDwgMikgdmVsb2NpdHkueSA9IDA7XG4gICAgICB2ZWxvY2l0eS5wcmV2UG9zaXRpb25YID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueDtcbiAgICAgIHZlbG9jaXR5LnByZXZQb3NpdGlvblkgPSBpbWFnZS50b3VjaGVzQ3VycmVudC55O1xuICAgICAgdmVsb2NpdHkucHJldlRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyBpbWFnZS5jdXJyZW50WCArIFwicHgsIFwiICsgaW1hZ2UuY3VycmVudFkgKyBcInB4LDApXCIpO1xuICAgIH0sXG4gICAgb25Ub3VjaEVuZDogZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlLFxuICAgICAgICAgIGltYWdlID0gem9vbS5pbWFnZSxcbiAgICAgICAgICB2ZWxvY2l0eSA9IHpvb20udmVsb2NpdHk7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgaWYgKCFpbWFnZS5pc1RvdWNoZWQgfHwgIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBtb21lbnR1bUR1cmF0aW9uWCA9IDMwMDtcbiAgICAgIHZhciBtb21lbnR1bUR1cmF0aW9uWSA9IDMwMDtcbiAgICAgIHZhciBtb21lbnR1bURpc3RhbmNlWCA9IHZlbG9jaXR5LnggKiBtb21lbnR1bUR1cmF0aW9uWDtcbiAgICAgIHZhciBuZXdQb3NpdGlvblggPSBpbWFnZS5jdXJyZW50WCArIG1vbWVudHVtRGlzdGFuY2VYO1xuICAgICAgdmFyIG1vbWVudHVtRGlzdGFuY2VZID0gdmVsb2NpdHkueSAqIG1vbWVudHVtRHVyYXRpb25ZO1xuICAgICAgdmFyIG5ld1Bvc2l0aW9uWSA9IGltYWdlLmN1cnJlbnRZICsgbW9tZW50dW1EaXN0YW5jZVk7IC8vIEZpeCBkdXJhdGlvblxuXG4gICAgICBpZiAodmVsb2NpdHkueCAhPT0gMCkgbW9tZW50dW1EdXJhdGlvblggPSBNYXRoLmFicygobmV3UG9zaXRpb25YIC0gaW1hZ2UuY3VycmVudFgpIC8gdmVsb2NpdHkueCk7XG4gICAgICBpZiAodmVsb2NpdHkueSAhPT0gMCkgbW9tZW50dW1EdXJhdGlvblkgPSBNYXRoLmFicygobmV3UG9zaXRpb25ZIC0gaW1hZ2UuY3VycmVudFkpIC8gdmVsb2NpdHkueSk7XG4gICAgICB2Y
24510XIgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGgubWF4KG1vbWVudHVtRHVyYXRpb25YLCBtb21lbnR1bUR1cmF0aW9uWSk7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IG5ld1Bvc2l0aW9uWDtcbiAgICAgIGltYWdlLmN1cnJlbnRZID0gbmV3UG9zaXRpb25ZOyAvLyBEZWZpbmUgaWYgd2UgbmVlZCBpbWFnZSBkcmFnXG5cbiAgICAgIHZhciBzY2FsZWRXaWR0aCA9IGltYWdlLndpZHRoICogem9vbS5zY2FsZTtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQgPSBpbWFnZS5oZWlnaHQgKiB6b29tLnNjYWxlO1xuICAgICAgaW1hZ2UubWluWCA9IE1hdGgubWluKGdlc3R1cmUuc2xpZGVXaWR0aCAvIDIgLSBzY2FsZWRXaWR0aCAvIDIsIDApO1xuICAgICAgaW1hZ2UubWF4WCA9IC1pbWFnZS5taW5YO1xuICAgICAgaW1hZ2UubWluWSA9IE1hdGgubWluKGdlc3R1cmUuc2xpZGVIZWlnaHQgLyAyIC0gc2NhbGVkSGVpZ2h0IC8gMiwgMCk7XG4gICAgICBpbWFnZS5tYXhZID0gLWltYWdlLm1pblk7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRYLCBpbWFnZS5tYXhYKSwgaW1hZ2UubWluWCk7XG4gICAgICBpbWFnZS5jdXJyZW50WSA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRZLCBpbWFnZS5tYXhZKSwgaW1hZ2UubWluWSk7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgaW1hZ2UuY3VycmVudFggKyBcInB4LCBcIiArIGltYWdlLmN1cnJlbnRZICsgXCJweCwwKVwiKTtcbiAgICB9LFxuICAgIG9uVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG5cbiAgICAgIGlmIChnZXN0dXJlLiRzbGlkZUVsICYmIHN3aXBlci5wcmV2aW91c0luZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgICAgaWYgKGdlc3R1cmUuJGltYWdlRWwpIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2VzdHVyZS4kaW1hZ2VXcmFwRWwpIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKDAsMCwwKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9vbS5zY2FsZSA9IDE7XG4gICAgICAgIHpvb20uY3VycmVudFNjYWxlID0gMTtcbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBUb2dnbGUgWm9vbVxuICAgIHRvZ2dsZTogZnVuY3Rpb24gdG9nZ2xlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcblxuICAgICAgaWYgKHpvb20uc2NhbGUgJiYgem9vbS5zY2FsZSAhPT0gMSkge1xuICAgICAgICAvLyBab29tIE91dFxuICAgICAgICB6b29tLm91dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gWm9vbSBJblxuICAgICAgICB6b29tLmluKGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW46IGZ1bmN0aW9uIF9pbihlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmUsXG4gICAgICAgICAgaW1hZ2UgPSB6b29tLmltYWdlO1xuXG4gICAgICBpZiAoIWdlc3R1cmUuJHNsaWRlRWwpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCAmJiBzd2lwZXIudmlydHVhbCkge1xuICAgICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSBnZXN0dXJlLiRzbGlkZUVsLmZpbmQoJ2ltZywgc3ZnLCBjYW52YXMsIHBpY3R1cmUsIC5zd2lwZXItem9vbS10YXJnZXQnKTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSBnZXN0dXJlLiRpbWFnZUVsLnBhcmVudChcIi5cIiArIHBhcmFtcy5jb250YWluZXJDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCB8fCAhZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgfHwgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICBnZXN0dXJlLiRzbGlkZUVsLmFkZENsYXNzKFwiXCIgKyBwYXJhbXMuem9vbWVkU2xpZGVDbGFzcyk7XG4gICAgICB2Y
24510XIgdG91Y2hYO1xuICAgICAgdmFyIHRvdWNoWTtcbiAgICAgIHZhciBvZmZzZXRYO1xuICAgICAgdmFyIG9mZnNldFk7XG4gICAgICB2YXIgZGlmZlg7XG4gICAgICB2YXIgZGlmZlk7XG4gICAgICB2YXIgdHJhbnNsYXRlWDtcbiAgICAgIHZhciB0cmFuc2xhdGVZO1xuICAgICAgdmFyIGltYWdlV2lkdGg7XG4gICAgICB2YXIgaW1hZ2VIZWlnaHQ7XG4gICAgICB2YXIgc2NhbGVkV2lkdGg7XG4gICAgICB2YXIgc2NhbGVkSGVpZ2h0O1xuICAgICAgdmFyIHRyYW5zbGF0ZU1pblg7XG4gICAgICB2YXIgdHJhbnNsYXRlTWluWTtcbiAgICAgIHZhciB0cmFuc2xhdGVNYXhYO1xuICAgICAgdmFyIHRyYW5zbGF0ZU1heFk7XG4gICAgICB2YXIgc2xpZGVXaWR0aDtcbiAgICAgIHZhciBzbGlkZUhlaWdodDtcblxuICAgICAgaWYgKHR5cGVvZiBpbWFnZS50b3VjaGVzU3RhcnQueCA9PT0gJ3VuZGVmaW5lZCcgJiYgZSkge1xuICAgICAgICB0b3VjaFggPSBlLnR5cGUgPT09ICd0b3VjaGVuZCcgPyBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgICAgdG91Y2hZID0gZS50eXBlID09PSAndG91Y2hlbmQnID8gZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSA6IGUucGFnZVk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3VjaFggPSBpbWFnZS50b3VjaGVzU3RhcnQueDtcbiAgICAgICAgdG91Y2hZID0gaW1hZ2UudG91Y2hlc1N0YXJ0Lnk7XG4gICAgICB9XG5cbiAgICAgIHpvb20uc2NhbGUgPSBnZXN0dXJlLiRpbWFnZVdyYXBFbC5hdHRyKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSBnZXN0dXJlLiRpbWFnZVdyYXBFbC5hdHRyKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuXG4gICAgICBpZiAoZSkge1xuICAgICAgICBzbGlkZVdpZHRoID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgc2xpZGVIZWlnaHQgPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgb2Zmc2V0WCA9IGdlc3R1cmUuJHNsaWRlRWwub2Zmc2V0KCkubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBvZmZzZXRZID0gZ2VzdHVyZS4kc2xpZGVFbC5vZmZzZXQoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgZGlmZlggPSBvZmZzZXRYICsgc2xpZGVXaWR0aCAvIDIgLSB0b3VjaFg7XG4gICAgICAgIGRpZmZZID0gb2Zmc2V0WSArIHNsaWRlSGVpZ2h0IC8gMiAtIHRvdWNoWTtcbiAgICAgICAgaW1hZ2VXaWR0aCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGltYWdlSGVpZ2h0ID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIHNjYWxlZFdpZHRoID0gaW1hZ2VXaWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICAgIHNjYWxlZEhlaWdodCA9IGltYWdlSGVpZ2h0ICogem9vbS5zY2FsZTtcbiAgICAgICAgdHJhbnNsYXRlTWluWCA9IE1hdGgubWluKHNsaWRlV2lkdGggLyAyIC0gc2NhbGVkV2lkdGggLyAyLCAwKTtcbiAgICAgICAgdHJhbnNsYXRlTWluWSA9IE1hdGgubWluKHNsaWRlSGVpZ2h0IC8gMiAtIHNjYWxlZEhlaWdodCAvIDIsIDApO1xuICAgICAgICB0cmFuc2xhdGVNYXhYID0gLXRyYW5zbGF0ZU1pblg7XG4gICAgICAgIHRyYW5zbGF0ZU1heFkgPSAtdHJhbnNsYXRlTWluWTtcbiAgICAgICAgdHJhbnNsYXRlWCA9IGRpZmZYICogem9vbS5zY2FsZTtcbiAgICAgICAgdHJhbnNsYXRlWSA9IGRpZmZZICogem9vbS5zY2FsZTtcblxuICAgICAgICBpZiAodHJhbnNsYXRlWCA8IHRyYW5zbGF0ZU1pblgpIHtcbiAgICAgICAgICB0cmFuc2xhdGVYID0gdHJhbnNsYXRlTWluWDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFuc2xhdGVYID4gdHJhbnNsYXRlTWF4WCkge1xuICAgICAgICAgIHRyYW5zbGF0ZVggPSB0cmFuc2xhdGVNYXhYO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYW5zbGF0ZVkgPCB0cmFuc2xhdGVNaW5ZKSB7XG4gICAgICAgICAgdHJhbnNsYXRlWSA9IHRyYW5zbGF0ZU1pblk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhbnNsYXRlWSA+IHRyYW5zbGF0ZU1heFkpIHtcbiAgICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWF4WTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IDA7XG4gICAgICAgIHRyYW5zbGF0ZVkgPSAwO1xuICAgICAgfVxuXG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyB0cmFuc2xhdGVYICsgXCJweCwgXCIgKyB0cmFuc2xhdGVZICsgXCJweCwwKVwiKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZShcIiArIHpvb20uc2NhbGUgKyBcIilcIik7XG4gICAgfSxcbiAgICBvdXQ6IGZ1bmN0aW9uIG91dCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgICB2Y
24510XIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcblxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgJiYgc3dpcGVyLnZpcnR1YWwpIHtcbiAgICAgICAgICBnZXN0dXJlLiRzbGlkZUVsID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzLCBwaWN0dXJlLCAuc3dpcGVyLXpvb20tdGFyZ2V0Jyk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gZ2VzdHVyZS4kaW1hZ2VFbC5wYXJlbnQoXCIuXCIgKyBwYXJhbXMuY29udGFpbmVyQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDAgfHwgIWdlc3R1cmUuJGltYWdlV3JhcEVsIHx8IGdlc3R1cmUuJGltYWdlV3JhcEVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgem9vbS5zY2FsZSA9IDE7XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IDE7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCknKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpJyk7XG4gICAgICBnZXN0dXJlLiRzbGlkZUVsLnJlbW92ZUNsYXNzKFwiXCIgKyBwYXJhbXMuem9vbWVkU2xpZGVDbGFzcyk7XG4gICAgICBnZXN0dXJlLiRzbGlkZUVsID0gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgdG9nZ2xlR2VzdHVyZXM6IGZ1bmN0aW9uIHRvZ2dsZUdlc3R1cmVzKG1ldGhvZCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIHNlbGVjdG9yID0gem9vbS5zbGlkZVNlbGVjdG9yLFxuICAgICAgICAgIHBhc3NpdmUgPSB6b29tLnBhc3NpdmVMaXN0ZW5lcjtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsW21ldGhvZF0oJ2dlc3R1cmVzdGFydCcsIHNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlKTtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsW21ldGhvZF0oJ2dlc3R1cmVjaGFuZ2UnLCBzZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIHBhc3NpdmUpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbbWV0aG9kXSgnZ2VzdHVyZWVuZCcsIHNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZSk7XG4gICAgfSxcbiAgICBlbmFibGVHZXN0dXJlczogZnVuY3Rpb24gZW5hYmxlR2VzdHVyZXMoKSB7XG4gICAgICBpZiAodGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCkgcmV0dXJuO1xuICAgICAgdGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLnpvb20udG9nZ2xlR2VzdHVyZXMoJ29uJyk7XG4gICAgfSxcbiAgICBkaXNhYmxlR2VzdHVyZXM6IGZ1bmN0aW9uIGRpc2FibGVHZXN0dXJlcygpIHtcbiAgICAgIGlmICghdGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCkgcmV0dXJuO1xuICAgICAgdGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy56b29tLnRvZ2dsZUdlc3R1cmVzKCdvZmYnKTtcbiAgICB9LFxuICAgIC8vIEF0dGFjaC9EZXRhY2ggRXZlbnRzXG4gICAgZW5hYmxlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgaWYgKHpvb20uZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgem9vbS5lbmFibGVkID0gdHJ1ZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBzd2lwZXIucGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7XG4gICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgICB9IDogZmFsc2U7XG4gICAgICB2YXIgYWN0aXZlTGlzdGVuZXJXaXRoQ2FwdHVyZSA9IHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyID8ge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgfSA6IHRydWU7XG4gICAgICB2YXIgc2xpZGVTZWxlY3RvciA9IFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzO1xuICAgICAgc3dpcGVyLnpvb20ucGFzc2l2ZUxpc3RlbmVyID0gcGFzc2l2ZUxpc3RlbmVyO1xuICAgICAgc3dpcGVyLnpvb20uc2xpZGVTZWxlY3RvciA9IHNsaWRlU2VsZWN0b3I7IC8vIFNjYWxlIGltYWdlXG5cbiAgICAgIGlmIChzdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLnpvb20uZW5hYmxlR2VzdHVyZXMsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsIHN3aXBlci56b29tLmRpc2FibGVHZXN0dXJlcywgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0ID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgc2xpZGVTZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMuZW5kLCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcblxuICAgICAgICBpZiAoc3dpcGVyLnRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5jYW5jZWwsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IC8vIE1vdmUgaW1hZ2VcblxuXG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgXCIuXCIgKyBzd2lwZXIucGFyYW1zLnpvb20uY29udGFpbmVyQ2xhc3MsIHpvb20ub25Ub3VjaE1vdmUsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIGlmICghem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgICB2Y
24510XIgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0O1xuICAgICAgc3dpcGVyLnpvb20uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlID0gc3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgPyB7XG4gICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9IDogdHJ1ZTtcbiAgICAgIHZhciBzbGlkZVNlbGVjdG9yID0gXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3M7IC8vIFNjYWxlIGltYWdlXG5cbiAgICAgIGlmIChzdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci56b29tLmVuYWJsZUdlc3R1cmVzLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLnpvb20uZGlzYWJsZUdlc3R1cmVzLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIGlmIChzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLm1vdmUsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlQ2hhbmdlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuXG4gICAgICAgIGlmIChzd2lwZXIudG91Y2hFdmVudHMuY2FuY2VsKSB7XG4gICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5jYW5jZWwsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IC8vIE1vdmUgaW1hZ2VcblxuXG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLm1vdmUsIFwiLlwiICsgc3dpcGVyLnBhcmFtcy56b29tLmNvbnRhaW5lckNsYXNzLCB6b29tLm9uVG91Y2hNb3ZlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgICB9XG4gIH07XG4gIHZhciBab29tJDEgPSB7XG4gICAgbmFtZTogJ3pvb20nLFxuICAgIHBhcmFtczoge1xuICAgICAgem9vbToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWF4UmF0aW86IDMsXG4gICAgICAgIG1pblJhdGlvOiAxLFxuICAgICAgICB0b2dnbGU6IHRydWUsXG4gICAgICAgIGNvbnRhaW5lckNsYXNzOiAnc3dpcGVyLXpvb20tY29udGFpbmVyJyxcbiAgICAgICAgem9vbWVkU2xpZGVDbGFzczogJ3N3aXBlci1zbGlkZS16b29tZWQnXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIHpvb206IF9leHRlbmRzKHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgICBjdXJyZW50U2NhbGU6IDEsXG4gICAgICAgICAgaXNTY2FsaW5nOiBmYWxzZSxcbiAgICAgICAgICBnZXN0dXJlOiB7XG4gICAgICAgICAgICAkc2xpZGVFbDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2xpZGVXaWR0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2xpZGVIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICRpbWFnZUVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAkaW1hZ2VXcmFwRWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heFJhdGlvOiAzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgaXNUb3VjaGVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpc01vdmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdXJyZW50WDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3VycmVudFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1pblg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1pblk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heFg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0YXJ0WDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RhcnRZOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3VjaGVzU3RhcnQ6IHt9LFxuICAgICAgICAgICAgdG91Y2hlc0N1cnJlbnQ6IHt9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZWxvY2l0eToge1xuICAgICAgICAgICAgeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJldlBvc2l0aW9uWDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJldlBvc2l0aW9uWTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJldlRpbWU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSwgWm9vbSlcbiAgICAgIH0pO1xuICAgICAgdmFyIHNjYWxlID0gMTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzd2lwZXIuem9vbSwgJ3NjYWxlJywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHNjYWxlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGltYWdlRWwgPSBzd2lwZXIuem9vbS5nZXN0dXJlLiRpbWFnZUVsID8gc3dpcGVyLnpvb20uZ2VzdHVyZS4kaW1hZ2VFbFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgI
24510HZhciBzbGlkZUVsID0gc3dpcGVyLnpvb20uZ2VzdHVyZS4kc2xpZGVFbCA/IHN3aXBlci56b29tLmdlc3R1cmUuJHNsaWRlRWxbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnem9vbUNoYW5nZScsIHZhbHVlLCBpbWFnZUVsLCBzbGlkZUVsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY2FsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy56b29tLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIuem9vbS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci56b29tLmRpc2FibGUoKTtcbiAgICAgIH0sXG4gICAgICB0b3VjaFN0YXJ0OiBmdW5jdGlvbiB0b3VjaFN0YXJ0KHN3aXBlciwgZSkge1xuICAgICAgICBpZiAoIXN3aXBlci56b29tLmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnpvb20ub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgfSxcbiAgICAgIHRvdWNoRW5kOiBmdW5jdGlvbiB0b3VjaEVuZChzd2lwZXIsIGUpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIuem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci56b29tLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9LFxuICAgICAgZG91YmxlVGFwOiBmdW5jdGlvbiBkb3VibGVUYXAoc3dpcGVyLCBlKSB7XG4gICAgICAgIGlmICghc3dpcGVyLmFuaW1hdGluZyAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIuem9vbS5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMuem9vbS50b2dnbGUpIHtcbiAgICAgICAgICBzd2lwZXIuem9vbS50b2dnbGUoZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cmFuc2l0aW9uRW5kOiBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci56b29tLm9uVHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2xpZGVDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlQ2hhbmdlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgICBzd2lwZXIuem9vbS5vblRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgTGF6eSA9IHtcbiAgICBsb2FkSW5TbGlkZTogZnVuY3Rpb24gbG9hZEluU2xpZGUoaW5kZXgsIGxvYWRJbkR1cGxpY2F0ZSkge1xuICAgICAgaWYgKGxvYWRJbkR1cGxpY2F0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGxvYWRJbkR1cGxpY2F0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMubGF6eTtcbiAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgICAgIHZhciAkc2xpZGVFbCA9IGlzVmlydHVhbCA/IHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaW5kZXggKyBcIlxcXCJdXCIpIDogc3dpcGVyLnNsaWRlcy5lcShpbmRleCk7XG4gICAgICB2Y
24510XIgJGltYWdlcyA9ICRzbGlkZUVsLmZpbmQoXCIuXCIgKyBwYXJhbXMuZWxlbWVudENsYXNzICsgXCI6bm90KC5cIiArIHBhcmFtcy5sb2FkZWRDbGFzcyArIFwiKTpub3QoLlwiICsgcGFyYW1zLmxvYWRpbmdDbGFzcyArIFwiKVwiKTtcblxuICAgICAgaWYgKCRzbGlkZUVsLmhhc0NsYXNzKHBhcmFtcy5lbGVtZW50Q2xhc3MpICYmICEkc2xpZGVFbC5oYXNDbGFzcyhwYXJhbXMubG9hZGVkQ2xhc3MpICYmICEkc2xpZGVFbC5oYXNDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKSkge1xuICAgICAgICAkaW1hZ2VzLnB1c2goJHNsaWRlRWxbMF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoJGltYWdlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICRpbWFnZXMuZWFjaChmdW5jdGlvbiAoaW1hZ2VFbCkge1xuICAgICAgICB2YXIgJGltYWdlRWwgPSAkKGltYWdlRWwpO1xuICAgICAgICAkaW1hZ2VFbC5hZGRDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKTtcbiAgICAgICAgdmFyIGJhY2tncm91bmQgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLWJhY2tncm91bmQnKTtcbiAgICAgICAgdmFyIHNyYyA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc3JjJyk7XG4gICAgICAgIHZhciBzcmNzZXQgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLXNyY3NldCcpO1xuICAgICAgICB2YXIgc2l6ZXMgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLXNpemVzJyk7XG4gICAgICAgIHZhciAkcGljdHVyZUVsID0gJGltYWdlRWwucGFyZW50KCdwaWN0dXJlJyk7XG4gICAgICAgIHN3aXBlci5sb2FkSW1hZ2UoJGltYWdlRWxbMF0sIHNyYyB8fCBiYWNrZ3JvdW5kLCBzcmNzZXQsIHNpemVzLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3dpcGVyID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIgPT09IG51bGwgfHwgIXN3aXBlciB8fCBzd2lwZXIgJiYgIXN3aXBlci5wYXJhbXMgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuXG4gICAgICAgICAgaWYgKGJhY2tncm91bmQpIHtcbiAgICAgICAgICAgICRpbWFnZUVsLmNzcygnYmFja2dyb3VuZC1pbWFnZScsIFwidXJsKFxcXCJcIiArIGJhY2tncm91bmQgKyBcIlxcXCIpXCIpO1xuICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgICAgICAgJGltYWdlRWwuYXR0cignc3Jjc2V0Jywgc3Jjc2V0KTtcbiAgICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zcmNzZXQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNpemVzKSB7XG4gICAgICAgICAgICAgICRpbWFnZUVsLmF0dHIoJ3NpemVzJywgc2l6ZXMpO1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5yZW1vdmVBdHRyKCdkYXRhLXNpemVzJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgkcGljdHVyZUVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAkcGljdHVyZUVsLmNoaWxkcmVuKCdzb3VyY2UnKS5lYWNoKGZ1bmN0aW9uIChzb3VyY2VFbCkge1xuICAgICAgICAgICAgICAgIHZhciAkc291cmNlID0gJChzb3VyY2VFbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoJHNvdXJjZS5hdHRyKCdkYXRhLXNyY3NldCcpKSB7XG4gICAgICAgICAgICAgICAgICAkc291cmNlLmF0dHIoJ3NyY3NldCcsICRzb3VyY2UuYXR0cignZGF0YS1zcmNzZXQnKSk7XG4gICAgICAgICAgICAgICAgICAkc291cmNlLnJlbW92ZUF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5yZW1vdmVBdHRyKCdkYXRhLXNyYycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICRpbWFnZUVsLmFkZENsYXNzKHBhcmFtcy5sb2FkZWRDbGFzcykucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzcyk7XG4gICAgICAgICAgJHNsaWRlRWwuZmluZChcIi5cIiArIHBhcmFtcy5wcmVsb2FkZXJDbGFzcykucmVtb3ZlKCk7XG5cbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wICYmIGxvYWRJbkR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgdmFyIHNsaWRlT3JpZ2luYWxJbmRleCA9ICRzbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG5cbiAgICAgICAgICAgIGlmICgkc2xpZGVFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICAgIHZhciBvcmlnaW5hbFNsaWRlID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgc2xpZGVPcmlnaW5hbEluZGV4ICsgXCJcXFwiXTpub3QoLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpXCIpO1xuICAgICAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShvcmlnaW5hbFNsaWRlLmluZGV4KCksIGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBkdXBsaWNhdGVkU2xpZGUgPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHNsaWRlT3JpZ2luYWxJbmRleCArIFwiXFxcIl1cIik7XG4gICAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGR1cGxpY2F0ZWRTbGlkZS5pbmRleCgpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZVJlYWR5JywgJHNsaWRlRWxbMF0sICRpbWFnZUVsWzBdKTtcblxuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZUxvYWQnLCAkc2xpZGVFbFswXSwgJGltYWdlRWxbMF0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICAgIHN3aXBlclBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXJQYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlclBhcmFtcy5sYXp5O1xuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSBzd2lwZXJQYXJhbXMuc2xpZGVzUGVyVmlldztcblxuICAgICAgaWYgKHNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgICBzbGlkZXNQZXJWaWV3ID0gMDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2xpZGVFeGlzdChpbmRleCkge1xuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgaWYgKCR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBzd2lwZXJQYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGluZGV4ICsgXCJcXFwiXVwiKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzbGlkZXNbaW5kZXhdKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNsaWRlSW5kZXgoc2xpZGVFbCkge1xuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgcmV0dXJuICQoc2xpZGVFbCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAkKHNsaWRlRWwpLmluZGV4KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkKSBzd2lwZXIubGF6eS5pbml0aWFsSW1hZ2VMb2FkZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlclBhcmFtcy5zbGlkZVZpc2libGVDbGFzcykuZWFjaChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgICAgICAgIHZhciBpbmRleCA9IGlzVmlydHVhbCA/ICQoc2xpZGVFbCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSA6ICQoc2xpZGVFbCkuaW5kZXgoKTtcbiAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gYWN0aXZlSW5kZXg7IGkgPCBhY3RpdmVJbmRleCArIHNsaWRlc1BlclZpZXc7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZUV4aXN0KGkpKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoYWN0aXZlSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmxvYWRQcmV2TmV4dCkge1xuICAgICAgICBpZiAoc2xpZGVzUGVyVmlldyA+IDEgfHwgcGFyYW1zLmxvYWRQcmV2TmV4dEFtb3VudCAmJiBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50ID4gMSkge1xuICAgICAgICAgIHZhciBhbW91bnQgPSBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50O1xuICAgICAgICAgIHZhciBzcHYgPSBzbGlkZXNQZXJWaWV3O1xuICAgICAgICAgIHZhciBtYXhJbmRleCA9IE1hdGgubWluKGFjdGl2ZUluZGV4ICsgc3B2ICsgTWF0aC5tYXgoYW1vdW50LCBzcHYpLCBzbGlkZXMubGVuZ3RoKTtcbiAgICAgICAgICB2Y
24510XIgbWluSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCAtIE1hdGgubWF4KHNwdiwgYW1vdW50KSwgMCk7IC8vIE5leHQgU2xpZGVzXG5cbiAgICAgICAgICBmb3IgKHZhciBfaSA9IGFjdGl2ZUluZGV4ICsgc2xpZGVzUGVyVmlldzsgX2kgPCBtYXhJbmRleDsgX2kgKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNsaWRlRXhpc3QoX2kpKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShfaSk7XG4gICAgICAgICAgfSAvLyBQcmV2IFNsaWRlc1xuXG5cbiAgICAgICAgICBmb3IgKHZhciBfaTIgPSBtaW5JbmRleDsgX2kyIDwgYWN0aXZlSW5kZXg7IF9pMiArPSAxKSB7XG4gICAgICAgICAgICBpZiAoc2xpZGVFeGlzdChfaTIpKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShfaTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgbmV4dFNsaWRlID0gJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlclBhcmFtcy5zbGlkZU5leHRDbGFzcyk7XG4gICAgICAgICAgaWYgKG5leHRTbGlkZS5sZW5ndGggPiAwKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShzbGlkZUluZGV4KG5leHRTbGlkZSkpO1xuICAgICAgICAgIHZhciBwcmV2U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyUGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgICAgICAgICBpZiAocHJldlNsaWRlLmxlbmd0aCA+IDApIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKHNsaWRlSW5kZXgocHJldlNsaWRlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrSW5WaWV3T25Mb2FkOiBmdW5jdGlvbiBjaGVja0luVmlld09uTG9hZCgpIHtcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgdmFyICRzY3JvbGxFbGVtZW50ID0gc3dpcGVyLnBhcmFtcy5sYXp5LnNjcm9sbGluZ0VsZW1lbnQgPyAkKHN3aXBlci5wYXJhbXMubGF6eS5zY3JvbGxpbmdFbGVtZW50KSA6ICQod2luZG93KTtcbiAgICAgIHZhciBpc1dpbmRvdyA9ICRzY3JvbGxFbGVtZW50WzBdID09PSB3aW5kb3c7XG4gICAgICB2Y
24510XIgc2Nyb2xsRWxlbWVudFdpZHRoID0gaXNXaW5kb3cgPyB3aW5kb3cuaW5uZXJXaWR0aCA6ICRzY3JvbGxFbGVtZW50WzBdLm9mZnNldFdpZHRoO1xuICAgICAgdmFyIHNjcm9sbEVsZW1lbnRIZWlnaHQgPSBpc1dpbmRvdyA/IHdpbmRvdy5pbm5lckhlaWdodCA6ICRzY3JvbGxFbGVtZW50WzBdLm9mZnNldEhlaWdodDtcbiAgICAgIHZhciBzd2lwZXJPZmZzZXQgPSBzd2lwZXIuJGVsLm9mZnNldCgpO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgaW5WaWV3ID0gZmFsc2U7XG4gICAgICBpZiAocnRsKSBzd2lwZXJPZmZzZXQubGVmdCAtPSBzd2lwZXIuJGVsWzBdLnNjcm9sbExlZnQ7XG4gICAgICB2YXIgc3dpcGVyQ29vcmQgPSBbW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wXSwgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyLndpZHRoLCBzd2lwZXJPZmZzZXQudG9wXSwgW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wICsgc3dpcGVyLmhlaWdodF0sIFtzd2lwZXJPZmZzZXQubGVmdCArIHN3aXBlci53aWR0aCwgc3dpcGVyT2Zmc2V0LnRvcCArIHN3aXBlci5oZWlnaHRdXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXJDb29yZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgcG9pbnQgPSBzd2lwZXJDb29yZFtpXTtcblxuICAgICAgICBpZiAocG9pbnRbMF0gPj0gMCAmJiBwb2ludFswXSA8PSBzY3JvbGxFbGVtZW50V2lkdGggJiYgcG9pbnRbMV0gPj0gMCAmJiBwb2ludFsxXSA8PSBzY3JvbGxFbGVtZW50SGVpZ2h0KSB7XG4gICAgICAgICAgaWYgKHBvaW50WzBdID09PSAwICYmIHBvaW50WzFdID09PSAwKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgICAgICAgaW5WaWV3ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcGFzc2l2ZUxpc3RlbmVyID0gc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0ID09PSAndG91Y2hzdGFydCcgJiYgc3dpcGVyLnN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcblxuICAgICAgaWYgKGluVmlldykge1xuICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgICRzY3JvbGxFbGVtZW50Lm9mZignc2Nyb2xsJywgc3dpcGVyLmxhenkuY2hlY2tJblZpZXdPbkxvYWQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2UgaWYgKCFzd2lwZXIubGF6eS5zY3JvbGxIYW5kbGVyQXR0YWNoZWQpIHtcbiAgICAgICAgc3dpcGVyLmxhenkuc2Nyb2xsSGFuZGxlckF0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgJHNjcm9sbEVsZW1lbnQub24oJ3Njcm9sbCcsIHN3aXBlci5sYXp5LmNoZWNrSW5WaWV3T25Mb2FkLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIExhenkkMSA9IHtcbiAgICBuYW1lOiAnbGF6eScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBsYXp5OiB7XG4gICAgICAgIGNoZWNrSW5WaWV3OiBmYWxzZSxcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGxvYWRQcmV2TmV4dDogZmFsc2UsXG4gICAgICAgIGxvYWRQcmV2TmV4dEFtb3VudDogMSxcbiAgICAgICAgbG9hZE9uVHJhbnNpdGlvblN0YXJ0OiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsaW5nRWxlbWVudDogJycsXG4gICAgICAgIGVsZW1lbnRDbGFzczogJ3N3aXBlci1sYXp5JyxcbiAgICAgICAgbG9hZGluZ0NsYXNzOiAnc3dpcGVyLWxhenktbG9hZGluZycsXG4gICAgICAgIGxvYWRlZENsYXNzOiAnc3dpcGVyLWxhenktbG9hZGVkJyxcbiAgICAgICAgcHJlbG9hZGVyQ2xhc3M6ICdzd2lwZXItbGF6eS1wcmVsb2FkZXInXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGxhenk6IF9leHRlbmRzKHtcbiAgICAgICAgICBpbml0aWFsSW1hZ2VMb2FkZWQ6IGZhbHNlXG4gICAgICAgIH0sIExhenkpXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICAgICAgc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSA9PT0gMCkge1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuY2hlY2tJblZpZXcpIHtcbiAgICAgICAgICAgIHN3aXBlci5sYXp5LmNoZWNrSW5WaWV3T25Mb2FkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzY3JvbGw6IGZ1bmN0aW9uIHNjcm9sbChzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgIXN3aXBlci5wYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnc2Nyb2xsYmFyRHJhZ01vdmUgcmVzaXplIF9mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlJzogZnVuY3Rpb24gbGF6eUxvYWQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25TdGFydDogZnVuY3Rpb24gdHJhbnNpdGlvblN0YXJ0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCB8fCAhc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCAmJiAhc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkKSB7XG4gICAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmICFzd2lwZXIucGFyYW1zLmxhenkubG9hZE9uVHJhbnNpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2xpZGVDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlQ2hhbmdlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBDb250cm9sbGVyID0ge1xuICAgIExpbmVhclNwbGluZTogZnVuY3Rpb24gTGluZWFyU3BsaW5lKHgsIHkpIHtcbiAgICAgIHZhciBiaW5hcnlTZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goKSB7XG4gICAgICAgIHZhciBtYXhJbmRleDtcbiAgICAgICAgdmFyIG1pbkluZGV4O1xuICAgICAgICB2Y
24510XIgZ3Vlc3M7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyYXksIHZhbCkge1xuICAgICAgICAgIG1pbkluZGV4ID0gLTE7XG4gICAgICAgICAgbWF4SW5kZXggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgICAgICB3aGlsZSAobWF4SW5kZXggLSBtaW5JbmRleCA+IDEpIHtcbiAgICAgICAgICAgIGd1ZXNzID0gbWF4SW5kZXggKyBtaW5JbmRleCA+PiAxO1xuXG4gICAgICAgICAgICBpZiAoYXJyYXlbZ3Vlc3NdIDw9IHZhbCkge1xuICAgICAgICAgICAgICBtaW5JbmRleCA9IGd1ZXNzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWF4SW5kZXggPSBndWVzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWF4SW5kZXg7XG4gICAgICAgIH07XG4gICAgICB9KCk7XG5cbiAgICAgIHRoaXMueCA9IHg7XG4gICAgICB0aGlzLnkgPSB5O1xuICAgICAgdGhpcy5sYXN0SW5kZXggPSB4Lmxlbmd0aCAtIDE7IC8vIEdpdmVuIGFuIHggdmFsdWUgKHgyKSwgcmV0dXJuIHRoZSBleHBlY3RlZCB5MiB2YWx1ZTpcbiAgICAgIC8vICh4MSx5MSkgaXMgdGhlIGtub3duIHBvaW50IGJlZm9yZSBnaXZlbiB2YWx1ZSxcbiAgICAgIC8vICh4Myx5MykgaXMgdGhlIGtub3duIHBvaW50IGFmdGVyIGdpdmVuIHZhbHVlLlxuXG4gICAgICB2YXIgaTE7XG4gICAgICB2YXIgaTM7XG5cbiAgICAgIHRoaXMuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh4Mikge1xuICAgICAgICBpZiAoIXgyKSByZXR1cm4gMDsgLy8gR2V0IHRoZSBpbmRleGVzIG9mIHgxIGFuZCB4MyAodGhlIGFycmF5IGluZGV4ZXMgYmVmb3JlIGFuZCBhZnRlciBnaXZlbiB4Mik6XG5cbiAgICAgICAgaTMgPSBiaW5hcnlTZWFyY2godGhpcy54LCB4Mik7XG4gICAgICAgIGkxID0gaTMgLSAxOyAvLyBXZSBoYXZlIG91ciBpbmRleGVzIGkxICYgaTMsIHNvIHdlIGNhbiBjYWxjdWxhdGUgYWxyZWFkeTpcbiAgICAgICAgLy8geTIgOj0gKCh4MuKIkngxKSDDlyAoeTPiiJJ5MSkpIMO3ICh4M+KIkngxKSArIHkxXG5cbiAgICAgICAgcmV0dXJuICh4MiAtIHRoaXMueFtpMV0pICogKHRoaXMueVtpM10gLSB0aGlzLnlbaTFdKSAvICh0aGlzLnhbaTNdIC0gdGhpcy54W2kxXSkgKyB0aGlzLnlbaTFdO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvLyB4eHg6IGZvciBub3cgaSB3aWxsIGp1c3Qgc2F2ZSBvbmUgc3BsaW5lIGZ1bmN0aW9uIHRvIHRvXG4gICAgZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbjogZnVuY3Rpb24gZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbihjKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gc3dpcGVyLnBhcmFtcy5sb29wID8gbmV3IENvbnRyb2xsZXIuTGluZWFyU3BsaW5lKHN3aXBlci5zbGlkZXNHcmlkLCBjLnNsaWRlc0dyaWQpIDogbmV3IENvbnRyb2xsZXIuTGluZWFyU3BsaW5lKHN3aXBlci5zbmFwR3JpZCwgYy5zbmFwR3JpZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZShfc2V0VHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGNvbnRyb2xsZWQgPSBzd2lwZXIuY29udHJvbGxlci5jb250cm9sO1xuICAgICAgdmFyIG11bHRpcGxpZXI7XG4gICAgICB2YXIgY29udHJvbGxlZFRyYW5zbGF0ZTtcbiAgICAgIHZhciBTd2lwZXIgPSBzd2lwZXIuY29uc3RydWN0b3I7XG5cbiAgICAgIGZ1bmN0aW9uIHNldENvbnRyb2xsZWRUcmFuc2xhdGUoYykge1xuICAgICAgICAvLyB0aGlzIHdpbGwgY3JlYXRlIGFuIEludGVycG9sYXRlIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzbmFwR3JpZHNcbiAgICAgICAgLy8geCBpcyB0aGUgR3JpZCBvZiB0aGUgc2Nyb2xsZWQgc2Nyb2xsZXIgYW5kIHkgd2lsbCBiZSB0aGUgY29udHJvbGxlZCBzY3JvbGxlclxuICAgICAgICAvLyBpdCBtYWtlcyBzZW5zZSB0byBjcmVhdGUgdGhpcyBvbmx5IG9uY2UgYW5kIHJlY2FsbCBpdCBmb3IgdGhlIGludGVycG9sYXRpb25cbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIGRvZXMgYSBsb3Qgb2YgdmFsdWUgY2FjaGluZyBmb3IgcGVyZm9ybWFuY2VcbiAgICAgICAgdmFyIHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGU7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgIHN3aXBlci5jb250cm9sbGVyLmdldEludGVycG9sYXRlRnVuY3Rpb24oYyk7IC8vIGkgYW0gbm90IHN1cmUgd2h5IHRoZSB2YWx1ZXMgaGF2ZSB0byBiZSBtdWx0aXBsaWNhdGVkIHRoaXMgd2F5LCB0cmllZCB0byBpbnZlcnQgdGhlIHNuYXBHcmlkXG4gICAgICAgICAgLy8gYnV0IGl0IGRpZCBub3Qgd29yayBvdXRcblxuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAtc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lLmludGVycG9sYXRlKC10cmFuc2xhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVkVHJhbnNsYXRlIHx8IHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgICBtdWx0aXBsaWVyID0gKGMubWF4VHJhbnNsYXRlKCkgLSBjLm1pblRyYW5zbGF0ZSgpKSAvIChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAqIG11bHRpcGxpZXIgKyBjLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5pbnZlcnNlKSB7XG4gICAgICAgICAgY29udHJvbGxlZFRyYW5zbGF0ZSA9IGMubWF4VHJhbnNsYXRlKCkgLSBjb250cm9sbGVkVHJhbnNsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgYy51cGRhdGVQcm9ncmVzcyhjb250cm9sbGVkVHJhbnNsYXRlKTtcbiAgICAgICAgYy5zZXRUcmFuc2xhdGUoY29udHJvbGxlZFRyYW5zbGF0ZSwgc3dpcGVyKTtcbiAgICAgICAgYy51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBjLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbGxlZCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250cm9sbGVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKGNvbnRyb2xsZWRbaV0gIT09IGJ5Q29udHJvbGxlciAmJiBjb250cm9sbGVkW2ldIGluc3RhbmNlb2YgU3dpcGVyKSB7XG4gICAgICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGNvbnRyb2xsZWRbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb250cm9sbGVkIGluc3RhbmNlb2YgU3dpcGVyICYmIGJ5Q29udHJvbGxlciAhPT0gY29udHJvbGxlZCkge1xuICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGNvbnRyb2xsZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBTd2lwZXIgPSBzd2lwZXIuY29uc3RydWN0b3I7XG4gICAgICB2YXIgY29udHJvbGxlZCA9IHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2w7XG4gICAgICB2YXIgaTtcblxuICAgICAgZnVuY3Rpb24gc2V0Q29udHJvbGxlZFRyYW5zaXRpb24oYykge1xuICAgICAgICBjLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIHN3aXBlcik7XG5cbiAgICAgICAgaWYgKGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgICAgYy50cmFuc2l0aW9uU3RhcnQoKTtcblxuICAgICAgICAgIGlmIChjLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGMudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYy4kd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sbGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChjLnBhcmFtcy5sb29wICYmIHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgICAgICBjLmxvb3BGaXgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYy50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbGxlZCkpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbnRyb2xsZWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoY29udHJvbGxlZFtpXSAhPT0gYnlDb250cm9sbGVyICYmIGNvbnRyb2xsZWRbaV0gaW5zdGFuY2VvZiBTd2lwZXIpIHtcbiAgICAgICAgICAgIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGNvbnRyb2xsZWRbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb250cm9sbGVkIGluc3RhbmNlb2YgU3dpcGVyICYmIGJ5Q29udHJvbGxlciAhPT0gY29udHJvbGxlZCkge1xuICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNpdGlvbihjb250cm9sbGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBDb250cm9sbGVyJDEgPSB7XG4gICAgbmFtZTogJ2NvbnRyb2xsZXInLFxuICAgIHBhcmFtczoge1xuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgICAgIGludmVyc2U6IGZhbHNlLFxuICAgICAgICBieTogJ3NsaWRlJyAvLyBvciAnY29udGFpbmVyJ1xuXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGNvbnRyb2xsZXI6IF9leHRlbmRzKHtcbiAgICAgICAgICBjb250cm9sOiBzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbFxuICAgICAgICB9LCB
24510Db250cm9sbGVyKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHJldHVybjtcblxuICAgICAgICBpZiAoc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lKSB7XG4gICAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIuY29udHJvbGxlci5zcGxpbmU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvYnNlcnZlclVwZGF0ZTogZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHN3aXBlciwgdHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBBMTF5ID0ge1xuICAgIGdldFJhbmRvbU51bWJlcjogZnVuY3Rpb24gZ2V0UmFuZG9tTnVtYmVyKHNpemUpIHtcbiAgICAgIGlmIChzaXplID09PSB2b2lkIDApIHtcbiAgICAgICAgc2l6ZSA9IDE2O1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcmFuZG9tQ2hhciA9IGZ1bmN0aW9uIHJhbmRvbUNoYXIoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKDE2ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuICd4Jy5yZXBlYXQoc2l6ZSkucmVwbGFjZSgveC9nLCByYW5kb21DaGFyKTtcbiAgICB9LFxuICAgIG1ha2VFbEZvY3VzYWJsZTogZnVuY3Rpb24gbWFrZUVsRm9jdXNhYmxlKCRlbCkge1xuICAgICAgJGVsLmF0dHIoJ3RhYkluZGV4JywgJzAnKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBtYWtlRWxOb3RGb2N1c2FibGU6IGZ1bmN0aW9uIG1ha2VFbE5vdEZvY3VzYWJsZSgkZWwpIHtcbiAgICAgICRlbC5hdHRyKCd0YWJJbmRleCcsICctMScpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGFkZEVsUm9sZTogZnVuY3Rpb24gYWRkRWxSb2xlKCRlbCwgcm9sZSkge1xuICAgICAgJGVsLmF0dHIoJ3JvbGUnLCByb2xlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbFJvbGVEZXNjcmlwdGlvbjogZnVuY3Rpb24gYWRkRWxSb2xlRGVzY3JpcHRpb24oJGVsLCBkZXNjcmlwdGlvbikge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJywgZGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGFkZEVsQ29udHJvbHM6IGZ1bmN0aW9uIGFkZEVsQ29udHJvbHMoJGVsLCBjb250cm9scykge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBjb250cm9scyk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgYWRkRWxMYWJlbDogZnVuY3Rpb24gYWRkRWxMYWJlbCgkZWwsIGxhYmVsKSB7XG4gICAgICAkZWwuYXR0cignYXJpYS1sYWJlbCcsIGxhYmVsKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbElkOiBmdW5jdGlvbiBhZGRFbElkKCRlbCwgaWQpIHtcbiAgICAgICRlbC5hdHRyKCdpZCcsIGlkKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbExpdmU6IGZ1bmN0aW9uIGFkZEVsTGl2ZSgkZWwsIGxpdmUpIHtcbiAgICAgICRlbC5hdHRyKCdhcmlhLWxpdmUnLCBsaXZlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBkaXNhYmxlRWw6IGZ1bmN0aW9uIGRpc2FibGVFbCgkZWwpIHtcbiAgICAgICRlbC5hdHRyKCdhcmlhLWRpc2FibGVkJywgdHJ1ZSk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgZW5hYmxlRWw6IGZ1bmN0aW9uIGVuYWJsZUVsKCRlbCkge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgb25FbnRlck9yU3BhY2VLZXk6IGZ1bmN0aW9uIG9uRW50ZXJPclNwYWNlS2V5KGUpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgIT09IDEzICYmIGUua2V5Q29kZSAhPT0gMzIpIHJldHVybjtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICAgIHZhciAkdGFyZ2V0RWwgPSAkKGUudGFyZ2V0KTtcblxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpKSB7XG4gICAgICAgIGlmICghKHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmxhc3RTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm5vdGlmeShwYXJhbXMubmV4dFNsaWRlTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpKSB7XG4gICAgICAgIGlmICghKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmZpcnN0U2xpZGVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiAkdGFyZ2V0RWwuaXMoY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSkpIHtcbiAgICAgICAgJHRhcmdldEVsWzBdLmNsaWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeShtZXNzYWdlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBub3RpZmljYXRpb24gPSBzd2lwZXIuYTExeS5saXZlUmVnaW9uO1xuICAgICAgaWYgKG5vdGlmaWNhdGlvbi5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIG5vdGlmaWNhdGlvbi5odG1sKCcnKTtcbiAgICAgIG5vdGlmaWNhdGlvbi5odG1sKG1lc3NhZ2UpO1xuICAgIH0sXG4gICAgdXBkYXRlTmF2aWdhdGlvbjogZnVuY3Rpb24gdXBkYXRlTmF2aWdhdGlvbigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCB8fCAhc3dpcGVyLm5hdmlnYXRpb24pIHJldHVybjtcbiAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb24gPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uLiRuZXh0RWwsXG4gICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbi4kcHJldkVsO1xuXG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmRpc2FibGVFbCgkcHJldkVsKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5tYWtlRWxOb3RGb2N1c2FibGUoJHByZXZFbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkuZW5hYmxlRWwoJHByZXZFbCk7XG4gICAgICAgICAgc3dpcGVyLmExMXkubWFrZUVsRm9jdXNhYmxlKCRwcmV2RWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkuZGlzYWJsZUVsKCRuZXh0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbE5vdEZvY3VzYWJsZSgkbmV4dEVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5lbmFibGVFbCgkbmV4dEVsKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5tYWtlRWxGb2N1c2FibGUoJG5leHRFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVBhZ2luYXRpb246IGZ1bmN0aW9uIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG5cbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGgpIHtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5lYWNoKGZ1bmN0aW9uIChidWxsZXRFbCkge1xuICAgICAgICAgIHZhciAkYnVsbGV0RWwgPSAkKGJ1bGxldEVsKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5tYWtlRWxGb2N1c2FibGUoJGJ1bGxldEVsKTtcblxuICAgICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLnJlbmRlckJ1bGxldCkge1xuICAgICAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRidWxsZXRFbCwgJ2J1dHRvbicpO1xuICAgICAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkYnVsbGV0RWwsIHBhcmFtcy5wYWdpbmF0aW9uQnVsbGV0TWVzc2FnZS5yZXBsYWNlKC9cXHtcXHtpbmRleFxcfVxcfS8sICRidWxsZXRFbC5pbmRleCgpICsgMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgICAgc3dpcGVyLiRlbC5hcHBlbmQoc3dpcGVyLmExMXkubGl2ZVJlZ2lvbik7IC8vIENvbnRhaW5lclxuXG4gICAgICB2Y
24510XIgJGNvbnRhaW5lckVsID0gc3dpcGVyLiRlbDtcblxuICAgICAgaWYgKHBhcmFtcy5jb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlKSB7XG4gICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZURlc2NyaXB0aW9uKCRjb250YWluZXJFbCwgcGFyYW1zLmNvbnRhaW5lclJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmNvbnRhaW5lck1lc3NhZ2UpIHtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkY29udGFpbmVyRWwsIHBhcmFtcy5jb250YWluZXJNZXNzYWdlKTtcbiAgICAgIH0gLy8gV3JhcHBlclxuXG5cbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgd3JhcHBlcklkID0gJHdyYXBwZXJFbC5hdHRyKCdpZCcpIHx8IFwic3dpcGVyLXdyYXBwZXItXCIgKyBzd2lwZXIuYTExeS5nZXRSYW5kb21OdW1iZXIoMTYpO1xuICAgICAgdmFyIGxpdmUgPSBzd2lwZXIucGFyYW1zLmF1dG9wbGF5ICYmIHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZW5hYmxlZCA/ICdvZmYnIDogJ3BvbGl0ZSc7XG4gICAgICBzd2lwZXIuYTExeS5hZGRFbElkKCR3cmFwcGVyRWwsIHdyYXBwZXJJZCk7XG4gICAgICBzd2lwZXIuYTExeS5hZGRFbExpdmUoJHdyYXBwZXJFbCwgbGl2ZSk7IC8vIFNsaWRlXG5cbiAgICAgIGlmIChwYXJhbXMuaXRlbVJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlRGVzY3JpcHRpb24oJChzd2lwZXIuc2xpZGVzKSwgcGFyYW1zLml0ZW1Sb2xlRGVzY3JpcHRpb25NZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCQoc3dpcGVyLnNsaWRlcyksIHBhcmFtcy5zbGlkZVJvbGUpO1xuICAgICAgc3dpcGVyLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgIHZhciAkc2xpZGVFbCA9ICQoc2xpZGVFbCk7XG4gICAgICAgIHZhciBhcmlhTGFiZWxNZXNzYWdlID0gcGFyYW1zLnNsaWRlTGFiZWxNZXNzYWdlLnJlcGxhY2UoL1xce1xce2luZGV4XFx9XFx9LywgJHNsaWRlRWwuaW5kZXgoKSArIDEpLnJlcGxhY2UoL1xce1xce3NsaWRlc0xlbmd0aFxcfVxcfS8sIHN3aXBlci5zbGlkZXMubGVuZ3RoKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkc2xpZGVFbCwgYXJpYUxhYmVsTWVzc2FnZSk7XG4gICAgICB9KTsgLy8gTmF2aWdhdGlvblxuXG4gICAgICB2Y
24510XIgJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsO1xuXG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbCkge1xuICAgICAgICAkbmV4dEVsID0gc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWw7XG4gICAgICB9XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkbmV4dEVsKTtcblxuICAgICAgICBpZiAoJG5leHRFbFswXS50YWdOYW1lICE9PSAnQlVUVE9OJykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZSgkbmV4dEVsLCAnYnV0dG9uJyk7XG4gICAgICAgICAgJG5leHRFbC5vbigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci5hMTF5LmFkZEVsTGFiZWwoJG5leHRFbCwgcGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpO1xuICAgICAgICBzd2lwZXIuYTExeS5hZGRFbENvbnRyb2xzKCRuZXh0RWwsIHdyYXBwZXJJZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkcHJldkVsKTtcblxuICAgICAgICBpZiAoJHByZXZFbFswXS50YWdOYW1lICE9PSAnQlVUVE9OJykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZSgkcHJldkVsLCAnYnV0dG9uJyk7XG4gICAgICAgICAgJHByZXZFbC5vbigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci5hMTF5LmFkZEVsTGFiZWwoJHByZXZFbCwgcGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgICBzd2lwZXIuYTExeS5hZGRFbENvbnRyb2xzKCRwcmV2RWwsIHdyYXBwZXJJZCk7XG4gICAgICB9IC8vIFBhZ2luYXRpb25cblxuXG4gICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5vbigna2V5ZG93bicsIGNsYXNzZXNUb1NlbGVjdG9yKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcyksIHN3aXBlci5hMTF5Lm9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIuYTExeS5saXZlUmVnaW9uICYmIHN3aXBlci5hMTF5LmxpdmVSZWdpb24ubGVuZ3RoID4gMCkgc3dpcGVyLmExMXkubGl2ZVJlZ2lvbi5yZW1vdmUoKTtcbiAgICAgIHZhciAkbmV4dEVsO1xuICAgICAgdmFyICRwcmV2RWw7XG5cbiAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkge1xuICAgICAgICAkcHJldkVsID0gc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICAgJG5leHRFbC5vZmYoJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyT3JTcGFjZUtleSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgICRwcmV2RWwub2ZmKCdrZXlkb3duJywgc3dpcGVyLmExMXkub25FbnRlck9yU3BhY2VLZXkpO1xuICAgICAgfSAvLyBQYWdpbmF0aW9uXG5cblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub2ZmKCdrZXlkb3duJywgY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSwgc3dpcGVyLmExMXkub25FbnRlck9yU3BhY2VLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIEExMXkkMSA9IHtcbiAgICBuYW1lOiAnYTExeScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhMTF5OiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG5vdGlmaWNhdGlvbkNsYXNzOiAnc3dpcGVyLW5vdGlmaWNhdGlvbicsXG4gICAgICAgIHByZXZTbGlkZU1lc3NhZ2U6ICdQcmV2aW91cyBzbGlkZScsXG4gICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6ICdOZXh0IHNsaWRlJyxcbiAgICAgICAgZmlyc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBmaXJzdCBzbGlkZScsXG4gICAgICAgIGxhc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBsYXN0IHNsaWRlJyxcbiAgICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6ICdHbyB0byBzbGlkZSB7e2luZGV4fX0nLFxuICAgICAgICBzbGlkZUxhYmVsTWVzc2FnZTogJ3t7aW5kZXh9fSAvIHt7c2xpZGVzTGVuZ3RofX0nLFxuICAgICAgICBjb250YWluZXJNZXNzYWdlOiBudWxsLFxuICAgICAgICBjb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlOiBudWxsLFxuICAgICAgICBpdGVtUm9sZURlc2NyaXB0aW9uTWVzc2FnZTogbnVsbCxcbiAgICAgICAgc2xpZGVSb2xlOiAnZ3JvdXAnXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGExMXk6IF9leHRlbmRzKHt9LCBBMTF5LCB7XG4gICAgICAgICAgbGl2ZVJlZ2lvbjogJChcIjxzcGFuIGNsYXNzPVxcXCJcIiArIHN3aXBlci5wYXJhbXMuYTExeS5ub3RpZmljYXRpb25DbGFzcyArIFwiXFxcIiBhcmlhLWxpdmU9XFxcImFzc2VydGl2ZVxcXCIgYXJpYS1hdG9taWM9XFxcInRydWVcXFwiPjwvc3Bhbj5cIilcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGFmdGVySW5pdDogZnVuY3Rpb24gYWZ0ZXJJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5hMTF5LmluaXQoKTtcbiAgICAgICAgc3dpcGVyLmExMXkudXBkYXRlTmF2aWdhdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHRvRWRnZTogZnVuY3Rpb24gdG9FZGdlKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmExMXkudXBkYXRlTmF2aWdhdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHBhZ2luYXRpb25VcGRhdGU6IGZ1bmN0aW9uIHBhZ2luYXRpb25VcGRhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmExMXkudXBkYXRlUGFnaW5hdGlvbigpO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmExMXkuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgSGlzdG9yeSA9IHtcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeSkgcmV0dXJuO1xuXG4gICAgICBpZiAoIXdpbmRvdy5oaXN0b3J5IHx8ICF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpIHtcbiAgICAgICAgc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlzdG9yeSA9IHN3aXBlci5oaXN0b3J5O1xuICAgICAgaGlzdG9yeS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBoaXN0b3J5LnBhdGhzID0gSGlzdG9yeS5nZXRQYXRoVmFsdWVzKHN3aXBlci5wYXJhbXMudXJsKTtcbiAgICAgIGlmICghaGlzdG9yeS5wYXRocy5rZXkgJiYgIWhpc3RvcnkucGF0aHMudmFsdWUpIHJldHVybjtcbiAgICAgIGhpc3Rvcnkuc2Nyb2xsVG9TbGlkZSgwLCBoaXN0b3J5LnBhdGhzLnZhbHVlLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCk7XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBzd2lwZXIuaGlzdG9yeS5zZXRIaXN0b3J5UG9wU3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc3dpcGVyLmhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEhpc3RvcnlQb3BTdGF0ZTogZnVuY3Rpb24gc2V0SGlzdG9yeVBvcFN0YXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuaGlzdG9yeS5wYXRocyA9IEhpc3RvcnkuZ2V0UGF0aFZhbHVlcyhzd2lwZXIucGFyYW1zLnVybCk7XG4gICAgICBzd2lwZXIuaGlzdG9yeS5zY3JvbGxUb1NsaWRlKHN3aXBlci5wYXJhbXMuc3BlZWQsIHN3aXBlci5oaXN0b3J5LnBhdGhzLnZhbHVlLCBmYWxzZSk7XG4gICAgfSxcbiAgICBnZXRQYXRoVmFsdWVzOiBmdW5jdGlvbiBnZXRQYXRoVmFsdWVzKHVybE92ZXJyaWRlKSB7XG4gICAgICB2Y
24510XIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICB2YXIgbG9jYXRpb247XG5cbiAgICAgIGlmICh1cmxPdmVycmlkZSkge1xuICAgICAgICBsb2NhdGlvbiA9IG5ldyBVUkwodXJsT3ZlcnJpZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoQXJyYXkgPSBsb2NhdGlvbi5wYXRobmFtZS5zbGljZSgxKS5zcGxpdCgnLycpLmZpbHRlcihmdW5jdGlvbiAocGFydCkge1xuICAgICAgICByZXR1cm4gcGFydCAhPT0gJyc7XG4gICAgICB9KTtcbiAgICAgIHZhciB0b3RhbCA9IHBhdGhBcnJheS5sZW5ndGg7XG4gICAgICB2YXIga2V5ID0gcGF0aEFycmF5W3RvdGFsIC0gMl07XG4gICAgICB2YXIgdmFsdWUgPSBwYXRoQXJyYXlbdG90YWwgLSAxXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXRIaXN0b3J5OiBmdW5jdGlvbiBzZXRIaXN0b3J5KGtleSwgaW5kZXgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgICAgaWYgKCFzd2lwZXIuaGlzdG9yeS5pbml0aWFsaXplZCB8fCAhc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBsb2NhdGlvbjtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudXJsKSB7XG4gICAgICAgIGxvY2F0aW9uID0gbmV3IFVSTChzd2lwZXIucGFyYW1zLnVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpbmRleCk7XG4gICAgICB2Y
24510XIgdmFsdWUgPSBIaXN0b3J5LnNsdWdpZnkoc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5JykpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJvb3QubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgcm9vdCA9IHN3aXBlci5wYXJhbXMuaGlzdG9yeS5yb290O1xuICAgICAgICBpZiAocm9vdFtyb290Lmxlbmd0aCAtIDFdID09PSAnLycpIHJvb3QgPSByb290LnNsaWNlKDAsIHJvb3QubGVuZ3RoIC0gMSk7XG4gICAgICAgIHZhbHVlID0gcm9vdCArIFwiL1wiICsga2V5ICsgXCIvXCIgKyB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSBrZXkgKyBcIi9cIiArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudFN0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0sIG51bGwsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0sIG51bGwsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNsdWdpZnk6IGZ1bmN0aW9uIHNsdWdpZnkodGV4dCkge1xuICAgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICctJykucmVwbGFjZSgvW15cXHctXSsvZywgJycpLnJlcGxhY2UoLy0tKy9nLCAnLScpLnJlcGxhY2UoL14tKy8sICcnKS5yZXBsYWNlKC8tKyQvLCAnJyk7XG4gICAgfSxcbiAgICBzY3JvbGxUb1NsaWRlOiBmdW5jdGlvbiBzY3JvbGxUb1NsaWRlKHNwZWVkLCB2YWx1ZSwgcnVuQ2FsbGJhY2tzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgICB2YXIgc2xpZGVIaXN0b3J5ID0gSGlzdG9yeS5zbHVnaWZ5KHNsaWRlLmF0dHIoJ2RhdGEtaGlzdG9yeScpKTtcblxuICAgICAgICAgIGlmIChzbGlkZUhpc3RvcnkgPT09IHZhbHVlICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHJ1bkNhbGxiYWNrcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgSGlzdG9yeSQxID0ge1xuICAgIG5hbWU6ICdoaXN0b3J5JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJvb3Q6ICcnLFxuICAgICAgICByZXBsYWNlU3RhdGU6IGZhbHNlLFxuICAgICAgICBrZXk6ICdzbGlkZXMnXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGhpc3Rvcnk6IF9leHRlbmRzKHt9LCBIaXN0b3J5KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIp
24510IHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3RvcnkuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3RvcnkuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ3RyYW5zaXRpb25FbmQgX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2UnOiBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaGlzdG9yeS5pbml0aWFsaXplZCkge1xuICAgICAgICAgIHN3aXBlci5oaXN0b3J5LnNldEhpc3Rvcnkoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmtleSwgc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5oaXN0b3J5LmluaXRpYWxpemVkICYmIHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICAgIHN3aXBlci5oaXN0b3J5LnNldEhpc3Rvcnkoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmtleSwgc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgSGFzaE5hdmlnYXRpb24gPSB7XG4gICAgb25IYXNoQ2FuZ2U6IGZ1bmN0aW9uIG9uSGFzaENhbmdlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2hhc2hDaGFuZ2UnKTtcbiAgICAgIHZhciBuZXdIYXNoID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgdmFyIGFjdGl2ZVNsaWRlSGFzaCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLWhhc2gnKTtcblxuICAgICAgaWYgKG5ld0hhc2ggIT09IGFjdGl2ZVNsaWRlSGFzaCkge1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtaGFzaD1cXFwiXCIgKyBuZXdIYXNoICsgXCJcXFwiXVwiKS5pbmRleCgpO1xuICAgICAgICBpZiAodHlwZW9mIG5ld0luZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRIYXNoOiBmdW5jdGlvbiBzZXRIYXNoKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgaWYgKCFzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdGlhbGl6ZWQgfHwgIXN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5yZXBsYWNlU3RhdGUgJiYgd2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCBcIiNcIiArIHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLWhhc2gnKSB8fCAnJyk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdoYXNoU2V0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2Y
24510XIgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHZhciBoYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSBoYXNoIHx8ICcnO1xuICAgICAgICBzd2lwZXIuZW1pdCgnaGFzaFNldCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkIHx8IHN3aXBlci5wYXJhbXMuaGlzdG9yeSAmJiBzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHZhciBoYXNoID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuXG4gICAgICBpZiAoaGFzaCkge1xuICAgICAgICB2YXIgc3BlZWQgPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgICB2YXIgc2xpZGVIYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG5cbiAgICAgICAgICBpZiAoc2xpZGVIYXNoID09PSBoYXNoICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB2Y
24510XIgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLndhdGNoU3RhdGUpIHtcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ud2F0Y2hTdGF0ZSkge1xuICAgICAgICAkKHdpbmRvdykub2ZmKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBIYXNoTmF2aWdhdGlvbiQxID0ge1xuICAgIG5hbWU6ICdoYXNoLW5hdmlnYXRpb24nLFxuICAgIHBhcmFtczoge1xuICAgICAgaGFzaE5hdmlnYXRpb246IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJlcGxhY2VTdGF0ZTogZmFsc2UsXG4gICAgICAgIHdhdGNoU3RhdGU6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGhhc2hOYXZpZ2F0aW9uOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlXG4gICAgICAgIH0sIEhhc2hOYXZpZ2F0aW9uKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIp
24510IHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICd0cmFuc2l0aW9uRW5kIF9mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlJzogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZF9mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLnNldEhhc2goKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0aWFsaXplZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uc2V0SGFzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBBdXRvcGxheSA9IHtcbiAgICBydW46IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRhY3RpdmVTbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgdmFyIGRlbGF5ID0gc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kZWxheTtcblxuICAgICAgaWYgKCRhY3RpdmVTbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLWF1dG9wbGF5JykpIHtcbiAgICAgICAgZGVsYXkgPSAkYWN0aXZlU2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1hdXRvcGxheScpIHx8IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dChzd2lwZXIuYXV0b3BsYXkudGltZW91dCk7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkudGltZW91dCA9IG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGF1dG9wbGF5UmVzdWx0O1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnJldmVyc2VEaXJlY3Rpb24pIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVQcmV2KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICAgICAgICBhdXRvcGxheVJlc3VsdCA9IHN3aXBlci5zbGlkZVByZXYoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnN0b3BPbkxhc3RTbGlkZSkge1xuICAgICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVOZXh0KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBhdXRvcGxheVJlc3VsdCA9IHN3aXBlci5zbGlkZU5leHQoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuc3RvcE9uTGFzdFNsaWRlKSB7XG4gICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVUbygwLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZykgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO2Vsc2UgaWYgKGF1dG9wbGF5UmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSwgZGVsYXkpO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucnVubmluZyA9IHRydWU7XG4gICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXlTdGFydCcpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS50aW1lb3V0KTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgP
24510SB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gZmFsc2U7XG4gICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXlTdG9wJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHBhdXNlOiBmdW5jdGlvbiBwYXVzZShzcGVlZCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm47XG4gICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkgcmV0dXJuO1xuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS50aW1lb3V0KSBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IHRydWU7XG5cbiAgICAgIGlmIChzcGVlZCA9PT0gMCB8fCAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS53YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblZpc2liaWxpdHlDaGFuZ2U6IGZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicgJiYgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25UcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuJHdyYXBwZXJFbCkgcmV0dXJuO1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBzd2lwZXIuJHdyYXBwZXJFbFswXSkgcmV0dXJuO1xuICAgICAgWyd0cmFuc2l0aW9uZW5kJywgJ3dlYmtpdFRyYW5zaXRpb25FbmQnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICB9XG5cbiAgICAgIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgc3dpcGVyLmF1dG9wbGF5Lm9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgIH0sXG4gICAgYXR0YWNoTW91c2VFdmVudHM6IGZ1bmN0aW9uIGF0dGFjaE1vdXNlRXZlbnRzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnBhdXNlT25Nb3VzZUVudGVyKSB7XG4gICAgICAgIHN3aXBlci4kZWwub24oJ21vdXNlZW50ZXInLCBzd2lwZXIuYXV0b3BsYXkub25Nb3VzZUVudGVyKTtcbiAgICAgICAgc3dpcGVyLiRlbC5vbignbW91c2VsZWF2ZScsIHN3aXBlci5hdXRvcGxheS5vbk1vdXNlTGVhdmUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGV0YWNoTW91c2VFdmVudHM6IGZ1bmN0aW9uIGRldGFjaE1vdXNlRXZlbnRzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuJGVsLm9mZignbW91c2VlbnRlcicsIHN3aXBlci5hdXRvcGxheS5vbk1vdXNlRW50ZXIpO1xuICAgICAgc3dpcGVyLiRlbC5vZmYoJ21vdXNlbGVhdmUnLCBzd2lwZXIuYXV0b3BsYXkub25Nb3VzZUxlYXZlKTtcbiAgICB9XG4gIH07XG4gIHZhciBBdXRvcGxheSQxID0ge1xuICAgIG5hbWU6ICdhdXRvcGxheScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhdXRvcGxheToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZGVsYXk6IDMwMDAsXG4gICAgICAgIHdhaXRGb3JUcmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICAgICAgc3RvcE9uTGFzdFNsaWRlOiBmYWxzZSxcbiAgICAgICAgcmV2ZXJzZURpcmVjdGlvbj
24510ogZmFsc2UsXG4gICAgICAgIHBhdXNlT25Nb3VzZUVudGVyOiBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBhdXRvcGxheTogX2V4dGVuZHMoe30sIEF1dG9wbGF5LCB7XG4gICAgICAgICAgcnVubmluZzogZmFsc2UsXG4gICAgICAgICAgcGF1c2VkOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdGFydCgpO1xuICAgICAgICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHN3aXBlci5hdXRvcGxheS5vblZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5hdHRhY2hNb3VzZUV2ZW50cygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmVmb3JlVHJhbnNpdGlvblN0YXJ0OiBmdW5jdGlvbiBiZWZvcmVUcmFuc2l0aW9uU3RhcnQoc3dpcGVyLCBzcGVlZCwgaW50ZXJuYWwpIHtcbiAgICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgICAgaWYgKGludGVybmFsIHx8ICFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2Uoc3BlZWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlckZpcnN0TW92ZTogZnVuY3Rpb24gc2xpZGVyRmlyc3RNb3ZlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG91Y2hFbmQ6IGZ1bmN0aW9uIHRvdWNoRW5kKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgJiYgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkuZGV0YWNoTW91c2VFdmVudHMoKTtcblxuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHN3aXBlci5hdXRvcGxheS5vblZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgRmFkZSA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciAkc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBvZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIHR4ID0gLW9mZnNldDtcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHR4IC09IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICAgIHZhciB0eSA9IDA7XG5cbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzbGlkZU9wYWNpdHkgPSBzd2lwZXIucGFyYW1zLmZhZGVFZmZlY3QuY3Jvc3NGYWRlID8gTWF0aC5tYXgoMSAtIE1hdGguYWJzKCRzbGlkZUVsWzBdLnByb2dyZXNzKSwgMCkgOiAxICsgTWF0aC5taW4oTWF0aC5tYXgoJHNsaWRlRWxbMF0ucHJvZ3Jlc3MsIC0xKSwgMCk7XG4gICAgICAgICRzbGlkZUVsLmNzcyh7XG4gICAgICAgICAgb3BhY2l0eTogc2xpZGVPcGFjaXR5XG4gICAgICAgIH0pLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgMHB4KVwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlICYmIGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgIHZhciBldmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICBzbGlkZXMudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGV2ZW50VHJpZ2dlcmVkKSByZXR1cm47XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIGV2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHRyaWdnZXJFdmVudHMgPSBbJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAndHJhbnNpdGlvbmVuZCddO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyRXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyaWdnZXIodHJpZ2dlckV2ZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gI
24510H07XG4gIHZhciBFZmZlY3RGYWRlID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtZmFkZScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmYWRlRWZmZWN0OiB7XG4gICAgICAgIGNyb3NzRmFkZTogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgZmFkZUVmZmVjdDogX2V4dGVuZHMoe30sIEZhZGUpXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwiZmFkZVwiKTtcbiAgICAgICAgdmFyIG92ZXJ3cml0ZVBhcmFtcyA9IHtcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxLFxuICAgICAgICAgIHNsaWRlc1BlckNvbHVtbjogMSxcbiAgICAgICAgICBzbGlkZXNQZXJHcm91cDogMSxcbiAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgICAgICB2aXJ0dWFsVHJhbnNsYXRlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIGV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBleHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuZmFkZUVmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmFkZScpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmZhZGVFZmZlY3Quc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBDdWJlID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgJGVsID0gc3dpcGVyLiRlbCxcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBzd2lwZXJXaWR0aCA9IHN3aXBlci53aWR0aCxcbiAgICAgICAgICBzd2lwZXJIZWlnaHQgPSBzd2lwZXIuaGVpZ2h0LFxuICAgICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgICAgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplLFxuICAgICAgICAgIGJyb3dzZXIgPSBzd2lwZXIuYnJvd3NlcjtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3Q7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgdmFyIHdyYXBwZXJSb3RhdGUgPSAwO1xuICAgICAgdmFyICRjdWJlU2hhZG93RWw7XG5cbiAgICAgIGlmIChwYXJhbXMuc2hhZG93KSB7XG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAkY3ViZVNoYWRvd0VsID0gJHdyYXBwZXJFbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG5cbiAgICAgICAgICBpZiAoJGN1YmVTaGFkb3dFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkKCc8ZGl2IGNsYXNzPVwic3dpcGVyLWN1YmUtc2hhZG93XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAkd3JhcHBlckVsLmFwcGVuZCgkY3ViZVNoYWRvd0VsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkY3ViZVNoYWRvd0VsLmNzcyh7XG4gICAgICAgICAgICBoZWlnaHQ6IHN3aXBlcldpZHRoICsgXCJweFwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICRlbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG5cbiAgICAgICAgICBpZiAoJGN1YmVTaGFkb3dFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkKCc8ZGl2IGNsYXNzPVwic3dpcGVyLWN1YmUtc2hhZG93XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAkZWwuYXBwZW5kKCRjdWJlU2hhZG93RWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2Y
24510XIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBzbGlkZUluZGV4ID0gaTtcblxuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgc2xpZGVJbmRleCA9IHBhcnNlSW50KCRzbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzbGlkZUFuZ2xlID0gc2xpZGVJbmRleCAqIDkwO1xuICAgICAgICB2YXIgcm91bmQgPSBNYXRoLmZsb29yKHNsaWRlQW5nbGUgLyAzNjApO1xuXG4gICAgICAgIGlmIChydGwpIHtcbiAgICAgICAgICBzbGlkZUFuZ2xlID0gLXNsaWRlQW5nbGU7XG4gICAgICAgICAgcm91bmQgPSBNYXRoLmZsb29yKC1zbGlkZUFuZ2xlIC8gMzYwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9ncmVzcyA9IE1hdGgubWF4KE1hdGgubWluKCRzbGlkZUVsWzBdLnByb2dyZXNzLCAxKSwgLTEpO1xuICAgICAgICB2YXIgdHggPSAwO1xuICAgICAgICB2YXIgdHkgPSAwO1xuICAgICAgICB2YXIgdHogPSAwO1xuXG4gICAgICAgIGlmIChzbGlkZUluZGV4ICUgNCA9PT0gMCkge1xuICAgICAgICAgIHR4ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICAgICAgdHogPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKChzbGlkZUluZGV4IC0gMSkgJSA0ID09PSAwKSB7XG4gICAgICAgICAgdHggPSAwO1xuICAgICAgICAgIHR6ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAyKSAlIDQgPT09IDApIHtcbiAgICAgICAgICB0eCA9IHN3aXBlclNpemUgKyByb3VuZCAqIDQgKiBzd2lwZXJTaXplO1xuICAgICAgICAgIHR6ID0gc3dpcGVyU2l6ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoc2xpZGVJbmRleCAtIDMpICUgNCA9PT0gMCkge1xuICAgICAgICAgIHR4ID0gLXN3aXBlclNpemU7XG4gICAgICAgICAgdHogPSAzICogc3dpcGVyU2l6ZSArIHN3aXBlclNpemUgKiA0ICogcm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgdHggPSAtdHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgIHR5ID0gdHg7XG4gICAgICAgICAgdHggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IFwicm90YXRlWChcIiArIChpc0hvcml6b250YWwgPyAwIDogLXNsaWRlQW5nbGUpICsgXCJkZWcpIHJvdGF0ZVkoXCIgKyAoaXNIb3Jpem9udGFsID8gc2xpZGVBbmdsZSA6IDApICsgXCJkZWcpIHRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgXCIgKyB0eiArIFwicHgpXCI7XG5cbiAgICAgICAgaWYgKHByb2dyZXNzIDw9IDEgJiYgcHJvZ3Jlc3MgPiAtMSkge1xuICAgICAgICAgIHdyYXBwZXJSb3RhdGUgPSBzbGlkZUluZGV4ICogOTAgKyBwcm9ncmVzcyAqIDkwO1xuICAgICAgICAgIGlmIChydGwpIHdyYXBwZXJSb3RhdGUgPSAtc2xpZGVJbmRleCAqIDkwIC0gcHJvZ3Jlc3MgKiA5MDtcbiAgICAgICAgfVxuXG4gICAgICAgICRzbGlkZUVsLnRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2Y
24510XIgc2hhZG93QmVmb3JlID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyIHNoYWRvd0FmdGVyID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuXG4gICAgICAgICAgaWYgKHNoYWRvd0JlZm9yZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNoYWRvd0JlZm9yZSA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICd0b3AnKSArIFwiXFxcIj48L2Rpdj5cIik7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QmVmb3JlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzaGFkb3dBZnRlciA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdyaWdodCcgOiAnYm90dG9tJykgKyBcIlxcXCI+PC9kaXY+XCIpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0FmdGVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCkgc2hhZG93QmVmb3JlWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heCgtcHJvZ3Jlc3MsIDApO1xuICAgICAgICAgIGlmIChzaGFkb3dBZnRlci5sZW5ndGgpIHNoYWRvd0FmdGVyWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heChwcm9ncmVzcywgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHdyYXBwZXJFbC5jc3Moe1xuICAgICAgICAnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luJzogXCI1MCUgNTAlIC1cIiArIHN3aXBlclNpemUgLyAyICsgXCJweFwiLFxuICAgICAgICAnLW1vei10cmFuc2Zvcm0tb3JpZ2luJzogXCI1MCUgNTAlIC1cIiArIHN3aXBlclNpemUgLyAyICsgXCJweFwiLFxuICAgICAgICAnLW1zLXRyYW5zZm9ybS1vcmlnaW4nOiBcIjUwJSA1MCUgLVwiICsgc3dpcGVyU2l6ZSAvIDIgKyBcInB4XCIsXG4gICAgICAgICd0cmFuc2Zvcm0tb3JpZ2luJzogXCI1MCUgNTAlIC1cIiArIHN3aXBlclNpemUgLyAyICsgXCJweFwiXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBhcmFtcy5zaGFkb3cpIHtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoMHB4LCBcIiArIChzd2lwZXJXaWR0aCAvIDIgKyBwYXJhbXMuc2hhZG93T2Zmc2V0KSArIFwicHgsIFwiICsgLXN3aXBlcldpZHRoIC8gMiArIFwicHgpIHJvdGF0ZVgoOTBkZWcpIHJvdGF0ZVooMGRlZykgc2NhbGUoXCIgKyBwYXJhbXMuc2hhZG93U2NhbGUgKyBcIilcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHNoYWRvd0FuZ2xlID0gTWF0aC5hYnMod3JhcHBlclJvdGF0ZSkgLSBNYXRoLmZsb29yKE1hdGguYWJzKHdyYXBwZXJSb3RhdGUpIC8gOTApICogOTA7XG4gICAgICAgICAgdmFyIG11bHRpcGxpZXIgPSAxLjUgLSAoTWF0aC5zaW4oc2hhZG93QW5nbGUgKiAyICogTWF0aC5QSSAvIDM2MCkgLyAyICsgTWF0aC5jb3Moc2hhZG93QW5nbGUgKiAyICogTWF0aC5QSSAvIDM2MCkgLyAyKTtcbiAgICAgICAgICB2Y
24510XIgc2NhbGUxID0gcGFyYW1zLnNoYWRvd1NjYWxlO1xuICAgICAgICAgIHZhciBzY2FsZTIgPSBwYXJhbXMuc2hhZG93U2NhbGUgLyBtdWx0aXBsaWVyO1xuICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMuc2hhZG93T2Zmc2V0O1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKFwic2NhbGUzZChcIiArIHNjYWxlMSArIFwiLCAxLCBcIiArIHNjYWxlMiArIFwiKSB0cmFuc2xhdGUzZCgwcHgsIFwiICsgKHN3aXBlckhlaWdodCAvIDIgKyBvZmZzZXQpICsgXCJweCwgXCIgKyAtc3dpcGVySGVpZ2h0IC8gMiAvIHNjYWxlMiArIFwicHgpIHJvdGF0ZVgoLTkwZGVnKVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgekZhY3RvciA9IGJyb3dzZXIuaXNTYWZhcmkgfHwgYnJvd3Nlci5pc1dlYlZpZXcgPyAtc3dpcGVyU2l6ZSAvIDIgOiAwO1xuICAgICAgJHdyYXBwZXJFbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZCgwcHgsMCxcIiArIHpGYWN0b3IgKyBcInB4KSByb3RhdGVYKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IDAgOiB3cmFwcGVyUm90YXRlKSArIFwiZGVnKSByb3RhdGVZKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IC13cmFwcGVyUm90YXRlIDogMCkgKyBcImRlZylcIik7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsLFxuICAgICAgICAgIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICBzbGlkZXMudHJhbnNpdGlvbihkdXJhdGlvbikuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykudHJhbnNpdGlvbihkdXJhdGlvbik7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3Quc2hhZG93ICYmICFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGVsLmZpbmQoJy5zd2lwZXItY3ViZS1zaGFkb3cnKS50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBFZmZlY3RDdWJlID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtY3ViZScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBjdWJlRWZmZWN0OiB7XG4gICAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgICAgc2hhZG93OiB0cnVlLFxuICAgICAgICBzaGFkb3dPZmZzZXQ6IDIwLFxuICAgICAgICBzaGFkb3dTY2FsZTogMC45NFxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBjdWJlRWZmZWN0OiBfZXh0ZW5kcyh7fSwgQ3ViZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2N1YmUnKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJjdWJlXCIpO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwiM2RcIik7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICByZXNpc3RhbmNlUmF0aW86IDAsXG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICAgICAgICB2aXJ0dWFsVHJhbnNsYXRlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIGV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBleHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjdWJlJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuY3ViZUVmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY3ViZScpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmN1YmVFZmZlY3Quc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBGbGlwID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBwcm9ncmVzcyA9ICRzbGlkZUVsWzBdLnByb2dyZXNzO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZsaXBFZmZlY3QubGltaXRSb3RhdGlvbikge1xuICAgICAgICAgIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oJHNsaWRlRWxbMF0ucHJvZ3Jlc3MsIDEpLCAtMSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICAgIHZhciByb3RhdGUgPSAtMTgwICogcHJvZ3Jlc3M7XG4gICAgICAgIHZhciByb3RhdGVZID0gcm90YXRlO1xuICAgICAgICB2YXIgcm90YXRlWCA9IDA7XG4gICAgICAgIHZhciB0eCA9IC1vZmZzZXQ7XG4gICAgICAgIHZhciB0eSA9IDA7XG5cbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgICByb3RhdGVYID0gLXJvdGF0ZVk7XG4gICAgICAgICAgcm90YXRlWSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAocnRsKSB7XG4gICAgICAgICAgcm90YXRlWSA9IC1yb3RhdGVZO1xuICAgICAgICB9XG5cbiAgICAgICAgJHNsaWRlRWxbMF0uc3R5bGUuekluZGV4ID0gLU1hdGguYWJzKE1hdGgucm91bmQocHJvZ3Jlc3MpKSArIHNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgICAvLyBTZXQgc2hhZG93c1xuICAgICAgICAgIHZhciBzaGFkb3dCZWZvcmUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykgOiAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AnKTtcbiAgICAgICAgICB2Y
24510XIgc2hhZG93QWZ0ZXIgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tJyk7XG5cbiAgICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2hhZG93QmVmb3JlID0gJChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCcpICsgXCJcXFwiPjwvZGl2PlwiKTtcbiAgICAgICAgICAgICRzbGlkZUVsLmFwcGVuZChzaGFkb3dCZWZvcmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaGFkb3dBZnRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNoYWRvd0FmdGVyID0gJChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3JpZ2h0JyA6ICdib3R0b20nKSArIFwiXFxcIj48L2Rpdj5cIik7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QWZ0ZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoKSBzaGFkb3dCZWZvcmVbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KC1wcm9ncmVzcywgMCk7XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCkgc2hhZG93QWZ0ZXJbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KHByb2dyZXNzLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRzbGlkZUVsLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgMHB4KSByb3RhdGVYKFwiICsgcm90YXRlWCArIFwiZGVnKSByb3RhdGVZKFwiICsgcm90YXRlWSArIFwiZGVnKVwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzLnRyYW5zaXRpb24oZHVyYXRpb24pLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlICYmIGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgIHZhciBldmVudFRyaWdnZXJlZCA9IGZhbHNlOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgICAgICBzbGlkZXMuZXEoYWN0aXZlSW5kZXgpLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgICAgIGlmIChldmVudFRyaWdnZXJlZCkgcmV0dXJuO1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjsgLy8gaWYgKCEkKHRoaXMpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykpIHJldHVybjtcblxuICAgICAgICAgIGV2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHRyaWdnZXJFdmVudHMgPSBbJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAndHJhbnNpdGlvbmVuZCddO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyRXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyaWdnZXIodHJpZ2dlckV2ZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBFZmZlY3RGbGlwID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtZmxpcCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmbGlwRWZmZWN0OiB7XG4gICAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgICAgbGltaXRSb3RhdGlvbjogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBmbGlwRWZmZWN0OiBfZXh0ZW5kcyh7fSwgRmxpcClcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJmbGlwXCIpO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwiM2RcIik7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBleHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgICAgZXh0ZW5kKHN3aXBlci5vcmlnaW5hbFBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmxpcCcpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmZsaXBFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5mbGlwRWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgQ292ZXJmbG93ID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgc3dpcGVyV2lkdGggPSBzd2lwZXIud2lkdGgsXG4gICAgICAgICAgc3dpcGVySGVpZ2h0ID0gc3dpcGVyLmhlaWdodCxcbiAgICAgICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzLFxuICAgICAgICAgIHNsaWRlc1NpemVzR3JpZCA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5jb3ZlcmZsb3dFZmZlY3Q7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIHRyYW5zZm9ybSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICB2YXIgY2VudGVyID0gaXNIb3Jpem9udGFsID8gLXRyYW5zZm9ybSArIHN3aXBlcldpZHRoIC8gMiA6IC10cmFuc2Zvcm0gKyBzd2lwZXJIZWlnaHQgLyAyO1xuICAgICAgdmFyIHJvdGF0ZSA9IGlzSG9yaXpvbnRhbCA/IHBhcmFtcy5yb3RhdGUgOiAtcGFyYW1zLnJvdGF0ZTtcbiAgICAgIHZhciB0cmFuc2xhdGUgPSBwYXJhbXMuZGVwdGg7IC8vIEVhY2ggc2xpZGUgb2Zmc2V0IGZyb20gY2VudGVyXG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyICRzbGlkZUVsID0gc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgc2xpZGVTaXplID0gc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2YXIgc2xpZGVPZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIG9mZnNldE11bHRpcGxpZXIgPSAoY2VudGVyIC0gc2xpZGVPZmZzZXQgLSBzbGlkZVNpemUgLyAyKSAvIHNsaWRlU2l6ZSAqIHBhcmFtcy5tb2RpZmllcjtcbiAgICAgICAgdmFyIHJvdGF0ZVkgPSBpc0hvcml6b250YWwgPyByb3RhdGUgKiBvZmZzZXRNdWx0aXBsaWVyIDogMDtcbiAgICAgICAgdmFyIHJvdGF0ZVggPSBpc0hvcml6b250YWwgPyAwIDogcm90YXRlICogb2Zmc2V0TXVsdGlwbGllcjsgLy8gdmFyIHJvdGF0ZVogPSAwXG5cbiAgICAgICAgdmFyIHRyYW5zbGF0ZVogPSAtdHJhbnNsYXRlICogTWF0aC5hYnMob2Zmc2V0TXVsdGlwbGllcik7XG4gICAgICAgIHZhciBzdHJldGNoID0gcGFyYW1zLnN0cmV0Y2g7IC8vIEFsbG93IHBlcmNlbnRhZ2UgdG8gbWFrZSBhIHJlbGF0aXZlIHN0cmV0Y2ggZm9yIHJlc3BvbnNpdmUgc2xpZGVyc1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc3RyZXRjaCA9PT0gJ3N0cmluZycgJiYgc3RyZXRjaC5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgc3RyZXRjaCA9IHBhcnNlRmxvYXQocGFyYW1zLnN0cmV0Y2gpIC8gMTAwICogc2xpZGVTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYW5zbGF0ZVkgPSBpc0hvcml6b250YWwgPyAwIDogc3RyZXRjaCAqIG9mZnNldE11bHRpcGxpZXI7XG4gICAgICAgIHZhciB0cmFuc2xhdGVYID0gaXNIb3Jpem9udGFsID8gc3RyZXRjaCAqIG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgICB2Y
24510XIgc2NhbGUgPSAxIC0gKDEgLSBwYXJhbXMuc2NhbGUpICogTWF0aC5hYnMob2Zmc2V0TXVsdGlwbGllcik7IC8vIEZpeCBmb3IgdWx0cmEgc21hbGwgdmFsdWVzXG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVgpIDwgMC4wMDEpIHRyYW5zbGF0ZVggPSAwO1xuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWSkgPCAwLjAwMSkgdHJhbnNsYXRlWSA9IDA7XG4gICAgICAgIGlmIChNYXRoLmFicyh0cmFuc2xhdGVaKSA8IDAuMDAxKSB0cmFuc2xhdGVaID0gMDtcbiAgICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVkpIDwgMC4wMDEpIHJvdGF0ZVkgPSAwO1xuICAgICAgICBpZiAoTWF0aC5hYnMocm90YXRlWCkgPCAwLjAwMSkgcm90YXRlWCA9IDA7XG4gICAgICAgIGlmIChNYXRoLmFicyhzY2FsZSkgPCAwLjAwMSkgc2NhbGUgPSAwO1xuICAgICAgICB2YXIgc2xpZGVUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKFwiICsgdHJhbnNsYXRlWCArIFwicHgsXCIgKyB0cmFuc2xhdGVZICsgXCJweCxcIiArIHRyYW5zbGF0ZVogKyBcInB4KSAgcm90YXRlWChcIiArIHJvdGF0ZVggKyBcImRlZykgcm90YXRlWShcIiArIHJvdGF0ZVkgKyBcImRlZykgc2NhbGUoXCIgKyBzY2FsZSArIFwiKVwiO1xuICAgICAgICAkc2xpZGVFbC50cmFuc2Zvcm0oc2xpZGVUcmFuc2Zvcm0pO1xuICAgICAgICAkc2xpZGVFbFswXS5zdHlsZS56SW5kZXggPSAtTWF0aC5hYnMoTWF0aC5yb3VuZChvZmZzZXRNdWx0aXBsaWVyKSkgKyAxO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2Y
24510XIgJHNoYWRvd0JlZm9yZUVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyICRzaGFkb3dBZnRlckVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuXG4gICAgICAgICAgaWYgKCRzaGFkb3dCZWZvcmVFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRzaGFkb3dCZWZvcmVFbCA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICd0b3AnKSArIFwiXFxcIj48L2Rpdj5cIik7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoJHNoYWRvd0JlZm9yZUVsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJHNoYWRvd0FmdGVyRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAkc2hhZG93QWZ0ZXJFbCA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdyaWdodCcgOiAnYm90dG9tJykgKyBcIlxcXCI+PC9kaXY+XCIpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKCRzaGFkb3dBZnRlckVsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJHNoYWRvd0JlZm9yZUVsLmxlbmd0aCkgJHNoYWRvd0JlZm9yZUVsWzBdLnN0eWxlLm9wYWNpdHkgPSBvZmZzZXRNdWx0aXBsaWVyID4gMCA/IG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgICAgIGlmICgkc2hhZG93QWZ0ZXJFbC5sZW5ndGgpICRzaGFkb3dBZnRlckVsWzBdLnN0eWxlLm9wYWNpdHkgPSAtb2Zmc2V0TXVsdGlwbGllciA+IDAgPyAtb2Zmc2V0TXVsdGlwbGllciA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLnNsaWRlcy50cmFuc2l0aW9uKGR1cmF0aW9uKS5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKS50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9XG4gIH07XG4gIHZhciBFZmZlY3RDb3ZlcmZsb3cgPSB7XG4gICAgbmFtZTogJ2VmZmVjdC1jb3ZlcmZsb3cnLFxuICAgIHBhcmFtczoge1xuICAgICAgY292ZXJmbG93RWZmZWN0OiB7XG4gICAgICAgIHJvdGF0ZTogNTAsXG4gICAgICAgIHN0cmV0Y2g6IDAsXG4gICAgICAgIGRlcHRoOiAxMDAsXG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBtb2RpZmllcjogMSxcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGNvdmVyZmxvd0VmZmVjdDogX2V4dGVuZHMoe30sIENvdmVyZmxvdylcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcImNvdmVyZmxvd1wiKTtcbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIjNkXCIpO1xuICAgICAgICBzd2lwZXIucGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmNvdmVyZmxvd0VmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY292ZXJmbG93JykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuY292ZXJmbG93RWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgVGh1bWJzID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB0aHVtYnNQYXJhbXMgPSBzd2lwZXIucGFyYW1zLnRodW1icztcbiAgICAgIGlmIChzd2lwZXIudGh1bWJzLmluaXRpYWxpemVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBzd2lwZXIudGh1bWJzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHZhciBTd2lwZXJDbGFzcyA9IHN3aXBlci5jb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKHRodW1ic1BhcmFtcy5zd2lwZXIgaW5zdGFuY2VvZiBTd2lwZXJDbGFzcykge1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlciA9IHRodW1ic1BhcmFtcy5zd2lwZXI7XG4gICAgICAgIGV4dGVuZChzd2lwZXIudGh1bWJzLnN3aXBlci5vcmlnaW5hbFBhcmFtcywge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGV4dGVuZChzd2lwZXIudGh1bWJzLnN3aXBlci5wYXJhbXMsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh0aHVtYnNQYXJhbXMuc3dpcGVyKSkge1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlciA9IG5ldyBTd2lwZXJDbGFzcyhleHRlbmQoe30sIHRodW1ic1BhcmFtcy5zd2lwZXIsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IHRydWUsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZVxuICAgICAgICB9KSk7XG4gICAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyQ3JlYXRlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyLiRlbC5hZGRDbGFzcyhzd2lwZXIucGFyYW1zLnRodW1icy50aHVtYnNDb250YWluZXJDbGFzcyk7XG4gICAgICBzd2lwZXIudGh1bWJzLnN3aXBlci5vbigndGFwJywgc3dpcGVyLnRodW1icy5vblRodW1iQ2xpY2spO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBvblRodW1iQ2xpY2s6IGZ1bmN0aW9uIG9uVGh1bWJDbGljaygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHJldHVybjtcbiAgICAgIHZhciBjbGlja2VkSW5kZXggPSB0aHVtYnNTd2lwZXIuY2xpY2tlZEluZGV4O1xuICAgICAgdmFyIGNsaWNrZWRTbGlkZSA9IHRodW1ic1N3aXBlci5jbGlja2VkU2xpZGU7XG4gICAgICBpZiAoY2xpY2tlZFNsaWRlICYmICQoY2xpY2tlZFNsaWRlKS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnRodW1icy5zbGlkZVRodW1iQWN0aXZlQ2xhc3MpKSByZXR1cm47XG4gICAgICBpZiAodHlwZW9mIGNsaWNrZWRJbmRleCA9PT0gJ3VuZGVmaW5lZCcgfHwgY2xpY2tlZEluZGV4ID09PSBudWxsKSByZXR1cm47XG4gICAgICB2Y
24510XIgc2xpZGVUb0luZGV4O1xuXG4gICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHNsaWRlVG9JbmRleCA9IHBhcnNlSW50KCQodGh1bWJzU3dpcGVyLmNsaWNrZWRTbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xpZGVUb0luZGV4ID0gY2xpY2tlZEluZGV4O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG5cbiAgICAgICAgaWYgKHN3aXBlci5zbGlkZXMuZXEoY3VycmVudEluZGV4KS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICAgICAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcmV2SW5kZXggPSBzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkucHJldkFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZVRvSW5kZXggKyBcIlxcXCJdXCIpLmVxKDApLmluZGV4KCk7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSBzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkubmV4dEFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZVRvSW5kZXggKyBcIlxcXCJdXCIpLmVxKDApLmluZGV4KCk7XG4gICAgICAgIGlmICh0eXBlb2YgcHJldkluZGV4ID09PSAndW5kZWZpbmVkJykgc2xpZGVUb0luZGV4ID0gbmV4dEluZGV4O2Vsc2UgaWYgKHR5cGVvZiBuZXh0SW5kZXggPT09ICd1bmRlZmluZWQnKSBzbGlkZVRvSW5kZXggPSBwcmV2SW5kZXg7ZWxzZSBpZiAobmV4dEluZGV4IC0gY3VycmVudEluZGV4IDwgY3VycmVudEluZGV4IC0gcHJldkluZGV4KSBzbGlkZVRvSW5kZXggPSBuZXh0SW5kZXg7ZWxzZSBzbGlkZVRvSW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShpbml0aWFsKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgIGlmICghdGh1bWJzU3dpcGVyKSByZXR1cm47XG4gICAgICB2YXIgc2xpZGVzUGVyVmlldyA9IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nID8gdGh1bWJzU3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCkgOiB0aHVtYnNTd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICB2YXIgYXV0b1Njcm9sbE9mZnNldCA9IHN3aXBlci5wYXJhbXMudGh1bWJzLmF1dG9TY3JvbGxPZmZzZXQ7XG4gICAgICB2YXIgdXNlT2Zmc2V0ID0gYXV0b1Njcm9sbE9mZnNldCAmJiAhdGh1bWJzU3dpcGVyLnBhcmFtcy5sb29wO1xuXG4gICAgICBpZiAoc3dpcGVyLnJlYWxJbmRleCAhPT0gdGh1bWJzU3dpcGVyLnJlYWxJbmRleCB8fCB1c2VPZmZzZXQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaHVtYnNJbmRleCA9IHRodW1ic1N3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgdmFyIG5ld1RodW1ic0luZGV4O1xuICAgICAgICB2YXIgZGlyZWN0aW9uO1xuXG4gICAgICAgIGlmICh0aHVtYnNTd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLmhhc0NsYXNzKHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgICAgIHRodW1ic1N3aXBlci5sb29wRml4KCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG4gICAgICAgICAgICB0aHVtYnNTd2lwZXIuX2NsaWVudExlZnQgPSB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgICAgICAgICAgY3VycmVudFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgICAgIH0gLy8gRmluZCBhY3R1YWwgdGh1bWJzIGluZGV4IHRvIHNsaWRlIHRvXG5cblxuICAgICAgICAgIHZhciBwcmV2VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRUaHVtYnNJbmRleCkucHJldkFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzd2lwZXIucmVhbEluZGV4ICsgXCJcXFwiXVwiKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICAgIHZhciBuZXh0VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRUaHVtYnNJbmRleCkubmV4dEFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzd2lwZXIucmVhbEluZGV4ICsgXCJcXFwiXVwiKS5lcSgwKS5pbmRleCgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwcmV2VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IHByZXZUaHVtYnNJbmRleDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRUaHVtYnNJbmRleCAtIGN1cnJlbnRUaHVtYnNJbmRleCA9PT0gY3VycmVudFRodW1ic0luZGV4IC0gcHJldlRodW1ic0luZGV4KSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxID8gbmV4dFRodW1ic0luZGV4IDogY3VycmVudFRodW1ic0luZGV4O1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dFRodW1ic0luZGV4IC0gY3VycmVudFRodW1ic0luZGV4IDwgY3VycmVudFRodW1ic0luZGV4IC0gcHJldlRodW1ic0luZGV4KSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBwcmV2VGh1bWJzSW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlyZWN0aW9uID0gc3dpcGVyLmFjdGl2ZUluZGV4ID4gc3dpcGVyLnByZXZpb3VzSW5kZXggPyAnbmV4dCcgOiAncHJldic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBzd2lwZXIucmVhbEluZGV4O1xuICAgICAgICAgIGRpcmVjdGlvbiA9IG5ld1RodW1ic0luZGV4ID4gc3dpcGVyLnByZXZpb3VzSW5kZXggPyAnbmV4dCcgOiAncHJldic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlT2Zmc2V0KSB7XG4gICAgICAgICAgbmV3VGh1bWJzSW5kZXggKz0gZGlyZWN0aW9uID09PSAnbmV4dCcgPyBhdXRvU2Nyb2xsT2Zmc2V0IDogLTEgKiBhdXRvU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRodW1ic1N3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcyAmJiB0aHVtYnNTd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMuaW5kZXhPZihuZXdUaHVtYnNJbmRleCkgPCAwKSB7XG4gICAgICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgICAgIGlmIChuZXdUaHVtYnNJbmRleCA+IGN1cnJlbnRUaHVtYnNJbmRleCkge1xuICAgICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5ld1RodW1ic0luZGV4IC0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBuZXdUaHVtYnNJbmRleCArIE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld1RodW1ic0luZGV4ID4gY3VycmVudFRodW1ic0luZGV4ICYmIHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDEpIDtcblxuICAgICAgICAgIHRodW1ic1N3aXBlci5zbGlkZVRvKG5ld1RodW1ic0luZGV4LCBpbml0aWFsID8gMCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQWN0aXZhdGUgdGh1bWJzXG5cblxuICAgICAgdmFyIHRodW1ic1RvQWN0aXZhdGUgPSAxO1xuICAgICAgdmFyIHRodW1iQWN0aXZlQ2xhc3MgPSBzd2lwZXIucGFyYW1zLnRodW1icy5zbGlkZVRodW1iQWN0aXZlQ2xhc3M7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxICYmICFzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgI
24510HRodW1ic1RvQWN0aXZhdGUgPSBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy50aHVtYnMubXVsdGlwbGVBY3RpdmVUaHVtYnMpIHtcbiAgICAgICAgdGh1bWJzVG9BY3RpdmF0ZSA9IDE7XG4gICAgICB9XG5cbiAgICAgIHRodW1ic1RvQWN0aXZhdGUgPSBNYXRoLmZsb29yKHRodW1ic1RvQWN0aXZhdGUpO1xuICAgICAgdGh1bWJzU3dpcGVyLnNsaWRlcy5yZW1vdmVDbGFzcyh0aHVtYkFjdGl2ZUNsYXNzKTtcblxuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCB8fCB0aHVtYnNTd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgdGh1bWJzU3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aHVtYnNUb0FjdGl2YXRlOyBpICs9IDEpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyAoc3dpcGVyLnJlYWxJbmRleCArIGkpICsgXCJcXFwiXVwiKS5hZGRDbGFzcyh0aHVtYkFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRodW1ic1RvQWN0aXZhdGU7IF9pICs9IDEpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5yZWFsSW5kZXggKyBfaSkuYWRkQ2xhc3ModGh1bWJBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBUaHVtYnMkMSA9IHtcbiAgICBuYW1lOiAndGh1bWJzJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHRodW1iczoge1xuICAgICAgICBzd2lwZXI6IG51bGwsXG4gICAgICAgIG11bHRpcGxlQWN0aXZlVGh1bWJzOiB0cnVlLFxuICAgICAgICBhdXRvU2Nyb2xsT2Zmc2V0OiAwLFxuICAgICAgICBzbGlkZVRodW1iQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdGh1bWItYWN0aXZlJyxcbiAgICAgICAgdGh1bWJzQ29udGFpbmVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLXRodW1icydcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgdGh1bWJzOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZVxuICAgICAgICB9LCBUaHVtYnMpXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICB2Y
24510XIgdGh1bWJzID0gc3dpcGVyLnBhcmFtcy50aHVtYnM7XG4gICAgICAgIGlmICghdGh1bWJzIHx8ICF0aHVtYnMuc3dpcGVyKSByZXR1cm47XG4gICAgICAgIHN3aXBlci50aHVtYnMuaW5pdCgpO1xuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBzbGlkZUNoYW5nZTogZnVuY3Rpb24gc2xpZGVDaGFuZ2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnRodW1icy5zd2lwZXIpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIudGh1bWJzLnN3aXBlcikgcmV0dXJuO1xuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSByZXR1cm47XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgb2JzZXJ2ZXJVcGRhdGU6IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSByZXR1cm47XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHJldHVybjtcbiAgICAgICAgdGh1bWJzU3dpcGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICAgIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHJldHVybjtcblxuICAgICAgICBpZiAoc3dpcGVyLnRodW1icy5zd2lwZXJDcmVhdGVkICYmIHRodW1ic1N3aXBlcikge1xuICAgICAgICAgIHRodW1ic1N3aXBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gU3dpcGVyIENsYXNzXG4gIHZhciBjb21wb25lbnRzID0gW1ZpcnR1YWwkMSwgS2V5Ym9hcmQkMSwgTW91c2V3aGVlbCQxLCBOYXZpZ2F0aW9uJDEsIFBhZ2luYXRpb24kMSwgU2Nyb2xsYmFyJDEsIFBhcmFsbGF4JDEsIFpvb20kMSwgTGF6eSQxLCBDb250cm9sbGVyJDEsIEExMXkkMSwgSGlzdG9yeSQxLCBIYXNoTmF2aWdhdGlvbiQxLCBBdXRvcGxheSQxLCBFZmZlY3RGYWRlLCBFZmZlY3RDdWJlLCBFZmZlY3RGbGlwLCBFZmZlY3RDb3ZlcmZsb3csIFRodW1icyQxXTtcbiAgU3dpcGVyLnVzZShjb21wb25lbnRzKTtcblxuICByZXR1cm4gU3dpcGVyO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpcGVyLWJ1bmRsZS5qcy5tYXAiLCIvKipcbiAqIHdlYmNhbSB3aXRoIHByb2dyZXNzYmFyIGFuZCBhcmlhLVN1cHBvcnRcbiAqIFVtc2V0enVuZzogRGFubnkgT3R0byBmw7xyIGFuYXRvbTVcbiAqIGluc3BpcmVkIGJ5IGh0dHA6Ly9hY2Nlc3MuYW9sLmNvbS9hZWdpcy8jZ290b19wcm9ncmVzc2JhclxuICpcbiAqIFZlcnNpb246IDJcbiAqL1xuXG5jbGFzcyB3ZWJjYW0ge1xuXG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yLHNldHRpbmdzID0ge30pIHtcblxuICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICAndGltZW91dCcgOiAyMCxcbiAgICAgICdwcm9ncmVzc2JhclZpc2libGVUaW1lJyA6IDEwLFxuICAgICAgJ3ByZWZpeCcgOiAnd2ViY2FtJ1xuICAgIH07XG5cbiAgICAvLyBDb25maWcgZXJzdGVsbGVuXG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMuZGVmYXVsdHMsc2V0dGluZ3MpO1xuXG4gICAgLy8gYWxsZSBXZWJjYW1zIGZpbmRlblxuICAgIGxldCB3ZWJjYW1JdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgXG4gICAgLy8gRnVua3Rpb25lbiBhdWYgYWxsZSBXZWJjYW1zIGFud2VuZGVuXG4gICAgZm9yKCBpbmRleD0wOyBpbmRleCA8IHdlYmNhbUl0ZW1zLmxlbmd0aDsgaW5kZXgrKyApIHtcbiAgICAgIHRoaXMucnVuKHdlYmNhbUl0ZW1zW2luZGV4XSxpbmRleCk7XG4gICAgfVxuXG4gIH1cblxuICBydW4gKGNvbnRhaW5lcixudW0pIHtcblxuICAgIGxldCB3ZWJjYW0gPSB7fTtcblxuICAgIHdlYmNhbS5sYWJlbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcud2ViY2FtLWxhYmVsJyk7XG4gICAgd2ViY2FtLmxhYmVsLmlubmVyVGV4dCA9IHdlYmNhbS5sYWJlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGl0bGUnKTtcbiAgICB3ZWJjYW0udW5pdCA9IHdlYmNhbS5sYWJlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdW5pdCcpO1xuICAgIHdlYmNhbS5pbWFnZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcud2ViY2FtLWltYWdlJyk7XG4gICAgd2ViY2FtLmltYWdlc3JjID0gd2ViY2FtLmltYWdlLmdldEF0dHJpYnV0ZSgnc3JjJyk7XG5cbiAgICAvLyBIVE1MIGbDvHIgUHJvZ3Jlc3NiYXIgZXJ6ZXVnZW5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsdGhpcy5jb25maWcucHJlZml4ICsgJy1wcm9ncmVzc2Jhci1jb250YWluZXInKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQod2ViY2FtLnByb2dyZXNzYmFyQ29udGFpbmVyKTtcblxuICAgIHdlYmNhbS5wcm9ncmVzc2JhcldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJXcmFwcGVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLHRoaXMuY29uZmlnLnByZWZpeCArICctcHJvZ3Jlc3NiYXInKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2ViY2FtLnByb2dyZXNzYmFyV3JhcHBlcik7XG5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcm9ncmVzcycpO1xuICAgIHdlYmNhbS5wcm9ncmVzc2Jhci5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgMCk7XG4gICAgd2ViY2FtLnByb2dyZXNzYmFyLnNldEF0dHJpYnV0ZSgnbWF4JywgMTAwKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJXcmFwcGVyLmFwcGVuZENoaWxkKHdlYmNhbS5wcm9ncmVzc2Jhcik7XG5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJUaW1lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHdlYmNhbS5wcm9ncmVzc2JhclRpbWVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLHRoaXMuY29uZmlnLnByZWZpeCArICctcHJvZ3Jlc3NiYXItdGltZXInKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2ViY2FtLnByb2dyZXNzYmFyVGltZXIpO1xuXG4gICAgLy8gSUQncyBhbmbDvGdlblxuICAgI
24510HdlYmNhbS5sYWJlbC5pZCA9IHRoaXMuY29uZmlnLnByZWZpeCArICctbGFiZWwnICsgbnVtO1xuICAgIHdlYmNhbS5pbWFnZS5pZCA9IHRoaXMuY29uZmlnLnByZWZpeCArICctaW1hZ2UnICsgbnVtO1xuICAgIHdlYmNhbS5wcm9ncmVzc2Jhci5pZCA9IHRoaXMuY29uZmlnLnByZWZpeCArICctcHJvZ3Jlc3NiYXInICsgbnVtO1xuICAgIHdlYmNhbS5wcm9ncmVzc2JhclRpbWVyLmlkID0gdGhpcy5jb25maWcucHJlZml4ICsgJy1wcm9ncmVzc2Jhci10aW1lcicgKyBudW07XG5cbiAgICAvLyBBcmlhXG4gICAgd2ViY2FtLmxhYmVsLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgIHdlYmNhbS5pbWFnZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIHdlYmNhbS5wcm9ncmVzc2Jhci5pZCArICcgJyArIHdlYmNhbS5wcm9ncmVzc2JhclRpbWVyLmlkKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXIuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWluJywgMCk7XG5cbiAgICAvLyBDb3VudGVyIHN0YXJ0ZW5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXIuc2V0QXR0cmlidXRlKCdkYXRhLWhpZGRlbicsJ3RydWUnKTtcbiAgICB0aGlzLmNvdW50ZXIod2ViY2FtKTtcblxuICB9XG5cbiAgLy8gQmlsZCBha3R1YWxpc2llcmVuXG4gIHJlbG9hZEltYWdlICh3ZWJjYW0pIHtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIHdlYmNhbS5pbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHdlYmNhbS5pbWFnZXNyYyArICc/JyArIHRpbWVzdGFtcCk7XG4gIH1cblxuICAvLyBVcGRhdGUgZGVyIFByb2dyZXNzYmFyXG4gIHVwZGF0ZVByb2dyZXNzYmFyIChjb3VudGVyLHdlYmNhbSkge1xuICAgIGxldCBwZXJjZW50ID0gY291bnRlciAqIDEwMCAvIHRoaXMuY29uZmlnLnByb2dyZXNzYmFyVmlzaWJsZVRpbWU7XG4gICAgd2ViY2FtLnByb2dyZXNzYmFyLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAxMDAgLSBwZXJjZW50ICk7XG4gIH1cblxuICAvLyBDb3VudGVyXG4gIGNvdW50ZXIgKHdlYmNhbSkge1xuXG4gICAgbGV0IHQgPSB0aGlzO1xuICAgIHZhciBwcmVjaXNpb24gPSAyNTtcbiAgICB2YXIgY291bnRlciA9IHQuY29uZmlnLnRpbWVvdXQ7XG4gICAgdmFyIHByb2dyZXNzSXNWaXNpYmxlID0gZmFsc2U7XG5cbiAgICB2YXIgY291bnRlckludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtcblxuICAgICAgLy8gUHJvZ3Jlc3NiYXIgYW56ZWlnZW5cbiAgICAgIGlmICggY291bnRlciA8PSB0LmNvbmZpZy5wcm9ncmVzc2JhclZpc2libGVUaW1lICYmICFwcm9ncmVzc0lzVmlzaWJsZSApIHtcbiAgICAgICAgd2ViY2FtLnByb2dyZXNzYmFyLnNldEF0dHJpYnV0ZSgnZGF0YS1oaWRkZW4nLCdmYWxzZScpO1xuICAgICAgICBwcm9ncmVzc0lzVmlzaWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2dyZXNzYmFyIGFrdHVhbGlzaWVyZW5cbiAgICAgIGlmICggY291bnRlciA8PSB0LmNvbmZpZy5wcm9ncmVzc2JhclZpc2libGVUaW1lICkge1xuICAgICAgICB0LnVwZGF0ZVByb2dyZXNzYmFyKGNvdW50ZXIsd2ViY2FtKTtcbiAgICAgIH1cblxuICAgICAgLy8gQW56ZWlnZSBha3R1YWxpc2llcmVuXG4gICAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJUaW1lci5pbm5lclRleHQgPSBNYXRoLmNlaWwoY291bnRlcikgKyAnICcgKyB3ZWJjYW0udW5pdDtcblxuICAgICAgLy8gUmVzdGFydFxuICAgICAgaWYgKGNvdW50ZXIgPD0gMCkge1xuICAgICAgICBcbiAgICAgICAgLy8gQ291bnRlciB6dXLDvGNrc2V0emVuXG4gICAgICAgIGNvdW50ZXIgPSB0LmNvbmZpZy50aW1lb3V0O1xuICAgICAgICBcbiAgICAgICAgLy8gQmlsZCBuZXVsYWRlblxuICAgICAgICB0LnJlbG9hZEltYWdlKHdlYmNhbSk7XG4gICAgICAgIFxuICAgICAgICAvLyBQcm9ncmVzc2JhciBhdXNibGVuZGVuXG4gICAgICAgIHdlYmNhbS5wcm9ncmVzc2Jhci5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGlkZGVuJywndHJ1ZScpO1xuICAgICAgICBwcm9ncmVzc0lzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3VudGVyIHZlcnJpbmdlcm5cbiAgICAgIGNvdW50ZXIgPSBjb3VudGVyIC0gKDEgLyBwcmVjaXNpb24pO1xuXG4gICAgfSwgMTAwMCAvIHByZWNpc2lvbik7XG5cbiAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdlYmNhbTtcblxuXG4iLCJyZWFkeShmdW5jdGlvbigpIHtcblxuICAvLyBGb3JtdWxhci1JbmZvYnV0dG9uXG4gIGxldCBpbmZvQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LWluZm8tYnV0dG9uJyk7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCBpbmZvQnV0dG9uLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpbmZvQnV0dG9uW2ldLnBhcmVudE5vZGUuY2xhc3NMaXN0LmFkZCgnaGFzLWluZm8tYnV0dG9uJyk7XG5cbiAgICBsZXQgaW5mb0J0biA9IG5ldyBweEVhc3lFeHBhbmQoaW5mb0J1dHRvbltpXSx7XG4gICAgICBjbG9zZVdpdGhFc2MgOiBmYWxzZSxcbiAgICAgIGFkZENsb3NlQnV0dG9uIDogZmFsc2UsXG4gICAgICBrZWVwRm9jdXNJblRhcmdldEVsZW1lbnQgOiBmYWxzZVxuICAgIH0pO1xuXG4gIH1cblxufSk7IiwicmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgLy8gSGFtYnVyZ2VyXG4gIGNvbnN0IGhhbWJ1cmdlciA9IG5ldyBweEVhc3lFeHBhbmQoJyNoYW1idXJnZXInLHtcbiAgICBjbG9zZVdpdGhFc2MgOiB0cnVlLFxuICAgIHNldFJvb3RDbGFzcyA6ICdvZmZjYW52YXMtdmlzaWJsZScsXG4gICAgYWRkQ2xvc2VCdXR0b24gOiB0cnVlLFxuICAgIHNldEZvY3VzVG9FbGVtZW50OiAnLmpzLWNsb3NlJyxcbiAgICBrZWVwRm9jdXNJblRhcmdldEVsZW1lbnQgOiB0cnVlLFxuICAgIGhpZGRlbldoZW5PcGVuOiAnLnBhZ2UnXG4gIH0pO1xuXG59KTsiLCJpbXBvcnQgR0xpZ2h0Ym94IGZyb20gJy4uL21vZHVsZXMvZ2xpZ2h0Ym94LmpzJztcbnJlYWR5KGZ1bmN0aW9uKCkge1xuXG5cbiAgLy8gTGlnaHRib3hncnVwcGVuIGZpbmRlbiB1bmQgTGlnaHRib3ggYW5iaW5kZW5cbiAgbGV0IGxpZ2h0Ym94SW5zdGFuY2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LXRleHQtaW1hZ2UgZmlndXJlLCAuYTUtaW1hZ2UgZmlndXJlLCAuYTUtaW1hZ2UtZ2FsbGVyeScpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpZ2h0Ym94SW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBsZXQgbGlnaHRib3hMaW5rcyA9IGxpZ2h0Ym94SW5zdGFuY2VzW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbZGF0YS1saWdodGJveF0nKTtcbiAgICBpZiAobGlnaHRib3hMaW5rcy5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpZ2h0Ym94TGlua3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSB3aW5kb3cubGlnaHRib3guY291bnRUZXh0O1xuICAgICAgICBjb3VudGVyID0gY291bnRlci5yZXBsYWNlKC97Q1VSfS9nLGogKyAxKTtcbiAgICAgICAgY291bnRlciA9IGNvdW50ZXIucmVwbGFjZSgve1NVTX0vZyxsaWdodGJveExpbmtzLmxlbmd0aCk7XG4gICAgICAgIGxpZ2h0Ym94TGlua3Nbal0uc2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlJyxjb3VudGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsaWdodGJveEluc3RhbmNlc1tpXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGlnaHRib3gtZ3JvdXAnLGkpO1xuICAgIGluaXRMaWdodGJveCgnW2RhdGEtbGlnaHRib3gtZ3JvdXA9XCInICsgaSArICdcIl0gYVtkYXRhLWxpZ2h0Ym94XScpOyAgICBcblxuICB9XG5cblxuICBmdW5jdGlvbiBpbml0TGlnaHRib3goc2VsZWN0b3IpIHtcblxuICAgIGNvbnN0IGxpZ2h0Ym94SFRNTCA9ICc8ZGl2IGlkPVwiZ2xpZ2h0Ym94LWJvZHlcIiBjbGFzcz1cImdsaWdodGJveC1jb250YWluZXJcIiBhcmlhLWxhYmVsPVwiJyArIHdpbmRvdy5saWdodGJveC5hcmlhTGFiZWwgKyAnXCI+PGRpdiBjbGFzcz1cImdsb2FkZXIgdmlzaWJsZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJnb3ZlcmxheVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJnY29udGFpbmVyXCI+PGRpdiBpZD1cImdsaWdodGJveC1zbGlkZXJcIiBjbGFzcz1cImdzbGlkZXJcIj48L2Rpdj48YnV0dG9uIGNsYXNzPVwiZ3ByZXYgZ2J0blwiIGFyaWEtbGFiZWw9XCInICsgd2luZG93LmxpZ2h0Ym94LnByZXZUZXh0ICsgJ1wiPntwcmV2U1ZHfTwvYnV0dG9uPjxidXR0b24gY2xhc3M9XCJnbmV4dCBnYnRuXCIgYXJpYS1sYWJlbD1cIicgKyB3aW5kb3cubGlnaHRib3gubmV4dFRleHQgKyAnXCI+e25leHRTVkd9PC9idXR0b24+J1xuICAgICAgICAgICAgICAgICAgICAgICArICc8ZGV0YWlscyBpZD1cImdTaGFyZVwiIGNsYXNzPVwiZ3NoYXJlXCIgZGF0YS1oaWRkZW49XCJ0cnVlXCI+PHN1bW1hcnkgdGl0bGU9XCInICsgd2luZG93LmxpZ2h0Ym94LnNoYXJlVGl0bGUgKyAnXCI+JyArIHdpbmRvdy5saWdodGJveC5zaGFyZVN2ZyArICc8c3B
24510hbj4nICsgd2luZG93LmxpZ2h0Ym94LnNoYXJlSGlkZGVuVGV4dCArICc8L3NwYW4+PC9zdW1tYXJ5Pjx1bD48L3VsPjwvZGV0YWlscz4nXG4gICAgICAgICAgICAgICAgICAgICAgICsgJzxidXR0b24gY2xhc3M9XCJnY2xvc2UgZ2J0blwiIGFyaWEtbGFiZWw9XCInICsgd2luZG93LmxpZ2h0Ym94LmNsb3NlVGV4dCArICdcIj57Y2xvc2VTVkd9PC9idXR0b24+PC9kaXY+PC9kaXY+JztcblxuICAgIGNvbnN0IGxpZ2h0Ym94U2xpZGVIVE1MID0gJzxkaXYgY2xhc3M9XCJnc2xpZGVcIj48ZGl2IGNsYXNzPVwiZ3NsaWRlLWlubmVyLWNvbnRlbnRcIj48ZGl2IGNsYXNzPVwiZ2lubmVyLWNvbnRhaW5lclwiPjxkaXYgY2xhc3M9XCJnc2xpZGUtbWVkaWFcIj48L2Rpdj48ZGl2IGNsYXNzPVwiZ3NsaWRlLWRlc2NyaXB0aW9uXCI+PGRpdiBjbGFzcz1cImdkZXNjLWlubmVyXCI+PHN0cm9uZyBjbGFzcz1cImdzbGlkZS10aXRsZVwiPjwvc3Ryb25nPjxwIGNsYXNzPVwiZ3NsaWRlLWRlc2NcIj48L3A+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JztcblxuICAgIGNvbnN0IGxpZ2h0Ym94ID0gR0xpZ2h0Ym94KHtcbiAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlLFxuICAgICAgbGlnaHRib3hIVE1MOiBsaWdodGJveEhUTUwsXG4gICAgICBzbGlkZUhUTUw6IGxpZ2h0Ym94U2xpZGVIVE1MLFxuICAgICAgdG91Y2hOYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgbW9yZUxlbmd0aDogMCxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICB6b29tYWJsZTogZmFsc2UsXG4gICAgICBzdmc6IHtcbiAgICAgICAgY2xvc2U6IHdpbmRvdy5saWdodGJveC5jbG9zZVN2ZyxcbiAgICAgICAgbmV4dDogd2luZG93LmxpZ2h0Ym94Lm5leHRTdmcsXG4gICAgICAgIHByZXY6IHdpbmRvdy5saWdodGJveC5wcmV2U3ZnXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgZm9jdXNhYmxlRWxlbWVudHMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCkge1xuXG4gICAgICBsZXQgZWxlbWVudHMgPSBsaWdodGJveC5tb2RhbC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b246bm90KC5kaXNhYmxlZCksIHN1bW1hcnksIGRldGFpbHNbb3Blbl0gYScpO1xuXG4gICAgICBmb2N1c2FibGVFbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRzKS5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICBjaGlsZC5vZmZzZXRXaWR0aCB8fFxuICAgICAgICAgIGNoaWxkLm9mZnNldEhlaWdodCB8fFxuICAgICAgICAgIGNoaWxkLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcblxuICAgICAgaWYgKGV2ZW50LndoaWNoID09PSA5KSB7XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBsZXQgaW5kZXggPSBmb2N1c2FibGVFbGVtZW50cy5pbmRleE9mKGV2ZW50LnRhcmdldCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICgoaW5kZXggKyAxKSA9PSBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzW2luZGV4ICsgMV0uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzW2luZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfTtcblxuICAgIGxpZ2h0Ym94Lm9uKCdvcGVuJywgKCkgPT4ge1xuXG4gICAgICAvLyBGb2N1cyBhdWYgZGVuIE5leHQtQnV0dG9uIG9kZXIgYWx0ZXJuYXRpdiBhdWYgZGVuIFNjaGxpZcOfZW4tQnV0dG9uXG4gICAgICBpZiAoICFsaWdodGJveC5uZXh0QnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSApIHtcbiAgICAgICAgbGlnaHRib3gubmV4dEJ1dHRvbi5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlnaHRib3gubW9kYWwucXVlcnlTZWxlY3RvcignLmdjbG9zZScpLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZvcmJlcmVpdHVuZyBTcHJhY2hhdXNnYWJlXG4gICAgICBsaWdodGJveC5weFN0YXR1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgIGxpZ2h0Ym94LnB4U3RhdHVzLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywncG9saXRlJyk7XG4gICAgICBsaWdodGJveC5tb2RhbC5hcHBlbmRDaGlsZChsaWdodGJveC5weFN0YXR1cyk7XG5cbiAgICAgIC8vIFZvcmJlcmVpdHVuZyBTaGFyZS1CdXR0b25cbiAgICAgIGxpZ2h0Ym94LnB4U2hhcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ1NoYXJlJyk7XG4gICAgICBsaWdodGJveC5weFNoYXJlVUwgPSBsaWdodGJveC5weFNoYXJlLnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh3aW5kb3cubGlnaHRib3guc2hhcmVOZXR3b3JrcykpIHtcbiAgICAgICAgbGV0IHB4U2hhcmVJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgICAgcHhTaGFyZUl0ZW0uaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgICAgIGxpZ2h0Ym94LnB4U2hhcmVVTC5hcHBlbmRDaGlsZChweFNoYXJlSXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgICBkb2
24510N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlRm9jdXMsIGZhbHNlKTtcblxuICAgIH0pO1xuXG4gICAgbGlnaHRib3gub24oJ3NsaWRlX2NoYW5nZWQnLCh7cHJldixjdXJyZW50fSkgPT4ge1xuXG4gICAgICAvLyBhcmlhLWxhYmVsbGVkYnkgYW0gQmlsZCBlbnRmZXJuZW4sIGZhbGxzIHZvcmhhbmRlblxuICAgICAgbGV0IGhhc0FyaWFMYWJlbGxlZGJ5ID0gbGlnaHRib3gubW9kYWwucXVlcnlTZWxlY3RvcignW2FyaWEtbGFiZWxsZWRieV0nKTtcbiAgICAgIGlmICh0eXBlb2YoaGFzQXJpYUxhYmVsbGVkYnkpICE9ICd1bmRlZmluZWQnICYmIGhhc0FyaWFMYWJlbGxlZGJ5ICE9IG51bGwpIHtcbiAgICAgICAgaGFzQXJpYUxhYmVsbGVkYnkucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKVxuICAgICAgfVxuXG4gICAgICAvLyBDb3VudGVyIGF1ZmJlcmVpdGVuXG4gICAgICAvLyBsZXQgY291bnRlciA9IHdpbmRvdy5saWdodGJveC5jb3VudFRleHQ7XG4gICAgICAvLyBjb3VudGVyID0gY291bnRlci5yZXBsYWNlKC97Q1VSfS9nLGN1cnJlbnQuaW5kZXggKyAxKTtcbiAgICAgIC8vIGNvdW50ZXIgPSBjb3VudGVyLnJlcGxhY2UoL3tTVU19L2csbGlnaHRib3guZWxlbWVudHMubGVuZ3RoKTtcblxuICAgICAgLy8gU3ByYWNoYXVzZ2FiZVxuICAgICAgbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MID0gJyc7XG4gICAgICBpZiAoIGN1cnJlbnQudHJpZ2dlci5oYXNBdHRyaWJ1dGUoJ2RhdGEtdGl0bGUnKSApIHtcbiAgICAgICAgbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MID0gbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MICsgJyAnICsgY3VycmVudC50cmlnZ2VyLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCBjdXJyZW50LnRyaWdnZXIuaGFzQXR0cmlidXRlKCdkYXRhLWRlc2NyaXB0aW9uJykgKSB7XG4gICAgICAgIGxpZ2h0Ym94LnB4U3RhdHVzLmlubmVySFRNTCA9IGxpZ2h0Ym94LnB4U3RhdHVzLmlubmVySFRNTCArICcgJyArIGN1cnJlbnQudHJpZ2dlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVzY3JpcHRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmICggY3VycmVudC50cmlnZ2VyLmhhc0F0dHJpYnV0ZSgnZGF0YS1hbHQnKSApIHtcbiAgICAgICAgbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MID0gbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MICsgJyAnICsgY3VycmVudC50cmlnZ2VyLmdldEF0dHJpYnV0ZSgnZGF0YS1hbHQnKTtcbiAgICAgIH1cbiAgICBcbiAgICAgIC8vIGFrdGl2ZXMgRWxlbWVudCB6dW0gc2V0emVuIGRlcyBGb2N1cyBuYWNoIGRlbSBTY2hsaWXDn2VuIHNwZWljaGVyblxuICAgICAgbGlnaHRib3gubGFzdFRpZ2dlciA9IGN1cnJlbnQudHJpZ2dlcjtcblxuICAgICAgLy8gU2hhcmUtTGlua3MgYXVzYmxlbmRlbj8gQWx0ZXJuYXRpdiBVUkwgaW4gU2hhcmUtTGlua3MgYW5wYXNzZW5cbiAgICAgIGlmKHR5cGVvZihsaWdodGJveC5weFNoYXJlKSAhPSAndW5kZWZpbmVkJyAmJiBsaWdodGJveC5weFNoYXJlICE9IG51bGwpIHtcblxuICAgICAgICBpZiAoY3VycmVudC50cmlnZ2VyLmhhc0F0dHJpYnV0ZSgnZGF0YS1zaGFyZS11cmwnKSkge1xuICAgICAgICAgIGxldCBzaGFyZUVsZW1lbnRzID0gbGlnaHRib3gucHhTaGFyZS5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFyZUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaHJlZiA9IHNoYXJlRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWhyZWYnKTtcbiAgICAgICAgICAgIGxldCBpbWFnZVVSTCA9IGN1cnJlbnQudHJpZ2dlci5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICAgIHNoYXJlRWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZi5yZXBsYWNlKC97SU1BR0V9L2csaW1hZ2VVUkwpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGlnaHRib3gucHhTaGFyZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGlkZGVuJywnZmFsc2UnKTtcbiAgICAgICAgICBsaWdodGJveC5weFNoYXJlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlnaHRib3gucHhTaGFyZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGlkZGVuJywndHJ1ZScpO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgdXBkYXRlRm9jdXNhYmxlRWxlbWVudHMoKTtcblxuICAgIH0pO1xuXG4gICAgbGlnaHRib3gub24oJ2Nsb3NlJywoKSA9PiB7XG4gICAgICBsaWdodGJveC5sYXN0VGlnZ2VyLmZvY3VzKCk7XG4gICAgICBkb2
24510N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlRm9jdXMpO1xuICAgIH0pO1xuXG4gIH1cblxuXG59KTtcblxuXG4iLCJyZWFkeShmdW5jdGlvbigpIHtcblxuICBpZiAoIHdpbmRvdy5pbm5lcldpZHRoIDwgNzYwICkge1xuXG4gICAgLy8gS2xhcHBlbGVtZW50ZSBpbSBGb290ZXJcbiAgICBsZXQgZm9vdGVyVG9nZ2xlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5hdi1tZXRhJyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvb3RlclRvZ2dsZUNvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuXG4gICAgICBsZXQgdG9nZ2xlV3JhcHBlciA9IGZvb3RlclRvZ2dsZUNvbnRhaW5lcltpXTtcbiAgICAgIGxldCB0b2dnbGVUYXJnZXQgPSB0b2dnbGVXcmFwcGVyLmNoaWxkcmVuWzBdO1xuXG4gICAgICB0b2dnbGVUYXJnZXQuc2V0QXR0cmlidXRlKCdpZCcsICdmb290ZXItdG9nZ2xlLScgKyBpKTtcblxuICAgICAgdG9nZ2xlV3JhcHBlci5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyYmVnaW4nLCAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJmb290ZXItdG9nZ2xlLWJ1dHRvbi0nICsgaSArICdcIj4nICsgdG9nZ2xlV3JhcHBlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGV4dC1vcGVuJykgKyAnPC9idXR0b24+Jyk7XG5cbiAgICAgIGxldCBlYXN5ZXhwYW5kID0gbmV3IHB4RWFzeUV4cGFuZCgnZm9vdGVyLXRvZ2dsZS1idXR0b24tJyArIGkse1xuICAgICAgICBjbG9zZVdpdGhFc2M6IGZhbHNlLFxuICAgICAgICBzd2l0Y2hCdXR0b25IdG1sOiB0cnVlLFxuICAgICAgICBoaWRkZW5BdHRyaWJ1dGU6ICdkYXRhLWhpZGRlbidcbiAgICAgIH0se1xuICAgICAgICBsYWJlbE9wZW46IHRvZ2dsZVdyYXBwZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWxhYmVsLW9wZW4nKSxcbiAgICAgICAgbGFiZWxDbG9zZTogdG9nZ2xlV3JhcHBlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtY2xvc2UnKSxcbiAgICAgICAgdGV4dE9wZW46IHRvZ2dsZVdyYXBwZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRleHQtb3BlbicpLFxuICAgICAgICB0ZXh0Q2xvc2U6IHRvZ2dsZVdyYXBwZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRleHQtY2xvc2UnKSxcbiAgICAgICAgY29udHJvbHM6ICdmb290ZXItdG9nZ2xlLScgKyBpXG4gICAgICB9KTtcblxuICAgICAgZWFzeWV4cGFuZC5mdW5jdGlvbnMuYWZ0ZXJUb2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc29sZS5sb2codG9nZ2xlVGFyZ2V0KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG9nZ2xlVGFyZ2V0LnNjcm9sbEludG9WaWV3KHRydWUpOyB9LCAyMDApO1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxufSk7IiwicmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgLy8gSGF1cHRuYXZpZ2F0aW9uIGFscyBPdmVybGF5XG4gIGxldCBtbWVudUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21tZW51Jyk7XG5cbiAgaWYgKHR5cGVvZihtbWVudUVsKSAhPSAndW5kZWZpbmVkJyAmJiBtbWVudUVsICE9IG51bGwpIHtcblxuICAgIC8vIEhhdXB0bmF2aWdhdGlvblxuICAgIGxldCBtbWVudVN0cm9uZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtbWVudSBzdHJvbmdbYXJpYS1jdXJyZW50XScpO1xuICAgIGlmIChtbWVudVN0cm9uZykge1xuICAgICAgbGV0IG1tZW51U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIG1tZW51U3Bhbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsJ3BhZ2UnKTtcbiAgICAgIG1tZW51U3Bhbi5pbm5lckhUTUwgPSBtbWVudVN0cm9uZy5pbm5lckhUTUw7XG4gICAgICBtbWVudVN0cm9uZy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChtbWVudVNwYW4sIG1tZW51U3Ryb25nKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IG1tZW51ID0gbmV3IE1tZW51KCcjbW1lbnUnLHtcbiAgICAgICdvZmZDYW52YXMnIDogZmFsc2UsXG4gICAgICAnbmF2YmFycycgOiBbe1xuICAgICAgICAncG9zaXRpb24nIDogJ3RvcCcsXG4gICAgICAgICdjb250ZW50JyA6IFsndGl0bGUnLCdwcmV2J11cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgICduYXZiYXInIDoge1xuICAgICAgICAndGl0bGUnIDogbW1lbnVFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKVxuICAgICAgfSxcbiAgICAgICdrZXlib2FyZE5hdmlnYXRpb24nIDoge1xuICAgICAgICAnZW5hYmxlJyA6IGZhbHNlLFxuICAgICAgICAnZW5oYW5jZScgOiBmYWxzZVxuICAgICAgfSxcbiAgICAgICdzY3JlZW5SZWFkZXInIDogZmFsc2UsXG4gICAgICAnaG9va3MnIDoge1xuICAgICAgICAnb3BlblBhbmVsOmZpbmlzaCcgOiAocGFuZWwpID0+IHtcbiAgICAgICAgICBsZXQgbW1UaXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtbWVudSAubW0tbmF2YmFyc190b3AgYS5tbS1uYXZiYXJfX3RpdGxlW2hyZWZdJyk7XG4gICAgICAgICAgaWYgKG1tVGl0bGUpIHtcblxuICAgICAgICAgICAgbGV0IGlzQmFja2xpbmsgPSBtbVRpdGxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4uYmFja2xpbmsnKTtcbiAgICAgICAgICAgIGlmIChpc0JhY2tsaW5rLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgbGV0IGJhY2tUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgYmFja1RpdGxlLmNsYXNzTGlzdC5hZGQoJ2JhY2tsaW5rJyk7XG4gICAgICAgICAgICAgIGJhY2tUaXRsZS5pbm5lckhUTUwgPSBtbWVudUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1iYWNrJyk7XG4gICAgICAgICAgICAgIG1tVGl0bGUucHJlcGVuZChiYWNrVGl0bGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtbVRpdGxlLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICAgIG1tVGl0bGUuc2V0QXR0cmlidXRlKCd0aXRsZScsd2luZG93Lm1tZW51LnRpdGxlTGF5ZXJQcmV2KTtcbiAgICAgICAgICAgIG1tVGl0bGUuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyxtbVRpdGxlLnRleHQgKyAnLiAnICsgd2luZG93Lm1tZW51LmxhYmVsTGF5ZXJQcmV2KTtcbiAgICAgICAgICAgIG1tVGl0bGUuc2V0QXR0cmlidXRlKCdyb2xlJywnYnV0dG9uJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIE5WREE6IHNldFRpbWVvdXQgdG8gcmVhZCBjb3JyZWN0IHRpdGxlXG4gICAgICAgICAgICBzZXRUaW
245101lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBtbVRpdGxlLmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmNsYXNzTGlzdC5jb250YWlucygnanMtbmF2JykpIHtcbiAgICAgICAgICAgIHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJy5tbS1saXN0dmlldyBhJykuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LHtcbiAgICAgICdsYW5ndWFnZScgOiAnZGUnLFxuICAgICAgJ2NsYXNzTmFtZXMnIDoge1xuICAgICAgICAnc2VsZWN0ZWQnOiAnb3BlbidcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLy8gUGFuZWwgZGVzIGFrdGl2ZW4gTGlua3Mgw7ZmZm5lblxuICAgIGNvbnN0IG1tZW51QXBpID0gbW1lbnUuQVBJO1xuICAgIGNvbnN0IG1tZW51UGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubW0tbWVudSAubW0tbGlzdGl0ZW1fc2VsZWN0ZWQgPiBhJyk7XG4gICAgaWYgKG1tZW51UGFuZWwpIHtcbiAgICAgIG1tZW51QXBpLm9wZW5QYW5lbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtbWVudVBhbmVsLmhhc2guc3Vic3RyKDEpKSk7XG4gICAgfVxuXG4gICAgLy8gS29ycmVrdHVyZW4gZsO8ciBNTWVudVxuICAgIGxldCBtbUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tbS1wYW5lbCAubW0tYnRuX25leHQnKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgbW1CdXR0b24ubGVuZ3RoOyBpKyspIHtcblxuICAgICAgaWYgKCBtbUJ1dHRvbltpXS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmIG1tQnV0dG9uW2ldLnByZXZpb3VzRWxlbWVudFNpYmxpbmcudGFnTmFtZSA9PSAnQScgKSB7XG4gICAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsd2luZG93Lm1tZW51LmxhYmVsTGF5ZXJOZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsbW1CdXR0b25baV0uaW5uZXJUZXh0ICsgJy4gJyArIHdpbmRvdy5tbWVudS5sYWJlbExheWVyTmV4dCk7XG4gICAgICB9XG5cbiAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgndGl0bGUnLHdpbmRvdy5tbWVudS50aXRsZUxheWVyTmV4dCk7XG4gICAgICBtbUJ1dHRvbltpXS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCdidXR0b24nKTtcbiAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsJ2ZhbHNlJyk7XG5cbiAgICB9XG5cbiAgfVxuXG59KTtcblxuXG4iLCJcblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2Nyb2xsc3RhcnRcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uKCkge1xuICBpZiAoIE1hdGgubWF4KHdpbmRvdy5wYWdlWU9mZnNldCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApID4gMTAwKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXRvcCcpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy10b3AnKTtcbiAgfVxufSk7XG5cbmlmICggTWF0aC5tYXgod2luZG93LnBhZ2VZT2Zmc2V0LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgPCAxMDEpIHtcbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLXRvcCcpO1xufVxuXG5cbiIsInJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIFN1Y2hlXG4gIGNvbnN0IHN1Y2hlID0gbmV3IHB4RWFzeUV4cGFuZCgnI3NlYXJjaGJ1dHRvbicse1xuICAgIGNsb3NlV2l0aEVzYyA6IHRydWUsXG4gICAgc2V0Um9vdENsYXNzIDogJ29mZmNhbnZhcy12aXNpYmxlJyxcbiAgICBhZGRDbG9zZUJ1dHRvbiA6IHRydWUsXG4gICAgc2V0Rm9jdXNUb0VsZW1lbnQ6ICcuanMtY2xvc2UnLFxuICAgIGtlZXBGb2N1c0luVGFyZ2V0RWxlbWVudCA6IHRydWUsXG4gICAgaGlkZGVuV2hlbk9wZW46ICcucGFnZScsXG4gICAgb246IHtcbiAgICAgIGJlZm9yZVRvZ2dsZTogZnVuY3Rpb24gKGJ1dHRvbikge1xuICAgICAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogMCwgbGVmdDogMCwgYmVoYXZpb3I6ICdpbnN0YW50J30pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbn0pOyIsIlxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3dpcGVyXG5cbnJlYWR5KGZ1bmN0aW9uKCkge1xuXG5cbiAgY29uc3Qgc2xpZGVyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LWV2ZW50cy1zbGlkZXIsIC5hNS1pbWFnZS1zbGlkZXItaW5uZXIsIC5wYWdlLWFzaWRlLXNsaWRlcicpO1xuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXJDb250YWluZXIubGVuZ3RoOyBpKyspIHtcblxuICAgIGxldCBzbGlkZXJVTCA9IHNsaWRlckNvbnRhaW5lcltpXS5xdWVyeVNlbGVjdG9yKCd1bCcpO1xuICAgIGxldCBzbGlkZXJJdGVtcyA9IHNsaWRlclVMLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyk7XG5cbiAgICBpZiAoIHNsaWRlckl0ZW1zLmxlbmd0aCA8IDIgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc2xpZGVyQ29udGFpbmVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItbWluaXRlbXMnKSkge1xuXG4gICAgICBpZiAoc2xpZGVySXRlbXMubGVuZ3RoIDwgc2xpZGVyQ29udGFpbmVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItbWluaXRlbXMnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHNsaWRlckNvbnRhaW5lcltpXS5jbGFzc0xpc3QuYWRkKCdzd2lwZXItY29udGFpbmVyJyk7XG4gICAgc2xpZGVyVUwuY2xhc3NMaXN0LmFkZCgnc3dpcGVyLXdyYXBwZXInKTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2xpZGVySXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHNsaWRlckl0ZW1zW2pdLmNsYXNzTGlzdC5hZGQoJ3N3aXBlci1zbGlkZScpO1xuICAgIH1cblxuICAgIGxldCBwcmV2VGl0bGUgPSBzd2lwZXIucHJldlRpdGxlO1xuICAgIGlmIChzbGlkZXJDb250YWluZXJbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWJ1dHRvbi1sYWJlbC1wcmV2JykpIHtcbiAgICAgIHByZXZUaXRsZSA9IHNsaWRlckNvbnRhaW5lcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uLWxhYmVsLXByZXYnKTtcbiAgICB9XG4gICAgbGV0IG5leHRUaXRsZSA9IHN3aXBlci5uZXh0VGl0bGU7XG4gICAgaWYgKHNsaWRlckNvbnRhaW5lcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uLWxhYmVsLW5leHQnKSkge1xuICAgICAgbmV4dFRpdGxlID0gc2xpZGVyQ29udGFpbmVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1idXR0b24tbGFiZWwtbmV4dCcpO1xuICAgIH1cblxuXG4gICAgLy8gSGVybyBTbGlkZXJcbiAgICBpZiAoc2xpZGVyQ29udGFpbmVyW2ldLmNsYXNzTGlzdC5jb250YWlucygncGFnZS1hc2l
24510kZS1zbGlkZXInKSkge1xuXG4gICAgICBsZXQgYnV0dG9uV3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY29udHJvbHNcIj48L2Rpdj4nKTtcbiAgICAgIHNsaWRlckNvbnRhaW5lcltpXS5hcHBlbmQoYnV0dG9uV3JhcHBlcik7XG5cbiAgICAgIGxldCBidXR0b25Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JywgJ3N0b3AnKTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuaW5uZXJIVE1MID0gc3dpcGVyLnN0b3BUaXRsZTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3dpcGVyLmFyaWFMYWJlbFN0b3ApO1xuICAgICAgYnV0dG9uQ29udHJvbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBzbGlkZXIgPSB0aGlzLmNsb3Nlc3QoJy5zd2lwZXItY29udGFpbmVyJykuc3dpcGVyO1xuICAgICAgICBpZiAoc2xpZGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1hdXRvcGxheScsICdzdGFydCcpO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3dpcGVyLmFyaWFMYWJlbFN0YXJ0KTtcbiAgICAgICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdGFydFRpdGxlO1xuICAgICAgICAgIHNsaWRlclVMLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgICAgICAgIHNsaWRlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYXV0b3BsYXknLCAnc3RvcCcpO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3dpcGVyLmFyaWFMYWJlbFN0b3ApO1xuICAgICAgICAgIGJ1dHRvbkNvbnRyb2wuaW5uZXJIVE1MID0gc3dpcGVyLnN0b3BUaXRsZTtcbiAgICAgICAgICBzbGlkZXJVTC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdvZmYnKTtcbiAgICAgICAgICBzbGlkZXIuYXV0b3BsYXkuc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBidXR0b25XcmFwcGVyLmFwcGVuZChidXR0b25Db250cm9sKTtcblxuICAgICAgLy8gU3RvcCBzbGlkZXIgb24gaW50ZXJhY3RcbiAgICAgIHNsaWRlclVMLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGJ1dHRvbkNvbnRyb2wuZ2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JykgPT0gJ3N0b3AnKSB7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5jbGljaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3IFN3aXBlcihzbGlkZXJDb250YWluZXJbaV0se1xuICAgICAgICBlZmZlY3Q6ICdmYWRlJyxcbiAgICAgICAgZmFkZUVmZmVjdDoge1xuICAgICAgICAgIGNyb3NzRmFkZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBhMTF5OiB7XG4gICAgICAgICAgc2xpZGVSb2xlOiAnbGlzdGl0ZW0nXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9wbGF5OiB0cnVlLFxuICAgICAgICBzcGVlZDogMTAwMCxcbiAgICAgICAgYXV0b0hlaWdodDogdHJ1ZSxcbiAgICAgICAgYWxsb3dUb3VjaE1vdmU6IGZhbHNlLFxuICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9XG5cblxuICAgIC8vIEV2ZW50LVNsaWRlclxuICAgIGlmIChzbGlkZXJDb250YWluZXJbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdhNS1ldmVudHMtc2xpZGVyJykpIHtcblxuICAgICAgbGV0IGJ1dHRvbldyYXBwZXIgPSBjcmVhdGVFbGVtZW50KCc8ZGl2IGNsYXNzPVwic3dpcGVyLWNvbnRyb2xzXCI+PC9kaXY+Jyk7XG4gICAgICBzbGlkZXJDb250YWluZXJbaV0uYXBwZW5kKGJ1dHRvbldyYXBwZXIpO1xuXG4gICAgICAvLyBsZXQgYnV0dG9uTmV4dCA9IGNyZWF0ZUVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3dpcGVyLW5leHRcIj4nICsgc3dpcGVyLm5leHQgKyAnPC9idXR0b24+Jyk7XG4gICAgICAvLyBidXR0b25XcmFwcGVyLmluc2VydEJlZm9yZShidXR0b25OZXh0LGJ1dHRvbldyYXBwZXIuZmlyc3RDaGlsZCk7XG5cbiAgICAgIC8vIGxldCBidXR0b25QcmV2ID0gY3JlYXRlRWxlbWVudCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzd2lwZXItcHJldlwiPicgKyBzd2lwZXIucHJldiArICc8L2J1dHRvbj4nKTtcbiAgICAgIC8vIGJ1dHRvbldyYXBwZXIuaW5zZXJ0QmVmb3JlKGJ1dHRvblByZXYsYnV0dG9uV3JhcHBlci5maXJzdENoaWxkKTtcblxuICAgICAgbGV0IHBhZ2luYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpXG4gICAgICBwYWdpbmF0aW9uLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnc2xpZGVyLXBhZ2luYXRpb24nKTtcbiAgICAgIGJ1dHRvbldyYXBwZXIuYXBwZW5kKHBhZ2luYXRpb24pO1xuXG4gICAgICBsZXQgYnV0dG9uQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgYnV0dG9uQ29udHJvbC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1hdXRvcGxheScsICdzdG9wJyk7XG4gICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdG9wVGl0bGU7XG4gICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdG9wKTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgc2xpZGVyID0gdGhpcy5jbG9zZXN0KCcuc3dpcGVyLWNvbnRhaW5lcicpLnN3aXBlcjtcbiAgICAgICAgaWYgKHNsaWRlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYXV0b3BsYXknLCAnc3RhcnQnKTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdGFydCk7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5pbm5lckhUTUwgPSBzd2lwZXIuc3RhcnRUaXRsZTtcbiAgICAgICAgICBzbGlkZXJVTC5zZXRB
24510dHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcbiAgICAgICAgICBzbGlkZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JywgJ3N0b3AnKTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdG9wKTtcbiAgICAgICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdG9wVGl0bGU7XG4gICAgICAgICAgc2xpZGVyVUwuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAnb2ZmJyk7XG4gICAgICAgICAgc2xpZGVyLmF1dG9wbGF5LnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYnV0dG9uV3JhcHBlci5hcHBlbmQoYnV0dG9uQ29udHJvbCk7XG5cbiAgICAgIC8vIFN0b3Agc2xpZGVyIG9uIGludGVyYWN0XG4gICAgICBzbGlkZXJVTC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChidXR0b25Db250cm9sLmdldEF0dHJpYnV0ZSgnZGF0YS1hdXRvcGxheScpID09ICdzdG9wJykge1xuICAgICAgICAgIGJ1dHRvbkNvbnRyb2wuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBTd2lwZXIoc2xpZGVyQ29udGFpbmVyW2ldLHtcbiAgICAgICAgZWZmZWN0OiAnZmFkZScsXG4gICAgICAgIGZhZGVFZmZlY3Q6IHtcbiAgICAgICAgICBjcm9zc0ZhZGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYTExeToge1xuICAgICAgICAgIHNsaWRlUm9sZTogJ2xpc3RpdGVtJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgICAgc3BlZWQ6IDEwMDAsXG4gICAgICAgIGF1dG9IZWlnaHQ6IHRydWUsXG4gICAgICAgIGFsbG93VG91Y2hNb3ZlOiBmYWxzZSxcbiAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBlbDogcGFnaW5hdGlvbixcbiAgICAgICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICAgICAgcmVuZGVyQnVsbGV0OiBmdW5jdGlvbiAoaW5kZXgsIGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5zbGlkZXNbaW5kZXhdLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpO1xuICAgICAgICAgICAgbGV0IGxhYmVsID0gc3dpcGVyLmJ1bGxldFRpdGxlICsgJyAnICsgKGluZGV4ICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gJzxsaSByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCInICsgY2xhc3NOYW1lICsgJ1wiIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFiZWwgKyAnXCI+PC9saT4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBwYWdpbmF0aW9uUmVuZGVyOiBmdW5jdGlvbiAoc3dpcGVyRWwpIHtcblxuICAgICAgICAgICAgbGV0IGJ1bGxldHMgPSBzd2lwZXJFbC5wYWdpbmF0aW9uLmJ1bGxldHM7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVsbGV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBidWxsZXRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9PSAxMyAmJiBldmVudC5rZXlDb2RlICE9PSAzMikgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBidWxsZXRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlJykpIHtcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JywgJ3N0YXJ0Jyk7XG4gICAgICAgICAgICAgICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdGFydCk7XG4gICAgICAgICAgICAgICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdGFydFRpdGxlO1xuICAgICAgICAgICAgICAgICAgc2xpZGVyVUwuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAncG9saXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBsaW5rID0gc3dpcGVyRWwuc2xpZGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YobGluaykgIT0gJ3VuZGVmaW5lZCcgJiYgbGluayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBsaW5rLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFnaW5hdGlvblVwZGF0ZTogZnVuY3Rpb24gKHN3aXBlckVsKSB7XG5cbiAgICAgICAgICAgIGxldCBidWxsZXRzID0gc3dpcGVyRWwucGFnaW5hdGlvbi5idWxsZXRzO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1bGxldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgYnVsbGV0c1tpXS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpO1xuICAgICAgICAgICAgICBzd2lwZXJFbC5zbGlkZXNbaV0ucXVlcnlTZWxlY3RvcignYScpLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnVsbGV0c1tzd2lwZXJFbC5yZWFsSW5kZXhdLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgICAgICAgIHN3aXBlckVsLnNsaWRlc1tzd2lwZXJFbC5yZWFsSW5kZXhdLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG5cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cblxuICAgIH1cblxuICAgIC8vIG5vcm1hbGVyIFNsaWRlclxuICAgIGlmIChzbGlkZXJDb250YWluZXJbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdhNS1pbWFnZS1zbGlkZXItaW5uZXInKSkge1xuXG4gICAgICBsZXQgYnV0dG9uV3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY29udHJvbHNcIj48L2Rpdj4nKTtcbiAgICAgIHNsaWRlckNvbnRhaW5lcltpXS5wYXJlbnROb2RlLmFwcGVuZChidXR0b25XcmFwcGVyKTtcblxuICAgICAgbGV0IGJ1dHRvbk5leHQgPSBjcmVhdGVFbGVtZW50KCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN3aXBlci1uZXh0XCI+JyArIHN3aXBlci5uZXh0ICsgJzwvYnV0dG9uPicpO1xuICAgICAgYnV0dG9uV3JhcHBlci5pbnNlcnRCZWZvcmUoYnV0dG9uTmV4dCxidXR0b25XcmFwcGVyLmZpcnN0Q2hpbGQpO1xuXG4gICAgICBsZXQgYnV0dG9uUHJldiA9IGNyZWF0ZUVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3dpcGVyLXByZXZcIj4nICsgc3dpcGVyLnByZXYgKyAnPC9idXR0b24+Jyk7XG4gICAgICBidXR0b25XcmFwcGVyLmluc2VydEJlZm9yZShidXR0b25QcmV2LGJ1dHRvbldyYXBwZXIuZmlyc3RDaGlsZCk7XG5cbiAgICAgIG5ldyBTd2lwZXIoc2xpZGVyQ29udGFpbmVyW2ldLHtcbiAgICAgICAgZWZmZWN0OiAnc2xpZGUnLFxuICAgICAgICBsb29wOiB0cnVlLFxuICAgICAgICBhdXRvSGVpZ2h0OiB0cnVlLFxuICAgICAgICBhMTF5OiB7XG4gICAgICAgICAgcHJldlNsaWRlTWVzc2FnZTogcHJldlRpdGxlLFxuICAgICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6IG5leHRUaXRsZSxcbiAgICAgICAgICBzbGlkZVJvbGU6ICdsaXN0aXRlbSdcbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgIG5leHRFbDogYnV0dG9uTmV4dCxcbiAgICAgICAgICBwcmV2RWw6IGJ1dHRvblByZXZcbiAgICAgICAgfSxcbiAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIG9ubHlJblZpZXdwb3J0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBzbGlkZXNQZXJWaWV3OiAxLFxuICAgICAgICBzcGFjZUJldHdlZW46IDBcbiAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLy8gU2xpZGVyLUjDtmhlIG5hY2ggZGVtIExhZGVuIHZvbiBCaWxkZXJuIGFucGFzc2VuXG4gICAgbGV0IGltYWdlcyA9IHNsaWRlckNvbnRhaW5lcltpXS5xdWVyeVNlbGVjdG9yQWxsKCdpbWcuanMtbG9hZCcpO1xuICAgIGZvcihsZXQgaiA9IDA7IGogPCBpbWFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGltYWdlc1tqXS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKGZ1bmN0aW9uKHNsaWRlcil7XG4gICAgICAgI
24510HJldHVybiBmdW5jdGlvbigpe1xuICAgICAgICAgIHNsaWRlci51cGRhdGVBdXRvSGVpZ2h0KDIwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pKHNsaWRlckNvbnRhaW5lcltpXS5zd2lwZXIpKTtcbiAgICB9XG5cblxuICB9XG5cbn0pO1xuXG5cbiIsInJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIFRvZ2dsZS1Cb3hcbiAgbGV0IHRvZ2dsZUJveFdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYTUtdG9nZ2xlLWJveC13cmFwcGVyJyk7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCB0b2dnbGVCb3hXcmFwcGVyLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBsZXQgdG9nZ2xlTXVsdGkgPSB0cnVlO1xuICAgIGxldCBpZExpc3QgPSAnJztcblxuICAgIGlmICggdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbXVsdGknKSA9PSAnZmFsc2UnICkge1xuICAgICAgdG9nZ2xlTXVsdGkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgdG9nZ2xlQm94ID0gdG9nZ2xlQm94V3JhcHBlcltpXS5xdWVyeVNlbGVjdG9yQWxsKCcuYTUtdG9nZ2xlLWJveCcpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9nZ2xlQm94Lmxlbmd0aDsgaisrKSB7XG5cbiAgICAgIGxldCB0b2dnbGVCb3hCdXR0b25XcmFwcGVyID0gdG9nZ2xlQm94W2pdLnF1ZXJ5U2VsZWN0b3IoJy5hNS10b2dnbGUtYm94LWJ1dHRvbicpO1xuXG4gICAgICBsZXQgdG9nZ2xlQm94QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBsZXQgY2hpbGRzTGVuZ3RoID0gdG9nZ2xlQm94QnV0dG9uV3JhcHBlci5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2hpbGRzTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdG9nZ2xlQm94QnV0dG9uLmFwcGVuZCh0b2dnbGVCb3hCdXR0b25XcmFwcGVyLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgICAgdG9nZ2xlQm94QnV0dG9uV3JhcHBlci5hcHBlbmRDaGlsZCh0b2dnbGVCb3hCdXR0b24pO1xuXG4gICAgICBsZXQgdG9nZ2xlQm94Q29udGVudCA9IHRvZ2dsZUJveFtqXS5xdWVyeVNlbGVjdG9yKCcuYTUtdG9nZ2xlLWJveC1jb250ZW50Jyk7XG4gICAgICB0b2dnbGVCb3hDb250ZW50LmlkID0gJ2E1LXRvZ2dsZS1jb250ZW50LScgKyBpICsgJy0nICsgajtcbiAgICAgIGlkTGlzdCA9IGlkTGlzdCArICcgYTUtdG9nZ2xlLWNvbnRlbnQtJyArIGkgKyAnLScgKyBqO1xuXG4gICAgICBsZXQgdGIgPSBuZXcgcHhFYXN5RXhwYW5kKHRvZ2dsZUJveEJ1dHRvbix7XG4gICAgICAgIGNsb3NlV2l0aEVzYyA6IGZhbHNlLFxuICAgICAgICBzd2l0Y2hCdXR0b25IdG1sIDogZmFsc2UsXG4gICAgICAgIHNldEZvY3VzVG9GaXJzdEVsZW1lbnQgOiBmYWxzZSxcbiAgICAgICAga2VlcEZvY3VzSW5UYXJnZXRFbGVtZW50IDogZmFsc2VcbiAgICAgIH0se1xuICAgICAgICBjb250cm9sczogJ2E1LXRvZ2dsZS1jb250ZW50LScgKyBpICsgJy0nICsgalxuICAgICAgfSk7XG5cbiAgICAgIHRiLmZ1bmN0aW9ucy5hZnRlclRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpZiAoIHRvZ2dsZUJveEJ1dHRvbi5leHBhbmRlZCA9PT0gdHJ1ZSApIHtcblxuICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gMDtcblxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdG9nZ2xlQm94Q29udGVudC5jaGlsZHJlblswXS5jbGllbnRIZWlnaHQgKyAncHgnO1xuICAgICAgICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuZ2V0QW5pbWF0aW9ucyh7c3VidHJlZTpmYWxzZX0pLm1hcChmdW5jdGlvbihhbmltYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnMuZmluaXNoZWQ7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LDEwKTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgdG9nZ2xlQm94Q29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICB0b2dnbGVCb3hDb250ZW50LnN0eWxlLmhlaWdodCA9IHRvZ2dsZUJveENvbnRlbnQuY2hpbGRyZW5bMF0uY2xpZW50SGVpZ2h0ICsgJ3B4JztcblxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICB0b2dnbGVCb3hDb250ZW50LmdldEFuaW1hdGlvbnMoe3N1YnRyZWU6ZmFsc2V9KS5tYXAoZnVuY3Rpb24oYW5pbWF0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbmltYXRpb25zLmZpbmlzaGVkO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB0b2dnbGVCb3hDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgICAgICAgdG9nZ2xlQm94Q29udGVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sMTApO1xuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGNsb3NlT3RoZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcixjdXJyZW50KSB7XG4gICAgICAgIGxldCB0b2dnbGVCb3hPcGVuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hNS10b2dnbGUtYm94LWJ1dHRvbiBidXR0b25bYXJpYS1leHBhbmRlZD1cInRydWVcIl0nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2dnbGVCb3hPcGVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCB0b2dnbGVCb3hPcGVuW2ldICE9IGN1cnJlbnQgKSB7XG4gICAgICAgICAgICB0b2dnbGVCb3hPcGVuW2ldLmNsaWNrKCk7XG4gICAgICAgICAgICBjdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICggdG9nZ2xlTXVsdGkgPT09IGZhbHNlICkge1xuICAgICAgICB0b2dnbGVCb3hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpe1xuICAgICAgICAgIGlmICggdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PSAnZmFsc2UnICkgeyBcbiAgICAgICAgICAgIGNsb3NlT3RoZXJzKHRvZ2dsZUJveFdyYXBwZXJbaV0sdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgI
24510H1cblxuICAgIC8vIEZ1bmt0aW9uZW4gZsO8ciBhbGxlIEVsZW1lbnRlXG4gICAgaWYgKHRvZ2dsZUJveC5sZW5ndGggPiAxKSB7XG5cbiAgICAgIGlmICggIXRvZ2dsZUJveFdyYXBwZXJbaV0uaGFzQXR0cmlidXRlKCdkYXRhLWNsb3NlLWFsbCcpICYmICF0b2dnbGVCb3hXcmFwcGVyW2ldLmhhc0F0dHJpYnV0ZSgnZGF0YS1vcGVuLWFsbCcpICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJ1dHRvbldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGJ1dHRvbldyYXBwZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsJ2E1LXRvZ2dsZS1mdW5jdGlvbnMnKTtcbiAgICAgIHRvZ2dsZUJveFdyYXBwZXJbaV0uaW5zZXJ0QmVmb3JlKGJ1dHRvbldyYXBwZXIsdG9nZ2xlQm94V3JhcHBlcltpXS5maXJzdENoaWxkKTtcblxuICAgICAgaWYgKCB0b2dnbGVCb3hXcmFwcGVyW2ldLmhhc0F0dHJpYnV0ZSgnZGF0YS1vcGVuLWFsbCcpICkge1xuICAgICAgICBcbiAgICAgICAgbGV0IHRvZ2dsZU9wZW5BbGwgPSBjcmVhdGVFbGVtZW50KCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWNvbnRyb2xzPVwiJytpZExpc3QrJ1wiIGFyaWEtbGFiZWw9XCInICsgdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKSArICcgJyArIHRvZ2dsZUJveFdyYXBwZXJbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLW9wZW4tYWxsJykgKyAnXCI+Jyt0b2dnbGVCb3hXcmFwcGVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1vcGVuLWFsbCcpKyc8L2J1dHRvbj4nKTtcblxuICAgICAgICB0b2dnbGVPcGVuQWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICBsZXQgdG9nZ2xlQm94TGlzdCA9IHRvZ2dsZUJveFdyYXBwZXJbaV0ucXVlcnlTZWxlY3RvckFsbCgnLmE1LXRvZ2dsZS1ib3gtYnV0dG9uIGJ1dHRvblthcmlhLWV4cGFuZGVkPVwiZmFsc2VcIl0nKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvZ2dsZUJveExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRvZ2dsZUJveExpc3RbaV0uY2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHRvZ2dsZUJ1dHRvbnMgPSBidXR0b25XcmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9nZ2xlQnV0dG9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMgIT0gdG9nZ2xlQnV0dG9uc1tpXSkge1xuICAgICAgICAgICAgICB0b2dnbGVCdXR0b25zW2ldLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0b2dnbGVCdXR0b25zW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywndHJ1ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnV0dG9uV3JhcHBlci5hcHBlbmRDaGlsZCh0b2dnbGVPcGVuQWxsKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoIHRvZ2dsZUJveFdyYXBwZXJbaV0uaGFzQXR0cmlidXRlKCdkYXRhLWNsb3NlLWFsbCcpICkge1xuXG4gICAgICAgIGxldCB0b2dnbGVDbG9zZUFsbCA9IGNyZWF0ZUVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtY29udHJvbHM9XCInK2lkTGlzdCsnXCIgYXJpYS1sYWJlbD1cIicgKyB0b2dnbGVCb3hXcmFwcGVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcpICsgJyAnICsgdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xvc2UtYWxsJykgKyAnXCIgYXJpYS1wcmVzc2VkPVwidHJ1ZVwiPicrdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xvc2UtYWxsJykrJzwvYnV0dG9uPicpO1xuXG4gICAgICAgIHRvZ2dsZUNsb3NlQWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICBsZXQgdG9nZ2xlQm94TGlzdCA9IHRvZ2dsZUJveFdyYXBwZXJbaV0ucXVlcnlTZWxlY3RvckFsbCgnLmE1LXRvZ2dsZS1ib3gtYnV0dG9uIGJ1dHRvblthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXScpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9nZ2xlQm94TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9nZ2xlQm94TGlzdFtpXS5jbGljaygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdG9nZ2xlQnV0dG9ucyA9IGJ1dHRvbldyYXBwZXIucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2dnbGVCdXR0b25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcyAhPSB0b2dnbGVCdXR0b25zW2ldKSB7XG4gICAgICAgICAgICAgIHRvZ2dsZUJ1dHRvbnNbaV0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXByZXNzZWQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvZ2dsZUJ1dHRvbnNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCd0cnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBidXR0b25XcmFwcGVyLmFwcGVuZENoaWxkKHRvZ2dsZUNsb3NlQWxsKTtcblxuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxufSk7IiwiLypcbiAgU1RJQ0tZQklUUyDwn5KJXG4gIC0tLS0tLS0tXG4gID4gYSBsaWdodHdlaWdodCBhbHRlcm5hdGl2ZSB0byBgcG9zaXRpb246IHN0aWNreWAgcG9seWZpbGxzIPCfjaxcbiAgLS0tLS0tLS1cbiAgLSBlYWNoIG1ldGhvZCBpcyBkb2N1bWVudGVkIGFib3ZlIGl0IG91ciB2aWV3IHRoZSByZWFkbWVcbiAgLSBTdGlja3liaXRzIGRvZXMgbm90IG1hbmFnZSBwb2x5bW9ycGhpYyBmdW5jdGlvbmFsaXR5IChwb3NpdGlvbiBsaWtlIHByb3BlcnRpZXMpXG4gICogcG9seW1vcnBoaWMgZnVuY3Rpb25hbGl0eTogKGluIHRoZSBjb250ZXh0IG9mIGRlc2NyaWJpbmcgU3RpY2t5Yml0cylcbiAgICBtZWFucyBtYWtpbmcgdGhpbmdzIGxpa2UgYHBvc2l0aW9uOiBzdGlja3lgIGJlIGxvb3NlbHkgc3VwcG9ydGVkIHdpdGggcG9zaXRpb24gZml4ZWQuXG4gICAgSXQgYWxzbyBtZWFucyB0aGF0IGZlYXR1cmVzIGxpa2UgYHVzZVN0aWNreUNsYXNzZXNgIHRha2VzIG9uIHN0eWxlcyBsaWtlIGBwb3NpdGlvbjogZml4ZWRgLlxuICAtLS0tLS0tLVxuICBkZWZhdWx0cyDwn5SMXG4gIC0tLS0tLS0tXG4gIC0gdmVyc2lvbiA9IGBwYWNrYWdlLmpzb25gIHZlcnNpb25cbiAgLSB1c2VyQWdlbnQgPSB2aWV3ZXIgYnJvd3NlciBhZ2VudFxuICAtIHRhcmdldCA9IERPTSBlbGVtZW50IHNlbGVjdG9yXG4gIC0gbm9TdHlsZXMgPSBib29sZWFuXG4gIC0gb2Zmc2V0ID0gbnVtYmVyXG4gIC0gcGFyZW50Q2xhc3MgPSAnc3RyaW5nJ1xuICAtIHNjcm9sbEVsID0gd2luZG93IHx8IERPTSBlbGVtZW50IHNlbGVjdG9yIHx8IERPTSBlbGVtZW50XG4gIC0gc3RpY2t5Q2xhc3MgPSAnc3RyaW5nJ1xuICAtIHN0dWNrQ2xhc3MgPSAnc3RyaW5nJ1xuICAtIHVzZVN0aWNreUNsYXNzZXMgPSBib29sZWFuXG4gIC0gdXNlRml4ZWQgPSBib29sZWFuXG4gIC0gdXNlR2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gYm9vbGVhblxuICAtIHZlcnRpY2FsUG9zaXRpb24gPSAnc3RyaW5nJ1xuICAtIGFwcGx5U3R5bGUgPSBmdW5jdGlvblxuICAtLS0tLS0tLVxuICBwcm9wc/CflIxcbiAgLS0tLS0tLS1cbiAgLSBwID0gcHJvcHMge29iamVjdH1cbiAgLS0tLS0tLS1cbiAgaW5zdGFuY2Ugbm90ZVxuICAtLS0tLS0tLVxuICAtIHN0aWNreWJpdHMgcGFyZW50IG1ldGhvZHMgcmV0dXJuIHRoaXNcbiAgLSBzdGlja3liaXRzIGluc3RhbmNlIG1ldGhvZHMgcmV0dXJuIGFuIGluc3RhbmNlIGl0ZW1cbiAgLS0tLS0tLS1cbiAgbm9tZW5jbGF0dXJlXG4gIC0tLS0tLS0tXG4gIC0gdGFyZ2V0ID0+IGVsID0+IGVcbiAgLSBwcm9wcyA9PiBvIHx8IHBcbiAgLSBpbnN0YW5jZSA9PiBpdGVtID0+IGl0XG4gIC0tLS0tLS0tXG4gIG1ldGhvZHNcbiAgLS0tLS0tLS1cbiAgLSAuZGVmaW5lUG9zaXRpb24gPSBkZWZpbmVzIHN0aWNreSBvciBmaXhlZFxuICAtIC5hZGRJb
24510nN0YW5jZSA9IGFuIGFycmF5IG9mIG9iamVjdHMgZm9yIGVhY2ggU3RpY2t5Yml0cyBUYXJnZXRcbiAgLSAuZ2V0Q2xvc2VzdFBhcmVudCA9IGdldHMgdGhlIHBhcmVudCBmb3Igbm9uLXdpbmRvdyBzY3JvbGxcbiAgLSAuZ2V0VG9wUG9zaXRpb24gPSBnZXRzIHRoZSBlbGVtZW50IHRvcCBwaXhlbCBwb3NpdGlvbiBmcm9tIHRoZSB2aWV3cG9ydFxuICAtIC5jb21wdXRlU2Nyb2xsT2Zmc2V0cyA9IGNvbXB1dGVzIHNjcm9sbCBwb3NpdGlvblxuICAtIC50b2dnbGVDbGFzc2VzID0gb2xkZXIgYnJvd3NlciB0b2dnbGVyXG4gIC0gLm1hbmFnZVN0YXRlID0gbWFuYWdlcyBzdGlja3kgc3RhdGVcbiAgLSAucmVtb3ZlSW5zdGFuY2UgPSByZW1vdmVzIGFuIGluc3RhbmNlXG4gIC0gLmNsZWFudXAgPSByZW1vdmVzIGFsbCBTdGlja3liaXRzIGluc3RhbmNlcyBhbmQgY2xlYW5zIHVwIGRvbSBmcm9tIHN0aWNreWJpdHNcbiovXG5jbGFzcyBTdGlja3liaXRzIHtcbiAgY29uc3RydWN0b3IgKHRhcmdldCwgb2JqKSB7XG4gICAgY29uc3QgbyA9IHR5cGVvZiBvYmogIT09ICd1bmRlZmluZWQnID8gb2JqIDoge31cbiAgICB0aGlzLnZlcnNpb24gPSAnVkVSU0lPTidcbiAgICB0aGlzLnVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IHx8ICdubyBgdXNlckFnZW50YCBwcm92aWRlZCBieSB0aGUgYnJvd3NlcidcbiAgICB0aGlzLnByb3BzID0ge1xuICAgICAgY3VzdG9tU3RpY2t5Q2hhbmdlTnVtYmVyOiBvLmN1c3RvbVN0aWNreUNoYW5nZU51bWJlciB8fCBudWxsLFxuICAgICAgbm9TdHlsZXM6IG8ubm9TdHlsZXMgfHwgZmFsc2UsXG4gICAgICBzdGlja3lCaXRTdGlja3lPZmZzZXQ6IG8uc3RpY2t5Qml0U3RpY2t5T2Zmc2V0IHx8IDAsXG4gICAgICBwYXJlbnRDbGFzczogby5wYXJlbnRDbGFzcyB8fCAnanMtc3RpY2t5Yml0LXBhcmVudCcsXG4gICAgICBzY3JvbGxFbDogdHlwZW9mIG8uc2Nyb2xsRWwgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvLnNjcm9sbEVsKSA6IG8uc2Nyb2xsRWwgfHwgd2luZG93LFxuICAgICAgc3RpY2t5Q2xhc3M6IG8uc3RpY2t5Q2xhc3MgfHwgJ2pzLWlzLXN0aWNreScsXG4gICAgICBzdHVja0NsYXNzOiBvLnN0dWNrQ2xhc3MgfHwgJ2pzLWlzLXN0dWNrJyxcbiAgICAgIHN0aWNreUNoYW5nZUNsYXNzOiBvLnN0aWNreUNoYW5nZUNsYXNzIHx8ICdqcy1pcy1zdGlja3ktLWNoYW5nZScsXG4gICAgICB1c2VTdGlja3lDbGFzc2VzOiBvLnVzZVN0aWNreUNsYXNzZXMgfHwgZmFsc2UsXG4gICAgICB1c2VGaXhlZDogby51c2VGaXhlZCB8fCBmYWxzZSxcbiAgICAgIHVzZUdldEJvdW5kaW5nQ2xpZW50UmVjdDogby51c2VHZXRCb3VuZGluZ0NsaWVudFJlY3QgfHwgZmFsc2UsXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBvLnZlcnRpY2FsUG9zaXRpb24gfHwgJ3RvcCcsXG4gICAgICBhcHBseVN0eWxlOiBvLmFwcGx5U3R5bGUgfHwgKChpdGVtLCBzdHlsZSkgPT4gdGhpcy5hcHBseVN0eWxlKGl0ZW0sIHN0eWxlKSksXG4gICAgfVxuICAgIC8qXG4gICAgICBkZWZpbmUgcG9zaXRpb25WYWwgYWZ0ZXIgdGhlIHNldHRpbmcgb2YgcHJvcHMsIGJlY2F1c2UgZGVmaW5lUG9zaXRpb24gbG9va3MgYXQgdGhlIHByb3BzLnVzZUZpeGVkXG4gICAgICAtLS0tXG4gICAgICAtICB1c2VzIGEgY29tcHV0ZWQgKGAuZGVmaW5lUG9zaXRpb24oKWApXG4gICAgICAtICBkZWZpbmVkIHRoZSBwb3NpdGlvblxuICAgICovXG4gICAgdGhpcy5wcm9wcy5wb3NpdGlvblZhbCA9IHRoaXMuZGVmaW5lUG9zaXRpb24oKSB8fCAnZml4ZWQnXG5cbiAgICB0aGlzLmluc3RhbmNlcyA9IFtdXG5cbiAgICBjb25zdCB7XG4gICAgICBwb3NpdGlvblZhbCxcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24sXG4gICAgICBub1N0eWxlcyxcbiAgICAgIHN0aWNreUJpdFN0aWNreU9mZnNldCxcbiAgICB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHZlcnRpY2FsUG9zaXRpb25TdHlsZSA9IHZlcnRpY2FsUG9zaXRpb24gPT09ICd0b3AnICYmICFub1N0eWxlcyA/IGAke3N0aWNreUJpdFN0aWNreU9mZnNldH1weGAgOiAnJ1xuICAgIGNvbnN0IHBvc2l0aW9uU3R5bGUgPSBwb3NpdGlvblZhbCAhPT0gJ2ZpeGVkJyA/IHBvc2l0aW9uVmFsIDogJydcblxuICAgIHRoaXMuZWxzID0gdHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRhcmdldCkgOiB0YXJnZXRcblxuICAgIGlmICghKCdsZW5ndGgnIGluIHRoaXMuZWxzKSkgdGhpcy5lbHMgPSBbdGhpcy5lbHNdXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuZWxzW2ldXG5cbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuYWRkSW5zdGFuY2UoZWwsIHRoaXMucHJvcHMpXG4gICAgICAvLyBzZXQgdmVydGljYWwgcG9zaXRpb25cbiAgICAgIHRoaXMucHJvcHMuYXBwbHlTdHlsZShcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgW3ZlcnRpY2FsUG9zaXRpb25dOiB2ZXJ0aWNhbFBvc2l0aW9uU3R5bGUsXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25TdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgIClcbiAgICAgIHRoaXMubWFuYWdlU3RhdGUoaW5zdGFuY2UpXG5cbiAgICAgIC8vIGluc3RhbmNlcyBhcmUgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSlcbiAgICB9XG4gIH1cblxuICAvKlxuICAgIHNldFN0aWNreVBvc2l0aW9uIOKclO+4j1xuICAgIC0tLS0tLS0tXG4gICAg4oCUICBtb3N0IGJhc2ljIHRoaW5nIHN0aWNreWJpdHMgZG9lc1xuICAgID0+IGNoZWNrcyB0byBzZWUgaWYgcG9zaXRpb24gc3RpY2t5IGlzIHN1cHBvcnRlZFxuICAgID0+IGRlZmluZWQgdGhlIHBvc2l0aW9uIHRvIGJlIHVzZWRcbiAgICA9PiBzdGlja3liaXRzIHdvcmtzIGFjY29yZGluZ2x5XG4gICovXG4gIGRlZmluZVBvc2l0aW9uICgpIHtcbiAgICBsZXQgc3RpY2t5UHJvcF
24510xuICAgIGlmICh0aGlzLnByb3BzLnVzZUZpeGVkKSB7XG4gICAgICBzdGlja3lQcm9wID0gJ2ZpeGVkJ1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVmaXggPSBbJycsICctby0nLCAnLXdlYmtpdC0nLCAnLW1vei0nLCAnLW1zLSddXG4gICAgICBjb25zdCB0ZXN0ID0gZG9jdW1lbnQuaGVhZC5zdHlsZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVmaXgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdGVzdC5wb3NpdGlvbiA9IGAke3ByZWZpeFtpXX1zdGlja3lgXG4gICAgICB9XG4gICAgICBzdGlja3lQcm9wID0gdGVzdC5wb3NpdGlvbiA/IHRlc3QucG9zaXRpb24gOiAnZml4ZWQnXG4gICAgICB0ZXN0LnBvc2l0aW9uID0gJydcbiAgICB9XG4gICAgcmV0dXJuIHN0aWNreVByb3BcbiAgfVxuXG4gIC8qXG4gICAgYWRkSW5zdGFuY2Ug4pyU77iPXG4gICAgLS0tLS0tLS1cbiAgICDigJQgbWFuYWdlcyBpbnN0YW5jZXMgb2YgaXRlbXNcbiAgICAtIHRha2VzIGluIGFuIGVsIGFuZCBwcm9wc1xuICAgIC0gcmV0dXJucyBhbiBpdGVtIG9iamVjdFxuICAgIC0tLVxuICAgIC0gdGFyZ2V0ID0gZWxcbiAgICAtIG8gPSB7b2JqZWN0fSA9IHByb3BzXG4gICAgICAtIHNjcm9sbEVsID0gJ3N0cmluZycgfCBvYmplY3RcbiAgICAgIC0gdmVydGljYWxQb3NpdGlvbiA9IG51bWJlclxuICAgICAgLSBvZmYgPSBib29sZWFuXG4gICAgICAtIHBhcmVudENsYXNzID0gJ3N0cmluZydcbiAgICAgIC0gc3RpY2t5Q2xhc3MgPSAnc3RyaW5nJ1xuICAgICAgLSBzdHVja0NsYXNzID0gJ3N0cmluZydcbiAgICAtLS1cbiAgICAtIGRlZmluZWQgbGF0ZXJcbiAgICAgIC0gcGFyZW50ID0gZG9tIGVsZW1lbnRcbiAgICAgIC0gc3RhdGUgPSAnc3RyaW5nJ1xuICAgICAgLSBvZmZzZXQgPSBudW1iZXJcbiAgICAgIC0gc3RpY2t5U3RhcnQgPSBudW1iZXJcbiAgICAgIC0gc3RpY2t5U3RvcCA9IG51bWJlclxuICAgIC0gcmV0dXJucyBhbiBpbnN0YW5jZSBvYmplY3RcbiAgKi9cbiAgYWRkSW5zdGFuY2UgKGVsLCBwcm9wcykge1xuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICBlbCxcbiAgICAgIHBhcmVudDogZWwucGFyZW50Tm9kZSxcbiAgICAgIHByb3BzLFxuICAgIH1cbiAgICBpZiAocHJvcHMucG9zaXRpb25WYWwgPT09ICdmaXhlZCcgfHwgcHJvcHMudXNlU3RpY2t5Q2xhc3Nlcykge1xuICAgICAgdGhpcy5pc1dpbiA9IHRoaXMucHJvcHMuc2Nyb2xsRWwgPT09IHdpbmRvd1xuICAgICAgY29uc3Qgc2UgPSB0aGlzLmlzV2luID8gd2luZG93IDogdGhpcy5nZXRDbG9zZXN0UGFyZW50KGl0ZW0uZWwsIGl0ZW0ucHJvcHMuc2Nyb2xsRWwpXG4gICAgICB0aGlzLmNvbXB1dGVTY3JvbGxPZmZzZXRzKGl0ZW0pXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzZXMoaXRlbS5wYXJlbnQsICcnLCBwcm9wcy5wYXJlbnRDbGFzcylcbiAgICAgIGl0ZW0uc3RhdGUgPSAnZGVmYXVsdCdcbiAgICAgIGl0ZW0uc3RhdGVDaGFuZ2UgPSAnZGVmYXVsdCdcbiAgICAgIGl0ZW0uc3RhdGVDb250YWluZXIgPSAoKSA9PiB0aGlzLm1hbmFnZVN0YXRlKGl0ZW0pXG4gICAgICBzZS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpdGVtLnN0YXRlQ29udGFpbmVyKVxuICAgIH1cbiAgICByZXR1cm4gaXRlbVxuICB9XG5cbiAgLypcbiAgICAtLS0tLS0tLVxuICAgIGdldFBhcmVudCDwn5Go4oCNXG4gICAgLS0tLS0tLS1cbiAgICAtIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgdGFyZ2V0IGVsZW1lbnQncyBwYXJlbnQgc2VsZWN0ZWQgZWxcbiAgICAtIG9ubHkgdXNlZCBmb3Igbm9uIGB3aW5kb3dgIHNjcm9sbCBlbGVtZW50c1xuICAgIC0gc3VwcG9ydHMgb2xkZXIgYnJvd3NlcnNcbiAgKi9cbiAgZ2V0Q2xvc2VzdFBhcmVudCAoZWwsIG1hdGNoKSB7XG4gICAgLy8gcCA9IHBhcmVudCBlbGVtZW50XG4gICAgY29uc3QgcCA9IG1hdGNoXG4gICAgbGV0IGUgPSBlbFxuICAgIGlmIChlLnBhcmVudEVsZW1lbnQgPT09IHApIHJldHVybiBwXG4gICAgLy8gdHJhdmVyc2UgdXAgdGhlIGRvbSB0cmVlIHVudGlsIHdlIGdldCB0byB0aGUgcGFyZW50XG4gICAgd2hpbGUgKGUucGFyZW50RWxlbWVudCAhPT0gcCkgZSA9IGUucGFyZW50RWxlbWVudFxuICAgIC8vIHJldHVybiBwYXJlbnQgZWxlbWVudFxuICAgIHJldHVybiBwXG4gIH1cblxuICAvKlxuICAgIC0tLS0tLS0tXG4gICAgZ2V0VG9wUG9zaXRpb25cbiAgICAtLS0tLS0tLVxuICAgIC0gYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSB0b3BQb3NpdGlvbiBvZiBhIFN0aWNreWJpdCBlbGVtZW50XG4gICAgLSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIERPTVxuICAqL1xuICBnZXRUb3BQb3NpdGlvbiAoZWwpIHtcbiAgICBpZiAodGhpcy5wcm9wcy51c2VHZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgIHJldHVybiBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyAodGhpcy5wcm9wcy5zY3JvbGxFbC5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKVxuICAgIH1cbiAgICBsZXQgdG9wUG9zaXRpb24gPSAwXG4gICAgZG8ge1xuICAgICAgdG9wUG9zaXRpb24gPSBlbC5vZmZzZXRUb3AgKyB0b3BQb3NpdGlvblxuICAgIH0gd2hpbGUgKChlbCA9IGVsLm9mZnNldFBhcmVudCkpXG4gICAgcmV0dXJuIHRvcFBvc2l0aW9uXG4gIH1cblxuICAvKlxuICAgIGNvbXB1dGVTY3JvbGxPZmZzZXRzIPCfk4pcbiAgICAtLS1cbiAgICBjb21wdXRlU2Nyb2xsT2Zmc2V0cyBmb3IgU3RpY2t5Yml0c1xuICAgIC0gZGVmaW5lc1xuICAgICAgLSBvZmZzZXRcbiAgICAgIC0gc3RhcnRcbiAgICAgIC0gc3RvcFxuICAqL1xuICBjb21wdXRlU2Nyb2xsT2Zmc2V0cyAoaXRlbSkge1xuICAgIGNvbnN0IGl0ID0gaXRlbVxuICAgIGNvbnN0IHAgPSBpdC5wcm9wc1xuICAgIGNvbnN0IGVsID0gaXQuZWxcbiAgICBjb25zdCBwYXJlbnQgPSBpdC5wYXJlbnRcbiAgICBjb25zdCBpc0N1c3RvbSA9ICF0aGlzLmlzV2luICYmIHAucG9zaXRpb25WYWwgPT09ICdmaXhlZCdcbiAgICBjb25zdCBpc1RvcCA9IHAudmVydGljYWxQb3NpdGlvbiAhPT0gJ2JvdHRvbSdcbiAgICBjb25zdCBzY3JvbGxFbE9mZnNldCA9IGlzQ3VzdG9tID8gdGhpcy5nZXRUb3BQb3NpdGlvbihwLnNjcm9sbEVsKSA6IDBcbiAgICBjb25zdCBzdGlja3lTdGFydCA9IGlzQ3VzdG9tXG4gICAgICA/IHRoaXMuZ2V0VG9wUG9zaXRpb24ocGFyZW50KSAtIHNjcm9sbEVsT2Zmc2V0XG4gICAgICA6IHRoaXMuZ2V0VG9wUG9zaXRpb24ocGFyZW50KVxuICAgIGNvbnN0IHN0aWNreUNoYW5nZU9mZnNldCA9IHAuY3VzdG9tU3RpY2t5Q2hhbmdlTnVtYmVyICE9PSBudWxsXG4gICAgICA/IHAuY3VzdG9tU3RpY2t5Q2hhbmdlTnVtYmVyXG4gICAgICA6IGVsLm9mZnNldEhlaWdodFxuICAgIGNvbnN0IHBhcmVudEJvdHRvbSA9IHN0aWNreVN0YXJ0ICsgcGFyZW50Lm9mZnNldEhlaWdodFxuICAgIGl0Lm9mZnNldCA9ICFpc0N1c3RvbSA/IHNjcm9sbEVsT2Zmc2V0ICsgcC5zdGlja3lCaXRTdGlja3lPZmZzZXQgOiAwXG4gICAgaXQuc3RpY2t5U3RhcnQgPSBpc1RvcCA/IHN0aWNreVN0YXJ0IC0gaXQub2Zmc2V0IDogMFxuICAgIGl0LnN0aWNreUNoYW5nZSA9IGl0LnN0aWNreVN0YXJ0ICsgc3RpY2t5Q2hhbmdlT2Zmc2V0XG4gICAgaXQuc3RpY2t5U3RvcCA9IGlzVG9wXG4gICAgICA/IHBhcmVudEJvdHRvbSAtIChlbC5vZmZzZXRIZWlnaHQgKyBpdC5vZmZzZXQpXG4gICAgICA6IHBhcmVudEJvdHRvbSAtIHdpbmRvdy5pbm5lckhlaWdodFxuICB9XG5cbiAgLypcbiAgICB0b2dnbGVDbGFzc2VzIOKalu+4j1xuICAgIC0tLVxuICAgIHRvZ2dsZXMgY2x
24510hc3NlcyAoZm9yIG9sZGVyIGJyb3dzZXIgc3VwcG9ydClcbiAgICByID0gcmVtb3ZlZCBjbGFzc1xuICAgIGEgPSBhZGRlZCBjbGFzc1xuICAqL1xuICB0b2dnbGVDbGFzc2VzIChlbCwgciwgYSkge1xuICAgIGNvbnN0IGUgPSBlbFxuICAgIGNvbnN0IGNBcnJheSA9IGUuY2xhc3NOYW1lLnNwbGl0KCcgJylcbiAgICBpZiAoYSAmJiBjQXJyYXkuaW5kZXhPZihhKSA9PT0gLTEpIGNBcnJheS5wdXNoKGEpXG4gICAgY29uc3Qgckl0ZW0gPSBjQXJyYXkuaW5kZXhPZihyKVxuICAgIGlmIChySXRlbSAhPT0gLTEpIGNBcnJheS5zcGxpY2Uockl0ZW0sIDEpXG4gICAgZS5jbGFzc05hbWUgPSBjQXJyYXkuam9pbignICcpXG4gIH1cblxuICAvKlxuICAgIG1hbmFnZVN0YXRlIPCfk51cbiAgICAtLS1cbiAgICAtIGRlZmluZXMgdGhlIHN0YXRlXG4gICAgICAtIG5vcm1hbFxuICAgICAgLSBzdGlja3lcbiAgICAgIC0gc3R1Y2tcbiAgKi9cbiAgbWFuYWdlU3RhdGUgKGl0ZW0pIHtcbiAgICAvLyBjYWNoZSBvYmplY3RcbiAgICBjb25zdCBpdCA9IGl0ZW1cbiAgICBjb25zdCBwID0gaXQucHJvcHNcbiAgICBjb25zdCBzdGF0ZSA9IGl0LnN0YXRlXG4gICAgY29uc3Qgc3RhdGVDaGFuZ2UgPSBpdC5zdGF0ZUNoYW5nZVxuICAgIGNvbnN0IHN0YXJ0ID0gaXQuc3RpY2t5U3RhcnRcbiAgICBjb25zdCBjaGFuZ2UgPSBpdC5zdGlja3lDaGFuZ2VcbiAgICBjb25zdCBzdG9wID0gaXQuc3RpY2t5U3RvcFxuICAgIC8vIGNhY2hlIHByb3BzXG4gICAgY29uc3QgcHYgPSBwLnBvc2l0aW9uVmFsXG4gICAgY29uc3Qgc2UgPSBwLnNjcm9sbEVsXG4gICAgY29uc3Qgc3RpY2t5ID0gcC5zdGlja3lDbGFzc1xuICAgIGNvbnN0IHN0aWNreUNoYW5nZSA9IHAuc3RpY2t5Q2hhbmdlQ2xhc3NcbiAgICBjb25zdCBzdHVjayA9IHAuc3R1Y2tDbGFzc1xuICAgIGNvbnN0IHZwID0gcC52ZXJ0aWNhbFBvc2l0aW9uXG4gICAgY29uc3QgaXNUb3AgPSB2cCAhPT0gJ2JvdHRvbSdcbiAgICBjb25zdCBhUyA9IHAuYXBwbHlTdHlsZVxuICAgIGNvbnN0IG5zID0gcC5ub1N0eWxlc1xuICAgIC8qXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgIC0tLVxuICAgICAgLSB1c2UgckFGXG4gICAgICAtIG9yIHN0dWIgckFGXG4gICAgKi9cbiAgICBjb25zdCByQUZTdHViID0gZnVuY3Rpb24gckFGRHVtbXkgKGYpIHsgZigpIH1cbiAgICBjb25zdCByQUYgPSAhdGhpcy5pc1dpblxuICAgICAgPyByQUZTdHViXG4gICAgICA6IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgckFGU3R1YlxuXG4gICAgLypcbiAgICAgIGRlZmluZSBzY3JvbGwgdmFyc1xuICAgICAgLS0tXG4gICAgICAtIHNjcm9sbFxuICAgICAgLSBub3RTdGlja3lcbiAgICAgIC0gaXNTdGlja3lcbiAgICAgIC0gaXNTdHVja1xuICAgICovXG4gICAgY29uc3Qgc2Nyb2xsID0gdGhpcy5pc1dpbiA/ICh3aW5kb3cuc2Nyb2xsWSB8fCB3aW5kb3cucGFnZVlPZmZzZXQpIDogc2Uuc2Nyb2xsVG9wXG4gICAgY29uc3Qgbm90U3RpY2t5ID0gc2Nyb2xsID4gc3RhcnQgJiYgc2Nyb2xsIDwgc3RvcCAmJiAoc3RhdGUgPT09ICdkZWZhdWx0JyB8fCBzdGF0ZSA9PT0gJ3N0dWNrJylcbiAgICBjb25zdCBpc1N0aWNreSA9IGlzVG9wICYmIHNjcm9sbCA8PSBzdGFydCAmJiAoc3RhdGUgPT09ICdzdGlja3knIHx8IHN0YXRlID09PSAnc3R1Y2snKVxuICAgIGNvbnN0IGlzU3R1Y2sgPSBzY3JvbGwgPj0gc3RvcCAmJiBzdGF0ZSA9PT0gJ3N0aWNreSdcbiAgICAvKlxuICAgICAgVW5uYW1lZCBhcnJvdyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgYmxvY2tcbiAgICAgIC0tLVxuICAgICAgLSBoZWxwIHdhbnRlZCBvciBkaXNjdXNzaW9uXG4gICAgICAtIHZpZXcgdGVzdC5zdGlja3liaXRzLmpzXG4gICAgICAgIC0gYHN0aWNreWJpdHMgLm1hbmFnZVN0YXRlICBgcG9zaXRpb246IGZpeGVkYCBpbnRlcmZhY2VgIGZvciBtb3JlIGF3YXJlbmVzcyDwn5GAXG4gICAgKi9cbiAgICBpZiAobm90U3RpY2t5KSB7XG4gICAgICBpdC5zdGF0ZSA9ICdzdGlja3knXG4gICAgfSBlbHNlIGlmIChpc1N0aWNreSkge1xuICAgICAgaXQuc3RhdGUgPSAnZGVmYXVsdCdcbiAgICB9IGVsc2UgaWYgKGlzU3R1Y2spIHtcbiAgICAgIGl0LnN0YXRlID0gJ3N0dWNrJ1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RpY2t5Q2hhbmdlID0gc2Nyb2xsID49IGNoYW5nZSAmJiBzY3JvbGwgPD0gc3RvcFxuICAgIGNvbnN0IGlzTm90U3RpY2t5Q2hhbmdlID0gc2Nyb2xsIDwgY2hhbmdlIC8gMiB8fCBzY3JvbGwgPiBzdG9wXG4gICAgaWYgKGlzTm90U3RpY2t5Q2hhbmdlKSB7XG4gICAgICBpdC5zdGF0ZUNoYW5nZSA9ICdkZWZhdWx0J1xuICAgIH0gZWxzZSBpZiAoaXNTdGlja3lDaGFuZ2UpIHtcbiAgICAgIGl0LnN0YXRlQ2hhbmdlID0gJ3N0aWNreSdcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFwcGx5IG5ldyBzdHlsZXMgaWYgdGhlIHN0YXRlIGhhcyBjaGFuZ2VkXG4gICAgaWYgKHN0YXRlID09PSBpdC5zdGF0ZSAmJiBzdGF0ZUNoYW5nZSA9PT0gaXQuc3RhdGVDaGFuZ2UpIHJldHVyblxuICAgI
24510HJBRigoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZVN0eWxlcyA9IHtcbiAgICAgICAgc3RpY2t5OiB7XG4gICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcHYsXG4gICAgICAgICAgICB0b3A6ICcnLFxuICAgICAgICAgICAgYm90dG9tOiAnJyxcbiAgICAgICAgICAgIFt2cF06IGAke3Auc3RpY2t5Qml0U3RpY2t5T2Zmc2V0fXB4YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgW3N0aWNreV06IHRydWUgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgW3ZwXTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgc3R1Y2s6IHtcbiAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgIFt2cF06ICcnLFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBsZWF2ZSAhdGhpcy5pc1dpblxuICAgICAgICAgICAgICogQGV4YW1wbGUgaHR0cHM6Ly9jb2RlcGVuLmlvL3lvd2FpbndyaWdodC9wZW4vRVh6SmViXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC4uLigocHYgPT09ICdmaXhlZCcgJiYgIW5zKSB8fCAhdGhpcy5pc1dpbiA/IHtcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIHRvcDogJycsXG4gICAgICAgICAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgICAgICAgfSA6IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgW3N0dWNrXTogdHJ1ZSB9LFxuICAgICAgICB9LFxuICAgICAgfVxuXG4gICAgICBpZiAocHYgPT09ICdmaXhlZCcpIHtcbiAgICAgICAgc3RhdGVTdHlsZXMuZGVmYXVsdC5zdHlsZXMucG9zaXRpb24gPSAnJ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdHlsZSA9IHN0YXRlU3R5bGVzW2l0LnN0YXRlXVxuICAgICAgc3R5bGUuY2xhc3NlcyA9IHtcbiAgICAgICAgW3N0dWNrXTogISFzdHlsZS5jbGFzc2VzW3N0dWNrXSxcbiAgICAgICAgW3N0aWNreV06ICEhc3R5bGUuY2xhc3Nlc1tzdGlja3ldLFxuICAgICAgICBbc3RpY2t5Q2hhbmdlXTogaXNTdGlja3lDaGFuZ2UsXG4gICAgICB9XG5cbiAgICAgIGFTKHN0eWxlLCBpdGVtKVxuICAgIH0pXG4gIH1cblxuICAvKlxuICAgIGFwcGx5U3R5bGVcbiAgICAtLS1cbiAgICAtIGFwcGx5IHRoZSBnaXZlbiBzdHlsZXMgYW5kIGNsYXNzZXMgdG8gdGhlIGVsZW1lbnRcbiAgKi9cbiAgYXBwbHlTdHlsZSAoeyBzdHlsZXMsIGNsYXNzZXMgfSwgaXRlbSkge1xuICAgIC8vIGNhY2hlIG9iamVjdFxuICAgIGNvbnN0IGl0ID0gaXRlbVxuICAgIGNvbnN0IGUgPSBpdC5lbFxuICAgIGNvbnN0IHAgPSBpdC5wcm9wc1xuICAgIGNvbnN0IHN0bCA9IGUuc3R5bGVcbiAgICAvLyBjYWNoZSBwcm9wc1xuICAgIGNvbnN0IG5zID0gcC5ub1N0eWxlc1xuXG4gICAgY29uc3QgY0FycmF5ID0gZS5jbGFzc05hbWUuc3BsaXQoJyAnKVxuICAgIC8vIERpc2FibGUgZHVlIHRvIGJ1ZyB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBlc2xpbnQtc2NvcGUgYW5kIGZvciAuLi4gaW5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMTIxMTdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBmb3IgKGNvbnN0IGNscyBpbiBjbGFzc2VzKSB7XG4gICAgICBjb25zdCBhZGRDbGFzcyA9IGNsYXNzZXNbY2xzXVxuICAgICAgaWYgKGFkZENsYXNzKSB7XG4gICAgICAgIGlmIChjQXJyYXkuaW5kZXhPZihjbHMpID09PSAtMSkgY0FycmF5LnB1c2goY2xzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY0FycmF5LmluZGV4T2YoY2xzKVxuICAgICAgICBpZiAoaWR4ICE9PSAtMSkgY0FycmF5LnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZS5jbGFzc05hbWUgPSBjQXJyYXkuam9pbignICcpXG5cbiAgICBpZiAoc3R5bGVzWydwb3NpdGlvbiddKSB7XG4gICAgICBzdGxbJ3Bvc2l0aW9uJ10gPSBzdHlsZXNbJ3Bvc2l0aW9uJ11cbiAgICB9XG5cbiAgICBpZiAobnMpIHJldHVyblxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGVzKSB7XG4gICAgICBzdGxba2V5XSA9IHN0eWxlc1trZXldXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlICh1cGRhdGVkUHJvcHMgPSBudWxsKSB7XG4gICAgdGhpcy5pbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2UpID0+IHtcbiAgICAgIHRoaXMuY29tcHV0ZVNjcm9sbE9mZnNldHMoaW5zdGFuY2UpXG4gICAgICBpZiAodXBkYXRlZFByb3BzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgICBmb3IgKGNvbnN0IHVwZGF0ZWRQcm9wIGluIHVwZGF0ZWRQcm9wcykge1xuICAgICAgICAgIGluc3RhbmNlLnByb3BzW3VwZGF0ZWRQcm9wXSA9IHVwZGF0ZWRQcm9wc1t1cGRhdGVkUHJvcF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLypcbiAgICByZW1vdmVzIGFuIGluc3RhbmNlIPCfkYtcbiAgICAtLS0tLS0tLVxuICAgIC0gY2xlYW51cCBpbnN0YW5jZVxuICAqL1xuICByZW1vdmVJbnN0YW5jZSAoaW5zdGFuY2UpIHtcbiAgICBjb25zdCBlID0gaW5zdGFuY2UuZWxcbiAgICBjb25zdCBwID0gaW5zdGFuY2UucHJvcHNcblxuICAgIHRoaXMuYXBwbHlTdHlsZShcbiAgICAgIHtcbiAgICAgICAgc3R5bGVzOiB7IHBvc2l0aW9uOiAnJywgW3AudmVydGljYWxQb3NpdGlvbl06ICcnIH0sXG4gICAgICAgIGNsYXNzZXM6IHsgW3Auc3RpY2t5Q2xhc3NdOiAnJywgW3Auc3R1Y2tDbGFzc106ICcnIH0sXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2UsXG4gICAgKVxuXG4gICAgdGhpcy50b2dnbGVDbGFzc2VzKGUucGFyZW50Tm9kZSwgcC5wYXJlbnRDbGFzcylcbiAgfVxuXG4gIC8qXG4gICAgY2xlYW51cCDwn5uBXG4gICAgLS0tLS0tLS1cbiAgICAtIGNsZWFucyB1cCBlYWNoIGluc3RhbmNlXG4gICAgLSBjbGVhcnMgaW5zdGFuY2VcbiAgKi9cbiAgY2xlYW51cCAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmluc3RhbmNlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlc1tpXVxuICAgICAgaWYgKGluc3RhbmNlLnN0YXRlQ29udGFpbmVyKSB7XG4gICAgICAgIGluc3RhbmNlLnByb3BzLnNjcm9sbEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnN0YXRlQ29udGFpbmVyKVxuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVJbnN0YW5jZShpbnN0YW5jZSlcbiAgICB9XG4gICAgdGhpcy5tYW5hZ2VTdGF0ZSA9IGZhbHNlXG4gICAgdGhpcy5pbnN0YW5jZXMgPSBbXVxuICB9XG59XG5cbi8qXG4gIGV4cG9ydFxuICAtLS0tLS0tLVxuICBleHBvcnRzIFN0aWNrQml0cyB0byBiZSB1c2VkIPCfj4FcbiovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGlja3liaXRzICh0YXJnZXQsIG8pIHtcbiAgcmV0dXJuIG5ldyBTdGlja3liaXRzKHRhcmdldCwgbylcbn1cbiIsImZ1bmN0aW9uIEhDVGVzdCgpIHtcbiAgdmFyIG9iakRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBvYmpEaXYuc3R5bGUuY29sb3IgPSAncmdiYSgyNDUsMjQwLDI1NSwwKSc7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob2JqRGl2KTtcbiAgdmFyIHN0ckNvbG9yID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgPyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG9iakRpdiwgbnVsbCkuY29sb3IgOiBvYmpEaXYuY3VycmVudFN0eWxlLmNvbG9yO1xuICBzdHJDb2xvciA9IHN0ckNvbG9yLnJlcGxhY2UoLyAvZywgJycpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG9iakRpdik7XG4gIGlmIChzdHJDb2xvciAhPT0gJ3JnYmEoMjQ1LDI0MCwyNTUsMCknKSB7IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnaGNtLXRydWUnKTsgfVxufVxucmVhZHkoZnVuY3Rpb24oKSB7IEhDVGVzdCgpOyB9KTsiLCJcblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGtvbXBsZXhlIExlYWZsZXQtS2FydGVcbndpbmRvdy5pbml0TGVhZmxldEV4dGVuZGVkI
24510D0gZnVuY3Rpb24gKHJvb3RDb250YWluZXIsYWN0aXZlID0gZmFsc2UpIHtcblxuICBpZiAodHlwZW9mKHJvb3RDb250YWluZXIpID09ICd1bmRlZmluZWQnIHx8IHJvb3RDb250YWluZXIgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBtYXBJRCA9ICdtYXAnICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwKTtcblxuICBsZXQgY2F0ZWdvcnlMaXN0Q29udGFpbmVyID0gcm9vdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcubWFwLXdpdGgtbWFya2VyLWNhdGVnb3JpZScpO1xuXG4gIGlmICghY2F0ZWdvcnlMaXN0Q29udGFpbmVyLmxlbmd0aCkge1xuXG4gICAgLy8gTGFiZWxzIHp3aXNjaGVuc3BlaWNoZXJuXG4gICAgbGV0IGxhYmVsTWFwID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtbWFwJyk7XG4gICAgbGV0IG1hcmtlclRpdGxlU3VmZml4ID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFya2VyLXRpdGxlLXN1ZmZpeCcpO1xuXG5cbiAgICAvL1xuICAgIC8vIFppZWxjb250YWluZXIgZsO8ciBLYXJ0ZSBlcnN0ZWxsZW4gdW5kIGltIERvbSBlaW5mw7xnZW5cbiAgICBsZXQgbWFwQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbWFwQ29udGFpbmVyLmlkID0gJ21hcC1leHRlbmRlZCcgKyBtYXBJRDtcbiAgICBtYXBDb250YWluZXIuc2V0QXR0cmlidXRlKCdyb2xlJywnYXBwbGljYXRpb24nKTtcbiAgICBtYXBDb250YWluZXIuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyxsYWJlbE1hcCk7XG5cbiAgICByb290Q29udGFpbmVyLmluc2VydEJlZm9yZShtYXBDb250YWluZXIsIHJvb3RDb250YWluZXIuZmlyc3RDaGlsZCk7XG5cblxuICAgIC8vXG4gICAgLy8gTGF5ZXIgdW5kIE1hcmtlciBlcnN0ZWxsZW5cbiAgICBsZXQgbDtcbiAgICBsZXQgbWFya2VycyA9IEwuZmVhdHVyZUdyb3VwKCk7XG4gICAgbGV0IG1hcmtlckl0ZW1zID0gcm9vdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdsaVtkYXRhLWxhdF0nKTtcblxuICAgIGlmICggbWFya2VySXRlbXMubGVuZ3RoID4gMCApIHtcblxuICAgICAgLy8gVGV4dGUgdW5kIERhdGVuIGF1c2xlc2VuXG4gICAgICBsZXQgbWFya2VySWNvb
24510iA9IHJvb3RDb250YWluZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKTtcbiAgICAgIGxldCBtYXJrZXJJY29uV2lkdGggPSByb290Q29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZGF0YS1pY29uLXdpZHRoJyk7XG4gICAgICBsZXQgbWFya2VySWNvbkhlaWdodCA9IHJvb3RDb250YWluZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24taGVpZ2h0Jyk7XG5cbiAgICAgIC8vIEljb25cbiAgICAgIGxldCBpY29uID0gTC5pY29uKHtcbiAgICAgICAgaWNvblVybDogbWFya2VySWNvbixcbiAgICAgICAgaWNvblNpemU6IFttYXJrZXJJY29uV2lkdGgsIG1hcmtlckljb25IZWlnaHRdXG4gICAgICB9KTtcblxuICAgICAgbGV0IG07XG4gICAgICBmb3IgKG0gPSAwOyBtIDwgbWFya2VySXRlbXMubGVuZ3RoOyBtKyspIHtcblxuICAgICAgICBsZXQgbWFya2VyTG9uID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLWxvbicpO1xuICAgICAgICBsZXQgbWFya2VyTGF0ID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLWxhdCcpO1xuICAgICAgICBsZXQgbWFya2VyVGl0bGUgID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlJyk7XG5cbiAgICAgICAgbGV0IG1hcmtlck9iaiA9IEwubWFya2VyKFttYXJrZXJMYXQsIG1hcmtlckxvbl0se1xuICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgYWx0OiBtYXJrZXJUaXRsZSArICcgJyArIG1hcmtlclRpdGxlU3VmZml4XG4gICAgICAgIH0pLmJpbmRQb3B1cChtYXJrZXJJdGVtc1ttXS5pbm5lckhUTUwpLmFkZFRvKG1hcmtlcnMpO1xuICAgICAgICBtYXJrZXJPYmouYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuXG4gICAgfVxuXG5cblxuICAgIC8vXG4gICAgLy8gQ2FsbGJhY2stRnVua3Rpb25lblxuICAgIGxldCBtYXBPbkxvYWQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIFxuICAgICAgbGV0IHNraXBUb1N0YXJ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgc2tpcFRvU3RhcnQuaW5uZXJIVE1MID0gbGVhZmxldC5za2lwVG9TdGFydDtcbiAgICAgIHNraXBUb1N0YXJ0LmhyZWYgPSAnIycgKyBtYXBDb250YWluZXIuaWQ7XG4gICAgICBza2lwVG9TdGFydC5jbGFzc0xpc3QuYWRkKCdsZWFmbGV0LXNraXAtdG8tc3RhcnQnKTtcbiAgICAgIHJvb3RDb250YWluZXIuaW5zZXJ0QmVmb3JlKHNraXBUb1N0YXJ0LCBtYXBDb250YWluZXIubmV4dFNpYmxpbmcpO1xuXG4gICAgICBsZXQgc2tpcFRvRW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgc2tpcFRvRW5kLmlubmVySFRNTCA9IGxlYWZsZXQuc2tpcFRvRW5kO1xuICAgICAgc2tpcFRvRW5kLmhyZWYgPSAnIycgKyBtYXBDb250YWluZXIuaWQ7XG4gICAgICBza2lwVG9FbmQuY2xhc3NMaXN0LmFkZCgnbGVhZmxldC1za2lwLXRvLWVuZCcpO1xuICAgICAgcm9vdENvbnRhaW5lci5pbnNlcnRCZWZvcmUoc2tpcFRvRW5kLCBtYXBDb250YWluZXIpO1xuXG4gICAgICBza2lwVG9TdGFydC5vbmNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgc2tpcFRvRW5kLmZvY3VzKCk7IH07XG4gICAgICBza2lwVG9FbmQub25jbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHNraXBUb1N0YXJ0LmZvY3VzKCk7IH07XG5cbiAgICB9XG5cblxuICAgIC8vIGRpdmVyc2UgS2FydGVuIGFscyDDnGJlcnNpY2h0OiBodHRwczovL2xlYWZsZXQtZXh0cmFzLmdpdGh1Yi5pby9sZWFmbGV0LXByb3ZpZGVycy9wcmV2aWV3L1xuICAgIGxldCBiYXNlTGF5ZXIgPSBMLnRpbGVMYXllcignaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLmRlL3RpbGVzL29zbWRlL3t6fS97eH0ve3l9LnBuZycsIHthdHRyaWJ1dGlvbjogJyZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJ30pO1xuXG4gICAgbGV0IG1hcCA9IEwubWFwKCdtYXAtZXh0ZW5kZWQnICsgbWFwSUQsIHtcbiAgICAgIGxheWVyczogW2Jhc2VMYXllciwgbWFya2Vyc10sXG4gICAgICBjZW50ZXI6IG1hcmtlcnMuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCksXG4gICAgICB6b29tQ29udHJvbDogZmFsc2UsXG4gICAgICBzY3JvbGxXaGVlbFpvb206IGZhbHNlLFxuICAgICAgc2xlZXA6IHRydWUsXG4gICAgICBzbGVlcE9wYWNpdHk6IC42LFxuICAgICAgc2xlZXBOb3RlU3R5bGU6IHtcbiAgICAgICAgbWF4V2lkdGg6ICcxMHJlbScsXG4gICAgICAgIG9wYWNpdHk6IDFcbiAgICAgIH0sXG4gICAgICB3YWtlTWVzc2FnZTogbGVhZmxldC53YWtlTWVzc2FnZSxcbiAgICAgIHdha2VNZXNzYWdlVG91Y2g6IGxlYWZsZXQud2FrZU1lc3NhZ2VUb3VjaFxuICAgIH0pXG5cbiAgICBtYXAub24oJ2xvYWQnLG1hcE9uTG9hZCk7XG5cbiAgICBMLmNvbnRyb2wuem9vbSh7XG4gICAgICB6b29tSW5UaXRsZTogbGVhZmxldC56b29tSW5UaXRsZSxcbiAgICAgIHpvb21PdXRUaXRsZTogbGVhZmxldC56b29tT3V0VGl0bGVcbiAgICB9KS5hZGRUbyhtYXApO1xuXG4gICAgbWFwLmZpdEJvdW5kcyhtYXJrZXJzLmdldEJvdW5kcygpLnBhZCguMSkpO1xuXG4gICAgLy9cbiAgICAvLyBCYXJyaWVyZWZyZWloZWl0XG4gICAgYmFzZUxheWVyLm9uKCd0aWxlbG9hZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBldmVudC50aWxlLnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgIH0pO1xuICAgIFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sZWFmbGV0LXNoYWRvdy1wYW5lJykucmVtb3ZlKCk7XG5cbiAgICAvLyBhcmlhLWxhYmVsIGFtIFNjaGxpZcOfZW4tQnV0dG9uIGVyZ8OkbnplblxuICAgIC8vIGZvY3VzIGF1ZiBkYXMgRmVuc3RlciBsZWdlblxuICAgIG1hcC5vbigncG9wdXBvcGVuJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgZXZlbnQucG9wdXAuX2Nsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsbGVhZmxldC5jbG9zZVBvcHVwTGFiZWwpO1xuICAgICAgbGV0IGNsaWNrZWRNYXJrZXIgPSBldmVudC5wb3B1cC
245105fc291cmNlLl9pY29uO1xuICAgICAgZXZlbnQucG9wdXAuX2Nsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihldmVudCl7XG4gICAgICAgIGNsaWNrZWRNYXJrZXIuZm9jdXMoKTtcbiAgICAgIH0se29uY2U6dHJ1ZX0pO1xuXG4gICAgICBldmVudC5wb3B1cC5fd3JhcHBlci5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywnMCcpO1xuICAgICAgZXZlbnQucG9wdXAuX3dyYXBwZXIuZm9jdXMoKTtcblxuICAgIH0pO1xuXG4gICAgLy8gQXJpYS1Sb2xlIGbDvHIgZGllIE1hcmtlclxuICAgIC8vIFRleHQgenVtIEJlaGViZW4gdm9uIEZlaGxlcm4gaW4gTlZEQVxuICAgIGxldCBtYXJrZXIgPSBtYXBDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmxlYWZsZXQtbWFya2VyLWljb24ubGVhZmxldC1pbnRlcmFjdGl2ZScpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2VyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrZXJbaV0uc2V0QXR0cmlidXRlKCdyb2xlJywnYnV0dG9uJyk7XG4gICAgfVxuXG4gIH1cblxufVxuXG5cbiIsIlxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gZWluZmFjaGUgTGVhZmxldC1LYXJ0ZVxud2luZG93LmluaXRMZWFmbGV0ID0gZnVuY3Rpb24gKHJvb3RDb250YWluZXIsYWN0aXZlID0gZmFsc2UpIHtcblxuICBpZiAodHlwZW9mKHJvb3RDb250YWluZXIpID09ICd1bmRlZmluZWQnIHx8IHJvb3RDb250YWluZXIgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBtYXBJRCA9ICdtYXAnICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwKTtcblxuICAvLyBMYWJlbHMgendpc2NoZW5zcGVpY2hlcm5cbiAgbGV0IGxhYmVsTWFwID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtbWFwJyk7XG4gIGxldCBtYXJrZXJUaXRsZVN1ZmZpeCA9IHJvb3RDb250YWluZXIuZ2V0QXR0cmlidXRlKCdkYXRhLW1hcmtlci10aXRsZS1zdWZmaXgnKTtcblxuICAvL1xuICAvLyBaaWVsY29udGFpbmVyIGbDvHIgS2FydGUgZXJzdGVsbGVuIHVuZCBpbSBEb20gZWluZsO8Z2VuXG4gIGxldCBtYXBDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbWFwQ29udGFpbmVyLmlkID0gJ21hcCcgKyBtYXBJRDtcbiAgbWFwQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgncm9sZScsJ2FwcGxpY2F0aW9uJyk7XG4gIG1hcENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLGxhYmVsTWFwKTtcblxuICByb290Q29udGFpbmVyLmluc2VydEJlZm9yZShtYXBDb250YWluZXIsIHJvb3RDb250YWluZXIuZmlyc3RDaGlsZCk7XG5cblxuICAvL1xuICAvLyBMYXllciB1bmQgTWFya2VyIGVyc3RlbGxlblxuICBsZXQgbWFya2VySXRlbXMgPSByb290Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hNS1tYXAtbWFya2VyJyk7XG4gIGxldCBsYXllcjtcblxuICBpZiAoIG1hcmtlckl0ZW1zLmxlbmd0aCA+IDAgKSB7XG5cbiAgICAvLyBMYXllciBlcnN0ZWxsZW5cbiAgICBsYXllciA9IEwubGF5ZXJHcm91cCgpO1xuXG4gICAgbGV0IG07XG4gICAgZm9yIChtID0gMDsgbSA8IG1hcmtlckl0ZW1zLmxlbmd0aDsgbSsrKSB7XG5cbiAgICAgIGxldCBtYXJrZXJMb24gPSBtYXJrZXJJdGVtc1ttXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbG9uJyk7XG4gICAgICBsZXQgbWFya2VyTGF0ID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLWxhdCcpO1xuICAgICAgbGV0IG1hcmtlclRpdGxlICA9IG1hcmtlckl0ZW1zW21dLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpO1xuICAgICAgbGV0IG1hcmtlckljb24gPSBtYXJrZXJJdGVtc1ttXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWNvbicpO1xuICAgICAgbGV0IG1hcmtlckljb25XaWR0aCA9IG1hcmtlckl0ZW1zW21dLmdldEF0dHJpYnV0ZSgnZGF0YS1pY29uLXdpZHRoJyk7XG4gICAgICBsZXQgbWFya2VySWNvbkhlaWdodCA9IG1hcmtlckl0ZW1zW21dLmdldEF0dHJpYnV0ZSgnZGF0YS1pY29uLWhlaWdodCcpO1xuXG4gICAgICAvLyBRdWVsbGVsZW1lbnQgYXVzYmxlbmRlblxuICAgICAgbWFya2VySXRlbXNbbV0uc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsJ3RydWUnKTtcblxuICAgICAgLy8gSWNvblxuICAgICAgbGV0IGljb24gPSBMLmljb24oe1xuICAgICAgICBpY29uVXJsOiBtYXJrZXJJY29uLFxuICAgICAgICBpY29uU2l6ZTogW21hcmtlckljb25XaWR0aCwgbWFya2VySWNvbkhlaWdodF0sXG4gICAgICAgIGNsYXNzTmFtZTogJ21hcmtlci0nICsgbVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBtYXJrZXJPYmogPSBMLm1hcmtlcihbbWFya2VyTGF0LCBtYXJrZXJMb25dLHtcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgYWx0OiBtYXJrZXJUaXRsZSArICcgJyArIG1hcmtlclRpdGxlU3VmZml4XG4gICAgICB9KS5iaW5kUG9wdXAobWFya2VySXRlbXNbbV0uaW5uZXJIVE1MKS5hZGRUbyhsYXllcilcbiAgICAgIG1hcmtlck9iai5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgfSk7XG5cbiAgICB9XG5cbiAgfVxuXG5cbiAgLy9cbiAgLy8gS2FydGUgZXJzdGVsbGVuXG4gIGxldCBpbml0TGF0ID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdC1sYXQnKTtcbiAgbGV0IGluaXRMb24gPSByb290Q29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZGF0YS1pbml0LWxvbicpO1xuICBsZXQgaW5pdFpvb20gPSByb290Q29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZGF0YS1pbml0LXpvb20nKTtcblxuICBsZXQgYmFzZUxheWVyID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywge2F0dHJpYnV0aW9uOiAnJmNvcHk7IDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnfSk7XG5cbiAgbGV0IG1hcCA9IEwubWFwKCdtYXAnICsgbWFwSUQsIHtcbiAgICBsYXllcnM6IFtiYXNlTGF5ZXIsIGxheWVyXSxcbiAgICB6b29tQ29udHJvbDogZmFsc2UsXG4gICAgc2Nyb2xsV2hlZWxab29tOiBmYWxzZSxcbiAgICBzbGVlcDogdHJ1ZSxcbiAgICBzbGVlcE9wYWNpdHk6IC45LFxuICAgIHNsZWVwTm90ZVN0eWxlOiB7XG4gICAgICBtYXhXaWR0aDogJzEwcmVtJyxcbiAgICAgIG9wYWNpdHk6IDFcbiAgICB9LFxuICAgIHdha2VNZXNzYWdlOiBsZWFmbGV0Lndha2VNZXNzYWdlLF
24510xuICAgIHdha2VNZXNzYWdlVG91Y2g6IGxlYWZsZXQud2FrZU1lc3NhZ2VUb3VjaFxuICB9KVxuXG4gIEwuY29udHJvbC5mdWxsc2NyZWVuKHtcbiAgICBwb3NpdGlvbjogJ3RvcGxlZnQnLFxuICAgIHRpdGxlOiBsZWFmbGV0LmZ1bGxTY3JlZW5UaXRsZSxcbiAgICB0aXRsZUNhbmNlbDogbGVhZmxldC5mdWxsU2NyZWVuVGl0bGVDYW5jZWxcbiAgfSkuYWRkVG8obWFwKTtcblxuICBtYXAub24oJ2VudGVyRnVsbHNjcmVlbicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICBtYXBDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbGVhZmxldC1mdWxsc2NyZWVuJyk7XG4gIH0pO1xuXG4gIG1hcC5vbignZXhpdEZ1bGxzY3JlZW4nLCBmdW5jdGlvbihldmVudCl7XG4gICAgbWFwQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2xlYWZsZXQtZnVsbHNjcmVlbicpO1xuICB9KTtcblxuICBMLmNvbnRyb2wuem9vbSh7XG4gICAgem9vbUluVGl0bGU6IGxlYWZsZXQuem9vbUluVGl0bGUsXG4gICAgem9vbU91dFRpdGxlOiBsZWFmbGV0Lnpvb21PdXRUaXRsZVxuICB9KS5hZGRUbyhtYXApO1xuXG4gIC8vXG4gIC8vIEJhcnJpZXJlZnJlaWhlaXRcbiAgYmFzZUxheWVyLm9uKCd0aWxlbG9hZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQudGlsZS5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgfSk7XG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxlYWZsZXQtc2hhZG93LXBhbmUnKS5yZW1vdmUoKTtcblxuICBtYXAub24oJ3BvcHVwb3BlbicsZnVuY3Rpb24oZXZlbnQpIHsgXG5cbiAgICBldmVudC5wb3B1cC5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyxsZWFmbGV0LmNsb3NlUG9wdXBMYWJlbCk7XG4gICAgbGV0IGNsaWNrZWRNYXJrZXIgPSBldmVudC5wb3B1cC5fc291cmNlLl9pY29uO1xuICAgIGV2ZW50LnBvcHVwLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgY2xpY2tlZE1hcmtlci5mb2N1cygpO1xuICAgIH0se29uY2U6dHJ1ZX0pO1xuXG4gICAgZXZlbnQucG9wdXAuX3dyYXBwZXIuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsJzAnKTtcbiAgICBldmVudC5wb3B1cC5fd3JhcHBlci5mb2N1cygpO1xuXG4gIH0pO1xuXG4gIC8vIG5hY2ggZGllc2VyIEFud2Vpc3VuZyB3aXJkIGRlciBMb2FkLUV2ZW50IGF1c2dlZsO8aHJ0XG4gIG1hcC5zZXRWaWV3KFtpbml0TGF0LGluaXRMb25dLCBpbml0Wm9vbSk7XG5cbiAgLy8gVmlld3BvcnQgbmV1IHNldHp0ZW4sIGZhbGxzIGRpZSBLYXJ0ZSBpbiBlaW5lbSBkZXRhaWxzLUVsZW1lbnQgbGllZ3QgdW5kIGRpZXNlcyBnZcO2ZmZuZXQgd2lyZFxuICBpZiAoIHJvb3RDb250YWluZXIuY2xvc2VzdCgnZGV0YWlscycpICkge1xuICAgIHZhciBkZXRhaWxzQ29udGFpbmVyID0gcm9vdENvbnRhaW5lci5jbG9zZXN0KCdkZXRhaWxzJyk7XG4gICAgZGV0YWlsc0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0b2dnbGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgaWYgKGRldGFpbHNDb250YWluZXIuaGFzQXR0cmlidXRlKCdvcGVuJykpIHtcbiAgICAgICAgbWFwLmludmFsaWRhdGVTaXplKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBBcmlhLVJvbGUgZsO8ciBkaWUgTWFya2VyXG4gIC8vIFRleHQgenVtIEJlaGViZW4gdm9uIEZlaGxlcm4gaW4gTlZEQVxuICBsZXQgbWFya2VyID0gbWFwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWFmbGV0LW1hcmtlci1pY29uLmxlYWZsZXQtaW50ZXJhY3RpdmUnKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrZXIubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrZXJbaV0uc2V0QXR0cmlidXRlKCdyb2xlJywnYnV0dG9uJyk7XG4gIH1cblxuICBpZiAoIGFjdGl2ZSA9PSB0cnVlICkge1xuICAgIG1hcENvbnRhaW5lci5mb2N1cygpO1xuICB9XG5cbn1cblxuXG4iLCIoZnVuY3Rpb24od2luZG93LCBmYWN0b3J5KSB7XG5cdHZhciBsYXp5U2l6ZXMgPSBmYWN0b3J5KHdpbmRvdywgd2luZG93LmRvY3VtZW50LCBEYXRlKTtcblx0d2luZG93LmxhenlTaXplcyA9IGxhenlTaXplcztcblx0aWYodHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyl7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBsYXp5U2l6ZXM7XG5cdH1cbn0odHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyA/XG4gICAgICB3aW5kb3cgOiB7fSwgXG4vKipcbiAqIGltcG9ydChcIi4vdHlwZXMvZ2xvYmFsXCIpXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vdHlwZXMvbGF6eXNpemVzLWNvbmZpZ1wiKS5MYXp5U2l6ZXNDb25maWdQYXJ0aWFsIH0gTGF6eVNpemVzQ29uZmlnUGFydGlhbFxuICovXG5mdW5jdGlvbiBsKHdpbmRvdywgZG9jdW1lbnQsIERhdGUpIHsgLy8gUGFzcyBpbiB0aGUgd2luZG93IERhdGUgZnVuY3Rpb24gYWxzbyBmb3IgU1NSIGJlY2F1c2UgdGhlIERhdGUgY2xhc3MgY2FuIGJlIGxvc3Rcblx0J3VzZSBzdHJpY3QnO1xuXHQvKmpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXG5cdHZhciBsYXp5c2l6ZXMsXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUgeyBMYXp5U2l6ZXNDb25maWdQYXJ0aWFsIH1cblx0XHQgKi9cblx0XHRsYXp5U2l6ZXNDZmc7XG5cblx0KGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHByb3A7XG5cblx0XHR2YXIgbGF6eVNpemVzRGVmYXVsdHMgPSB7XG5cdFx0XHRsYXp5Q2xhc3M6ICdsYXp5bG9hZCcsXG5cdFx0XHRsb2FkZWRDbGFzczogJ2xhenlsb2FkZWQnLFxuXHRcdFx0bG9hZGluZ0NsYXNzOiAnbGF6eWxvYWRpbmcnLFxuXHRcdFx0cHJlbG9hZENsYXNzOiAnbGF6eXByZWxvYWQnLFxuXHRcdFx0ZXJyb3JDbGFzczogJ2xhenllcnJvcicsXG5cdFx0XHQvL3N0cmljdENsYXNzOiAnbGF6eXN0cmljdCcsXG5cdFx0XHRhdXRvc2l6ZXNDbGFzczogJ2xhenlhdXRvc2l6ZXMnLFxuXHRcdFx0ZmFzdExvYWRlZENsYXNzOiAnbHMtaXMtY2FjaGVkJyxcblx0XHRcdGlmcmFtZUxvYWRNb2RlOiAwLFxuXHRcdFx0c3JjQXR0cjogJ2RhdGEtc3JjJyxcblx0XHRcdHNyY3NldEF0dHI6ICdkYXRhLXNyY3NldCcsXG5cdFx0XHRzaXplc0F0dHI6ICdkYXRhLXNpemVzJyxcblx0XHRcdC8vcHJlbG9hZEFmdGVyTG9hZDogZmFsc2UsXG5cdFx0XHRtaW5TaXplOiA0MCxcblx0XHRcdGN1c3RvbU1lZGlhOiB7fSxcblx0XHRcdGluaXQ6IHRydWUsXG5cdFx0XHRleHBGYWN0b3I6IDEuNSxcblx0XHRcdGhGYWM6IDAuOCxcblx0XHRcdGxvYWRNb2RlOiAyLFxuXHRcdFx0bG9hZEhpZGRlbjogdHJ1ZSxcblx0XHRcdHJpY1RpbWVvdXQ6IDAsXG5cdFx0XHR0aHJvdHRsZURlbGF5OiAxMjUsXG5cdFx0fTtcblxuXHRcdGxhenlTaXplc0NmZyA9IHdpbmRvdy5sYXp5U2l6ZXNDb25maWcgfHwgd2luZG93LmxhenlzaXplc0NvbmZpZyB8fCB7fTtcblxuXHRcdGZvcihwcm9wIGluIGxhenlTaXplc0RlZmF1bHRzKXtcblx0XHRcdGlmKCEocHJvcCBpbiBsYXp5U2l6ZXNDZmcpKXtcblx0XHRcdFx0bGF6eVNpemVzQ2ZnW3Byb3BdID0gbGF6eVNpemVzRGVmYXVsdHNbcHJvcF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KSgpO1xuXG5cdGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aW5pdDogZnVuY3Rpb24gKCkge30sXG5cdFx0XHQvKipcblx0XHRcdCAqIEB0eXBlIHsgTGF6eVNpemVzQ29uZmlnUGFydGlhbCB9XG5cdFx0XHQgKi9cblx0XHRcdGNmZzogbGF6eVNpemVzQ2ZnLFxuXHRcdFx0LyoqXG5cdFx0XHQgKiBAdHlwZSB7IHRydWUgfVxuXHRcdFx0ICovXG5cdFx0XHRub1N1cHBvcnQ6IHRydWUsXG5cdFx0fTtcblx0fVxuXG5cdHZhciBkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cdHZhciBzdXBwb3J0UGljdHVyZSA9IHdpbmRvdy5IVE1MUGljdHVyZUVsZW1lbnQ7XG5cblx0dmFyIF9hZGRFdmVudExpc3RlbmVyID0gJ2FkZEV2ZW50TGlzdGVuZXInO1xuXG5cdHZhciBfZ2V0QXR0cmlidXRlID0gJ2dldEF0dHJpYnV0ZSc7XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0byBiaW5kIHRvIHdpbmRvdyBiZWNhdXNlICd0aGlzJy
24510BiZWNvbWVzIG51bGwgZHVyaW5nIFNTUlxuXHQgKiBidWlsZHMuXG5cdCAqL1xuXHR2YXIgYWRkRXZlbnRMaXN0ZW5lciA9IHdpbmRvd1tfYWRkRXZlbnRMaXN0ZW5lcl0uYmluZCh3aW5kb3cpO1xuXG5cdHZhciBzZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG5cblx0dmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgc2V0VGltZW91dDtcblxuXHR2YXIgcmVxdWVzdElkbGVDYWxsYmFjayA9IHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrO1xuXG5cdHZhciByZWdQaWN0dXJlID0gL15waWN0dXJlJC9pO1xuXG5cdHZhciBsb2FkRXZlbnRzID0gWydsb2FkJywgJ2Vycm9yJywgJ2xhenlpbmNsdWRlZCcsICdfbGF6eWxvYWRlZCddO1xuXG5cdHZhciByZWdDbGFzc0NhY2hlID0ge307XG5cblx0dmFyIGZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuXHQvKipcblx0ICogQHBhcmFtIGVsZSB7RWxlbWVudH1cblx0ICogQHBhcmFtIGNscyB7c3RyaW5nfVxuXHQgKi9cblx0dmFyIGhhc0NsYXNzID0gZnVuY3Rpb24oZWxlLCBjbHMpIHtcblx0XHRpZighcmVnQ2xhc3NDYWNoZVtjbHNdKXtcblx0XHRcdHJlZ0NsYXNzQ2FjaGVbY2xzXSA9IG5ldyBSZWdFeHAoJyhcXFxcc3xeKScrY2xzKycoXFxcXHN8JCknKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlZ0NsYXNzQ2FjaGVbY2xzXS50ZXN0KGVsZVtfZ2V0QXR0cmlidXRlXSgnY2xhc3MnKSB8fCAnJykgJiYgcmVnQ2xhc3NDYWNoZVtjbHNdO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0gZWxlIHtFbGVtZW50fVxuXHQgKiBAcGFyYW0gY2xzIHtzdHJpbmd9XG5cdCAqL1xuXHR2YXIgYWRkQ2xhc3MgPSBmdW5jdGlvbihlbGUsIGNscykge1xuXHRcdGlmICghaGFzQ2xhc3MoZWxlLCBjbHMpKXtcblx0XHRcdGVsZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGVsZVtfZ2V0QXR0cmlidXRlXSgnY2xhc3MnKSB8fCAnJykudHJpbSgpICsgJyAnICsgY2xzKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBlbGUge0VsZW1lbnR9XG5cdCAqIEBwYXJhbSBjbHMge3N0cmluZ31cblx0ICovXG5cdHZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uKGVsZSwgY2xzKSB7XG5cdFx0dmFyIHJlZztcblx0XHRpZiAoKHJlZyA9IGhhc0NsYXNzKGVsZSxjbHMpKSkge1xuXHRcdFx0ZWxlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlW19nZXRBdHRyaWJ1dGVdKCdjbGFzcycpIHx8ICcnKS5yZXBsYWNlKHJlZywgJyAnKSk7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGRSZW1vdmVMb2FkRXZlbnRzID0gZnVuY3Rpb24oZG9tLCBmbiwgYWRkKXtcblx0XHR2YXIgYWN0aW9uID0gYWRkID8gX2FkZEV2ZW50TGlzdGVuZXIgOiAncmVtb3ZlRXZlbnRMaXN0ZW5lcic7XG5cdFx0aWYoYWRkKXtcblx0XHRcdGFkZFJlbW92ZUxvYWRFdmVudHMoZG9tLCBmbik7XG5cdFx0fVxuXHRcdGxvYWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldnQpe1xuXHRcdFx0ZG9tW2FjdGlvbl0oZXZ0LCBmbik7XG5cdFx0fSk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBlbGVtIHsgRWxlbWVudCB9XG5cdCAqIEBwYXJhbSBuYW1lIHsgc3RyaW5nIH1cblx0ICogQHBhcmFtIGRldGFpbCB7IGFueSB9XG5cdCAqIEBwYXJhbSBub0J1YmJsZXMgeyBib29sZWFuIH1cblx0ICogQHBhcmFtIG5vQ2FuY2VsYWJsZSB7IGJvb2xlYW4gfVxuXHQgKiBAcmV0dXJucyB7IEN1c3RvbUV2ZW50IH1cblx0ICovXG5cdHZhciB0cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbihlbGVtLCBuYW1lLCBkZXRhaWwsIG5vQnViYmxlcywgbm9DYW5jZWxhYmxlKXtcblx0XHR2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblxuXHRcdGlmKCFkZXRhaWwpe1xuXHRcdFx0ZGV0YWlsID0ge307XG5cdFx0fVxuXG5cdFx0ZGV0YWlsLmluc3RhbmNlID0gbGF6eXNpemVzO1xuXG5cdFx0ZXZlbnQuaW5pdEV2ZW50KG5hbWUsICFub0J1YmJsZXMsICFub0NhbmNlbGFibGUpO1xuXG5cdFx0ZXZlbnQuZGV0YWlsID0gZGV0YWlsO1xuXG5cdFx0ZWxlbS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0XHRyZXR1cm4gZXZlbnQ7XG5cdH07XG5cblx0dmFyIHVwZGF0ZVBvbHlmaWxsID0gZnVuY3Rpb24gKGVsLCBmdWxsKXtcblx0XHR2YXIgcG9seWZpbGw7XG5cdFx0aWYoICFzdXBwb3J0UGljdHVyZSAmJiAoIHBvbHlmaWxsID0gKHdpbmRvdy5waWN0dXJlZmlsbCB8fCBsYXp5U2l6ZXNDZmcucGYpICkgKXtcblx0XHRcdGlmKGZ1bGwgJiYgZnVsbC5zcmMgJiYgIWVsW19nZXRBdHRyaWJ1dGVdKCdzcmNzZXQnKSl7XG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSgnc3Jjc2V0JywgZnVsbC5zcmMpO1xuXHRcdFx0fVxuXHRcdFx0cG9seWZpbGwoe3JlZXZhbHVhdGU6IHRydWUsIGVsZW1lbnRzOiBbZWxdfSk7XG5cdFx0fSBlbHNlIGlmKGZ1bGwgJiYgZnVsbC5zcmMpe1xuXHRcdFx0ZWwuc3JjID0gZnVsbC5zcmM7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBnZXRDU1MgPSBmdW5jdGlvbiAoZWxlbSwgc3R5bGUpe1xuXHRcdHJldHVybiAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKSB8fCB7fSlbc3R5bGVdO1xuXHR9O1xuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbSB7IEVsZW1lbnQgfVxuXHQgKiBAcGFyYW0gcGFyZW50IHsgRWxlbWVudCB9XG5cdCAqIEBwYXJhbSBbd2lkdGhdIHtudW1iZXJ9XG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9XG5cdCAqL1xuXHR2YXIgZ2V0V2lkdGggPSBmdW5jdGlvbihlbGVtLCBwYXJlbnQsIHdpZHRoKXtcblx0XHR3aWR0aCA9IHdpZHRoIHx8IGVsZW0ub2Zmc2V0V2lkdGg7XG5cblx0XHR3aGlsZSh3aWR0aCA8IGxhenlTaXplc0NmZy5taW5TaXplICYmIHBhcmVudCAmJiAhZWxlbS5fbGF6eXNpemVzV2lkdGgpe1xuXHRcdFx0d2lkdGggPSAgcGFyZW50Lm9mZnNldFdpZHRoO1xuXHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9O1xuXG5cdHZhciByQUYgPSAoZnVuY3Rpb24oKXtcblx0XHR2YXIgcnVubmluZywgd2FpdGluZztcblx0XHR2YXIgZmlyc3RGbnMgPSBbXTtcblx0XHR2YXIgc2Vjb25kRm5zID0gW107XG5cdFx0dmFyIGZucyA9IGZpcnN0Rm5zO1xuXG5cdFx0dmFyIHJ1biA9IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgcnVuRm5zID0gZm5zO1xuXG5cdFx0XHRmbnMgPSBmaXJzdEZucy5sZW5ndGggPyBzZWNvbmRGbnMgOiBmaXJzdEZucztcblxuXHRcdFx0cnVubmluZyA9IHRydWU7XG5cdFx0XHR3YWl0aW5nID0gZmFsc2U7XG5cblx0XHRcdHdoaWxlKHJ1bkZucy5sZW5ndGgpe1xuXHRcdFx0XHRydW5GbnMuc2hpZnQoKSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRydW5uaW5nID0gZmFsc2U7XG5cdFx0fTtcblxuXHRcdHZhciByYWZCYXRjaCA9IGZ1bmN0aW9uKGZuLCBxdWV1ZSl7XG5cdFx0XHRpZihydW5uaW5nICYmICFxdWV1ZSl7XG5cdFx0XHRcdGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmbnMucHVzaChmb
24510ik7XG5cblx0XHRcdFx0aWYoIXdhaXRpbmcpe1xuXHRcdFx0XHRcdHdhaXRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdChkb2N1bWVudC5oaWRkZW4gPyBzZXRUaW1lb3V0IDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKShydW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHJhZkJhdGNoLl9sc0ZsdXNoID0gcnVuO1xuXG5cdFx0cmV0dXJuIHJhZkJhdGNoO1xuXHR9KSgpO1xuXG5cdHZhciByQUZJdCA9IGZ1bmN0aW9uKGZuLCBzaW1wbGUpe1xuXHRcdHJldHVybiBzaW1wbGUgP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJBRihmbik7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHRcdHJBRihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHQ7XG5cdH07XG5cblx0dmFyIHRocm90dGxlID0gZnVuY3Rpb24oZm4pe1xuXHRcdHZhciBydW5uaW5nO1xuXHRcdHZhciBsYXN0VGltZSA9IDA7XG5cdFx0dmFyIGdEZWxheSA9IGxhenlTaXplc0NmZy50aHJvdHRsZURlbGF5O1xuXHRcdHZhciBySUNUaW1lb3V0ID0gbGF6eVNpemVzQ2ZnLnJpY1RpbWVvdXQ7XG5cdFx0dmFyIHJ1biA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRydW5uaW5nID0gZmFsc2U7XG5cdFx0XHRsYXN0VGltZSA9IERhdGUubm93KCk7XG5cdFx0XHRmbigpO1xuXHRcdH07XG5cdFx0dmFyIGlkbGVDYWxsYmFjayA9IHJlcXVlc3RJZGxlQ2FsbGJhY2sgJiYgcklDVGltZW91dCA+IDQ5ID9cblx0XHRcdGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJlcXVlc3RJZGxlQ2FsbGJhY2socnVuLCB7dGltZW91dDogcklDVGltZW91dH0pO1xuXG5cdFx0XHRcdGlmKHJJQ1RpbWVvdXQgIT09IGxhenlTaXplc0NmZy5yaWNUaW1lb3V0KXtcblx0XHRcdFx0XHRySUNUaW1lb3V0ID0gbGF6eVNpemVzQ2ZnLnJpY1RpbWVvdXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gOlxuXHRcdFx0ckFGSXQoZnVuY3Rpb24oKXtcblx0XHRcdFx0c2V0VGltZW91dChydW4pO1xuXHRcdFx0fSwgdHJ1ZSlcblx0XHQ7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaXNQcmlvcml0eSl7XG5cdFx0XHR2YXIgZGVsYXk7XG5cblx0XHRcdGlmKChpc1ByaW9yaXR5ID0gaXNQcmlvcml0eSA9PT0gdHJ1ZSkpe1xuXHRcdFx0XHRySUNUaW1lb3V0ID0gMzM7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHJ1bm5pbmcpe1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHJ1bm5pbmcgPSAgdHJ1ZTtcblxuXHRcdFx0ZGVsYXkgPSBnRGVsYXkgLSAoRGF0ZS5ub3coKSAtIGxhc3RUaW1lKTtcblxuXHRcdFx0aWYoZGVsYXkgPCAwKXtcblx0XHRcdFx0ZGVsYXkgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihpc1ByaW9yaXR5IHx8IGRlbGF5IDwgOSl7XG5cdFx0XHRcdGlkbGVDYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2V0VGltZW91dChpZGxlQ2FsbGJhY2ssIGRlbGF5KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXG5cdC8vYmFzZWQgb24gaHR0cDovL21vZGVybmphdmFzY3JpcHQuYmxvZ3Nwb3QuZGUvMjAxMy8wOC9idWlsZGluZy1iZXR0ZXItZGVib3VuY2UuaHRtbFxuXHR2YXIgZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jKSB7XG5cdFx0dmFyIHRpbWVvdXQsIHRpbWVzdGFtcDtcblx0XHR2YXIgd2FpdCA9IDk5O1xuXHRcdHZhciBydW4gPSBmdW5jdGlvbigpe1xuXHRcdFx0dGltZW91dCA9IG51bGw7XG5cdFx0XHRmdW5jKCk7XG5cdFx0fTtcblx0XHR2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBsYXN0ID0gRGF0ZS5ub3coKSAtIHRpbWVzdGFtcDtcblxuXHRcdFx0aWYgKGxhc3QgPCB3YWl0KSB7XG5cdFx0XHRcdHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChyZXF1ZXN0SWRsZUNhbGxiYWNrIHx8IHJ1bikocnVuKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuXHRcdFx0aWYgKCF0aW1lb3V0KSB7XG5cdFx0XHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXG5cdHZhciBsb2FkZXIgPSAoZnVuY3Rpb24oKXtcblx0XHR2YXIgcHJlbG9hZEVsZW1zLCBpc0NvbXBsZXRlZCwgcmVzZXRQcmVsb2FkaW5nVGltZXIsIGxvYWRNb2RlLCBzdGFydGVkO1xuXG5cdFx0dmFyIGVMdlcsIGVsdkgsIGVMdG9wLCBlTGxlZnQsIGVMcmlnaHQsIGVMYm90dG9tLCBpc0JvZHlIaWRkZW47XG5cblx0XHR2YXIgcmVnSW1nID0gL15pbWckL2k7XG5cdFx0dmFyIHJlZ0lmcmFtZSA9IC9eaWZyYW1lJC9pO1xuXG5cdFx0dmFyIHN1cHBvcnRTY3JvbGwgPSAoJ29uc2Nyb2xsJyBpbiB3aW5kb3cpICYmICEoLyhnbGV8aW5nKWJvdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSk7XG5cblx0XHR2YXIgc2hyaW5rRXhwYW5kID0gMDtcblx0XHR2YXIgY3VycmVudEV4cGFuZCA9IDA7XG5cblx0XHR2YXIgaXNMb2FkaW5nID0gMDtcblx0XHR2YXIgbG93UnVucyA9IC0xO1xuXG5cdFx0dmFyIHJlc2V0UHJlbG9hZGluZyA9IGZ1bmN0aW9uKGUpe1xuXHRcdFx0aXNMb2FkaW5nLS07XG5cdFx0XHRpZighZSB8fCBpc0xvYWRpbmcgPCAwIHx8ICFlLnRhcmdldCl7XG5cdFx0XHRcdGlzTG9hZGluZyA9IDA7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBpc1Zpc2libGUgPSBmdW5jdGlvbiAoZWxlbSkge1xuXHRcdFx0aWYgKGlzQm9keUhpZGRlbiA9PSBudWxsKSB7XG5cdFx0XHRcdGlzQm9keUhpZGRlbiA9IGdldENTUyhkb2N1bWVudC5ib2R5LCAndmlzaWJpbGl0eScpID09ICdoaWRkZW4nO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaXNCb2R5SGlkZGVuIHx8ICEoZ2V0Q1NTKGVsZW0ucGFyZW50Tm9kZSwgJ3Zpc2liaWxpdHknKSA9PSAnaGlkZGVuJyAmJiBnZXRDU1MoZWxlbSwgJ3Zpc2liaWxpdHknKSA9PSAnaGlkZGVuJyk7XG5cdFx0fTtcblxuXHRcdHZhciBpc05lc3RlZFZpc2libGUgPSBmdW5jdGlvbihlbGVtLCBlbGVtRXhwYW5kKXtcblx0XHRcdHZhciBvdXRlclJlY3Q7XG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbTtcblx0XHRcdHZhciB2aXNpYmxlID0gaXNWaXNpYmxlKGVsZW0pO1xuXG5cdFx0XHRlTHRvcCAtPSBlbGVtRXhwYW5kO1xuXHRcdFx0ZUxib3R0b20gKz0gZWxlbUV4cGFuZDtcblx0XHRcdGVMbGVmdCAtPSBlbGVtRXhwYW5kO1xuXHRcdFx0ZUxyaWdodCArPSBlbGVtRXhwYW5kO1xuXG5cdFx0XHR3aGlsZSh2aXNpYmxlICYmIChwYXJlbnQgPSBwYXJlbnQub2Zmc2V0UGFyZW50KSAmJiBwYXJlbnQgIT0gZG9jdW1lbnQuYm9keSAmJiBwYXJlbnQgIT0gZG9jRWxlbSl7XG5cdFx0XHRcdHZpc2libGUgPSAoKGdldENTUyhwYXJlbnQsICdvcGFjaXR5JykgfHwgMSkgPiAwKTtcblxuXHRcdFx0XHRpZih2aXNpYmxlICYmIGdldENTUyhwYXJlbnQsICdvdmVyZmxvdycpICE9ICd2aXNpYmxlJyl7XG5cdFx0XHRcdFx0b3V0ZXJSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRcdHZpc2libGUgPSBlTHJpZ2h0ID4gb3V0ZXJSZWN0LmxlZnQgJiZcblx0XHRcdFx0XHRcdGVMbGVmdCA8IG91dGVyUmVjdC5yaWdodCAmJlxuXHRcdFx0XHRcdFx0ZUxib3R0b20gPiBvdXRlclJlY3QudG9wIC0gMSAmJlxuXHRcdFx0XHRcdFx0ZUx0b3AgPCBvdXRlclJlY3QuYm90dG9tICsgMVxuXHRcdFx0XHRcdDt
24510cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmlzaWJsZTtcblx0XHR9O1xuXG5cdFx0dmFyIGNoZWNrRWxlbWVudHMgPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBlTGxlbiwgaSwgcmVjdCwgYXV0b0xvYWRFbGVtLCBsb2FkZWRTb21ldGhpbmcsIGVsZW1FeHBhbmQsIGVsZW1OZWdhdGl2ZUV4cGFuZCwgZWxlbUV4cGFuZFZhbCxcblx0XHRcdFx0YmVmb3JlRXhwYW5kVmFsLCBkZWZhdWx0RXhwYW5kLCBwcmVsb2FkRXhwYW5kLCBoRmFjO1xuXHRcdFx0dmFyIGxhenlsb2FkRWxlbXMgPSBsYXp5c2l6ZXMuZWxlbWVudHM7XG5cblx0XHRcdGlmKChsb2FkTW9kZSA9IGxhenlTaXplc0NmZy5sb2FkTW9kZSkgJiYgaXNMb2FkaW5nIDwgOCAmJiAoZUxsZW4gPSBsYXp5bG9hZEVsZW1zLmxlbmd0aCkpe1xuXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRcdGxvd1J1bnMrKztcblxuXHRcdFx0XHRmb3IoOyBpIDwgZUxsZW47IGkrKyl7XG5cblx0XHRcdFx0XHRpZighbGF6eWxvYWRFbGVtc1tpXSB8fCBsYXp5bG9hZEVsZW1zW2ldLl9sYXp5UmFjZSl7Y29udGludWU7fVxuXG5cdFx0XHRcdFx0aWYoIXN1cHBvcnRTY3JvbGwgfHwgKGxhenlzaXplcy5wcmVtYXR1cmVVbnZlaWwgJiYgbGF6eXNpemVzLnByZW1hdHVyZVVudmVpbChsYXp5bG9hZEVsZW1zW2ldKSkpe3VudmVpbEVsZW1lbnQobGF6eWxvYWRFbGVtc1tpXSk7Y29udGludWU7fVxuXG5cdFx0XHRcdFx0aWYoIShlbGVtRXhwYW5kVmFsID0gbGF6eWxvYWRFbGVtc1tpXVtfZ2V0QXR0cmlidXRlXSgnZGF0YS1leHBhbmQnKSkgfHwgIShlbGVtRXhwYW5kID0gZWxlbUV4cGFuZFZhbCAqIDEpKXtcblx0XHRcdFx0XHRcdGVsZW1FeHBhbmQgPSBjdXJyZW50RXhwYW5kO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghZGVmYXVsdEV4cGFuZCkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEV4cGFuZCA9ICghbGF6eVNpemVzQ2ZnLmV4cGFuZCB8fCBsYXp5U2l6ZXNDZmcuZXhwYW5kIDwgMSkgP1xuXHRcdFx0XHRcdFx0XHRkb2NFbGVtLmNsaWVudEhlaWdodCA+IDUwMCAmJiBkb2NFbGVtLmNsaWVudFdpZHRoID4gNTAwID8gNTAwIDogMzcwIDpcblx0XHRcdFx0XHRcdFx0bGF6eVNpemVzQ2ZnLmV4cGFuZDtcblxuXHRcdFx0XHRcdFx0bGF6eXNpemVzLl9kZWZFeCA9IGRlZmF1bHRFeHBhbmQ7XG5cblx0XHRcdFx0XHRcdHByZWxvYWRFeHBhbmQgPSBkZWZhdWx0RXhwYW5kICogbGF6eVNpemVzQ2ZnLmV4cEZhY3Rvcjtcblx0XHRcdFx0XHRcdGhGYWMgPSBsYXp5U2l6ZXNDZmcuaEZhYztcblx0XHRcdFx0XHRcdGlzQm9keUhpZGRlbiA9IG51bGw7XG5cblx0XHRcdFx0XHRcdGlmKGN1cnJlbnRFeHBhbmQgPCBwcmVsb2FkRXhwYW5kICYmIGlzTG9hZGluZyA8IDEgJiYgbG93UnVucyA+IDIgJiYgbG9hZE1vZGUgPiAyICYmICFkb2N1bWVudC5oaWRkZW4pe1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXhwYW5kID0gcHJlbG9hZEV4cGFuZDtcblx0XHRcdFx0XHRcdFx0bG93UnVucyA9IDA7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYobG9hZE1vZGUgPiAxICYmIGxvd1J1bnMgPiAxICYmIGlzTG9hZGluZyA8IDYpe1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXhwYW5kID0gZGVmYXVsdEV4cGFuZDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFeHBhbmQgPSBzaHJpbmtFeHBhbmQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoYmVmb3JlRXhwYW5kVmFsICE9PSBlbGVtRXhwYW5kKXtcblx0XHRcdFx0XHRcdGVMdlcgPSBpbm5lcldpZHRoICsgKGVsZW1FeHBhbmQgKiBoRmFjKTtcblx0XHRcdFx0XHRcdGVsdkggPSBpbm5lckhlaWdodCArIGVsZW1FeHBhbmQ7XG5cdFx0XHRcdFx0XHRlbGVtTmVnYXRpdmVFeHBhbmQgPSBlbGVtRXhwYW5kICogLTE7XG5cdFx0XHRcdFx0XHRiZWZvcmVFeHBhbmRWYWwgPSBlbGVtRXhwYW5kO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlY3QgPSBsYXp5bG9hZEVsZW1zW2ldLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRcdFx0aWYgKChlTGJvdHRvbSA9IHJlY3QuYm90dG9tKSA+PSBlbGVtTmVnYXRpdmVFeHBhbmQgJiZcblx0XHRcdFx0XHRcdChlTHRvcCA9IHJlY3QudG9wKSA8PSBlbHZIICYmXG5cdFx0XHRcdFx0XHQoZUxyaWdodCA9IHJlY3QucmlnaHQpID49IGVsZW1OZWdhdGl2ZUV4cGFuZCAqIGhGYWMgJiZcblx0XHRcdFx0XHRcdChlTGxlZnQgPSByZWN0LmxlZnQpIDw9IGVMdlcgJiZcblx0XHRcdFx0XHRcdChlTGJvdHRvbSB8fCBlTHJpZ2h0IHx8IGVMbGVmdCB8fCBlTHRvcCkgJiZcblx0XHRcdFx0XHRcdChsYXp5U2l6ZXNDZmcubG9hZEhpZGRlbiB8fCBpc1Zpc2libGUobGF6eWxvYWRFbGVtc1tpXSkpICYmXG5cdFx0XHRcdFx0XHQoKGlzQ29tcGxldGVkICYmIGlzTG9hZGluZyA8IDMgJiYgIWVsZW1FeHBhbmRWYWwgJiYgKGxvYWRNb2RlIDwgMyB8fCBsb3dSdW5zIDwgNCkpIHx8IGlzTmVzdGVkVmlzaWJsZShsYXp5bG9hZEVsZW1zW2ldLCBlbGVtRXhwYW5kKSkpe1xuXHRcdFx0XHRcdFx0dW52ZWlsRWxlbWVudChsYXp5bG9hZEVsZW1zW2ldKTtcblx0XHRcdFx0XHRcdGxvYWRlZFNvbWV0aGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRpZihpc0xvYWRpbmcgPiA5KXticmVhazt9XG5cdFx0XHRcdFx0fSBlbHNlIGlmKCFsb2FkZWRTb21ldGhpbmcgJiYgaXNDb21wbGV0ZWQgJiYgIWF1dG9Mb2FkRWxlbSAmJlxuXHRcdFx0XHRcdFx0aXNMb2FkaW5nIDwgNCAmJiBsb3dSdW5zIDwgNCAmJiBsb2FkTW9kZSA+IDIgJiZcblx0XHRcdFx0XHRcdChwcmVsb2FkRWxlbXNbMF0gfHwgbGF6eVNpemVzQ2ZnLnByZWxvYWRBZnRlckxvYWQpICYmXG5cdFx0XHRcdFx0XHQocHJlbG9hZEVsZW1zWzBdIHx8ICghZWxlbUV4cGFuZFZhbCAmJiAoKGVMYm90dG9tIHx8IGVMcmlnaHQgfHwgZUxsZWZ0IHx8IGVMdG9wKSB8fCBsYXp5bG9hZEVsZW1zW2ldW19nZXRBdHRyaWJ1dGVdKGxhenlTaXplc0NmZy5zaXplc0F0dHIpICE9ICdhdXRvJykpKSl7XG5cdFx0XHRcdFx0XHRhdXRvTG9hZEVsZW0gPSBwcmVsb2FkRWxlbXNbMF0gfHwgbGF6eWxvYWRFbGVtc1tpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihhdXRvTG9hZEVsZW0gJiYgIWxvYWRlZFNvbWV0aGluZyl7XG5cdFx0XHRcdFx0dW52ZWlsRWxlbWVudChhdXRvTG9hZEVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciB0aHJvdHRsZWRDaGVja0VsZW1lbnRzID0gdGhyb3R0bGUoY2hlY2tFbGVtZW50cyk7XG5cblx0XHR2YXIgc3dpdGNoTG9hZGluZ0NsYXNzID0gZnVuY3Rpb24oZSl7XG5cdFx0XHR2YXIgZWxlbSA9IGUudGFyZ2V0O1xuXG5cdFx0XHRpZiAoZWxlbS5fbGF6eUNhY2hlKSB7XG5cdFx0XHRcdGRlbGV0ZSBlbGVtLl9sYXp5Q2FjaGU7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0cmVzZXRQcmVsb2FkaW5nKGUpO1xuXHRcdFx0YWRkQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmxvYWRlZENsYXNzKTtcblx0XHRcdHJlbW92ZUNsYXNzKGVsZW0sIGxhenlTaXplc0NmZy5sb2FkaW5nQ2xhc3MpO1xuXHRcdFx0YWRkUmVtb3ZlTG9hZEV2ZW50cyhlbGVtLCByYWZTd2l0Y2hMb2FkaW5nQ2xhc3MpO1xuXHRcdFx0dHJpZ2dlckV2ZW50KGVsZW0sICdsYXp5bG9hZGVkJyk7XG5cdFx0fTtcblx0XHR2YXIgcmFmZWRTd2l0Y2hMb2FkaW5nQ2xhc3MgPSByQUZJdChzd2l0Y2hMb2FkaW5nQ2xhc3MpO1xuXHRcdHZhciByYWZTd2l0Y2hMb2FkaW5nQ2xhc3MgPSBmdW5jdGlvbihlKXtcblx0XHRcdHJhZmVkU3d
24510pdGNoTG9hZGluZ0NsYXNzKHt0YXJnZXQ6IGUudGFyZ2V0fSk7XG5cdFx0fTtcblxuXHRcdHZhciBjaGFuZ2VJZnJhbWVTcmMgPSBmdW5jdGlvbihlbGVtLCBzcmMpe1xuXHRcdFx0dmFyIGxvYWRNb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbG9hZC1tb2RlJykgfHwgbGF6eVNpemVzQ2ZnLmlmcmFtZUxvYWRNb2RlO1xuXG5cdFx0XHQvLyBsb2FkTW9kZSBjYW4gYmUgYWxzbyBhIHN0cmluZyFcblx0XHRcdGlmIChsb2FkTW9kZSA9PSAwKSB7XG5cdFx0XHRcdGVsZW0uY29udGVudFdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHNyYyk7XG5cdFx0XHR9IGVsc2UgaWYgKGxvYWRNb2RlID09IDEpIHtcblx0XHRcdFx0ZWxlbS5zcmMgPSBzcmM7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBoYW5kbGVTb3VyY2VzID0gZnVuY3Rpb24oc291cmNlKXtcblx0XHRcdHZhciBjdXN0b21NZWRpYTtcblxuXHRcdFx0dmFyIHNvdXJjZVNyY3NldCA9IHNvdXJjZVtfZ2V0QXR0cmlidXRlXShsYXp5U2l6ZXNDZmcuc3Jjc2V0QXR0cik7XG5cblx0XHRcdGlmKCAoY3VzdG9tTWVkaWEgPSBsYXp5U2l6ZXNDZmcuY3VzdG9tTWVkaWFbc291cmNlW19nZXRBdHRyaWJ1dGVdKCdkYXRhLW1lZGlhJykgfHwgc291cmNlW19nZXRBdHRyaWJ1dGVdKCdtZWRpYScpXSkgKXtcblx0XHRcdFx0c291cmNlLnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBjdXN0b21NZWRpYSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHNvdXJjZVNyY3NldCl7XG5cdFx0XHRcdHNvdXJjZS5zZXRBdHRyaWJ1dGUoJ3NyY3NldCcsIHNvdXJjZVNyY3NldCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBsYXp5VW52ZWlsID0gckFGSXQoZnVuY3Rpb24gKGVsZW0sIGRldGFpbCwgaXNBdXRvLCBzaXplcywgaXNJbWcpe1xuXHRcdFx0dmFyIHNyYywgc3Jjc2V0LCBwYXJlbnQsIGlzUGljdHVyZSwgZXZlbnQsIGZpcmVzTG9hZDtcblxuXHRcdFx0aWYoIShldmVudCA9IHRyaWdnZXJFdmVudChlbGVtLCAnbGF6eWJlZm9yZXVudmVpbCcsIGRldGFpbCkpLmRlZmF1bHRQcmV2ZW50ZWQpe1xuXG5cdFx0XHRcdGlmKHNpemVzKXtcblx0XHRcdFx0XHRpZihpc0F1dG8pe1xuXHRcdFx0XHRcdFx0YWRkQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmF1dG9zaXplc0NsYXNzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoJ3NpemVzJywgc2l6ZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNyY3NldCA9IGVsZW1bX2dldEF0dHJpYnV0ZV0obGF6eVNpemVzQ2ZnLnNyY3NldEF0dHIpO1xuXHRcdFx0XHRzcmMgPSBlbGVtW19nZXRBdHRyaWJ1dGVdKGxhenlTaXplc0NmZy5zcmNBdHRyKTtcblxuXHRcdFx0XHRpZihpc0ltZykge1xuXHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0XHRpc1BpY3R1cmUgPSBwYXJlbnQgJiYgcmVnUGljdHVyZS50ZXN0KHBhcmVudC5ub2RlTmFtZSB8fCAnJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmaXJlc0xvYWQgPSBkZXRhaWwuZmlyZXNMb2FkIHx8ICgoJ3NyYycgaW4gZWxlbSkgJiYgKHNyY3NldCB8fCBzcmMgfHwgaXNQaWN0dXJlKSk7XG5cblx0XHRcdFx0ZXZlbnQgPSB7dGFyZ2V0OiBlbGVtfTtcblxuXHRcdFx0XHRhZGRDbGFzcyhlbGVtLCBsYXp5U2l6ZXNDZmcubG9hZGluZ0NsYXNzKTtcblxuXHRcdFx0XHRpZihmaXJlc0xvYWQpe1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dChyZXNldFByZWxvYWRpbmdUaW1lcik7XG5cdFx0XHRcdFx0cmVzZXRQcmVsb2FkaW5nVGltZXIgPSBzZXRUaW1lb3V0KHJlc2V0UHJlbG9hZGluZywgMjUwMCk7XG5cdFx0XHRcdFx0YWRkUmVtb3ZlTG9hZEV2ZW50cyhlbGVtLCByYWZTd2l0Y2hMb2FkaW5nQ2xhc3MsIHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoaXNQaWN0dXJlKXtcblx0XHRcdFx0XHRmb3JFYWNoLmNhbGwocGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzb3VyY2UnKSwgaGFuZGxlU291cmNlcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihzcmNzZXQpe1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCdzcmNzZXQnLCBzcmNzZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYoc3JjICYmICFpc1BpY3R1cmUpe1xuXHRcdFx0XHRcdGlmKHJlZ0lmcmFtZS50ZXN0KGVsZW0ubm9kZU5hbWUpKXtcblx0XHRcdFx0XHRcdGNoYW5nZUlmcmFtZVNyYyhlbGVtLCBzcmMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNyYyA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihpc0ltZyAmJiAoc3Jjc2V0IHx8IGlzUGljdHVyZSkpe1xuXHRcdFx0XHRcdHVwZGF0ZVBvbHlmaWxsKGVsZW0sIHtzcmM6IHNyY30pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKGVsZW0uX2xhenlSYWNlKXtcblx0XHRcdFx0ZGVsZXRlIGVsZW0uX2xhenlSYWNlO1xuXHRcdFx0fVxuXHRcdFx0cmVtb3ZlQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmxhenlDbGFzcyk7XG5cblx0XHRcdHJBRihmdW5jdGlvbigpe1xuXHRcdFx0XHQvLyBQYXJ0IG9mIHRoaXMgY2FuIGJlIHJlbW92ZWQgYXMgc29vbiBhcyB0aGlzIGZpeCBpcyBvbGRlcjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzczMSAoMjAxNSlcblx0XHRcdFx0dmFyIGlzTG9hZGVkID0gZWxlbS5jb21wbGV0ZSAmJiBlbGVtLm5hdHVyYWxXaWR0aCA+IDE7XG5cblx0XHRcdFx0aWYoICFmaXJlc0xvYWQgfHwgaXNMb2FkZWQpe1xuXHRcdFx0XHRcdGlmIChpc0xvYWRlZCkge1xuXHRcdFx0XHRcdFx0YWRkQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmZhc3RMb2FkZWRDbGFzcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN3aXRjaExvYWRpbmdDbGFzcyhldmVudCk7XG5cdFx0XHRcdFx0ZWxlbS5fbGF6eUNhY2hlID0gdHJ1ZTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHRpZiAoJ19sYXp5Q2FjaGUnIGluIGVsZW0pIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGVsZW0uX2xhenlDYWNoZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCA5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZWxlbS5sb2FkaW5nID09ICdsYXp5Jykge1xuXHRcdFx0XHRcdGlzTG9hZGluZy0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0cnVlKTtcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIGVsZW0geyBFbGVtZW50IH1cblx0XHQgKi9cblx0XHR2YXIgdW52ZWlsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtKXtcblx0XHRcdGlmIChlbGVtLl9sYXp5UmFjZSkge3JldHVybjt9XG5cdFx0XHR2YXIgZGV0YWlsO1xuXG5cdFx0XHR2YXIgaXNJbWcgPSByZWdJbWcudGVzdChlbGVtLm5vZGVOYW1lKTtcblxuXHRcdFx0Ly9hbGxvdyB1c2luZyBzaXplcz1cImF1dG9cIiwgYnV0IGRvbid0IHVzZS4gaXQncyBpbnZhbGlkLiBVc2UgZGF0YS1zaXplcz1cImF1dG9cIiBvciBhIHZhbGlkIHZhbHVlIGZvciBzaXplcyBpbnN0ZWFkIChpLmUuOiBzaXplcz1cIjgwdndcIilcblx0XHRcdHZhciBzaXplcyA9IGlzSW1nICYmIChlbGVtW19nZXRBdHRyaWJ1dGVdKGxhenlTaXplc0NmZy5zaXplc0F0dHIpIHx8IGVsZW1bX2dldEF0dHJpYnV0ZV0oJ3NpemVzJykpO1xuXHRcdFx0dmFyIGlzQXV0byA9IHNpemVzID09ICdhdXRvJztcblxuXHRcdFx0aWYoIChpc0F1dG8gfHwgIWlzQ29tcGxldGVkKSAmJiBpc0ltZyAmJiAoZWxlbVtfZ2V0QXR0cmlidXRlXSgnc3JjJykgfHwgZWxlbS5zcmNzZXQpICYmICFlbGVtLmNvbXBsZXRlICYmICFoYXNDbGFzcyhlbGVtLCBsYXp5U2l6ZXNDZmcuZXJyb3JDbGFzcykgJiYgaGFzQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmxhenlDbGFzcykpe3JldHVybjt9XG5cblx0XHRcdGRldGFpbCA9IHRyaWdnZXJFdmVudChlbGVtLCAnbGF6eXVudmVpbHJlYWQnKS5kZXRhaWw7XG5cblx0XHRcdGlmKGlzQXV0byl7XG5cdFx0XHRcdCBhdXRvU2l6ZXIudXBkYXRlRWxlbShlbGVtLCB0cnVlLCBlbGVtLm9mZnNldFdpZHRoKTtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5fbGF6eVJhY2UgPSB0cnVlO1xuXHRcdFx0aXNMb2FkaW5nKys7XG5cblx0XHRcdGxhenlVbnZlaWwoZWxlbSwgZGV0YWlsLCBpc0F1dG8sIHNpemVzLCBpc0ltZyk7XG5cdFx0fTtcblxuXHRcdHZhciBhZnRlclNjcm9sbCA9IGRlYm91bmNlKGZ1bmN0aW9uKCl7XG5cdFx0XHRsYXp5U2l6ZXNDZmcubG9hZE1vZGUgPSAzO1xuXHRcdFx0dGhyb3R0bGVkQ2hlY2tFbGVtZW50cygpO1xuXHRcdH0pO1xuXG5cdFx0dmFyIGFsdExvYWRtb2RlU2Nyb2xsTGlzdG5lciA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRpZihsYXp5U2l6ZXNDZmcubG9hZE1vZGUgPT0gMyl7XG5cdFx0XHRcdGxhenlTaXplc0NmZy5sb2FkTW9kZSA9IDI7XG5cdFx0XHR9XG5cdFx0XHRhZnRlclNjcm9sbCgpO1xuXHRcdH07XG5cblx0XHR2YXIgb25sb2FkID0gZnVuY3Rpb24oKXtcblx0XHRcdGlmKGlzQ29tcGxldGVkKXtyZXR1cm47fVxuXHRcdFx0aWYoRGF0ZS5ub3coKSAtIHN0YXJ0ZWQgPCA5OTkpe1xuXHRcdFx0XHRzZXRUaW
245101lb3V0KG9ubG9hZCwgOTk5KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cblx0XHRcdGlzQ29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0bGF6eVNpemVzQ2ZnLmxvYWRNb2RlID0gMztcblxuXHRcdFx0dGhyb3R0bGVkQ2hlY2tFbGVtZW50cygpO1xuXG5cdFx0XHRhZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBhbHRMb2FkbW9kZVNjcm9sbExpc3RuZXIsIHRydWUpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0XzogZnVuY3Rpb24oKXtcblx0XHRcdFx0c3RhcnRlZCA9IERhdGUubm93KCk7XG5cblx0XHRcdFx0bGF6eXNpemVzLmVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShsYXp5U2l6ZXNDZmcubGF6eUNsYXNzKTtcblx0XHRcdFx0cHJlbG9hZEVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShsYXp5U2l6ZXNDZmcubGF6eUNsYXNzICsgJyAnICsgbGF6eVNpemVzQ2ZnLnByZWxvYWRDbGFzcyk7XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cywgdHJ1ZSk7XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cywgdHJ1ZSk7XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcigncGFnZXNob3cnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdGlmIChlLnBlcnNpc3RlZCkge1xuXHRcdFx0XHRcdFx0dmFyIGxvYWRpbmdFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nICsgbGF6eVNpemVzQ2ZnLmxvYWRpbmdDbGFzcyk7XG5cblx0XHRcdFx0XHRcdGlmIChsb2FkaW5nRWxlbWVudHMubGVuZ3RoICYmIGxvYWRpbmdFbGVtZW50cy5mb3JFYWNoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9hZGluZ0VsZW1lbnRzLmZvckVhY2goIGZ1bmN0aW9uIChpbWcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbWcuY29tcGxldGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW52ZWlsRWxlbWVudChpbWcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKXtcblx0XHRcdFx0XHRuZXcgTXV0YXRpb25PYnNlcnZlciggdGhyb3R0bGVkQ2hlY2tFbGVtZW50cyApLm9ic2VydmUoIGRvY0VsZW0sIHtjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWV9ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jRWxlbVtfYWRkRXZlbnRMaXN0ZW5lcl0oJ0RPTU5vZGVJbnNlcnRlZCcsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXHRcdFx0XHRcdGRvY0VsZW1bX2FkZEV2ZW50TGlzdGVuZXJdKCdET01BdHRyTW9kaWZpZWQnLCB0aHJvdHRsZWRDaGVja0VsZW1lbnRzLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRJbnRlcnZhbCh0aHJvdHRsZWRDaGVja0VsZW1lbnRzLCA5OTkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXG5cdFx0XHRcdC8vLCAnZnVsbHNjcmVlbmNoYW5nZSdcblx0XHRcdFx0Wydmb2N1cycsICdtb3VzZW92ZXInLCAnY2xpY2snLCAnbG9hZCcsICd0cmFuc2l0aW9uZW5kJywgJ2FuaW1hdGlvbmVuZCddLmZvckVhY2goZnVuY3Rpb24obmFtZSl7XG5cdFx0XHRcdFx0ZG9jdW1lbnRbX2FkZEV2ZW50TGlzdGVuZXJdKG5hbWUsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZigoL2QkfF5jLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpKSl7XG5cdFx0XHRcdFx0b25sb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9ubG9hZCk7XG5cdFx0XHRcdFx0ZG9jdW1lbnRbX2FkZEV2ZW50TGlzdGVuZXJdKCdET01Db250ZW50TG9hZGVkJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cyk7XG5cdFx0XHRcdFx0c2V0VGltZW91dChvbmxvYWQsIDIwMDAwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGxhenlzaXplcy5lbGVtZW50cy5sZW5ndGgpe1xuXHRcdFx0XHRcdGNoZWNrRWxlbWVudHMoKTtcblx0XHRcdFx0XHRyQUYuX2xzRmx1c2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdHRsZWRDaGVja0VsZW1lbnRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjaGVja0VsZW1zOiB0aHJvdHRsZWRDaGVja0VsZW1lbnRzLFxuXHRcdFx0dW52ZWlsOiB1bnZlaWxFbGVtZW50LFxuXHRcdFx0X2FMU0w6IGFsdExvYWRtb2RlU2Nyb2xsTGlzdG5lcixcblx0XHR9O1xuXHR9KSgpO1xuXG5cblx0dmFyIGF1dG9TaXplciA9IChmdW5jdGlvbigpe1xuXHRcdHZhciBhdXRvc2l6ZXNFbGVtcztcblxuXHRcdHZhciBzaXplRWxlbWVudCA9IHJBRkl0KGZ1bmN0aW9uKGVsZW0sIHBhcmVudCwgZXZlbnQsIHdpZHRoKXtcblx0XHRcdHZhciBzb3VyY2VzLCBpLCBsZW47XG5cdFx0XHRlbGVtLl9sYXp5c2l6ZXNXaWR0aCA9IHdpZHRoO1xuXHRcdFx0d2lkdGggKz0gJ3B4JztcblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoJ3NpemVzJywgd2lkdGgpO1xuXG5cdFx0XHRpZihyZWdQaWN0dXJlLnRlc3QocGFyZW50Lm5vZGVOYW1lIHx8ICcnKSl7XG5cdFx0XHRcdHNvdXJjZXMgPSBwYXJlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NvdXJjZScpO1xuXHRcdFx0XHRmb3IoaSA9IDAsIGxlbiA9IHNvdXJjZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuXHRcdFx0XHRcdHNvdXJjZXNbaV0uc2V0QXR0cmlidXRlKCdzaXplcycsIHdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZighZXZlbnQuZGV0YWlsLmRhdGFBdHRyKXtcblx0XHRcdFx0dXBkYXRlUG9seWZpbGwoZWxlbSwgZXZlbnQuZGV0YWlsKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvKipcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBlbGVtIHtFbGVtZW50fVxuXHRcdCAqIEBwYXJhbSBkYXRhQXR0clxuXHRcdCAqIEBwYXJhbSBbd2lkdGhdIHsgbnVtYmVyIH1cblx0XHQgKi9cblx0XHR2YXIgZ2V0U2l6ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbSwgZGF0YUF0dHIsIHdpZHRoKXtcblx0XHRcdHZhciBldmVudDtcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmKHBhcmVudCl7XG5cdFx0XHRcdHdpZHRoID0gZ2V0V2lkdGgoZWxlbSwgcGFyZW50LCB3aWR0aCk7XG5cdFx0XHRcdGV2ZW50ID0gdHJpZ2dlckV2ZW50KGVsZW0sICdsYXp5YmVmb3Jlc2l6ZXMnLCB7d2lk
24510dGg6IHdpZHRoLCBkYXRhQXR0cjogISFkYXRhQXR0cn0pO1xuXG5cdFx0XHRcdGlmKCFldmVudC5kZWZhdWx0UHJldmVudGVkKXtcblx0XHRcdFx0XHR3aWR0aCA9IGV2ZW50LmRldGFpbC53aWR0aDtcblxuXHRcdFx0XHRcdGlmKHdpZHRoICYmIHdpZHRoICE9PSBlbGVtLl9sYXp5c2l6ZXNXaWR0aCl7XG5cdFx0XHRcdFx0XHRzaXplRWxlbWVudChlbGVtLCBwYXJlbnQsIGV2ZW50LCB3aWR0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciB1cGRhdGVFbGVtZW50c1NpemVzID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBpO1xuXHRcdFx0dmFyIGxlbiA9IGF1dG9zaXplc0VsZW1zLmxlbmd0aDtcblx0XHRcdGlmKGxlbil7XG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRcdGZvcig7IGkgPCBsZW47IGkrKyl7XG5cdFx0XHRcdFx0Z2V0U2l6ZUVsZW1lbnQoYXV0b3NpemVzRWxlbXNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBkZWJvdW5jZWRVcGRhdGVFbGVtZW50c1NpemVzID0gZGVib3VuY2UodXBkYXRlRWxlbWVudHNTaXplcyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0XzogZnVuY3Rpb24oKXtcblx0XHRcdFx0YXV0b3NpemVzRWxlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGxhenlTaXplc0NmZy5hdXRvc2l6ZXNDbGFzcyk7XG5cdFx0XHRcdGFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGRlYm91bmNlZFVwZGF0ZUVsZW1lbnRzU2l6ZXMpO1xuXHRcdFx0fSxcblx0XHRcdGNoZWNrRWxlbXM6IGRlYm91bmNlZFVwZGF0ZUVsZW1lbnRzU2l6ZXMsXG5cdFx0XHR1cGRhdGVFbGVtOiBnZXRTaXplRWxlbWVudFxuXHRcdH07XG5cdH0pKCk7XG5cblx0dmFyIGluaXQgPSBmdW5jdGlvbigpe1xuXHRcdGlmKCFpbml0LmkgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7XG5cdFx0XHRpbml0LmkgPSB0cnVlO1xuXHRcdFx0YXV0b1NpemVyLl8oKTtcblx0XHRcdGxvYWRlci5fKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblx0XHRpZihsYXp5U2l6ZXNDZmcuaW5pdCl7XG5cdFx0XHRpbml0KCk7XG5cdFx0fVxuXHR9KTtcblxuXHRsYXp5c2l6ZXMgPSB7XG5cdFx0LyoqXG5cdFx0ICogQHR5cGUgeyBMYXp5U2l6ZXNDb25maWdQYXJ0aWFsIH1cblx0XHQgKi9cblx0XHRjZmc6IGxhenlTaXplc0NmZyxcblx0XHRhdXRvU2l6ZXI6IGF1dG9TaXplcixcblx0XHRsb2FkZXI6IGxvYWRlcixcblx0XHRpbml0OiBpbml0LFxuXHRcdHVQOiB1cGRhdGVQb2x5ZmlsbCxcblx0XHRhQzogYWRkQ2xhc3MsXG5cdFx0ckM6IHJlbW92ZUNsYXNzLFxuXHRcdGhDOiBoYXNDbGFzcyxcblx0XHRmaXJlOiB0cmlnZ2VyRXZlbnQsXG5cdFx0Z1c6IGdldFdpZHRoLFxuXHRcdHJBRjogckFGLFxuXHR9O1xuXG5cdHJldHVybiBsYXp5c2l6ZXM7XG59XG4pKTtcbiIsIihmdW5jdGlvbih3aW5kb3csIGZhY3RvcnkpIHtcblx0dmFyIGdsb2JhbEluc3RhbGwgPSBmdW5jdGlvbigpe1xuXHRcdGZhY3Rvcnkod2luZG93LmxhenlTaXplcyk7XG5cdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xhenl1bnZlaWxyZWFkJywgZ2xvYmFsSW5zdGFsbCwgdHJ1ZSk7XG5cdH07XG5cblx0ZmFjdG9yeSA9IGZhY3RvcnkuYmluZChudWxsLCB3aW5kb3csIHdpbmRvdy5kb2N1bWVudCk7XG5cblx0aWYodHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyl7XG5cdFx0ZmFjdG9yeShyZXF1aXJlKCdsYXp5c2l6ZXMnKSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoWydsYXp5c2l6ZXMnXSwgZmFjdG9yeSk7XG5cdH0gZWxzZSBpZih3aW5kb3cubGF6eVNpemVzKSB7XG5cdFx0Z2xvYmFsSW5zdGFsbCgpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsYXp5dW52ZWlscmVhZCcsIGdsb2JhbEluc3RhbGwsIHRydWUpO1xuXHR9XG59KHdpbmRvdywgZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgbGF6eVNpemVzKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaW1nU3VwcG9ydCA9ICdsb2FkaW5nJyBpbiBIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZTtcblx0dmFyIGlmcmFtZVN1cHBvcnQgPSAnbG9hZGluZycgaW4gSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlO1xuXHR2YXIgaXNDb25maWdTZXQgPSBmYWxzZTtcblx0dmFyIG9sZFByZW1hdHVyZVVudmVpbCA9IGxhenlTaXplcy5wcmVtYXR1cmVVbnZlaWw7XG5cdHZhciBjZmcgPSBsYXp5U2l6ZXMuY2ZnO1xuXHR2YXIgbGlzdGVuZXJNYXAgPSB7XG5cdFx0Zm9jdXM6IDEsXG5cdFx0bW91c2VvdmVyOiAxLFxuXHRcdGNsaWNrOiAxLFxuXHRcdGxvYWQ6IDEsXG5cdFx0dHJhbnNpdGlvbmVuZDogMSxcblx0XHRhbmltYXRpb25lbmQ6IDEsXG5cdFx0c2Nyb2xsOiAxLFxuXHRcdHJlc2l6ZTogMSxcblx0fTtcblxuXHRpZiAoIWNmZy5uYXRpdmVMb2FkaW5nKSB7XG5cdFx0Y2ZnLm5hdGl2ZUxvYWRpbmcgPSB7fTtcblx0fVxuXG5cdGlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgIXdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8ICghaW1nU3VwcG9ydCAmJiAhaWZyYW1lU3VwcG9ydCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNhYmxlRXZlbnRzKCkge1xuXHRcdHZhciBsb2FkZXIgPSBsYXp5U2l6ZXMubG9hZGVyO1xuXHRcdHZhciB0aHJvdHRsZWRDaGVja0VsZW1lbnRzID0gbG9hZGVyLmNoZWNrRWxlbXM7XG5cdFx0dmFyIHJlbW92ZUFMU0wgPSBmdW5jdGlvbigpe1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgbG9hZGVyLl9hTFNMLCB0cnVlKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH07XG5cdFx0dmFyIGN1cnJlbnRMaXN0ZW5lck1hcCA9IHR5cGVvZiBjZmcubmF0aXZlTG9hZGluZy5kaXNhYmxlTGlzdGVuZXJzID09ICdvYmplY3QnID9cblx0XHRcdGNmZy5uYXRpdmVMb2FkaW5nLmRpc2FibGVMaXN0ZW5lcnMgOlxuXHRcdFx0bGlzdGVuZXJNYXA7XG5cblx0XHRpZiAoY3VycmVudExpc3RlbmVyTWFwLnNjcm9sbCkge1xuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCByZW1vdmVBTFNMKTtcblx0XHRcdHJlbW92ZUFMU0woKTtcblxuXHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50TGlzdGVuZXJNYXAucmVzaXplKSB7XG5cdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cywgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmtleXMoY3VycmVudExpc3RlbmVyTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdGlmIChjdXJyZW50TGlzdGVuZXJNYXBbbmFtZV0pIHtcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB0aHJvdHRsZWRDaGVja0VsZW1lbnRzLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJ1bkNvbmZpZygpIHtcblx0XHRpZiAoaXNDb25maWdTZXQpIHtyZXR1cm47fVxuXHRcdGlzQ29uZmlnU2V0ID0gdHJ1ZTtcblxuXHRcdGlmIChpbWdTdXBwb3J0ICYmIGlmcmFtZVN1cHBvcnQgJiYgY2ZnLm5hdGl2ZUxvYWRpbmcuZGlzYWJsZUxpc3RlbmVycykge1xuXHRcdFx0aWYgKGNmZy5uYXRpdmVMb2FkaW5nLmRpc2FibGVMaXN0ZW5lcnMgPT09IHRydWUpIHtcblx0XHRcdFx0Y2ZnLm5hdGl2ZUxvYWRpbmcuc2V0TG9hZGluZ0F0dHJpYnV0ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGRpc2FibGVFdmVudHMoKTtcblx0XHR9XG5cblx0XHRpZiAoY2ZnLm5hdGl2ZUxvYWRpbmcuc2V0TG9hZGluZ0F0dHJpYnV0ZSkge1xuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xhenliZWZvcmV1bnZlaWwnLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0dmFyIGVsZW1lbnQgPSBlLnRhcmdldDtcblxuXHRcdFx0XHRpZiAoJ2xvYWRpbmcnIGluIGVsZW1lbnQgJiYgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsb2FkaW5nJykpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZSgnbG9hZGluZycsICdsYXp5Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdGxhenlTaXplcy5wcmVtYXR1cmVVbnZlaWwgPSBmdW5jdGlvbiBwcmVtYXR1cmVVbnZlaWwoZWxlbWVudCkge1xuXG5cdFx0aWYgKCFpc0NvbmZpZ1NldCkge1xuXHRcdFx0cnVuQ29uZmlnKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCdsb2FkaW5nJyBpbiBlbGVtZW50ICYmXG5cdFx0XHQoY2ZnLm5hdGl2ZUxvYWRpbmcuc2V0TG9hZGluZ0F0dHJpYnV0ZSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnbG9hZGluZycpKSAmJlxuXHRcdFx0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNpemVzJykgIT0gJ2F1dG8nIHx8IGVsZW1lbnQub2Zmc2V0V2lkdGgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAob2xkUHJlbWF0dXJlVW52ZWlsKSB7XG5cdFx0XHRyZXR1cm4gb2xkUHJlbWF0dXJlVW52ZWlsKGVsZW1lbnQpO1xuXHRcdH1cblx0fTtcblxufSkpO1xuIl19

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.