← All changes
|
includes/page-availability-general/_out/availability_general_page.js
+450
-5
11.0
→
11.9
View file →
| @@ -31,8 +31,86 @@ | ||
| 31 | 31 | $group.toggleClass('is-open', !is_open); |
| 32 | 32 | $button.attr('aria-expanded', is_open ? 'false' : 'true'); |
| 33 | 33 | $fields.prop('hidden', is_open).attr('aria-hidden', is_open ? 'true' : 'false'); |
| 34 | 34 | } |
| 35 | + function close_group($group) { | |
| 36 | + var $button = $group.find('> .group__header'); | |
| 37 | + var $fields = $group.find('> .group__fields'); | |
| 38 | + $group.removeClass('is-open'); | |
| 39 | + $button.attr('aria-expanded', 'false'); | |
| 40 | + $fields.prop('hidden', true).attr('aria-hidden', 'true'); | |
| 41 | + } | |
| 42 | + function open_group(group_name, is_exclusive) { | |
| 43 | + var $group = $('.wpbc_ui__collapsible_group[data-group="' + group_name + '"]'); | |
| 44 | + var $button = $group.find('> .group__header'); | |
| 45 | + var $fields = $group.find('> .group__fields'); | |
| 46 | + if (!$group.length) { | |
| 47 | + return; | |
| 48 | + } | |
| 49 | + if (is_exclusive) { | |
| 50 | + $group.siblings('.wpbc_ui__collapsible_group').each(function () { | |
| 51 | + close_group($(this)); | |
| 52 | + }); | |
| 53 | + } | |
| 54 | + $group.addClass('is-open'); | |
| 55 | + $button.attr('aria-expanded', 'true'); | |
| 56 | + $fields.prop('hidden', false).attr('aria-hidden', 'false'); | |
| 57 | + } | |
| 58 | + function scroll_to_group(group_name) { | |
| 59 | + var $group = $('.wpbc_ui__collapsible_group[data-group="' + group_name + '"]'); | |
| 60 | + var $scroll_parent = $(); | |
| 61 | + var scroll_parent_el; | |
| 62 | + var group_el; | |
| 63 | + var scroll_top; | |
| 64 | + var parent_rect; | |
| 65 | + var group_rect; | |
| 66 | + if (!$group.length) { | |
| 67 | + return; | |
| 68 | + } | |
| 69 | + $group.parents().each(function () { | |
| 70 | + var $candidate = $(this); | |
| 71 | + var overflow_y = $candidate.css('overflow-y'); | |
| 72 | + if ($candidate.hasClass('simplebar-content-wrapper') || /(auto|scroll)/.test(overflow_y) && this.scrollHeight > this.clientHeight) { | |
| 73 | + $scroll_parent = $candidate; | |
| 74 | + return false; | |
| 75 | + } | |
| 76 | + }); | |
| 77 | + if (!$scroll_parent.length) { | |
| 78 | + $scroll_parent = $group.closest('.wpbc_ui_el__vert_right_bar__content').find('.simplebar-content-wrapper').first(); | |
| 79 | + } | |
| 80 | + if (!$scroll_parent.length) { | |
| 81 | + $group.get(0).scrollIntoView({ | |
| 82 | + block: 'nearest' | |
| 83 | + }); | |
| 84 | + return; | |
| 85 | + } | |
| 86 | + scroll_parent_el = $scroll_parent.get(0); | |
| 87 | + group_el = $group.get(0); | |
| 88 | + parent_rect = scroll_parent_el.getBoundingClientRect(); | |
| 89 | + group_rect = group_el.getBoundingClientRect(); | |
| 90 | + scroll_top = $scroll_parent.scrollTop() + group_rect.top - parent_rect.top - 10; | |
| 91 | + $scroll_parent.stop().animate({ | |
| 92 | + scrollTop: Math.max(0, scroll_top) | |
| 93 | + }, 180); | |
| 94 | + } | |
| 95 | + function apply_open_section_from_url() { | |
| 96 | + var section_groups = { | |
| 97 | + weekdays: 'general-availability-weekdays', | |
| 98 | + from_today: 'general-availability-from-today', | |
| 99 | + buffer: 'general-availability-buffer', | |
| 100 | + working_time: 'general-availability-working-time' | |
| 101 | + }; | |
| 102 | + var group_name = section_groups[cfg.open_section] || ''; | |
| 103 | + if ('' === group_name) { | |
| 104 | + return; | |
| 105 | + } | |
| 106 | + open_group(group_name, true); | |
| 107 | + $.each([120, 650], function (index, delay) { | |
| 108 | + setTimeout(function () { | |
| 109 | + scroll_to_group(group_name); | |
| 110 | + }, delay); | |
| 111 | + }); | |
| 112 | + } | |
| 35 | 113 | function refresh_buffer_fields() { |
| 36 | 114 | var value = $('input[name="booking_unavailable_extra_in_out"]:checked').val() || ''; |
| 37 | 115 | $('.wpbc_ag_buffer_fields').each(function () { |
| 38 | 116 | var $panel = $(this); |
| @@ -108,9 +186,10 @@ | ||
| 108 | 186 | booking_unavailable_extra_in_out: $form.find('[name="booking_unavailable_extra_in_out"]:checked').val() || '', |
| 109 | 187 | booking_unavailable_extra_minutes_in: $form.find('[name="booking_unavailable_extra_minutes_in"]').val() || '', |
| 110 | 188 | booking_unavailable_extra_minutes_out: $form.find('[name="booking_unavailable_extra_minutes_out"]').val() || '', |
| 111 | 189 | booking_unavailable_extra_days_in: $form.find('[name="booking_unavailable_extra_days_in"]').val() || '', |
| 112 | - booking_unavailable_extra_days_out: $form.find('[name="booking_unavailable_extra_days_out"]').val() || '' | |
| 190 | + booking_unavailable_extra_days_out: $form.find('[name="booking_unavailable_extra_days_out"]').val() || '', | |
| 191 | + working_time: get_working_time_settings_from_form() | |
| 113 | 192 | }; |
| 114 | 193 | } |
| 115 | 194 | function set_select_value(name, value) { |
| 116 | 195 | var $field = get_form().find('[name="' + name + '"]').first(); |
| @@ -139,8 +218,9 @@ | ||
| 139 | 218 | set_select_value('booking_unavailable_extra_days_in', settings.booking_unavailable_extra_days_in || ''); |
| 140 | 219 | set_select_value('booking_unavailable_extra_days_out', settings.booking_unavailable_extra_days_out || ''); |
| 141 | 220 | $form.find('input[name="booking_unavailable_extra_in_out"]').prop('checked', false); |
| 142 | 221 | $form.find('input[name="booking_unavailable_extra_in_out"][value="' + (settings.booking_unavailable_extra_in_out || '') + '"]').prop('checked', true); |
| 222 | + apply_working_time_settings_to_form(settings.working_time || {}, $('#wpbc_ag_resource_id').val()); | |
| 143 | 223 | refresh_buffer_fields(); |
| 144 | 224 | sync_all_ranges(); |
| 145 | 225 | schedule_preview_refresh(); |
| 146 | 226 | } |
| @@ -223,8 +303,341 @@ | ||
| 223 | 303 | return 0; |
| 224 | 304 | } |
| 225 | 305 | return parseInt(value, 10) || 0; |
| 226 | 306 | } |
| 307 | + function time_to_seconds(time) { | |
| 308 | + var parts = String(time || '').split(':'); | |
| 309 | + var hours; | |
| 310 | + var mins; | |
| 311 | + if (parts.length < 2) { | |
| 312 | + return 0; | |
| 313 | + } | |
| 314 | + hours = Math.max(0, Math.min(24, parseInt(parts[0], 10) || 0)); | |
| 315 | + mins = hours === 24 ? 0 : Math.max(0, Math.min(59, parseInt(parts[1], 10) || 0)); | |
| 316 | + return Math.min(86400, hours * 3600 + mins * 60); | |
| 317 | + } | |
| 318 | + function seconds_to_time(seconds) { | |
| 319 | + var hours; | |
| 320 | + var mins; | |
| 321 | + seconds = Math.max(0, Math.min(86400, parseInt(seconds, 10) || 0)); | |
| 322 | + hours = Math.floor(seconds / 3600); | |
| 323 | + mins = Math.floor(seconds % 3600 / 60); | |
| 324 | + return (hours < 10 ? '0' : '') + hours + ':' + (mins < 10 ? '0' : '') + mins; | |
| 325 | + } | |
| 326 | + | |
| 327 | + /** | |
| 328 | + * Return the bounded interval limit for one Working Time editor. | |
| 329 | + * | |
| 330 | + * @param {jQuery} $weekdays Working Time weekday wrapper. | |
| 331 | + * @return {number} Maximum intervals per weekday. | |
| 332 | + */ | |
| 333 | + function get_max_working_time_intervals($weekdays) { | |
| 334 | + var configured_limit = parseInt($weekdays.attr('data-max-intervals'), 10); | |
| 335 | + var localized_limit = parseInt(cfg.max_working_time_intervals, 10); | |
| 336 | + return Math.max(1, Math.min(48, configured_limit || localized_limit || 8)); | |
| 337 | + } | |
| 338 | + | |
| 339 | + /** | |
| 340 | + * Read all visible interval controls for one weekday. | |
| 341 | + * | |
| 342 | + * @param {jQuery} $day_row Weekday row. | |
| 343 | + * @return {Object[]} Canonical interval records. | |
| 344 | + */ | |
| 345 | + function collect_working_time_day_intervals($day_row) { | |
| 346 | + var intervals = []; | |
| 347 | + $day_row.find('[data-wpbc-working-time-interval="1"]').each(function () { | |
| 348 | + var $interval = $(this); | |
| 349 | + intervals.push({ | |
| 350 | + start_second: time_to_seconds($interval.find('.wpbc_ag_working_time_start').val()), | |
| 351 | + end_second: time_to_seconds($interval.find('.wpbc_ag_working_time_end').val()) | |
| 352 | + }); | |
| 353 | + }); | |
| 354 | + return intervals; | |
| 355 | + } | |
| 356 | + | |
| 357 | + /** | |
| 358 | + * Rebuild dynamic names, IDs, and label associations after a row mutation. | |
| 359 | + * | |
| 360 | + * @param {jQuery} $day_row Weekday row. | |
| 361 | + * @return {void} | |
| 362 | + */ | |
| 363 | + function reindex_working_time_day($day_row) { | |
| 364 | + var $weekdays = $day_row.closest('[data-wpbc-working-time-weekdays]'); | |
| 365 | + var prefix = String($weekdays.attr('data-wpbc-working-time-weekdays') || ''); | |
| 366 | + var day = parseInt($day_row.attr('data-wpbc-working-time-day'), 10); | |
| 367 | + $day_row.find('[data-wpbc-working-time-interval="1"]').each(function (interval_index) { | |
| 368 | + var $interval = $(this); | |
| 369 | + var start_id = prefix + '_start_' + day + '_' + interval_index; | |
| 370 | + var end_id = prefix + '_end_' + day + '_' + interval_index; | |
| 371 | + var $labels = $interval.find('label'); | |
| 372 | + $interval.attr('data-interval-index', interval_index); | |
| 373 | + $interval.find('.wpbc_ag_working_time_start').attr('id', start_id).attr('name', prefix + '_start[' + day + '][]'); | |
| 374 | + $interval.find('.wpbc_ag_working_time_end').attr('id', end_id).attr('name', prefix + '_end[' + day + '][]'); | |
| 375 | + $labels.eq(0).attr('for', start_id); | |
| 376 | + $labels.eq(1).attr('for', end_id); | |
| 377 | + }); | |
| 378 | + } | |
| 379 | + | |
| 380 | + /** | |
| 381 | + * Refresh one weekday's enabled controls and interval-limit state. | |
| 382 | + * | |
| 383 | + * @param {jQuery} $day_row Weekday row. | |
| 384 | + * @return {void} | |
| 385 | + */ | |
| 386 | + function refresh_working_time_day($day_row) { | |
| 387 | + var $weekdays = $day_row.closest('[data-wpbc-working-time-weekdays]'); | |
| 388 | + var $toggle = $day_row.find('[data-wpbc-working-time-day-toggle="1"]').first(); | |
| 389 | + var $resource_custom = $day_row.closest('[data-wpbc-working-time-resource-custom="1"]'); | |
| 390 | + var is_block_disabled = $day_row.closest('.wpbc_ag_working_time_block').hasClass('is-disabled') || $resource_custom.length && !$resource_custom.hasClass('is-visible'); | |
| 391 | + var is_day_enabled = !is_block_disabled && $toggle.prop('checked'); | |
| 392 | + var interval_count = $day_row.find('[data-wpbc-working-time-interval="1"]').length; | |
| 393 | + var max_intervals = get_max_working_time_intervals($weekdays); | |
| 394 | + $day_row.toggleClass('is-enabled', $toggle.prop('checked')); | |
| 395 | + $toggle.prop('disabled', is_block_disabled); | |
| 396 | + $day_row.find('.wpbc_ag_working_time_start, .wpbc_ag_working_time_end, [data-wpbc-remove-working-time-interval]').prop('disabled', !is_day_enabled); | |
| 397 | + $day_row.find('[data-wpbc-add-working-time-interval]').prop('disabled', !is_day_enabled || interval_count >= max_intervals); | |
| 398 | + } | |
| 399 | + | |
| 400 | + /** | |
| 401 | + * Find a non-overlapping one-hour interval proposal. | |
| 402 | + * | |
| 403 | + * @param {Object[]} intervals Current weekday intervals. | |
| 404 | + * @return {Object|null} Proposed interval, or null when the day has no gap. | |
| 405 | + */ | |
| 406 | + function find_working_time_interval_proposal(intervals) { | |
| 407 | + var sorted_intervals = intervals.slice().sort(function (first_interval, second_interval) { | |
| 408 | + return first_interval.start_second - second_interval.start_second; | |
| 409 | + }); | |
| 410 | + var preferred_start = sorted_intervals.length ? sorted_intervals[sorted_intervals.length - 1].end_second : 9 * 3600; | |
| 411 | + var candidates = []; | |
| 412 | + var candidate_start; | |
| 413 | + for (candidate_start = 0; candidate_start <= 23 * 3600; candidate_start += 1800) { | |
| 414 | + if (candidate_start >= preferred_start) { | |
| 415 | + candidates.push(candidate_start); | |
| 416 | + } | |
| 417 | + } | |
| 418 | + for (candidate_start = 0; candidate_start < preferred_start && candidate_start <= 23 * 3600; candidate_start += 1800) { | |
| 419 | + candidates.push(candidate_start); | |
| 420 | + } | |
| 421 | + candidate_start = null; | |
| 422 | + candidates.some(function (proposed_start) { | |
| 423 | + var proposed_end = proposed_start + 3600; | |
| 424 | + var overlaps = sorted_intervals.some(function (interval) { | |
| 425 | + return proposed_start < interval.end_second && proposed_end > interval.start_second; | |
| 426 | + }); | |
| 427 | + if (proposed_end <= 86400 && !overlaps) { | |
| 428 | + candidate_start = proposed_start; | |
| 429 | + return true; | |
| 430 | + } | |
| 431 | + return false; | |
| 432 | + }); | |
| 433 | + return null === candidate_start ? null : { | |
| 434 | + start_second: candidate_start, | |
| 435 | + end_second: candidate_start + 3600 | |
| 436 | + }; | |
| 437 | + } | |
| 438 | + | |
| 439 | + /** | |
| 440 | + * Append an interval by cloning the server-rendered allow-listed controls. | |
| 441 | + * | |
| 442 | + * @param {jQuery} $day_row Weekday row. | |
| 443 | + * @param {Object} interval Canonical interval record. | |
| 444 | + * @return {jQuery} Appended interval node. | |
| 445 | + */ | |
| 446 | + function append_working_time_interval($day_row, interval) { | |
| 447 | + var $container = $day_row.find('[data-wpbc-working-time-intervals="1"]').first(); | |
| 448 | + var $prototype = $container.find('[data-wpbc-working-time-interval="1"]').first(); | |
| 449 | + var $interval = $prototype.clone(false, false); | |
| 450 | + $interval.find('.wpbc_ag_working_time_start').val(seconds_to_time(interval.start_second)); | |
| 451 | + $interval.find('.wpbc_ag_working_time_end').val(seconds_to_time(interval.end_second)); | |
| 452 | + $container.append($interval); | |
| 453 | + reindex_working_time_day($day_row); | |
| 454 | + return $interval; | |
| 455 | + } | |
| 456 | + | |
| 457 | + /** | |
| 458 | + * Add the next available one-hour interval to a weekday. | |
| 459 | + * | |
| 460 | + * @param {HTMLElement} button Add-interval button. | |
| 461 | + * @return {void} | |
| 462 | + */ | |
| 463 | + function add_working_time_interval(button) { | |
| 464 | + var $day_row = $(button).closest('[data-wpbc-working-time-day]'); | |
| 465 | + var $weekdays = $day_row.closest('[data-wpbc-working-time-weekdays]'); | |
| 466 | + var intervals = collect_working_time_day_intervals($day_row); | |
| 467 | + var max_intervals = get_max_working_time_intervals($weekdays); | |
| 468 | + var proposal; | |
| 469 | + var $interval; | |
| 470 | + if (intervals.length >= max_intervals) { | |
| 471 | + show_message(cfg.i18n && cfg.i18n.interval_limit || 'No additional one-hour interval is available for this weekday.', 'error', 6000); | |
| 472 | + return; | |
| 473 | + } | |
| 474 | + proposal = find_working_time_interval_proposal(intervals); | |
| 475 | + if (!proposal) { | |
| 476 | + show_message(cfg.i18n && cfg.i18n.interval_limit || 'No additional one-hour interval is available for this weekday.', 'error', 6000); | |
| 477 | + return; | |
| 478 | + } | |
| 479 | + $interval = append_working_time_interval($day_row, proposal); | |
| 480 | + $day_row.find('[data-wpbc-working-time-day-toggle="1"]').prop('checked', true); | |
| 481 | + refresh_working_time_day($day_row); | |
| 482 | + $interval.find('.wpbc_ag_working_time_start').trigger('focus'); | |
| 483 | + schedule_preview_refresh(); | |
| 484 | + } | |
| 485 | + | |
| 486 | + /** | |
| 487 | + * Remove one weekday interval, closing the weekday when it is the last one. | |
| 488 | + * | |
| 489 | + * Keeping one disabled interval in the DOM preserves an allow-listed control | |
| 490 | + * prototype for reopening the day or adding a later interval. | |
| 491 | + * | |
| 492 | + * @param {HTMLElement} button Remove-interval button. | |
| 493 | + * @return {void} | |
| 494 | + */ | |
| 495 | + function remove_working_time_interval(button) { | |
| 496 | + var $button = $(button); | |
| 497 | + var $day_row = $button.closest('[data-wpbc-working-time-day]'); | |
| 498 | + var $intervals = $day_row.find('[data-wpbc-working-time-interval="1"]'); | |
| 499 | + var $focus_target; | |
| 500 | + if ($intervals.length > 1) { | |
| 501 | + $button.closest('[data-wpbc-working-time-interval="1"]').remove(); | |
| 502 | + $focus_target = $day_row.find('[data-wpbc-add-working-time-interval="1"]').first(); | |
| 503 | + } else { | |
| 504 | + $day_row.find('[data-wpbc-working-time-day-toggle="1"]').prop('checked', false); | |
| 505 | + $focus_target = $day_row.find('[data-wpbc-working-time-day-toggle="1"]').first(); | |
| 506 | + } | |
| 507 | + reindex_working_time_day($day_row); | |
| 508 | + refresh_working_time_day($day_row); | |
| 509 | + $focus_target.trigger('focus'); | |
| 510 | + schedule_preview_refresh(); | |
| 511 | + } | |
| 512 | + function collect_working_time_weekdays(prefix) { | |
| 513 | + var $form = get_form(); | |
| 514 | + var weekdays = {}; | |
| 515 | + $form.find('[data-wpbc-working-time-weekdays="' + prefix + '"] .wpbc_ag_working_time_row').each(function () { | |
| 516 | + var $row = $(this); | |
| 517 | + var day = parseInt($row.attr('data-wpbc-working-time-day'), 10); | |
| 518 | + weekdays[day] = []; | |
| 519 | + if (!$row.find('[data-wpbc-working-time-day-toggle="1"]').prop('checked')) { | |
| 520 | + return; | |
| 521 | + } | |
| 522 | + weekdays[day] = collect_working_time_day_intervals($row); | |
| 523 | + }); | |
| 524 | + return weekdays; | |
| 525 | + } | |
| 526 | + function set_working_time_weekdays(prefix, weekdays) { | |
| 527 | + var $wrap = get_form().find('[data-wpbc-working-time-weekdays="' + prefix + '"]'); | |
| 528 | + $wrap.find('.wpbc_ag_working_time_row').each(function () { | |
| 529 | + var $row = $(this); | |
| 530 | + var day = parseInt($row.attr('data-wpbc-working-time-day'), 10); | |
| 531 | + var intervals = weekdays && $.isArray(weekdays[day]) ? weekdays[day] : []; | |
| 532 | + var display_intervals = intervals.length ? intervals : [{ | |
| 533 | + start_second: 32400, | |
| 534 | + end_second: 64800 | |
| 535 | + }]; | |
| 536 | + var $container = $row.find('[data-wpbc-working-time-intervals="1"]').first(); | |
| 537 | + var $prototype = $container.find('[data-wpbc-working-time-interval="1"]').first().clone(false, false); | |
| 538 | + $container.empty().append($prototype); | |
| 539 | + $prototype.find('.wpbc_ag_working_time_start').val(seconds_to_time(display_intervals[0].start_second)); | |
| 540 | + $prototype.find('.wpbc_ag_working_time_end').val(seconds_to_time(display_intervals[0].end_second)); | |
| 541 | + display_intervals.slice(1).forEach(function (interval) { | |
| 542 | + append_working_time_interval($row, interval); | |
| 543 | + }); | |
| 544 | + $row.find('[data-wpbc-working-time-day-toggle="1"]').prop('checked', intervals.length > 0); | |
| 545 | + reindex_working_time_day($row); | |
| 546 | + }); | |
| 547 | + } | |
| 548 | + function refresh_working_time_panels() { | |
| 549 | + var is_enabled = get_form().find('input[name="booking_working_time_enabled"]').prop('checked'); | |
| 550 | + var mode = get_form().find('input[name="booking_working_time_resource_mode"]:checked').val() || 'inherit'; | |
| 551 | + var $resource_custom = get_form().find('[data-wpbc-working-time-resource-custom]'); | |
| 552 | + $resource_custom.toggleClass('is-visible', mode === 'custom'); | |
| 553 | + get_form().find('.wpbc_ag_working_time_block').toggleClass('is-disabled', !is_enabled); | |
| 554 | + get_form().find('.wpbc_ag_working_time_block').each(function () { | |
| 555 | + $(this).find('input, select, button').prop('disabled', !is_enabled); | |
| 556 | + }); | |
| 557 | + get_form().find('[data-wpbc-working-time-day]').each(function () { | |
| 558 | + refresh_working_time_day($(this)); | |
| 559 | + }); | |
| 560 | + } | |
| 561 | + function get_working_time_settings_from_form() { | |
| 562 | + var $form = get_form(); | |
| 563 | + var resourceId = parseInt($form.find('[data-wpbc-working-time-resource-id]').val(), 10) || parseInt($('#wpbc_ag_resource_id').val(), 10) || 0; | |
| 564 | + var workingTime = $.extend(true, {}, cfg.settings && cfg.settings.working_time ? cfg.settings.working_time : cfg.default_settings && cfg.default_settings.working_time ? cfg.default_settings.working_time : {}); | |
| 565 | + if (!workingTime.default) { | |
| 566 | + workingTime.default = {}; | |
| 567 | + } | |
| 568 | + if (!workingTime.resources) { | |
| 569 | + workingTime.resources = {}; | |
| 570 | + } | |
| 571 | + workingTime.enabled = $form.find('input[name="booking_working_time_enabled"]').prop('checked') ? 'On' : 'Off'; | |
| 572 | + workingTime.default.weekdays = collect_working_time_weekdays('booking_working_time_default'); | |
| 573 | + if (resourceId > 0) { | |
| 574 | + workingTime.resources[resourceId] = { | |
| 575 | + mode: $form.find('input[name="booking_working_time_resource_mode"]:checked').val() || 'inherit', | |
| 576 | + weekdays: collect_working_time_weekdays('booking_working_time_resource') | |
| 577 | + }; | |
| 578 | + } | |
| 579 | + return workingTime; | |
| 580 | + } | |
| 581 | + function apply_working_time_settings_to_form(workingTime, resourceId) { | |
| 582 | + var resourceSettings; | |
| 583 | + workingTime = workingTime || {}; | |
| 584 | + resourceId = parseInt(resourceId, 10) || parseInt($('#wpbc_ag_resource_id').val(), 10) || 0; | |
| 585 | + resourceSettings = workingTime.resources && workingTime.resources[resourceId] ? workingTime.resources[resourceId] : { | |
| 586 | + mode: 'inherit', | |
| 587 | + weekdays: workingTime.default && workingTime.default.weekdays ? workingTime.default.weekdays : {} | |
| 588 | + }; | |
| 589 | + get_form().find('input[name="booking_working_time_enabled"]').prop('checked', workingTime.enabled === 'On'); | |
| 590 | + get_form().find('[data-wpbc-working-time-resource-id]').val(resourceId); | |
| 591 | + set_working_time_weekdays('booking_working_time_default', workingTime.default && workingTime.default.weekdays ? workingTime.default.weekdays : {}); | |
| 592 | + get_form().find('input[name="booking_working_time_resource_mode"][value="' + (resourceSettings.mode || 'inherit') + '"]').prop('checked', true); | |
| 593 | + set_working_time_weekdays('booking_working_time_resource', resourceSettings.weekdays || (workingTime.default ? workingTime.default.weekdays : {})); | |
| 594 | + refresh_working_time_panels(); | |
| 595 | + } | |
| 596 | + function append_working_time_payload(payload) { | |
| 597 | + var $form = get_form(); | |
| 598 | + var defaultDays = []; | |
| 599 | + var resourceDays = []; | |
| 600 | + var defaultStart = {}; | |
| 601 | + var defaultEnd = {}; | |
| 602 | + var resourceStart = {}; | |
| 603 | + var resourceEnd = {}; | |
| 604 | + $form.find('[data-wpbc-working-time-weekdays="booking_working_time_default"] .wpbc_ag_working_time_row').each(function () { | |
| 605 | + var $row = $(this); | |
| 606 | + var day = parseInt($row.attr('data-wpbc-working-time-day'), 10); | |
| 607 | + defaultStart[day] = []; | |
| 608 | + defaultEnd[day] = []; | |
| 609 | + $row.find('[data-wpbc-working-time-interval="1"]').each(function () { | |
| 610 | + defaultStart[day].push($(this).find('.wpbc_ag_working_time_start').val() || '09:00'); | |
| 611 | + defaultEnd[day].push($(this).find('.wpbc_ag_working_time_end').val() || '18:00'); | |
| 612 | + }); | |
| 613 | + if ($row.find('[data-wpbc-working-time-day-toggle="1"]').prop('checked')) { | |
| 614 | + defaultDays.push(day); | |
| 615 | + } | |
| 616 | + }); | |
| 617 | + $form.find('[data-wpbc-working-time-weekdays="booking_working_time_resource"] .wpbc_ag_working_time_row').each(function () { | |
| 618 | + var $row = $(this); | |
| 619 | + var day = parseInt($row.attr('data-wpbc-working-time-day'), 10); | |
| 620 | + resourceStart[day] = []; | |
| 621 | + resourceEnd[day] = []; | |
| 622 | + $row.find('[data-wpbc-working-time-interval="1"]').each(function () { | |
| 623 | + resourceStart[day].push($(this).find('.wpbc_ag_working_time_start').val() || '09:00'); | |
| 624 | + resourceEnd[day].push($(this).find('.wpbc_ag_working_time_end').val() || '18:00'); | |
| 625 | + }); | |
| 626 | + if ($row.find('[data-wpbc-working-time-day-toggle="1"]').prop('checked')) { | |
| 627 | + resourceDays.push(day); | |
| 628 | + } | |
| 629 | + }); | |
| 630 | + payload.booking_working_time_enabled = $form.find('input[name="booking_working_time_enabled"]').prop('checked') ? 'On' : ''; | |
| 631 | + payload.booking_working_time_resource_id = $form.find('[data-wpbc-working-time-resource-id]').val() || $('#wpbc_ag_resource_id').val() || ''; | |
| 632 | + payload.booking_working_time_resource_mode = $form.find('input[name="booking_working_time_resource_mode"]:checked').val() || 'inherit'; | |
| 633 | + payload.booking_working_time_default_days = defaultDays; | |
| 634 | + payload.booking_working_time_default_start = defaultStart; | |
| 635 | + payload.booking_working_time_default_end = defaultEnd; | |
| 636 | + payload.booking_working_time_resource_days = resourceDays; | |
| 637 | + payload.booking_working_time_resource_start = resourceStart; | |
| 638 | + payload.booking_working_time_resource_end = resourceEnd; | |
| 639 | + } | |
| 227 | 640 | function update_wpbc_preview_params(settings) { |
| 228 | 641 | if (!w._wpbc || typeof w._wpbc.set_other_param !== 'function') { |
| 229 | 642 | return; |
| 230 | 643 | } |
| @@ -547,8 +960,9 @@ | ||
| 547 | 960 | action: cfg.action || 'WPBC_AJX_AVAILABILITY_GENERAL_SAVE', |
| 548 | 961 | nonce: cfg.nonce || '', |
| 549 | 962 | booking_unavailable_days: settings.weekdays |
| 550 | 963 | }); |
| 964 | + append_working_time_payload(payload); | |
| 551 | 965 | if (!cfg.ajax_url) { |
| 552 | 966 | show_message(cfg.i18n && cfg.i18n.save_failed || 'Unable to save general availability settings.', 'error', 10000); |
| 553 | 967 | return; |
| 554 | 968 | } |
| @@ -565,12 +979,24 @@ | ||
| 565 | 979 | } |
| 566 | 980 | if (response.data && response.data.settings && response.data.settings.hints) { |
| 567 | 981 | update_hints(response.data.settings.hints); |
| 568 | 982 | } |
| 983 | + if (response.data && response.data.settings) { | |
| 984 | + cfg.settings = response.data.settings; | |
| 985 | + if (response.data.settings.working_time) { | |
| 986 | + apply_working_time_settings_to_form(response.data.settings.working_time, $('#wpbc_ag_resource_id').val()); | |
| 987 | + } | |
| 988 | + } | |
| 569 | 989 | load_calendar_preview(); |
| 990 | + document.dispatchEvent(new CustomEvent('wpbc:availability-general:settings-saved', { | |
| 991 | + detail: { | |
| 992 | + settings: response.data && response.data.settings ? response.data.settings : {} | |
| 993 | + } | |
| 994 | + })); | |
| 570 | 995 | show_message(response.data && response.data.message || cfg.i18n && cfg.i18n.saved || 'General availability settings updated.', 'success', 2000); |
| 571 | - }).fail(function () { | |
| 572 | - show_message(cfg.i18n && cfg.i18n.save_failed || 'Unable to save general availability settings.', 'error', 10000); | |
| 996 | + }).fail(function (jq_xhr) { | |
| 997 | + var response_message = jq_xhr && jq_xhr.responseJSON && jq_xhr.responseJSON.data && jq_xhr.responseJSON.data.message ? jq_xhr.responseJSON.data.message : ''; | |
| 998 | + show_message(response_message || cfg.i18n && cfg.i18n.save_failed || 'Unable to save general availability settings.', 'error', 10000); | |
| 573 | 999 | }).always(function () { |
| 574 | 1000 | set_busy($button, false); |
| 575 | 1001 | }); |
| 576 | 1002 | } |
| @@ -583,9 +1009,10 @@ | ||
| 583 | 1009 | booking_unavailable_extra_in_out: '', |
| 584 | 1010 | booking_unavailable_extra_minutes_in: '', |
| 585 | 1011 | booking_unavailable_extra_minutes_out: '', |
| 586 | 1012 | booking_unavailable_extra_days_in: '', |
| 587 | - booking_unavailable_extra_days_out: '' | |
| 1013 | + booking_unavailable_extra_days_out: '', | |
| 1014 | + working_time: {} | |
| 588 | 1015 | }; |
| 589 | 1016 | if (!w.confirm(confirm_message)) { |
| 590 | 1017 | return; |
| 591 | 1018 | } |
| @@ -617,8 +1044,13 @@ | ||
| 617 | 1044 | event.preventDefault(); |
| 618 | 1045 | load_calendar_preview(); |
| 619 | 1046 | }); |
| 620 | 1047 | $(document).on('change', '#wpbc_ag_resource_id, #wpbc_ag_months_count', load_calendar_preview); |
| 1048 | + $(document).on('change', '#wpbc_ag_resource_id', function () { | |
| 1049 | + cfg.settings = cfg.settings || {}; | |
| 1050 | + cfg.settings.working_time = get_working_time_settings_from_form(); | |
| 1051 | + apply_working_time_settings_to_form(cfg.settings.working_time, $(this).val()); | |
| 1052 | + }); | |
| 621 | 1053 | $(document).on('input change', '[data-wpbc-ag-range-for]', function () { |
| 622 | 1054 | sync_select_from_range(this); |
| 623 | 1055 | schedule_preview_refresh(); |
| 624 | 1056 | }); |
| @@ -631,8 +1063,19 @@ | ||
| 631 | 1063 | $(document).on('change', 'input[name="booking_unavailable_extra_in_out"]', function () { |
| 632 | 1064 | refresh_buffer_fields(); |
| 633 | 1065 | schedule_preview_refresh(); |
| 634 | 1066 | }); |
| 1067 | + $(document).on('change', 'input[name="booking_working_time_enabled"]', refresh_working_time_panels); | |
| 1068 | + $(document).on('change', 'input[name="booking_working_time_resource_mode"]', refresh_working_time_panels); | |
| 1069 | + $(document).on('change', '[data-wpbc-working-time-day-toggle="1"]', function () { | |
| 1070 | + refresh_working_time_day($(this).closest('[data-wpbc-working-time-day]')); | |
| 1071 | + }); | |
| 1072 | + $(document).on('click', '[data-wpbc-add-working-time-interval="1"]', function () { | |
| 1073 | + add_working_time_interval(this); | |
| 1074 | + }); | |
| 1075 | + $(document).on('click', '[data-wpbc-remove-working-time-interval="1"]', function () { | |
| 1076 | + remove_working_time_interval(this); | |
| 1077 | + }); | |
| 635 | 1078 | $(document).on('change', '[data-wpbc-ag-settings-form="1"] input, [data-wpbc-ag-settings-form="1"] select', schedule_preview_refresh); |
| 636 | 1079 | $(document).on('submit', '[data-wpbc-ag-settings-form="1"]', function (event) { |
| 637 | 1080 | event.preventDefault(); |
| 638 | 1081 | save_settings($('[data-wpbc-ag-save="1"]').first()); |
| @@ -643,8 +1086,10 @@ | ||
| 643 | 1086 | $(document).on('click', '[data-wpbc-ag-reset="1"]', function () { |
| 644 | 1087 | reset_settings(this); |
| 645 | 1088 | }); |
| 646 | 1089 | $(document).ready(function () { |
| 1090 | + apply_working_time_settings_to_form(cfg.settings && cfg.settings.working_time || cfg.default_settings && cfg.default_settings.working_time || {}, $('#wpbc_ag_resource_id').val()); | |
| 1091 | + apply_open_section_from_url(); | |
| 647 | 1092 | refresh_buffer_fields(); |
| 648 | 1093 | sync_all_ranges(); |
| 649 | 1094 | observe_calendar_changes(); |
| 650 | 1095 | schedule_preview_refresh(); |
| @@ -650,5 +1095,5 @@ | ||
| 650 | 1095 | schedule_preview_refresh(); |
| 651 | 1096 | setTimeout(schedule_preview_refresh, 600); |
| 652 | 1097 | }); |
| 653 | 1098 | })(jQuery, window); |
| 654 | -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1hdmFpbGFiaWxpdHktZ2VuZXJhbC9fb3V0L2F2YWlsYWJpbGl0eV9nZW5lcmFsX3BhZ2UuanMiLCJuYW1lcyI6WyIkIiwidyIsImNmZyIsIndwYmNfYXZhaWxhYmlsaXR5X2dlbmVyYWxfcGFnZSIsInByZXZpZXdfdGltZXIiLCJwcmV2aWV3X2ZyYW1lIiwicHJldmlld19hamF4Iiwib2JzZXJ2ZXIiLCJwcmV2aWV3X3VuYXZhaWxhYmxlX2NsYXNzZXMiLCJ0cmltX3RleHQiLCJ2YWx1ZSIsIlN0cmluZyIsInRyaW0iLCJzd2l0Y2hfcGFuZWwiLCIkdGFiIiwicGFuZWxfaWQiLCJhdHRyIiwiJHRhYnMiLCJjbG9zZXN0IiwiZmluZCIsIiRwYW5lbHMiLCJyZW1vdmVBdHRyIiwidG9nZ2xlX2dyb3VwIiwiJGJ1dHRvbiIsIiRncm91cCIsIiRmaWVsZHMiLCJpc19vcGVuIiwiaGFzQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInByb3AiLCJyZWZyZXNoX2J1ZmZlcl9maWVsZHMiLCJ2YWwiLCJlYWNoIiwiJHBhbmVsIiwiZGF0YSIsImlzX2J1ZmZlcl9hdmFpbGFibGUiLCJpc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlIiwic3luY19yYW5nZV9mcm9tX3NlbGVjdCIsInNlbGVjdCIsIiRzZWxlY3QiLCJuYW1lIiwic2VsZWN0ZWRfaW5kZXgiLCJzZWxlY3RlZF90ZXh0IiwidGV4dCIsIiRyYW5nZSIsIiR2YWx1ZSIsImxlbmd0aCIsInN5bmNfc2VsZWN0X2Zyb21fcmFuZ2UiLCJyYW5nZSIsImluZGV4IiwicGFyc2VJbnQiLCJzeW5jX2FsbF9yYW5nZXMiLCJmaXJzdCIsInN0ZXBfc2VsZWN0X3ZhbHVlIiwiYnV0dG9uIiwic3RlcCIsImN1cnJlbnRfaW5kZXgiLCJuZXh0X2luZGV4IiwiTWF0aCIsIm1heCIsIm1pbiIsInRyaWdnZXIiLCJnZXRfZm9ybSIsImNvbGxlY3Rfc2V0dGluZ3MiLCIkZm9ybSIsIndlZWtkYXlzIiwicHVzaCIsImJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheSIsImJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXkiLCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2luX291dCIsImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19pbiIsImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19vdXQiLCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfaW4iLCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfb3V0Iiwic2V0X3NlbGVjdF92YWx1ZSIsIiRmaWVsZCIsImFwcGx5X3NldHRpbmdzX3RvX2Zvcm0iLCJzZXR0aW5ncyIsImRheV9udW0iLCJzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2giLCJkYXRlX2Zyb21fc3FsIiwic3FsX2RhdGUiLCJwYXJ0cyIsInNwbGl0IiwiRGF0ZSIsImdldF90b2RheV9kYXRlIiwiYXJyIiwiX3dwYmMiLCJnZXRfb3RoZXJfcGFyYW0iLCJub3ciLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldF9yZWFsX3RvZGF5X2RhdGUiLCJkYXlzX2JldHdlZW4iLCJkYXRlX2EiLCJkYXRlX2IiLCJmbG9vciIsImdldFRpbWUiLCJhZGRfZGF5cyIsImRhdGUiLCJkYXlzIiwic2hpZnRlZF9kYXRlIiwic2V0RGF0ZSIsImRhdGVfdG9fc3FsIiwibW9udGgiLCJkYXkiLCJnZXRfc3FsX2RhdGVfZnJvbV9jZWxsIiwiY2VsbCIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJpIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJ1bmF2YWlsYWJsZV9mcm9tX3RvZGF5X2FwcGxpZXMiLCJjZWxsX2RhdGUiLCJ0b2RheV9kYXRlIiwibWludXRlcyIsInVuYXZhaWxhYmxlX3VudGlsIiwidGVzdCIsImdldF9vcHRpb25fdGV4dCIsInNlbGVjdG9yIiwiZ2V0X2RheXNfdmFsdWUiLCJ1cGRhdGVfd3BiY19wcmV2aWV3X3BhcmFtcyIsInNldF9vdGhlcl9wYXJhbSIsImNvbmNhdCIsInVwZGF0ZV9idWZmZXJfcHJldmlld19ub3RlIiwiJG5vdGVzIiwiJGNhbGVuZGFyIiwiJG5vdGUiLCJ0eXBlIiwiYmVmb3JlX3RleHQiLCJhZnRlcl90ZXh0IiwibWVzc2FnZSIsImFwcGVuZCIsInJlbW92ZUNsYXNzIiwiaTE4biIsImJ1ZmZlcl9wcmV2aWV3IiwiYmVmb3JlX2Jvb2tpbmciLCJhZnRlcl9ib29raW5nIiwiaHRtbCIsIm5vX2J1ZmZlciIsImFwcGx5X2J1ZmZlcl9kYXlzX3ByZXZpZXciLCJiZWZvcmVfZGF5cyIsImFmdGVyX2RheXMiLCJkYXRlX2NlbGxzIiwiYm9va2VkX2RhdGVzIiwiJGNlbGwiLCJib29rZWRfZGF0ZSIsIm9mZnNldCIsInRhcmdldF9zcWxfZGF0ZSIsIiR0YXJnZXRfY2VsbCIsInJlbWVtYmVyX3ByZXZpZXdfb3JpZ2luIiwiYWRkQ2xhc3MiLCJjbGVhcl9wcmV2aWV3X2NlbGwiLCJoYWRfZGF0ZV91c2VyX3VuYXZhaWxhYmxlIiwiYXBwbHlfY2FsZW5kYXJfcHJldmlldyIsImF2YWlsYWJsZV9saW1pdCIsIm1ha2VfdW5hdmFpbGFibGUiLCJyZWFzb25fY2xhc3MiLCJwcmV2aW91c19yZWFzb24iLCJoYWRfZ2VuZXJhbF9wcmV2aWV3IiwiZ2V0RGF5IiwicXVldWVfcHJldmlld19yZWZyZXNoIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImRlbGF5IiwiY2xlYXJUaW1lb3V0IiwidXBkYXRlX2hpbnRzIiwiaGludHMiLCJib29raW5nX3VuYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlfX2hpbnQiLCJib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5X19oaW50Iiwic2hvd19tZXNzYWdlIiwiZHVyYXRpb24iLCJ3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSIsImFsZXJ0Iiwic2V0X2J1c3kiLCJidXN5IiwiYnVzeV90ZXh0Iiwic2F2aW5nIiwicmVwbGFjZV9jYWxlbmRhcl9wYW5lbCIsIiRob2xkZXIiLCJwYXJzZUhUTUwiLCJkb2N1bWVudCIsIiRuZXdfcGFuZWwiLCIkb2xkX3BhbmVsIiwiJHNjcmlwdHMiLCJyZW1vdmUiLCJyZXBsYWNlV2l0aCIsImNvZGUiLCJ0ZXh0Q29udGVudCIsImlubmVySFRNTCIsInNyYyIsImFqYXgiLCJ1cmwiLCJkYXRhVHlwZSIsImNhY2hlIiwiZ2xvYmFsRXZhbCIsInNldF9jYWxlbmRhcl9sb2FkaW5nIiwiaXNfbG9hZGluZyIsImxvYWRpbmdfdGV4dCIsImxvYWRpbmciLCIkbG9hZGluZyIsImxhc3QiLCJnZXRfcHJldmlld19wYXlsb2FkIiwiYWN0aW9uIiwicHJldmlld19hY3Rpb24iLCJub25jZSIsInJlc291cmNlX2lkIiwibW9udGhzX2NvdW50IiwibG9hZF9jYWxlbmRhcl9wcmV2aWV3IiwiY3VycmVudF9wcmV2aWV3X2FqYXgiLCJhamF4X3VybCIsInByZXZpZXdfZmFpbGVkIiwicmVhZHlTdGF0ZSIsImFib3J0IiwibWV0aG9kIiwiZG9uZSIsInJlc3BvbnNlIiwic3VjY2VzcyIsIm9ic2VydmVfY2FsZW5kYXJfY2hhbmdlcyIsImZhaWwiLCJqcV94aHIiLCJ0ZXh0X3N0YXR1cyIsImFsd2F5cyIsInNhdmVfc2V0dGluZ3MiLCJwYXlsb2FkIiwiZXh0ZW5kIiwiYm9va2luZ191bmF2YWlsYWJsZV9kYXlzIiwic2F2ZV9mYWlsZWQiLCJzYXZlZCIsInJlc2V0X3NldHRpbmdzIiwiY29uZmlybV9tZXNzYWdlIiwicmVzZXRfY29uZmlybSIsImRlZmF1bHRfc2V0dGluZ3MiLCJjb25maXJtIiwicmVzZXRfYXBwbGllZCIsInRhcmdldCIsInF1ZXJ5U2VsZWN0b3IiLCJNdXRhdGlvbk9ic2VydmVyIiwiZGlzY29ubmVjdCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwib24iLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwicmVhZHkiLCJqUXVlcnkiLCJ3aW5kb3ciXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWF2YWlsYWJpbGl0eS1nZW5lcmFsL19zcmMvYXZhaWxhYmlsaXR5X2dlbmVyYWxfcGFnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogR2VuZXJhbCBBdmFpbGFiaWxpdHkgVUkuXHJcbiAqL1xyXG4oIGZ1bmN0aW9uICggJCwgdyApIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdHZhciBjZmcgPSB3LndwYmNfYXZhaWxhYmlsaXR5X2dlbmVyYWxfcGFnZSB8fCB7fTtcclxuXHR2YXIgcHJldmlld190aW1lciA9IDA7XHJcblx0dmFyIHByZXZpZXdfZnJhbWUgPSAwO1xyXG5cdHZhciBwcmV2aWV3X2FqYXggPSBudWxsO1xyXG5cdHZhciBvYnNlcnZlciA9IG51bGw7XHJcblx0dmFyIHByZXZpZXdfdW5hdmFpbGFibGVfY2xhc3NlcyA9ICd3cGJjX2FnX3ByZXZpZXdfdW5hdmFpbGFibGUgd3BiY19hZ19wcmV2aWV3X3dlZWtkYXlfdW5hdmFpbGFibGUgd3BiY19hZ19wcmV2aWV3X2Zyb21fdG9kYXlfdW5hdmFpbGFibGUgd3BiY19hZ19wcmV2aWV3X2xpbWl0X2F2YWlsYWJsZV9mcm9tX3RvZGF5IHdwYmNfYWdfcHJldmlld19idWZmZXJfdW5hdmFpbGFibGUgd2Vla2RheV91bmF2YWlsYWJsZSBmcm9tX3RvZGF5X3VuYXZhaWxhYmxlIGxpbWl0X2F2YWlsYWJsZV9mcm9tX3RvZGF5IGJ1ZmZlcl91bmF2YWlsYWJsZSc7XHJcblxyXG5cdGZ1bmN0aW9uIHRyaW1fdGV4dCggdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gU3RyaW5nKCB2YWx1ZSB8fCAnJyApLnRyaW0oKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHN3aXRjaF9wYW5lbCggJHRhYiApIHtcclxuXHRcdHZhciBwYW5lbF9pZCA9ICR0YWIuYXR0ciggJ2FyaWEtY29udHJvbHMnICk7XHJcblx0XHR2YXIgJHRhYnMgPSAkdGFiLmNsb3Nlc3QoICcud3BiY19hZ19yaWdodGJhcl90YWJzJyApLmZpbmQoICdbcm9sZT1cInRhYlwiXScgKTtcclxuXHRcdHZhciAkcGFuZWxzID0gJCggJy53cGJjX2FnX3JpZ2h0YmFyX3BhbmVscyBbcm9sZT1cInRhYnBhbmVsXCJdJyApO1xyXG5cclxuXHRcdCR0YWJzLmF0dHIoICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyApO1xyXG5cdFx0JHRhYi5hdHRyKCAnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyApO1xyXG5cclxuXHRcdCRwYW5lbHMuYXR0ciggJ2hpZGRlbicsICdoaWRkZW4nICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XHJcblx0XHQkKCAnIycgKyBwYW5lbF9pZCApLnJlbW92ZUF0dHIoICdoaWRkZW4nICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdG9nZ2xlX2dyb3VwKCAkYnV0dG9uICkge1xyXG5cdFx0dmFyICRncm91cCA9ICRidXR0b24uY2xvc2VzdCggJy53cGJjX3VpX19jb2xsYXBzaWJsZV9ncm91cCcgKTtcclxuXHRcdHZhciAkZmllbGRzID0gJGdyb3VwLmZpbmQoICc+IC5ncm91cF9fZmllbGRzJyApO1xyXG5cdFx0dmFyIGlzX29wZW4gPSAkZ3JvdXAuaGFzQ2xhc3MoICdpcy1vcGVuJyApO1xyXG5cclxuXHRcdCRncm91cC50b2dnbGVDbGFzcyggJ2lzLW9wZW4nLCAhIGlzX29wZW4gKTtcclxuXHRcdCRidXR0b24uYXR0ciggJ2FyaWEtZXhwYW5kZWQnLCBpc19vcGVuID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xyXG5cdFx0JGZpZWxkcy5wcm9wKCAnaGlkZGVuJywgaXNfb3BlbiApLmF0dHIoICdhcmlhLWhpZGRlbicsIGlzX29wZW4gPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZWZyZXNoX2J1ZmZlcl9maWVsZHMoKSB7XHJcblx0XHR2YXIgdmFsdWUgPSAkKCAnaW5wdXRbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0XCJdOmNoZWNrZWQnICkudmFsKCkgfHwgJyc7XHJcblxyXG5cdFx0JCggJy53cGJjX2FnX2J1ZmZlcl9maWVsZHMnICkuZWFjaCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgJHBhbmVsID0gJCggdGhpcyApO1xyXG5cdFx0XHQkcGFuZWwudG9nZ2xlQ2xhc3MoICdpcy12aXNpYmxlJywgJHBhbmVsLmRhdGEoICdidWZmZXItcGFuZWwnICkgPT09IHZhbHVlICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBpc19idWZmZXJfYXZhaWxhYmxlKCkge1xyXG5cdFx0cmV0dXJuICEgKCBjZmcuaXNfYnVmZmVyX2F2YWlsYWJsZSA9PT0gZmFsc2UgfHwgY2ZnLmlzX2J1ZmZlcl9hdmFpbGFibGUgPT09ICdmYWxzZScgfHwgY2ZnLmlzX2J1ZmZlcl9hdmFpbGFibGUgPT09IDAgfHwgY2ZnLmlzX2J1ZmZlcl9hdmFpbGFibGUgPT09ICcwJyApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaXNfYXZhaWxhYmxlX2xpbWl0X2F2YWlsYWJsZSgpIHtcclxuXHRcdHJldHVybiAhICggY2ZnLmlzX2F2YWlsYWJsZV9saW1pdF9hdmFpbGFibGUgPT09IGZhbHNlIHx8IGNmZy5pc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlID09PSAnZmFsc2UnIHx8IGNmZy5pc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlID09PSAwIHx8IGNmZy5pc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlID09PSAnMCcgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHN5bmNfcmFuZ2VfZnJvbV9zZWxlY3QoIHNlbGVjdCApIHtcclxuXHRcdHZhciAkc2VsZWN0ID0gJCggc2VsZWN0ICk7XHJcblx0XHR2YXIgbmFtZSA9ICRzZWxlY3QuYXR0ciggJ25hbWUnICk7XHJcblx0XHR2YXIgc2VsZWN0ZWRfaW5kZXggPSAkc2VsZWN0LnByb3AoICdzZWxlY3RlZEluZGV4JyApO1xyXG5cdFx0dmFyIHNlbGVjdGVkX3RleHQgPSB0cmltX3RleHQoICRzZWxlY3QuZmluZCggJ29wdGlvbjpzZWxlY3RlZCcgKS50ZXh0KCkgKTtcclxuXHRcdHZhciAkcmFuZ2UgPSAkKCAnW2RhdGEtd3BiYy1hZy1yYW5nZS1mb3I9XCInICsgbmFtZSArICdcIl0nICk7XHJcblx0XHR2YXIgJHZhbHVlID0gJCggJ1tkYXRhLXdwYmMtYWctcmFuZ2UtdmFsdWUtZm9yPVwiJyArIG5hbWUgKyAnXCJdJyApO1xyXG5cclxuXHRcdGlmICggISAkcmFuZ2UubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JHJhbmdlLnZhbCggc2VsZWN0ZWRfaW5kZXggPCAwID8gMCA6IHNlbGVjdGVkX2luZGV4ICk7XHJcblx0XHQkdmFsdWUudGV4dCggc2VsZWN0ZWRfdGV4dCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc3luY19zZWxlY3RfZnJvbV9yYW5nZSggcmFuZ2UgKSB7XHJcblx0XHR2YXIgJHJhbmdlID0gJCggcmFuZ2UgKTtcclxuXHRcdHZhciBuYW1lID0gJHJhbmdlLmF0dHIoICdkYXRhLXdwYmMtYWctcmFuZ2UtZm9yJyApO1xyXG5cdFx0dmFyICRzZWxlY3QgPSAkKCAnW25hbWU9XCInICsgbmFtZSArICdcIl0nICk7XHJcblx0XHR2YXIgaW5kZXggPSBwYXJzZUludCggJHJhbmdlLnZhbCgpLCAxMCApIHx8IDA7XHJcblxyXG5cdFx0aWYgKCAhICRzZWxlY3QubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JHNlbGVjdC5wcm9wKCAnc2VsZWN0ZWRJbmRleCcsIGluZGV4ICk7XHJcblx0XHRzeW5jX3JhbmdlX2Zyb21fc2VsZWN0KCAkc2VsZWN0ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzeW5jX2FsbF9yYW5nZXMoKSB7XHJcblx0XHQkKCAnW2RhdGEtd3BiYy1hZy1yYW5nZS1mb3JdJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyIG5hbWUgPSAkKCB0aGlzICkuYXR0ciggJ2RhdGEtd3BiYy1hZy1yYW5nZS1mb3InICk7XHJcblx0XHRcdHN5bmNfcmFuZ2VfZnJvbV9zZWxlY3QoICQoICdbbmFtZT1cIicgKyBuYW1lICsgJ1wiXScgKS5maXJzdCgpICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzdGVwX3NlbGVjdF92YWx1ZSggYnV0dG9uICkge1xyXG5cdFx0dmFyICRidXR0b24gPSAkKCBidXR0b24gKTtcclxuXHRcdHZhciBuYW1lID0gJGJ1dHRvbi5hdHRyKCAnZGF0YS13cGJjLWFnLXN0ZXBwZXInICk7XHJcblx0XHR2YXIgc3RlcCA9IHBhcnNlSW50KCAkYnV0dG9uLmF0dHIoICdkYXRhLXN0ZXAnICksIDEwICkgfHwgMDtcclxuXHRcdHZhciAkc2VsZWN0ID0gJCggJ1tuYW1lPVwiJyArIG5hbWUgKyAnXCJdJyApLmZpcnN0KCk7XHJcblx0XHR2YXIgY3VycmVudF9pbmRleDtcclxuXHRcdHZhciBuZXh0X2luZGV4O1xyXG5cclxuXHRcdGlmICggISAkc2VsZWN0Lmxlbmd0aCB8fCAkc2VsZWN0LnByb3AoICdkaXNhYmxlZCcgKSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN1cnJlbnRfaW5kZXggPSAkc2VsZWN0LnByb3AoICdzZWxlY3RlZEluZGV4JyApO1xyXG5cdFx0bmV4dF9pbmRleCA9IE1hdGgubWF4KCAwLCBNYXRoLm1pbiggJHNlbGVjdC5maW5kKCAnb3B0aW9uJyApLmxlbmd0aCAtIDEsIGN1cnJlbnRfaW5kZXggKyBzdGVwICkgKTtcclxuXHJcblx0XHRpZiAoIG5leHRfaW5kZXggPT09IGN1cnJlbnRfaW5kZXggKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQkc2VsZWN0LnByb3AoICdzZWxlY3RlZEluZGV4JywgbmV4dF9pbmRleCApLnRyaWdnZXIoICdjaGFuZ2UnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfZm9ybSgpIHtcclxuXHRcdHJldHVybiAkKCAnW2RhdGEtd3BiYy1hZy1zZXR0aW5ncy1mb3JtPVwiMVwiXScgKS5maXJzdCgpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29sbGVjdF9zZXR0aW5ncygpIHtcclxuXHRcdHZhciAkZm9ybSA9IGdldF9mb3JtKCk7XHJcblx0XHR2YXIgd2Vla2RheXMgPSBbXTtcclxuXHJcblx0XHQkZm9ybS5maW5kKCAnaW5wdXRbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c1tdXCJdOmNoZWNrZWQnICkuZWFjaCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR3ZWVrZGF5cy5wdXNoKCBwYXJzZUludCggdGhpcy52YWx1ZSwgMTAgKSApO1xyXG5cdFx0fSApO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHdlZWtkYXlzOiB3ZWVrZGF5cyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5OiAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlcIl0nICkudmFsKCkgfHwgJzAnLFxyXG5cdFx0XHRib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5OiAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5XCJdJyApLnZhbCgpIHx8ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2luX291dDogJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXRcIl06Y2hlY2tlZCcgKS52YWwoKSB8fCAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9leHRyYV9taW51dGVzX2luOiAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfaW5cIl0nICkudmFsKCkgfHwgJycsXHJcblx0XHRcdGJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19vdXQ6ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19vdXRcIl0nICkudmFsKCkgfHwgJycsXHJcblx0XHRcdGJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19pbjogJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX2luXCJdJyApLnZhbCgpIHx8ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfb3V0OiAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfb3V0XCJdJyApLnZhbCgpIHx8ICcnXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0X3NlbGVjdF92YWx1ZSggbmFtZSwgdmFsdWUgKSB7XHJcblx0XHR2YXIgJGZpZWxkID0gZ2V0X2Zvcm0oKS5maW5kKCAnW25hbWU9XCInICsgbmFtZSArICdcIl0nICkuZmlyc3QoKTtcclxuXHJcblx0XHRpZiAoICEgJGZpZWxkLmxlbmd0aCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRmaWVsZC52YWwoIHZhbHVlICk7XHJcblx0XHRpZiAoIFN0cmluZyggJGZpZWxkLnZhbCgpICkgIT09IFN0cmluZyggdmFsdWUgKSApIHtcclxuXHRcdFx0JGZpZWxkLnByb3AoICdzZWxlY3RlZEluZGV4JywgMCApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlfc2V0dGluZ3NfdG9fZm9ybSggc2V0dGluZ3MgKSB7XHJcblx0XHR2YXIgJGZvcm0gPSBnZXRfZm9ybSgpO1xyXG5cdFx0dmFyIHdlZWtkYXlzID0gc2V0dGluZ3MgJiYgc2V0dGluZ3Mud2Vla2RheXMgPyBzZXR0aW5ncy53ZWVrZGF5cyA6IFtdO1xyXG5cclxuXHRcdGlmICggISAkZm9ybS5sZW5ndGggfHwgISBzZXR0aW5ncyApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRmb3JtLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9kYXlzW11cIl0nICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xyXG5cdFx0JC5lYWNoKCB3ZWVrZGF5cywgZnVuY3Rpb24gKCBpbmRleCwgZGF5X251bSApIHtcclxuXHRcdFx0JGZvcm0uZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2RheXNbXVwiXVt2YWx1ZT1cIicgKyBwYXJzZUludCggZGF5X251bSwgMTAgKSArICdcIl0nICkucHJvcCggJ2NoZWNrZWQnLCB0cnVlICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0c2V0X3NlbGVjdF92YWx1ZSggJ2Jvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheScsIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheSB8fCAnMCcgKTtcclxuXHRcdHNldF9zZWxlY3RfdmFsdWUoICdib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5Jywgc2V0dGluZ3MuYm9va2luZ19hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheSB8fCAnJyApO1xyXG5cdFx0c2V0X3NlbGVjdF92YWx1ZSggJ2Jvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19pbicsIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19pbiB8fCAnJyApO1xyXG5cdFx0c2V0X3NlbGVjdF92YWx1ZSggJ2Jvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19vdXQnLCBzZXR0aW5ncy5ib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfb3V0IHx8ICcnICk7XHJcblx0XHRzZXRfc2VsZWN0X3ZhbHVlKCAnYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX2luJywgc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX2luIHx8ICcnICk7XHJcblx0XHRzZXRfc2VsZWN0X3ZhbHVlKCAnYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX291dCcsIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19vdXQgfHwgJycgKTtcclxuXHJcblx0XHQkZm9ybS5maW5kKCAnaW5wdXRbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0XCJdJyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcclxuXHRcdCRmb3JtLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXRcIl1bdmFsdWU9XCInICsgKCBzZXR0aW5ncy5ib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2luX291dCB8fCAnJyApICsgJ1wiXScgKS5wcm9wKCAnY2hlY2tlZCcsIHRydWUgKTtcclxuXHJcblx0XHRyZWZyZXNoX2J1ZmZlcl9maWVsZHMoKTtcclxuXHRcdHN5bmNfYWxsX3JhbmdlcygpO1xyXG5cdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBkYXRlX2Zyb21fc3FsKCBzcWxfZGF0ZSApIHtcclxuXHRcdHZhciBwYXJ0cyA9IFN0cmluZyggc3FsX2RhdGUgfHwgJycgKS5zcGxpdCggJy0nICk7XHJcblx0XHRpZiAoIHBhcnRzLmxlbmd0aCAhPT0gMyApIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV3IERhdGUoIHBhcnNlSW50KCBwYXJ0c1swXSwgMTAgKSwgcGFyc2VJbnQoIHBhcnRzWzFdLCAxMCApIC0gMSwgcGFyc2VJbnQoIHBhcnRzWzJdLCAxMCApLCAwLCAwLCAwICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfdG9kYXlfZGF0ZSgpIHtcclxuXHRcdHZhciBhcnIgPSB3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLmdldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJyA/IHcuX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyApIDogbnVsbDtcclxuXHRcdGlmICggYXJyICYmIGFyci5sZW5ndGggPj0gMyApIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBEYXRlKCBwYXJzZUludCggYXJyWzBdLCAxMCApLCBwYXJzZUludCggYXJyWzFdLCAxMCApIC0gMSwgcGFyc2VJbnQoIGFyclsyXSwgMTAgKSwgMCwgMCwgMCApO1xyXG5cdFx0fVxyXG5cdFx0dmFyIG5vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHRyZXR1cm4gbmV3IERhdGUoIG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93LmdldERhdGUoKSwgMCwgMCwgMCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3JlYWxfdG9kYXlfZGF0ZSgpIHtcclxuXHRcdHZhciBhcnIgPSB3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLmdldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJyA/IHcuX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGltZV9sb2NhbF9hcnInICkgOiBudWxsO1xyXG5cdFx0aWYgKCBhcnIgJiYgYXJyLmxlbmd0aCA+PSAzICkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IERhdGUoIHBhcnNlSW50KCBhcnJbMF0sIDEwICksIHBhcnNlSW50KCBhcnJbMV0sIDEwICkgLSAxLCBwYXJzZUludCggYXJyWzJdLCAxMCApLCAwLCAwLCAwICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZ2V0X3RvZGF5X2RhdGUoKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGRheXNfYmV0d2VlbiggZGF0ZV9hLCBkYXRlX2IgKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5mbG9vciggKCBkYXRlX2EuZ2V0VGltZSgpIC0gZGF0ZV9iLmdldFRpbWUoKSApIC8gODY0MDAwMDAgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFkZF9kYXlzKCBkYXRlLCBkYXlzICkge1xyXG5cdFx0dmFyIHNoaWZ0ZWRfZGF0ZSA9IG5ldyBEYXRlKCBkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIDAsIDAsIDAgKTtcclxuXHRcdHNoaWZ0ZWRfZGF0ZS5zZXREYXRlKCBzaGlmdGVkX2RhdGUuZ2V0RGF0ZSgpICsgZGF5cyApO1xyXG5cdFx0cmV0dXJuIHNoaWZ0ZWRfZGF0ZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGRhdGVfdG9fc3FsKCBkYXRlICkge1xyXG5cdFx0dmFyIG1vbnRoID0gU3RyaW5nKCBkYXRlLmdldE1vbnRoKCkgKyAxICk7XHJcblx0XHR2YXIgZGF5ID0gU3RyaW5nKCBkYXRlLmdldERhdGUoKSApO1xyXG5cclxuXHRcdGlmICggbW9udGgubGVuZ3RoIDwgMiApIHtcclxuXHRcdFx0bW9udGggPSAnMCcgKyBtb250aDtcclxuXHRcdH1cclxuXHRcdGlmICggZGF5Lmxlbmd0aCA8IDIgKSB7XHJcblx0XHRcdGRheSA9ICcwJyArIGRheTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgJy0nICsgbW9udGggKyAnLScgKyBkYXk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfc3FsX2RhdGVfZnJvbV9jZWxsKCBjZWxsICkge1xyXG5cdFx0dmFyIGNsYXNzZXMgPSBTdHJpbmcoIGNlbGwuY2xhc3NOYW1lIHx8ICcnICkuc3BsaXQoIC9cXHMrLyApO1xyXG5cdFx0dmFyIGk7XHJcblx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdGlmICggY2xhc3Nlc1tpXS5pbmRleE9mKCAnc3FsX2RhdGVfJyApID09PSAwICkge1xyXG5cdFx0XHRcdHJldHVybiBjbGFzc2VzW2ldLnJlcGxhY2UoICdzcWxfZGF0ZV8nLCAnJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyc7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB1bmF2YWlsYWJsZV9mcm9tX3RvZGF5X2FwcGxpZXMoIGNlbGxfZGF0ZSwgdG9kYXlfZGF0ZSwgdmFsdWUgKSB7XHJcblx0XHR2YXIgbWludXRlcztcclxuXHRcdHZhciBub3c7XHJcblx0XHR2YXIgdW5hdmFpbGFibGVfdW50aWw7XHJcblxyXG5cdFx0aWYgKCAhIHZhbHVlIHx8IHZhbHVlID09PSAnMCcgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIC9tJC8udGVzdCggdmFsdWUgKSApIHtcclxuXHRcdFx0bWludXRlcyA9IHBhcnNlSW50KCB2YWx1ZSwgMTAgKTtcclxuXHRcdFx0aWYgKCAhIG1pbnV0ZXMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdHVuYXZhaWxhYmxlX3VudGlsID0gbmV3IERhdGUoIG5vdy5nZXRUaW1lKCkgKyAoICggbWludXRlcyAtIDEgKSAqIDYwMDAwICkgKTtcclxuXHRcdFx0dW5hdmFpbGFibGVfdW50aWwgPSBuZXcgRGF0ZSggdW5hdmFpbGFibGVfdW50aWwuZ2V0RnVsbFllYXIoKSwgdW5hdmFpbGFibGVfdW50aWwuZ2V0TW9udGgoKSwgdW5hdmFpbGFibGVfdW50aWwuZ2V0RGF0ZSgpLCAwLCAwLCAwICk7XHJcblx0XHRcdHJldHVybiBjZWxsX2RhdGUuZ2V0VGltZSgpIDw9IHVuYXZhaWxhYmxlX3VudGlsLmdldFRpbWUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGF5c19iZXR3ZWVuKCBjZWxsX2RhdGUsIHRvZGF5X2RhdGUgKSA8IHBhcnNlSW50KCB2YWx1ZSwgMTAgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9vcHRpb25fdGV4dCggc2VsZWN0b3IgKSB7XHJcblx0XHR2YXIgdGV4dCA9ICQoIHNlbGVjdG9yICkuZmluZCggJ29wdGlvbjpzZWxlY3RlZCcgKS50ZXh0KCk7XHJcblx0XHRyZXR1cm4gdHJpbV90ZXh0KCB0ZXh0ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfZGF5c192YWx1ZSggdmFsdWUgKSB7XHJcblx0XHRpZiAoICEgdmFsdWUgfHwgISAvZCQvLnRlc3QoIHZhbHVlICkgKSB7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBhcnNlSW50KCB2YWx1ZSwgMTAgKSB8fCAwO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdXBkYXRlX3dwYmNfcHJldmlld19wYXJhbXMoIHNldHRpbmdzICkge1xyXG5cdFx0aWYgKCAhIHcuX3dwYmMgfHwgdHlwZW9mIHcuX3dwYmMuc2V0X290aGVyX3BhcmFtICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dy5fd3BiYy5zZXRfb3RoZXJfcGFyYW0oICdhdmFpbGFiaWxpdHlfX3dlZWtfZGF5c191bmF2YWlsYWJsZScsIHNldHRpbmdzLndlZWtkYXlzLmNvbmNhdCggWyA5OTkgXSApICk7XHJcblx0XHR3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSggJ2F2YWlsYWJpbGl0eV9fYXZhaWxhYmxlX2Zyb21fdG9kYXknLCBpc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlKCkgPyAoIHNldHRpbmdzLmJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXkgfHwgJycgKSA6ICcnICk7XHJcblx0XHR3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSggJ2F2YWlsYWJpbGl0eV9fdW5hdmFpbGFibGVfZnJvbV90b2RheScsIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheSB8fCAnMCcgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHVwZGF0ZV9idWZmZXJfcHJldmlld19ub3RlKCBzZXR0aW5ncyApIHtcclxuXHRcdHZhciAkbm90ZXMgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1ub3Rlcz1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHRcdHZhciAkY2FsZW5kYXIgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHRcdHZhciAkbm90ZSA9ICRub3Rlcy5maW5kKCAnLndwYmNfYWdfYnVmZmVyX3ByZXZpZXdfbm90ZScgKTtcclxuXHRcdHZhciB0eXBlID0gc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXQgfHwgJyc7XHJcblx0XHR2YXIgYmVmb3JlX3RleHQgPSAnJztcclxuXHRcdHZhciBhZnRlcl90ZXh0ID0gJyc7XHJcblx0XHR2YXIgbWVzc2FnZSA9ICcnO1xyXG5cclxuXHRcdGlmICggISAkbm90ZXMubGVuZ3RoIHx8ICEgJGNhbGVuZGFyLmxlbmd0aCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggISAkbm90ZS5sZW5ndGggKSB7XHJcblx0XHRcdCRub3RlID0gJCggJzxkaXYgY2xhc3M9XCJ3cGJjX2FnX2J1ZmZlcl9wcmV2aWV3X25vdGVcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L2Rpdj4nICk7XHJcblx0XHRcdCRub3Rlcy5hcHBlbmQoICRub3RlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAhIGlzX2J1ZmZlcl9hdmFpbGFibGUoKSApIHtcclxuXHRcdFx0JGNhbGVuZGFyLnJlbW92ZUNsYXNzKCAnd3BiY19hZ19wcmV2aWV3X2J1ZmZlcl9hY3RpdmUnICk7XHJcblx0XHRcdCRub3RlLmF0dHIoICdoaWRkZW4nLCAnaGlkZGVuJyApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JGNhbGVuZGFyLnRvZ2dsZUNsYXNzKCAnd3BiY19hZ19wcmV2aWV3X2J1ZmZlcl9hY3RpdmUnLCAhISB0eXBlICk7XHJcblxyXG5cdFx0aWYgKCB0eXBlID09PSAnbScgKSB7XHJcblx0XHRcdGJlZm9yZV90ZXh0ID0gZ2V0X29wdGlvbl90ZXh0KCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfaW5cIl0nICkgfHwgJy0nO1xyXG5cdFx0XHRhZnRlcl90ZXh0ID0gZ2V0X29wdGlvbl90ZXh0KCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfb3V0XCJdJyApIHx8ICctJztcclxuXHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09ICdkJyApIHtcclxuXHRcdFx0YmVmb3JlX3RleHQgPSBnZXRfb3B0aW9uX3RleHQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19pblwiXScgKSB8fCAnLSc7XHJcblx0XHRcdGFmdGVyX3RleHQgPSBnZXRfb3B0aW9uX3RleHQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19vdXRcIl0nICkgfHwgJy0nO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdHlwZSApIHtcclxuXHRcdFx0bWVzc2FnZSA9ICc8c3Ryb25nPicgKyAoIGNmZy5pMThuICYmIGNmZy5pMThuLmJ1ZmZlcl9wcmV2aWV3ID8gY2ZnLmkxOG4uYnVmZmVyX3ByZXZpZXcgOiAnQnVmZmVyIHByZXZpZXcnICkgKyAnOjwvc3Ryb25nPiAnICtcclxuXHRcdFx0XHQoIGNmZy5pMThuICYmIGNmZy5pMThuLmJlZm9yZV9ib29raW5nID8gY2ZnLmkxOG4uYmVmb3JlX2Jvb2tpbmcgOiAnQmVmb3JlIGJvb2tpbmcnICkgKyAnICcgKyBiZWZvcmVfdGV4dCArXHJcblx0XHRcdFx0JyAvICcgKyAoIGNmZy5pMThuICYmIGNmZy5pMThuLmFmdGVyX2Jvb2tpbmcgPyBjZmcuaTE4bi5hZnRlcl9ib29raW5nIDogJ0FmdGVyIGJvb2tpbmcnICkgKyAnICcgKyBhZnRlcl90ZXh0O1xyXG5cdFx0XHRpZiAoICRub3RlLmh0bWwoKSAhPT0gbWVzc2FnZSApIHtcclxuXHRcdFx0XHQkbm90ZS5odG1sKCBtZXNzYWdlICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAkbm90ZS5hdHRyKCAnaGlkZGVuJyApICkge1xyXG5cdFx0XHRcdCRub3RlLnJlbW92ZUF0dHIoICdoaWRkZW4nICk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1lc3NhZ2UgPSBjZmcuaTE4biAmJiBjZmcuaTE4bi5ub19idWZmZXIgPyBjZmcuaTE4bi5ub19idWZmZXIgOiAnTm8gYm9va2luZyBidWZmZXIgaXMgc2VsZWN0ZWQuJztcclxuXHRcdFx0aWYgKCAkbm90ZS50ZXh0KCkgIT09IG1lc3NhZ2UgKSB7XHJcblx0XHRcdFx0JG5vdGUudGV4dCggbWVzc2FnZSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggISAkbm90ZS5hdHRyKCAnaGlkZGVuJyApICkge1xyXG5cdFx0XHRcdCRub3RlLmF0dHIoICdoaWRkZW4nLCAnaGlkZGVuJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBhcHBseV9idWZmZXJfZGF5c19wcmV2aWV3KCBzZXR0aW5ncyApIHtcclxuXHRcdHZhciAkY2FsZW5kYXIgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICk7XHJcblx0XHR2YXIgYmVmb3JlX2RheXMgPSBnZXRfZGF5c192YWx1ZSggc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX2luICk7XHJcblx0XHR2YXIgYWZ0ZXJfZGF5cyA9IGdldF9kYXlzX3ZhbHVlKCBzZXR0aW5ncy5ib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfb3V0ICk7XHJcblx0XHR2YXIgZGF0ZV9jZWxscyA9IHt9O1xyXG5cdFx0dmFyIGJvb2tlZF9kYXRlcyA9IFtdO1xyXG5cclxuXHRcdGlmICggISBpc19idWZmZXJfYXZhaWxhYmxlKCkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0ICE9PSAnZCcgfHwgKCAhIGJlZm9yZV9kYXlzICYmICEgYWZ0ZXJfZGF5cyApICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JGNhbGVuZGFyLmZpbmQoICcuZGF0ZXBpY2stZGF5cy1jZWxsJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyICRjZWxsID0gJCggdGhpcyApO1xyXG5cdFx0XHR2YXIgc3FsX2RhdGUgPSBnZXRfc3FsX2RhdGVfZnJvbV9jZWxsKCB0aGlzICk7XHJcblx0XHRcdHZhciBjZWxsX2RhdGU7XHJcblxyXG5cdFx0XHRpZiAoICEgc3FsX2RhdGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkYXRlX2NlbGxzWyBzcWxfZGF0ZSBdID0gJGNlbGw7XHJcblxyXG5cdFx0XHRpZiAoICRjZWxsLmhhc0NsYXNzKCAnZGF0ZV9hcHByb3ZlZCcgKSB8fCAkY2VsbC5oYXNDbGFzcyggJ2RhdGUyYXBwcm92ZScgKSApIHtcclxuXHRcdFx0XHRjZWxsX2RhdGUgPSBkYXRlX2Zyb21fc3FsKCBzcWxfZGF0ZSApO1xyXG5cdFx0XHRcdGlmICggY2VsbF9kYXRlICkge1xyXG5cdFx0XHRcdFx0Ym9va2VkX2RhdGVzLnB1c2goIGNlbGxfZGF0ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cclxuXHRcdCQuZWFjaCggYm9va2VkX2RhdGVzLCBmdW5jdGlvbiAoIGluZGV4LCBib29rZWRfZGF0ZSApIHtcclxuXHRcdFx0dmFyIG9mZnNldDtcclxuXHRcdFx0dmFyIHRhcmdldF9zcWxfZGF0ZTtcclxuXHRcdFx0dmFyICR0YXJnZXRfY2VsbDtcclxuXHJcblx0XHRcdGZvciAoIG9mZnNldCA9IGJlZm9yZV9kYXlzICogLTE7IG9mZnNldCA8IDA7IG9mZnNldCsrICkge1xyXG5cdFx0XHRcdHRhcmdldF9zcWxfZGF0ZSA9IGRhdGVfdG9fc3FsKCBhZGRfZGF5cyggYm9va2VkX2RhdGUsIG9mZnNldCApICk7XHJcblx0XHRcdFx0JHRhcmdldF9jZWxsID0gZGF0ZV9jZWxsc1sgdGFyZ2V0X3NxbF9kYXRlIF07XHJcblx0XHRcdFx0aWYgKCAkdGFyZ2V0X2NlbGwgJiYgISAkdGFyZ2V0X2NlbGwuaGFzQ2xhc3MoICdkYXRlX2FwcHJvdmVkJyApICYmICEgJHRhcmdldF9jZWxsLmhhc0NsYXNzKCAnZGF0ZTJhcHByb3ZlJyApICkge1xyXG5cdFx0XHRcdFx0cmVtZW1iZXJfcHJldmlld19vcmlnaW4oICR0YXJnZXRfY2VsbCApO1xyXG5cdFx0XHRcdFx0JHRhcmdldF9jZWxsLmFkZENsYXNzKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlIHdwYmNfYWdfcHJldmlld191bmF2YWlsYWJsZSB3cGJjX2FnX3ByZXZpZXdfYnVmZmVyX3VuYXZhaWxhYmxlIGJ1ZmZlcl91bmF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHRcdCR0YXJnZXRfY2VsbC5hdHRyKCAnZGF0YS13cGJjLWFnLXByZXZpZXctcmVhc29uJywgJ3dwYmNfYWdfcHJldmlld19idWZmZXJfdW5hdmFpbGFibGUnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKCBvZmZzZXQgPSAxOyBvZmZzZXQgPD0gYWZ0ZXJfZGF5czsgb2Zmc2V0KysgKSB7XHJcblx0XHRcdFx0dGFyZ2V0X3NxbF9kYXRlID0gZGF0ZV90b19zcWwoIGFkZF9kYXlzKCBib29rZWRfZGF0ZSwgb2Zmc2V0ICkgKTtcclxuXHRcdFx0XHQkdGFyZ2V0X2NlbGwgPSBkYXRlX2NlbGxzWyB0YXJnZXRfc3FsX2RhdGUgXTtcclxuXHRcdFx0XHRpZiAoICR0YXJnZXRfY2VsbCAmJiAhICR0YXJnZXRfY2VsbC5oYXNDbGFzcyggJ2RhdGVfYXBwcm92ZWQnICkgJiYgISAkdGFyZ2V0X2NlbGwuaGFzQ2xhc3MoICdkYXRlMmFwcHJvdmUnICkgKSB7XHJcblx0XHRcdFx0XHRyZW1lbWJlcl9wcmV2aWV3X29yaWdpbiggJHRhcmdldF9jZWxsICk7XHJcblx0XHRcdFx0XHQkdGFyZ2V0X2NlbGwuYWRkQ2xhc3MoICdkYXRlX3VzZXJfdW5hdmFpbGFibGUgd3BiY19hZ19wcmV2aWV3X3VuYXZhaWxhYmxlIHdwYmNfYWdfcHJldmlld19idWZmZXJfdW5hdmFpbGFibGUgYnVmZmVyX3VuYXZhaWxhYmxlJyApO1xyXG5cdFx0XHRcdFx0JHRhcmdldF9jZWxsLmF0dHIoICdkYXRhLXdwYmMtYWctcHJldmlldy1yZWFzb24nLCAnd3BiY19hZ19wcmV2aWV3X2J1ZmZlcl91bmF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJlbWVtYmVyX3ByZXZpZXdfb3JpZ2luKCAkY2VsbCApIHtcclxuXHRcdGlmICggdHlwZW9mICRjZWxsLmF0dHIoICdkYXRhLXdwYmMtYWctb3JpZ2luYWwtZGF0ZS11c2VyLXVuYXZhaWxhYmxlJyApID09PSAndW5kZWZpbmVkJyApIHtcclxuXHRcdFx0JGNlbGwuYXR0ciggJ2RhdGEtd3BiYy1hZy1vcmlnaW5hbC1kYXRlLXVzZXItdW5hdmFpbGFibGUnLCAkY2VsbC5oYXNDbGFzcyggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZScgKSA/ICcxJyA6ICcwJyApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY2xlYXJfcHJldmlld19jZWxsKCAkY2VsbCApIHtcclxuXHRcdHZhciBoYWRfZGF0ZV91c2VyX3VuYXZhaWxhYmxlID0gJGNlbGwuYXR0ciggJ2RhdGEtd3BiYy1hZy1vcmlnaW5hbC1kYXRlLXVzZXItdW5hdmFpbGFibGUnICkgPT09ICcxJztcclxuXHJcblx0XHQkY2VsbC5yZW1vdmVDbGFzcyggcHJldmlld191bmF2YWlsYWJsZV9jbGFzc2VzICk7XHJcblx0XHQkY2VsbC5yZW1vdmVBdHRyKCAnZGF0YS13cGJjLWFnLXByZXZpZXctcmVhc29uJyApO1xyXG5cdFx0JGNlbGwucmVtb3ZlQXR0ciggJ2RhdGEtd3BiYy1hZy1vcmlnaW5hbC1kYXRlLXVzZXItdW5hdmFpbGFibGUnICk7XHJcblxyXG5cdFx0aWYgKCAhIGhhZF9kYXRlX3VzZXJfdW5hdmFpbGFibGUgKSB7XHJcblx0XHRcdCRjZWxsLnJlbW92ZUNsYXNzKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlJyApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlfY2FsZW5kYXJfcHJldmlldygpIHtcclxuXHRcdHZhciBzZXR0aW5ncyA9IGNvbGxlY3Rfc2V0dGluZ3MoKTtcclxuXHRcdHZhciB0b2RheV9kYXRlID0gZ2V0X3JlYWxfdG9kYXlfZGF0ZSgpO1xyXG5cdFx0dmFyIGF2YWlsYWJsZV9saW1pdCA9IGlzX2F2YWlsYWJsZV9saW1pdF9hdmFpbGFibGUoKSA/IHBhcnNlSW50KCBzZXR0aW5ncy5ib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5IHx8ICcwJywgMTAgKSA6IDA7XHJcblx0XHR2YXIgJGNhbGVuZGFyID0gJCggJ1tkYXRhLXdwYmMtYWctY2FsZW5kYXItcGFuZWw9XCIxXCJdJyApO1xyXG5cclxuXHRcdHVwZGF0ZV93cGJjX3ByZXZpZXdfcGFyYW1zKCBzZXR0aW5ncyApO1xyXG5cdFx0dXBkYXRlX2J1ZmZlcl9wcmV2aWV3X25vdGUoIHNldHRpbmdzICk7XHJcblxyXG5cdFx0JGNhbGVuZGFyLmZpbmQoICcuZGF0ZXBpY2stZGF5cy1jZWxsJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyIGNlbGwgPSB0aGlzO1xyXG5cdFx0XHR2YXIgJGNlbGwgPSAkKCBjZWxsICk7XHJcblx0XHRcdHZhciBzcWxfZGF0ZSA9IGdldF9zcWxfZGF0ZV9mcm9tX2NlbGwoIGNlbGwgKTtcclxuXHRcdFx0dmFyIGNlbGxfZGF0ZSA9IGRhdGVfZnJvbV9zcWwoIHNxbF9kYXRlICk7XHJcblx0XHRcdHZhciBtYWtlX3VuYXZhaWxhYmxlID0gZmFsc2U7XHJcblx0XHRcdHZhciByZWFzb25fY2xhc3MgPSAnJztcclxuXHRcdFx0dmFyIHByZXZpb3VzX3JlYXNvbiA9ICRjZWxsLmF0dHIoICdkYXRhLXdwYmMtYWctcHJldmlldy1yZWFzb24nICkgfHwgJyc7XHJcblx0XHRcdHZhciBoYWRfZ2VuZXJhbF9wcmV2aWV3ID0gISEgcHJldmlvdXNfcmVhc29uIHx8ICRjZWxsLmhhc0NsYXNzKCAnd3BiY19hZ19wcmV2aWV3X3VuYXZhaWxhYmxlJyApIHx8ICRjZWxsLmhhc0NsYXNzKCAnd2Vla2RheV91bmF2YWlsYWJsZScgKSB8fCAkY2VsbC5oYXNDbGFzcyggJ2Zyb21fdG9kYXlfdW5hdmFpbGFibGUnICkgfHwgJGNlbGwuaGFzQ2xhc3MoICdsaW1pdF9hdmFpbGFibGVfZnJvbV90b2RheScgKSB8fCAkY2VsbC5oYXNDbGFzcyggJ2J1ZmZlcl91bmF2YWlsYWJsZScgKTtcclxuXHJcblx0XHRcdGlmICggISBjZWxsX2RhdGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHNldHRpbmdzLndlZWtkYXlzLmluZGV4T2YoIGNlbGxfZGF0ZS5nZXREYXkoKSApID4gLTEgKSB7XHJcblx0XHRcdFx0bWFrZV91bmF2YWlsYWJsZSA9IHRydWU7XHJcblx0XHRcdFx0cmVhc29uX2NsYXNzID0gJ3dwYmNfYWdfcHJldmlld193ZWVrZGF5X3VuYXZhaWxhYmxlJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCB1bmF2YWlsYWJsZV9mcm9tX3RvZGF5X2FwcGxpZXMoIGNlbGxfZGF0ZSwgdG9kYXlfZGF0ZSwgc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5ICkgKSB7XHJcblx0XHRcdFx0bWFrZV91bmF2YWlsYWJsZSA9IHRydWU7XHJcblx0XHRcdFx0cmVhc29uX2NsYXNzID0gJ3dwYmNfYWdfcHJldmlld19mcm9tX3RvZGF5X3VuYXZhaWxhYmxlJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBhdmFpbGFibGVfbGltaXQgPiAwICYmIGRheXNfYmV0d2VlbiggY2VsbF9kYXRlLCB0b2RheV9kYXRlICkgPj0gYXZhaWxhYmxlX2xpbWl0ICkge1xyXG5cdFx0XHRcdG1ha2VfdW5hdmFpbGFibGUgPSB0cnVlO1xyXG5cdFx0XHRcdHJlYXNvbl9jbGFzcyA9ICd3cGJjX2FnX3ByZXZpZXdfbGltaXRfYXZhaWxhYmxlX2Zyb21fdG9kYXknO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIG1ha2VfdW5hdmFpbGFibGUgKSB7XHJcblx0XHRcdFx0aWYgKCBwcmV2aW91c19yZWFzb24gIT09IHJlYXNvbl9jbGFzcyApIHtcclxuXHRcdFx0XHRcdGlmICggaGFkX2dlbmVyYWxfcHJldmlldyApIHtcclxuXHRcdFx0XHRcdFx0Y2xlYXJfcHJldmlld19jZWxsKCAkY2VsbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmVtZW1iZXJfcHJldmlld19vcmlnaW4oICRjZWxsICk7XHJcblx0XHRcdFx0XHQkY2VsbC5hZGRDbGFzcyggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZSB3cGJjX2FnX3ByZXZpZXdfdW5hdmFpbGFibGUgJyArIHJlYXNvbl9jbGFzcyApO1xyXG5cdFx0XHRcdFx0JGNlbGwuYXR0ciggJ2RhdGEtd3BiYy1hZy1wcmV2aWV3LXJlYXNvbicsIHJlYXNvbl9jbGFzcyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIGlmICggaGFkX2dlbmVyYWxfcHJldmlldyApIHtcclxuXHRcdFx0XHRjbGVhcl9wcmV2aWV3X2NlbGwoICRjZWxsICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHJcblx0XHRhcHBseV9idWZmZXJfZGF5c19wcmV2aWV3KCBzZXR0aW5ncyApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcXVldWVfcHJldmlld19yZWZyZXNoKCkge1xyXG5cdFx0aWYgKCBwcmV2aWV3X2ZyYW1lICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB3LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcclxuXHRcdFx0cHJldmlld19mcmFtZSA9IHcucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cHJldmlld19mcmFtZSA9IDA7XHJcblx0XHRcdFx0YXBwbHlfY2FsZW5kYXJfcHJldmlldygpO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRwcmV2aWV3X2ZyYW1lID0gdy5zZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cHJldmlld19mcmFtZSA9IDA7XHJcblx0XHRcdFx0YXBwbHlfY2FsZW5kYXJfcHJldmlldygpO1xyXG5cdFx0XHR9LCAwICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goIGRlbGF5ICkge1xyXG5cdFx0Y2xlYXJUaW1lb3V0KCBwcmV2aWV3X3RpbWVyICk7XHJcblx0XHRkZWxheSA9IHBhcnNlSW50KCBkZWxheSwgMTAgKSB8fCAwO1xyXG5cclxuXHRcdGlmICggZGVsYXkgPiAwICkge1xyXG5cdFx0XHRwcmV2aWV3X3RpbWVyID0gc2V0VGltZW91dCggcXVldWVfcHJldmlld19yZWZyZXNoLCBkZWxheSApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0cXVldWVfcHJldmlld19yZWZyZXNoKCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB1cGRhdGVfaGludHMoIGhpbnRzICkge1xyXG5cdFx0aWYgKCAhIGhpbnRzICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgaGludHMuYm9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5X19oaW50ICE9PSAndW5kZWZpbmVkJyApIHtcclxuXHRcdFx0JCggJ1tkYXRhLXdwYmMtYWctaGludD1cImJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheVwiXScgKS5odG1sKFxyXG5cdFx0XHRcdCc8c3BhbiBjbGFzcz1cIndwYmNfYWdfaGludF91bmF2YWlsYWJsZVwiPicgKyAkKCAnW2RhdGEtd3BiYy1hZy1oaW50PVwiYm9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5XCJdIC53cGJjX2FnX2hpbnRfdW5hdmFpbGFibGUnICkuZmlyc3QoKS50ZXh0KCkgKyAnPC9zcGFuPicgK1xyXG5cdFx0XHRcdGhpbnRzLmJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheV9faGludFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdHlwZW9mIGhpbnRzLmJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlfX2hpbnQgIT09ICd1bmRlZmluZWQnICkge1xyXG5cdFx0XHQkKCAnW2RhdGEtd3BiYy1hZy1oaW50PVwiYm9va2luZ19hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheVwiXScgKS5odG1sKFxyXG5cdFx0XHRcdCc8c3BhbiBjbGFzcz1cIndwYmNfYWdfaGludF9hdmFpbGFibGVcIj4nICsgJCggJ1tkYXRhLXdwYmMtYWctaGludD1cImJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlcIl0gLndwYmNfYWdfaGludF9hdmFpbGFibGUnICkuZmlyc3QoKS50ZXh0KCkgKyAnPC9zcGFuPicgK1xyXG5cdFx0XHRcdGhpbnRzLmJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlfX2hpbnRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNob3dfbWVzc2FnZSggbWVzc2FnZSwgdHlwZSwgZHVyYXRpb24gKSB7XHJcblx0XHRpZiAoIHR5cGVvZiB3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHR3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlKCBtZXNzYWdlLCB0eXBlIHx8ICdpbmZvJywgZHVyYXRpb24gfHwgMjAwMCwgZmFsc2UgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHcuYWxlcnQoIG1lc3NhZ2UgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldF9idXN5KCAkYnV0dG9uLCBidXN5ICkge1xyXG5cdFx0dmFyIGJ1c3lfdGV4dDtcclxuXHJcblx0XHRpZiAoICEgJGJ1dHRvbiB8fCAhICRidXR0b24ubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBidXN5ICkge1xyXG5cdFx0XHRpZiAoICEgJGJ1dHRvbi5kYXRhKCAnd3BiYy1hZy1vcmlnaW5hbC1odG1sJyApICkge1xyXG5cdFx0XHRcdCRidXR0b24uZGF0YSggJ3dwYmMtYWctb3JpZ2luYWwtaHRtbCcsICRidXR0b24uaHRtbCgpICk7XHJcblx0XHRcdH1cclxuXHRcdFx0YnVzeV90ZXh0ID0gJGJ1dHRvbi5kYXRhKCAnd3BiYy11LWJ1c3ktdGV4dCcgKSB8fCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmluZyApIHx8ICdTYXZpbmcuLi4nO1xyXG5cdFx0XHQkYnV0dG9uLmFkZENsYXNzKCAnd3BiY19hZ19pc19zYXZpbmcnICkuYXR0ciggJ2FyaWEtYnVzeScsICd0cnVlJyApLmh0bWwoICc8aSBjbGFzcz1cIm1lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX3JvdGF0ZV9yaWdodCB3cGJjX3NwaW5cIj48L2k+PHNwYW4gY2xhc3M9XCJpbi1idXR0b24tdGV4dFwiPiZuYnNwOyZuYnNwOycgKyBidXN5X3RleHQgKyAnPC9zcGFuPicgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCRidXR0b24ucmVtb3ZlQ2xhc3MoICd3cGJjX2FnX2lzX3NhdmluZycgKS5yZW1vdmVBdHRyKCAnYXJpYS1idXN5JyApO1xyXG5cdFx0XHRpZiAoICRidXR0b24uZGF0YSggJ3dwYmMtYWctb3JpZ2luYWwtaHRtbCcgKSApIHtcclxuXHRcdFx0XHQkYnV0dG9uLmh0bWwoICRidXR0b24uZGF0YSggJ3dwYmMtYWctb3JpZ2luYWwtaHRtbCcgKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZXBsYWNlX2NhbGVuZGFyX3BhbmVsKCBodG1sICkge1xyXG5cdFx0dmFyICRob2xkZXIgPSAkKCAnPGRpdiAvPicgKS5hcHBlbmQoICQucGFyc2VIVE1MKCBodG1sLCBkb2N1bWVudCwgdHJ1ZSApICk7XHJcblx0XHR2YXIgJG5ld19wYW5lbCA9ICRob2xkZXIuZmluZCggJ1tkYXRhLXdwYmMtYWctY2FsZW5kYXItcGFuZWw9XCIxXCJdJyApLmZpcnN0KCk7XHJcblx0XHR2YXIgJG9sZF9wYW5lbCA9ICQoICdbZGF0YS13cGJjLWFnLWNhbGVuZGFyLXBhbmVsPVwiMVwiXScgKS5maXJzdCgpO1xyXG5cdFx0dmFyICRzY3JpcHRzO1xyXG5cclxuXHRcdGlmICggISAkbmV3X3BhbmVsLmxlbmd0aCB8fCAhICRvbGRfcGFuZWwubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JHNjcmlwdHMgPSAkbmV3X3BhbmVsLmZpbmQoICdzY3JpcHQnICkucmVtb3ZlKCk7XHJcblx0XHQkb2xkX3BhbmVsLnJlcGxhY2VXaXRoKCAkbmV3X3BhbmVsICk7XHJcblxyXG5cdFx0JHNjcmlwdHMuZWFjaCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgY29kZSA9IHRoaXMudGV4dCB8fCB0aGlzLnRleHRDb250ZW50IHx8IHRoaXMuaW5uZXJIVE1MIHx8ICcnO1xyXG5cdFx0XHR2YXIgc3JjID0gdGhpcy5zcmMgfHwgJyc7XHJcblxyXG5cdFx0XHRpZiAoIHNyYyApIHtcclxuXHRcdFx0XHQkLmFqYXgoIHtcclxuXHRcdFx0XHRcdHVybDogc3JjLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxyXG5cdFx0XHRcdFx0Y2FjaGU6IHRydWVcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIGNvZGUgKSB7XHJcblx0XHRcdFx0JC5nbG9iYWxFdmFsKCBjb2RlICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldF9jYWxlbmRhcl9sb2FkaW5nKCBpc19sb2FkaW5nICkge1xyXG5cdFx0dmFyICRjYWxlbmRhciA9ICQoICdbZGF0YS13cGJjLWFnLWNhbGVuZGFyLXBhbmVsPVwiMVwiXScgKS5maXJzdCgpO1xyXG5cdFx0dmFyIGxvYWRpbmdfdGV4dCA9IGNmZy5pMThuICYmIGNmZy5pMThuLmxvYWRpbmcgPyBjZmcuaTE4bi5sb2FkaW5nIDogJ0xvYWRpbmcnO1xyXG5cdFx0dmFyICRsb2FkaW5nO1xyXG5cclxuXHRcdGlmICggISAkY2FsZW5kYXIubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpc19sb2FkaW5nICkge1xyXG5cdFx0XHQkbG9hZGluZyA9ICRjYWxlbmRhci5maW5kKCAnLndwYmNfY2FsZW5kYXJfbG9hZGluZycgKS5maXJzdCgpO1xyXG5cdFx0XHRpZiAoICEgJGxvYWRpbmcubGVuZ3RoICkge1xyXG5cdFx0XHRcdCRsb2FkaW5nID0gJChcclxuXHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiY19jYWxlbmRhcl9sb2FkaW5nIHdwYmNfYWdfY2FsZW5kYXJfbG9hZGluZ1wiPicgK1xyXG5cdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJ3cGJjX2ljbl9hdXRvcmVuZXcgd3BiY19zcGluXCI+PC9zcGFuPiZuYnNwOyZuYnNwOycgK1xyXG5cdFx0XHRcdFx0XHQnPHNwYW4+PC9zcGFuPicgK1xyXG5cdFx0XHRcdFx0JzwvZGl2PidcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdCRsb2FkaW5nLmZpbmQoICdzcGFuJyApLmxhc3QoKS50ZXh0KCBsb2FkaW5nX3RleHQgKyAnLi4uJyApO1xyXG5cdFx0XHRcdCRjYWxlbmRhci5hcHBlbmQoICRsb2FkaW5nICk7XHJcblx0XHRcdH1cclxuXHRcdFx0JGNhbGVuZGFyLmFkZENsYXNzKCAnaXMtbG9hZGluZycgKS5hdHRyKCAnYXJpYS1idXN5JywgJ3RydWUnICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQkY2FsZW5kYXIucmVtb3ZlQ2xhc3MoICdpcy1sb2FkaW5nJyApLnJlbW92ZUF0dHIoICdhcmlhLWJ1c3knICk7XHJcblx0XHRcdCRjYWxlbmRhci5maW5kKCAnLndwYmNfY2FsZW5kYXJfbG9hZGluZycgKS5yZW1vdmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9wcmV2aWV3X3BheWxvYWQoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRhY3Rpb246IGNmZy5wcmV2aWV3X2FjdGlvbiB8fCAnV1BCQ19BSlhfQVZBSUxBQklMSVRZX0dFTkVSQUxfUFJFVklFVycsXHJcblx0XHRcdG5vbmNlOiBjZmcubm9uY2UgfHwgJycsXHJcblx0XHRcdHJlc291cmNlX2lkOiAkKCAnI3dwYmNfYWdfcmVzb3VyY2VfaWQnICkudmFsKCkgfHwgJycsXHJcblx0XHRcdG1vbnRoc19jb3VudDogJCggJyN3cGJjX2FnX21vbnRoc19jb3VudCcgKS52YWwoKSB8fCAnJ1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGxvYWRfY2FsZW5kYXJfcHJldmlldygpIHtcclxuXHRcdHZhciAkY2FsZW5kYXIgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHRcdHZhciBjdXJyZW50X3ByZXZpZXdfYWpheDtcclxuXHJcblx0XHRpZiAoICEgY2ZnLmFqYXhfdXJsICkge1xyXG5cdFx0XHRzaG93X21lc3NhZ2UoICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgKSB8fCAnVW5hYmxlIHRvIHJlZnJlc2ggY2FsZW5kYXIgcHJldmlldy4nLCAnZXJyb3InLCAxMDAwMCApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBwcmV2aWV3X2FqYXggJiYgcHJldmlld19hamF4LnJlYWR5U3RhdGUgIT09IDQgKSB7XHJcblx0XHRcdHByZXZpZXdfYWpheC5hYm9ydCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNldF9jYWxlbmRhcl9sb2FkaW5nKCB0cnVlICk7XHJcblxyXG5cdFx0Y3VycmVudF9wcmV2aWV3X2FqYXggPSAkLmFqYXgoIHtcclxuXHRcdFx0dXJsOiBjZmcuYWpheF91cmwsXHJcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRkYXRhOiBnZXRfcHJldmlld19wYXlsb2FkKClcclxuXHRcdH0gKTtcclxuXHRcdHByZXZpZXdfYWpheCA9IGN1cnJlbnRfcHJldmlld19hamF4O1xyXG5cclxuXHRcdGN1cnJlbnRfcHJldmlld19hamF4LmRvbmUoIGZ1bmN0aW9uICggcmVzcG9uc2UgKSB7XHJcblx0XHRcdGlmICggISByZXNwb25zZSB8fCAhIHJlc3BvbnNlLnN1Y2Nlc3MgfHwgISByZXNwb25zZS5kYXRhIHx8ICEgcmVzcG9uc2UuZGF0YS5odG1sICkge1xyXG5cdFx0XHRcdHNob3dfbWVzc2FnZSggKCByZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApIHx8ICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgKSB8fCAnVW5hYmxlIHRvIHJlZnJlc2ggY2FsZW5kYXIgcHJldmlldy4nLCAnZXJyb3InLCAxMDAwMCApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmVwbGFjZV9jYWxlbmRhcl9wYW5lbCggcmVzcG9uc2UuZGF0YS5odG1sICk7XHJcblx0XHRcdCQoICdbZGF0YS13cGJjLWFnLXBhZ2U9XCIxXCJdJyApLmF0dHIoICdkYXRhLXdwYmMtYWctcmVzb3VyY2UtaWQnLCByZXNwb25zZS5kYXRhLnJlc291cmNlX2lkIHx8ICcnICk7XHJcblx0XHRcdG9ic2VydmVfY2FsZW5kYXJfY2hhbmdlcygpO1xyXG5cdFx0XHRzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goKTtcclxuXHRcdFx0c2V0VGltZW91dCggc2NoZWR1bGVfcHJldmlld19yZWZyZXNoLCA2MDAgKTtcclxuXHRcdH0gKS5mYWlsKCBmdW5jdGlvbiAoIGpxX3hociwgdGV4dF9zdGF0dXMgKSB7XHJcblx0XHRcdGlmICggdGV4dF9zdGF0dXMgIT09ICdhYm9ydCcgKSB7XHJcblx0XHRcdFx0c2hvd19tZXNzYWdlKCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnByZXZpZXdfZmFpbGVkICkgfHwgJ1VuYWJsZSB0byByZWZyZXNoIGNhbGVuZGFyIHByZXZpZXcuJywgJ2Vycm9yJywgMTAwMDAgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSApLmFsd2F5cyggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAoIHByZXZpZXdfYWpheCA9PT0gY3VycmVudF9wcmV2aWV3X2FqYXggKSB7XHJcblx0XHRcdFx0c2V0X2NhbGVuZGFyX2xvYWRpbmcoIGZhbHNlICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoIGJ1dHRvbiApIHtcclxuXHRcdHZhciAkYnV0dG9uID0gJCggYnV0dG9uICk7XHJcblx0XHR2YXIgc2V0dGluZ3MgPSBjb2xsZWN0X3NldHRpbmdzKCk7XHJcblx0XHR2YXIgcGF5bG9hZCA9ICQuZXh0ZW5kKCB7fSwgc2V0dGluZ3MsIHtcclxuXHRcdFx0YWN0aW9uOiBjZmcuYWN0aW9uIHx8ICdXUEJDX0FKWF9BVkFJTEFCSUxJVFlfR0VORVJBTF9TQVZFJyxcclxuXHRcdFx0bm9uY2U6IGNmZy5ub25jZSB8fCAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9kYXlzOiBzZXR0aW5ncy53ZWVrZGF5c1xyXG5cdFx0fSApO1xyXG5cclxuXHRcdGlmICggISBjZmcuYWpheF91cmwgKSB7XHJcblx0XHRcdHNob3dfbWVzc2FnZSggKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZlX2ZhaWxlZCApIHx8ICdVbmFibGUgdG8gc2F2ZSBnZW5lcmFsIGF2YWlsYWJpbGl0eSBzZXR0aW5ncy4nLCAnZXJyb3InLCAxMDAwMCApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0c2V0X2J1c3koICRidXR0b24sIHRydWUgKTtcclxuXHJcblx0XHQkLmFqYXgoIHtcclxuXHRcdFx0dXJsOiBjZmcuYWpheF91cmwsXHJcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRkYXRhOiBwYXlsb2FkXHJcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24gKCByZXNwb25zZSApIHtcclxuXHRcdFx0aWYgKCAhIHJlc3BvbnNlIHx8ICEgcmVzcG9uc2Uuc3VjY2VzcyApIHtcclxuXHRcdFx0XHRzaG93X21lc3NhZ2UoICggcmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLm1lc3NhZ2UgKSB8fCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmVfZmFpbGVkICkgfHwgJ1VuYWJsZSB0byBzYXZlIGdlbmVyYWwgYXZhaWxhYmlsaXR5IHNldHRpbmdzLicsICdlcnJvcicsIDEwMDAwICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5zZXR0aW5ncyAmJiByZXNwb25zZS5kYXRhLnNldHRpbmdzLmhpbnRzICkge1xyXG5cdFx0XHRcdHVwZGF0ZV9oaW50cyggcmVzcG9uc2UuZGF0YS5zZXR0aW5ncy5oaW50cyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsb2FkX2NhbGVuZGFyX3ByZXZpZXcoKTtcclxuXHRcdFx0c2hvd19tZXNzYWdlKCAoIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5tZXNzYWdlICkgfHwgKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZlZCApIHx8ICdHZW5lcmFsIGF2YWlsYWJpbGl0eSBzZXR0aW5ncyB1cGRhdGVkLicsICdzdWNjZXNzJywgMjAwMCApO1xyXG5cdFx0fSApLmZhaWwoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0c2hvd19tZXNzYWdlKCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmVfZmFpbGVkICkgfHwgJ1VuYWJsZSB0byBzYXZlIGdlbmVyYWwgYXZhaWxhYmlsaXR5IHNldHRpbmdzLicsICdlcnJvcicsIDEwMDAwICk7XHJcblx0XHR9ICkuYWx3YXlzKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHNldF9idXN5KCAkYnV0dG9uLCBmYWxzZSApO1xyXG5cdFx0fSApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcmVzZXRfc2V0dGluZ3MoIGJ1dHRvbiApIHtcclxuXHRcdHZhciBjb25maXJtX21lc3NhZ2UgPSAoIGNmZy5pMThuICYmIGNmZy5pMThuLnJlc2V0X2NvbmZpcm0gKSB8fCAnUmVzZXQgZ2VuZXJhbCBhdmFpbGFiaWxpdHkgc2V0dGluZ3MgdG8gZGVmYXVsdCB2YWx1ZXM/JztcclxuXHRcdHZhciBkZWZhdWx0X3NldHRpbmdzID0gY2ZnLmRlZmF1bHRfc2V0dGluZ3MgfHwge1xyXG5cdFx0XHR3ZWVrZGF5czogW10sXHJcblx0XHRcdGJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheTogJzAnLFxyXG5cdFx0XHRib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5OiAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXQ6ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfaW46ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfb3V0OiAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX2luOiAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX291dDogJydcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKCAhIHcuY29uZmlybSggY29uZmlybV9tZXNzYWdlICkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRhcHBseV9zZXR0aW5nc190b19mb3JtKCBkZWZhdWx0X3NldHRpbmdzICk7XHJcblx0XHRsb2FkX2NhbGVuZGFyX3ByZXZpZXcoKTtcclxuXHRcdHNob3dfbWVzc2FnZSggKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5yZXNldF9hcHBsaWVkICkgfHwgJ0RlZmF1bHQgYXZhaWxhYmlsaXR5IHNldHRpbmdzIGFyZSByZWFkeSBmb3IgcHJldmlldy4gQ2xpY2sgU2F2ZSBDaGFuZ2VzIHRvIGFwcGx5IHRoZW0uJywgJ3N1Y2Nlc3MnLCA0MDAwICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBvYnNlcnZlX2NhbGVuZGFyX2NoYW5nZXMoKSB7XHJcblx0XHR2YXIgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYWctY2FsZW5kYXItcGFuZWw9XCIxXCJdJyApO1xyXG5cclxuXHRcdGlmICggISB0YXJnZXQgfHwgISB3Lk11dGF0aW9uT2JzZXJ2ZXIgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIG9ic2VydmVyICkge1xyXG5cdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0b2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlciggc2NoZWR1bGVfcHJldmlld19yZWZyZXNoICk7XHJcblx0XHRvYnNlcnZlci5vYnNlcnZlKCB0YXJnZXQsIHtcclxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxyXG5cdFx0XHRzdWJ0cmVlOiB0cnVlXHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLndwYmNfYWdfcmlnaHRiYXJfdGFicyBbcm9sZT1cInRhYlwiXScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdHN3aXRjaF9wYW5lbCggJCggdGhpcyApICk7XHJcblx0fSApO1xyXG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLndwYmNfYWdfcmlnaHRiYXJfcGFuZWxzIC5ncm91cF9faGVhZGVyJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0dG9nZ2xlX2dyb3VwKCAkKCB0aGlzICkgKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdzdWJtaXQnLCAnW2RhdGEtd3BiYy1hZy1wcmV2aWV3LXRvb2xiYXI9XCIxXCJdJywgZnVuY3Rpb24gKCBldmVudCApIHtcclxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRsb2FkX2NhbGVuZGFyX3ByZXZpZXcoKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnI3dwYmNfYWdfcmVzb3VyY2VfaWQsICN3cGJjX2FnX21vbnRoc19jb3VudCcsIGxvYWRfY2FsZW5kYXJfcHJldmlldyApO1xyXG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnaW5wdXQgY2hhbmdlJywgJ1tkYXRhLXdwYmMtYWctcmFuZ2UtZm9yXScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdHN5bmNfc2VsZWN0X2Zyb21fcmFuZ2UoIHRoaXMgKTtcclxuXHRcdHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCgpO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdbZGF0YS13cGJjLWFnLXNldHRpbmdzLWZvcm09XCIxXCJdIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcclxuXHRcdHN5bmNfcmFuZ2VfZnJvbV9zZWxlY3QoIHRoaXMgKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICdbZGF0YS13cGJjLWFnLXN0ZXBwZXJdJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0c3RlcF9zZWxlY3RfdmFsdWUoIHRoaXMgKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnaW5wdXRbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0XCJdJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0cmVmcmVzaF9idWZmZXJfZmllbGRzKCk7XHJcblx0XHRzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnW2RhdGEtd3BiYy1hZy1zZXR0aW5ncy1mb3JtPVwiMVwiXSBpbnB1dCwgW2RhdGEtd3BiYy1hZy1zZXR0aW5ncy1mb3JtPVwiMVwiXSBzZWxlY3QnLCBzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2ggKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ3N1Ym1pdCcsICdbZGF0YS13cGJjLWFnLXNldHRpbmdzLWZvcm09XCIxXCJdJywgZnVuY3Rpb24gKCBldmVudCApIHtcclxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRzYXZlX3NldHRpbmdzKCAkKCAnW2RhdGEtd3BiYy1hZy1zYXZlPVwiMVwiXScgKS5maXJzdCgpICk7XHJcblx0fSApO1xyXG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnW2RhdGEtd3BiYy1hZy1zYXZlPVwiMVwiXScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdHNhdmVfc2V0dGluZ3MoIHRoaXMgKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICdbZGF0YS13cGJjLWFnLXJlc2V0PVwiMVwiXScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdHJlc2V0X3NldHRpbmdzKCB0aGlzICk7XHJcblx0fSApO1xyXG5cclxuXHQkKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZWZyZXNoX2J1ZmZlcl9maWVsZHMoKTtcclxuXHRcdHN5bmNfYWxsX3JhbmdlcygpO1xyXG5cdFx0b2JzZXJ2ZV9jYWxlbmRhcl9jaGFuZ2VzKCk7XHJcblx0XHRzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goKTtcclxuXHRcdHNldFRpbWVvdXQoIHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCwgNjAwICk7XHJcblx0fSApO1xyXG59KCBqUXVlcnksIHdpbmRvdyApICk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDRSxXQUFXQSxDQUFDLEVBQUVDLENBQUMsRUFBRztFQUNuQixZQUFZOztFQUVaLElBQUlDLEdBQUcsR0FBR0QsQ0FBQyxDQUFDRSw4QkFBOEIsSUFBSSxDQUFDLENBQUM7RUFDaEQsSUFBSUMsYUFBYSxHQUFHLENBQUM7RUFDckIsSUFBSUMsYUFBYSxHQUFHLENBQUM7RUFDckIsSUFBSUMsWUFBWSxHQUFHLElBQUk7RUFDdkIsSUFBSUMsUUFBUSxHQUFHLElBQUk7RUFDbkIsSUFBSUMsMkJBQTJCLEdBQUcsK1FBQStRO0VBRWpULFNBQVNDLFNBQVNBLENBQUVDLEtBQUssRUFBRztJQUMzQixPQUFPQyxNQUFNLENBQUVELEtBQUssSUFBSSxFQUFHLENBQUMsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7RUFDcEM7RUFFQSxTQUFTQyxZQUFZQSxDQUFFQyxJQUFJLEVBQUc7SUFDN0IsSUFBSUMsUUFBUSxHQUFHRCxJQUFJLENBQUNFLElBQUksQ0FBRSxlQUFnQixDQUFDO0lBQzNDLElBQUlDLEtBQUssR0FBR0gsSUFBSSxDQUFDSSxPQUFPLENBQUUsd0JBQXlCLENBQUMsQ0FBQ0MsSUFBSSxDQUFFLGNBQWUsQ0FBQztJQUMzRSxJQUFJQyxPQUFPLEdBQUdwQixDQUFDLENBQUUsNENBQTZDLENBQUM7SUFFL0RpQixLQUFLLENBQUNELElBQUksQ0FBRSxlQUFlLEVBQUUsT0FBUSxDQUFDO0lBQ3RDRixJQUFJLENBQUNFLElBQUksQ0FBRSxlQUFlLEVBQUUsTUFBTyxDQUFDO0lBRXBDSSxPQUFPLENB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 | |
| 1099 | +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1hdmFpbGFiaWxpdHktZ2VuZXJhbC9fb3V0L2F2YWlsYWJpbGl0eV9nZW5lcmFsX3BhZ2UuanMiLCJuYW1lcyI6WyIkIiwidyIsImNmZyIsIndwYmNfYXZhaWxhYmlsaXR5X2dlbmVyYWxfcGFnZSIsInByZXZpZXdfdGltZXIiLCJwcmV2aWV3X2ZyYW1lIiwicHJldmlld19hamF4Iiwib2JzZXJ2ZXIiLCJwcmV2aWV3X3VuYXZhaWxhYmxlX2NsYXNzZXMiLCJ0cmltX3RleHQiLCJ2YWx1ZSIsIlN0cmluZyIsInRyaW0iLCJzd2l0Y2hfcGFuZWwiLCIkdGFiIiwicGFuZWxfaWQiLCJhdHRyIiwiJHRhYnMiLCJjbG9zZXN0IiwiZmluZCIsIiRwYW5lbHMiLCJyZW1vdmVBdHRyIiwidG9nZ2xlX2dyb3VwIiwiJGJ1dHRvbiIsIiRncm91cCIsIiRmaWVsZHMiLCJpc19vcGVuIiwiaGFzQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInByb3AiLCJjbG9zZV9ncm91cCIsInJlbW92ZUNsYXNzIiwib3Blbl9ncm91cCIsImdyb3VwX25hbWUiLCJpc19leGNsdXNpdmUiLCJsZW5ndGgiLCJzaWJsaW5ncyIsImVhY2giLCJhZGRDbGFzcyIsInNjcm9sbF90b19ncm91cCIsIiRzY3JvbGxfcGFyZW50Iiwic2Nyb2xsX3BhcmVudF9lbCIsImdyb3VwX2VsIiwic2Nyb2xsX3RvcCIsInBhcmVudF9yZWN0IiwiZ3JvdXBfcmVjdCIsInBhcmVudHMiLCIkY2FuZGlkYXRlIiwib3ZlcmZsb3dfeSIsImNzcyIsInRlc3QiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJmaXJzdCIsImdldCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb3AiLCJ0b3AiLCJzdG9wIiwiYW5pbWF0ZSIsIk1hdGgiLCJtYXgiLCJhcHBseV9vcGVuX3NlY3Rpb25fZnJvbV91cmwiLCJzZWN0aW9uX2dyb3VwcyIsIndlZWtkYXlzIiwiZnJvbV90b2RheSIsImJ1ZmZlciIsIndvcmtpbmdfdGltZSIsIm9wZW5fc2VjdGlvbiIsImluZGV4IiwiZGVsYXkiLCJzZXRUaW1lb3V0IiwicmVmcmVzaF9idWZmZXJfZmllbGRzIiwidmFsIiwiJHBhbmVsIiwiZGF0YSIsImlzX2J1ZmZlcl9hdmFpbGFibGUiLCJpc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlIiwic3luY19yYW5nZV9mcm9tX3NlbGVjdCIsInNlbGVjdCIsIiRzZWxlY3QiLCJuYW1lIiwic2VsZWN0ZWRfaW5kZXgiLCJzZWxlY3RlZF90ZXh0IiwidGV4dCIsIiRyYW5nZSIsIiR2YWx1ZSIsInN5bmNfc2VsZWN0X2Zyb21fcmFuZ2UiLCJyYW5nZSIsInBhcnNlSW50Iiwic3luY19hbGxfcmFuZ2VzIiwic3RlcF9zZWxlY3RfdmFsdWUiLCJidXR0b24iLCJzdGVwIiwiY3VycmVudF9pbmRleCIsIm5leHRfaW5kZXgiLCJtaW4iLCJ0cmlnZ2VyIiwiZ2V0X2Zvcm0iLCJjb2xsZWN0X3NldHRpbmdzIiwiJGZvcm0iLCJwdXNoIiwiYm9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5IiwiYm9va2luZ19hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheSIsImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0IiwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9taW51dGVzX2luIiwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9taW51dGVzX291dCIsImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19pbiIsImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19vdXQiLCJnZXRfd29ya2luZ190aW1lX3NldHRpbmdzX2Zyb21fZm9ybSIsInNldF9zZWxlY3RfdmFsdWUiLCIkZmllbGQiLCJhcHBseV9zZXR0aW5nc190b19mb3JtIiwic2V0dGluZ3MiLCJkYXlfbnVtIiwiYXBwbHlfd29ya2luZ190aW1lX3NldHRpbmdzX3RvX2Zvcm0iLCJzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2giLCJkYXRlX2Zyb21fc3FsIiwic3FsX2RhdGUiLCJwYXJ0cyIsInNwbGl0IiwiRGF0ZSIsImdldF90b2RheV9kYXRlIiwiYXJyIiwiX3dwYmMiLCJnZXRfb3RoZXJfcGFyYW0iLCJub3ciLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldF9yZWFsX3RvZGF5X2RhdGUiLCJkYXlzX2JldHdlZW4iLCJkYXRlX2EiLCJkYXRlX2IiLCJmbG9vciIsImdldFRpbWUiLCJhZGRfZGF5cyIsImRhdGUiLCJkYXlzIiwic2hpZnRlZF9kYXRlIiwic2V0RGF0ZSIsImRhdGVfdG9fc3FsIiwibW9udGgiLCJkYXkiLCJnZXRfc3FsX2RhdGVfZnJvbV9jZWxsIiwiY2VsbCIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJpIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJ1bmF2YWlsYWJsZV9mcm9tX3RvZGF5X2FwcGxpZXMiLCJjZWxsX2RhdGUiLCJ0b2RheV9kYXRlIiwibWludXRlcyIsInVuYXZhaWxhYmxlX3VudGlsIiwiZ2V0X29wdGlvbl90ZXh0Iiwic2VsZWN0b3IiLCJnZXRfZGF5c192YWx1ZSIsInRpbWVfdG9fc2Vjb25kcyIsInRpbWUiLCJob3VycyIsIm1pbnMiLCJzZWNvbmRzX3RvX3RpbWUiLCJzZWNvbmRzIiwiZ2V0X21heF93b3JraW5nX3RpbWVfaW50ZXJ2YWxzIiwiJHdlZWtkYXlzIiwiY29uZmlndXJlZF9saW1pdCIsImxvY2FsaXplZF9saW1pdCIsIm1heF93b3JraW5nX3RpbWVfaW50ZXJ2YWxzIiwiY29sbGVjdF93b3JraW5nX3RpbWVfZGF5X2ludGVydmFscyIsIiRkYXlfcm93IiwiaW50ZXJ2YWxzIiwiJGludGVydmFsIiwic3RhcnRfc2Vjb25kIiwiZW5kX3NlY29uZCIsInJlaW5kZXhfd29ya2luZ190aW1lX2RheSIsInByZWZpeCIsImludGVydmFsX2luZGV4Iiwic3RhcnRfaWQiLCJlbmRfaWQiLCIkbGFiZWxzIiwiZXEiLCJyZWZyZXNoX3dvcmtpbmdfdGltZV9kYXkiLCIkdG9nZ2xlIiwiJHJlc291cmNlX2N1c3RvbSIsImlzX2Jsb2NrX2Rpc2FibGVkIiwiaXNfZGF5X2VuYWJsZWQiLCJpbnRlcnZhbF9jb3VudCIsIm1heF9pbnRlcnZhbHMiLCJmaW5kX3dvcmtpbmdfdGltZV9pbnRlcnZhbF9wcm9wb3NhbCIsInNvcnRlZF9pbnRlcnZhbHMiLCJzbGljZSIsInNvcnQiLCJmaXJzdF9pbnRlcnZhbCIsInNlY29uZF9pbnRlcnZhbCIsInByZWZlcnJlZF9zdGFydCIsImNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVfc3RhcnQiLCJzb21lIiwicHJvcG9zZWRfc3RhcnQiLCJwcm9wb3NlZF9lbmQiLCJvdmVybGFwcyIsImludGVydmFsIiwiYXBwZW5kX3dvcmtpbmdfdGltZV9pbnRlcnZhbCIsIiRjb250YWluZXIiLCIkcHJvdG90eXBlIiwiY2xvbmUiLCJhcHBlbmQiLCJhZGRfd29ya2luZ190aW1lX2ludGVydmFsIiwicHJvcG9zYWwiLCJzaG93X21lc3NhZ2UiLCJpMThuIiwiaW50ZXJ2YWxfbGltaXQiLCJyZW1vdmVfd29ya2luZ190aW1lX2ludGVydmFsIiwiJGludGVydmFscyIsIiRmb2N1c190YXJnZXQiLCJyZW1vdmUiLCJjb2xsZWN0X3dvcmtpbmdfdGltZV93ZWVrZGF5cyIsIiRyb3ciLCJzZXRfd29ya2luZ190aW1lX3dlZWtkYXlzIiwiJHdyYXAiLCJpc0FycmF5IiwiZGlzcGxheV9pbnRlcnZhbHMiLCJlbXB0eSIsImZvckVhY2giLCJyZWZyZXNoX3dvcmtpbmdfdGltZV9wYW5lbHMiLCJpc19lbmFibGVkIiwibW9kZSIsInJlc291cmNlSWQiLCJ3b3JraW5nVGltZSIsImV4dGVuZCIsImRlZmF1bHRfc2V0dGluZ3MiLCJkZWZhdWx0IiwicmVzb3VyY2VzIiwiZW5hYmxlZCIsInJlc291cmNlU2V0dGluZ3MiLCJhcHBlbmRfd29ya2luZ190aW1lX3BheWxvYWQiLCJwYXlsb2FkIiwiZGVmYXVsdERheXMiLCJyZXNvdXJjZURheXMiLCJkZWZhdWx0U3RhcnQiLCJkZWZhdWx0RW5kIiwicmVzb3VyY2VTdGFydCIsInJlc291cmNlRW5kIiwiYm9va2luZ193b3JraW5nX3RpbWVfZW5hYmxlZCIsImJvb2tpbmdfd29ya2luZ190aW1lX3Jlc291cmNlX2lkIiwiYm9va2luZ193b3JraW5nX3RpbWVfcmVzb3VyY2VfbW9kZSIsImJvb2tpbmdfd29ya2luZ190aW1lX2RlZmF1bHRfZGF5cyIsImJvb2tpbmdfd29ya2luZ190aW1lX2RlZmF1bHRfc3RhcnQiLCJib29raW5nX3dvcmtpbmdfdGltZV9kZWZhdWx0X2VuZCIsImJvb2tpbmdfd29ya2luZ190aW1lX3Jlc291cmNlX2RheXMiLCJib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9zdGFydCIsImJvb2tpbmdfd29ya2luZ190aW1lX3Jlc291cmNlX2VuZCIsInVwZGF0ZV93cGJjX3ByZXZpZXdfcGFyYW1zIiwic2V0X290aGVyX3BhcmFtIiwiY29uY2F0IiwidXBkYXRlX2J1ZmZlcl9wcmV2aWV3X25vdGUiLCIkbm90ZXMiLCIkY2FsZW5kYXIiLCIkbm90ZSIsInR5cGUiLCJiZWZvcmVfdGV4dCIsImFmdGVyX3RleHQiLCJtZXNzYWdlIiwiYnVmZmVyX3ByZXZpZXciLCJiZWZvcmVfYm9va2luZyIsImFmdGVyX2Jvb2tpbmciLCJodG1sIiwibm9fYnVmZmVyIiwiYXBwbHlfYnVmZmVyX2RheXNfcHJldmlldyIsImJlZm9yZV9kYXlzIiwiYWZ0ZXJfZGF5cyIsImRhdGVfY2VsbHMiLCJib29rZWRfZGF0ZXMiLCIkY2VsbCIsImJvb2tlZF9kYXRlIiwib2Zmc2V0IiwidGFyZ2V0X3NxbF9kYXRlIiwiJHRhcmdldF9jZWxsIiwicmVtZW1iZXJfcHJldmlld19vcmlnaW4iLCJjbGVhcl9wcmV2aWV3X2NlbGwiLCJoYWRfZGF0ZV91c2VyX3VuYXZhaWxhYmxlIiwiYXBwbHlfY2FsZW5kYXJfcHJldmlldyIsImF2YWlsYWJsZV9saW1pdCIsIm1ha2VfdW5hdmFpbGFibGUiLCJyZWFzb25fY2xhc3MiLCJwcmV2aW91c19yZWFzb24iLCJoYWRfZ2VuZXJhbF9wcmV2aWV3IiwiZ2V0RGF5IiwicXVldWVfcHJldmlld19yZWZyZXNoIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2xlYXJUaW1lb3V0IiwidXBkYXRlX2hpbnRzIiwiaGludHMiLCJib29raW5nX3VuYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlfX2hpbnQiLCJib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5X19oaW50IiwiZHVyYXRpb24iLCJ3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSIsImFsZXJ0Iiwic2V0X2J1c3kiLCJidXN5IiwiYnVzeV90ZXh0Iiwic2F2aW5nIiwicmVwbGFjZV9jYWxlbmRhcl9wYW5lbCIsIiRob2xkZXIiLCJwYXJzZUhUTUwiLCJkb2N1bWVudCIsIiRuZXdfcGFuZWwiLCIkb2xkX3BhbmVsIiwiJHNjcmlwdHMiLCJyZXBsYWNlV2l0aCIsImNvZGUiLCJ0ZXh0Q29udGVudCIsImlubmVySFRNTCIsInNyYyIsImFqYXgiLCJ1cmwiLCJkYXRhVHlwZSIsImNhY2hlIiwiZ2xvYmFsRXZhbCIsInNldF9jYWxlbmRhcl9sb2FkaW5nIiwiaXNfbG9hZGluZyIsImxvYWRpbmdfdGV4dCIsImxvYWRpbmciLCIkbG9hZGluZyIsImxhc3QiLCJnZXRfcHJldmlld19wYXlsb2FkIiwiYWN0aW9uIiwicHJldmlld19hY3Rpb24iLCJub25jZSIsInJlc291cmNlX2lkIiwibW9udGhzX2NvdW50IiwibG9hZF9jYWxlbmRhcl9wcmV2aWV3IiwiY3VycmVudF9wcmV2aWV3X2FqYXgiLCJhamF4X3VybCIsInByZXZpZXdfZmFpbGVkIiwicmVhZHlTdGF0ZSIsImFib3J0IiwibWV0aG9kIiwiZG9uZSIsInJlc3BvbnNlIiwic3VjY2VzcyIsIm9ic2VydmVfY2FsZW5kYXJfY2hhbmdlcyIsImZhaWwiLCJqcV94aHIiLCJ0ZXh0X3N0YXR1cyIsImFsd2F5cyIsInNhdmVfc2V0dGluZ3MiLCJib29raW5nX3VuYXZhaWxhYmxlX2RheXMiLCJzYXZlX2ZhaWxlZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsInNhdmVkIiwicmVzcG9uc2VfbWVzc2FnZSIsInJlc3BvbnNlSlNPTiIsInJlc2V0X3NldHRpbmdzIiwiY29uZmlybV9tZXNzYWdlIiwicmVzZXRfY29uZmlybSIsImNvbmZpcm0iLCJyZXNldF9hcHBsaWVkIiwidGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJkaXNjb25uZWN0Iiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJvbiIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJyZWFkeSIsImpRdWVyeSIsIndpbmRvdyJdLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYXZhaWxhYmlsaXR5LWdlbmVyYWwvX3NyYy9hdmFpbGFiaWxpdHlfZ2VuZXJhbF9wYWdlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBHZW5lcmFsIEF2YWlsYWJpbGl0eSBVSS5cclxuICovXHJcbiggZnVuY3Rpb24gKCAkLCB3ICkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0dmFyIGNmZyA9IHcud3BiY19hdmFpbGFiaWxpdHlfZ2VuZXJhbF9wYWdlIHx8IHt9O1xyXG5cdHZhciBwcmV2aWV3X3RpbWVyID0gMDtcclxuXHR2YXIgcHJldmlld19mcmFtZSA9IDA7XHJcblx0dmFyIHByZXZpZXdfYWpheCA9IG51bGw7XHJcblx0dmFyIG9ic2VydmVyID0gbnVsbDtcclxuXHR2YXIgcHJldmlld191bmF2YWlsYWJsZV9jbGFzc2VzID0gJ3dwYmNfYWdfcHJldmlld191bmF2YWlsYWJsZSB3cGJjX2FnX3ByZXZpZXdfd2Vla2RheV91bmF2YWlsYWJsZSB3cGJjX2FnX3ByZXZpZXdfZnJvbV90b2RheV91bmF2YWlsYWJsZSB3cGJjX2FnX3ByZXZpZXdfbGltaXRfYXZhaWxhYmxlX2Zyb21fdG9kYXkgd3BiY19hZ19wcmV2aWV3X2J1ZmZlcl91bmF2YWlsYWJsZSB3ZWVrZGF5X3VuYXZhaWxhYmxlIGZyb21fdG9kYXlfdW5hdmFpbGFibGUgbGltaXRfYXZhaWxhYmxlX2Zyb21fdG9kYXkgYnVmZmVyX3VuYXZhaWxhYmxlJztcclxuXHJcblx0ZnVuY3Rpb24gdHJpbV90ZXh0KCB2YWx1ZSApIHtcclxuXHRcdHJldHVybiBTdHJpbmcoIHZhbHVlIHx8ICcnICkudHJpbSgpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc3dpdGNoX3BhbmVsKCAkdGFiICkge1xyXG5cdFx0dmFyIHBhbmVsX2lkID0gJHRhYi5hdHRyKCAnYXJpYS1jb250cm9scycgKTtcclxuXHRcdHZhciAkdGFicyA9ICR0YWIuY2xvc2VzdCggJy53cGJjX2FnX3JpZ2h0YmFyX3RhYnMnICkuZmluZCggJ1tyb2xlPVwidGFiXCJdJyApO1xyXG5cdFx0dmFyICRwYW5lbHMgPSAkKCAnLndwYmNfYWdfcmlnaHRiYXJfcGFuZWxzIFtyb2xlPVwidGFicGFuZWxcIl0nICk7XHJcblxyXG5cdFx0JHRhYnMuYXR0ciggJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnICk7XHJcblx0XHQkdGFiLmF0dHIoICdhcmlhLXNlbGVjdGVkJywgJ3RydWUnICk7XHJcblxyXG5cdFx0JHBhbmVscy5hdHRyKCAnaGlkZGVuJywgJ2hpZGRlbicgKS5hdHRyKCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScgKTtcclxuXHRcdCQoICcjJyArIHBhbmVsX2lkICkucmVtb3ZlQXR0ciggJ2hpZGRlbicgKS5hdHRyKCAnYXJpYS1oaWRkZW4nLCAnZmFsc2UnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB0b2dnbGVfZ3JvdXAoICRidXR0b24gKSB7XHJcblx0XHR2YXIgJGdyb3VwID0gJGJ1dHRvbi5jbG9zZXN0KCAnLndwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyApO1xyXG5cdFx0dmFyICRmaWVsZHMgPSAkZ3JvdXAuZmluZCggJz4gLmdyb3VwX19maWVsZHMnICk7XHJcblx0XHR2YXIgaXNfb3BlbiA9ICRncm91cC5oYXNDbGFzcyggJ2lzLW9wZW4nICk7XHJcblxyXG5cdFx0JGdyb3VwLnRvZ2dsZUNsYXNzKCAnaXMtb3BlbicsICEgaXNfb3BlbiApO1xyXG5cdFx0JGJ1dHRvbi5hdHRyKCAnYXJpYS1leHBhbmRlZCcsIGlzX29wZW4gPyAnZmFsc2UnIDogJ3RydWUnICk7XHJcblx0XHQkZmllbGRzLnByb3AoICdoaWRkZW4nLCBpc19vcGVuICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgaXNfb3BlbiA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNsb3NlX2dyb3VwKCAkZ3JvdXAgKSB7XHJcblx0XHR2YXIgJGJ1dHRvbiA9ICRncm91cC5maW5kKCAnPiAuZ3JvdXBfX2hlYWRlcicgKTtcclxuXHRcdHZhciAkZmllbGRzID0gJGdyb3VwLmZpbmQoICc+IC5ncm91cF9fZmllbGRzJyApO1xyXG5cclxuXHRcdCRncm91cC5yZW1vdmVDbGFzcyggJ2lzLW9wZW4nICk7XHJcblx0XHQkYnV0dG9uLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyApO1xyXG5cdFx0JGZpZWxkcy5wcm9wKCAnaGlkZGVuJywgdHJ1ZSApLmF0dHIoICdhcmlhLWhpZGRlbicsICd0cnVlJyApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gb3Blbl9ncm91cCggZ3JvdXBfbmFtZSwgaXNfZXhjbHVzaXZlICkge1xyXG5cdFx0dmFyICRncm91cCA9ICQoICcud3BiY191aV9fY29sbGFwc2libGVfZ3JvdXBbZGF0YS1ncm91cD1cIicgKyBncm91cF9uYW1lICsgJ1wiXScgKTtcclxuXHRcdHZhciAkYnV0dG9uID0gJGdyb3VwLmZpbmQoICc+IC5ncm91cF9faGVhZGVyJyApO1xyXG5cdFx0dmFyICRmaWVsZHMgPSAkZ3JvdXAuZmluZCggJz4gLmdyb3VwX19maWVsZHMnICk7XHJcblxyXG5cdFx0aWYgKCAhICRncm91cC5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGlzX2V4Y2x1c2l2ZSApIHtcclxuXHRcdFx0JGdyb3VwLnNpYmxpbmdzKCAnLndwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRjbG9zZV9ncm91cCggJCggdGhpcyApICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQkZ3JvdXAuYWRkQ2xhc3MoICdpcy1vcGVuJyApO1xyXG5cdFx0JGJ1dHRvbi5hdHRyKCAnYXJpYS1leHBhbmRlZCcsICd0cnVlJyApO1xyXG5cdFx0JGZpZWxkcy5wcm9wKCAnaGlkZGVuJywgZmFsc2UgKS5hdHRyKCAnYXJpYS1oaWRkZW4nLCAnZmFsc2UnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzY3JvbGxfdG9fZ3JvdXAoIGdyb3VwX25hbWUgKSB7XHJcblx0XHR2YXIgJGdyb3VwID0gJCggJy53cGJjX3VpX19jb2xsYXBzaWJsZV9ncm91cFtkYXRhLWdyb3VwPVwiJyArIGdyb3VwX25hbWUgKyAnXCJdJyApO1xyXG5cdFx0dmFyICRzY3JvbGxfcGFyZW50ID0gJCgpO1xyXG5cdFx0dmFyIHNjcm9sbF9wYXJlbnRfZWw7XHJcblx0XHR2YXIgZ3JvdXBfZWw7XHJcblx0XHR2YXIgc2Nyb2xsX3RvcDtcclxuXHRcdHZhciBwYXJlbnRfcmVjdDtcclxuXHRcdHZhciBncm91cF9yZWN0O1xyXG5cclxuXHRcdGlmICggISAkZ3JvdXAubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JGdyb3VwLnBhcmVudHMoKS5lYWNoKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciAkY2FuZGlkYXRlID0gJCggdGhpcyApO1xyXG5cdFx0XHR2YXIgb3ZlcmZsb3dfeSA9ICRjYW5kaWRhdGUuY3NzKCAnb3ZlcmZsb3cteScgKTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQkY2FuZGlkYXRlLmhhc0NsYXNzKCAnc2ltcGxlYmFyLWNvbnRlbnQtd3JhcHBlcicgKVxyXG5cdFx0XHRcdHx8IChcclxuXHRcdFx0XHRcdC8oYXV0b3xzY3JvbGwpLy50ZXN0KCBvdmVyZmxvd195IClcclxuXHRcdFx0XHRcdCYmIHRoaXMuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5jbGllbnRIZWlnaHRcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdCRzY3JvbGxfcGFyZW50ID0gJGNhbmRpZGF0ZTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHJcblx0XHRpZiAoICEgJHNjcm9sbF9wYXJlbnQubGVuZ3RoICkge1xyXG5cdFx0XHQkc2Nyb2xsX3BhcmVudCA9ICRncm91cC5jbG9zZXN0KCAnLndwYmNfdWlfZWxfX3ZlcnRfcmlnaHRfYmFyX19jb250ZW50JyApLmZpbmQoICcuc2ltcGxlYmFyLWNvbnRlbnQtd3JhcHBlcicgKS5maXJzdCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggISAkc2Nyb2xsX3BhcmVudC5sZW5ndGggKSB7XHJcblx0XHRcdCRncm91cC5nZXQoIDAgKS5zY3JvbGxJbnRvVmlldyggeyBibG9jazogJ25lYXJlc3QnIH0gKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNjcm9sbF9wYXJlbnRfZWwgPSAkc2Nyb2xsX3BhcmVudC5nZXQoIDAgKTtcclxuXHRcdGdyb3VwX2VsICAgICAgICAgPSAkZ3JvdXAuZ2V0KCAwICk7XHJcblx0XHRwYXJlbnRfcmVjdCAgICAgID0gc2Nyb2xsX3BhcmVudF9lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdGdyb3VwX3JlY3QgICAgICAgPSBncm91cF9lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdHNjcm9sbF90b3AgICAgICAgPSAkc2Nyb2xsX3BhcmVudC5zY3JvbGxUb3AoKSArIGdyb3VwX3JlY3QudG9wIC0gcGFyZW50X3JlY3QudG9wIC0gMTA7XHJcblxyXG5cdFx0JHNjcm9sbF9wYXJlbnQuc3RvcCgpLmFuaW1hdGUoIHsgc2Nyb2xsVG9wOiBNYXRoLm1heCggMCwgc2Nyb2xsX3RvcCApIH0sIDE4MCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlfb3Blbl9zZWN0aW9uX2Zyb21fdXJsKCkge1xyXG5cdFx0dmFyIHNlY3Rpb25fZ3JvdXBzID0ge1xyXG5cdFx0XHR3ZWVrZGF5czogJ2dlbmVyYWwtYXZhaWxhYmlsaXR5LXdlZWtkYXlzJyxcclxuXHRcdFx0ZnJvbV90b2RheTogJ2dlbmVyYWwtYXZhaWxhYmlsaXR5LWZyb20tdG9kYXknLFxyXG5cdFx0XHRidWZmZXI6ICdnZW5lcmFsLWF2YWlsYWJpbGl0eS1idWZmZXInLFxyXG5cdFx0XHR3b3JraW5nX3RpbWU6ICdnZW5lcmFsLWF2YWlsYWJpbGl0eS13b3JraW5nLXRpbWUnXHJcblx0XHR9O1xyXG5cdFx0dmFyIGdyb3VwX25hbWUgPSBzZWN0aW9uX2dyb3Vwc1sgY2ZnLm9wZW5fc2VjdGlvbiBdIHx8ICcnO1xyXG5cclxuXHRcdGlmICggJycgPT09IGdyb3VwX25hbWUgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRvcGVuX2dyb3VwKCBncm91cF9uYW1lLCB0cnVlICk7XHJcblx0XHQkLmVhY2goIFsgMTIwLCA2NTAgXSwgZnVuY3Rpb24gKCBpbmRleCwgZGVsYXkgKSB7XHJcblx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRzY3JvbGxfdG9fZ3JvdXAoIGdyb3VwX25hbWUgKTtcclxuXHRcdFx0fSwgZGVsYXkgKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJlZnJlc2hfYnVmZmVyX2ZpZWxkcygpIHtcclxuXHRcdHZhciB2YWx1ZSA9ICQoICdpbnB1dFtuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXRcIl06Y2hlY2tlZCcgKS52YWwoKSB8fCAnJztcclxuXHJcblx0XHQkKCAnLndwYmNfYWdfYnVmZmVyX2ZpZWxkcycgKS5lYWNoKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciAkcGFuZWwgPSAkKCB0aGlzICk7XHJcblx0XHRcdCRwYW5lbC50b2dnbGVDbGFzcyggJ2lzLXZpc2libGUnLCAkcGFuZWwuZGF0YSggJ2J1ZmZlci1wYW5lbCcgKSA9PT0gdmFsdWUgKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGlzX2J1ZmZlcl9hdmFpbGFibGUoKSB7XHJcblx0XHRyZXR1cm4gISAoIGNmZy5pc19idWZmZXJfYXZhaWxhYmxlID09PSBmYWxzZSB8fCBjZmcuaXNfYnVmZmVyX2F2YWlsYWJsZSA9PT0gJ2ZhbHNlJyB8fCBjZmcuaXNfYnVmZmVyX2F2YWlsYWJsZSA9PT0gMCB8fCBjZmcuaXNfYnVmZmVyX2F2YWlsYWJsZSA9PT0gJzAnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBpc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlKCkge1xyXG5cdFx0cmV0dXJuICEgKCBjZmcuaXNfYXZhaWxhYmxlX2xpbWl0X2F2YWlsYWJsZSA9PT0gZmFsc2UgfHwgY2ZnLmlzX2F2YWlsYWJsZV9saW1pdF9hdmFpbGFibGUgPT09ICdmYWxzZScgfHwgY2ZnLmlzX2F2YWlsYWJsZV9saW1pdF9hdmFpbGFibGUgPT09IDAgfHwgY2ZnLmlzX2F2YWlsYWJsZV9saW1pdF9hdmFpbGFibGUgPT09ICcwJyApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc3luY19yYW5nZV9mcm9tX3NlbGVjdCggc2VsZWN0ICkge1xyXG5cdFx0dmFyICRzZWxlY3QgPSAkKCBzZWxlY3QgKTtcclxuXHRcdHZhciBuYW1lID0gJHNlbGVjdC5hdHRyKCAnbmFtZScgKTtcclxuXHRcdHZhciBzZWxlY3RlZF9pbmRleCA9ICRzZWxlY3QucHJvcCggJ3NlbGVjdGVkSW5kZXgnICk7XHJcblx0XHR2YXIgc2VsZWN0ZWRfdGV4dCA9IHRyaW1fdGV4dCggJHNlbGVjdC5maW5kKCAnb3B0aW9uOnNlbGVjdGVkJyApLnRleHQoKSApO1xyXG5cdFx0dmFyICRyYW5nZSA9ICQoICdbZGF0YS13cGJjLWFnLXJhbmdlLWZvcj1cIicgKyBuYW1lICsgJ1wiXScgKTtcclxuXHRcdHZhciAkdmFsdWUgPSAkKCAnW2RhdGEtd3BiYy1hZy1yYW5nZS12YWx1ZS1mb3I9XCInICsgbmFtZSArICdcIl0nICk7XHJcblxyXG5cdFx0aWYgKCAhICRyYW5nZS5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQkcmFuZ2UudmFsKCBzZWxlY3RlZF9pbmRleCA8IDAgPyAwIDogc2VsZWN0ZWRfaW5kZXggKTtcclxuXHRcdCR2YWx1ZS50ZXh0KCBzZWxlY3RlZF90ZXh0ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzeW5jX3NlbGVjdF9mcm9tX3JhbmdlKCByYW5nZSApIHtcclxuXHRcdHZhciAkcmFuZ2UgPSAkKCByYW5nZSApO1xyXG5cdFx0dmFyIG5hbWUgPSAkcmFuZ2UuYXR0ciggJ2RhdGEtd3BiYy1hZy1yYW5nZS1mb3InICk7XHJcblx0XHR2YXIgJHNlbGVjdCA9ICQoICdbbmFtZT1cIicgKyBuYW1lICsgJ1wiXScgKTtcclxuXHRcdHZhciBpbmRleCA9IHBhcnNlSW50KCAkcmFuZ2UudmFsKCksIDEwICkgfHwgMDtcclxuXHJcblx0XHRpZiAoICEgJHNlbGVjdC5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQkc2VsZWN0LnByb3AoICdzZWxlY3RlZEluZGV4JywgaW5kZXggKTtcclxuXHRcdHN5bmNfcmFuZ2VfZnJvbV9zZWxlY3QoICRzZWxlY3QgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHN5bmNfYWxsX3JhbmdlcygpIHtcclxuXHRcdCQoICdbZGF0YS13cGJjLWFnLXJhbmdlLWZvcl0nICkuZWFjaCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgbmFtZSA9ICQoIHRoaXMgKS5hdHRyKCAnZGF0YS13cGJjLWFnLXJhbmdlLWZvcicgKTtcclxuXHRcdFx0c3luY19yYW5nZV9mcm9tX3NlbGVjdCggJCggJ1tuYW1lPVwiJyArIG5hbWUgKyAnXCJdJyApLmZpcnN0KCkgKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHN0ZXBfc2VsZWN0X3ZhbHVlKCBidXR0b24gKSB7XHJcblx0XHR2YXIgJGJ1dHRvbiA9ICQoIGJ1dHRvbiApO1xyXG5cdFx0dmFyIG5hbWUgPSAkYnV0dG9uLmF0dHIoICdkYXRhLXdwYmMtYWctc3RlcHBlcicgKTtcclxuXHRcdHZhciBzdGVwID0gcGFyc2VJbnQoICRidXR0b24uYXR0ciggJ2RhdGEtc3RlcCcgKSwgMTAgKSB8fCAwO1xyXG5cdFx0dmFyICRzZWxlY3QgPSAkKCAnW25hbWU9XCInICsgbmFtZSArICdcIl0nICkuZmlyc3QoKTtcclxuXHRcdHZhciBjdXJyZW50X2luZGV4O1xyXG5cdFx0dmFyIG5leHRfaW5kZXg7XHJcblxyXG5cdFx0aWYgKCAhICRzZWxlY3QubGVuZ3RoIHx8ICRzZWxlY3QucHJvcCggJ2Rpc2FibGVkJyApICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y3VycmVudF9pbmRleCA9ICRzZWxlY3QucHJvcCggJ3NlbGVjdGVkSW5kZXgnICk7XHJcblx0XHRuZXh0X2luZGV4ID0gTWF0aC5tYXgoIDAsIE1hdGgubWluKCAkc2VsZWN0LmZpbmQoICdvcHRpb24nICkubGVuZ3RoIC0gMSwgY3VycmVudF9pbmRleCArIHN0ZXAgKSApO1xyXG5cclxuXHRcdGlmICggbmV4dF9pbmRleCA9PT0gY3VycmVudF9pbmRleCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRzZWxlY3QucHJvcCggJ3NlbGVjdGVkSW5kZXgnLCBuZXh0X2luZGV4ICkudHJpZ2dlciggJ2NoYW5nZScgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9mb3JtKCkge1xyXG5cdFx0cmV0dXJuICQoICdbZGF0YS13cGJjLWFnLXNldHRpbmdzLWZvcm09XCIxXCJdJyApLmZpcnN0KCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb2xsZWN0X3NldHRpbmdzKCkge1xyXG5cdFx0dmFyICRmb3JtID0gZ2V0X2Zvcm0oKTtcclxuXHRcdHZhciB3ZWVrZGF5cyA9IFtdO1xyXG5cclxuXHRcdCRmb3JtLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9kYXlzW11cIl06Y2hlY2tlZCcgKS5lYWNoKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHdlZWtkYXlzLnB1c2goIHBhcnNlSW50KCB0aGlzLnZhbHVlLCAxMCApICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0d2Vla2RheXM6IHdlZWtkYXlzLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXk6ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheVwiXScgKS52YWwoKSB8fCAnMCcsXHJcblx0XHRcdGJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXk6ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlcIl0nICkudmFsKCkgfHwgJycsXHJcblx0XHRcdGJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0OiAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2luX291dFwiXTpjaGVja2VkJyApLnZhbCgpIHx8ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfaW46ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19pblwiXScgKS52YWwoKSB8fCAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9leHRyYV9taW51dGVzX291dDogJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9taW51dGVzX291dFwiXScgKS52YWwoKSB8fCAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX2luOiAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfaW5cIl0nICkudmFsKCkgfHwgJycsXHJcblx0XHRcdGJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19vdXQ6ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19vdXRcIl0nICkudmFsKCkgfHwgJycsXHJcblx0XHRcdHdvcmtpbmdfdGltZTogZ2V0X3dvcmtpbmdfdGltZV9zZXR0aW5nc19mcm9tX2Zvcm0oKVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldF9zZWxlY3RfdmFsdWUoIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0dmFyICRmaWVsZCA9IGdldF9mb3JtKCkuZmluZCggJ1tuYW1lPVwiJyArIG5hbWUgKyAnXCJdJyApLmZpcnN0KCk7XHJcblxyXG5cdFx0aWYgKCAhICRmaWVsZC5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQkZmllbGQudmFsKCB2YWx1ZSApO1xyXG5cdFx0aWYgKCBTdHJpbmcoICRmaWVsZC52YWwoKSApICE9PSBTdHJpbmcoIHZhbHVlICkgKSB7XHJcblx0XHRcdCRmaWVsZC5wcm9wKCAnc2VsZWN0ZWRJbmRleCcsIDAgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFwcGx5X3NldHRpbmdzX3RvX2Zvcm0oIHNldHRpbmdzICkge1xyXG5cdFx0dmFyICRmb3JtID0gZ2V0X2Zvcm0oKTtcclxuXHRcdHZhciB3ZWVrZGF5cyA9IHNldHRpbmdzICYmIHNldHRpbmdzLndlZWtkYXlzID8gc2V0dGluZ3Mud2Vla2RheXMgOiBbXTtcclxuXHJcblx0XHRpZiAoICEgJGZvcm0ubGVuZ3RoIHx8ICEgc2V0dGluZ3MgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQkZm9ybS5maW5kKCAnaW5wdXRbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c1tdXCJdJyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcclxuXHRcdCQuZWFjaCggd2Vla2RheXMsIGZ1bmN0aW9uICggaW5kZXgsIGRheV9udW0gKSB7XHJcblx0XHRcdCRmb3JtLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9kYXlzW11cIl1bdmFsdWU9XCInICsgcGFyc2VJbnQoIGRheV9udW0sIDEwICkgKyAnXCJdJyApLnByb3AoICdjaGVja2VkJywgdHJ1ZSApO1xyXG5cdFx0fSApO1xyXG5cclxuXHRcdHNldF9zZWxlY3RfdmFsdWUoICdib29raW5nX3VuYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXknLCBzZXR0aW5ncy5ib29raW5nX3VuYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXkgfHwgJzAnICk7XHJcblx0XHRzZXRfc2VsZWN0X3ZhbHVlKCAnYm9va2luZ19hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheScsIHNldHRpbmdzLmJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXkgfHwgJycgKTtcclxuXHRcdHNldF9zZWxlY3RfdmFsdWUoICdib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfaW4nLCBzZXR0aW5ncy5ib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfaW4gfHwgJycgKTtcclxuXHRcdHNldF9zZWxlY3RfdmFsdWUoICdib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfb3V0Jywgc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9taW51dGVzX291dCB8fCAnJyApO1xyXG5cdFx0c2V0X3NlbGVjdF92YWx1ZSggJ2Jvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19pbicsIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19pbiB8fCAnJyApO1xyXG5cdFx0c2V0X3NlbGVjdF92YWx1ZSggJ2Jvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19vdXQnLCBzZXR0aW5ncy5ib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfb3V0IHx8ICcnICk7XHJcblxyXG5cdFx0JGZvcm0uZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2luX291dFwiXScgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XHJcblx0XHQkZm9ybS5maW5kKCAnaW5wdXRbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0XCJdW3ZhbHVlPVwiJyArICggc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXQgfHwgJycgKSArICdcIl0nICkucHJvcCggJ2NoZWNrZWQnLCB0cnVlICk7XHJcblx0XHRhcHBseV93b3JraW5nX3RpbWVfc2V0dGluZ3NfdG9fZm9ybSggc2V0dGluZ3Mud29ya2luZ190aW1lIHx8IHt9LCAkKCAnI3dwYmNfYWdfcmVzb3VyY2VfaWQnICkudmFsKCkgKTtcclxuXHJcblx0XHRyZWZyZXNoX2J1ZmZlcl9maWVsZHMoKTtcclxuXHRcdHN5bmNfYWxsX3JhbmdlcygpO1xyXG5cdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBkYXRlX2Zyb21fc3FsKCBzcWxfZGF0ZSApIHtcclxuXHRcdHZhciBwYXJ0cyA9IFN0cmluZyggc3FsX2RhdGUgfHwgJycgKS5zcGxpdCggJy0nICk7XHJcblx0XHRpZiAoIHBhcnRzLmxlbmd0aCAhPT0gMyApIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV3IERhdGUoIHBhcnNlSW50KCBwYXJ0c1swXSwgMTAgKSwgcGFyc2VJbnQoIHBhcnRzWzFdLCAxMCApIC0gMSwgcGFyc2VJbnQoIHBhcnRzWzJdLCAxMCApLCAwLCAwLCAwICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfdG9kYXlfZGF0ZSgpIHtcclxuXHRcdHZhciBhcnIgPSB3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLmdldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJyA/IHcuX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyApIDogbnVsbDtcclxuXHRcdGlmICggYXJyICYmIGFyci5sZW5ndGggPj0gMyApIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBEYXRlKCBwYXJzZUludCggYXJyWzBdLCAxMCApLCBwYXJzZUludCggYXJyWzFdLCAxMCApIC0gMSwgcGFyc2VJbnQoIGFyclsyXSwgMTAgKSwgMCwgMCwgMCApO1xyXG5cdFx0fVxyXG5cdFx0dmFyIG5vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHRyZXR1cm4gbmV3IERhdGUoIG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93LmdldERhdGUoKSwgMCwgMCwgMCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3JlYWxfdG9kYXlfZGF0ZSgpIHtcclxuXHRcdHZhciBhcnIgPSB3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLmdldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJyA/IHcuX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGltZV9sb2NhbF9hcnInICkgOiBudWxsO1xyXG5cdFx0aWYgKCBhcnIgJiYgYXJyLmxlbmd0aCA+PSAzICkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IERhdGUoIHBhcnNlSW50KCBhcnJbMF0sIDEwICksIHBhcnNlSW50KCBhcnJbMV0sIDEwICkgLSAxLCBwYXJzZUludCggYXJyWzJdLCAxMCApLCAwLCAwLCAwICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZ2V0X3RvZGF5X2RhdGUoKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGRheXNfYmV0d2VlbiggZGF0ZV9hLCBkYXRlX2IgKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5mbG9vciggKCBkYXRlX2EuZ2V0VGltZSgpIC0gZGF0ZV9iLmdldFRpbWUoKSApIC8gODY0MDAwMDAgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFkZF9kYXlzKCBkYXRlLCBkYXlzICkge1xyXG5cdFx0dmFyIHNoaWZ0ZWRfZGF0ZSA9IG5ldyBEYXRlKCBkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIDAsIDAsIDAgKTtcclxuXHRcdHNoaWZ0ZWRfZGF0ZS5zZXREYXRlKCBzaGlmdGVkX2RhdGUuZ2V0RGF0ZSgpICsgZGF5cyApO1xyXG5cdFx0cmV0dXJuIHNoaWZ0ZWRfZGF0ZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGRhdGVfdG9fc3FsKCBkYXRlICkge1xyXG5cdFx0dmFyIG1vbnRoID0gU3RyaW5nKCBkYXRlLmdldE1vbnRoKCkgKyAxICk7XHJcblx0XHR2YXIgZGF5ID0gU3RyaW5nKCBkYXRlLmdldERhdGUoKSApO1xyXG5cclxuXHRcdGlmICggbW9udGgubGVuZ3RoIDwgMiApIHtcclxuXHRcdFx0bW9udGggPSAnMCcgKyBtb250aDtcclxuXHRcdH1cclxuXHRcdGlmICggZGF5Lmxlbmd0aCA8IDIgKSB7XHJcblx0XHRcdGRheSA9ICcwJyArIGRheTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgJy0nICsgbW9udGggKyAnLScgKyBkYXk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfc3FsX2RhdGVfZnJvbV9jZWxsKCBjZWxsICkge1xyXG5cdFx0dmFyIGNsYXNzZXMgPSBTdHJpbmcoIGNlbGwuY2xhc3NOYW1lIHx8ICcnICkuc3BsaXQoIC9cXHMrLyApO1xyXG5cdFx0dmFyIGk7XHJcblx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdGlmICggY2xhc3Nlc1tpXS5pbmRleE9mKCAnc3FsX2RhdGVfJyApID09PSAwICkge1xyXG5cdFx0XHRcdHJldHVybiBjbGFzc2VzW2ldLnJlcGxhY2UoICdzcWxfZGF0ZV8nLCAnJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyc7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB1bmF2YWlsYWJsZV9mcm9tX3RvZGF5X2FwcGxpZXMoIGNlbGxfZGF0ZSwgdG9kYXlfZGF0ZSwgdmFsdWUgKSB7XHJcblx0XHR2YXIgbWludXRlcztcclxuXHRcdHZhciBub3c7XHJcblx0XHR2YXIgdW5hdmFpbGFibGVfdW50aWw7XHJcblxyXG5cdFx0aWYgKCAhIHZhbHVlIHx8IHZhbHVlID09PSAnMCcgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIC9tJC8udGVzdCggdmFsdWUgKSApIHtcclxuXHRcdFx0bWludXRlcyA9IHBhcnNlSW50KCB2YWx1ZSwgMTAgKTtcclxuXHRcdFx0aWYgKCAhIG1pbnV0ZXMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdHVuYXZhaWxhYmxlX3VudGlsID0gbmV3IERhdGUoIG5vdy5nZXRUaW1lKCkgKyAoICggbWludXRlcyAtIDEgKSAqIDYwMDAwICkgKTtcclxuXHRcdFx0dW5hdmFpbGFibGVfdW50aWwgPSBuZXcgRGF0ZSggdW5hdmFpbGFibGVfdW50aWwuZ2V0RnVsbFllYXIoKSwgdW5hdmFpbGFibGVfdW50aWwuZ2V0TW9udGgoKSwgdW5hdmFpbGFibGVfdW50aWwuZ2V0RGF0ZSgpLCAwLCAwLCAwICk7XHJcblx0XHRcdHJldHVybiBjZWxsX2RhdGUuZ2V0VGltZSgpIDw9IHVuYXZhaWxhYmxlX3VudGlsLmdldFRpbWUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGF5c19iZXR3ZWVuKCBjZWxsX2RhdGUsIHRvZGF5X2RhdGUgKSA8IHBhcnNlSW50KCB2YWx1ZSwgMTAgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9vcHRpb25fdGV4dCggc2VsZWN0b3IgKSB7XHJcblx0XHR2YXIgdGV4dCA9ICQoIHNlbGVjdG9yICkuZmluZCggJ29wdGlvbjpzZWxlY3RlZCcgKS50ZXh0KCk7XHJcblx0XHRyZXR1cm4gdHJpbV90ZXh0KCB0ZXh0ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfZGF5c192YWx1ZSggdmFsdWUgKSB7XHJcblx0XHRpZiAoICEgdmFsdWUgfHwgISAvZCQvLnRlc3QoIHZhbHVlICkgKSB7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBhcnNlSW50KCB2YWx1ZSwgMTAgKSB8fCAwO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdGltZV90b19zZWNvbmRzKCB0aW1lICkge1xyXG5cdFx0dmFyIHBhcnRzID0gU3RyaW5nKCB0aW1lIHx8ICcnICkuc3BsaXQoICc6JyApO1xyXG5cdFx0dmFyIGhvdXJzO1xyXG5cdFx0dmFyIG1pbnM7XHJcblxyXG5cdFx0aWYgKCBwYXJ0cy5sZW5ndGggPCAyICkge1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHJcblx0XHRob3VycyA9IE1hdGgubWF4KCAwLCBNYXRoLm1pbiggMjQsIHBhcnNlSW50KCBwYXJ0c1swXSwgMTAgKSB8fCAwICkgKTtcclxuXHRcdG1pbnMgPSBob3VycyA9PT0gMjQgPyAwIDogTWF0aC5tYXgoIDAsIE1hdGgubWluKCA1OSwgcGFyc2VJbnQoIHBhcnRzWzFdLCAxMCApIHx8IDAgKSApO1xyXG5cclxuXHRcdHJldHVybiBNYXRoLm1pbiggODY0MDAsICggaG91cnMgKiAzNjAwICkgKyAoIG1pbnMgKiA2MCApICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZWNvbmRzX3RvX3RpbWUoIHNlY29uZHMgKSB7XG5cdFx0dmFyIGhvdXJzO1xyXG5cdFx0dmFyIG1pbnM7XHJcblxyXG5cdFx0c2Vjb25kcyA9IE1hdGgubWF4KCAwLCBNYXRoLm1pbiggODY0MDAsIHBhcnNlSW50KCBzZWNvbmRzLCAxMCApIHx8IDAgKSApO1xyXG5cdFx0aG91cnMgPSBNYXRoLmZsb29yKCBzZWNvbmRzIC8gMzYwMCApO1xyXG5cdFx0bWlucyA9IE1hdGguZmxvb3IoICggc2Vjb25kcyAlIDM2MDAgKSAvIDYwICk7XHJcblxyXG5cdFx0cmV0dXJuICggaG91cnMgPCAxMCA/ICcwJyA6ICcnICkgKyBob3VycyArICc6JyArICggbWlucyA8IDEwID8gJzAnIDogJycgKSArIG1pbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJuIHRoZSBib3VuZGVkIGludGVydmFsIGxpbWl0IGZvciBvbmUgV29ya2luZyBUaW1lIGVkaXRvci5cblx0ICpcblx0ICogQHBhcmFtIHtqUXVlcnl9ICR3ZWVrZGF5cyBXb3JraW5nIFRpbWUgd2Vla2RheSB3cmFwcGVyLlxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9IE1heGltdW0gaW50ZXJ2YWxzIHBlciB3ZWVrZGF5LlxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0X21heF93b3JraW5nX3RpbWVfaW50ZXJ2YWxzKCAkd2Vla2RheXMgKSB7XG5cdFx0dmFyIGNvbmZpZ3VyZWRfbGltaXQgPSBwYXJzZUludCggJHdlZWtkYXlzLmF0dHIoICdkYXRhLW1heC1pbnRlcnZhbHMnICksIDEwICk7XG5cdFx0dmFyIGxvY2FsaXplZF9saW1pdCA9IHBhcnNlSW50KCBjZmcubWF4X3dvcmtpbmdfdGltZV9pbnRlcnZhbHMsIDEwICk7XG5cblx0XHRyZXR1cm4gTWF0aC5tYXgoIDEsIE1hdGgubWluKCA0OCwgY29uZmlndXJlZF9saW1pdCB8fCBsb2NhbGl6ZWRfbGltaXQgfHwgOCApICk7XG5cdH1cblxuXHQvKipcblx0ICogUmVhZCBhbGwgdmlzaWJsZSBpbnRlcnZhbCBjb250cm9scyBmb3Igb25lIHdlZWtkYXkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7alF1ZXJ5fSAkZGF5X3JvdyBXZWVrZGF5IHJvdy5cblx0ICogQHJldHVybiB7T2JqZWN0W119IENhbm9uaWNhbCBpbnRlcnZhbCByZWNvcmRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gY29sbGVjdF93b3JraW5nX3RpbWVfZGF5X2ludGVydmFscyggJGRheV9yb3cgKSB7XG5cdFx0dmFyIGludGVydmFscyA9IFtdO1xuXG5cdFx0JGRheV9yb3cuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWludGVydmFsPVwiMVwiXScgKS5lYWNoKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgJGludGVydmFsID0gJCggdGhpcyApO1xuXG5cdFx0XHRpbnRlcnZhbHMucHVzaCgge1xuXHRcdFx0XHRzdGFydF9zZWNvbmQ6IHRpbWVfdG9fc2Vjb25kcyggJGludGVydmFsLmZpbmQoICcud3BiY19hZ193b3JraW5nX3RpbWVfc3RhcnQnICkudmFsKCkgKSxcblx0XHRcdFx0ZW5kX3NlY29uZDogdGltZV90b19zZWNvbmRzKCAkaW50ZXJ2YWwuZmluZCggJy53cGJjX2FnX3dvcmtpbmdfdGltZV9lbmQnICkudmFsKCkgKVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdHJldHVybiBpbnRlcnZhbHM7XG5cdH1cblxuXHQvKipcblx0ICogUmVidWlsZCBkeW5hbWljIG5hbWVzLCBJRHMsIGFuZCBsYWJlbCBhc3NvY2lhdGlvbnMgYWZ0ZXIgYSByb3cgbXV0YXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7alF1ZXJ5fSAkZGF5X3JvdyBXZWVrZGF5IHJvdy5cblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGZ1bmN0aW9uIHJlaW5kZXhfd29ya2luZ190aW1lX2RheSggJGRheV9yb3cgKSB7XG5cdFx0dmFyICR3ZWVrZGF5cyA9ICRkYXlfcm93LmNsb3Nlc3QoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS13ZWVrZGF5c10nICk7XG5cdFx0dmFyIHByZWZpeCA9IFN0cmluZyggJHdlZWtkYXlzLmF0dHIoICdkYXRhLXdwYmMtd29ya2luZy10aW1lLXdlZWtkYXlzJyApIHx8ICcnICk7XG5cdFx0dmFyIGRheSA9IHBhcnNlSW50KCAkZGF5X3Jvdy5hdHRyKCAnZGF0YS13cGJjLXdvcmtpbmctdGltZS1kYXknICksIDEwICk7XG5cblx0XHQkZGF5X3Jvdy5maW5kKCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtaW50ZXJ2YWw9XCIxXCJdJyApLmVhY2goIGZ1bmN0aW9uICggaW50ZXJ2YWxfaW5kZXggKSB7XG5cdFx0XHR2YXIgJGludGVydmFsID0gJCggdGhpcyApO1xuXHRcdFx0dmFyIHN0YXJ0X2lkID0gcHJlZml4ICsgJ19zdGFydF8nICsgZGF5ICsgJ18nICsgaW50ZXJ2YWxfaW5kZXg7XG5cdFx0XHR2YXIgZW5kX2lkID0gcHJlZml4ICsgJ19lbmRfJyArIGRheSArICdfJyArIGludGVydmFsX2luZGV4O1xuXHRcdFx0dmFyICRsYWJlbHMgPSAkaW50ZXJ2YWwuZmluZCggJ2xhYmVsJyApO1xuXG5cdFx0XHQkaW50ZXJ2YWwuYXR0ciggJ2RhdGEtaW50ZXJ2YWwtaW5kZXgnLCBpbnRlcnZhbF9pbmRleCApO1xuXHRcdFx0JGludGVydmFsLmZpbmQoICcud3BiY19hZ193b3JraW5nX3RpbWVfc3RhcnQnIClcblx0XHRcdFx0LmF0dHIoICdpZCcsIHN0YXJ0X2lkIClcblx0XHRcdFx0LmF0dHIoICduYW1lJywgcHJlZml4ICsgJ19zdGFydFsnICsgZGF5ICsgJ11bXScgKTtcblx0XHRcdCRpbnRlcnZhbC5maW5kKCAnLndwYmNfYWdfd29ya2luZ190aW1lX2VuZCcgKVxuXHRcdFx0XHQuYXR0ciggJ2lkJywgZW5kX2lkIClcblx0XHRcdFx0LmF0dHIoICduYW1lJywgcHJlZml4ICsgJ19lbmRbJyArIGRheSArICddW10nICk7XG5cdFx0XHQkbGFiZWxzLmVxKCAwICkuYXR0ciggJ2ZvcicsIHN0YXJ0X2lkICk7XG5cdFx0XHQkbGFiZWxzLmVxKCAxICkuYXR0ciggJ2ZvcicsIGVuZF9pZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoIG9uZSB3ZWVrZGF5J3MgZW5hYmxlZCBjb250cm9scyBhbmQgaW50ZXJ2YWwtbGltaXQgc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7alF1ZXJ5fSAkZGF5X3JvdyBXZWVrZGF5IHJvdy5cblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGZ1bmN0aW9uIHJlZnJlc2hfd29ya2luZ190aW1lX2RheSggJGRheV9yb3cgKSB7XG5cdFx0dmFyICR3ZWVrZGF5cyA9ICRkYXlfcm93LmNsb3Nlc3QoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS13ZWVrZGF5c10nICk7XG5cdFx0dmFyICR0b2dnbGUgPSAkZGF5X3Jvdy5maW5kKCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtZGF5LXRvZ2dsZT1cIjFcIl0nICkuZmlyc3QoKTtcblx0XHR2YXIgJHJlc291cmNlX2N1c3RvbSA9ICRkYXlfcm93LmNsb3Nlc3QoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1yZXNvdXJjZS1jdXN0b209XCIxXCJdJyApO1xuXHRcdHZhciBpc19ibG9ja19kaXNhYmxlZCA9ICRkYXlfcm93LmNsb3Nlc3QoICcud3BiY19hZ193b3JraW5nX3RpbWVfYmxvY2snICkuaGFzQ2xhc3MoICdpcy1kaXNhYmxlZCcgKVxuXHRcdFx0fHwgKCAkcmVzb3VyY2VfY3VzdG9tLmxlbmd0aCAmJiAhICRyZXNvdXJjZV9jdXN0b20uaGFzQ2xhc3MoICdpcy12aXNpYmxlJyApICk7XG5cdFx0dmFyIGlzX2RheV9lbmFibGVkID0gISBpc19ibG9ja19kaXNhYmxlZCAmJiAkdG9nZ2xlLnByb3AoICdjaGVja2VkJyApO1xuXHRcdHZhciBpbnRlcnZhbF9jb3VudCA9ICRkYXlfcm93LmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1pbnRlcnZhbD1cIjFcIl0nICkubGVuZ3RoO1xuXHRcdHZhciBtYXhfaW50ZXJ2YWxzID0gZ2V0X21heF93b3JraW5nX3RpbWVfaW50ZXJ2YWxzKCAkd2Vla2RheXMgKTtcblxuXHRcdCRkYXlfcm93LnRvZ2dsZUNsYXNzKCAnaXMtZW5hYmxlZCcsICR0b2dnbGUucHJvcCggJ2NoZWNrZWQnICkgKTtcblx0XHQkdG9nZ2xlLnByb3AoICdkaXNhYmxlZCcsIGlzX2Jsb2NrX2Rpc2FibGVkICk7XG5cdFx0JGRheV9yb3cuZmluZCggJy53cGJjX2FnX3dvcmtpbmdfdGltZV9zdGFydCwgLndwYmNfYWdfd29ya2luZ190aW1lX2VuZCwgW2RhdGEtd3BiYy1yZW1vdmUtd29ya2luZy10aW1lLWludGVydmFsXScgKS5wcm9wKCAnZGlzYWJsZWQnLCAhIGlzX2RheV9lbmFibGVkICk7XG5cdFx0JGRheV9yb3cuZmluZCggJ1tkYXRhLXdwYmMtYWRkLXdvcmtpbmctdGltZS1pbnRlcnZhbF0nICkucHJvcCggJ2Rpc2FibGVkJywgISBpc19kYXlfZW5hYmxlZCB8fCBpbnRlcnZhbF9jb3VudCA+PSBtYXhfaW50ZXJ2YWxzICk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBhIG5vbi1vdmVybGFwcGluZyBvbmUtaG91ciBpbnRlcnZhbCBwcm9wb3NhbC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3RbXX0gaW50ZXJ2YWxzIEN1cnJlbnQgd2Vla2RheSBpbnRlcnZhbHMuXG5cdCAqIEByZXR1cm4ge09iamVjdHxudWxsfSBQcm9wb3NlZCBpbnRlcnZhbCwgb3IgbnVsbCB3aGVuIHRoZSBkYXkgaGFzIG5vIGdhcC5cblx0ICovXG5cdGZ1bmN0aW9uIGZpbmRfd29ya2luZ190aW1lX2ludGVydmFsX3Byb3Bvc2FsKCBpbnRlcnZhbHMgKSB7XG5cdFx0dmFyIHNvcnRlZF9pbnRlcnZhbHMgPSBpbnRlcnZhbHMuc2xpY2UoKS5zb3J0KCBmdW5jdGlvbiAoIGZpcnN0X2ludGVydmFsLCBzZWNvbmRfaW50ZXJ2YWwgKSB7XG5cdFx0XHRyZXR1cm4gZmlyc3RfaW50ZXJ2YWwuc3RhcnRfc2Vjb25kIC0gc2Vjb25kX2ludGVydmFsLnN0YXJ0X3NlY29uZDtcblx0XHR9ICk7XG5cdFx0dmFyIHByZWZlcnJlZF9zdGFydCA9IHNvcnRlZF9pbnRlcnZhbHMubGVuZ3RoID8gc29ydGVkX2ludGVydmFsc1sgc29ydGVkX2ludGVydmFscy5sZW5ndGggLSAxIF0uZW5kX3NlY29uZCA6IDkgKiAzNjAwO1xuXHRcdHZhciBjYW5kaWRhdGVzID0gW107XG5cdFx0dmFyIGNhbmRpZGF0ZV9zdGFydDtcblxuXHRcdGZvciAoIGNhbmRpZGF0ZV9zdGFydCA9IDA7IGNhbmRpZGF0ZV9zdGFydCA8PSAyMyAqIDM2MDA7IGNhbmRpZGF0ZV9zdGFydCArPSAxODAwICkge1xuXHRcdFx0aWYgKCBjYW5kaWRhdGVfc3RhcnQgPj0gcHJlZmVycmVkX3N0YXJ0ICkge1xuXHRcdFx0XHRjYW5kaWRhdGVzLnB1c2goIGNhbmRpZGF0ZV9zdGFydCApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKCBjYW5kaWRhdGVfc3RhcnQgPSAwOyBjYW5kaWRhdGVfc3RhcnQgPCBwcmVmZXJyZWRfc3RhcnQgJiYgY2FuZGlkYXRlX3N0YXJ0IDw9IDIzICogMzYwMDsgY2FuZGlkYXRlX3N0YXJ0ICs9IDE4MDAgKSB7XG5cdFx0XHRjYW5kaWRhdGVzLnB1c2goIGNhbmRpZGF0ZV9zdGFydCApO1xuXHRcdH1cblxuXHRcdGNhbmRpZGF0ZV9zdGFydCA9IG51bGw7XG5cdFx0Y2FuZGlkYXRlcy5zb21lKCBmdW5jdGlvbiAoIHByb3Bvc2VkX3N0YXJ0ICkge1xuXHRcdFx0dmFyIHByb3Bvc2VkX2VuZCA9IHByb3Bvc2VkX3N0YXJ0ICsgMzYwMDtcblx0XHRcdHZhciBvdmVybGFwcyA9IHNvcnRlZF9pbnRlcnZhbHMuc29tZSggZnVuY3Rpb24gKCBpbnRlcnZhbCApIHtcblx0XHRcdFx0cmV0dXJuIHByb3Bvc2VkX3N0YXJ0IDwgaW50ZXJ2YWwuZW5kX3NlY29uZCAmJiBwcm9wb3NlZF9lbmQgPiBpbnRlcnZhbC5zdGFydF9zZWNvbmQ7XG5cdFx0XHR9ICk7XG5cblx0XHRcdGlmICggcHJvcG9zZWRfZW5kIDw9IDg2NDAwICYmICEgb3ZlcmxhcHMgKSB7XG5cdFx0XHRcdGNhbmRpZGF0ZV9zdGFydCA9IHByb3Bvc2VkX3N0YXJ0O1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gbnVsbCA9PT0gY2FuZGlkYXRlX3N0YXJ0ID8gbnVsbCA6IHtcblx0XHRcdHN0YXJ0X3NlY29uZDogY2FuZGlkYXRlX3N0YXJ0LFxuXHRcdFx0ZW5kX3NlY29uZDogY2FuZGlkYXRlX3N0YXJ0ICsgMzYwMFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kIGFuIGludGVydmFsIGJ5IGNsb25pbmcgdGhlIHNlcnZlci1yZW5kZXJlZCBhbGxvdy1saXN0ZWQgY29udHJvbHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7alF1ZXJ5fSAkZGF5X3JvdyBXZWVrZGF5IHJvdy5cblx0ICogQHBhcmFtIHtPYmplY3R9IGludGVydmFsIENhbm9uaWNhbCBpbnRlcnZhbCByZWNvcmQuXG5cdCAqIEByZXR1cm4ge2pRdWVyeX0gQXBwZW5kZWQgaW50ZXJ2YWwgbm9kZS5cblx0ICovXG5cdGZ1bmN0aW9uIGFwcGVuZF93b3JraW5nX3RpbWVfaW50ZXJ2YWwoICRkYXlfcm93LCBpbnRlcnZhbCApIHtcblx0XHR2YXIgJGNvbnRhaW5lciA9ICRkYXlfcm93LmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1pbnRlcnZhbHM9XCIxXCJdJyApLmZpcnN0KCk7XG5cdFx0dmFyICRwcm90b3R5cGUgPSAkY29udGFpbmVyLmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1pbnRlcnZhbD1cIjFcIl0nICkuZmlyc3QoKTtcblx0XHR2YXIgJGludGVydmFsID0gJHByb3RvdHlwZS5jbG9uZSggZmFsc2UsIGZhbHNlICk7XG5cblx0XHQkaW50ZXJ2YWwuZmluZCggJy53cGJjX2FnX3dvcmtpbmdfdGltZV9zdGFydCcgKS52YWwoIHNlY29uZHNfdG9fdGltZSggaW50ZXJ2YWwuc3RhcnRfc2Vjb25kICkgKTtcblx0XHQkaW50ZXJ2YWwuZmluZCggJy53cGJjX2FnX3dvcmtpbmdfdGltZV9lbmQnICkudmFsKCBzZWNvbmRzX3RvX3RpbWUoIGludGVydmFsLmVuZF9zZWNvbmQgKSApO1xuXHRcdCRjb250YWluZXIuYXBwZW5kKCAkaW50ZXJ2YWwgKTtcblx0XHRyZWluZGV4X3dvcmtpbmdfdGltZV9kYXkoICRkYXlfcm93ICk7XG5cblx0XHRyZXR1cm4gJGludGVydmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgbmV4dCBhdmFpbGFibGUgb25lLWhvdXIgaW50ZXJ2YWwgdG8gYSB3ZWVrZGF5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBidXR0b24gQWRkLWludGVydmFsIGJ1dHRvbi5cblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGZ1bmN0aW9uIGFkZF93b3JraW5nX3RpbWVfaW50ZXJ2YWwoIGJ1dHRvbiApIHtcblx0XHR2YXIgJGRheV9yb3cgPSAkKCBidXR0b24gKS5jbG9zZXN0KCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtZGF5XScgKTtcblx0XHR2YXIgJHdlZWtkYXlzID0gJGRheV9yb3cuY2xvc2VzdCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLXdlZWtkYXlzXScgKTtcblx0XHR2YXIgaW50ZXJ2YWxzID0gY29sbGVjdF93b3JraW5nX3RpbWVfZGF5X2ludGVydmFscyggJGRheV9yb3cgKTtcblx0XHR2YXIgbWF4X2ludGVydmFscyA9IGdldF9tYXhfd29ya2luZ190aW1lX2ludGVydmFscyggJHdlZWtkYXlzICk7XG5cdFx0dmFyIHByb3Bvc2FsO1xuXHRcdHZhciAkaW50ZXJ2YWw7XG5cblx0XHRpZiAoIGludGVydmFscy5sZW5ndGggPj0gbWF4X2ludGVydmFscyApIHtcblx0XHRcdHNob3dfbWVzc2FnZSggKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5pbnRlcnZhbF9saW1pdCApIHx8ICdObyBhZGRpdGlvbmFsIG9uZS1ob3VyIGludGVydmFsIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyB3ZWVrZGF5LicsICdlcnJvcicsIDYwMDAgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRwcm9wb3NhbCA9IGZpbmRfd29ya2luZ190aW1lX2ludGVydmFsX3Byb3Bvc2FsKCBpbnRlcnZhbHMgKTtcblx0XHRpZiAoICEgcHJvcG9zYWwgKSB7XG5cdFx0XHRzaG93X21lc3NhZ2UoICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4uaW50ZXJ2YWxfbGltaXQgKSB8fCAnTm8gYWRkaXRpb25hbCBvbmUtaG91ciBpbnRlcnZhbCBpcyBhdmFpbGFibGUgZm9yIHRoaXMgd2Vla2RheS4nLCAnZXJyb3InLCA2MDAwICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JGludGVydmFsID0gYXBwZW5kX3dvcmtpbmdfdGltZV9pbnRlcnZhbCggJGRheV9yb3csIHByb3Bvc2FsICk7XG5cdFx0JGRheV9yb3cuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWRheS10b2dnbGU9XCIxXCJdJyApLnByb3AoICdjaGVja2VkJywgdHJ1ZSApO1xuXHRcdHJlZnJlc2hfd29ya2luZ190aW1lX2RheSggJGRheV9yb3cgKTtcblx0XHQkaW50ZXJ2YWwuZmluZCggJy53cGJjX2FnX3dvcmtpbmdfdGltZV9zdGFydCcgKS50cmlnZ2VyKCAnZm9jdXMnICk7XG5cdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIG9uZSB3ZWVrZGF5IGludGVydmFsLCBjbG9zaW5nIHRoZSB3ZWVrZGF5IHdoZW4gaXQgaXMgdGhlIGxhc3Qgb25lLlxuXHQgKlxuXHQgKiBLZWVwaW5nIG9uZSBkaXNhYmxlZCBpbnRlcnZhbCBpbiB0aGUgRE9NIHByZXNlcnZlcyBhbiBhbGxvdy1saXN0ZWQgY29udHJvbFxuXHQgKiBwcm90b3R5cGUgZm9yIHJlb3BlbmluZyB0aGUgZGF5IG9yIGFkZGluZyBhIGxhdGVyIGludGVydmFsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBidXR0b24gUmVtb3ZlLWludGVydmFsIGJ1dHRvbi5cblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGZ1bmN0aW9uIHJlbW92ZV93b3JraW5nX3RpbWVfaW50ZXJ2YWwoIGJ1dHRvbiApIHtcblx0XHR2YXIgJGJ1dHRvbiA9ICQoIGJ1dHRvbiApO1xuXHRcdHZhciAkZGF5X3JvdyA9ICRidXR0b24uY2xvc2VzdCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWRheV0nICk7XG5cdFx0dmFyICRpbnRlcnZhbHMgPSAkZGF5X3Jvdy5maW5kKCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtaW50ZXJ2YWw9XCIxXCJdJyApO1xuXHRcdHZhciAkZm9jdXNfdGFyZ2V0O1xuXG5cdFx0aWYgKCAkaW50ZXJ2YWxzLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHQkYnV0dG9uLmNsb3Nlc3QoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1pbnRlcnZhbD1cIjFcIl0nICkucmVtb3ZlKCk7XG5cdFx0XHQkZm9jdXNfdGFyZ2V0ID0gJGRheV9yb3cuZmluZCggJ1tkYXRhLXdwYmMtYWRkLXdvcmtpbmctdGltZS1pbnRlcnZhbD1cIjFcIl0nICkuZmlyc3QoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGRheV9yb3cuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWRheS10b2dnbGU9XCIxXCJdJyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0XHRcdCRmb2N1c190YXJnZXQgPSAkZGF5X3Jvdy5maW5kKCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtZGF5LXRvZ2dsZT1cIjFcIl0nICkuZmlyc3QoKTtcblx0XHR9XG5cblx0XHRyZWluZGV4X3dvcmtpbmdfdGltZV9kYXkoICRkYXlfcm93ICk7XG5cdFx0cmVmcmVzaF93b3JraW5nX3RpbWVfZGF5KCAkZGF5X3JvdyApO1xuXHRcdCRmb2N1c190YXJnZXQudHJpZ2dlciggJ2ZvY3VzJyApO1xuXHRcdHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCgpO1xuXHR9XG5cclxuXHRmdW5jdGlvbiBjb2xsZWN0X3dvcmtpbmdfdGltZV93ZWVrZGF5cyggcHJlZml4ICkge1xuXHRcdHZhciAkZm9ybSA9IGdldF9mb3JtKCk7XG5cdFx0dmFyIHdlZWtkYXlzID0ge307XG5cblx0XHQkZm9ybS5maW5kKCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtd2Vla2RheXM9XCInICsgcHJlZml4ICsgJ1wiXSAud3BiY19hZ193b3JraW5nX3RpbWVfcm93JyApLmVhY2goIGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciAkcm93ID0gJCggdGhpcyApO1xuXHRcdFx0dmFyIGRheSA9IHBhcnNlSW50KCAkcm93LmF0dHIoICdkYXRhLXdwYmMtd29ya2luZy10aW1lLWRheScgKSwgMTAgKTtcblxuXHRcdFx0d2Vla2RheXNbIGRheSBdID0gW107XG5cdFx0XHRpZiAoICEgJHJvdy5maW5kKCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtZGF5LXRvZ2dsZT1cIjFcIl0nICkucHJvcCggJ2NoZWNrZWQnICkgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0d2Vla2RheXNbIGRheSBdID0gY29sbGVjdF93b3JraW5nX3RpbWVfZGF5X2ludGVydmFscyggJHJvdyApO1xuXHRcdH0gKTtcblxyXG5cdFx0cmV0dXJuIHdlZWtkYXlzO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0X3dvcmtpbmdfdGltZV93ZWVrZGF5cyggcHJlZml4LCB3ZWVrZGF5cyApIHtcblx0XHR2YXIgJHdyYXAgPSBnZXRfZm9ybSgpLmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS13ZWVrZGF5cz1cIicgKyBwcmVmaXggKyAnXCJdJyApO1xuXG5cdFx0JHdyYXAuZmluZCggJy53cGJjX2FnX3dvcmtpbmdfdGltZV9yb3cnICkuZWFjaCggZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyICRyb3cgPSAkKCB0aGlzICk7XG5cdFx0XHR2YXIgZGF5ID0gcGFyc2VJbnQoICRyb3cuYXR0ciggJ2RhdGEtd3BiYy13b3JraW5nLXRpbWUtZGF5JyApLCAxMCApO1xuXHRcdFx0dmFyIGludGVydmFscyA9IHdlZWtkYXlzICYmICQuaXNBcnJheSggd2Vla2RheXNbIGRheSBdICkgPyB3ZWVrZGF5c1sgZGF5IF0gOiBbXTtcblx0XHRcdHZhciBkaXNwbGF5X2ludGVydmFscyA9IGludGVydmFscy5sZW5ndGggPyBpbnRlcnZhbHMgOiBbIHsgc3RhcnRfc2Vjb25kOiAzMjQwMCwgZW5kX3NlY29uZDogNjQ4MDAgfSBdO1xuXHRcdFx0dmFyICRjb250YWluZXIgPSAkcm93LmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1pbnRlcnZhbHM9XCIxXCJdJyApLmZpcnN0KCk7XG5cdFx0XHR2YXIgJHByb3RvdHlwZSA9ICRjb250YWluZXIuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWludGVydmFsPVwiMVwiXScgKS5maXJzdCgpLmNsb25lKCBmYWxzZSwgZmFsc2UgKTtcblxuXHRcdFx0JGNvbnRhaW5lci5lbXB0eSgpLmFwcGVuZCggJHByb3RvdHlwZSApO1xuXHRcdFx0JHByb3RvdHlwZS5maW5kKCAnLndwYmNfYWdfd29ya2luZ190aW1lX3N0YXJ0JyApLnZhbCggc2Vjb25kc190b190aW1lKCBkaXNwbGF5X2ludGVydmFsc1swXS5zdGFydF9zZWNvbmQgKSApO1xuXHRcdFx0JHByb3RvdHlwZS5maW5kKCAnLndwYmNfYWdfd29ya2luZ190aW1lX2VuZCcgKS52YWwoIHNlY29uZHNfdG9fdGltZSggZGlzcGxheV9pbnRlcnZhbHNbMF0uZW5kX3NlY29uZCApICk7XG5cdFx0XHRkaXNwbGF5X2ludGVydmFscy5zbGljZSggMSApLmZvckVhY2goIGZ1bmN0aW9uICggaW50ZXJ2YWwgKSB7XG5cdFx0XHRcdGFwcGVuZF93b3JraW5nX3RpbWVfaW50ZXJ2YWwoICRyb3csIGludGVydmFsICk7XG5cdFx0XHR9ICk7XG5cdFx0XHQkcm93LmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1kYXktdG9nZ2xlPVwiMVwiXScgKS5wcm9wKCAnY2hlY2tlZCcsIGludGVydmFscy5sZW5ndGggPiAwICk7XG5cdFx0XHRyZWluZGV4X3dvcmtpbmdfdGltZV9kYXkoICRyb3cgKTtcblx0XHR9ICk7XG5cdH1cblxyXG5cdGZ1bmN0aW9uIHJlZnJlc2hfd29ya2luZ190aW1lX3BhbmVscygpIHtcblx0XHR2YXIgaXNfZW5hYmxlZCA9IGdldF9mb3JtKCkuZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX3dvcmtpbmdfdGltZV9lbmFibGVkXCJdJyApLnByb3AoICdjaGVja2VkJyApO1xuXHRcdHZhciBtb2RlID0gZ2V0X2Zvcm0oKS5maW5kKCAnaW5wdXRbbmFtZT1cImJvb2tpbmdfd29ya2luZ190aW1lX3Jlc291cmNlX21vZGVcIl06Y2hlY2tlZCcgKS52YWwoKSB8fCAnaW5oZXJpdCc7XG5cdFx0dmFyICRyZXNvdXJjZV9jdXN0b20gPSBnZXRfZm9ybSgpLmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1yZXNvdXJjZS1jdXN0b21dJyApO1xuXG5cdFx0JHJlc291cmNlX2N1c3RvbS50b2dnbGVDbGFzcyggJ2lzLXZpc2libGUnLCBtb2RlID09PSAnY3VzdG9tJyApO1xuXG5cdFx0Z2V0X2Zvcm0oKVxuXHRcdFx0LmZpbmQoICcud3BiY19hZ193b3JraW5nX3RpbWVfYmxvY2snIClcblx0XHRcdC50b2dnbGVDbGFzcyggJ2lzLWRpc2FibGVkJywgISBpc19lbmFibGVkICk7XG5cblx0XHRnZXRfZm9ybSgpLmZpbmQoICcud3BiY19hZ193b3JraW5nX3RpbWVfYmxvY2snICkuZWFjaCggZnVuY3Rpb24gKCkge1xuXHRcdFx0JCggdGhpcyApLmZpbmQoICdpbnB1dCwgc2VsZWN0LCBidXR0b24nICkucHJvcCggJ2Rpc2FibGVkJywgISBpc19lbmFibGVkICk7XG5cdFx0fSApO1xuXHRcdGdldF9mb3JtKCkuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWRheV0nICkuZWFjaCggZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVmcmVzaF93b3JraW5nX3RpbWVfZGF5KCAkKCB0aGlzICkgKTtcblx0XHR9ICk7XG5cdH1cblxyXG5cdGZ1bmN0aW9uIGdldF93b3JraW5nX3RpbWVfc2V0dGluZ3NfZnJvbV9mb3JtKCkge1xyXG5cdFx0dmFyICRmb3JtID0gZ2V0X2Zvcm0oKTtcclxuXHRcdHZhciByZXNvdXJjZUlkID0gcGFyc2VJbnQoICRmb3JtLmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1yZXNvdXJjZS1pZF0nICkudmFsKCksIDEwICkgfHwgcGFyc2VJbnQoICQoICcjd3BiY19hZ19yZXNvdXJjZV9pZCcgKS52YWwoKSwgMTAgKSB8fCAwO1xyXG5cdFx0dmFyIHdvcmtpbmdUaW1lID0gJC5leHRlbmQoIHRydWUsIHt9LCBjZmcuc2V0dGluZ3MgJiYgY2ZnLnNldHRpbmdzLndvcmtpbmdfdGltZSA/IGNmZy5zZXR0aW5ncy53b3JraW5nX3RpbWUgOiAoIGNmZy5kZWZhdWx0X3NldHRpbmdzICYmIGNmZy5kZWZhdWx0X3NldHRpbmdzLndvcmtpbmdfdGltZSA/IGNmZy5kZWZhdWx0X3NldHRpbmdzLndvcmtpbmdfdGltZSA6IHt9ICkgKTtcclxuXHJcblx0XHRpZiAoICEgd29ya2luZ1RpbWUuZGVmYXVsdCApIHtcclxuXHRcdFx0d29ya2luZ1RpbWUuZGVmYXVsdCA9IHt9O1xyXG5cdFx0fVxyXG5cdFx0aWYgKCAhIHdvcmtpbmdUaW1lLnJlc291cmNlcyApIHtcclxuXHRcdFx0d29ya2luZ1RpbWUucmVzb3VyY2VzID0ge307XHJcblx0XHR9XHJcblxyXG5cdFx0d29ya2luZ1RpbWUuZW5hYmxlZCA9ICRmb3JtLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ193b3JraW5nX3RpbWVfZW5hYmxlZFwiXScgKS5wcm9wKCAnY2hlY2tlZCcgKSA/ICdPbicgOiAnT2ZmJztcclxuXHRcdHdvcmtpbmdUaW1lLmRlZmF1bHQud2Vla2RheXMgPSBjb2xsZWN0X3dvcmtpbmdfdGltZV93ZWVrZGF5cyggJ2Jvb2tpbmdfd29ya2luZ190aW1lX2RlZmF1bHQnICk7XHJcblxyXG5cdFx0aWYgKCByZXNvdXJjZUlkID4gMCApIHtcclxuXHRcdFx0d29ya2luZ1RpbWUucmVzb3VyY2VzWyByZXNvdXJjZUlkIF0gPSB7XHJcblx0XHRcdFx0bW9kZTogJGZvcm0uZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9tb2RlXCJdOmNoZWNrZWQnICkudmFsKCkgfHwgJ2luaGVyaXQnLFxyXG5cdFx0XHRcdHdlZWtkYXlzOiBjb2xsZWN0X3dvcmtpbmdfdGltZV93ZWVrZGF5cyggJ2Jvb2tpbmdfd29ya2luZ190aW1lX3Jlc291cmNlJyApXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHdvcmtpbmdUaW1lO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlfd29ya2luZ190aW1lX3NldHRpbmdzX3RvX2Zvcm0oIHdvcmtpbmdUaW1lLCByZXNvdXJjZUlkICkge1xyXG5cdFx0dmFyIHJlc291cmNlU2V0dGluZ3M7XHJcblxyXG5cdFx0d29ya2luZ1RpbWUgPSB3b3JraW5nVGltZSB8fCB7fTtcclxuXHRcdHJlc291cmNlSWQgPSBwYXJzZUludCggcmVzb3VyY2VJZCwgMTAgKSB8fCBwYXJzZUludCggJCggJyN3cGJjX2FnX3Jlc291cmNlX2lkJyApLnZhbCgpLCAxMCApIHx8IDA7XHJcblx0XHRyZXNvdXJjZVNldHRpbmdzID0gd29ya2luZ1RpbWUucmVzb3VyY2VzICYmIHdvcmtpbmdUaW1lLnJlc291cmNlc1sgcmVzb3VyY2VJZCBdID8gd29ya2luZ1RpbWUucmVzb3VyY2VzWyByZXNvdXJjZUlkIF0gOiB7XHJcblx0XHRcdG1vZGU6ICdpbmhlcml0JyxcclxuXHRcdFx0d2Vla2RheXM6IHdvcmtpbmdUaW1lLmRlZmF1bHQgJiYgd29ya2luZ1RpbWUuZGVmYXVsdC53ZWVrZGF5cyA/IHdvcmtpbmdUaW1lLmRlZmF1bHQud2Vla2RheXMgOiB7fVxyXG5cdFx0fTtcclxuXHJcblx0XHRnZXRfZm9ybSgpLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ193b3JraW5nX3RpbWVfZW5hYmxlZFwiXScgKS5wcm9wKCAnY2hlY2tlZCcsIHdvcmtpbmdUaW1lLmVuYWJsZWQgPT09ICdPbicgKTtcclxuXHRcdGdldF9mb3JtKCkuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLXJlc291cmNlLWlkXScgKS52YWwoIHJlc291cmNlSWQgKTtcclxuXHRcdHNldF93b3JraW5nX3RpbWVfd2Vla2RheXMoICdib29raW5nX3dvcmtpbmdfdGltZV9kZWZhdWx0Jywgd29ya2luZ1RpbWUuZGVmYXVsdCAmJiB3b3JraW5nVGltZS5kZWZhdWx0LndlZWtkYXlzID8gd29ya2luZ1RpbWUuZGVmYXVsdC53ZWVrZGF5cyA6IHt9ICk7XHJcblx0XHRnZXRfZm9ybSgpLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ193b3JraW5nX3RpbWVfcmVzb3VyY2VfbW9kZVwiXVt2YWx1ZT1cIicgKyAoIHJlc291cmNlU2V0dGluZ3MubW9kZSB8fCAnaW5oZXJpdCcgKSArICdcIl0nICkucHJvcCggJ2NoZWNrZWQnLCB0cnVlICk7XHJcblx0XHRzZXRfd29ya2luZ190aW1lX3dlZWtkYXlzKCAnYm9va2luZ193b3JraW5nX3RpbWVfcmVzb3VyY2UnLCByZXNvdXJjZVNldHRpbmdzLndlZWtkYXlzIHx8ICggd29ya2luZ1RpbWUuZGVmYXVsdCA/IHdvcmtpbmdUaW1lLmRlZmF1bHQud2Vla2RheXMgOiB7fSApICk7XHJcblx0XHRyZWZyZXNoX3dvcmtpbmdfdGltZV9wYW5lbHMoKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFwcGVuZF93b3JraW5nX3RpbWVfcGF5bG9hZCggcGF5bG9hZCApIHtcblx0XHR2YXIgJGZvcm0gPSBnZXRfZm9ybSgpO1xyXG5cdFx0dmFyIGRlZmF1bHREYXlzID0gW107XHJcblx0XHR2YXIgcmVzb3VyY2VEYXlzID0gW107XHJcblx0XHR2YXIgZGVmYXVsdFN0YXJ0ID0ge307XHJcblx0XHR2YXIgZGVmYXVsdEVuZCA9IHt9O1xyXG5cdFx0dmFyIHJlc291cmNlU3RhcnQgPSB7fTtcclxuXHRcdHZhciByZXNvdXJjZUVuZCA9IHt9O1xyXG5cclxuXHRcdCRmb3JtLmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS13ZWVrZGF5cz1cImJvb2tpbmdfd29ya2luZ190aW1lX2RlZmF1bHRcIl0gLndwYmNfYWdfd29ya2luZ190aW1lX3JvdycgKS5lYWNoKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgJHJvdyA9ICQoIHRoaXMgKTtcblx0XHRcdHZhciBkYXkgPSBwYXJzZUludCggJHJvdy5hdHRyKCAnZGF0YS13cGJjLXdvcmtpbmctdGltZS1kYXknICksIDEwICk7XG5cblx0XHRcdGRlZmF1bHRTdGFydFsgZGF5IF0gPSBbXTtcblx0XHRcdGRlZmF1bHRFbmRbIGRheSBdID0gW107XG5cdFx0XHQkcm93LmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1pbnRlcnZhbD1cIjFcIl0nICkuZWFjaCggZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRkZWZhdWx0U3RhcnRbIGRheSBdLnB1c2goICQoIHRoaXMgKS5maW5kKCAnLndwYmNfYWdfd29ya2luZ190aW1lX3N0YXJ0JyApLnZhbCgpIHx8ICcwOTowMCcgKTtcblx0XHRcdFx0ZGVmYXVsdEVuZFsgZGF5IF0ucHVzaCggJCggdGhpcyApLmZpbmQoICcud3BiY19hZ193b3JraW5nX3RpbWVfZW5kJyApLnZhbCgpIHx8ICcxODowMCcgKTtcblx0XHRcdH0gKTtcblx0XHRcdGlmICggJHJvdy5maW5kKCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtZGF5LXRvZ2dsZT1cIjFcIl0nICkucHJvcCggJ2NoZWNrZWQnICkgKSB7XG5cdFx0XHRcdGRlZmF1bHREYXlzLnB1c2goIGRheSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxyXG5cdFx0JGZvcm0uZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLXdlZWtkYXlzPVwiYm9va2luZ193b3JraW5nX3RpbWVfcmVzb3VyY2VcIl0gLndwYmNfYWdfd29ya2luZ190aW1lX3JvdycgKS5lYWNoKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgJHJvdyA9ICQoIHRoaXMgKTtcblx0XHRcdHZhciBkYXkgPSBwYXJzZUludCggJHJvdy5hdHRyKCAnZGF0YS13cGJjLXdvcmtpbmctdGltZS1kYXknICksIDEwICk7XG5cblx0XHRcdHJlc291cmNlU3RhcnRbIGRheSBdID0gW107XG5cdFx0XHRyZXNvdXJjZUVuZFsgZGF5IF0gPSBbXTtcblx0XHRcdCRyb3cuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWludGVydmFsPVwiMVwiXScgKS5lYWNoKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJlc291cmNlU3RhcnRbIGRheSBdLnB1c2goICQoIHRoaXMgKS5maW5kKCAnLndwYmNfYWdfd29ya2luZ190aW1lX3N0YXJ0JyApLnZhbCgpIHx8ICcwOTowMCcgKTtcblx0XHRcdFx0cmVzb3VyY2VFbmRbIGRheSBdLnB1c2goICQoIHRoaXMgKS5maW5kKCAnLndwYmNfYWdfd29ya2luZ190aW1lX2VuZCcgKS52YWwoKSB8fCAnMTg6MDAnICk7XG5cdFx0XHR9ICk7XG5cdFx0XHRpZiAoICRyb3cuZmluZCggJ1tkYXRhLXdwYmMtd29ya2luZy10aW1lLWRheS10b2dnbGU9XCIxXCJdJyApLnByb3AoICdjaGVja2VkJyApICkge1xuXHRcdFx0XHRyZXNvdXJjZURheXMucHVzaCggZGF5ICk7XG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0cGF5bG9hZC5ib29raW5nX3dvcmtpbmdfdGltZV9lbmFibGVkID0gJGZvcm0uZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX3dvcmtpbmdfdGltZV9lbmFibGVkXCJdJyApLnByb3AoICdjaGVja2VkJyApID8gJ09uJyA6ICcnO1xyXG5cdFx0cGF5bG9hZC5ib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9pZCA9ICRmb3JtLmZpbmQoICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1yZXNvdXJjZS1pZF0nICkudmFsKCkgfHwgJCggJyN3cGJjX2FnX3Jlc291cmNlX2lkJyApLnZhbCgpIHx8ICcnO1xyXG5cdFx0cGF5bG9hZC5ib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9tb2RlID0gJGZvcm0uZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9tb2RlXCJdOmNoZWNrZWQnICkudmFsKCkgfHwgJ2luaGVyaXQnO1xyXG5cdFx0cGF5bG9hZC5ib29raW5nX3dvcmtpbmdfdGltZV9kZWZhdWx0X2RheXMgPSBkZWZhdWx0RGF5cztcclxuXHRcdHBheWxvYWQuYm9va2luZ193b3JraW5nX3RpbWVfZGVmYXVsdF9zdGFydCA9IGRlZmF1bHRTdGFydDtcclxuXHRcdHBheWxvYWQuYm9va2luZ193b3JraW5nX3RpbWVfZGVmYXVsdF9lbmQgPSBkZWZhdWx0RW5kO1xyXG5cdFx0cGF5bG9hZC5ib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9kYXlzID0gcmVzb3VyY2VEYXlzO1xyXG5cdFx0cGF5bG9hZC5ib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9zdGFydCA9IHJlc291cmNlU3RhcnQ7XHJcblx0XHRwYXlsb2FkLmJvb2tpbmdfd29ya2luZ190aW1lX3Jlc291cmNlX2VuZCA9IHJlc291cmNlRW5kO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdXBkYXRlX3dwYmNfcHJldmlld19wYXJhbXMoIHNldHRpbmdzICkge1xyXG5cdFx0aWYgKCAhIHcuX3dwYmMgfHwgdHlwZW9mIHcuX3dwYmMuc2V0X290aGVyX3BhcmFtICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dy5fd3BiYy5zZXRfb3RoZXJfcGFyYW0oICdhdmFpbGFiaWxpdHlfX3dlZWtfZGF5c191bmF2YWlsYWJsZScsIHNldHRpbmdzLndlZWtkYXlzLmNvbmNhdCggWyA5OTkgXSApICk7XHJcblx0XHR3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSggJ2F2YWlsYWJpbGl0eV9fYXZhaWxhYmxlX2Zyb21fdG9kYXknLCBpc19hdmFpbGFibGVfbGltaXRfYXZhaWxhYmxlKCkgPyAoIHNldHRpbmdzLmJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXkgfHwgJycgKSA6ICcnICk7XHJcblx0XHR3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSggJ2F2YWlsYWJpbGl0eV9fdW5hdmFpbGFibGVfZnJvbV90b2RheScsIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheSB8fCAnMCcgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHVwZGF0ZV9idWZmZXJfcHJldmlld19ub3RlKCBzZXR0aW5ncyApIHtcclxuXHRcdHZhciAkbm90ZXMgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1ub3Rlcz1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHRcdHZhciAkY2FsZW5kYXIgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHRcdHZhciAkbm90ZSA9ICRub3Rlcy5maW5kKCAnLndwYmNfYWdfYnVmZmVyX3ByZXZpZXdfbm90ZScgKTtcclxuXHRcdHZhciB0eXBlID0gc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXQgfHwgJyc7XHJcblx0XHR2YXIgYmVmb3JlX3RleHQgPSAnJztcclxuXHRcdHZhciBhZnRlcl90ZXh0ID0gJyc7XHJcblx0XHR2YXIgbWVzc2FnZSA9ICcnO1xyXG5cclxuXHRcdGlmICggISAkbm90ZXMubGVuZ3RoIHx8ICEgJGNhbGVuZGFyLmxlbmd0aCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggISAkbm90ZS5sZW5ndGggKSB7XHJcblx0XHRcdCRub3RlID0gJCggJzxkaXYgY2xhc3M9XCJ3cGJjX2FnX2J1ZmZlcl9wcmV2aWV3X25vdGVcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L2Rpdj4nICk7XHJcblx0XHRcdCRub3Rlcy5hcHBlbmQoICRub3RlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAhIGlzX2J1ZmZlcl9hdmFpbGFibGUoKSApIHtcclxuXHRcdFx0JGNhbGVuZGFyLnJlbW92ZUNsYXNzKCAnd3BiY19hZ19wcmV2aWV3X2J1ZmZlcl9hY3RpdmUnICk7XHJcblx0XHRcdCRub3RlLmF0dHIoICdoaWRkZW4nLCAnaGlkZGVuJyApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JGNhbGVuZGFyLnRvZ2dsZUNsYXNzKCAnd3BiY19hZ19wcmV2aWV3X2J1ZmZlcl9hY3RpdmUnLCAhISB0eXBlICk7XHJcblxyXG5cdFx0aWYgKCB0eXBlID09PSAnbScgKSB7XHJcblx0XHRcdGJlZm9yZV90ZXh0ID0gZ2V0X29wdGlvbl90ZXh0KCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfaW5cIl0nICkgfHwgJy0nO1xyXG5cdFx0XHRhZnRlcl90ZXh0ID0gZ2V0X29wdGlvbl90ZXh0KCAnW25hbWU9XCJib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX21pbnV0ZXNfb3V0XCJdJyApIHx8ICctJztcclxuXHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09ICdkJyApIHtcclxuXHRcdFx0YmVmb3JlX3RleHQgPSBnZXRfb3B0aW9uX3RleHQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19pblwiXScgKSB8fCAnLSc7XHJcblx0XHRcdGFmdGVyX3RleHQgPSBnZXRfb3B0aW9uX3RleHQoICdbbmFtZT1cImJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfZGF5c19vdXRcIl0nICkgfHwgJy0nO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdHlwZSApIHtcclxuXHRcdFx0bWVzc2FnZSA9ICc8c3Ryb25nPicgKyAoIGNmZy5pMThuICYmIGNmZy5pMThuLmJ1ZmZlcl9wcmV2aWV3ID8gY2ZnLmkxOG4uYnVmZmVyX3ByZXZpZXcgOiAnQnVmZmVyIHByZXZpZXcnICkgKyAnOjwvc3Ryb25nPiAnICtcclxuXHRcdFx0XHQoIGNmZy5pMThuICYmIGNmZy5pMThuLmJlZm9yZV9ib29raW5nID8gY2ZnLmkxOG4uYmVmb3JlX2Jvb2tpbmcgOiAnQmVmb3JlIGJvb2tpbmcnICkgKyAnICcgKyBiZWZvcmVfdGV4dCArXHJcblx0XHRcdFx0JyAvICcgKyAoIGNmZy5pMThuICYmIGNmZy5pMThuLmFmdGVyX2Jvb2tpbmcgPyBjZmcuaTE4bi5hZnRlcl9ib29raW5nIDogJ0FmdGVyIGJvb2tpbmcnICkgKyAnICcgKyBhZnRlcl90ZXh0O1xyXG5cdFx0XHRpZiAoICRub3RlLmh0bWwoKSAhPT0gbWVzc2FnZSApIHtcclxuXHRcdFx0XHQkbm90ZS5odG1sKCBtZXNzYWdlICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAkbm90ZS5hdHRyKCAnaGlkZGVuJyApICkge1xyXG5cdFx0XHRcdCRub3RlLnJlbW92ZUF0dHIoICdoaWRkZW4nICk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1lc3NhZ2UgPSBjZmcuaTE4biAmJiBjZmcuaTE4bi5ub19idWZmZXIgPyBjZmcuaTE4bi5ub19idWZmZXIgOiAnTm8gYm9va2luZyBidWZmZXIgaXMgc2VsZWN0ZWQuJztcclxuXHRcdFx0aWYgKCAkbm90ZS50ZXh0KCkgIT09IG1lc3NhZ2UgKSB7XHJcblx0XHRcdFx0JG5vdGUudGV4dCggbWVzc2FnZSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggISAkbm90ZS5hdHRyKCAnaGlkZGVuJyApICkge1xyXG5cdFx0XHRcdCRub3RlLmF0dHIoICdoaWRkZW4nLCAnaGlkZGVuJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBhcHBseV9idWZmZXJfZGF5c19wcmV2aWV3KCBzZXR0aW5ncyApIHtcclxuXHRcdHZhciAkY2FsZW5kYXIgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICk7XHJcblx0XHR2YXIgYmVmb3JlX2RheXMgPSBnZXRfZGF5c192YWx1ZSggc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9kYXlzX2luICk7XHJcblx0XHR2YXIgYWZ0ZXJfZGF5cyA9IGdldF9kYXlzX3ZhbHVlKCBzZXR0aW5ncy5ib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfb3V0ICk7XHJcblx0XHR2YXIgZGF0ZV9jZWxscyA9IHt9O1xyXG5cdFx0dmFyIGJvb2tlZF9kYXRlcyA9IFtdO1xyXG5cclxuXHRcdGlmICggISBpc19idWZmZXJfYXZhaWxhYmxlKCkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHNldHRpbmdzLmJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfaW5fb3V0ICE9PSAnZCcgfHwgKCAhIGJlZm9yZV9kYXlzICYmICEgYWZ0ZXJfZGF5cyApICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JGNhbGVuZGFyLmZpbmQoICcuZGF0ZXBpY2stZGF5cy1jZWxsJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyICRjZWxsID0gJCggdGhpcyApO1xyXG5cdFx0XHR2YXIgc3FsX2RhdGUgPSBnZXRfc3FsX2RhdGVfZnJvbV9jZWxsKCB0aGlzICk7XHJcblx0XHRcdHZhciBjZWxsX2RhdGU7XHJcblxyXG5cdFx0XHRpZiAoICEgc3FsX2RhdGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkYXRlX2NlbGxzWyBzcWxfZGF0ZSBdID0gJGNlbGw7XHJcblxyXG5cdFx0XHRpZiAoICRjZWxsLmhhc0NsYXNzKCAnZGF0ZV9hcHByb3ZlZCcgKSB8fCAkY2VsbC5oYXNDbGFzcyggJ2RhdGUyYXBwcm92ZScgKSApIHtcclxuXHRcdFx0XHRjZWxsX2RhdGUgPSBkYXRlX2Zyb21fc3FsKCBzcWxfZGF0ZSApO1xyXG5cdFx0XHRcdGlmICggY2VsbF9kYXRlICkge1xyXG5cdFx0XHRcdFx0Ym9va2VkX2RhdGVzLnB1c2goIGNlbGxfZGF0ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cclxuXHRcdCQuZWFjaCggYm9va2VkX2RhdGVzLCBmdW5jdGlvbiAoIGluZGV4LCBib29rZWRfZGF0ZSApIHtcclxuXHRcdFx0dmFyIG9mZnNldDtcclxuXHRcdFx0dmFyIHRhcmdldF9zcWxfZGF0ZTtcclxuXHRcdFx0dmFyICR0YXJnZXRfY2VsbDtcclxuXHJcblx0XHRcdGZvciAoIG9mZnNldCA9IGJlZm9yZV9kYXlzICogLTE7IG9mZnNldCA8IDA7IG9mZnNldCsrICkge1xyXG5cdFx0XHRcdHRhcmdldF9zcWxfZGF0ZSA9IGRhdGVfdG9fc3FsKCBhZGRfZGF5cyggYm9va2VkX2RhdGUsIG9mZnNldCApICk7XHJcblx0XHRcdFx0JHRhcmdldF9jZWxsID0gZGF0ZV9jZWxsc1sgdGFyZ2V0X3NxbF9kYXRlIF07XHJcblx0XHRcdFx0aWYgKCAkdGFyZ2V0X2NlbGwgJiYgISAkdGFyZ2V0X2NlbGwuaGFzQ2xhc3MoICdkYXRlX2FwcHJvdmVkJyApICYmICEgJHRhcmdldF9jZWxsLmhhc0NsYXNzKCAnZGF0ZTJhcHByb3ZlJyApICkge1xyXG5cdFx0XHRcdFx0cmVtZW1iZXJfcHJldmlld19vcmlnaW4oICR0YXJnZXRfY2VsbCApO1xyXG5cdFx0XHRcdFx0JHRhcmdldF9jZWxsLmFkZENsYXNzKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlIHdwYmNfYWdfcHJldmlld191bmF2YWlsYWJsZSB3cGJjX2FnX3ByZXZpZXdfYnVmZmVyX3VuYXZhaWxhYmxlIGJ1ZmZlcl91bmF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHRcdCR0YXJnZXRfY2VsbC5hdHRyKCAnZGF0YS13cGJjLWFnLXByZXZpZXctcmVhc29uJywgJ3dwYmNfYWdfcHJldmlld19idWZmZXJfdW5hdmFpbGFibGUnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKCBvZmZzZXQgPSAxOyBvZmZzZXQgPD0gYWZ0ZXJfZGF5czsgb2Zmc2V0KysgKSB7XHJcblx0XHRcdFx0dGFyZ2V0X3NxbF9kYXRlID0gZGF0ZV90b19zcWwoIGFkZF9kYXlzKCBib29rZWRfZGF0ZSwgb2Zmc2V0ICkgKTtcclxuXHRcdFx0XHQkdGFyZ2V0X2NlbGwgPSBkYXRlX2NlbGxzWyB0YXJnZXRfc3FsX2RhdGUgXTtcclxuXHRcdFx0XHRpZiAoICR0YXJnZXRfY2VsbCAmJiAhICR0YXJnZXRfY2VsbC5oYXNDbGFzcyggJ2RhdGVfYXBwcm92ZWQnICkgJiYgISAkdGFyZ2V0X2NlbGwuaGFzQ2xhc3MoICdkYXRlMmFwcHJvdmUnICkgKSB7XHJcblx0XHRcdFx0XHRyZW1lbWJlcl9wcmV2aWV3X29yaWdpbiggJHRhcmdldF9jZWxsICk7XHJcblx0XHRcdFx0XHQkdGFyZ2V0X2NlbGwuYWRkQ2xhc3MoICdkYXRlX3VzZXJfdW5hdmFpbGFibGUgd3BiY19hZ19wcmV2aWV3X3VuYXZhaWxhYmxlIHdwYmNfYWdfcHJldmlld19idWZmZXJfdW5hdmFpbGFibGUgYnVmZmVyX3VuYXZhaWxhYmxlJyApO1xyXG5cdFx0XHRcdFx0JHRhcmdldF9jZWxsLmF0dHIoICdkYXRhLXdwYmMtYWctcHJldmlldy1yZWFzb24nLCAnd3BiY19hZ19wcmV2aWV3X2J1ZmZlcl91bmF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJlbWVtYmVyX3ByZXZpZXdfb3JpZ2luKCAkY2VsbCApIHtcclxuXHRcdGlmICggdHlwZW9mICRjZWxsLmF0dHIoICdkYXRhLXdwYmMtYWctb3JpZ2luYWwtZGF0ZS11c2VyLXVuYXZhaWxhYmxlJyApID09PSAndW5kZWZpbmVkJyApIHtcclxuXHRcdFx0JGNlbGwuYXR0ciggJ2RhdGEtd3BiYy1hZy1vcmlnaW5hbC1kYXRlLXVzZXItdW5hdmFpbGFibGUnLCAkY2VsbC5oYXNDbGFzcyggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZScgKSA/ICcxJyA6ICcwJyApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY2xlYXJfcHJldmlld19jZWxsKCAkY2VsbCApIHtcclxuXHRcdHZhciBoYWRfZGF0ZV91c2VyX3VuYXZhaWxhYmxlID0gJGNlbGwuYXR0ciggJ2RhdGEtd3BiYy1hZy1vcmlnaW5hbC1kYXRlLXVzZXItdW5hdmFpbGFibGUnICkgPT09ICcxJztcclxuXHJcblx0XHQkY2VsbC5yZW1vdmVDbGFzcyggcHJldmlld191bmF2YWlsYWJsZV9jbGFzc2VzICk7XHJcblx0XHQkY2VsbC5yZW1vdmVBdHRyKCAnZGF0YS13cGJjLWFnLXByZXZpZXctcmVhc29uJyApO1xyXG5cdFx0JGNlbGwucmVtb3ZlQXR0ciggJ2RhdGEtd3BiYy1hZy1vcmlnaW5hbC1kYXRlLXVzZXItdW5hdmFpbGFibGUnICk7XHJcblxyXG5cdFx0aWYgKCAhIGhhZF9kYXRlX3VzZXJfdW5hdmFpbGFibGUgKSB7XHJcblx0XHRcdCRjZWxsLnJlbW92ZUNsYXNzKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlJyApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlfY2FsZW5kYXJfcHJldmlldygpIHtcclxuXHRcdHZhciBzZXR0aW5ncyA9IGNvbGxlY3Rfc2V0dGluZ3MoKTtcclxuXHRcdHZhciB0b2RheV9kYXRlID0gZ2V0X3JlYWxfdG9kYXlfZGF0ZSgpO1xyXG5cdFx0dmFyIGF2YWlsYWJsZV9saW1pdCA9IGlzX2F2YWlsYWJsZV9saW1pdF9hdmFpbGFibGUoKSA/IHBhcnNlSW50KCBzZXR0aW5ncy5ib29raW5nX2F2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5IHx8ICcwJywgMTAgKSA6IDA7XHJcblx0XHR2YXIgJGNhbGVuZGFyID0gJCggJ1tkYXRhLXdwYmMtYWctY2FsZW5kYXItcGFuZWw9XCIxXCJdJyApO1xyXG5cclxuXHRcdHVwZGF0ZV93cGJjX3ByZXZpZXdfcGFyYW1zKCBzZXR0aW5ncyApO1xyXG5cdFx0dXBkYXRlX2J1ZmZlcl9wcmV2aWV3X25vdGUoIHNldHRpbmdzICk7XHJcblxyXG5cdFx0JGNhbGVuZGFyLmZpbmQoICcuZGF0ZXBpY2stZGF5cy1jZWxsJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyIGNlbGwgPSB0aGlzO1xyXG5cdFx0XHR2YXIgJGNlbGwgPSAkKCBjZWxsICk7XHJcblx0XHRcdHZhciBzcWxfZGF0ZSA9IGdldF9zcWxfZGF0ZV9mcm9tX2NlbGwoIGNlbGwgKTtcclxuXHRcdFx0dmFyIGNlbGxfZGF0ZSA9IGRhdGVfZnJvbV9zcWwoIHNxbF9kYXRlICk7XHJcblx0XHRcdHZhciBtYWtlX3VuYXZhaWxhYmxlID0gZmFsc2U7XHJcblx0XHRcdHZhciByZWFzb25fY2xhc3MgPSAnJztcclxuXHRcdFx0dmFyIHByZXZpb3VzX3JlYXNvbiA9ICRjZWxsLmF0dHIoICdkYXRhLXdwYmMtYWctcHJldmlldy1yZWFzb24nICkgfHwgJyc7XHJcblx0XHRcdHZhciBoYWRfZ2VuZXJhbF9wcmV2aWV3ID0gISEgcHJldmlvdXNfcmVhc29uIHx8ICRjZWxsLmhhc0NsYXNzKCAnd3BiY19hZ19wcmV2aWV3X3VuYXZhaWxhYmxlJyApIHx8ICRjZWxsLmhhc0NsYXNzKCAnd2Vla2RheV91bmF2YWlsYWJsZScgKSB8fCAkY2VsbC5oYXNDbGFzcyggJ2Zyb21fdG9kYXlfdW5hdmFpbGFibGUnICkgfHwgJGNlbGwuaGFzQ2xhc3MoICdsaW1pdF9hdmFpbGFibGVfZnJvbV90b2RheScgKSB8fCAkY2VsbC5oYXNDbGFzcyggJ2J1ZmZlcl91bmF2YWlsYWJsZScgKTtcclxuXHJcblx0XHRcdGlmICggISBjZWxsX2RhdGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHNldHRpbmdzLndlZWtkYXlzLmluZGV4T2YoIGNlbGxfZGF0ZS5nZXREYXkoKSApID4gLTEgKSB7XHJcblx0XHRcdFx0bWFrZV91bmF2YWlsYWJsZSA9IHRydWU7XHJcblx0XHRcdFx0cmVhc29uX2NsYXNzID0gJ3dwYmNfYWdfcHJldmlld193ZWVrZGF5X3VuYXZhaWxhYmxlJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCB1bmF2YWlsYWJsZV9mcm9tX3RvZGF5X2FwcGxpZXMoIGNlbGxfZGF0ZSwgdG9kYXlfZGF0ZSwgc2V0dGluZ3MuYm9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5ICkgKSB7XHJcblx0XHRcdFx0bWFrZV91bmF2YWlsYWJsZSA9IHRydWU7XHJcblx0XHRcdFx0cmVhc29uX2NsYXNzID0gJ3dwYmNfYWdfcHJldmlld19mcm9tX3RvZGF5X3VuYXZhaWxhYmxlJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBhdmFpbGFibGVfbGltaXQgPiAwICYmIGRheXNfYmV0d2VlbiggY2VsbF9kYXRlLCB0b2RheV9kYXRlICkgPj0gYXZhaWxhYmxlX2xpbWl0ICkge1xyXG5cdFx0XHRcdG1ha2VfdW5hdmFpbGFibGUgPSB0cnVlO1xyXG5cdFx0XHRcdHJlYXNvbl9jbGFzcyA9ICd3cGJjX2FnX3ByZXZpZXdfbGltaXRfYXZhaWxhYmxlX2Zyb21fdG9kYXknO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIG1ha2VfdW5hdmFpbGFibGUgKSB7XHJcblx0XHRcdFx0aWYgKCBwcmV2aW91c19yZWFzb24gIT09IHJlYXNvbl9jbGFzcyApIHtcclxuXHRcdFx0XHRcdGlmICggaGFkX2dlbmVyYWxfcHJldmlldyApIHtcclxuXHRcdFx0XHRcdFx0Y2xlYXJfcHJldmlld19jZWxsKCAkY2VsbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmVtZW1iZXJfcHJldmlld19vcmlnaW4oICRjZWxsICk7XHJcblx0XHRcdFx0XHQkY2VsbC5hZGRDbGFzcyggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZSB3cGJjX2FnX3ByZXZpZXdfdW5hdmFpbGFibGUgJyArIHJlYXNvbl9jbGFzcyApO1xyXG5cdFx0XHRcdFx0JGNlbGwuYXR0ciggJ2RhdGEtd3BiYy1hZy1wcmV2aWV3LXJlYXNvbicsIHJlYXNvbl9jbGFzcyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIGlmICggaGFkX2dlbmVyYWxfcHJldmlldyApIHtcclxuXHRcdFx0XHRjbGVhcl9wcmV2aWV3X2NlbGwoICRjZWxsICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHJcblx0XHRhcHBseV9idWZmZXJfZGF5c19wcmV2aWV3KCBzZXR0aW5ncyApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcXVldWVfcHJldmlld19yZWZyZXNoKCkge1xyXG5cdFx0aWYgKCBwcmV2aWV3X2ZyYW1lICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB3LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcclxuXHRcdFx0cHJldmlld19mcmFtZSA9IHcucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cHJldmlld19mcmFtZSA9IDA7XHJcblx0XHRcdFx0YXBwbHlfY2FsZW5kYXJfcHJldmlldygpO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRwcmV2aWV3X2ZyYW1lID0gdy5zZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cHJldmlld19mcmFtZSA9IDA7XHJcblx0XHRcdFx0YXBwbHlfY2FsZW5kYXJfcHJldmlldygpO1xyXG5cdFx0XHR9LCAwICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goIGRlbGF5ICkge1xyXG5cdFx0Y2xlYXJUaW1lb3V0KCBwcmV2aWV3X3RpbWVyICk7XHJcblx0XHRkZWxheSA9IHBhcnNlSW50KCBkZWxheSwgMTAgKSB8fCAwO1xyXG5cclxuXHRcdGlmICggZGVsYXkgPiAwICkge1xyXG5cdFx0XHRwcmV2aWV3X3RpbWVyID0gc2V0VGltZW91dCggcXVldWVfcHJldmlld19yZWZyZXNoLCBkZWxheSApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0cXVldWVfcHJldmlld19yZWZyZXNoKCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB1cGRhdGVfaGludHMoIGhpbnRzICkge1xyXG5cdFx0aWYgKCAhIGhpbnRzICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgaGludHMuYm9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5X19oaW50ICE9PSAndW5kZWZpbmVkJyApIHtcclxuXHRcdFx0JCggJ1tkYXRhLXdwYmMtYWctaGludD1cImJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheVwiXScgKS5odG1sKFxyXG5cdFx0XHRcdCc8c3BhbiBjbGFzcz1cIndwYmNfYWdfaGludF91bmF2YWlsYWJsZVwiPicgKyAkKCAnW2RhdGEtd3BiYy1hZy1oaW50PVwiYm9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5XCJdIC53cGJjX2FnX2hpbnRfdW5hdmFpbGFibGUnICkuZmlyc3QoKS50ZXh0KCkgKyAnPC9zcGFuPicgK1xyXG5cdFx0XHRcdGhpbnRzLmJvb2tpbmdfdW5hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheV9faGludFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdHlwZW9mIGhpbnRzLmJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlfX2hpbnQgIT09ICd1bmRlZmluZWQnICkge1xyXG5cdFx0XHQkKCAnW2RhdGEtd3BiYy1hZy1oaW50PVwiYm9va2luZ19hdmFpbGFibGVfZGF5c19udW1fZnJvbV90b2RheVwiXScgKS5odG1sKFxyXG5cdFx0XHRcdCc8c3BhbiBjbGFzcz1cIndwYmNfYWdfaGludF9hdmFpbGFibGVcIj4nICsgJCggJ1tkYXRhLXdwYmMtYWctaGludD1cImJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlcIl0gLndwYmNfYWdfaGludF9hdmFpbGFibGUnICkuZmlyc3QoKS50ZXh0KCkgKyAnPC9zcGFuPicgK1xyXG5cdFx0XHRcdGhpbnRzLmJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXlfX2hpbnRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNob3dfbWVzc2FnZSggbWVzc2FnZSwgdHlwZSwgZHVyYXRpb24gKSB7XHJcblx0XHRpZiAoIHR5cGVvZiB3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHR3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlKCBtZXNzYWdlLCB0eXBlIHx8ICdpbmZvJywgZHVyYXRpb24gfHwgMjAwMCwgZmFsc2UgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHcuYWxlcnQoIG1lc3NhZ2UgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldF9idXN5KCAkYnV0dG9uLCBidXN5ICkge1xyXG5cdFx0dmFyIGJ1c3lfdGV4dDtcclxuXHJcblx0XHRpZiAoICEgJGJ1dHRvbiB8fCAhICRidXR0b24ubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBidXN5ICkge1xyXG5cdFx0XHRpZiAoICEgJGJ1dHRvbi5kYXRhKCAnd3BiYy1hZy1vcmlnaW5hbC1odG1sJyApICkge1xyXG5cdFx0XHRcdCRidXR0b24uZGF0YSggJ3dwYmMtYWctb3JpZ2luYWwtaHRtbCcsICRidXR0b24uaHRtbCgpICk7XHJcblx0XHRcdH1cclxuXHRcdFx0YnVzeV90ZXh0ID0gJGJ1dHRvbi5kYXRhKCAnd3BiYy11LWJ1c3ktdGV4dCcgKSB8fCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmluZyApIHx8ICdTYXZpbmcuLi4nO1xyXG5cdFx0XHQkYnV0dG9uLmFkZENsYXNzKCAnd3BiY19hZ19pc19zYXZpbmcnICkuYXR0ciggJ2FyaWEtYnVzeScsICd0cnVlJyApLmh0bWwoICc8aSBjbGFzcz1cIm1lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX3JvdGF0ZV9yaWdodCB3cGJjX3NwaW5cIj48L2k+PHNwYW4gY2xhc3M9XCJpbi1idXR0b24tdGV4dFwiPiZuYnNwOyZuYnNwOycgKyBidXN5X3RleHQgKyAnPC9zcGFuPicgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCRidXR0b24ucmVtb3ZlQ2xhc3MoICd3cGJjX2FnX2lzX3NhdmluZycgKS5yZW1vdmVBdHRyKCAnYXJpYS1idXN5JyApO1xyXG5cdFx0XHRpZiAoICRidXR0b24uZGF0YSggJ3dwYmMtYWctb3JpZ2luYWwtaHRtbCcgKSApIHtcclxuXHRcdFx0XHQkYnV0dG9uLmh0bWwoICRidXR0b24uZGF0YSggJ3dwYmMtYWctb3JpZ2luYWwtaHRtbCcgKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZXBsYWNlX2NhbGVuZGFyX3BhbmVsKCBodG1sICkge1xyXG5cdFx0dmFyICRob2xkZXIgPSAkKCAnPGRpdiAvPicgKS5hcHBlbmQoICQucGFyc2VIVE1MKCBodG1sLCBkb2N1bWVudCwgdHJ1ZSApICk7XHJcblx0XHR2YXIgJG5ld19wYW5lbCA9ICRob2xkZXIuZmluZCggJ1tkYXRhLXdwYmMtYWctY2FsZW5kYXItcGFuZWw9XCIxXCJdJyApLmZpcnN0KCk7XHJcblx0XHR2YXIgJG9sZF9wYW5lbCA9ICQoICdbZGF0YS13cGJjLWFnLWNhbGVuZGFyLXBhbmVsPVwiMVwiXScgKS5maXJzdCgpO1xyXG5cdFx0dmFyICRzY3JpcHRzO1xyXG5cclxuXHRcdGlmICggISAkbmV3X3BhbmVsLmxlbmd0aCB8fCAhICRvbGRfcGFuZWwubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JHNjcmlwdHMgPSAkbmV3X3BhbmVsLmZpbmQoICdzY3JpcHQnICkucmVtb3ZlKCk7XHJcblx0XHQkb2xkX3BhbmVsLnJlcGxhY2VXaXRoKCAkbmV3X3BhbmVsICk7XHJcblxyXG5cdFx0JHNjcmlwdHMuZWFjaCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgY29kZSA9IHRoaXMudGV4dCB8fCB0aGlzLnRleHRDb250ZW50IHx8IHRoaXMuaW5uZXJIVE1MIHx8ICcnO1xyXG5cdFx0XHR2YXIgc3JjID0gdGhpcy5zcmMgfHwgJyc7XHJcblxyXG5cdFx0XHRpZiAoIHNyYyApIHtcclxuXHRcdFx0XHQkLmFqYXgoIHtcclxuXHRcdFx0XHRcdHVybDogc3JjLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxyXG5cdFx0XHRcdFx0Y2FjaGU6IHRydWVcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIGNvZGUgKSB7XHJcblx0XHRcdFx0JC5nbG9iYWxFdmFsKCBjb2RlICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldF9jYWxlbmRhcl9sb2FkaW5nKCBpc19sb2FkaW5nICkge1xyXG5cdFx0dmFyICRjYWxlbmRhciA9ICQoICdbZGF0YS13cGJjLWFnLWNhbGVuZGFyLXBhbmVsPVwiMVwiXScgKS5maXJzdCgpO1xyXG5cdFx0dmFyIGxvYWRpbmdfdGV4dCA9IGNmZy5pMThuICYmIGNmZy5pMThuLmxvYWRpbmcgPyBjZmcuaTE4bi5sb2FkaW5nIDogJ0xvYWRpbmcnO1xyXG5cdFx0dmFyICRsb2FkaW5nO1xyXG5cclxuXHRcdGlmICggISAkY2FsZW5kYXIubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpc19sb2FkaW5nICkge1xyXG5cdFx0XHQkbG9hZGluZyA9ICRjYWxlbmRhci5maW5kKCAnLndwYmNfY2FsZW5kYXJfbG9hZGluZycgKS5maXJzdCgpO1xyXG5cdFx0XHRpZiAoICEgJGxvYWRpbmcubGVuZ3RoICkge1xyXG5cdFx0XHRcdCRsb2FkaW5nID0gJChcclxuXHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiY19jYWxlbmRhcl9sb2FkaW5nIHdwYmNfYWdfY2FsZW5kYXJfbG9hZGluZ1wiPicgK1xyXG5cdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJ3cGJjX2ljbl9hdXRvcmVuZXcgd3BiY19zcGluXCI+PC9zcGFuPiZuYnNwOyZuYnNwOycgK1xyXG5cdFx0XHRcdFx0XHQnPHNwYW4+PC9zcGFuPicgK1xyXG5cdFx0XHRcdFx0JzwvZGl2PidcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdCRsb2FkaW5nLmZpbmQoICdzcGFuJyApLmxhc3QoKS50ZXh0KCBsb2FkaW5nX3RleHQgKyAnLi4uJyApO1xyXG5cdFx0XHRcdCRjYWxlbmRhci5hcHBlbmQoICRsb2FkaW5nICk7XHJcblx0XHRcdH1cclxuXHRcdFx0JGNhbGVuZGFyLmFkZENsYXNzKCAnaXMtbG9hZGluZycgKS5hdHRyKCAnYXJpYS1idXN5JywgJ3RydWUnICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQkY2FsZW5kYXIucmVtb3ZlQ2xhc3MoICdpcy1sb2FkaW5nJyApLnJlbW92ZUF0dHIoICdhcmlhLWJ1c3knICk7XHJcblx0XHRcdCRjYWxlbmRhci5maW5kKCAnLndwYmNfY2FsZW5kYXJfbG9hZGluZycgKS5yZW1vdmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9wcmV2aWV3X3BheWxvYWQoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRhY3Rpb246IGNmZy5wcmV2aWV3X2FjdGlvbiB8fCAnV1BCQ19BSlhfQVZBSUxBQklMSVRZX0dFTkVSQUxfUFJFVklFVycsXHJcblx0XHRcdG5vbmNlOiBjZmcubm9uY2UgfHwgJycsXHJcblx0XHRcdHJlc291cmNlX2lkOiAkKCAnI3dwYmNfYWdfcmVzb3VyY2VfaWQnICkudmFsKCkgfHwgJycsXHJcblx0XHRcdG1vbnRoc19jb3VudDogJCggJyN3cGJjX2FnX21vbnRoc19jb3VudCcgKS52YWwoKSB8fCAnJ1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGxvYWRfY2FsZW5kYXJfcHJldmlldygpIHtcclxuXHRcdHZhciAkY2FsZW5kYXIgPSAkKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHRcdHZhciBjdXJyZW50X3ByZXZpZXdfYWpheDtcclxuXHJcblx0XHRpZiAoICEgY2ZnLmFqYXhfdXJsICkge1xyXG5cdFx0XHRzaG93X21lc3NhZ2UoICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgKSB8fCAnVW5hYmxlIHRvIHJlZnJlc2ggY2FsZW5kYXIgcHJldmlldy4nLCAnZXJyb3InLCAxMDAwMCApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBwcmV2aWV3X2FqYXggJiYgcHJldmlld19hamF4LnJlYWR5U3RhdGUgIT09IDQgKSB7XHJcblx0XHRcdHByZXZpZXdfYWpheC5hYm9ydCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNldF9jYWxlbmRhcl9sb2FkaW5nKCB0cnVlICk7XHJcblxyXG5cdFx0Y3VycmVudF9wcmV2aWV3X2FqYXggPSAkLmFqYXgoIHtcclxuXHRcdFx0dXJsOiBjZmcuYWpheF91cmwsXHJcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRkYXRhOiBnZXRfcHJldmlld19wYXlsb2FkKClcclxuXHRcdH0gKTtcclxuXHRcdHByZXZpZXdfYWpheCA9IGN1cnJlbnRfcHJldmlld19hamF4O1xyXG5cclxuXHRcdGN1cnJlbnRfcHJldmlld19hamF4LmRvbmUoIGZ1bmN0aW9uICggcmVzcG9uc2UgKSB7XHJcblx0XHRcdGlmICggISByZXNwb25zZSB8fCAhIHJlc3BvbnNlLnN1Y2Nlc3MgfHwgISByZXNwb25zZS5kYXRhIHx8ICEgcmVzcG9uc2UuZGF0YS5odG1sICkge1xyXG5cdFx0XHRcdHNob3dfbWVzc2FnZSggKCByZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApIHx8ICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgKSB8fCAnVW5hYmxlIHRvIHJlZnJlc2ggY2FsZW5kYXIgcHJldmlldy4nLCAnZXJyb3InLCAxMDAwMCApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmVwbGFjZV9jYWxlbmRhcl9wYW5lbCggcmVzcG9uc2UuZGF0YS5odG1sICk7XHJcblx0XHRcdCQoICdbZGF0YS13cGJjLWFnLXBhZ2U9XCIxXCJdJyApLmF0dHIoICdkYXRhLXdwYmMtYWctcmVzb3VyY2UtaWQnLCByZXNwb25zZS5kYXRhLnJlc291cmNlX2lkIHx8ICcnICk7XHJcblx0XHRcdG9ic2VydmVfY2FsZW5kYXJfY2hhbmdlcygpO1xyXG5cdFx0XHRzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goKTtcclxuXHRcdFx0c2V0VGltZW91dCggc2NoZWR1bGVfcHJldmlld19yZWZyZXNoLCA2MDAgKTtcclxuXHRcdH0gKS5mYWlsKCBmdW5jdGlvbiAoIGpxX3hociwgdGV4dF9zdGF0dXMgKSB7XHJcblx0XHRcdGlmICggdGV4dF9zdGF0dXMgIT09ICdhYm9ydCcgKSB7XHJcblx0XHRcdFx0c2hvd19tZXNzYWdlKCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnByZXZpZXdfZmFpbGVkICkgfHwgJ1VuYWJsZSB0byByZWZyZXNoIGNhbGVuZGFyIHByZXZpZXcuJywgJ2Vycm9yJywgMTAwMDAgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSApLmFsd2F5cyggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAoIHByZXZpZXdfYWpheCA9PT0gY3VycmVudF9wcmV2aWV3X2FqYXggKSB7XHJcblx0XHRcdFx0c2V0X2NhbGVuZGFyX2xvYWRpbmcoIGZhbHNlICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoIGJ1dHRvbiApIHtcclxuXHRcdHZhciAkYnV0dG9uID0gJCggYnV0dG9uICk7XHJcblx0XHR2YXIgc2V0dGluZ3MgPSBjb2xsZWN0X3NldHRpbmdzKCk7XHJcblx0XHR2YXIgcGF5bG9hZCA9ICQuZXh0ZW5kKCB7fSwgc2V0dGluZ3MsIHtcclxuXHRcdFx0YWN0aW9uOiBjZmcuYWN0aW9uIHx8ICdXUEJDX0FKWF9BVkFJTEFCSUxJVFlfR0VORVJBTF9TQVZFJyxcclxuXHRcdFx0bm9uY2U6IGNmZy5ub25jZSB8fCAnJyxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9kYXlzOiBzZXR0aW5ncy53ZWVrZGF5c1xyXG5cdFx0fSApO1xyXG5cclxuXHRcdGFwcGVuZF93b3JraW5nX3RpbWVfcGF5bG9hZCggcGF5bG9hZCApO1xyXG5cclxuXHRcdGlmICggISBjZmcuYWpheF91cmwgKSB7XHJcblx0XHRcdHNob3dfbWVzc2FnZSggKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZlX2ZhaWxlZCApIHx8ICdVbmFibGUgdG8gc2F2ZSBnZW5lcmFsIGF2YWlsYWJpbGl0eSBzZXR0aW5ncy4nLCAnZXJyb3InLCAxMDAwMCApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0c2V0X2J1c3koICRidXR0b24sIHRydWUgKTtcclxuXHJcblx0XHQkLmFqYXgoIHtcclxuXHRcdFx0dXJsOiBjZmcuYWpheF91cmwsXHJcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRkYXRhOiBwYXlsb2FkXHJcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24gKCByZXNwb25zZSApIHtcclxuXHRcdFx0aWYgKCAhIHJlc3BvbnNlIHx8ICEgcmVzcG9uc2Uuc3VjY2VzcyApIHtcclxuXHRcdFx0XHRzaG93X21lc3NhZ2UoICggcmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLm1lc3NhZ2UgKSB8fCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmVfZmFpbGVkICkgfHwgJ1VuYWJsZSB0byBzYXZlIGdlbmVyYWwgYXZhaWxhYmlsaXR5IHNldHRpbmdzLicsICdlcnJvcicsIDEwMDAwICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5zZXR0aW5ncyAmJiByZXNwb25zZS5kYXRhLnNldHRpbmdzLmhpbnRzICkge1xyXG5cdFx0XHRcdHVwZGF0ZV9oaW50cyggcmVzcG9uc2UuZGF0YS5zZXR0aW5ncy5oaW50cyApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLnNldHRpbmdzICkge1xuXHRcdFx0XHRjZmcuc2V0dGluZ3MgPSByZXNwb25zZS5kYXRhLnNldHRpbmdzO1xuXHRcdFx0XHRpZiAoIHJlc3BvbnNlLmRhdGEuc2V0dGluZ3Mud29ya2luZ190aW1lICkge1xuXHRcdFx0XHRcdGFwcGx5X3dvcmtpbmdfdGltZV9zZXR0aW5nc190b19mb3JtKCByZXNwb25zZS5kYXRhLnNldHRpbmdzLndvcmtpbmdfdGltZSwgJCggJyN3cGJjX2FnX3Jlc291cmNlX2lkJyApLnZhbCgpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxyXG5cdFx0XHRsb2FkX2NhbGVuZGFyX3ByZXZpZXcoKTtcclxuXHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiYzphdmFpbGFiaWxpdHktZ2VuZXJhbDpzZXR0aW5ncy1zYXZlZCcsIHtcclxuXHRcdFx0XHRkZXRhaWw6IHtcclxuXHRcdFx0XHRcdHNldHRpbmdzOiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuc2V0dGluZ3MgPyByZXNwb25zZS5kYXRhLnNldHRpbmdzIDoge31cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKSApO1xyXG5cdFx0XHRzaG93X21lc3NhZ2UoICggcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLm1lc3NhZ2UgKSB8fCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmVkICkgfHwgJ0dlbmVyYWwgYXZhaWxhYmlsaXR5IHNldHRpbmdzIHVwZGF0ZWQuJywgJ3N1Y2Nlc3MnLCAyMDAwICk7XHJcblx0XHR9ICkuZmFpbCggZnVuY3Rpb24gKCBqcV94aHIgKSB7XG5cdFx0XHR2YXIgcmVzcG9uc2VfbWVzc2FnZSA9IGpxX3hociAmJiBqcV94aHIucmVzcG9uc2VKU09OICYmIGpxX3hoci5yZXNwb25zZUpTT04uZGF0YSAmJiBqcV94aHIucmVzcG9uc2VKU09OLmRhdGEubWVzc2FnZVxuXHRcdFx0XHQ/IGpxX3hoci5yZXNwb25zZUpTT04uZGF0YS5tZXNzYWdlXG5cdFx0XHRcdDogJyc7XG5cblx0XHRcdHNob3dfbWVzc2FnZSggcmVzcG9uc2VfbWVzc2FnZSB8fCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmVfZmFpbGVkICkgfHwgJ1VuYWJsZSB0byBzYXZlIGdlbmVyYWwgYXZhaWxhYmlsaXR5IHNldHRpbmdzLicsICdlcnJvcicsIDEwMDAwICk7XG5cdFx0fSApLmFsd2F5cyggZnVuY3Rpb24gKCkge1xuXHRcdFx0c2V0X2J1c3koICRidXR0b24sIGZhbHNlICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZXNldF9zZXR0aW5ncyggYnV0dG9uICkge1xyXG5cdFx0dmFyIGNvbmZpcm1fbWVzc2FnZSA9ICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ucmVzZXRfY29uZmlybSApIHx8ICdSZXNldCBnZW5lcmFsIGF2YWlsYWJpbGl0eSBzZXR0aW5ncyB0byBkZWZhdWx0IHZhbHVlcz8nO1xyXG5cdFx0dmFyIGRlZmF1bHRfc2V0dGluZ3MgPSBjZmcuZGVmYXVsdF9zZXR0aW5ncyB8fCB7XHJcblx0XHRcdHdlZWtkYXlzOiBbXSxcclxuXHRcdFx0Ym9va2luZ191bmF2YWlsYWJsZV9kYXlzX251bV9mcm9tX3RvZGF5OiAnMCcsXHJcblx0XHRcdGJvb2tpbmdfYXZhaWxhYmxlX2RheXNfbnVtX2Zyb21fdG9kYXk6ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2luX291dDogJycsXHJcblx0XHRcdGJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19pbjogJycsXHJcblx0XHRcdGJvb2tpbmdfdW5hdmFpbGFibGVfZXh0cmFfbWludXRlc19vdXQ6ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfaW46ICcnLFxyXG5cdFx0XHRib29raW5nX3VuYXZhaWxhYmxlX2V4dHJhX2RheXNfb3V0OiAnJyxcclxuXHRcdFx0d29ya2luZ190aW1lOiB7fVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoICEgdy5jb25maXJtKCBjb25maXJtX21lc3NhZ2UgKSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGFwcGx5X3NldHRpbmdzX3RvX2Zvcm0oIGRlZmF1bHRfc2V0dGluZ3MgKTtcclxuXHRcdGxvYWRfY2FsZW5kYXJfcHJldmlldygpO1xyXG5cdFx0c2hvd19tZXNzYWdlKCAoIGNmZy5pMThuICYmIGNmZy5pMThuLnJlc2V0X2FwcGxpZWQgKSB8fCAnRGVmYXVsdCBhdmFpbGFiaWxpdHkgc2V0dGluZ3MgYXJlIHJlYWR5IGZvciBwcmV2aWV3LiBDbGljayBTYXZlIENoYW5nZXMgdG8gYXBwbHkgdGhlbS4nLCAnc3VjY2VzcycsIDQwMDAgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIG9ic2VydmVfY2FsZW5kYXJfY2hhbmdlcygpIHtcclxuXHRcdHZhciB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1hZy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICk7XHJcblxyXG5cdFx0aWYgKCAhIHRhcmdldCB8fCAhIHcuTXV0YXRpb25PYnNlcnZlciApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggb2JzZXJ2ZXIgKSB7XHJcblx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHRcdH1cclxuXHJcblx0XHRvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCBzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2ggKTtcclxuXHRcdG9ic2VydmVyLm9ic2VydmUoIHRhcmdldCwge1xyXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXHJcblx0XHRcdHN1YnRyZWU6IHRydWVcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcud3BiY19hZ19yaWdodGJhcl90YWJzIFtyb2xlPVwidGFiXCJdJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0c3dpdGNoX3BhbmVsKCAkKCB0aGlzICkgKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcud3BiY19hZ19yaWdodGJhcl9wYW5lbHMgLmdyb3VwX19oZWFkZXInLCBmdW5jdGlvbiAoKSB7XHJcblx0XHR0b2dnbGVfZ3JvdXAoICQoIHRoaXMgKSApO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ3N1Ym1pdCcsICdbZGF0YS13cGJjLWFnLXByZXZpZXctdG9vbGJhcj1cIjFcIl0nLCBmdW5jdGlvbiAoIGV2ZW50ICkge1xyXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdGxvYWRfY2FsZW5kYXJfcHJldmlldygpO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcjd3BiY19hZ19yZXNvdXJjZV9pZCwgI3dwYmNfYWdfbW9udGhzX2NvdW50JywgbG9hZF9jYWxlbmRhcl9wcmV2aWV3ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnI3dwYmNfYWdfcmVzb3VyY2VfaWQnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRjZmcuc2V0dGluZ3MgPSBjZmcuc2V0dGluZ3MgfHwge307XHJcblx0XHRjZmcuc2V0dGluZ3Mud29ya2luZ190aW1lID0gZ2V0X3dvcmtpbmdfdGltZV9zZXR0aW5nc19mcm9tX2Zvcm0oKTtcclxuXHRcdGFwcGx5X3dvcmtpbmdfdGltZV9zZXR0aW5nc190b19mb3JtKCBjZmcuc2V0dGluZ3Mud29ya2luZ190aW1lLCAkKCB0aGlzICkudmFsKCkgKTtcclxuXHR9ICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdpbnB1dCBjaGFuZ2UnLCAnW2RhdGEtd3BiYy1hZy1yYW5nZS1mb3JdJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0c3luY19zZWxlY3RfZnJvbV9yYW5nZSggdGhpcyApO1xyXG5cdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XHJcblx0fSApO1xyXG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ1tkYXRhLXdwYmMtYWctc2V0dGluZ3MtZm9ybT1cIjFcIl0gc2VsZWN0JywgZnVuY3Rpb24gKCkge1xyXG5cdFx0c3luY19yYW5nZV9mcm9tX3NlbGVjdCggdGhpcyApO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJ1tkYXRhLXdwYmMtYWctc3RlcHBlcl0nLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRzdGVwX3NlbGVjdF92YWx1ZSggdGhpcyApO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdpbnB1dFtuYW1lPVwiYm9va2luZ191bmF2YWlsYWJsZV9leHRyYV9pbl9vdXRcIl0nLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZWZyZXNoX2J1ZmZlcl9maWVsZHMoKTtcclxuXHRcdHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCgpO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdpbnB1dFtuYW1lPVwiYm9va2luZ193b3JraW5nX3RpbWVfZW5hYmxlZFwiXScsIHJlZnJlc2hfd29ya2luZ190aW1lX3BhbmVscyApO1xyXG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ2lucHV0W25hbWU9XCJib29raW5nX3dvcmtpbmdfdGltZV9yZXNvdXJjZV9tb2RlXCJdJywgcmVmcmVzaF93b3JraW5nX3RpbWVfcGFuZWxzICk7XG5cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdbZGF0YS13cGJjLXdvcmtpbmctdGltZS1kYXktdG9nZ2xlPVwiMVwiXScsIGZ1bmN0aW9uICgpIHtcblx0XHRyZWZyZXNoX3dvcmtpbmdfdGltZV9kYXkoICQoIHRoaXMgKS5jbG9zZXN0KCAnW2RhdGEtd3BiYy13b3JraW5nLXRpbWUtZGF5XScgKSApO1xuXHR9ICk7XG5cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJ1tkYXRhLXdwYmMtYWRkLXdvcmtpbmctdGltZS1pbnRlcnZhbD1cIjFcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0YWRkX3dvcmtpbmdfdGltZV9pbnRlcnZhbCggdGhpcyApO1xuXHR9ICk7XG5cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJ1tkYXRhLXdwYmMtcmVtb3ZlLXdvcmtpbmctdGltZS1pbnRlcnZhbD1cIjFcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0cmVtb3ZlX3dvcmtpbmdfdGltZV9pbnRlcnZhbCggdGhpcyApO1xuXHR9ICk7XG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ1tkYXRhLXdwYmMtYWctc2V0dGluZ3MtZm9ybT1cIjFcIl0gaW5wdXQsIFtkYXRhLXdwYmMtYWctc2V0dGluZ3MtZm9ybT1cIjFcIl0gc2VsZWN0Jywgc2NoZWR1bGVfcHJldmlld19yZWZyZXNoICk7XHJcblxyXG5cdCQoIGRvY3VtZW50ICkub24oICdzdWJtaXQnLCAnW2RhdGEtd3BiYy1hZy1zZXR0aW5ncy1mb3JtPVwiMVwiXScsIGZ1bmN0aW9uICggZXZlbnQgKSB7XHJcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0c2F2ZV9zZXR0aW5ncyggJCggJ1tkYXRhLXdwYmMtYWctc2F2ZT1cIjFcIl0nICkuZmlyc3QoKSApO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJ1tkYXRhLXdwYmMtYWctc2F2ZT1cIjFcIl0nLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRzYXZlX3NldHRpbmdzKCB0aGlzICk7XHJcblx0fSApO1xyXG5cclxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnW2RhdGEtd3BiYy1hZy1yZXNldD1cIjFcIl0nLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXNldF9zZXR0aW5ncyggdGhpcyApO1xyXG5cdH0gKTtcclxuXHJcblx0JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24gKCkge1xyXG5cdFx0YXBwbHlfd29ya2luZ190aW1lX3NldHRpbmdzX3RvX2Zvcm0oICggY2ZnLnNldHRpbmdzICYmIGNmZy5zZXR0aW5ncy53b3JraW5nX3RpbWUgKSB8fCAoIGNmZy5kZWZhdWx0X3NldHRpbmdzICYmIGNmZy5kZWZhdWx0X3NldHRpbmdzLndvcmtpbmdfdGltZSApIHx8IHt9LCAkKCAnI3dwYmNfYWdfcmVzb3VyY2VfaWQnICkudmFsKCkgKTtcclxuXHRcdGFwcGx5X29wZW5fc2VjdGlvbl9mcm9tX3VybCgpO1xyXG5cdFx0cmVmcmVzaF9idWZmZXJfZmllbGRzKCk7XHJcblx0XHRzeW5jX2FsbF9yYW5nZXMoKTtcclxuXHRcdG9ic2VydmVfY2FsZW5kYXJfY2hhbmdlcygpO1xyXG5cdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XHJcblx0XHRzZXRUaW1lb3V0KCBzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2gsIDYwMCApO1xyXG5cdH0gKTtcclxufSggalF1ZXJ5LCB3aW5kb3cg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 | |