| 1 |
"use strict"; |
| 2 |
|
| 3 |
/*! |
| 4 |
* Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f4b4c9cb85df757ca08c) |
| 5 |
* Config saved to config.json and https://gist.github.com/f4b4c9cb85df757ca08c |
| 6 |
*/ |
| 7 |
if (typeof jQuery === 'undefined') { |
| 8 |
throw new Error('Bootstrap\'s JavaScript requires jQuery'); |
| 9 |
} |
| 10 |
+function ($) { |
| 11 |
'use strict'; |
| 12 |
|
| 13 |
var version = $.fn.jquery.split(' ')[0].split('.'); |
| 14 |
if (version[0] < 2 && version[1] < 9 || version[0] == 1 && version[1] == 9 && version[2] < 1) { |
| 15 |
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher'); |
| 16 |
} |
| 17 |
}(jQuery); |
| 18 |
|
| 19 |
/* ======================================================================== |
| 20 |
* Bootstrap: modal.js v3.3.5 |
| 21 |
* http://getbootstrap.com/javascript/#modals |
| 22 |
* ======================================================================== |
| 23 |
* Copyright 2011-2015 Twitter, Inc. |
| 24 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
| 25 |
* ======================================================================== */ |
| 26 |
|
| 27 |
+function ($) { |
| 28 |
'use strict'; |
| 29 |
|
| 30 |
// MODAL CLASS DEFINITION |
| 31 |
// ====================== |
| 32 |
var Modal = function (element, options) { |
| 33 |
this.options = options; |
| 34 |
this.$body = $(document.body); |
| 35 |
this.$element = $(element); |
| 36 |
this.$dialog = this.$element.find('.modal-dialog'); |
| 37 |
this.$backdrop = null; |
| 38 |
this.isShown = null; |
| 39 |
this.originalBodyPad = null; |
| 40 |
this.scrollbarWidth = 0; |
| 41 |
this.ignoreBackdropClick = false; |
| 42 |
if (this.options.remote) { |
| 43 |
this.$element.find('.modal-content').load(this.options.remote, $.proxy(function () { |
| 44 |
this.$element.trigger('loaded.wpbc.modal'); |
| 45 |
}, this)); |
| 46 |
} |
| 47 |
}; |
| 48 |
Modal.VERSION = '3.3.5'; |
| 49 |
Modal.TRANSITION_DURATION = 300; |
| 50 |
Modal.BACKDROP_TRANSITION_DURATION = 150; |
| 51 |
Modal.DEFAULTS = { |
| 52 |
backdrop: true, |
| 53 |
keyboard: true, |
| 54 |
show: true, |
| 55 |
enforceFocus: true |
| 56 |
}; |
| 57 |
Modal.prototype.toggle = function (_relatedTarget) { |
| 58 |
return this.isShown ? this.hide() : this.show(_relatedTarget); |
| 59 |
}; |
| 60 |
Modal.prototype.show = function (_relatedTarget) { |
| 61 |
var that = this; |
| 62 |
var e = $.Event('show.wpbc.modal', { |
| 63 |
relatedTarget: _relatedTarget |
| 64 |
}); |
| 65 |
this.$element.trigger(e); |
| 66 |
if (this.isShown || e.isDefaultPrevented()) return; |
| 67 |
this.isShown = true; |
| 68 |
this.checkScrollbar(); |
| 69 |
this.setScrollbar(); |
| 70 |
this.$body.addClass('modal-open'); |
| 71 |
this.escape(); |
| 72 |
this.resize(); |
| 73 |
this.$element.on('click.dismiss.wpbc.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)); |
| 74 |
this.$dialog.on('mousedown.dismiss.wpbc.modal', function () { |
| 75 |
that.$element.one('mouseup.dismiss.wpbc.modal', function (e) { |
| 76 |
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true; |
| 77 |
}); |
| 78 |
}); |
| 79 |
this.backdrop(function () { |
| 80 |
var transition = $.support.transition && that.$element.hasClass('fade'); |
| 81 |
if (!that.$element.parent().length) { |
| 82 |
that.$element.appendTo(that.$body); // don't move modals dom position |
| 83 |
} |
| 84 |
that.$element.show().scrollTop(0); |
| 85 |
that.adjustDialog(); |
| 86 |
if (transition) { |
| 87 |
that.$element[0].offsetWidth; // force reflow |
| 88 |
} |
| 89 |
that.$element.addClass('in'); |
| 90 |
if (that.options.enforceFocus !== false) { |
| 91 |
that.enforceFocus(); |
| 92 |
} |
| 93 |
var e = $.Event('shown.wpbc.modal', { |
| 94 |
relatedTarget: _relatedTarget |
| 95 |
}); |
| 96 |
transition ? that.$dialog // wait for modal to slide in |
| 97 |
.one('bsTransitionEnd', function () { |
| 98 |
that.$element.trigger('focus').trigger(e); |
| 99 |
}).emulateTransitionEnd(Modal.TRANSITION_DURATION) : that.$element.trigger('focus').trigger(e); |
| 100 |
}); |
| 101 |
}; |
| 102 |
Modal.prototype.hide = function (e) { |
| 103 |
if (e) e.preventDefault(); |
| 104 |
e = $.Event('hide.wpbc.modal'); |
| 105 |
this.$element.trigger(e); |
| 106 |
if (!this.isShown || e.isDefaultPrevented()) return; |
| 107 |
this.isShown = false; |
| 108 |
this.escape(); |
| 109 |
this.resize(); |
| 110 |
if (this.options.enforceFocus !== false) { |
| 111 |
$(document).off('focusin.wpbc.modal'); |
| 112 |
} |
| 113 |
this.$element.removeClass('in').off('click.dismiss.wpbc.modal').off('mouseup.dismiss.wpbc.modal'); |
| 114 |
this.$dialog.off('mousedown.dismiss.wpbc.modal'); |
| 115 |
$.support.transition && this.$element.hasClass('fade') ? this.$element.one('bsTransitionEnd', $.proxy(this.hideModal, this)).emulateTransitionEnd(Modal.TRANSITION_DURATION) : this.hideModal(); |
| 116 |
}; |
| 117 |
Modal.prototype.enforceFocus = function () { |
| 118 |
$(document).off('focusin.wpbc.modal') // guard against infinite focus loop |
| 119 |
.on('focusin.wpbc.modal', $.proxy(function (e) { |
| 120 |
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { |
| 121 |
this.$element.trigger('focus'); |
| 122 |
} |
| 123 |
}, this)); |
| 124 |
}; |
| 125 |
Modal.prototype.escape = function () { |
| 126 |
if (this.isShown && this.options.keyboard) { |
| 127 |
this.$element.on('keydown.dismiss.wpbc.modal', $.proxy(function (e) { |
| 128 |
e.which == 27 && this.hide(); |
| 129 |
}, this)); |
| 130 |
} else if (!this.isShown) { |
| 131 |
this.$element.off('keydown.dismiss.wpbc.modal'); |
| 132 |
} |
| 133 |
}; |
| 134 |
Modal.prototype.resize = function () { |
| 135 |
if (this.isShown) { |
| 136 |
$(window).on('resize.wpbc.modal', $.proxy(this.handleUpdate, this)); |
| 137 |
} else { |
| 138 |
$(window).off('resize.wpbc.modal'); |
| 139 |
} |
| 140 |
}; |
| 141 |
Modal.prototype.hideModal = function () { |
| 142 |
var that = this; |
| 143 |
this.$element.hide(); |
| 144 |
this.backdrop(function () { |
| 145 |
that.$body.removeClass('modal-open'); |
| 146 |
that.resetAdjustments(); |
| 147 |
that.resetScrollbar(); |
| 148 |
that.$element.trigger('hidden.wpbc.modal'); |
| 149 |
}); |
| 150 |
}; |
| 151 |
Modal.prototype.removeBackdrop = function () { |
| 152 |
this.$backdrop && this.$backdrop.remove(); |
| 153 |
this.$backdrop = null; |
| 154 |
}; |
| 155 |
Modal.prototype.backdrop = function (callback) { |
| 156 |
var that = this; |
| 157 |
var animate = this.$element.hasClass('fade') ? 'fade' : ''; |
| 158 |
if (this.isShown && this.options.backdrop) { |
| 159 |
var doAnimate = $.support.transition && animate; |
| 160 |
this.$backdrop = $(document.createElement('div')).addClass('modal-backdrop ' + animate).appendTo(this.$body); |
| 161 |
this.$element.on('click.dismiss.wpbc.modal', $.proxy(function (e) { |
| 162 |
if (this.ignoreBackdropClick) { |
| 163 |
this.ignoreBackdropClick = false; |
| 164 |
return; |
| 165 |
} |
| 166 |
if (e.target !== e.currentTarget) return; |
| 167 |
this.options.backdrop == 'static' ? this.$element[0].focus() : this.hide(); |
| 168 |
}, this)); |
| 169 |
if (doAnimate) this.$backdrop[0].offsetWidth; // force reflow |
| 170 |
|
| 171 |
this.$backdrop.addClass('in'); |
| 172 |
if (!callback) return; |
| 173 |
doAnimate ? this.$backdrop.one('bsTransitionEnd', callback).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callback(); |
| 174 |
} else if (!this.isShown && this.$backdrop) { |
| 175 |
this.$backdrop.removeClass('in'); |
| 176 |
var callbackRemove = function () { |
| 177 |
that.removeBackdrop(); |
| 178 |
callback && callback(); |
| 179 |
}; |
| 180 |
$.support.transition && this.$element.hasClass('fade') ? this.$backdrop.one('bsTransitionEnd', callbackRemove).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callbackRemove(); |
| 181 |
} else if (callback) { |
| 182 |
callback(); |
| 183 |
} |
| 184 |
}; |
| 185 |
|
| 186 |
// these following methods are used to handle overflowing modals |
| 187 |
|
| 188 |
Modal.prototype.handleUpdate = function () { |
| 189 |
this.adjustDialog(); |
| 190 |
}; |
| 191 |
Modal.prototype.adjustDialog = function () { |
| 192 |
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight; |
| 193 |
this.$element.css({ |
| 194 |
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', |
| 195 |
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' |
| 196 |
}); |
| 197 |
}; |
| 198 |
Modal.prototype.resetAdjustments = function () { |
| 199 |
this.$element.css({ |
| 200 |
paddingLeft: '', |
| 201 |
paddingRight: '' |
| 202 |
}); |
| 203 |
}; |
| 204 |
Modal.prototype.checkScrollbar = function () { |
| 205 |
var fullWindowWidth = window.innerWidth; |
| 206 |
if (!fullWindowWidth) { |
| 207 |
// workaround for missing window.innerWidth in IE8 |
| 208 |
var documentElementRect = document.documentElement.getBoundingClientRect(); |
| 209 |
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left); |
| 210 |
} |
| 211 |
this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth; |
| 212 |
this.scrollbarWidth = this.measureScrollbar(); |
| 213 |
}; |
| 214 |
Modal.prototype.setScrollbar = function () { |
| 215 |
var bodyPad = parseInt(this.$body.css('padding-right') || 0, 10); |
| 216 |
this.originalBodyPad = document.body.style.paddingRight || ''; |
| 217 |
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth); |
| 218 |
}; |
| 219 |
Modal.prototype.resetScrollbar = function () { |
| 220 |
this.$body.css('padding-right', this.originalBodyPad); |
| 221 |
}; |
| 222 |
Modal.prototype.measureScrollbar = function () { |
| 223 |
// thx walsh |
| 224 |
var scrollDiv = document.createElement('div'); |
| 225 |
scrollDiv.className = 'modal-scrollbar-measure'; |
| 226 |
this.$body.append(scrollDiv); |
| 227 |
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; |
| 228 |
this.$body[0].removeChild(scrollDiv); |
| 229 |
return scrollbarWidth; |
| 230 |
}; |
| 231 |
|
| 232 |
// MODAL PLUGIN DEFINITION |
| 233 |
// ======================= |
| 234 |
|
| 235 |
function Plugin(option, _relatedTarget) { |
| 236 |
return this.each(function () { |
| 237 |
var $this = $(this); |
| 238 |
var data = $this.data('wpbc.modal'); |
| 239 |
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option); |
| 240 |
if (!data) $this.data('wpbc.modal', data = new Modal(this, options)); |
| 241 |
if (typeof option == 'string') data[option](_relatedTarget);else if (options.show) data.show(_relatedTarget); |
| 242 |
}); |
| 243 |
} |
| 244 |
var old = $.fn.wpbc_my_modal; |
| 245 |
$.fn.wpbc_my_modal = Plugin; |
| 246 |
$.fn.wpbc_my_modal.Constructor = Modal; |
| 247 |
|
| 248 |
// MODAL NO CONFLICT |
| 249 |
// ================= |
| 250 |
|
| 251 |
$.fn.wpbc_my_modal.noConflict = function () { |
| 252 |
$.fn.wpbc_my_modal = old; |
| 253 |
return this; |
| 254 |
}; |
| 255 |
|
| 256 |
// MODAL DATA-API |
| 257 |
// ============== |
| 258 |
|
| 259 |
$(document).on('click.wpbc.modal.data-api', '[data-toggle="wpbc_my_modal"]', function (e) { |
| 260 |
var $this = $(this); |
| 261 |
var href = $this.attr('href'); |
| 262 |
var $target = $($this.attr('data-target') || href && href.replace(/.*(?=#[^\s]+$)/, '')); // strip for ie7 |
| 263 |
var option = $target.data('wpbc.modal') ? 'toggle' : $.extend({ |
| 264 |
remote: !/#/.test(href) && href |
| 265 |
}, $target.data(), $this.data()); |
| 266 |
if ($this.is('a')) e.preventDefault(); |
| 267 |
$target.one('show.wpbc.modal', function (showEvent) { |
| 268 |
if (showEvent.isDefaultPrevented()) return; // only register focus restorer if modal will actually get shown |
| 269 |
$target.one('hidden.wpbc.modal', function () { |
| 270 |
$this.is(':visible') && $this.trigger('focus'); |
| 271 |
}); |
| 272 |
}); |
| 273 |
Plugin.call($target, option, this); |
| 274 |
}); |
| 275 |
}(jQuery); |
| 276 |
+function ($) { |
| 277 |
'use strict'; |
| 278 |
|
| 279 |
// DROPDOWN CLASS DEFINITION |
| 280 |
// ========================= |
| 281 |
var backdrop = '.dropdown-backdrop'; |
| 282 |
var toggle = '[data-toggle="wpbc_dropdown"]'; |
| 283 |
var Dropdown = function (element) { |
| 284 |
$(element).on('click.wpbc.dropdown', this.toggle); |
| 285 |
}; |
| 286 |
Dropdown.VERSION = '3.3.5'; |
| 287 |
function getParent($this) { |
| 288 |
var selector = $this.attr('data-target'); |
| 289 |
if (!selector) { |
| 290 |
selector = $this.attr('href'); |
| 291 |
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, ''); // strip for ie7 |
| 292 |
} |
| 293 |
var $parent = selector && $(selector); |
| 294 |
return $parent && $parent.length ? $parent : $this.parent(); |
| 295 |
} |
| 296 |
function clearMenus(e) { |
| 297 |
if (e && e.which === 3) return; |
| 298 |
$(backdrop).remove(); |
| 299 |
$(toggle).each(function () { |
| 300 |
var $this = $(this); |
| 301 |
var $parent = getParent($this); |
| 302 |
var relatedTarget = { |
| 303 |
relatedTarget: this |
| 304 |
}; |
| 305 |
if (!$parent.hasClass('open')) return; |
| 306 |
if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return; |
| 307 |
$parent.trigger(e = $.Event('hide.wpbc.dropdown', relatedTarget)); |
| 308 |
if (e.isDefaultPrevented()) return; |
| 309 |
$this.attr('aria-expanded', 'false'); |
| 310 |
$parent.removeClass('open').trigger('hidden.wpbc.dropdown', relatedTarget); |
| 311 |
}); |
| 312 |
} |
| 313 |
Dropdown.prototype.toggle = function (e) { |
| 314 |
var $this = $(this); |
| 315 |
if ($this.is('.disabled, :disabled')) return; |
| 316 |
var $parent = getParent($this); |
| 317 |
var isActive = $parent.hasClass('open'); |
| 318 |
clearMenus(); |
| 319 |
if (!isActive) { |
| 320 |
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { |
| 321 |
// if mobile we use a backdrop because click events don't delegate |
| 322 |
$(document.createElement('div')).addClass('dropdown-backdrop').insertAfter($(this)).on('click', clearMenus); |
| 323 |
} |
| 324 |
var relatedTarget = { |
| 325 |
relatedTarget: this |
| 326 |
}; |
| 327 |
$parent.trigger(e = $.Event('show.wpbc.dropdown', relatedTarget)); |
| 328 |
if (e.isDefaultPrevented()) return; |
| 329 |
$this.trigger('focus').attr('aria-expanded', 'true'); |
| 330 |
$parent.toggleClass('open').trigger('shown.wpbc.dropdown', relatedTarget); |
| 331 |
} |
| 332 |
return false; |
| 333 |
}; |
| 334 |
Dropdown.prototype.keydown = function (e) { |
| 335 |
if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return; |
| 336 |
var $this = $(this); |
| 337 |
e.preventDefault(); |
| 338 |
e.stopPropagation(); |
| 339 |
if ($this.is('.disabled, :disabled')) return; |
| 340 |
var $parent = getParent($this); |
| 341 |
var isActive = $parent.hasClass('open'); |
| 342 |
if (!isActive && e.which != 27 || isActive && e.which == 27) { |
| 343 |
if (e.which == 27) $parent.find(toggle).trigger('focus'); |
| 344 |
return $this.trigger('click'); |
| 345 |
} |
| 346 |
var desc = ' li:not(.disabled):visible a'; |
| 347 |
var $items = $parent.find('.dropdown-menu' + desc + ',.ui_dropdown_menu' + desc); |
| 348 |
if (!$items.length) return; |
| 349 |
var index = $items.index(e.target); |
| 350 |
if (e.which == 38 && index > 0) index--; // up |
| 351 |
if (e.which == 40 && index < $items.length - 1) index++; // down |
| 352 |
if (!~index) index = 0; |
| 353 |
$items.eq(index).trigger('focus'); |
| 354 |
}; |
| 355 |
|
| 356 |
// DROPDOWN PLUGIN DEFINITION |
| 357 |
// ========================== |
| 358 |
|
| 359 |
function Plugin(option) { |
| 360 |
return this.each(function () { |
| 361 |
var $this = $(this); |
| 362 |
var data = $this.data('wpbc.dropdown'); |
| 363 |
if (!data) $this.data('wpbc.dropdown', data = new Dropdown(this)); |
| 364 |
if (typeof option == 'string') data[option].call($this); |
| 365 |
}); |
| 366 |
} |
| 367 |
var old = $.fn.wpbc_dropdown; |
| 368 |
$.fn.wpbc_dropdown = Plugin; |
| 369 |
$.fn.wpbc_dropdown.Constructor = Dropdown; |
| 370 |
|
| 371 |
// DROPDOWN NO CONFLICT |
| 372 |
// ==================== |
| 373 |
|
| 374 |
$.fn.wpbc_dropdown.noConflict = function () { |
| 375 |
$.fn.wpbc_dropdown = old; |
| 376 |
return this; |
| 377 |
}; |
| 378 |
|
| 379 |
// APPLY TO STANDARD DROPDOWN ELEMENTS |
| 380 |
// =================================== |
| 381 |
|
| 382 |
$(document).on('click.wpbc.dropdown.data-api', clearMenus).on('click.wpbc.dropdown.data-api', '.dropdown form', function (e) { |
| 383 |
e.stopPropagation(); |
| 384 |
}).on('click.wpbc.dropdown.data-api', toggle, Dropdown.prototype.toggle).on('keydown.wpbc.dropdown.data-api', toggle, Dropdown.prototype.keydown).on('keydown.wpbc.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown).on('keydown.wpbc.dropdown.data-api', '.ui_dropdown_menu', Dropdown.prototype.keydown); |
| 385 |
}(jQuery); |
| 386 |
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9ycy9fY3VzdG9tL2Ryb3Bkb3duX21vZGFsL19vdXQvZHJvcGRvd25fbW9kYWwuanMiLCJuYW1lcyI6WyJqUXVlcnkiLCJFcnJvciIsIiQiLCJ2ZXJzaW9uIiwiZm4iLCJqcXVlcnkiLCJzcGxpdCIsIk1vZGFsIiwiZWxlbWVudCIsIm9wdGlvbnMiLCIkYm9keSIsImRvY3VtZW50IiwiYm9keSIsIiRlbGVtZW50IiwiJGRpYWxvZyIsImZpbmQiLCIkYmFja2Ryb3AiLCJpc1Nob3duIiwib3JpZ2luYWxCb2R5UGFkIiwic2Nyb2xsYmFyV2lkdGgiLCJpZ25vcmVCYWNrZHJvcENsaWNrIiwicmVtb3RlIiwibG9hZCIsInByb3h5IiwidHJpZ2dlciIsIlZFUlNJT04iLCJUUkFOU0lUSU9OX0RVUkFUSU9OIiwiQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTiIsIkRFRkFVTFRTIiwiYmFja2Ryb3AiLCJrZXlib2FyZCIsInNob3ciLCJlbmZvcmNlRm9jdXMiLCJwcm90b3R5cGUiLCJ0b2dnbGUiLCJfcmVsYXRlZFRhcmdldCIsImhpZGUiLCJ0aGF0IiwiZSIsIkV2ZW50IiwicmVsYXRlZFRhcmdldCIsImlzRGVmYXVsdFByZXZlbnRlZCIsImNoZWNrU2Nyb2xsYmFyIiwic2V0U2Nyb2xsYmFyIiwiYWRkQ2xhc3MiLCJlc2NhcGUiLCJyZXNpemUiLCJvbiIsIm9uZSIsInRhcmdldCIsImlzIiwidHJhbnNpdGlvbiIsInN1cHBvcnQiLCJoYXNDbGFzcyIsInBhcmVudCIsImxlbmd0aCIsImFwcGVuZFRvIiwic2Nyb2xsVG9wIiwiYWRqdXN0RGlhbG9nIiwib2Zmc2V0V2lkdGgiLCJlbXVsYXRlVHJhbnNpdGlvbkVuZCIsInByZXZlbnREZWZhdWx0Iiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJoaWRlTW9kYWwiLCJoYXMiLCJ3aGljaCIsIndpbmRvdyIsImhhbmRsZVVwZGF0ZSIsInJlc2V0QWRqdXN0bWVudHMiLCJyZXNldFNjcm9sbGJhciIsInJlbW92ZUJhY2tkcm9wIiwicmVtb3ZlIiwiY2FsbGJhY2siLCJhbmltYXRlIiwiZG9BbmltYXRlIiwiY3JlYXRlRWxlbWVudCIsImN1cnJlbnRUYXJnZXQiLCJmb2N1cyIsImNhbGxiYWNrUmVtb3ZlIiwibW9kYWxJc092ZXJmbG93aW5nIiwic2Nyb2xsSGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50SGVpZ2h0IiwiY3NzIiwicGFkZGluZ0xlZnQiLCJib2R5SXNPdmVyZmxvd2luZyIsInBhZGRpbmdSaWdodCIsImZ1bGxXaW5kb3dXaWR0aCIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnRSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicmlnaHQiLCJNYXRoIiwiYWJzIiwibGVmdCIsImNsaWVudFdpZHRoIiwibWVhc3VyZVNjcm9sbGJhciIsImJvZHlQYWQiLCJwYXJzZUludCIsInN0eWxlIiwic2Nyb2xsRGl2IiwiY2xhc3NOYW1lIiwiYXBwZW5kIiwicmVtb3ZlQ2hpbGQiLCJQbHVnaW4iLCJvcHRpb24iLCJlYWNoIiwiJHRoaXMiLCJkYXRhIiwiZXh0ZW5kIiwib2xkIiwid3BiY19teV9tb2RhbCIsIkNvbnN0cnVjdG9yIiwibm9Db25mbGljdCIsImhyZWYiLCJhdHRyIiwiJHRhcmdldCIsInJlcGxhY2UiLCJ0ZXN0Iiwic2hvd0V2ZW50IiwiY2FsbCIsIkRyb3Bkb3duIiwiZ2V0UGFyZW50Iiwic2VsZWN0b3IiLCIkcGFyZW50IiwiY2xlYXJNZW51cyIsInR5cGUiLCJ0YWdOYW1lIiwiY29udGFpbnMiLCJpc0FjdGl2ZSIsImNsb3Nlc3QiLCJpbnNlcnRBZnRlciIsInRvZ2dsZUNsYXNzIiwia2V5ZG93biIsInN0b3BQcm9wYWdhdGlvbiIsImRlc2MiLCIkaXRlbXMiLCJpbmRleCIsImVxIiwid3BiY19kcm9wZG93biJdLCJzb3VyY2VzIjpbInZlbmRvcnMvX2N1c3RvbS9kcm9wZG93bl9tb2RhbC9fc3JjL2Ryb3Bkb3duX21vZGFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxyXG4gKiBHZW5lcmF0ZWQgdXNpbmcgdGhlIEJvb3RzdHJhcCBDdXN0b21pemVyIChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9jdXN0b21pemUvP2lkPWY0YjRjOWNiODVkZjc1N2NhMDhjKVxyXG4gKiBDb25maWcgc2F2ZWQgdG8gY29uZmlnLmpzb24gYW5kIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2Y0YjRjOWNiODVkZjc1N2NhMDhjXHJcbiAqL1xyXG5pZiAodHlwZW9mIGpRdWVyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICB0aHJvdyBuZXcgRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnknKVxyXG59XHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuICB2YXIgdmVyc2lvbiA9ICQuZm4uanF1ZXJ5LnNwbGl0KCcgJylbMF0uc3BsaXQoJy4nKVxyXG4gIGlmICgodmVyc2lvblswXSA8IDIgJiYgdmVyc2lvblsxXSA8IDkpIHx8ICh2ZXJzaW9uWzBdID09IDEgJiYgdmVyc2lvblsxXSA9PSA5ICYmIHZlcnNpb25bMl0gPCAxKSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5IHZlcnNpb24gMS45LjEgb3IgaGlnaGVyJylcclxuICB9XHJcbn0oalF1ZXJ5KTtcclxuXHJcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBCb290c3RyYXA6IG1vZGFsLmpzIHYzLjMuNVxyXG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNtb2RhbHNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcblxyXG4rZnVuY3Rpb24gKCQpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIC8vIE1PREFMIENMQVNTIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHZhciBNb2RhbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgICAgICAgICAgICAgPSBvcHRpb25zXHJcbiAgICB0aGlzLiRib2R5ICAgICAgICAgICAgICAgPSAkKGRvY3VtZW50LmJvZHkpXHJcbiAgICB0aGlzLiRlbGVtZW50ICAgICAgICAgICAgPSAkKGVsZW1lbnQpXHJcbiAgICB0aGlzLiRkaWFsb2cgICAgICAgICAgICAgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5tb2RhbC1kaWFsb2cnKVxyXG4gICAgdGhpcy4kYmFja2Ryb3AgICAgICAgICAgID0gbnVsbFxyXG4gICAgdGhpcy5pc1Nob3duICAgICAgICAgICAgID0gbnVsbFxyXG4gICAgdGhpcy5vcmlnaW5hbEJvZHlQYWQgICAgID0gbnVsbFxyXG4gICAgdGhpcy5zY3JvbGxiYXJXaWR0aCAgICAgID0gMFxyXG4gICAgdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbW90ZSkge1xyXG4gICAgICB0aGlzLiRlbGVtZW50XHJcbiAgICAgICAgLmZpbmQoJy5tb2RhbC1jb250ZW50JylcclxuICAgICAgICAubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignbG9hZGVkLndwYmMubW9kYWwnKVxyXG4gICAgICAgIH0sIHRoaXMpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgTW9kYWwuVkVSU0lPTiAgPSAnMy4zLjUnXHJcblxyXG4gIE1vZGFsLlRSQU5TSVRJT05fRFVSQVRJT04gPSAzMDBcclxuICBNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXHJcblxyXG4gIE1vZGFsLkRFRkFVTFRTID0ge1xyXG4gICAgYmFja2Ryb3A6IHRydWUsXHJcbiAgICBrZXlib2FyZDogdHJ1ZSxcclxuICAgIHNob3c6IHRydWUsXHJcbiAgICBlbmZvcmNlRm9jdXM6IHRydWVcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoX3JlbGF0ZWRUYXJnZXQpIHtcclxuICAgIHJldHVybiB0aGlzLmlzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhfcmVsYXRlZFRhcmdldClcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKF9yZWxhdGVkVGFyZ2V0KSB7XHJcbiAgICB2YXIgdGhhdCA9IHRoaXNcclxuICAgIHZhciBlICAgID0gJC5FdmVudCgnc2hvdy53cGJjLm1vZGFsJywgeyByZWxhdGVkVGFyZ2V0OiBfcmVsYXRlZFRhcmdldCB9KVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxyXG5cclxuICAgIGlmICh0aGlzLmlzU2hvd24gfHwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5pc1Nob3duID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMuY2hlY2tTY3JvbGxiYXIoKVxyXG4gICAgdGhpcy5zZXRTY3JvbGxiYXIoKVxyXG4gICAgdGhpcy4kYm9keS5hZGRDbGFzcygnbW9kYWwtb3BlbicpXHJcblxyXG4gICAgdGhpcy5lc2NhcGUoKVxyXG4gICAgdGhpcy5yZXNpemUoKVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLmRpc21pc3Mud3BiYy5tb2RhbCcsICdbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl0nLCAkLnByb3h5KHRoaXMuaGlkZSwgdGhpcykpXHJcblxyXG4gICAgdGhpcy4kZGlhbG9nLm9uKCdtb3VzZWRvd24uZGlzbWlzcy53cGJjLm1vZGFsJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGF0LiRlbGVtZW50Lm9uZSgnbW91c2V1cC5kaXNtaXNzLndwYmMubW9kYWwnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICgkKGUudGFyZ2V0KS5pcyh0aGF0LiRlbGVtZW50KSkgdGhhdC5pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHRyYW5zaXRpb24gPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGF0LiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJylcclxuXHJcbiAgICAgIGlmICghdGhhdC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGgpIHtcclxuICAgICAgICB0aGF0LiRlbGVtZW50LmFwcGVuZFRvKHRoYXQuJGJvZHkpIC8vIGRvbid0IG1vdmUgbW9kYWxzIGRvbSBwb3NpdGlvblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGF0LiRlbGVtZW50XHJcbiAgICAgICAgLnNob3coKVxyXG4gICAgICAgIC5zY3JvbGxUb3AoMClcclxuXHJcbiAgICAgIHRoYXQuYWRqdXN0RGlhbG9nKClcclxuXHJcbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgdGhhdC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCAvLyBmb3JjZSByZWZsb3dcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhhdC4kZWxlbWVudC5hZGRDbGFzcygnaW4nKVxyXG5cclxuXHRcdGlmICggdGhhdC5vcHRpb25zLmVuZm9yY2VGb2N1cyAhPT0gZmFsc2UgKSB7XHJcblx0XHRcdHRoYXQuZW5mb3JjZUZvY3VzKCk7XHJcblx0XHR9XHJcblxyXG4gICAgICB2YXIgZSA9ICQuRXZlbnQoJ3Nob3duLndwYmMubW9kYWwnLCB7IHJlbGF0ZWRUYXJnZXQ6IF9yZWxhdGVkVGFyZ2V0IH0pXHJcblxyXG4gICAgICB0cmFuc2l0aW9uID9cclxuICAgICAgICB0aGF0LiRkaWFsb2cgLy8gd2FpdCBmb3IgbW9kYWwgdG8gc2xpZGUgaW5cclxuICAgICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpLnRyaWdnZXIoZSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuVFJBTlNJVElPTl9EVVJBVElPTikgOlxyXG4gICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKS50cmlnZ2VyKGUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgIGUgPSAkLkV2ZW50KCdoaWRlLndwYmMubW9kYWwnKVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxyXG5cclxuICAgIGlmICghdGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxyXG5cclxuICAgIHRoaXMuaXNTaG93biA9IGZhbHNlXHJcblxyXG4gICAgdGhpcy5lc2NhcGUoKVxyXG4gICAgdGhpcy5yZXNpemUoKVxyXG5cclxuXHQgIGlmICggdGhpcy5vcHRpb25zLmVuZm9yY2VGb2N1cyAhPT0gZmFsc2UgKSB7XHJcblx0XHQgICQoIGRvY3VtZW50ICkub2ZmKCAnZm9jdXNpbi53cGJjLm1vZGFsJyApO1xyXG5cdCAgfVxyXG5cclxuXHJcbiAgICB0aGlzLiRlbGVtZW50XHJcbiAgICAgIC5yZW1vdmVDbGFzcygnaW4nKVxyXG4gICAgICAub2ZmKCdjbGljay5kaXNtaXNzLndwYmMubW9kYWwnKVxyXG4gICAgICAub2ZmKCdtb3VzZXVwLmRpc21pc3Mud3BiYy5tb2RhbCcpXHJcblxyXG4gICAgdGhpcy4kZGlhbG9nLm9mZignbW91c2Vkb3duLmRpc21pc3Mud3BiYy5tb2RhbCcpXHJcblxyXG4gICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID9cclxuICAgICAgdGhpcy4kZWxlbWVudFxyXG4gICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsICQucHJveHkodGhpcy5oaWRlTW9kYWwsIHRoaXMpKVxyXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XHJcbiAgICAgIHRoaXMuaGlkZU1vZGFsKClcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAkKGRvY3VtZW50KVxyXG4gICAgICAub2ZmKCdmb2N1c2luLndwYmMubW9kYWwnKSAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcclxuICAgICAgLm9uKCdmb2N1c2luLndwYmMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0gIT09IGUudGFyZ2V0ICYmICF0aGlzLiRlbGVtZW50LmhhcyhlLnRhcmdldCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2ZvY3VzJylcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHRoaXMpKVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmVzY2FwZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmtleWJvYXJkKSB7XHJcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24uZGlzbWlzcy53cGJjLm1vZGFsJywgJC5wcm94eShmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUud2hpY2ggPT0gMjcgJiYgdGhpcy5oaWRlKClcclxuICAgICAgfSwgdGhpcykpXHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24pIHtcclxuICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ2tleWRvd24uZGlzbWlzcy53cGJjLm1vZGFsJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5pc1Nob3duKSB7XHJcbiAgICAgICQod2luZG93KS5vbigncmVzaXplLndwYmMubW9kYWwnLCAkLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLCB0aGlzKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICQod2luZG93KS5vZmYoJ3Jlc2l6ZS53cGJjLm1vZGFsJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5oaWRlTW9kYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdGhhdCA9IHRoaXNcclxuICAgIHRoaXMuJGVsZW1lbnQuaGlkZSgpXHJcbiAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdGhhdC4kYm9keS5yZW1vdmVDbGFzcygnbW9kYWwtb3BlbicpXHJcbiAgICAgIHRoYXQucmVzZXRBZGp1c3RtZW50cygpXHJcbiAgICAgIHRoYXQucmVzZXRTY3JvbGxiYXIoKVxyXG4gICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoJ2hpZGRlbi53cGJjLm1vZGFsJylcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLiRiYWNrZHJvcCAmJiB0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKVxyXG4gICAgdGhpcy4kYmFja2Ryb3AgPSBudWxsXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUuYmFja2Ryb3AgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgIHZhciB0aGF0ID0gdGhpc1xyXG4gICAgdmFyIGFuaW1hdGUgPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPyAnZmFkZScgOiAnJ1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmJhY2tkcm9wKSB7XHJcbiAgICAgIHZhciBkb0FuaW1hdGUgPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiBhbmltYXRlXHJcblxyXG4gICAgICB0aGlzLiRiYWNrZHJvcCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpXHJcbiAgICAgICAgLmFkZENsYXNzKCdtb2RhbC1iYWNrZHJvcCAnICsgYW5pbWF0ZSlcclxuICAgICAgICAuYXBwZW5kVG8odGhpcy4kYm9keSlcclxuXHJcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLmRpc21pc3Mud3BiYy5tb2RhbCcsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrKSB7XHJcbiAgICAgICAgICB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0KSByZXR1cm5cclxuICAgICAgICB0aGlzLm9wdGlvbnMuYmFja2Ryb3AgPT0gJ3N0YXRpYydcclxuICAgICAgICAgID8gdGhpcy4kZWxlbWVudFswXS5mb2N1cygpXHJcbiAgICAgICAgICA6IHRoaXMuaGlkZSgpXHJcbiAgICAgIH0sIHRoaXMpKVxyXG5cclxuICAgICAgaWYgKGRvQW5pbWF0ZSkgdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93XHJcblxyXG4gICAgICB0aGlzLiRiYWNrZHJvcC5hZGRDbGFzcygnaW4nKVxyXG5cclxuICAgICAgaWYgKCFjYWxsYmFjaykgcmV0dXJuXHJcblxyXG4gICAgICBkb0FuaW1hdGUgP1xyXG4gICAgICAgIHRoaXMuJGJhY2tkcm9wXHJcbiAgICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjYWxsYmFjaylcclxuICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XHJcbiAgICAgICAgY2FsbGJhY2soKVxyXG5cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTaG93biAmJiB0aGlzLiRiYWNrZHJvcCkge1xyXG4gICAgICB0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygnaW4nKVxyXG5cclxuICAgICAgdmFyIGNhbGxiYWNrUmVtb3ZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoYXQucmVtb3ZlQmFja2Ryb3AoKVxyXG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcclxuICAgICAgfVxyXG4gICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgP1xyXG4gICAgICAgIHRoaXMuJGJhY2tkcm9wXHJcbiAgICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjYWxsYmFja1JlbW92ZSlcclxuICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XHJcbiAgICAgICAgY2FsbGJhY2tSZW1vdmUoKVxyXG5cclxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgY2FsbGJhY2soKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gdGhlc2UgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xyXG5cclxuICBNb2RhbC5wcm90b3R5cGUuaGFuZGxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5hZGp1c3REaWFsb2coKVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmFkanVzdERpYWxvZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBtb2RhbElzT3ZlcmZsb3dpbmcgPSB0aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcclxuXHJcbiAgICB0aGlzLiRlbGVtZW50LmNzcyh7XHJcbiAgICAgIHBhZGRpbmdMZWZ0OiAgIXRoaXMuYm9keUlzT3ZlcmZsb3dpbmcgJiYgbW9kYWxJc092ZXJmbG93aW5nID8gdGhpcy5zY3JvbGxiYXJXaWR0aCA6ICcnLFxyXG4gICAgICBwYWRkaW5nUmlnaHQ6IHRoaXMuYm9keUlzT3ZlcmZsb3dpbmcgJiYgIW1vZGFsSXNPdmVyZmxvd2luZyA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAnJ1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy4kZWxlbWVudC5jc3Moe1xyXG4gICAgICBwYWRkaW5nTGVmdDogJycsXHJcbiAgICAgIHBhZGRpbmdSaWdodDogJydcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZnVsbFdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGhcclxuICAgIGlmICghZnVsbFdpbmRvd1dpZHRoKSB7IC8vIHdvcmthcm91bmQgZm9yIG1pc3Npbmcgd2luZG93LmlubmVyV2lkdGggaW4gSUU4XHJcbiAgICAgIHZhciBkb2N1bWVudEVsZW1lbnRSZWN0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgICAgIGZ1bGxXaW5kb3dXaWR0aCA9IGRvY3VtZW50RWxlbWVudFJlY3QucmlnaHQgLSBNYXRoLmFicyhkb2N1bWVudEVsZW1lbnRSZWN0LmxlZnQpXHJcbiAgICB9XHJcbiAgICB0aGlzLmJvZHlJc092ZXJmbG93aW5nID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8IGZ1bGxXaW5kb3dXaWR0aFxyXG4gICAgdGhpcy5zY3JvbGxiYXJXaWR0aCA9IHRoaXMubWVhc3VyZVNjcm9sbGJhcigpXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUuc2V0U2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGJvZHlQYWQgPSBwYXJzZUludCgodGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnKSB8fCAwKSwgMTApXHJcbiAgICB0aGlzLm9yaWdpbmFsQm9keVBhZCA9IGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0IHx8ICcnXHJcbiAgICBpZiAodGhpcy5ib2R5SXNPdmVyZmxvd2luZykgdGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBib2R5UGFkICsgdGhpcy5zY3JvbGxiYXJXaWR0aClcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuJGJvZHkuY3NzKCdwYWRkaW5nLXJpZ2h0JywgdGhpcy5vcmlnaW5hbEJvZHlQYWQpXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUubWVhc3VyZVNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHsgLy8gdGh4IHdhbHNoXHJcbiAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgIHNjcm9sbERpdi5jbGFzc05hbWUgPSAnbW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUnXHJcbiAgICB0aGlzLiRib2R5LmFwcGVuZChzY3JvbGxEaXYpXHJcbiAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYub2Zmc2V0V2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGhcclxuICAgIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoc2Nyb2xsRGl2KVxyXG4gICAgcmV0dXJuIHNjcm9sbGJhcldpZHRoXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gTU9EQUwgUExVR0lOIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uLCBfcmVsYXRlZFRhcmdldCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxyXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ3dwYmMubW9kYWwnKVxyXG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBNb2RhbC5ERUZBVUxUUywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcclxuXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnd3BiYy5tb2RhbCcsIChkYXRhID0gbmV3IE1vZGFsKHRoaXMsIG9wdGlvbnMpKSlcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXShfcmVsYXRlZFRhcmdldClcclxuICAgICAgZWxzZSBpZiAob3B0aW9ucy5zaG93KSBkYXRhLnNob3coX3JlbGF0ZWRUYXJnZXQpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmFyIG9sZCA9ICQuZm4ud3BiY19teV9tb2RhbFxyXG5cclxuICAkLmZuLndwYmNfbXlfbW9kYWwgICAgICAgICAgICAgPSBQbHVnaW5cclxuICAkLmZuLndwYmNfbXlfbW9kYWwuQ29uc3RydWN0b3IgPSBNb2RhbFxyXG5cclxuXHJcbiAgLy8gTU9EQUwgTk8gQ09ORkxJQ1RcclxuICAvLyA9PT09PT09PT09PT09PT09PVxyXG5cclxuICAkLmZuLndwYmNfbXlfbW9kYWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICQuZm4ud3BiY19teV9tb2RhbCA9IG9sZFxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG5cclxuICAvLyBNT0RBTCBEQVRBLUFQSVxyXG4gIC8vID09PT09PT09PT09PT09XHJcblxyXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay53cGJjLm1vZGFsLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cIndwYmNfbXlfbW9kYWxcIl0nLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXHJcbiAgICB2YXIgaHJlZiAgICA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxyXG4gICAgdmFyICR0YXJnZXQgPSAkKCR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykgfHwgKGhyZWYgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykpKSAvLyBzdHJpcCBmb3IgaWU3XHJcbiAgICB2YXIgb3B0aW9uICA9ICR0YXJnZXQuZGF0YSgnd3BiYy5tb2RhbCcpID8gJ3RvZ2dsZScgOiAkLmV4dGVuZCh7IHJlbW90ZTogIS8jLy50ZXN0KGhyZWYpICYmIGhyZWYgfSwgJHRhcmdldC5kYXRhKCksICR0aGlzLmRhdGEoKSlcclxuXHJcbiAgICBpZiAoJHRoaXMuaXMoJ2EnKSkgZS5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgJHRhcmdldC5vbmUoJ3Nob3cud3BiYy5tb2RhbCcsIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcclxuICAgICAgaWYgKHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cclxuICAgICAgJHRhcmdldC5vbmUoJ2hpZGRlbi53cGJjLm1vZGFsJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICR0aGlzLmlzKCc6dmlzaWJsZScpICYmICR0aGlzLnRyaWdnZXIoJ2ZvY3VzJylcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgICBQbHVnaW4uY2FsbCgkdGFyZ2V0LCBvcHRpb24sIHRoaXMpXHJcbiAgfSlcclxuXHJcbn0oalF1ZXJ5KTtcclxuXHJcblxyXG4rZnVuY3Rpb24gKCQpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIC8vIERST1BET1dOIENMQVNTIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHZhciBiYWNrZHJvcCA9ICcuZHJvcGRvd24tYmFja2Ryb3AnXHJcbiAgdmFyIHRvZ2dsZSAgID0gJ1tkYXRhLXRvZ2dsZT1cIndwYmNfZHJvcGRvd25cIl0nXHJcbiAgdmFyIERyb3Bkb3duID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICQoZWxlbWVudCkub24oJ2NsaWNrLndwYmMuZHJvcGRvd24nLCB0aGlzLnRvZ2dsZSlcclxuICB9XHJcblxyXG4gIERyb3Bkb3duLlZFUlNJT04gPSAnMy4zLjUnXHJcblxyXG4gIGZ1bmN0aW9uIGdldFBhcmVudCgkdGhpcykge1xyXG4gICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKVxyXG5cclxuICAgIGlmICghc2VsZWN0b3IpIHtcclxuICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJylcclxuICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiAvI1tBLVphLXpdLy50ZXN0KHNlbGVjdG9yKSAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xyXG4gICAgfVxyXG5cclxuICAgIHZhciAkcGFyZW50ID0gc2VsZWN0b3IgJiYgJChzZWxlY3RvcilcclxuXHJcbiAgICByZXR1cm4gJHBhcmVudCAmJiAkcGFyZW50Lmxlbmd0aCA/ICRwYXJlbnQgOiAkdGhpcy5wYXJlbnQoKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xlYXJNZW51cyhlKSB7XHJcbiAgICBpZiAoZSAmJiBlLndoaWNoID09PSAzKSByZXR1cm5cclxuICAgICQoYmFja2Ryb3ApLnJlbW92ZSgpXHJcbiAgICAkKHRvZ2dsZSkuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkdGhpcyAgICAgICAgID0gJCh0aGlzKVxyXG4gICAgICB2YXIgJHBhcmVudCAgICAgICA9IGdldFBhcmVudCgkdGhpcylcclxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7IHJlbGF0ZWRUYXJnZXQ6IHRoaXMgfVxyXG5cclxuICAgICAgaWYgKCEkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJykpIHJldHVyblxyXG5cclxuICAgICAgaWYgKGUgJiYgZS50eXBlID09ICdjbGljaycgJiYgL2lucHV0fHRleHRhcmVhL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSAmJiAkLmNvbnRhaW5zKCRwYXJlbnRbMF0sIGUudGFyZ2V0KSkgcmV0dXJuXHJcblxyXG4gICAgICAkcGFyZW50LnRyaWdnZXIoZSA9ICQuRXZlbnQoJ2hpZGUud3BiYy5kcm9wZG93bicsIHJlbGF0ZWRUYXJnZXQpKVxyXG5cclxuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxyXG5cclxuICAgICAgJHRoaXMuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXHJcbiAgICAgICRwYXJlbnQucmVtb3ZlQ2xhc3MoJ29wZW4nKS50cmlnZ2VyKCdoaWRkZW4ud3BiYy5kcm9wZG93bicsIHJlbGF0ZWRUYXJnZXQpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXHJcblxyXG4gICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm5cclxuXHJcbiAgICB2YXIgJHBhcmVudCAgPSBnZXRQYXJlbnQoJHRoaXMpXHJcbiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJylcclxuXHJcbiAgICBjbGVhck1lbnVzKClcclxuXHJcbiAgICBpZiAoIWlzQWN0aXZlKSB7XHJcbiAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgISRwYXJlbnQuY2xvc2VzdCgnLm5hdmJhci1uYXYnKS5sZW5ndGgpIHtcclxuICAgICAgICAvLyBpZiBtb2JpbGUgd2UgdXNlIGEgYmFja2Ryb3AgYmVjYXVzZSBjbGljayBldmVudHMgZG9uJ3QgZGVsZWdhdGVcclxuICAgICAgICAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKVxyXG4gICAgICAgICAgLmFkZENsYXNzKCdkcm9wZG93bi1iYWNrZHJvcCcpXHJcbiAgICAgICAgICAuaW5zZXJ0QWZ0ZXIoJCh0aGlzKSlcclxuICAgICAgICAgIC5vbignY2xpY2snLCBjbGVhck1lbnVzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHsgcmVsYXRlZFRhcmdldDogdGhpcyB9XHJcbiAgICAgICRwYXJlbnQudHJpZ2dlcihlID0gJC5FdmVudCgnc2hvdy53cGJjLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpXHJcblxyXG4gICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXHJcblxyXG4gICAgICAkdGhpc1xyXG4gICAgICAgIC50cmlnZ2VyKCdmb2N1cycpXHJcbiAgICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpXHJcblxyXG4gICAgICAkcGFyZW50XHJcbiAgICAgICAgLnRvZ2dsZUNsYXNzKCdvcGVuJylcclxuICAgICAgICAudHJpZ2dlcignc2hvd24ud3BiYy5kcm9wZG93bicsIHJlbGF0ZWRUYXJnZXQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93biA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoIS8oMzh8NDB8Mjd8MzIpLy50ZXN0KGUud2hpY2gpIHx8IC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkpIHJldHVyblxyXG5cclxuICAgIHZhciAkdGhpcyA9ICQodGhpcylcclxuXHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuXHJcbiAgICBpZiAoJHRoaXMuaXMoJy5kaXNhYmxlZCwgOmRpc2FibGVkJykpIHJldHVyblxyXG5cclxuICAgIHZhciAkcGFyZW50ICA9IGdldFBhcmVudCgkdGhpcylcclxuICAgIHZhciBpc0FjdGl2ZSA9ICRwYXJlbnQuaGFzQ2xhc3MoJ29wZW4nKVxyXG5cclxuICAgIGlmICghaXNBY3RpdmUgJiYgZS53aGljaCAhPSAyNyB8fCBpc0FjdGl2ZSAmJiBlLndoaWNoID09IDI3KSB7XHJcbiAgICAgIGlmIChlLndoaWNoID09IDI3KSAkcGFyZW50LmZpbmQodG9nZ2xlKS50cmlnZ2VyKCdmb2N1cycpXHJcbiAgICAgIHJldHVybiAkdGhpcy50cmlnZ2VyKCdjbGljaycpXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRlc2MgPSAnIGxpOm5vdCguZGlzYWJsZWQpOnZpc2libGUgYSdcclxuICAgIHZhciAkaXRlbXMgPSAkcGFyZW50LmZpbmQoJy5kcm9wZG93bi1tZW51JyArIGRlc2MgKyAnLC51aV9kcm9wZG93bl9tZW51JyArIGRlc2MpXHJcblxyXG4gICAgaWYgKCEkaXRlbXMubGVuZ3RoKSByZXR1cm5cclxuXHJcbiAgICB2YXIgaW5kZXggPSAkaXRlbXMuaW5kZXgoZS50YXJnZXQpXHJcblxyXG4gICAgaWYgKGUud2hpY2ggPT0gMzggJiYgaW5kZXggPiAwKSAgICAgICAgICAgICAgICAgaW5kZXgtLSAgICAgICAgIC8vIHVwXHJcbiAgICBpZiAoZS53aGljaCA9PSA0MCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSBpbmRleCsrICAgICAgICAgLy8gZG93blxyXG4gICAgaWYgKCF+aW5kZXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwXHJcblxyXG4gICAgJGl0ZW1zLmVxKGluZGV4KS50cmlnZ2VyKCdmb2N1cycpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRFJPUERPV04gUExVR0lOIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxyXG4gICAgICB2YXIgZGF0YSAgPSAkdGhpcy5kYXRhKCd3cGJjLmRyb3Bkb3duJylcclxuXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnd3BiYy5kcm9wZG93bicsIChkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMpKSlcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZhciBvbGQgPSAkLmZuLndwYmNfZHJvcGRvd25cclxuXHJcbiAgJC5mbi53cGJjX2Ryb3Bkb3duICAgICAgICAgICAgID0gUGx1Z2luXHJcbiAgJC5mbi53cGJjX2Ryb3Bkb3duLkNvbnN0cnVjdG9yID0gRHJvcGRvd25cclxuXHJcblxyXG4gIC8vIERST1BET1dOIE5PIENPTkZMSUNUXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgJC5mbi53cGJjX2Ryb3Bkb3duLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAkLmZuLndwYmNfZHJvcGRvd24gPSBvbGRcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQVBQTFkgVE8gU1RBTkRBUkQgRFJPUERPV04gRUxFTUVOVFNcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAkKGRvY3VtZW50KVxyXG4gICAgLm9uKCdjbGljay53cGJjLmRyb3Bkb3duLmRhdGEtYXBpJywgY2xlYXJNZW51cylcclxuICAgIC5vbignY2xpY2sud3BiYy5kcm9wZG93bi5kYXRhLWFwaScsICcuZHJvcGRvd24gZm9ybScsIGZ1bmN0aW9uIChlKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCkgfSlcclxuICAgIC5vbignY2xpY2sud3BiYy5kcm9wZG93bi5kYXRhLWFwaScsIHRvZ2dsZSwgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2dsZSlcclxuICAgIC5vbigna2V5ZG93bi53cGJjLmRyb3Bkb3duLmRhdGEtYXBpJywgdG9nZ2xlLCBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93bilcclxuICAgIC5vbigna2V5ZG93bi53cGJjLmRyb3Bkb3duLmRhdGEtYXBpJywgJy5kcm9wZG93bi1tZW51JywgRHJvcGRvd24ucHJvdG90eXBlLmtleWRvd24pXHJcbiAgICAub24oJ2tleWRvd24ud3BiYy5kcm9wZG93bi5kYXRhLWFwaScsICcudWlfZHJvcGRvd25fbWVudScsIERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duKVxyXG5cclxufShqUXVlcnkpO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU9BLE1BQU0sS0FBSyxXQUFXLEVBQUU7RUFDakMsTUFBTSxJQUFJQyxLQUFLLENBQUMseUNBQXlDLENBQUM7QUFDNUQ7QUFDQSxDQUFDLFVBQVVDLENBQUMsRUFBRTtFQUNaLFlBQVk7O0VBQ1osSUFBSUMsT0FBTyxHQUFHRCxDQUFDLENBQUNFLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDbEQsSUFBS0gsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENB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QUFLLEdBQUcxRyxDQUFDLENBQUMsSUFBSSxDQUFDO01BQ25CLElBQUkyRyxJQUFJLEdBQUlELEtBQUssQ0FBQ0MsSUFBSSxDQUFDLGVBQWUsQ0FBQztNQUV2QyxJQUFJLENBQUNBLElBQUksRUFBRUQsS0FBSyxDQUFDQyxJQUFJLENBQUMsZUFBZSxFQUFHQSxJQUFJLEdBQUcsSUFBSWEsUUFBUSxDQUFDLElBQUksQ0FBRSxDQUFDO01BQ25FLElBQUksT0FBT2hCLE1BQU0sSUFBSSxRQUFRLEVBQUVHLElBQUksQ0FBQ0gsTUFBTSxDQUFDLENBQUNlLElBQUksQ0FBQ2IsS0FBSyxDQUFDO0lBQ3pELENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBSUcsR0FBRyxHQUFHN0csQ0FBQyxDQUFDRSxFQUFFLENBQUN3SSxhQUFhO0VBRTVCMUksQ0FBQyxDQUFDRSxFQUFFLENBQUN3SSxhQUFhLEdBQWVuQyxNQUFNO0VBQ3ZDdkcsQ0FBQyxDQUFDRSxFQUFFLENBQUN3SSxhQUFhLENBQUMzQixXQUFXLEdBQUdTLFFBQVE7O0VBR3pDO0VBQ0E7O0VBRUF4SCxDQUFDLENBQUNFLEVBQUUsQ0FBQ3dJLGFBQWEsQ0FBQzFCLFVBQVUsR0FBRyxZQUFZO0lBQzFDaEgsQ0FBQyxDQUFDRSxFQUFFLENBQUN3SSxhQUFhLEdBQUc3QixHQUFHO0lBQ3hCLE9BQU8sSUFBSTtFQUNiLENBQUM7O0VBR0Q7RUFDQTs7RUFFQTdHLENBQUMsQ0FBQ1MsUUFBUSxDQUFDLENBQ1JvQyxFQUFFLENBQUMsOEJBQThCLEVBQUUrRSxVQUFVLENBQUMsQ0FDOUMvRSxFQUFFLENBQUMsOEJBQThCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVVQsQ0FBQyxFQUFFO0lBQUVBLENBQUMsQ0FBQ2lHLGVBQWUsQ0FBQyxDQUFDO0VBQUMsQ0FBQyxDQUFDLENBQzFGeEYsRUFBRSxDQUFDLDhCQUE4QixFQUFFYixNQUFNLEVBQUV3RixRQUFRLENBQUN6RixTQUFTLENBQUNDLE1BQU0sQ0FBQyxDQUNyRWEsRUFBRSxDQUFDLGdDQUFnQyxFQUFFYixNQUFNLEVBQUV3RixRQUFRLENBQUN6RixTQUFTLENBQUNxRyxPQUFPLENBQUMsQ0FDeEV2RixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsZ0JBQWdCLEVBQUUyRSxRQUFRLENBQUN6RixTQUFTLENBQUNxRyxPQUFPLENBQUMsQ0FDbEZ2RixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsbUJBQW1CLEVBQUUyRSxRQUFRLENBQUN6RixTQUFTLENBQUNxRyxPQUFPLENBQUM7QUFFMUYsQ0FBQyxDQUFDdEksTUFBTSxDQUFDIiwiaWdub3JlTGlzdCI6W119 |
| 387 |
|