Skip to content

Instantly share code, notes, and snippets.

@Kookabura
Last active January 27, 2021 18:56
Show Gist options
  • Save Kookabura/d1afe0eb9d58c83ed12f2c2ed64453a5 to your computer and use it in GitHub Desktop.
Save Kookabura/d1afe0eb9d58c83ed12f2c2ed64453a5 to your computer and use it in GitHub Desktop.
gen.ru bundle
"use strict";
function _defineProperty(e, t, a) {
return t in e ? Object.defineProperty(e, t, {
value: a,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = a, e
}
function arraySum(e) {
for (var t = 0, a = 0; a < e.length; a++) t += Number(e[a]);
return t
}
function changeTextContent(e, t) {
$(e).text(t.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1 ")), $("<span />").text(" ₽").appendTo(e)
}
function takePrice(e) {
return e.textContent.replace(/[^0-9.]/gim, "")
}
function updateCartSubTotal(e, t) {
var o = [];
document.querySelectorAll(".cart-item-price").forEach(function(e) {
var t = e.getElementsByTagName("div"),
a = e.getElementsByTagName("span");
0 < t.length ? o.push(t[0].textContent.replace(/[^0-9.]/gim, "")) : o.push(a[0].textContent.replace(/[^0-9.]/gim, ""))
}), changeTextContent(e, arraySum(o).toFixed(t))
}
function updateCartEndTotal(e, t) {
var a = [];
document.querySelectorAll(".cart-item-price").forEach(function(e) {
var t = e.getElementsByTagName("span")[0];
a.push(t.textContent.replace(/[^0-9.]/gim, ""))
}), changeTextContent(e, arraySum(a).toFixed(t))
}
function updateCartTotal(e, a) {
var o = [];
document.querySelectorAll(".cart-item-price").forEach(function(e) {
var t = e.getElementsByTagName(a);
t && o.push(takePrice(t[0]))
}), changeTextContent(e, arraySum(o))
}
function createSale() {
var e = document.querySelector("#card_total_subtotal"),
t = document.querySelector("#card_total_endtotal");
changeTextContent($("#sale_price"), (takePrice(e) - takePrice(t)).toFixed(2))
}
function quantity(e) {
var t = e.value,
a = +$(".quantity-js").attr("data-min-order"),
o = /[-\.;":'a-zA-Zа-яА-Я]/;
o.test(t) && (t = t.replace(o, ""), e.value = t), e.value < a && (e.value = a), e.value % a != 0 && (e.value = a)
}
function remove_from_cart(e) {
var t = {
cart_item_id: e,
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "remove-from-cart?cart_item_id=" + e + "&form_lang_base_url=" + base_url + "&lang_folder=" + lang_folder,
data: t,
success: function() {}
})
}
function approve_order_product(a, e) {
var t;
swal((_defineProperty(t = {
text: e,
icon: "warning",
buttons: !0
}, "buttons", [sweetalert_cancel, sweetalert_ok]), _defineProperty(t, "dangerMode", !0), t)).then(function(e) {
var t;
e && ((t = {
order_product_id: a,
lang_folder: lang_folder
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "order_controller/approve_order_product_post",
data: t,
success: function() {
location.reload()
}
}))
})
}
function _defineProperty(e, t, a) {
return t in e ? Object.defineProperty(e, t, {
value: a,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = a, e
}
function delete_product_audio_preview(a, e) {
var t;
swal((_defineProperty(t = {
text: e,
icon: "warning",
buttons: !0
}, "buttons", [sweetalert_cancel, sweetalert_ok]), _defineProperty(t, "dangerMode", !0), t)).then(function(e) {
var t;
e && ((t = {
product_id: a
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
url: base_url + "file_controller/delete_audio",
type: "post",
data: t,
success: function(e) {
document.getElementById("audio_upload_result").innerHTML = e
}
}))
})
}
function delete_blog_comment(o, n, e) {
swal({
text: e,
icon: "warning",
buttons: !0,
dangerMode: !0
}).then(function(e) {
var t, a;
e && (t = parseInt($("#blog_comment_limit").val()), (a = {
comment_id: o,
post_id: n,
limit: t,
lang_folder: lang_folder
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "home_controller/delete_comment_post",
data: a
}).done(function(e) {
document.getElementById("comment-result").innerHTML = e
}))
})
}
function delete_comment(o, n, e) {
swal({
text: e,
icon: "warning",
buttons: !0,
dangerMode: !0
}).then(function(e) {
var t, a;
e && (t = parseInt($("#product_comment_limit").val()), (a = {
id: o,
product_id: n,
limit: t,
lang_folder: lang_folder
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "product_controller/delete_comment",
data: a
}).done(function(e) {
document.getElementById("comment-result").innerHTML = e
}))
})
}
function _defineProperty(e, t, a) {
return t in e ? Object.defineProperty(e, t, {
value: a,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = a, e
}
function delete_conversation(a, e) {
var t;
swal((_defineProperty(t = {
text: e,
icon: "warning",
buttons: !0
}, "buttons", [sweetalert_cancel, sweetalert_ok]), _defineProperty(t, "dangerMode", !0), t)).then(function(e) {
var t;
e && ((t = {
conversation_id: a,
lang_folder: lang_folder
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "message_controller/delete_conversation",
data: t
}).done(function(e) {
window.location.href = base_url + "messages"
}))
})
}
function _defineProperty(e, t, a) {
return t in e ? Object.defineProperty(e, t, {
value: a,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = a, e
}
function delete_product_digital_file(a, e) {
var t;
swal((_defineProperty(t = {
text: e,
icon: "warning",
buttons: !0
}, "buttons", [sweetalert_cancel, sweetalert_ok]), _defineProperty(t, "dangerMode", !0), t)).then(function(e) {
var t;
e && ((t = {
product_id: a
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
url: base_url + "file_controller/delete_digital_file",
type: "post",
data: t,
success: function(e) {
document.getElementById("digital_files_upload_result").innerHTML = e
}
}))
})
}
function _defineProperty(e, t, a) {
return t in e ? Object.defineProperty(e, t, {
value: a,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = a, e
}
function delete_draft(a, e) {
var t;
swal((_defineProperty(t = {
text: e,
icon: "warning",
buttons: !0
}, "buttons", [sweetalert_cancel, sweetalert_ok]), _defineProperty(t, "dangerMode", !0), t)).then(function(e) {
var t;
e && ((t = {
id: a
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "product_controller/delete_draft",
data: t
}).done(function(e) {
location.reload()
}))
})
}
function _defineProperty(e, t, a) {
return t in e ? Object.defineProperty(e, t, {
value: a,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = a, e
}
function delete_product(a, e) {
var t;
swal((_defineProperty(t = {
text: e,
icon: "warning",
buttons: !0
}, "buttons", [sweetalert_cancel, sweetalert_ok]), _defineProperty(t, "dangerMode", !0), t)).then(function(e) {
var t;
e && ((t = {
id: a
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "product_controller/delete_product",
data: t
}).done(function(e) {
location.reload()
}))
})
}
function delete_user_review(a, e) {
swal({
text: e,
icon: "warning",
buttons: !0,
dangerMode: !0
}).then(function(e) {
var t;
e && ((t = {
review_id: a,
lang_folder: lang_folder
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "ajax_controller/delete_user_review",
data: t
}).done(function(e) {
location.reload()
}))
})
}
function _defineProperty(e, t, a) {
return t in e ? Object.defineProperty(e, t, {
value: a,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = a, e
}
function delete_product_video_preview(a, e) {
var t;
swal((_defineProperty(t = {
text: e,
icon: "warning",
buttons: !0
}, "buttons", [sweetalert_cancel, sweetalert_ok]), _defineProperty(t, "dangerMode", !0), t)).then(function(e) {
var t;
e && ((t = {
product_id: a
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
url: base_url + "file_controller/delete_video",
type: "post",
data: t,
success: function(e) {
document.getElementById("video_upload_result").innerHTML = e
}
}))
})
}
function get_cities(e) {
var t = {
state_id: e,
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "product_controller/get_cities",
data: t,
success: function(e) {
$("#cities").children("option:not(:first)").remove(), $("#cities").append(e), update_product_map()
}
})
}
function get_states(e) {
var t = {
country_id: e,
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "product_controller/get_states",
data: t,
success: function(e) {
$("#states").children("option:not(:first)").remove(), $("#cities").children("option:not(:first)").remove(), $("#states").append(e), update_product_map()
}
})
}
function hide_cookies_warning() {
$(".cookies-warning").hide();
var e = {};
e[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "home_controller/cookies_warning",
data: e,
success: function() {}
})
}
function load_more_blog_comment(e) {
var t = {
post_id: e,
limit: parseInt($("#blog_comment_limit").val()),
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $("#load_comment_spinner").show(), $.ajax({
method: "POST",
url: base_url + "home_controller/load_more_comment",
data: t
}).done(function(e) {
setTimeout(function() {
$("#load_comment_spinner").hide(), document.getElementById("comment-result").innerHTML = e
}, 1e3)
})
}
function load_more_comment(e) {
var t = {
product_id: e,
limit: parseInt($("#product_comment_limit").val()),
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $("#load_comment_spinner").show(), $.ajax({
method: "POST",
url: base_url + "product_controller/load_more_comment",
data: t
}).done(function(e) {
setTimeout(function() {
$("#load_comment_spinner").hide(), document.getElementById("comment-result").innerHTML = e
}, 1e3)
})
}
function load_more_user_review(e) {
var t = {
seller_id: e,
limit: parseInt($("#user_review_limit").val()),
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $("#load_review_spinner").show(), $.ajax({
method: "POST",
url: base_url + "ajax_controller/load_more_user_review",
data: t
}).done(function(e) {
setTimeout(function() {
$("#load_review_spinner").hide(), document.getElementById("user-review-result").innerHTML = e
}, 1e3)
})
}
function set_product_as_sold(e) {
var t = {
product_id: e
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "product_controller/set_product_as_sold",
data: t
}).done(function(e) {
location.reload()
})
}
function load_more_review(e) {
var t = {
product_id: e,
limit: parseInt($("#product_review_limit").val()),
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $("#load_review_spinner").show(), $.ajax({
method: "POST",
url: base_url + "product_controller/load_more_review",
data: t
}).done(function(e) {
setTimeout(function() {
$("#load_review_spinner").hide(), document.getElementById("review-result").innerHTML = e
}, 1e3)
})
}
function delete_review(o, n, r, e) {
swal({
text: e,
icon: "warning",
buttons: !0,
dangerMode: !0
}).then(function(e) {
var t, a;
e && (t = parseInt($("#product_review_limit").val()), (a = {
id: o,
product_id: n,
user_id: r,
limit: t,
lang_folder: lang_folder
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
method: "POST",
url: base_url + "product_controller/delete_review",
data: a
}).done(function(e) {
document.getElementById("review-result").innerHTML = e, $(".input-images").imageUploader({
imagesInputName: "rphotos",
preloadedInputName: "old",
maxSize: 2097152,
maxFiles: 5,
label: "Нажмите или перетащите фото в это поле",
extensions: [".jpg", ".jpeg", ".png", ".gif", ".svg", ".PNG"]
})
}))
})
}
function send_message_as_email(e, t, a) {
var o = {
receiver_id: e,
message_subject: t,
message_text: a,
lang_folder: lang_folder
};
o[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "ajax_controller/send_email_new_message",
data: o,
success: function() {}
})
}
function show_comment_box(t) {
$(".visible-sub-comment").empty();
var e = parseInt($("#product_comment_limit").val()),
a = {
comment_id: t,
limit: e,
lang_folder: lang_folder
};
a[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "product_controller/load_subcomment_box",
data: a,
success: function(e) {
$("#sub_comment_form_" + t).append(e)
}
})
}
function show_subcategories_by_parent_id(e) {
$("#subcategory_dropdown select").find("option:not(:first)").remove(), $("#third_category_dropdown select").find("option:not(:first)").remove(), $("#subcategory_dropdown").hide(), $("#third_category_dropdown").hide(), $(".category-option-" + e)[0] && ($(".category-option-" + e).each(function() {
var e = $(this).attr("data-id"),
t = $(this).attr("data-name");
$("#subcategory_dropdown select").append('<option value="' + e + '">' + t + "</option>")
}), $("#subcategory_dropdown select").val(""), $("#third_category_dropdown select").val(""), $("#subcategory_dropdown").show())
}
function show_third_categories_by_parent_id(e) {
$("#third_category_dropdown select").find("option:not(:first)").remove(), $("#third_category_dropdown").hide(), $(".category-option-" + e)[0] && ($(".category-option-" + e).each(function() {
var e = $(this).attr("data-id"),
t = $(this).attr("data-name");
$("#third_category_dropdown select").append('<option value="' + e + '">' + t + "</option>")
}), $("#third_category_dropdown").show(), $("#third_category_dropdown select").val(""))
}
function update_product_map() {
var e = {
country_text: $("#countries").find("option:selected").text(),
country_val: $("#countries").find("option:selected").val(),
state_text: $("#states").find("option:selected").text(),
state_val: $("#states").find("option:selected").val(),
address: $("#address_input").val(),
zip_code: $("#zip_code_input").val(),
lang_folder: lang_folder
};
e[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "product_controller/show_address_on_map",
data: e,
success: function(e) {
document.getElementById("map-result").innerHTML = e
}
})
}
$(document).on("click", "#submit_user_review", function() {
var e = $.trim($("#user_rating").val()),
t = $.trim($("#user_review").val()),
a = $.trim($("#review_seller_id").val()),
o = parseInt($("#user_review_limit").val());
if (!e) return $(".rating-stars").addClass("invalid-rating"), !1;
$(".rating-stars").removeClass("invalid-rating");
var n = {
review: t,
rating: e,
seller_id: a,
limit: o,
lang_folder: lang_folder
};
n[csfr_token_name] = $.cookie(csfr_cookie_name), $("#submit_user_review").prop("disabled", !0), $.ajax({
type: "POST",
url: base_url + "ajax_controller/add_user_review",
data: n,
success: function(e) {
$("#submit_user_review").prop("disabled", !1), "voted_error" == e ? $(".error-reviewed").show() : location.reload()
}
})
}), $(document).on("input paste focus", "#input_search", function(e) {
var t = $(".search_type_input").val(),
a = $(this).val();
if ("paste" != e.type && a.length < 2) return $("#response_search_results").hide(), !1;
var o = {
search_type: t,
input_value: a
};
o[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "ajax_controller/ajax_search",
data: o,
success: function(e) {
var t = JSON.parse(e);
1 == t.result && (document.getElementById("response_search_results").innerHTML = t.response, $("#response_search_results").show()), $("#response_search_results ul li a").wrapInTag({
words: [a]
})
}
})
}), $(document).on("click", function(e) {
0 === $(e.target).closest(".top-search-bar").length && $("#response_search_results").hide()
}), $(document).ready(function() {
var c;
$("#make_blog_comment_registered").submit(function(e) {
if (e.preventDefault(), $.trim($("#comment_text").val()).length < 1) return $("#comment_text").addClass("is-invalid"), !1;
$("#comment_text").removeClass("is-invalid"), c && c.abort();
var t = $(this),
a = t.find("input, select, button, textarea"),
o = parseInt($("#blog_comment_limit").val()),
n = t.serializeArray();
n.push({
name: csfr_token_name,
value: $.cookie(csfr_cookie_name)
}), n.push({
name: "lang_folder",
value: lang_folder
}), n.push({
name: "limit",
value: o
}), a.prop("disabled", !0), (c = $.ajax({
url: base_url + "home_controller/add_comment_post",
type: "post",
data: n
})).done(function(e) {
a.prop("disabled", !1), document.getElementById("comment-result").innerHTML = e, $("#make_blog_comment_registered")[0].reset()
})
}), $("#make_blog_comment").submit(function(e) {
e.preventDefault();
var t = $.trim($("#comment_name").val()),
a = $.trim($("#comment_email").val()),
o = $.trim($("#comment_text").val());
if (t.length < 1) return $("#comment_name").addClass("is-invalid"), !1;
if ($("#comment_name").removeClass("is-invalid"), a.length < 1) return $("#comment_email").addClass("is-invalid"), !1;
if ($("#comment_email").removeClass("is-invalid"), o.length < 1) return $("#comment_text").addClass("is-invalid"), !1;
$("#comment_text").removeClass("is-invalid"), c && c.abort();
var n = $(this),
r = n.find("input, select, button, textarea"),
i = parseInt($("#blog_comment_limit").val()),
s = n.serializeArray();
s.push({
name: csfr_token_name,
value: $.cookie(csfr_cookie_name)
}), s.push({
name: "limit",
value: i
}), s.push({
name: "lang_folder",
value: lang_folder
});
var l = !0;
1 == is_recaptcha_enabled && $(s).each(function(e, t) {
"g-recaptcha-response" == t.name && "" == t.value && ($(".g-recaptcha").addClass("is-recaptcha-invalid"), l = !1)
}), 1 == l && ($(".g-recaptcha").removeClass("is-recaptcha-invalid"), r.prop("disabled", !0), (c = $.ajax({
url: base_url + "home_controller/add_comment_post",
type: "post",
data: s
})).done(function(e) {
r.prop("disabled", !1), 1 == is_recaptcha_enabled && grecaptcha.reset(), document.getElementById("comment-result").innerHTML = e, $("#make_blog_comment")[0].reset()
}))
})
}), $(document).ready(function() {
var e = $(".bonus__green"),
t = $(".bonus__blue"),
a = $(".bonus__purple"),
o = $(".bonus__orange");
e.hasClass("bonus__active") ? e.addClass("bonus__secondrow") : e.addClass("bonus__none"), t.hasClass("bonus__active") ? t.addClass("bonus__thirdrow") : t.addClass("bonus__none"), a.hasClass("bonus__active") ? a.addClass("bonus__fourthrow") : a.addClass("bonus__none"), o.hasClass("bonus__active") ? o.addClass("bonus__fifthrow") : o.addClass("bonus__none")
}), $(document).on("click", ".item-favorite-button", function() {
var e, t = $(this).attr("data-product-id"),
a = Number($(".notification-bookmark").html());
$(this).hasClass("item-favorite-enable") && ($(this).hasClass("item-favorited") ? ($(this).removeClass("item-favorited"), $(".notification-bookmark").html(a - 1)) : ($(this).addClass("item-favorited"), $(".notification-bookmark").html(a + 1)), (e = {
product_id: t
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "product_controller/add_remove_favorite_ajax",
data: e,
success: function() {}
}))
}), $(document).on("click", ".btn-favorite", function() {
var e, t = $(this).attr("data-product-id"),
a = Number($(".notification-bookmark").html());
$(this).hasClass("btn-favorite") && ($(".btn-favorite i").hasClass("icon-heart") ? ($(".btn-favorite").html('<i class="icon-heart-o"></i>В избранное'), $(".notification-bookmark").html(a - 1)) : ($(".btn-favorite").html('<i class="icon-heart"></i>В избранном'), $(".notification-bookmark").html(a + 1)), (e = {
product_id: t
})[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "product_controller/add_remove_favorite_ajax",
data: e,
success: function() {}
}))
}), $(document).on("click", ".btn-cart-product-quantity-item", function() {
var e = $(this).val(),
t = {
product_id: $(this).attr("data-product-id"),
quantity: e,
lang_folder: lang_folder
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "cart_controller/update_cart_product_quantity",
data: t,
success: function() {
location.reload()
}
})
}), $(document).ready(function() {
$("#use_same_address_for_billing").change(function() {
$(this).is(":checked") ? $(".cart-form-billing-address").hide() : $(".cart-form-billing-address").show()
})
}), $(document).on("change", "#ckMultifileupload", function() {
var e = document.getElementById("ckMultifileupload");
if ("undefined" != typeof FileReader) {
var a = document.getElementById("ckMultidvPreview");
a.innerHTML = "";
for (var t = 0; t < e.files.length; t++) {
var o = e.files[t],
n = new FileReader;
n.onload = function(e) {
var t = document.createElement("IMG");
t.src = e.target.result, t.id = "Multifileupload_image", a.appendChild(t), $("#Multifileupload_button").show()
}, n.readAsDataURL(o)
}
} else alert("This browser does not support HTML5 FileReader.")
}), $(document).on("click", ".btn-delete-product-img", function() {
var e = {
file_id: $(this).attr("data-file-id")
};
e[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "file_controller/delete_image",
data: e,
success: function() {
location.reload()
}
})
}), $(document).on("click", ".btn-delete-product-img-session", function() {
var e = $(this).attr("data-file-id"),
t = {
file_id: e
};
t[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "file_controller/delete_image_session",
data: t,
success: function() {
$("#uploaderFile" + e).remove()
}
})
}), $(document).ready(function() {
function a() {
$(".popup").removeClass("popup--active")
}
function o() {
$(".popup").addClass("popup--active"), $(".popup__close").click(function(e) {
a()
}), $(document).keydown(function(e) {
27 != e.keyCode || $(".input-group input").is(":focus") || a()
}), $(document).mousedown(function(e) {
var t = $(".popup__content");
t.is(e.target) || 0 !== t.has(e.target).length || a()
})
}
$(".popup__content-mapjs").ready(function() {
var e;
0 != $(".map-trigger").length && (e = $(".map-trigger").attr("data-url"), $(".popup__content-wrapper").load("" + e), $(".map-trigger").parent().on("click", function(e) {
o()
}))
}), $(".popup-trigger").click(function(e) {
var t = $(this).attr("data-product-url");
o(), $(".popup__content-wrapper").append('<div class="popup__pre"></div>'), $(".popup__content-wrapper").load("" + t), $("#slider-package__list").trigger("destroy.owl.carousel"), $("#slider-package__list").owlCarousel({
autoplay: !1,
dots: !1,
loop: !($(".owl-carousel > .item").length <= 2),
responsive: {
577: {
items: 1
},
993: {
items: 2
}
}
})
}), $("body").on("click", ".test_button", function() {
$(".popup").removeClass("popup--active"), $("#pickup-point").prop("checked", !0)
})
}), $(document).on("click", "#btn_load_more_promoted", function() {
$("#load_promoted_spinner").show();
var e = $("#input_promoted_products_limit").val(),
t = $("#input_promoted_products_per_page").val(),
a = $("#input_promoted_products_count").val(),
o = parseInt(e) + parseInt(t),
n = {
limit: e,
lang_folder: lang_folder
};
n[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "home_controller/load_more_promoted_products",
data: n,
success: function(e) {
$("#input_promoted_products_limit").val(o), setTimeout(function() {
$("#load_promoted_spinner").hide(), $("#row_promoted_products").append(e), a <= o && $("#btn_load_more_promoted").hide()
}, 700)
}
})
}), $(document).ready(function() {
$("#form_login").submit(function(e) {
var t, a = $(this);
!1 === a[0].checkValidity() ? (e.preventDefault(), e.stopPropagation()) : (e.preventDefault(), a.find("input, select, button, textarea"), (t = a.serializeArray()).push({
name: csfr_token_name,
value: $.cookie(csfr_cookie_name)
}), $.ajax({
url: base_url + "auth_controller/login_post",
type: "post",
data: t,
success: function(e) {
var t = JSON.parse(e);
1 == t.result ? location.reload() : 0 == t.result && (document.getElementById("result-login").innerHTML = t.error_message)
}
})), a[0].classList.add("was-validated")
})
}), $(document).ready(function(e) {
e(".image-popup").magnificPopup({
type: "image",
titleSrc: function(e) {
return e.el.attr("title") + "<small></small>"
},
image: {
verticalFit: !0
},
gallery: {
enabled: !0,
navigateByImgClick: !0,
preload: [0, 1]
},
removalDelay: 100,
fixedContentPos: !0
})
}), $(document).on("click", ".btn-subcomment-registered", function() {
var t = $(this).attr("data-comment-id"),
e = {
lang_folder: lang_folder
};
e[csfr_token_name] = $.cookie(csfr_cookie_name), $("#make_subcomment_registered_" + t).ajaxSubmit({
beforeSubmit: function() {
var e = $("#make_subcomment_registered_" + t).serializeArray();
if ($.trim(e[0].value).length < 1) return $(".form-comment-text").addClass("is-invalid"), !1;
$(".form-comment-text").removeClass("is-invalid")
},
type: "POST",
url: base_url + "product_controller/make_comment",
data: e,
success: function(e) {
document.getElementById("comment-result").innerHTML = e
}
})
}), $(document).on("click", ".btn-subcomment", function() {
var r = $(this).attr("data-comment-id"),
e = {
lang_folder: lang_folder
};
e[csfr_token_name] = $.cookie(csfr_cookie_name), $("#make_subcomment_" + r).ajaxSubmit({
beforeSubmit: function() {
var e, t = $("#make_subcomment_" + r).serializeArray(),
a = $.trim(t[0].value),
o = $.trim(t[1].value),
n = $.trim(t[2].value);
if (1 == is_recaptcha_enabled && (e = $.trim(t[3].value)), a.length < 1) return $(".form-comment-name").addClass("is-invalid"), !1;
if ($(".form-comment-name").removeClass("is-invalid"), o.length < 1) return $(".form-comment-email").addClass("is-invalid"), !1;
if ($(".form-comment-email").removeClass("is-invalid"), n.length < 1) return $(".form-comment-text").addClass("is-invalid"), !1;
if ($(".form-comment-text").removeClass("is-invalid"), 1 == is_recaptcha_enabled) {
if ("" == e) return $("#make_subcomment_" + r + " .g-recaptcha").addClass("is-recaptcha-invalid"), !1;
$("#make_subcomment_" + r + " .g-recaptcha").removeClass("is-recaptcha-invalid")
}
},
type: "POST",
url: base_url + "product_controller/make_comment",
data: e,
success: function(e) {
1 == is_recaptcha_enabled && grecaptcha.reset(), document.getElementById("comment-result").innerHTML = e
}
})
}), $(".mega-menu .nav-item").hover(function() {
var e = $(this).attr("data-category-id");
$("#mega_menu_content_" + e).show(), $(".large-menu-item").removeClass("active"), $(".large-menu-item-first").addClass("active"), $(".large-menu-content-first").addClass("active")
}, function() {
var e = $(this).attr("data-category-id");
$("#mega_menu_content_" + e).hide()
}), $(".mega-menu .dropdown-menu").hover(function() {
$(this).show()
}, function() {}), $(".large-menu-item").hover(function() {
var e = $(this).attr("data-subcategory-id");
$(".large-menu-item").removeClass("active"), $(this).addClass("active"), $(".large-menu-content").removeClass("active"), $("#large_menu_content_" + e).addClass("active")
}, function() {}), $(function() {
$(".slider-custom-scrollbar").niceScroll({
cursorcolor: "transparent",
cursorborder: "0"
}), $(".filter-custom-scrollbar").niceScroll({
cursorcolor: "#c2c2c2",
autohidemode: !1
}), $(".messages-sidebar").niceScroll({
cursorcolor: "#c2c2c2",
autohidemode: !1
})
}), 0 < $(".message-custom-scrollbar").length && ($(".message-custom-scrollbar").niceScroll({
cursorcolor: "#c2c2c2",
autohidemode: !1
}), $(".message-custom-scrollbar").scrollTop($(".message-custom-scrollbar").get(0).scrollHeight, -1)), $(document).ready(function() {
$("#main-slider").owlCarousel({
autoplay: !0,
loop: !($(".owl-carousel > .item").length <= 2),
lazyLoad: !0,
slideSpeed: 3e3,
paginationSpeed: 1e3,
items: 1,
dots: !0,
nav: !0,
navText: ["<i class='icon-arrow-slider-left random-arrow-prev' aria-hidden='true'></i>", "<i class='icon-arrow-slider-right random-arrow-next' aria-hidden='true'></i>"],
itemsDesktop: !1,
itemsDesktopSmall: !1,
itemsTablet: !1,
itemsMobile: !1
}), $("#product-slider").owlCarousel({
items: 1,
autoplay: !1,
nav: !0,
loop: !($(".owl-carousel > .item").length <= 2),
navText: ["<i class='icon-arrow-slider-left random-arrow-prev' aria-hidden='true'></i>", "<i class='icon-arrow-slider-right random-arrow-next' aria-hidden='true'></i>"],
dotsContainer: ".dots-container"
}), $("#slider-package__list").owlCarousel({
autoplay: !1,
dots: !1,
loop: !($(".owl-carousel > .item").length <= 2),
responsive: {
0: {
items: 3
},
577: {
items: 4
},
768: {
items: 3
},
993: {
items: 4
}
}
}), $("#slider-package__list-mobile").owlCarousel({
autoplay: !1,
dots: !1,
loop: !($(".owl-carousel > .item").length <= 2),
responsive: {
0: {
items: 3
},
577: {
items: 4
},
768: {
items: 3
},
993: {
items: 4
}
}
}), $("#slider-print__list").owlCarousel({
autoplay: !1,
dots: !1,
loop: !($(".owl-carousel > .item").length <= 2),
responsive: {
0: {
items: 2
},
577: {
items: 3
},
993: {
items: 4
},
1440: {
items: 4
}
}
}), $("#slider-seen__list").owlCarousel({
autoplay: !1,
dots: !1,
loop: !($(".owl-carousel > .item").length <= 2),
responsive: {
0: {
items: 2
},
577: {
items: 3
},
993: {
items: 4
},
1440: {
items: 4
}
}
}), $("#blog-slider").owlCarousel({
autoplay: !0,
loop: !0,
margin: 20,
nav: !0,
lazyLoad: !0,
navText: ["<i class='icon-arrow-slider-left random-arrow-prev' aria-hidden='true'></i>", "<i class='icon-arrow-slider-right random-arrow-next' aria-hidden='true'></i>"],
responsive: {
0: {
items: 1
},
600: {
items: 2
},
1e3: {
items: 3
}
}
}), $(document).on("click", ".rating-stars .label-star", function() {
$("#user_rating").val($(this).attr("data-star"))
}), $(document).on("click", ".btn-open-mobile-nav", function() {
document.getElementById("navMobile").style.width = "100%", $("html").addClass("disable-body-scroll"), $("body").addClass("disable-body-scroll")
}), $(document).on("click", ".btn-close-mobile-nav", function() {
document.getElementById("navMobile").style.width = "0", $("html").removeClass("disable-body-scroll"), $("body").removeClass("disable-body-scroll")
}), $(document).on("click", ".close-mobile-nav", function() {
document.getElementById("navMobile").style.width = "0"
}), $("#loginModal").on("hidden.bs.modal", function() {
$("body").hasClass("disable-body-scroll") && ($("html").removeClass("disable-body-scroll"), $("body").removeClass("disable-body-scroll"))
})
}), $(".price-input").keypress(function(e) {
var t, a;
"undefined" == typeof thousands_separator && (thousands_separator = "."), "." == thousands_separator ? (t = $(this), 46 == e.which && -1 == t.val().indexOf(".") || !(e.which < 48 || 57 < e.which) || 0 == e.which || 8 == e.which || e.preventDefault(), -1 != (a = $(this).val()).indexOf(".") && 2 < a.substring(a.indexOf(".")).length && 0 != e.which && 8 != e.which && $(this)[0].selectionStart >= a.length - 2 && e.preventDefault()) : (t = $(this), 44 == e.which && -1 == t.val().indexOf(",") || !(e.which < 48 || 57 < e.which) || 0 == e.which || 8 == e.which || e.preventDefault(), -1 != (a = $(this).val()).indexOf(",") && 2 < a.substring(a.indexOf(",")).length && 0 != e.which && 8 != e.which && $(this)[0].selectionStart >= a.length - 2 && e.preventDefault())
}), $(document).ready(function() {
$("iframe").attr("allowfullscreen", "")
}), $(document).ready(function() {
var c;
$("#make_comment_registered").submit(function(e) {
if (e.preventDefault(), $.trim($("#comment_text").val()).length < 1) return $("#comment_text").addClass("is-invalid"), !1;
$("#comment_text").removeClass("is-invalid"), c && c.abort();
var t = $(this),
a = t.find("input, select, button, textarea"),
o = parseInt($("#product_comment_limit").val()),
n = t.serializeArray();
n.push({
name: csfr_token_name,
value: $.cookie(csfr_cookie_name)
}), n.push({
name: "lang_folder",
value: lang_folder
}), n.push({
name: "limit",
value: o
}), a.prop("disabled", !0), (c = $.ajax({
url: base_url + "product_controller/make_comment",
type: "post",
data: n
})).done(function(e) {
a.prop("disabled", !1), document.getElementById("comment-result").innerHTML = e, $("#make_comment_registered")[0].reset()
})
}), $("#make_comment").submit(function(e) {
e.preventDefault();
var t = $.trim($("#comment_name").val()),
a = $.trim($("#comment_email").val()),
o = $.trim($("#comment_text").val());
if (t.length < 1) return $("#comment_name").addClass("is-invalid"), !1;
if ($("#comment_name").removeClass("is-invalid"), a.length < 1) return $("#comment_email").addClass("is-invalid"), !1;
if ($("#comment_email").removeClass("is-invalid"), o.length < 1) return $("#comment_text").addClass("is-invalid"), !1;
$("#comment_text").removeClass("is-invalid"), c && c.abort();
var n = $(this),
r = n.find("input, select, button, textarea"),
i = parseInt($("#product_comment_limit").val()),
s = n.serializeArray();
s.push({
name: csfr_token_name,
value: $.cookie(csfr_cookie_name)
}), s.push({
name: "lang_folder",
value: lang_folder
}), s.push({
name: "limit",
value: i
});
var l = !0;
1 == is_recaptcha_enabled && $(s).each(function(e, t) {
"g-recaptcha-response" == t.name && "" == t.value && ($(".g-recaptcha").addClass("is-recaptcha-invalid"), l = !1)
}), 1 == l && ($(".g-recaptcha").removeClass("is-recaptcha-invalid"), r.prop("disabled", !0), (c = $.ajax({
url: base_url + "product_controller/make_comment",
type: "post",
data: s
})).done(function(e) {
r.prop("disabled", !1), 1 == is_recaptcha_enabled && grecaptcha.reset(), document.getElementById("comment-result").innerHTML = e, $("#make_comment")[0].reset()
}))
})
}), $("#form-product-filters input[name=form_lang_base_url]").remove(), $("#form-product-filters input[name=lang_folder]").remove(), $("#form-collection-filters input[name=form_lang_base_url]").remove(), $("#form-collection-filters input[name=lang_folder]").remove(), $("#form-remove-from-cart input[name=form_lang_base_url]").remove(), $("#form-remove-from-cart input[name=lang_folder]").remove(), $(".item-quick-button").click(function() {
var i, s;
$("span").hasClass("new_price") ? (s = $(this).parent().siblings(".item-details").children(".item-meta").children(".new_price").children('meta[itemprop="price"]').attr("content"), i = $(this).parent().siblings(".item-details").children(".item-meta").children(".old_price").children('meta[itemprop="price"]').attr("content")) : s = $(this).parent().siblings(".item-details").children(".item-meta").children(".price").children('meta[itemprop="price"]').attr("content"), $(document).on("change", "#quantity_touchspin", function() {
var e, t, a = $(".product-content-details").children(".row-custom.price").children("span.price"),
o = $(".row-custom.price").children("span.new_price"),
n = $(".row-custom.price").children("span.old_price"),
r = $("#quantity_touchspin").val();
s.hasClass(s) ? (e = s * r, a.html(e + "<span>₽</span>")) : (e = (s * r).toFixed(2), t = i * r, o.html(e + "<span>₽</span>"), n.html(t + "<span>₽</span>"))
})
}), $(document).ready(function() {
var a = $('meta[itemprop="price"]').attr("content"),
o = $(".old_price").children('meta[itemprop="price"]').attr("content"),
e = $("#quantity_touchspin").attr("data-max-quantity"),
n = $(".product-content-details").children(".row-custom.price").children("span.price"),
r = $(".product-content-details").children(".row-custom.price").children("span.new_price"),
i = $(".product-content-details").children(".row-custom.price").children("span.old_price"),
t = +$("#quantity_touchspin").attr("data-min-order") || 1;
$("#quantity_touchspin").val(t);
function s() {
var e, t;
$(".row-custom.price span").hasClass("price") ? (e = a * c, n.html(e + " <span>₽</span>")) : (e = (a * c).toFixed(2), t = o * c, r.html(e + "<span>₽</span>"), i.html(t + " <span>₽</span>"))
}
function l() {
$("#quantity_touchspin").val(c), s()
}
var c = t;
$($("#quantity_touchspin")).on("change", function() {
$("#quantity_touchspin").val() % t != 0 || $("#quantity_touchspin").val() > e || 0 == $("#quantity_touchspin").val() ? l() : (c = +$("#quantity_touchspin").val(), s())
}), $(".input-group-prepend .bootstrap-touchspin-down").on("mousedown", function() {
if (1 == t) {
if (!(c <= t)) return;
l()
} else c <= t || (c -= t), l()
}), $(".input-group-append .bootstrap-touchspin-up").on("mousedown", function() {
1 != t && (c += t, l())
}), s()
}), $(document).on("click", "#submit_review", function() {
if (!$.trim($("#user_rating").val())) return $(".rating-stars").addClass("invalid-rating"), !1;
$(".rating-stars").removeClass("invalid-rating");
for (var e = new FormData, t = document.getElementById("rphotos").files.length, a = 0; a < t; a++) console.log(111), e.append("rphotos[]", document.getElementById("rphotos").files[a]);
e.append("rating", $.trim($("#user_rating").val())), e.append("review", $.trim($("#user_review").val())), e.append("product_id", $.trim($("#review_product_id").val())), e.append("lang_folder", lang_folder), e.append(csfr_token_name, $.cookie(csfr_cookie_name)), $("#submit_review").prop("disabled", !0), $.ajax({
type: "POST",
url: base_url + "product_controller/make_review",
data: e,
contentType: !1,
processData: !1,
success: function(e) {
$("#submit_review").prop("disabled", !1), "voted_error" == e ? $(".error-reviewed").show() : "error_own_product" == e ? $(".error-own-product").show() : (document.getElementById("review-result").innerHTML = e, $("a.thumbnail").click(function(e) {
e.preventDefault(), $("#image-modal .modal-body img").attr("src", $(this).find("img").attr("src")), $("#image-modal").modal("show")
}), $("#image-modal .modal-body img").on("click", function() {
$("#image-modal").modal("hide")
}))
}
})
}), $("#form_send_message").submit(function(e) {
e.preventDefault();
var t = $("#message_subject").val(),
a = $("#message_text").val(),
o = $("#message_receiver_id").val(),
n = $("#message_send_em").val();
if (t.length < 1) return $("#message_subject").addClass("is-invalid"), !1;
if ($("#message_subject").removeClass("is-invalid"), a.length < 1) return $("#message_text").addClass("is-invalid"), !1;
$("#message_text").removeClass("is-invalid");
var r = $(this),
i = r.find("input, select, button, textarea"),
s = r.serializeArray();
s.push({
name: csfr_token_name,
value: $.cookie(csfr_cookie_name)
}), s.push({
name: "lang_folder",
value: lang_folder
}), i.prop("disabled", !0), $.ajax({
url: base_url + "message_controller/add_conversation",
type: "post",
data: s,
success: function(e) {
i.prop("disabled", !1), document.getElementById("send-message-result").innerHTML = e, $("#form_send_message")[0].reset(), n && send_message_as_email(o, t, a)
}
})
}), $(document).on("click", ".btn-set-image-main", function() {
var e = {
image_id: $(this).attr("data-image-id"),
product_id: $(this).attr("data-product-id")
};
$(".badge-is-image-main").removeClass("badge-success"), $(".badge-is-image-main").addClass("badge-secondary"), $(this).removeClass("badge-secondary"), $(this).addClass("badge-success"), e[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "file_controller/set_image_main",
data: e,
success: function() {}
})
}), $(document).on("click", ".btn-set-image-main-session", function() {
var e = {
file_id: $(this).attr("data-file-id")
};
$(".badge-is-image-main").removeClass("badge-success"), $(".badge-is-image-main").addClass("badge-secondary"), $(this).removeClass("badge-secondary"), $(this).addClass("badge-success"), e[csfr_token_name] = $.cookie(csfr_cookie_name), $.ajax({
type: "POST",
url: base_url + "file_controller/set_image_main_session",
data: e,
success: function() {}
})
}), $(document).on("click", "#show_phone_number", function() {
$(this).hide(), $("#phone_number").show()
}), $("form").submit(function() {
$("input[name='" + csfr_token_name + "']").val($.cookie(csfr_cookie_name))
}), $(document).on("change", "#address_input", function() {
update_product_map()
}), $(document).on("change", "#zip_code_input", function() {
update_product_map()
}), $("#form_validate").submit(function() {
$(".custom-control-validate-input").removeClass("custom-control-validate-error"), setTimeout(function() {
$(".custom-control-validate-input .error").each(function() {
var e = $(this).attr("name");
$(this).is(":visible") && (e = e.replace("[]", ""), $(".label_validate_" + e).addClass("custom-control-validate-error"))
})
}, 100)
}), $(".custom-control-validate-input input").click(function() {
var e = (e = $(this).attr("name")).replace("[]", "");
$(".label_validate_" + e).removeClass("custom-control-validate-error")
}), $("#form_validate").validate(), $("#form_validate_search").validate(), $("#form_validate_search_mobile").validate(), $("#form_validate_payout_1").validate(), $("#form_validate_payout_2").validate(), $("#form_validate_payout_3").validate(), $("#form_validate_newsletter").validate(), $("#form_add_cart").validate(), $("#form_add_cart_mobile").validate(), $("#form_add_cart").submit(function() {
$("#form_add_cart .custom-control-variation input").each(function() {
var e;
$(this).hasClass("error") ? (e = $(this).attr("id"), $("#form_add_cart .custom-control-variation label").each(function() {
$(this).attr("for") == e && $(this).addClass("is-invalid")
})) : (e = $(this).attr("id"), $("#form_add_cart .custom-control-variation label").each(function() {
$(this).attr("for") == e && $(this).removeClass("is-invalid")
}))
})
}), $("#form_add_cart_mobile").submit(function() {
$("#form_add_cart_mobile .custom-control-variation input").each(function() {
var e;
$(this).hasClass("error") ? (e = $(this).attr("id"), $("#form_add_cart_mobile .custom-control-variation label").each(function() {
$(this).attr("for") == e && $(this).addClass("is-invalid")
})) : (e = $(this).attr("id"), $("#form_add_cart_mobile .custom-control-variation label").each(function() {
$(this).attr("for") == e && $(this).removeClass("is-invalid")
}))
})
}), $(document).on("click", ".custom-control-variation input", function() {
var e = $(this).attr("name");
$(".custom-control-variation label").each(function() {
$(this).attr("data-input-name") == e && $(this).removeClass("is-invalid")
})
}), $(document).ready(function() {
$(".validate_terms").submit(function(e) {
$(".custom-control-validate-input input").is(":checked") ? $(".custom-control-validate-input").removeClass("custom-control-validate-error") : (e.preventDefault(), $(".custom-control-validate-input").addClass("custom-control-validate-error"))
})
}), $(document).on("input keyup paste change", ".validate_price .price-input", function() {
var e = (e = $(this).val()).replace(",", ".");
$.isNumeric(e) && 0 != e ? $(this).removeClass("is-invalid") : $(this).addClass("is-invalid")
}), $("input[type=radio][name=product_type]").change(function() {
"digital" == this.value ? ($(".listing_ordinary_listing").hide(), $(".listing_take_offers").hide(), $(".listing_sell_on_site input").prop("checked", !0)) : ($(".listing_ordinary_listing").show(), $(".listing_take_offers").show())
}), $(document).ready(function() {
$(".validate_price").submit(function(t) {
$(".validate_price .validate-price-input").each(function() {
var e = $(this).val();
"" != e && (e = e.replace(",", "."), $.isNumeric(e) && 0 != e ? $(this).removeClass("is-invalid") : (t.preventDefault(), $(this).addClass("is-invalid"), $(this).focus()))
})
})
}), $.fn.wrapInTag = function(t) {
var e = t.tag || "strong",
a = t.words || [],
o = RegExp(a.join("|"), "gi"),
n = "<" + e + ">$&</" + e + ">";
$(this).contents().each(function() {
var e;
3 === this.nodeType ? $(this).replaceWith(((e = this).textContent ? e.textContent : e.innerText).replace(o, n)) : t.ignoreChildNodes || $(this).wrapInTag(t)
})
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNhcnQuanMiLCJkZWxldGVfYXVkaW9fcHJldmlldy5qcyIsImRlbGV0ZV9ibG9nX2NvbW1lbnQuanMiLCJkZWxldGVfY29tbWVudC5qcyIsImRlbGV0ZV9jb252ZXJzYXRpb24uanMiLCJkZWxldGVfZGlnaXRhbF9maWxlLmpzIiwiZGVsZXRlX2RyYWZ0LmpzIiwiZGVsZXRlX3Byb2R1Y3QuanMiLCJkZWxldGVfdXNlcl9yZXZpZXcuanMiLCJkZWxldGVfdmlkZW9fcHJldmlldy5qcyIsImdldF9jaXRpZXMuanMiLCJnZXRfc3RhdGVzLmpzIiwiaGlkZV9jb29raWUuanMiLCJsb2FkX21vcmVfYmxvZ19jb21tZW50cy5qcyIsImxvYWRfbW9yZV9jb21tZW50LmpzIiwibG9hZF9tb3JlX3VzZXJfcmV2aWV3LmpzIiwicHJvZHVjdF9zb2xkLmpzIiwicmV2aWV3LmpzIiwic2VuZF9tZXNzYWdlLmpzIiwic2hvd19jb21tZW50X2JveC5qcyIsInNob3dfc3ViY2F0ZWdvcmllcy5qcyIsInNob3dfdGhpcmRfY2F0ZWdvcmllcy5qcyIsInVwZGF0ZV9wcm9kdWN0X21hcC5qcyIsImFkZF91c2VyX3Jldmlldy5qcyIsImFqYXhfc2VhcmNoLmpzIiwiYmxvZ19jb21tZW50cy5qcyIsImJvbnVzLmpzIiwiYm9va21hcmtzLmpzIiwiY2tfbXVsdGlmaWxlX3VwbG9hZC5qcyIsImRlbGV0ZV9wcm9kdWN0X2ltZy5qcyIsImRlbGV0ZV9wcm9kdWN0X2ltZ19zZXNzaW9uLmpzIiwiZmFuY3lib3hfaWZyYW1lX3BvcHVwLmpzIiwibG9hZF9tb3JlLmpzIiwibG9naW4uanMiLCJtYWduaWZpY19wb3B1cC5qcyIsIm1ha2VfcmVnX3N1YmNvbW1lbnQuanMiLCJtYWtlX3N1YmNvbW1lbnQuanMiLCJtZWdhX21lbnUuanMiLCJuaWNlX3Njcm9sbC5qcyIsIm93bC1jYXJvdXNlbC5qcyIsInByaWNlX2lucHV0LmpzIiwicHJvZHVjdF9jb21tZW50cy5qcyIsInByb2R1Y3RfZmlsdGVyc19yZW1vdmUuanMiLCJxdWFudGl0eV9zZWxlY3RfcHJvZHVjdC5qcyIsInNldF9tYWluX2ltZy5qcyIsInNldF9tYWluX2ltZ19zZXNzaW9uLmpzIiwic2hvd19waG9uZS5qcyIsInVwZGF0ZV9jb29ja2llLmpzIiwidmFsaWRhdGUuanMiLCJ3cmFwX2luX3RhZy5qcyJdLCJuYW1lcyI6WyJhcnJheVN1bSIsImFycmF5Iiwic3VtIiwiaSIsImxlbmd0aCIsIk51bWJlciIsImNoYW5nZVRleHRDb250ZW50IiwiYmxvY2siLCJhcmciLCIkIiwidGV4dCIsInRvU3RyaW5nIiwicmVwbGFjZSIsImFwcGVuZFRvIiwidGFrZVByaWNlIiwidGV4dENvbnRlbnQiLCJ1cGRhdGVDYXJ0U3ViVG90YWwiLCJkaWdpdCIsInN1bUFycmF5IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsIml0ZW0iLCJwcmljZU1haW5JdGVtIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwcmljZVNhbGVJdGVtIiwicHVzaCIsInRvRml4ZWQiLCJ1cGRhdGVDYXJ0RW5kVG90YWwiLCJwcmljZUl0ZW0iLCJ1cGRhdGVDYXJ0VG90YWwiLCJ0YWciLCJjcmVhdGVTYWxlIiwic3ViIiwicXVlcnlTZWxlY3RvciIsImVuZCIsInF1YW50aXR5IiwiaW5wdXQiLCJ2YWx1ZSIsIm1pblF1YW50aXR5IiwiYXR0ciIsInJlcCIsInRlc3QiLCJyZW1vdmVfZnJvbV9jYXJ0IiwiY2FydF9pdGVtX2lkIiwiZGF0YSIsImxhbmdfZm9sZGVyIiwiY3Nmcl90b2tlbl9uYW1lIiwiY29va2llIiwiY3Nmcl9jb29raWVfbmFtZSIsImFqYXgiLCJ0eXBlIiwidXJsIiwiYmFzZV91cmwiLCJzdWNjZXNzIiwiYXBwcm92ZV9vcmRlcl9wcm9kdWN0IiwiaWQiLCJtZXNzYWdlIiwiX3N3YWwiLCJzd2FsIiwiX2RlZmluZVByb3BlcnR5IiwiaWNvbiIsImJ1dHRvbnMiLCJzd2VldGFsZXJ0X2NhbmNlbCIsInN3ZWV0YWxlcnRfb2siLCJ0aGVuIiwiYXBwcm92ZSIsIm9yZGVyX3Byb2R1Y3RfaWQiLCJsb2NhdGlvbiIsInJlbG9hZCIsImRlbGV0ZV9wcm9kdWN0X2F1ZGlvX3ByZXZpZXciLCJwcm9kdWN0X2lkIiwid2lsbERlbGV0ZSIsInJlc3BvbnNlIiwiZ2V0RWxlbWVudEJ5SWQiLCJpbm5lckhUTUwiLCJkZWxldGVfYmxvZ19jb21tZW50IiwiY29tbWVudF9pZCIsInBvc3RfaWQiLCJkYW5nZXJNb2RlIiwibGltaXQiLCJwYXJzZUludCIsInZhbCIsIm1ldGhvZCIsImRvbmUiLCJkZWxldGVfY29tbWVudCIsImRlbGV0ZV9jb252ZXJzYXRpb24iLCJjb252ZXJzYXRpb25faWQiLCJ3aW5kb3ciLCJocmVmIiwiZGVsZXRlX3Byb2R1Y3RfZGlnaXRhbF9maWxlIiwiZGVsZXRlX2RyYWZ0IiwiZGVsZXRlX3Byb2R1Y3QiLCJkZWxldGVfdXNlcl9yZXZpZXciLCJyZXZpZXdfaWQiLCJkZWxldGVfcHJvZHVjdF92aWRlb19wcmV2aWV3IiwiZ2V0X2NpdGllcyIsInN0YXRlX2lkIiwiY2hpbGRyZW4iLCJyZW1vdmUiLCJhcHBlbmQiLCJ1cGRhdGVfcHJvZHVjdF9tYXAiLCJnZXRfc3RhdGVzIiwiY291bnRyeV9pZCIsImhpZGVfY29va2llc193YXJuaW5nIiwiaGlkZSIsImxvYWRfbW9yZV9ibG9nX2NvbW1lbnQiLCJzaG93Iiwic2V0VGltZW91dCIsImxvYWRfbW9yZV9jb21tZW50IiwibG9hZF9tb3JlX3VzZXJfcmV2aWV3Iiwic2VsbGVyX2lkIiwic2V0X3Byb2R1Y3RfYXNfc29sZCIsImxvYWRfbW9yZV9yZXZpZXciLCJkZWxldGVfcmV2aWV3IiwidXNlcl9pZCIsImltYWdlVXBsb2FkZXIiLCJpbWFnZXNJbnB1dE5hbWUiLCJwcmVsb2FkZWRJbnB1dE5hbWUiLCJtYXhTaXplIiwibWF4RmlsZXMiLCJsYWJlbCIsImV4dGVuc2lvbnMiLCJzZW5kX21lc3NhZ2VfYXNfZW1haWwiLCJtZXNzYWdlX3JlY2VpdmVyX2lkIiwibWVzc2FnZV9zdWJqZWN0IiwibWVzc2FnZV90ZXh0IiwicmVjZWl2ZXJfaWQiLCJzaG93X2NvbW1lbnRfYm94IiwiZW1wdHkiLCJzaG93X3N1YmNhdGVnb3JpZXNfYnlfcGFyZW50X2lkIiwicGFyZW50X2lkIiwiZmluZCIsImVhY2giLCJvcF92YWwiLCJ0aGlzIiwib3BfdGV4dCIsInNob3dfdGhpcmRfY2F0ZWdvcmllc19ieV9wYXJlbnRfaWQiLCJjb3VudHJ5X3RleHQiLCJjb3VudHJ5X3ZhbCIsInN0YXRlX3RleHQiLCJzdGF0ZV92YWwiLCJhZGRyZXNzIiwiemlwX2NvZGUiLCJvbiIsInVzZXJfcmF0aW5nIiwidHJpbSIsInVzZXJfcmV2aWV3IiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInJldmlldyIsInJhdGluZyIsInByb3AiLCJldmVudCIsInNlYXJjaF90eXBlIiwiaW5wdXRfdmFsdWUiLCJvYmoiLCJKU09OIiwicGFyc2UiLCJyZXN1bHQiLCJ3cmFwSW5UYWciLCJ3b3JkcyIsImUiLCJ0YXJnZXQiLCJjbG9zZXN0IiwicmVhZHkiLCJyZXF1ZXN0Iiwic3VibWl0IiwicHJldmVudERlZmF1bHQiLCJhYm9ydCIsIiRmb3JtIiwiJGlucHV0cyIsInNlcmlhbGl6ZWREYXRhIiwic2VyaWFsaXplQXJyYXkiLCJuYW1lIiwicmVzZXQiLCJjb21tZW50X25hbWUiLCJjb21tZW50X2VtYWlsIiwiY29tbWVudF90ZXh0IiwicmVjYXB0Y2hhX3N0YXR1cyIsImlzX3JlY2FwdGNoYV9lbmFibGVkIiwiZmllbGQiLCJncmVjYXB0Y2hhIiwiZ3JlZW4iLCJibHVlIiwicHVycGxlIiwib3JhbmdlIiwiaGFzQ2xhc3MiLCJjb3VudEJvb2ttYXJrIiwiaHRtbCIsImNoYW5nZSIsImlzIiwiTXVsdGlmaWxlVXBsb2FkIiwiRmlsZVJlYWRlciIsIk11bHRpZHZQcmV2aWV3IiwiZmlsZXMiLCJmaWxlIiwicmVhZGVyIiwib25sb2FkIiwiaW1nIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsImFwcGVuZENoaWxkIiwicmVhZEFzRGF0YVVSTCIsImFsZXJ0IiwiZmlsZV9pZCIsImNsb3NlUG9wdXAiLCJwb3B1cEFjdGlvbnMiLCJjbGljayIsInQiLCJrZXlkb3duIiwia2V5Q29kZSIsIm1vdXNlZG93biIsImNvbnRhaW5lciIsImhhcyIsIm4iLCJsb2FkIiwicGFyZW50IiwidHJpZ2dlciIsIm93bENhcm91c2VsIiwiYXV0b3BsYXkiLCJkb3RzIiwibG9vcCIsInJlc3BvbnNpdmUiLCI1NzciLCJpdGVtcyIsIjk5MyIsInBlcl9wYWdlIiwicHJvbW90ZWRfcHJvZHVjdHNfY291bnQiLCJuZXdfbGltaXQiLCJmb3JtIiwiY2hlY2tWYWxpZGl0eSIsInN0b3BQcm9wYWdhdGlvbiIsImVycm9yX21lc3NhZ2UiLCJjbGFzc0xpc3QiLCJhZGQiLCJiIiwibWFnbmlmaWNQb3B1cCIsInRpdGxlU3JjIiwiYSIsImVsIiwiaW1hZ2UiLCJ2ZXJ0aWNhbEZpdCIsImdhbGxlcnkiLCJlbmFibGVkIiwibmF2aWdhdGVCeUltZ0NsaWNrIiwicHJlbG9hZCIsInJlbW92YWxEZWxheSIsImZpeGVkQ29udGVudFBvcyIsImFqYXhTdWJtaXQiLCJiZWZvcmVTdWJtaXQiLCJyZWNhcHRjaGEiLCJlbWFpbCIsImNvbW1lbnQiLCJob3ZlciIsIm1lbnVfaWQiLCJuaWNlU2Nyb2xsIiwiY3Vyc29yY29sb3IiLCJjdXJzb3Jib3JkZXIiLCJhdXRvaGlkZW1vZGUiLCJzY3JvbGxUb3AiLCJnZXQiLCJzY3JvbGxIZWlnaHQiLCJsYXp5TG9hZCIsInNsaWRlU3BlZWQiLCJwYWdpbmF0aW9uU3BlZWQiLCJuYXYiLCJuYXZUZXh0IiwiaXRlbXNEZXNrdG9wIiwiaXRlbXNEZXNrdG9wU21hbGwiLCJpdGVtc1RhYmxldCIsIml0ZW1zTW9iaWxlIiwiZG90c0NvbnRhaW5lciIsIjAiLCI3NjgiLCIxNDQwIiwibWFyZ2luIiwiNjAwIiwiMTAwMCIsInN0eWxlIiwid2lkdGgiLCJrZXlwcmVzcyIsIiR0aGlzIiwidGhvdXNhbmRzX3NlcGFyYXRvciIsIndoaWNoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInNlbGVjdGlvblN0YXJ0Iiwib2xkUHJpY2UiLCJwcmljZSIsInNpYmxpbmdzIiwidG90YWxQcmljZSIsIm9sZFRvdGFsUHJpY2UiLCJwcmljZUZpZWxkIiwibmV3UHJpY2VGaWVsZCIsIm9sZFByaWNlRmllbGQiLCJtYXhRdWFudGl0eSIsIm1pbk9yZGVyUXVhbnRpdHkiLCJkZWZpbmVQcmljZSIsInJlc2V0UHJpY2UiLCJmZCIsIkZvcm1EYXRhIiwidG90YWxmaWxlcyIsImluZGV4IiwiY29uc29sZSIsImxvZyIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJtb2RhbCIsIm1lc3NhZ2Vfc2VuZF9lbSIsImltYWdlX2lkIiwidmFsaWRhdGUiLCJpc051bWVyaWMiLCJmb2N1cyIsImZuIiwib3B0cyIsInJlZ2V4IiwiUmVnRXhwIiwiam9pbiIsInJlcGxhY2VtZW50IiwiY29udGVudHMiLCJub2RlVHlwZSIsInJlcGxhY2VXaXRoIiwiaW5uZXJUZXh0IiwiaWdub3JlQ2hpbGROb2RlcyJdLCJtYXBwaW5ncyI6Im1KQUFBLFNBQVNBLFNBQVNDLEdBRWQsSUFEQSxJQUFJQyxFQUFNLEVBQ0ZDLEVBQUksRUFBR0EsRUFBSUYsRUFBTUcsT0FBUUQsSUFDN0JELEdBQU9HLE9BQU9KLEVBQU1FLElBRXhCLE9BQU9ELEVBRVgsU0FBU0ksa0JBQWtCQyxFQUFPQyxHQUM5QkMsRUFBRUYsR0FBT0csS0FBS0YsRUFBSUcsV0FBV0MsUUFBUSwwQkFBMkIsUUFDaEVILEVBQUUsWUFBWUMsS0FBSyxNQUFNRyxTQUFTTixHQUd0QyxTQUFTTyxVQUFVUCxHQUNoQixPQUFRQSxFQUFNUSxZQUFZSCxRQUFRLGFBQWEsSUFHbEQsU0FBU0ksbUJBQW1CVCxFQUFPVSxHQUMvQixJQUFJQyxFQUFXLEdBQ0ZDLFNBQVNDLGlCQUFpQixvQkFDaENDLFFBQVEsU0FBVUMsR0FDckIsSUFBSUMsRUFBZ0JELEVBQUtFLHFCQUFxQixPQUMxQ0MsRUFBZ0JILEVBQUtFLHFCQUFxQixRQUNuQixF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VWtKLE1BQU0sV0FDZDVKLEVBQUUsbUJBQW1COEosT0FBTyxTQUFVTCxHQUNsQ3pKLEVBQUUseUNBQXlDNEgsS0FBSyxXQUM1QyxJQUFJbkQsRUFBTXpFLEVBQUU4SCxNQUFNckQsTUFDUCxJQUFQQSxJQUNBQSxFQUFNQSxFQUFJdEUsUUFBUSxJQUFLLEtBQ25CSCxFQUFFK1MsVUFBVXRPLElBQWUsR0FBUEEsRUFDcEJ6RSxFQUFFOEgsTUFBTWMsWUFBWSxlQUVwQmEsRUFBRU0saUJBQ0YvSixFQUFFOEgsTUFBTWEsU0FBUyxjQUNqQjNJLEVBQUU4SCxNQUFNa0wsZ0JDekg1QmhULEVBQUVpVCxHQUFHMUosVUFBWSxTQUFVMkosR0FLdkIsSUFBSTVSLEVBQU00UixFQUFLNVIsS0FBTyxTQUNsQmtJLEVBQVEwSixFQUFLMUosT0FBUyxHQUN0QjJKLEVBQVFDLE9BQU81SixFQUFNNkosS0FBSyxLQUFNLE1BQ2hDQyxFQUFjLElBQU1oUyxFQUFNLFFBQVVBLEVBQU0sSUFDOUN0QixFQUFFOEgsTUFBTXlMLFdBQVczTCxLQUFLLFdBUnhCLElBQWlCdUIsRUFTUyxJQUFsQnJCLEtBQUswTCxTQUNMeFQsRUFBRThILE1BQU0yTCxjQVZDdEssRUFVbUJyQixNQVRyQnhILFlBQWM2SSxFQUFJN0ksWUFBYzZJLEVBQUl1SyxXQVNUdlQsUUFBUWdULEVBQU9HLElBQ3pDSixFQUFLUyxrQkFDYjNULEVBQUU4SCxNQUFNeUIsVUFBVTJKIiwiZmlsZSI6ImJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGFycmF5U3VtKGFycmF5KXtcbiAgICB2YXIgc3VtID0gMDtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspe1xuICAgICAgICBzdW0gKz0gTnVtYmVyKGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cbmZ1bmN0aW9uIGNoYW5nZVRleHRDb250ZW50KGJsb2NrLCBhcmcpIHtcbiAgICAkKGJsb2NrKS50ZXh0KGFyZy50b1N0cmluZygpLnJlcGxhY2UoLyhcXGQpKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJyQxICcpKTtcbiAgICAkKCc8c3BhbiAvPicpLnRleHQoJyDigr0nKS5hcHBlbmRUbyhibG9jayk7XG59XG5cbmZ1bmN0aW9uIHRha2VQcmljZShibG9jaykge1xuICAgcmV0dXJuICBibG9jay50ZXh0Q29udGVudC5yZXBsYWNlKC9bXjAtOS5dL2dpbSwnJylcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FydFN1YlRvdGFsKGJsb2NrLCBkaWdpdCkge1xuICAgIHZhciBzdW1BcnJheSA9IFtdO1xuICAgIHZhciBwcmljZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FydC1pdGVtLXByaWNlJyk7XG4gICAgcHJpY2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIHByaWNlTWFpbkl0ZW0gPSBpdGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKTtcbiAgICAgICAgdmFyIHByaWNlU2FsZUl0ZW0gPSBpdGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzcGFuJyk7XG4gICAgICAgIGlmIChwcmljZU1haW5JdGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN1bUFycmF5LnB1c2gocHJpY2VNYWluSXRlbVswXS50ZXh0Q29udGVudC5yZXBsYWNlKC9bXjAtOS5dL2dpbSwnJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VtQXJyYXkucHVzaChwcmljZVNhbGVJdGVtWzBdLnRleHRDb250ZW50LnJlcGxhY2UoL1teMC05Ll0vZ2ltLCcnKSk7XG4gICAgICAgIH1cblxuICAgIH0pO1xuICAgIGNoYW5nZVRleHRDb250ZW50KGJsb2NrLCAoYXJyYXlTdW0oc3VtQXJyYXkpLnRvRml4ZWQoZGlnaXQpKSlcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FydEVuZFRvdGFsKGJsb2NrLCBkaWdpdCkge1xuICAgIHZhciBzdW1BcnJheSA9IFtdO1xuICAgIHZhciBwcmljZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FydC1pdGVtLXByaWNlJyk7XG4gICAgcHJpY2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIHByaWNlSXRlbSA9IGl0ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NwYW4nKVswXTtcbiAgICAgICAgc3VtQXJyYXkucHVzaChwcmljZUl0ZW0udGV4dENvbnRlbnQucmVwbGFjZSgvW14wLTkuXS9naW0sJycpKTtcbiAgICB9KTtcbiAgICBjaGFuZ2VUZXh0Q29udGVudChibG9jaywgKGFycmF5U3VtKHN1bUFycmF5KSkudG9GaXhlZChkaWdpdCkpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDYXJ0VG90YWwoYmxvY2ssIHRhZykge1xuICAgIHZhciBzdW1BcnJheSA9IFtdO1xuICAgIHZhciBwcmljZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FydC1pdGVtLXByaWNlJyk7XG4gICAgcHJpY2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIHByaWNlSXRlbSA9IGl0ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICAgICAgaWYgKHByaWNlSXRlbSkge1xuICAgICAgICAgIHN1bUFycmF5LnB1c2godGFrZVByaWNlKHByaWNlSXRlbVswXSkpO1xuICAgICAgICB9XG4gICAgICAgIC8qc3VtQXJyYXkucHVzaChwcmljZUl0ZW0udGV4dENvbnRlbnQucmVwbGFjZSgvW14wLTkuXS9naW0sJycpKTsqL1xuICAgIH0pO1xuICAgIGNoYW5nZVRleHRDb250ZW50KGJsb2NrLCBhcnJheVN1bShzdW1BcnJheSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTYWxlICgpIHtcbiAgdmFyIHN1YiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FyZF90b3RhbF9zdWJ0b3RhbFwiKTtcbiAgdmFyIGVuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FyZF90b3RhbF9lbmR0b3RhbFwiKTtcbiAgdmFyIHNhbGVCbG9jayA9ICQoXCIjc2FsZV9wcmljZVwiKTtcbiAgdmFyIHNhbGUgPSAodGFrZVByaWNlKHN1YikgLSB0YWtlUHJpY2UoZW5kKSkudG9GaXhlZCgyKTtcbiAgY2hhbmdlVGV4dENvbnRlbnQoc2FsZUJsb2NrLCBzYWxlKVxufVxuLy8gaW5wdXQgKy0g0YLQvtCy0LDRgNC+0LJcbmZ1bmN0aW9uIHF1YW50aXR5KGlucHV0KSB7XG4gICAgdmFyIHZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgdmFyIG1pblF1YW50aXR5ID0gKyQoJy5xdWFudGl0eS1qcycpLmF0dHIoJ2RhdGEtbWluLW9yZGVyJyk7XG4gICAgdmFyIHJlcCA9IC9bLVxcLjtcIjonYS16QS1a0LAt0Y/QkC3Qr10vO1xuICAgIGlmIChyZXAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlcCwgJycpO1xuICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaW5wdXQudmFsdWU8bWluUXVhbnRpdHkpIGlucHV0LnZhbHVlPW1pblF1YW50aXR5O1xuICAgIGlmIChpbnB1dC52YWx1ZSAlIG1pblF1YW50aXR5ICE9PSAwKSBpbnB1dC52YWx1ZT1taW5RdWFudGl0eTtcblxufVxuLy9yZW1vdmUgZnJvbSBjYXJ0XG5mdW5jdGlvbiByZW1vdmVfZnJvbV9jYXJ0KGNhcnRfaXRlbV9pZCkge1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgICBcImNhcnRfaXRlbV9pZFwiOiBjYXJ0X2l0ZW1faWQsXG4gICAgICAgIFwibGFuZ19mb2xkZXJcIjogbGFuZ19mb2xkZXJcbiAgICB9O1xuICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuXG4gICAgJC5hamF4KHtcbiAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgIHVybDogYmFzZV91cmwgKyBcInJlbW92ZS1mcm9tLWNhcnQ/Y2FydF9pdGVtX2lkPVwiICsgY2FydF9pdGVtX2lkICsgXCImZm9ybV9sYW5nX2Jhc2VfdXJsPVwiICsgYmFzZV91cmwgKyBcIiZsYW5nX2ZvbGRlcj1cIiArIGxhbmdfZm9sZGVyLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblxuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4vL3VwZGF0ZSBjYXJ0IHByb2R1Y3QgcXVhbnRpdHlcbiQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcuYnRuLWNhcnQtcHJvZHVjdC1xdWFudGl0eS1pdGVtJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgdmFyIHF1YW50aXR5ID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgdmFyIHByb2R1Y3RfaWQgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXByb2R1Y3QtaWRcIik7XG4gICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgXCJwcm9kdWN0X2lkXCI6IHByb2R1Y3RfaWQsXG4gICAgICAgICAgICBcInF1YW50aXR5XCI6IHF1YW50aXR5LFxuICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICB9O1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiY2FydF9jb250cm9sbGVyL3VwZGF0ZV9jYXJ0X3Byb2R1Y3RfcXVhbnRpdHlcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgJCgnI3VzZV9zYW1lX2FkZHJlc3NfZm9yX2JpbGxpbmcnKS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcyhcIjpjaGVja2VkXCIpKSB7XG4gICAgICAgICAgICAkKCcuY2FydC1mb3JtLWJpbGxpbmctYWRkcmVzcycpLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoJy5jYXJ0LWZvcm0tYmlsbGluZy1hZGRyZXNzJykuc2hvdygpO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuLy9hcHByb3ZlIG9yZGVyIHByb2R1Y3RcbmZ1bmN0aW9uIGFwcHJvdmVfb3JkZXJfcHJvZHVjdChpZCwgbWVzc2FnZSkge1xuICAgIHN3YWwoe1xuICAgICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcbiAgICAgICAgYnV0dG9uczogdHJ1ZSxcbiAgICAgICAgYnV0dG9uczogW3N3ZWV0YWxlcnRfY2FuY2VsLCBzd2VldGFsZXJ0X29rXSxcbiAgICAgICAgZGFuZ2VyTW9kZTogdHJ1ZSxcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChhcHByb3ZlKSB7XG4gICAgICAgIGlmIChhcHByb3ZlKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBcIm9yZGVyX3Byb2R1Y3RfaWRcIjogaWQsXG4gICAgICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJvcmRlcl9jb250cm9sbGVyL2FwcHJvdmVfb3JkZXJfcHJvZHVjdF9wb3N0XCIsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG4iLCIvL2RlbGV0ZSBwcm9kdWN0IGF1ZGlvIHByZXZpZXdcbmZ1bmN0aW9uIGRlbGV0ZV9wcm9kdWN0X2F1ZGlvX3ByZXZpZXcocHJvZHVjdF9pZCwgbWVzc2FnZSkge1xuICAgIHN3YWwoe1xuICAgICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcbiAgICAgICAgYnV0dG9uczogdHJ1ZSxcbiAgICAgICAgYnV0dG9uczogW3N3ZWV0YWxlcnRfY2FuY2VsLCBzd2VldGFsZXJ0X29rXSxcbiAgICAgICAgZGFuZ2VyTW9kZTogdHJ1ZSxcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh3aWxsRGVsZXRlKSB7XG4gICAgICAgIGlmICh3aWxsRGVsZXRlKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiZmlsZV9jb250cm9sbGVyL2RlbGV0ZV9hdWRpb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXVkaW9fdXBsb2FkX3Jlc3VsdFwiKS5pbm5lckhUTUwgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufSIsIi8vZGVsZXRlIGJsb2cgY29tbWVudFxuZnVuY3Rpb24gZGVsZXRlX2Jsb2dfY29tbWVudChjb21tZW50X2lkLCBwb3N0X2lkLCBtZXNzYWdlKSB7XG4gICAgc3dhbCh7XG4gICAgICAgIHRleHQ6IG1lc3NhZ2UsXG4gICAgICAgIGljb246IFwid2FybmluZ1wiLFxuICAgICAgICBidXR0b25zOiB0cnVlLFxuICAgICAgICBkYW5nZXJNb2RlOiB0cnVlLFxuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHdpbGxEZWxldGUpIHtcbiAgICAgICAgaWYgKHdpbGxEZWxldGUpIHtcbiAgICAgICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjYmxvZ19jb21tZW50X2xpbWl0XCIpLnZhbCgpKTtcbiAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgIFwiY29tbWVudF9pZFwiOiBjb21tZW50X2lkLFxuICAgICAgICAgICAgICAgIFwicG9zdF9pZFwiOiBwb3N0X2lkLFxuICAgICAgICAgICAgICAgIFwibGltaXRcIjogbGltaXQsXG4gICAgICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcImhvbWVfY29udHJvbGxlci9kZWxldGVfY29tbWVudF9wb3N0XCIsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb21tZW50LXJlc3VsdFwiKS5pbm5lckhUTUwgPSByZXNwb25zZVxuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH0pO1xufSIsIiAgICAvL2RlbGV0ZSBjb21tZW50XG4gICAgXG4gICAgZnVuY3Rpb24gZGVsZXRlX2NvbW1lbnQoY29tbWVudF9pZCwgcHJvZHVjdF9pZCwgbWVzc2FnZSkge1xuICAgICAgICBzd2FsKHtcbiAgICAgICAgICAgIHRleHQ6IG1lc3NhZ2UsXG4gICAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcbiAgICAgICAgICAgIGJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICBkYW5nZXJNb2RlOiB0cnVlLFxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh3aWxsRGVsZXRlKSB7XG4gICAgICAgICAgICBpZiAod2lsbERlbGV0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjcHJvZHVjdF9jb21tZW50X2xpbWl0XCIpLnZhbCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiBjb21tZW50X2lkLFxuICAgICAgICAgICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZCxcbiAgICAgICAgICAgICAgICAgICAgXCJsaW1pdFwiOiBsaW1pdCxcbiAgICAgICAgICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwicHJvZHVjdF9jb250cm9sbGVyL2RlbGV0ZV9jb21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29tbWVudC1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSIsIi8vZGVsZXRlIGNvbnZlcnNhdGlvblxuZnVuY3Rpb24gZGVsZXRlX2NvbnZlcnNhdGlvbihjb252ZXJzYXRpb25faWQsIG1lc3NhZ2UpIHtcbiAgICBzd2FsKHtcbiAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIGJ1dHRvbnM6IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtzd2VldGFsZXJ0X2NhbmNlbCwgc3dlZXRhbGVydF9va10sXG4gICAgICAgIGRhbmdlck1vZGU6IHRydWUsXG4gICAgfSkudGhlbihmdW5jdGlvbiAod2lsbERlbGV0ZSkge1xuICAgICAgICBpZiAod2lsbERlbGV0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgXCJjb252ZXJzYXRpb25faWRcIjogY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIFwibGFuZ19mb2xkZXJcIjogbGFuZ19mb2xkZXJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJtZXNzYWdlX2NvbnRyb2xsZXIvZGVsZXRlX2NvbnZlcnNhdGlvblwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYmFzZV91cmwgKyBcIm1lc3NhZ2VzXCI7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCIvL2RlbGV0ZSBwcm9kdWN0IGRpZ2l0YWwgZmlsZVxuZnVuY3Rpb24gZGVsZXRlX3Byb2R1Y3RfZGlnaXRhbF9maWxlKHByb2R1Y3RfaWQsIG1lc3NhZ2UpIHtcbiAgICBzd2FsKHtcbiAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIGJ1dHRvbnM6IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtzd2VldGFsZXJ0X2NhbmNlbCwgc3dlZXRhbGVydF9va10sXG4gICAgICAgIGRhbmdlck1vZGU6IHRydWUsXG4gICAgfSkudGhlbihmdW5jdGlvbiAod2lsbERlbGV0ZSkge1xuICAgICAgICBpZiAod2lsbERlbGV0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgXCJwcm9kdWN0X2lkXCI6IHByb2R1Y3RfaWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcImZpbGVfY29udHJvbGxlci9kZWxldGVfZGlnaXRhbF9maWxlXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkaWdpdGFsX2ZpbGVzX3VwbG9hZF9yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0iLCIvL2RlbGV0ZSBkcmFmdFxuZnVuY3Rpb24gZGVsZXRlX2RyYWZ0KHByb2R1Y3RfaWQsIG1lc3NhZ2UpIHtcbiAgICBzd2FsKHtcbiAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIGJ1dHRvbnM6IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtzd2VldGFsZXJ0X2NhbmNlbCwgc3dlZXRhbGVydF9va10sXG4gICAgICAgIGRhbmdlck1vZGU6IHRydWUsXG4gICAgfSkudGhlbihmdW5jdGlvbiAod2lsbERlbGV0ZSkge1xuICAgICAgICBpZiAod2lsbERlbGV0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiBwcm9kdWN0X2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9kZWxldGVfZHJhZnRcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfSk7XG59IiwiIC8vZGVsZXRlIHByb2R1Y3RcbmZ1bmN0aW9uIGRlbGV0ZV9wcm9kdWN0KHByb2R1Y3RfaWQsIG1lc3NhZ2UpIHtcbiAgICBzd2FsKHtcbiAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIGJ1dHRvbnM6IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtzd2VldGFsZXJ0X2NhbmNlbCwgc3dlZXRhbGVydF9va10sXG4gICAgICAgIGRhbmdlck1vZGU6IHRydWUsXG4gICAgfSkudGhlbihmdW5jdGlvbiAod2lsbERlbGV0ZSkge1xuICAgICAgICBpZiAod2lsbERlbGV0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiBwcm9kdWN0X2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9kZWxldGVfcHJvZHVjdFwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfVxuICAgIH0pO1xufSIsIiAgICAvL2RlbGV0ZSB1c2VyIHJldmlld1xuICAgIGZ1bmN0aW9uIGRlbGV0ZV91c2VyX3JldmlldyhyZXZpZXdfaWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3dhbCh7XG4gICAgICAgICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgICAgICBidXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgZGFuZ2VyTW9kZTogdHJ1ZSxcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAod2lsbERlbGV0ZSkge1xuICAgICAgICAgICAgaWYgKHdpbGxEZWxldGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgXCJyZXZpZXdfaWRcIjogcmV2aWV3X2lkLFxuICAgICAgICAgICAgICAgICAgICBcImxhbmdfZm9sZGVyXCI6IGxhbmdfZm9sZGVyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJhamF4X2NvbnRyb2xsZXIvZGVsZXRlX3VzZXJfcmV2aWV3XCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IiwiLy9kZWxldGUgcHJvZHVjdCB2aWRlbyBwcmV2aWV3XG5mdW5jdGlvbiBkZWxldGVfcHJvZHVjdF92aWRlb19wcmV2aWV3KHByb2R1Y3RfaWQsIG1lc3NhZ2UpIHtcbiAgICBzd2FsKHtcbiAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIGJ1dHRvbnM6IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtzd2VldGFsZXJ0X2NhbmNlbCwgc3dlZXRhbGVydF9va10sXG4gICAgICAgIGRhbmdlck1vZGU6IHRydWUsXG4gICAgfSkudGhlbihmdW5jdGlvbiAod2lsbERlbGV0ZSkge1xuICAgICAgICBpZiAod2lsbERlbGV0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgXCJwcm9kdWN0X2lkXCI6IHByb2R1Y3RfaWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcImZpbGVfY29udHJvbGxlci9kZWxldGVfdmlkZW9cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZpZGVvX3VwbG9hZF9yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0iLCJmdW5jdGlvbiBnZXRfY2l0aWVzKHZhbCkge1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgICBcInN0YXRlX2lkXCI6IHZhbCxcbiAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgIH07XG4gICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9nZXRfY2l0aWVzXCIsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgJCgnI2NpdGllcycpLmNoaWxkcmVuKCdvcHRpb246bm90KDpmaXJzdCknKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICQoXCIjY2l0aWVzXCIpLmFwcGVuZChyZXNwb25zZSk7XG4gICAgICAgICAgICB1cGRhdGVfcHJvZHVjdF9tYXAoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSIsImZ1bmN0aW9uIGdldF9zdGF0ZXModmFsKSB7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIFwiY291bnRyeV9pZFwiOiB2YWwsXG4gICAgICAgIFwibGFuZ19mb2xkZXJcIjogbGFuZ19mb2xkZXJcbiAgICB9O1xuICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICQuYWpheCh7XG4gICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJwcm9kdWN0X2NvbnRyb2xsZXIvZ2V0X3N0YXRlc1wiLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICQoJyNzdGF0ZXMnKS5jaGlsZHJlbignb3B0aW9uOm5vdCg6Zmlyc3QpJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAkKCcjY2l0aWVzJykuY2hpbGRyZW4oJ29wdGlvbjpub3QoOmZpcnN0KScpLnJlbW92ZSgpO1xuICAgICAgICAgICAgJChcIiNzdGF0ZXNcIikuYXBwZW5kKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHVwZGF0ZV9wcm9kdWN0X21hcCgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cblxuIiwiLy9oaWRlIGNvb2tpZXMgd2FybmluZ1xuZnVuY3Rpb24gaGlkZV9jb29raWVzX3dhcm5pbmcoKSB7XG4gICAgJChcIi5jb29raWVzLXdhcm5pbmdcIikuaGlkZSgpO1xuICAgIHZhciBkYXRhID0ge307XG4gICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgIHVybDogYmFzZV91cmwgKyBcImhvbWVfY29udHJvbGxlci9jb29raWVzX3dhcm5pbmdcIixcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsIi8vbG9hZCBtb3JlIGJsb2cgY29tbWVudFxuZnVuY3Rpb24gbG9hZF9tb3JlX2Jsb2dfY29tbWVudChwb3N0X2lkKSB7XG4gICAgdmFyIGxpbWl0ID0gcGFyc2VJbnQoJChcIiNibG9nX2NvbW1lbnRfbGltaXRcIikudmFsKCkpO1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgICBcInBvc3RfaWRcIjogcG9zdF9pZCxcbiAgICAgICAgXCJsaW1pdFwiOiBsaW1pdCxcbiAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgIH07XG4gICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgJChcIiNsb2FkX2NvbW1lbnRfc3Bpbm5lclwiKS5zaG93KCk7XG4gICAgJC5hamF4KHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiaG9tZV9jb250cm9sbGVyL2xvYWRfbW9yZV9jb21tZW50XCIsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICB9KVxuICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQoXCIjbG9hZF9jb21tZW50X3NwaW5uZXJcIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29tbWVudC1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2VcbiAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgIH0pXG59IiwiICAgIC8vbG9hZCBtb3JlIGNvbW1lbnRcbiAgICBcbiAgICBmdW5jdGlvbiBsb2FkX21vcmVfY29tbWVudChwcm9kdWN0X2lkKSB7XG4gICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjcHJvZHVjdF9jb21tZW50X2xpbWl0XCIpLnZhbCgpKTtcbiAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZCxcbiAgICAgICAgICAgIFwibGltaXRcIjogbGltaXQsXG4gICAgICAgICAgICBcImxhbmdfZm9sZGVyXCI6IGxhbmdfZm9sZGVyXG4gICAgICAgIH07XG4gICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAkKFwiI2xvYWRfY29tbWVudF9zcGlubmVyXCIpLnNob3coKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJwcm9kdWN0X2NvbnRyb2xsZXIvbG9hZF9tb3JlX2NvbW1lbnRcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2xvYWRfY29tbWVudF9zcGlubmVyXCIpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb21tZW50LXJlc3VsdFwiKS5pbm5lckhUTUwgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKVxuICAgICAgICAgICAgfSlcbiAgICB9IiwiICAgIC8vbG9hZCBtb3JlIHVzZXIgcmV2aWV3XG4gICAgZnVuY3Rpb24gbG9hZF9tb3JlX3VzZXJfcmV2aWV3KHNlbGxlcl9pZCkge1xuICAgICAgICB2YXIgbGltaXQgPSBwYXJzZUludCgkKFwiI3VzZXJfcmV2aWV3X2xpbWl0XCIpLnZhbCgpKTtcbiAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICBcInNlbGxlcl9pZFwiOiBzZWxsZXJfaWQsXG4gICAgICAgICAgICBcImxpbWl0XCI6IGxpbWl0LFxuICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICB9O1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJChcIiNsb2FkX3Jldmlld19zcGlubmVyXCIpLnNob3coKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJhamF4X2NvbnRyb2xsZXIvbG9hZF9tb3JlX3VzZXJfcmV2aWV3XCIsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNsb2FkX3Jldmlld19zcGlubmVyXCIpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ1c2VyLXJldmlldy1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2VcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH0pXG4gICAgfSIsIiBcbiAgICBmdW5jdGlvbiBzZXRfcHJvZHVjdF9hc19zb2xkKHByb2R1Y3RfaWQpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZCxcbiAgICAgICAgfTtcbiAgICAgICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwicHJvZHVjdF9jb250cm9sbGVyL3NldF9wcm9kdWN0X2FzX3NvbGRcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSlcbiAgICB9XG4iLCJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI3N1Ym1pdF9yZXZpZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghKCQudHJpbSgkKCcjdXNlcl9yYXRpbmcnKS52YWwoKSkpKSB7XG4gICAgICAgICAgICAkKCcucmF0aW5nLXN0YXJzJykuYWRkQ2xhc3MoJ2ludmFsaWQtcmF0aW5nJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKCcucmF0aW5nLXN0YXJzJykucmVtb3ZlQ2xhc3MoJ2ludmFsaWQtcmF0aW5nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmQgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgbGV0IHRvdGFsZmlsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnBob3RvcycpLmZpbGVzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRvdGFsZmlsZXM7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKDExMSk7XG4gICAgICAgICAgICBmZC5hcHBlbmQoXCJycGhvdG9zW11cIiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JwaG90b3MnKS5maWxlc1tpbmRleF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZmQuYXBwZW5kKFwicmF0aW5nXCIsICQudHJpbSgkKCcjdXNlcl9yYXRpbmcnKS52YWwoKSkpO1xuICAgICAgICBmZC5hcHBlbmQoXCJyZXZpZXdcIiwgJC50cmltKCQoJyN1c2VyX3JldmlldycpLnZhbCgpKSk7XG4gICAgICAgIGZkLmFwcGVuZChcInByb2R1Y3RfaWRcIiwgJC50cmltKCQoJyNyZXZpZXdfcHJvZHVjdF9pZCcpLnZhbCgpKSk7XG4gICAgICAgIGZkLmFwcGVuZChcImxhbmdfZm9sZGVyXCIsIGxhbmdfZm9sZGVyKTtcbiAgICAgICAgZmQuYXBwZW5kKGNzZnJfdG9rZW5fbmFtZSwgJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSkpO1xuICAgICAgICAkKCcjc3VibWl0X3JldmlldycpLnByb3AoXCJkaXNhYmxlZFwiLCB0cnVlKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwicHJvZHVjdF9jb250cm9sbGVyL21ha2VfcmV2aWV3XCIsXG4gICAgICAgICAgICBkYXRhOiBmZCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIHN1Y2Nlc3MocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAkKCcjc3VibWl0X3JldmlldycpLnByb3AoXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgPT0gXCJ2b3RlZF9lcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5lcnJvci1yZXZpZXdlZCcpLnNob3coKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlID09IFwiZXJyb3Jfb3duX3Byb2R1Y3RcIikge1xuICAgICAgICAgICAgICAgICAgICAkKCcuZXJyb3Itb3duLXByb2R1Y3QnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXZpZXctcmVzdWx0XCIpLmlubmVySFRNTCA9IHJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgICQoJ2EudGh1bWJuYWlsJykuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlLW1vZGFsIC5tb2RhbC1ib2R5IGltZycpLmF0dHIoJ3NyYycsICQodGhpcykuZmluZCgnaW1nJykuYXR0cignc3JjJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNpbWFnZS1tb2RhbFwiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2UtbW9kYWwgLm1vZGFsLWJvZHkgaW1nJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2ltYWdlLW1vZGFsXCIpLm1vZGFsKCdoaWRlJylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vbG9hZCBtb3JlIHJldmlld1xuICAgIGZ1bmN0aW9uIGxvYWRfbW9yZV9yZXZpZXcocHJvZHVjdF9pZCkge1xuICAgICAgICBsZXQgbGltaXQgPSBwYXJzZUludCgkKFwiI3Byb2R1Y3RfcmV2aWV3X2xpbWl0XCIpLnZhbCgpKTtcbiAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZCxcbiAgICAgICAgICAgIFwibGltaXRcIjogbGltaXQsXG4gICAgICAgICAgICBcImxhbmdfZm9sZGVyXCI6IGxhbmdfZm9sZGVyXG4gICAgICAgIH07XG4gICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAkKFwiI2xvYWRfcmV2aWV3X3NwaW5uZXJcIikuc2hvdygpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9sb2FkX21vcmVfcmV2aWV3XCIsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNsb2FkX3Jldmlld19zcGlubmVyXCIpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXZpZXctcmVzdWx0XCIpLmlubmVySFRNTCA9IHJlc3BvbnNlXG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICB9KVxuICAgIH1cblxuICAgIC8vZGVsZXRlIHJldmlld1xuICAgIGZ1bmN0aW9uIGRlbGV0ZV9yZXZpZXcocmV2aWV3X2lkLCBwcm9kdWN0X2lkLCB1c2VyX2lkLCBtZXNzYWdlKSB7XG4gICAgICAgIHN3YWwoe1xuICAgICAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgICAgIGljb246IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgYnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgIGRhbmdlck1vZGU6IHRydWUsXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHdpbGxEZWxldGUpIHtcbiAgICAgICAgICAgIGlmICh3aWxsRGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxpbWl0ID0gcGFyc2VJbnQoJChcIiNwcm9kdWN0X3Jldmlld19saW1pdFwiKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogcmV2aWV3X2lkLFxuICAgICAgICAgICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZCxcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2VyX2lkXCI6IHVzZXJfaWQsXG4gICAgICAgICAgICAgICAgICAgIFwibGltaXRcIjogbGltaXQsXG4gICAgICAgICAgICAgICAgICAgIFwibGFuZ19mb2xkZXJcIjogbGFuZ19mb2xkZXJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9kZWxldGVfcmV2aWV3XCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmV2aWV3LXJlc3VsdFwiKS5pbm5lckhUTUwgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5pbnB1dC1pbWFnZXMnKS5pbWFnZVVwbG9hZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNJbnB1dE5hbWU6ICdycGhvdG9zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkZWRJbnB1dE5hbWU6ICdvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IDIgKiAxMDI0ICogMTAyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhGaWxlczogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ9Cd0LDQttC80LjRgtC1INC40LvQuCDQv9C10YDQtdGC0LDRidC40YLQtSDRhNC+0YLQviDQsiDRjdGC0L4g0L/QvtC70LUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnM6IFsnLmpwZycsICcuanBlZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuUE5HJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4iLCIgXG4gICAgJChcIiNmb3JtX3NlbmRfbWVzc2FnZVwiKS5zdWJtaXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBtZXNzYWdlX3N1YmplY3QgPSAkKCcjbWVzc2FnZV9zdWJqZWN0JykudmFsKCk7XG4gICAgICAgIHZhciBtZXNzYWdlX3RleHQgPSAkKCcjbWVzc2FnZV90ZXh0JykudmFsKCk7XG4gICAgICAgIHZhciBtZXNzYWdlX3JlY2VpdmVyX2lkID0gJCgnI21lc3NhZ2VfcmVjZWl2ZXJfaWQnKS52YWwoKTtcbiAgICAgICAgdmFyIG1lc3NhZ2Vfc2VuZF9lbSA9ICQoJyNtZXNzYWdlX3NlbmRfZW0nKS52YWwoKTtcblxuICAgICAgICBpZiAobWVzc2FnZV9zdWJqZWN0Lmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICQoJyNtZXNzYWdlX3N1YmplY3QnKS5hZGRDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKCcjbWVzc2FnZV9zdWJqZWN0JykucmVtb3ZlQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlX3RleHQubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgJCgnI21lc3NhZ2VfdGV4dCcpLmFkZENsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoJyNtZXNzYWdlX3RleHQnKS5yZW1vdmVDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICRmb3JtID0gJCh0aGlzKTtcbiAgICAgICAgdmFyICRpbnB1dHMgPSAkZm9ybS5maW5kKFwiaW5wdXQsIHNlbGVjdCwgYnV0dG9uLCB0ZXh0YXJlYVwiKTtcbiAgICAgICAgdmFyIHNlcmlhbGl6ZWREYXRhID0gJGZvcm0uc2VyaWFsaXplQXJyYXkoKTtcbiAgICAgICAgc2VyaWFsaXplZERhdGEucHVzaCh7bmFtZTogY3Nmcl90b2tlbl9uYW1lLCB2YWx1ZTogJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSl9KTtcbiAgICAgICAgc2VyaWFsaXplZERhdGEucHVzaCh7bmFtZTogXCJsYW5nX2ZvbGRlclwiLCB2YWx1ZTogbGFuZ19mb2xkZXJ9KTtcbiAgICAgICAgJGlucHV0cy5wcm9wKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJtZXNzYWdlX2NvbnRyb2xsZXIvYWRkX2NvbnZlcnNhdGlvblwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBkYXRhOiBzZXJpYWxpemVkRGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICRpbnB1dHMucHJvcChcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbmQtbWVzc2FnZS1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgJChcIiNmb3JtX3NlbmRfbWVzc2FnZVwiKVswXS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIC8vc2VuZCBlbWFpbFxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlX3NlbmRfZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZF9tZXNzYWdlX2FzX2VtYWlsKG1lc3NhZ2VfcmVjZWl2ZXJfaWQsIG1lc3NhZ2Vfc3ViamVjdCwgbWVzc2FnZV90ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gc2VuZF9tZXNzYWdlX2FzX2VtYWlsKG1lc3NhZ2VfcmVjZWl2ZXJfaWQsIG1lc3NhZ2Vfc3ViamVjdCwgbWVzc2FnZV90ZXh0KSB7XG4gICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgXCJyZWNlaXZlcl9pZFwiOiBtZXNzYWdlX3JlY2VpdmVyX2lkLFxuICAgICAgICAgICAgXCJtZXNzYWdlX3N1YmplY3RcIjogbWVzc2FnZV9zdWJqZWN0LFxuICAgICAgICAgICAgXCJtZXNzYWdlX3RleHRcIjogbWVzc2FnZV90ZXh0LFxuICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICB9O1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiYWpheF9jb250cm9sbGVyL3NlbmRfZW1haWxfbmV3X21lc3NhZ2VcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuIiwiICAgIC8vc2hvdyBjb21tZW50IGJveFxuICAgIFxuICAgIGZ1bmN0aW9uIHNob3dfY29tbWVudF9ib3goY29tbWVudF9pZCkge1xuICAgICAgICAkKCcudmlzaWJsZS1zdWItY29tbWVudCcpLmVtcHR5KCk7XG4gICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjcHJvZHVjdF9jb21tZW50X2xpbWl0XCIpLnZhbCgpKTtcbiAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICBcImNvbW1lbnRfaWRcIjogY29tbWVudF9pZCxcbiAgICAgICAgICAgIFwibGltaXRcIjogbGltaXQsXG4gICAgICAgICAgICBcImxhbmdfZm9sZGVyXCI6IGxhbmdfZm9sZGVyXG4gICAgICAgIH07XG4gICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJwcm9kdWN0X2NvbnRyb2xsZXIvbG9hZF9zdWJjb21tZW50X2JveFwiLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICQoJyNzdWJfY29tbWVudF9mb3JtXycgKyBjb21tZW50X2lkKS5hcHBlbmQocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IiwiIFxuICAgIGZ1bmN0aW9uIHNob3dfc3ViY2F0ZWdvcmllc19ieV9wYXJlbnRfaWQocGFyZW50X2lkKSB7XG4gICAgICAgICQoJyNzdWJjYXRlZ29yeV9kcm9wZG93biBzZWxlY3QnKS5maW5kKCdvcHRpb246bm90KDpmaXJzdCknKS5yZW1vdmUoKTtcbiAgICAgICAgJCgnI3RoaXJkX2NhdGVnb3J5X2Ryb3Bkb3duIHNlbGVjdCcpLmZpbmQoJ29wdGlvbjpub3QoOmZpcnN0KScpLnJlbW92ZSgpO1xuICAgICAgICAkKCcjc3ViY2F0ZWdvcnlfZHJvcGRvd24nKS5oaWRlKCk7XG4gICAgICAgICQoJyN0aGlyZF9jYXRlZ29yeV9kcm9wZG93bicpLmhpZGUoKTtcblxuICAgICAgICBpZiAoJChcIi5jYXRlZ29yeS1vcHRpb24tXCIgKyBwYXJlbnRfaWQpWzBdKSB7XG4gICAgICAgICAgICAkKFwiLmNhdGVnb3J5LW9wdGlvbi1cIiArIHBhcmVudF9pZCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9wX3ZhbCA9ICQodGhpcykuYXR0cignZGF0YS1pZCcpO1xuICAgICAgICAgICAgICAgIHZhciBvcF90ZXh0ID0gJCh0aGlzKS5hdHRyKCdkYXRhLW5hbWUnKTtcbiAgICAgICAgICAgICAgICAkKCcjc3ViY2F0ZWdvcnlfZHJvcGRvd24gc2VsZWN0JykuYXBwZW5kKCc8b3B0aW9uIHZhbHVlPVwiJyArIG9wX3ZhbCArICdcIj4nICsgb3BfdGV4dCArICc8L29wdGlvbj4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJChcIiNzdWJjYXRlZ29yeV9kcm9wZG93biBzZWxlY3RcIikudmFsKFwiXCIpO1xuICAgICAgICAgICAgJChcIiN0aGlyZF9jYXRlZ29yeV9kcm9wZG93biBzZWxlY3RcIikudmFsKFwiXCIpO1xuICAgICAgICAgICAgJCgnI3N1YmNhdGVnb3J5X2Ryb3Bkb3duJykuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxuIiwiICAgIGZ1bmN0aW9uIHNob3dfdGhpcmRfY2F0ZWdvcmllc19ieV9wYXJlbnRfaWQocGFyZW50X2lkKSB7XG4gICAgICAgICQoJyN0aGlyZF9jYXRlZ29yeV9kcm9wZG93biBzZWxlY3QnKS5maW5kKCdvcHRpb246bm90KDpmaXJzdCknKS5yZW1vdmUoKTtcbiAgICAgICAgJCgnI3RoaXJkX2NhdGVnb3J5X2Ryb3Bkb3duJykuaGlkZSgpO1xuXG4gICAgICAgIGlmICgkKFwiLmNhdGVnb3J5LW9wdGlvbi1cIiArIHBhcmVudF9pZClbMF0pIHtcbiAgICAgICAgICAgICQoXCIuY2F0ZWdvcnktb3B0aW9uLVwiICsgcGFyZW50X2lkKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3BfdmFsID0gJCh0aGlzKS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICAgICAgdmFyIG9wX3RleHQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtbmFtZScpO1xuICAgICAgICAgICAgICAgICQoJyN0aGlyZF9jYXRlZ29yeV9kcm9wZG93biBzZWxlY3QnKS5hcHBlbmQoJzxvcHRpb24gdmFsdWU9XCInICsgb3BfdmFsICsgJ1wiPicgKyBvcF90ZXh0ICsgJzwvb3B0aW9uPicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkKCcjdGhpcmRfY2F0ZWdvcnlfZHJvcGRvd24nKS5zaG93KCk7XG4gICAgICAgICAgICAkKFwiI3RoaXJkX2NhdGVnb3J5X2Ryb3Bkb3duIHNlbGVjdFwiKS52YWwoXCJcIik7XG4gICAgICAgIH1cbiAgICB9IiwiXG4gICAgZnVuY3Rpb24gdXBkYXRlX3Byb2R1Y3RfbWFwKCkge1xuICAgICAgICB2YXIgY291bnRyeV90ZXh0ID0gJChcIiNjb3VudHJpZXNcIikuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpO1xuICAgICAgICB2YXIgY291bnRyeV92YWwgPSAkKFwiI2NvdW50cmllc1wiKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS52YWwoKTtcbiAgICAgICAgdmFyIHN0YXRlX3RleHQgPSAkKFwiI3N0YXRlc1wiKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XG4gICAgICAgIHZhciBzdGF0ZV92YWwgPSAkKFwiI3N0YXRlc1wiKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS52YWwoKTtcbiAgICAgICAgdmFyIGFkZHJlc3MgPSAkKFwiI2FkZHJlc3NfaW5wdXRcIikudmFsKCk7XG4gICAgICAgIHZhciB6aXBfY29kZSA9ICQoXCIjemlwX2NvZGVfaW5wdXRcIikudmFsKCk7XG4gICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgXCJjb3VudHJ5X3RleHRcIjogY291bnRyeV90ZXh0LFxuICAgICAgICAgICAgXCJjb3VudHJ5X3ZhbFwiOiBjb3VudHJ5X3ZhbCxcbiAgICAgICAgICAgIFwic3RhdGVfdGV4dFwiOiBzdGF0ZV90ZXh0LFxuICAgICAgICAgICAgXCJzdGF0ZV92YWxcIjogc3RhdGVfdmFsLFxuICAgICAgICAgICAgXCJhZGRyZXNzXCI6IGFkZHJlc3MsXG4gICAgICAgICAgICBcInppcF9jb2RlXCI6IHppcF9jb2RlLFxuICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICB9O1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwicHJvZHVjdF9jb250cm9sbGVyL3Nob3dfYWRkcmVzc19vbl9tYXBcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcC1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnI2FkZHJlc3NfaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHVwZGF0ZV9wcm9kdWN0X21hcCgpO1xuICAgIH0pO1xuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnI3ppcF9jb2RlX2lucHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGRhdGVfcHJvZHVjdF9tYXAoKTtcbiAgICB9KTtcbiIsIlxuICAgIC8vYWRkIHVzZXIgcmV2aWV3XG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNzdWJtaXRfdXNlcl9yZXZpZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1c2VyX3JhdGluZyA9ICQudHJpbSgkKCcjdXNlcl9yYXRpbmcnKS52YWwoKSk7XG4gICAgICAgIHZhciB1c2VyX3JldmlldyA9ICQudHJpbSgkKCcjdXNlcl9yZXZpZXcnKS52YWwoKSk7XG4gICAgICAgIHZhciBzZWxsZXJfaWQgPSAkLnRyaW0oJCgnI3Jldmlld19zZWxsZXJfaWQnKS52YWwoKSk7XG4gICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjdXNlcl9yZXZpZXdfbGltaXRcIikudmFsKCkpO1xuXG4gICAgICAgIGlmICghdXNlcl9yYXRpbmcpIHtcbiAgICAgICAgICAgICQoJy5yYXRpbmctc3RhcnMnKS5hZGRDbGFzcygnaW52YWxpZC1yYXRpbmcnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoJy5yYXRpbmctc3RhcnMnKS5yZW1vdmVDbGFzcygnaW52YWxpZC1yYXRpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIFwicmV2aWV3XCI6IHVzZXJfcmV2aWV3LFxuICAgICAgICAgICAgXCJyYXRpbmdcIjogdXNlcl9yYXRpbmcsXG4gICAgICAgICAgICBcInNlbGxlcl9pZFwiOiBzZWxsZXJfaWQsXG4gICAgICAgICAgICBcImxpbWl0XCI6IGxpbWl0LFxuICAgICAgICAgICAgXCJsYW5nX2ZvbGRlclwiOiBsYW5nX2ZvbGRlclxuICAgICAgICB9O1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJCgnI3N1Ym1pdF91c2VyX3JldmlldycpLnByb3AoXCJkaXNhYmxlZFwiLCB0cnVlKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiYWpheF9jb250cm9sbGVyL2FkZF91c2VyX3Jldmlld1wiLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICQoJyNzdWJtaXRfdXNlcl9yZXZpZXcnKS5wcm9wKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PSBcInZvdGVkX2Vycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnLmVycm9yLXJldmlld2VkJykuc2hvdygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuXG5cbiIsIi8vQUpBWCBzZWFyY2hcbiQoZG9jdW1lbnQpLm9uKFwiaW5wdXQgcGFzdGUgZm9jdXNcIiwgXCIjaW5wdXRfc2VhcmNoXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBzZWFyY2hfdHlwZSA9ICQoJy5zZWFyY2hfdHlwZV9pbnB1dCcpLnZhbCgpOyAvLyB0eXBlIC0gcHJvZHVjdCBhcyBkZWZhdWx0XG4gICAgdmFyIGlucHV0X3ZhbHVlID0gJCh0aGlzKS52YWwoKTsgLy8g0JLQstC10LTQtdC90L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LIgaW5wdXRcbiAgICBpZiAoZXZlbnQudHlwZSAhPSAncGFzdGUnKSB7XG4gICAgICAgIGlmIChpbnB1dF92YWx1ZS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAkKCcjcmVzcG9uc2Vfc2VhcmNoX3Jlc3VsdHMnKS5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIFwic2VhcmNoX3R5cGVcIjogc2VhcmNoX3R5cGUsXG4gICAgICAgIFwiaW5wdXRfdmFsdWVcIjogaW5wdXRfdmFsdWVcbiAgICB9O1xuICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICQuYWpheCh7XG4gICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJhamF4X2NvbnRyb2xsZXIvYWpheF9zZWFyY2hcIixcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAgICAgICBpZiAob2JqLnJlc3VsdCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9zZWFyY2hfcmVzdWx0c1wiKS5pbm5lckhUTUwgPSBvYmoucmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgJCgnI3Jlc3BvbnNlX3NlYXJjaF9yZXN1bHRzJykuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9zZWFyY2ggdGV4dFxuICAgICAgICAgICAgJCgnI3Jlc3BvbnNlX3NlYXJjaF9yZXN1bHRzIHVsIGxpIGEnKS53cmFwSW5UYWcoe1xuICAgICAgICAgICAgICAgIHdvcmRzOiBbaW5wdXRfdmFsdWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG4kKGRvY3VtZW50KS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICgkKGUudGFyZ2V0KS5jbG9zZXN0KFwiLnRvcC1zZWFyY2gtYmFyXCIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAkKFwiI3Jlc3BvbnNlX3NlYXJjaF9yZXN1bHRzXCIpLmhpZGUoKTtcbiAgICB9XG59KTtcbi8vc2VhcmNoIGxjb2F0aW9uXG5cbi8vINCh0YPQtNGPINC/0L4g0LLRgdC10LzRgywg0LrQvtC0INC00YPQsdC70LjRgNGD0LXRgtGB0Y9cblxuLyokKGRvY3VtZW50KS5vbihcImlucHV0IHBhc3RlIGZvY3VzXCIsIFwiI2lucHV0X2xvY2F0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXRfdmFsdWUgPSAkKHRoaXMpLnZhbCgpO1xuICAgIGlmIChpbnB1dF92YWx1ZS5sZW5ndGggPCAyKSB7XG4gICAgICAgICQoJyNyZXNwb25zZV9zZWFyY2hfbG9jYXRpb24nKS5oaWRlKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIFwiaW5wdXRfdmFsdWVcIjogaW5wdXRfdmFsdWVcbiAgICB9O1xuICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICQuYWpheCh7XG4gICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJhamF4X2NvbnRyb2xsZXIvc2VhcmNoX2xvY2F0aW9uXCIsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKG9iai5yZXN1bHQgPT0gMSkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2Vfc2VhcmNoX2xvY2F0aW9uXCIpLmlubmVySFRNTCA9IG9iai5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAkKCcjcmVzcG9uc2Vfc2VhcmNoX2xvY2F0aW9uJykuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9zZWFyY2ggdGV4dFxuICAgICAgICAgICAgJCgnI3Jlc3BvbnNlX3NlYXJjaF9sb2NhdGlvbiB1bCBsaSBhJykud3JhcEluVGFnKHtcbiAgICAgICAgICAgICAgICB3b3JkczogW2lucHV0X3ZhbHVlXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pOyovXG4iLCIvL21ha2UgYmxvZyBjb21tZW50XG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcXVlc3Q7XG4gICAgLy9tYWtlIHJlZ2lzdGVyZWQgY29tbWVudFxuICAgICQoXCIjbWFrZV9ibG9nX2NvbW1lbnRfcmVnaXN0ZXJlZFwiKS5zdWJtaXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBjb21tZW50X3RleHQgPSAkLnRyaW0oJCgnI2NvbW1lbnRfdGV4dCcpLnZhbCgpKTtcbiAgICAgICAgaWYgKGNvbW1lbnRfdGV4dC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAkKCcjY29tbWVudF90ZXh0JykuYWRkQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJCgnI2NvbW1lbnRfdGV4dCcpLnJlbW92ZUNsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdCkge1xuICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkZm9ybSA9ICQodGhpcyk7XG4gICAgICAgIHZhciAkaW5wdXRzID0gJGZvcm0uZmluZChcImlucHV0LCBzZWxlY3QsIGJ1dHRvbiwgdGV4dGFyZWFcIik7XG4gICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjYmxvZ19jb21tZW50X2xpbWl0XCIpLnZhbCgpKTtcblxuICAgICAgICB2YXIgc2VyaWFsaXplZERhdGEgPSAkZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBjc2ZyX3Rva2VuX25hbWUsIHZhbHVlOiAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKX0pO1xuICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBcImxhbmdfZm9sZGVyXCIsIHZhbHVlOiBsYW5nX2ZvbGRlcn0pO1xuICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBcImxpbWl0XCIsIHZhbHVlOiBsaW1pdH0pO1xuICAgICAgICAkaW5wdXRzLnByb3AoXCJkaXNhYmxlZFwiLCB0cnVlKTtcbiAgICAgICAgcmVxdWVzdCA9ICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJob21lX2NvbnRyb2xsZXIvYWRkX2NvbW1lbnRfcG9zdFwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBkYXRhOiBzZXJpYWxpemVkRGF0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3QuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICRpbnB1dHMucHJvcChcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29tbWVudC1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAkKFwiI21ha2VfYmxvZ19jb21tZW50X3JlZ2lzdGVyZWRcIilbMF0ucmVzZXQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIC8vbWFrZSBjb21tZW50XG4gICAgJChcIiNtYWtlX2Jsb2dfY29tbWVudFwiKS5zdWJtaXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBjb21tZW50X25hbWUgPSAkLnRyaW0oJCgnI2NvbW1lbnRfbmFtZScpLnZhbCgpKTtcbiAgICAgICAgdmFyIGNvbW1lbnRfZW1haWwgPSAkLnRyaW0oJCgnI2NvbW1lbnRfZW1haWwnKS52YWwoKSk7XG4gICAgICAgIHZhciBjb21tZW50X3RleHQgPSAkLnRyaW0oJCgnI2NvbW1lbnRfdGV4dCcpLnZhbCgpKTtcblxuICAgICAgICBpZiAoY29tbWVudF9uYW1lLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICQoJyNjb21tZW50X25hbWUnKS5hZGRDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKCcjY29tbWVudF9uYW1lJykucmVtb3ZlQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tZW50X2VtYWlsLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICQoJyNjb21tZW50X2VtYWlsJykuYWRkQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJCgnI2NvbW1lbnRfZW1haWwnKS5yZW1vdmVDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1lbnRfdGV4dC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAkKCcjY29tbWVudF90ZXh0JykuYWRkQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJCgnI2NvbW1lbnRfdGV4dCcpLnJlbW92ZUNsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICRmb3JtID0gJCh0aGlzKTtcbiAgICAgICAgdmFyICRpbnB1dHMgPSAkZm9ybS5maW5kKFwiaW5wdXQsIHNlbGVjdCwgYnV0dG9uLCB0ZXh0YXJlYVwiKTtcbiAgICAgICAgdmFyIGxpbWl0ID0gcGFyc2VJbnQoJChcIiNibG9nX2NvbW1lbnRfbGltaXRcIikudmFsKCkpO1xuICAgICAgICB2YXIgc2VyaWFsaXplZERhdGEgPSAkZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBjc2ZyX3Rva2VuX25hbWUsIHZhbHVlOiAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKX0pO1xuICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBcImxpbWl0XCIsIHZhbHVlOiBsaW1pdH0pO1xuICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBcImxhbmdfZm9sZGVyXCIsIHZhbHVlOiBsYW5nX2ZvbGRlcn0pO1xuXG4gICAgICAgIHZhciByZWNhcHRjaGFfc3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX3JlY2FwdGNoYV9lbmFibGVkID09IHRydWUpIHtcbiAgICAgICAgICAgICQoc2VyaWFsaXplZERhdGEpLmVhY2goZnVuY3Rpb24gKGksIGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLm5hbWUgPT0gXCJnLXJlY2FwdGNoYS1yZXNwb25zZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcuZy1yZWNhcHRjaGEnKS5hZGRDbGFzcyhcImlzLXJlY2FwdGNoYS1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjYXB0Y2hhX3N0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY2FwdGNoYV9zdGF0dXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgJCgnLmctcmVjYXB0Y2hhJykucmVtb3ZlQ2xhc3MoXCJpcy1yZWNhcHRjaGEtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICRpbnB1dHMucHJvcChcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgcmVxdWVzdCA9ICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiaG9tZV9jb250cm9sbGVyL2FkZF9jb21tZW50X3Bvc3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBzZXJpYWxpemVkRGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVxdWVzdC5kb25lKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICRpbnB1dHMucHJvcChcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNfcmVjYXB0Y2hhX2VuYWJsZWQgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBncmVjYXB0Y2hhLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29tbWVudC1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgJChcIiNtYWtlX2Jsb2dfY29tbWVudFwiKVswXS5yZXNldCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pOyIsIiAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICB2YXIgZ3JlZW4gPSAkKCcuYm9udXNfX2dyZWVuJyk7XG4gICAgdmFyIGJsdWUgPSAkKCcuYm9udXNfX2JsdWUnKTtcbiAgICB2YXIgcHVycGxlID0gJCgnLmJvbnVzX19wdXJwbGUnKTtcbiAgICB2YXIgb3JhbmdlID0gJCgnLmJvbnVzX19vcmFuZ2UnKTtcblxuICAgIGdyZWVuLmhhc0NsYXNzKCdib251c19fYWN0aXZlJykgPyBncmVlbi5hZGRDbGFzcygnYm9udXNfX3NlY29uZHJvdycpIDogZ3JlZW4uYWRkQ2xhc3MoJ2JvbnVzX19ub25lJylcbiAgICBibHVlLmhhc0NsYXNzKCdib251c19fYWN0aXZlJykgPyBibHVlLmFkZENsYXNzKCdib251c19fdGhpcmRyb3cnKSA6IGJsdWUuYWRkQ2xhc3MoJ2JvbnVzX19ub25lJylcbiAgICBwdXJwbGUuaGFzQ2xhc3MoJ2JvbnVzX19hY3RpdmUnKSA/IHB1cnBsZS5hZGRDbGFzcygnYm9udXNfX2ZvdXJ0aHJvdycpIDogcHVycGxlLmFkZENsYXNzKCdib251c19fbm9uZScpXG4gICAgb3JhbmdlLmhhc0NsYXNzKCdib251c19fYWN0aXZlJykgPyBvcmFuZ2UuYWRkQ2xhc3MoJ2JvbnVzX19maWZ0aHJvdycpIDogb3JhbmdlLmFkZENsYXNzKCdib251c19fbm9uZScpXG4gfSk7IiwiJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5pdGVtLWZhdm9yaXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb2R1Y3RfaWQgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXByb2R1Y3QtaWRcIik7XG4gICAgICAgIHZhciBjb3VudEJvb2ttYXJrID0gTnVtYmVyKCQoXCIubm90aWZpY2F0aW9uLWJvb2ttYXJrXCIpLmh0bWwoKSk7XG4gICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdpdGVtLWZhdm9yaXRlLWVuYWJsZScpKSB7XG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnaXRlbS1mYXZvcml0ZWQnKSkge1xuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2l0ZW0tZmF2b3JpdGVkJyk7XG4gICAgICAgICAgICAgICAgJCgnLm5vdGlmaWNhdGlvbi1ib29rbWFyaycpLmh0bWwoY291bnRCb29rbWFyayAtIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpdGVtLWZhdm9yaXRlZCcpO1xuICAgICAgICAgICAgICAgICQoJy5ub3RpZmljYXRpb24tYm9va21hcmsnKS5odG1sKGNvdW50Qm9va21hcmsgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgIFwicHJvZHVjdF9pZFwiOiBwcm9kdWN0X2lkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG5cbiAgICAgICAgICAgIC8vINCi0YPRgiDRj9Cy0L3QviDQvdC10LTQvtC/0LjRgdCw0L0g0LrQvtC0XG5cbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwicHJvZHVjdF9jb250cm9sbGVyL2FkZF9yZW1vdmVfZmF2b3JpdGVfYWpheFwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcuYnRuLWZhdm9yaXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvZHVjdF9pZCA9ICQodGhpcykuYXR0cihcImRhdGEtcHJvZHVjdC1pZFwiKTtcbiAgICAgICAgdmFyIGNvdW50Qm9va21hcmsgPSBOdW1iZXIoJChcIi5ub3RpZmljYXRpb24tYm9va21hcmtcIikuaHRtbCgpKTtcbiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2J0bi1mYXZvcml0ZScpKSB7XG4gICAgICAgICAgaWYgKCQoJy5idG4tZmF2b3JpdGUgaScpLmhhc0NsYXNzKCdpY29uLWhlYXJ0JykpIHtcbiAgICAgICAgICAgICQoJy5idG4tZmF2b3JpdGUnKS5odG1sKCc8aSBjbGFzcz1cImljb24taGVhcnQtb1wiPjwvaT7QkiDQuNC30LHRgNCw0L3QvdC+0LUnKTtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgICQoJy5ub3RpZmljYXRpb24tYm9va21hcmsnKS5odG1sKGNvdW50Qm9va21hcmsgLSAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJCgnLmJ0bi1mYXZvcml0ZScpLmh0bWwoJzxpIGNsYXNzPVwiaWNvbi1oZWFydFwiPjwvaT7QkiDQuNC30LHRgNCw0L3QvdC+0LwnKTtcbiAgICAgICAgICAgICQoJy5ub3RpZmljYXRpb24tYm9va21hcmsnKS5odG1sKGNvdW50Qm9va21hcmsgKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuXG4gICAgICAgICAgICAvLyDQotGD0YIg0Y/QstC90L4g0L3QtdC00L7Qv9C40YHQsNC9INC60L7QtFxuXG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9hZGRfcmVtb3ZlX2Zhdm9yaXRlX2FqYXhcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4iLCIkKGRvY3VtZW50KS5vbignY2hhbmdlJywgJyNja011bHRpZmlsZXVwbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiB2YXIgTXVsdGlmaWxlVXBsb2FkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJja011bHRpZmlsZXVwbG9hZFwiKTtcbiBpZiAodHlwZW9mIChGaWxlUmVhZGVyKSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIE11bHRpZHZQcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJja011bHRpZHZQcmV2aWV3XCIpO1xuICAgIE11bHRpZHZQcmV2aWV3LmlubmVySFRNTCA9IFwiXCI7XG4gICAgdmFyIHJlZ2V4ID0gL14oW2EtekEtWjAtOVxcc19cXFxcLlxcLTpdKSsoLmpwZ3wuanBlZ3wuZ2lmfC5wbmd8LmJtcCkkLztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE11bHRpZmlsZVVwbG9hZC5maWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmlsZSA9IE11bHRpZmlsZVVwbG9hZC5maWxlc1tpXTtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJJTUdcIik7XG4gICAgICAgICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgaW1nLmlkID0gXCJNdWx0aWZpbGV1cGxvYWRfaW1hZ2VcIjtcbiAgICAgICAgICAgIE11bHRpZHZQcmV2aWV3LmFwcGVuZENoaWxkKGltZyk7XG4gICAgICAgICAgICAkKFwiI011bHRpZmlsZXVwbG9hZF9idXR0b25cIikuc2hvdygpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbn0gZWxzZSB7YWxlcnQoXCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MNSBGaWxlUmVhZGVyLlwiKX1cbn0pO1xuIiwiICAgIC8vZGVsZXRlIHByb2R1Y3QgaW1hZ2VcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmJ0bi1kZWxldGUtcHJvZHVjdC1pbWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBmaWxlX2lkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWZpbGUtaWQnKTtcbiAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICBcImZpbGVfaWRcIjogZmlsZV9pZFxuICAgICAgICB9O1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiZmlsZV9jb250cm9sbGVyL2RlbGV0ZV9pbWFnZVwiLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsiLCIgICAgLy9kZWxldGUgcHJvZHVjdCBpbWFnZSBzZXNzaW9uXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5idG4tZGVsZXRlLXByb2R1Y3QtaW1nLXNlc3Npb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBmaWxlX2lkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWZpbGUtaWQnKTtcbiAgICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgICBcImZpbGVfaWRcIjogZmlsZV9pZFxuICAgICAgICB9O1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiZmlsZV9jb250cm9sbGVyL2RlbGV0ZV9pbWFnZV9zZXNzaW9uXCIsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQoJyN1cGxvYWRlckZpbGUnICsgZmlsZV9pZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyIsIiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNsb3NlUG9wdXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgJChcIi5wb3B1cFwiKS5yZW1vdmVDbGFzcyhcInBvcHVwLS1hY3RpdmVcIik7XG4gICAgLy8kKFwiLnBvcHVwX19jb250ZW50LXdyYXBwZXJcIikuYXBwZW5kKCc8ZGl2IGNsYXNzPVwicG9wdXBfX3ByZVwiPjwvZGl2PicpO1xuICAgIC8vJChcIi5wb3B1cF9fcHJlXCIpLnNob3coKTtcbiAgfVxuXG4gIHZhciBwb3B1cEFjdGlvbnMgPSBmdW5jdGlvbiAobikge1xuICAgICQoXCIucG9wdXBcIikuYWRkQ2xhc3MoXCJwb3B1cC0tYWN0aXZlXCIpO1xuICAgICQoXCIucG9wdXBfX2Nsb3NlXCIpLmNsaWNrKGZ1bmN0aW9uICh0KSB7XG4gICAgICBjbG9zZVBvcHVwKCk7XG4gICAgfSk7XG4gICAgJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNyAmJiAhJChcIi5pbnB1dC1ncm91cCBpbnB1dFwiKS5pcyhcIjpmb2N1c1wiKSkge1xuICAgICAgICBjbG9zZVBvcHVwKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgJChkb2N1bWVudCkubW91c2Vkb3duKGZ1bmN0aW9uIChlKSB7XG4gICAgICBsZXQgY29udGFpbmVyID0gJChcIi5wb3B1cF9fY29udGVudFwiKTtcbiAgICAgIGlmICghY29udGFpbmVyLmlzKGUudGFyZ2V0KSAmJiBjb250YWluZXIuaGFzKGUudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xvc2VQb3B1cCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgJChcIiNzbGlkZXItcGFja2FnZV9fbGlzdFwiKS50cmlnZ2VyKFwiZGVzdHJveS5vd2wuY2Fyb3VzZWxcIik7XG4gICAgJChcIiNzbGlkZXItcGFja2FnZV9fbGlzdFwiKS5vd2xDYXJvdXNlbCh7XG4gICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICBkb3RzOiBmYWxzZSxcbiAgICAgIGxvb3A6ICQoXCIub3dsLWNhcm91c2VsID4gLml0ZW1cIikubGVuZ3RoIDw9IDIgPyBmYWxzZSA6IHRydWUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgIDU3Nzoge1xuICAgICAgICAgIGl0ZW1zOiAxLFxuICAgICAgICB9LFxuICAgICAgICA5OTM6IHtcbiAgICAgICAgICBpdGVtczogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgJChcIi5wb3B1cF9fY29udGVudC1tYXBqc1wiKS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICBpZiAoJChcIi5tYXAtdHJpZ2dlclwiKS5sZW5ndGggIT0gMCkge1xuICAgICAgbGV0IG4gPSAkKFwiLm1hcC10cmlnZ2VyXCIpLmF0dHIoXCJkYXRhLXVybFwiKTtcbiAgICAgICQoXCIucG9wdXBfX2NvbnRlbnQtd3JhcHBlclwiKS5sb2FkKFwiXCIgKyBuKTtcbiAgICAgICQoXCIubWFwLXRyaWdnZXJcIikucGFyZW50KCkub24oXCJjbGlja1wiLCBmdW5jdGlvbiAodCkge1xuICAgICAgICBwb3B1cEFjdGlvbnMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSlcblxuICAkKFwiLnBvcHVwLXRyaWdnZXJcIikuY2xpY2soZnVuY3Rpb24gKHQpIHtcbiAgICBsZXQgbiA9ICQodGhpcykuYXR0cihcImRhdGEtcHJvZHVjdC11cmxcIik7XG4gICAgcG9wdXBBY3Rpb25zKCk7XG4gICAgJChcIi5wb3B1cF9fY29udGVudC13cmFwcGVyXCIpLmFwcGVuZCgnPGRpdiBjbGFzcz1cInBvcHVwX19wcmVcIj48L2Rpdj4nKTtcbiAgICAkKFwiLnBvcHVwX19jb250ZW50LXdyYXBwZXJcIikubG9hZChcIlwiICsgbik7XG4gICAgYWZ0ZXJMb2FkKCk7XG4gIH0pO1xuXG4gICQoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCIudGVzdF9idXR0b25cIiwgZnVuY3Rpb24gKCkge1xuICAgICQoXCIucG9wdXBcIikucmVtb3ZlQ2xhc3MoXCJwb3B1cC0tYWN0aXZlXCIpO1xuICAgICQoXCIjcGlja3VwLXBvaW50XCIpLnByb3AoXCJjaGVja2VkXCIsIHRydWUpO1xuICB9KTtcbn0pO1xuIiwiJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNidG5fbG9hZF9tb3JlX3Byb21vdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICQoXCIjbG9hZF9wcm9tb3RlZF9zcGlubmVyXCIpLnNob3coKTtcbiAgICB2YXIgbGltaXQgPSAkKFwiI2lucHV0X3Byb21vdGVkX3Byb2R1Y3RzX2xpbWl0XCIpLnZhbCgpO1xuICAgIHZhciBwZXJfcGFnZSA9ICQoXCIjaW5wdXRfcHJvbW90ZWRfcHJvZHVjdHNfcGVyX3BhZ2VcIikudmFsKCk7XG4gICAgdmFyIHByb21vdGVkX3Byb2R1Y3RzX2NvdW50ID0gJChcIiNpbnB1dF9wcm9tb3RlZF9wcm9kdWN0c19jb3VudFwiKS52YWwoKTtcbiAgICB2YXIgbmV3X2xpbWl0ID0gcGFyc2VJbnQobGltaXQpICsgcGFyc2VJbnQocGVyX3BhZ2UpO1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgICBcImxpbWl0XCI6IGxpbWl0LFxuICAgICAgICBcImxhbmdfZm9sZGVyXCI6IGxhbmdfZm9sZGVyXG4gICAgfTtcbiAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAkLmFqYXgoe1xuICAgICAgICB0eXBlOiBcIlBPU1RcIixcbiAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiaG9tZV9jb250cm9sbGVyL2xvYWRfbW9yZV9wcm9tb3RlZF9wcm9kdWN0c1wiLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICQoXCIjaW5wdXRfcHJvbW90ZWRfcHJvZHVjdHNfbGltaXRcIikudmFsKG5ld19saW1pdCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKFwiI2xvYWRfcHJvbW90ZWRfc3Bpbm5lclwiKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgJChcIiNyb3dfcHJvbW90ZWRfcHJvZHVjdHNcIikuYXBwZW5kKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3X2xpbWl0ID49IHByb21vdGVkX3Byb2R1Y3RzX2NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjYnRuX2xvYWRfbW9yZV9wcm9tb3RlZFwiKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgNzAwKVxuICAgICAgICB9XG4gICAgfSk7XG59KTtcbiIsIiBcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCIjZm9ybV9sb2dpblwiKS5zdWJtaXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgZm9ybSA9ICQodGhpcyk7XG4gICAgICAgICAgICBpZiAoZm9ybVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgaW5wdXRzID0gZm9ybS5maW5kKFwiaW5wdXQsIHNlbGVjdCwgYnV0dG9uLCB0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplZERhdGEgPSBmb3JtLnNlcmlhbGl6ZUFycmF5KCk7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZERhdGEucHVzaCh7bmFtZTogY3Nmcl90b2tlbl9uYW1lLCB2YWx1ZTogJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSl9KTtcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJhdXRoX2NvbnRyb2xsZXIvbG9naW5fcG9zdFwiLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogc2VyaWFsaXplZERhdGEsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5yZXN1bHQgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmoucmVzdWx0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3VsdC1sb2dpblwiKS5pbm5lckhUTUwgPSBvYmouZXJyb3JfbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9ybVswXS5jbGFzc0xpc3QuYWRkKCd3YXMtdmFsaWRhdGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuIiwiJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKGIpIHtcbiAgICBiKFwiLmltYWdlLXBvcHVwXCIpLm1hZ25pZmljUG9wdXAoe1xuICAgICAgICB0eXBlOiBcImltYWdlXCIsIHRpdGxlU3JjOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGEuZWwuYXR0cihcInRpdGxlXCIpICsgXCI8c21hbGw+PC9zbWFsbD5cIlxuICAgICAgICB9LCBpbWFnZToge3ZlcnRpY2FsRml0OiB0cnVlLH0sIGdhbGxlcnk6IHtlbmFibGVkOiB0cnVlLCBuYXZpZ2F0ZUJ5SW1nQ2xpY2s6IHRydWUsIHByZWxvYWQ6IFswLCAxXX0sIHJlbW92YWxEZWxheTogMTAwLCBmaXhlZENvbnRlbnRQb3M6IHRydWUsXG4gICAgfSlcbn0pO1xuIiwiICAgIC8vbWFrZSByZWdpc3RlcmVkIHN1YmNvbW1lbnRcbiAgICBcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmJ0bi1zdWJjb21tZW50LXJlZ2lzdGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21tZW50X2lkID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jb21tZW50LWlkXCIpO1xuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIFwibGFuZ19mb2xkZXJcIjogbGFuZ19mb2xkZXJcbiAgICAgICAgfTtcbiAgICAgICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgICAgICQoXCIjbWFrZV9zdWJjb21tZW50X3JlZ2lzdGVyZWRfXCIgKyBjb21tZW50X2lkKS5hamF4U3VibWl0KHtcbiAgICAgICAgICAgIGJlZm9yZVN1Ym1pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBmb3JtID0gJChcIiNtYWtlX3N1YmNvbW1lbnRfcmVnaXN0ZXJlZF9cIiArIGNvbW1lbnRfaWQpLnNlcmlhbGl6ZUFycmF5KCk7XG4gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSAkLnRyaW0oZm9ybVswXS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiLmZvcm0tY29tbWVudC10ZXh0XCIpLmFkZENsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm9ybS1jb21tZW50LXRleHRcIikucmVtb3ZlQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiBcIlBPU1RcIixcbiAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9tYWtlX2NvbW1lbnRcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbW1lbnQtcmVzdWx0XCIpLmlubmVySFRNTCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pOyIsIiAgICAvL21ha2Ugc3ViY29tbWVudFxuICAgIFxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcuYnRuLXN1YmNvbW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21tZW50X2lkID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jb21tZW50LWlkXCIpO1xuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIFwibGFuZ19mb2xkZXJcIjogbGFuZ19mb2xkZXJcbiAgICAgICAgfTtcbiAgICAgICAgZGF0YVtjc2ZyX3Rva2VuX25hbWVdID0gJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSk7XG4gICAgICAgICQoXCIjbWFrZV9zdWJjb21tZW50X1wiICsgY29tbWVudF9pZCkuYWpheFN1Ym1pdCh7XG4gICAgICAgICAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZm9ybSA9ICQoXCIjbWFrZV9zdWJjb21tZW50X1wiICsgY29tbWVudF9pZCkuc2VyaWFsaXplQXJyYXkoKTtcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICQudHJpbShmb3JtWzBdLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YXIgZW1haWwgPSAkLnRyaW0oZm9ybVsxXS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSAkLnRyaW0oZm9ybVsyXS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzX3JlY2FwdGNoYV9lbmFibGVkID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2FwdGNoYSA9ICQudHJpbShmb3JtWzNdLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobmFtZS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm9ybS1jb21tZW50LW5hbWVcIikuYWRkQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mb3JtLWNvbW1lbnQtbmFtZVwiKS5yZW1vdmVDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbWFpbC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm9ybS1jb21tZW50LWVtYWlsXCIpLmFkZENsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm9ybS1jb21tZW50LWVtYWlsXCIpLnJlbW92ZUNsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiLmZvcm0tY29tbWVudC10ZXh0XCIpLmFkZENsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm9ybS1jb21tZW50LXRleHRcIikucmVtb3ZlQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNfcmVjYXB0Y2hhX2VuYWJsZWQgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVjYXB0Y2hhID09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjbWFrZV9zdWJjb21tZW50X1wiICsgY29tbWVudF9pZCArICcgLmctcmVjYXB0Y2hhJykuYWRkQ2xhc3MoXCJpcy1yZWNhcHRjaGEtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjbWFrZV9zdWJjb21tZW50X1wiICsgY29tbWVudF9pZCArICcgLmctcmVjYXB0Y2hhJykucmVtb3ZlQ2xhc3MoXCJpcy1yZWNhcHRjaGEtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiBcIlBPU1RcIixcbiAgICAgICAgICAgIHVybDogYmFzZV91cmwgKyBcInByb2R1Y3RfY29udHJvbGxlci9tYWtlX2NvbW1lbnRcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNfcmVjYXB0Y2hhX2VuYWJsZWQgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBncmVjYXB0Y2hhLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29tbWVudC1yZXN1bHRcIikuaW5uZXJIVE1MID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSk7IiwiJChcIi5tZWdhLW1lbnUgLm5hdi1pdGVtXCIpLmhvdmVyKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWVudV9pZCA9ICQodGhpcykuYXR0cignZGF0YS1jYXRlZ29yeS1pZCcpO1xuICAgICQoXCIjbWVnYV9tZW51X2NvbnRlbnRfXCIgKyBtZW51X2lkKS5zaG93KCk7XG4gICAgJChcIi5sYXJnZS1tZW51LWl0ZW1cIikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICQoXCIubGFyZ2UtbWVudS1pdGVtLWZpcnN0XCIpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkKFwiLmxhcmdlLW1lbnUtY29udGVudC1maXJzdFwiKS5hZGRDbGFzcygnYWN0aXZlJyk7XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lbnVfaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY2F0ZWdvcnktaWQnKTtcbiAgICAkKFwiI21lZ2FfbWVudV9jb250ZW50X1wiICsgbWVudV9pZCkuaGlkZSgpO1xufSk7XG5cbiQoXCIubWVnYS1tZW51IC5kcm9wZG93bi1tZW51XCIpLmhvdmVyKGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMpLnNob3coKTtcbn0sIGZ1bmN0aW9uICgpIHtcbn0pO1xuXG4kKFwiLmxhcmdlLW1lbnUtaXRlbVwiKS5ob3ZlcihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lbnVfaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtc3ViY2F0ZWdvcnktaWQnKTtcbiAgICAkKFwiLmxhcmdlLW1lbnUtaXRlbVwiKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgJChcIi5sYXJnZS1tZW51LWNvbnRlbnRcIikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICQoXCIjbGFyZ2VfbWVudV9jb250ZW50X1wiICsgbWVudV9pZCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xufSwgZnVuY3Rpb24gKCkge1xufSk7XG4iLCIgJChmdW5jdGlvbigpIHtcbiAgICAgLyokKFwiLnNlYXJjaC1yZXN1bHRzLWxvY2F0aW9uXCIpLm5pY2VTY3JvbGwoe1xuICAgICAgICAgY3Vyc29yY29sb3I6IFwiI2MyYzJjMlwiXG4gICAgIH0pOyovXG4gICAgICQoXCIuc2xpZGVyLWN1c3RvbS1zY3JvbGxiYXJcIikubmljZVNjcm9sbCh7XG4gICAgICAgICBjdXJzb3Jjb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICAgY3Vyc29yYm9yZGVyOiBcIjBcIlxuICAgICB9KTtcbiAgICAgJChcIi5maWx0ZXItY3VzdG9tLXNjcm9sbGJhclwiKS5uaWNlU2Nyb2xsKHtcbiAgICAgICAgIGN1cnNvcmNvbG9yOiBcIiNjMmMyYzJcIixcbiAgICAgICAgIGF1dG9oaWRlbW9kZTogZmFsc2VcbiAgICAgfSk7XG4gICAgICQoXCIubWVzc2FnZXMtc2lkZWJhclwiKS5uaWNlU2Nyb2xsKHtcbiAgICAgICAgIGN1cnNvcmNvbG9yOiBcIiNjMmMyYzJcIixcbiAgICAgICAgIGF1dG9oaWRlbW9kZTogZmFsc2VcbiAgICAgfSlcbiB9KTtcbiBpZiAoJChcIi5tZXNzYWdlLWN1c3RvbS1zY3JvbGxiYXJcIikubGVuZ3RoID4gMCkge1xuICAgICAkKFwiLm1lc3NhZ2UtY3VzdG9tLXNjcm9sbGJhclwiKS5uaWNlU2Nyb2xsKHtcbiAgICAgICAgIGN1cnNvcmNvbG9yOiBcIiNjMmMyYzJcIixcbiAgICAgICAgIGF1dG9oaWRlbW9kZTogZmFsc2VcbiAgICAgfSk7XG4gICAgICQoXCIubWVzc2FnZS1jdXN0b20tc2Nyb2xsYmFyXCIpLnNjcm9sbFRvcCgkKFwiLm1lc3NhZ2UtY3VzdG9tLXNjcm9sbGJhclwiKS5nZXQoMCkuc2Nyb2xsSGVpZ2h0LCAtMSlcbiB9XG5cblxuXG4iLCJcbiAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAkKFwiI21haW4tc2xpZGVyXCIpLm93bENhcm91c2VsKHtcbiAgICAgICAgICAgICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgICAgICAgICBsb29wOiAkKFwiLm93bC1jYXJvdXNlbCA+IC5pdGVtXCIpLmxlbmd0aCA8PSAyID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgICAgIGxhenlMb2FkOiB0cnVlLFxuICAgICAgICAgICAgIHNsaWRlU3BlZWQ6IDMwMDAsXG4gICAgICAgICAgICAgcGFnaW5hdGlvblNwZWVkOiAxMDAwLFxuICAgICAgICAgICAgIGl0ZW1zOiAxLFxuICAgICAgICAgICAgIGRvdHM6IHRydWUsXG4gICAgICAgICAgICAgbmF2OiB0cnVlLFxuICAgICAgICAgICAgIG5hdlRleHQ6IFtcIjxpIGNsYXNzPSdpY29uLWFycm93LXNsaWRlci1sZWZ0IHJhbmRvbS1hcnJvdy1wcmV2JyBhcmlhLWhpZGRlbj0ndHJ1ZSc+PC9pPlwiLCBcIjxpIGNsYXNzPSdpY29uLWFycm93LXNsaWRlci1yaWdodCByYW5kb20tYXJyb3ctbmV4dCcgYXJpYS1oaWRkZW49J3RydWUnPjwvaT5cIl0sXG4gICAgICAgICAgICAgaXRlbXNEZXNrdG9wOiBmYWxzZSxcbiAgICAgICAgICAgICBpdGVtc0Rlc2t0b3BTbWFsbDogZmFsc2UsXG4gICAgICAgICAgICAgaXRlbXNUYWJsZXQ6IGZhbHNlLFxuICAgICAgICAgICAgIGl0ZW1zTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgIH0pO1xuICAgICAgICAgJChcIiNwcm9kdWN0LXNsaWRlclwiKS5vd2xDYXJvdXNlbCh7XG4gICAgICAgICAgICAgaXRlbXM6IDEsXG4gICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgIG5hdjogdHJ1ZSxcbiAgICAgICAgICAgICBsb29wOiAkKFwiLm93bC1jYXJvdXNlbCA+IC5pdGVtXCIpLmxlbmd0aCA8PSAyID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgICAgIG5hdlRleHQ6IFtcIjxpIGNsYXNzPSdpY29uLWFycm93LXNsaWRlci1sZWZ0IHJhbmRvbS1hcnJvdy1wcmV2JyBhcmlhLWhpZGRlbj0ndHJ1ZSc+PC9pPlwiLCBcIjxpIGNsYXNzPSdpY29uLWFycm93LXNsaWRlci1yaWdodCByYW5kb20tYXJyb3ctbmV4dCcgYXJpYS1oaWRkZW49J3RydWUnPjwvaT5cIl0sXG4gICAgICAgICAgICAgZG90c0NvbnRhaW5lcjogXCIuZG90cy1jb250YWluZXJcIixcbiAgICAgICAgIH0pO1xuICAgICAgICAgJChcIiNzbGlkZXItcGFja2FnZV9fbGlzdFwiKS5vd2xDYXJvdXNlbCh7XG4gICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgICAgICAgIGxvb3A6ICQoXCIub3dsLWNhcm91c2VsID4gLml0ZW1cIikubGVuZ3RoIDw9IDIgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgICAgICAgcmVzcG9uc2l2ZToge1xuICAgICAgICAgICAgICAgICAgMDoge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAzXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgNTc3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IDRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIDc2ODoge1xuICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IDNcbiAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgOTkzOiB7XG4gICAgICAgICAgICAgICAgICAgICBpdGVtczogNFxuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfSk7XG5cbiAgICAgICAgICQoXCIjc2xpZGVyLXBhY2thZ2VfX2xpc3QtbW9iaWxlXCIpLm93bENhcm91c2VsKHtcbiAgICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgZG90czogZmFsc2UsXG4gICAgICAgICAgICAgbG9vcDogJChcIi5vd2wtY2Fyb3VzZWwgPiAuaXRlbVwiKS5sZW5ndGggPD0gMiA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICAgICAgICAgIDA6IHtcbiAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAzXG4gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIDU3Nzoge1xuICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IDRcbiAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgNzY4OiB7XG4gICAgICAgICAgICAgICAgICAgICBpdGVtczogM1xuICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICA5OTM6IHtcbiAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiA0XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9XG4gICAgICAgICB9KTtcbiAgICAgICAgICQoXCIjc2xpZGVyLXByaW50X19saXN0XCIpLm93bENhcm91c2VsKHtcbiAgICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgZG90czogZmFsc2UsXG4gICAgICAgICAgICAgbG9vcDogJChcIi5vd2wtY2Fyb3VzZWwgPiAuaXRlbVwiKS5sZW5ndGggPD0gMiA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICAgICAgICAgIDA6IHtcbiAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAyXG4gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIDU3Nzoge1xuICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IDNcbiAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgOTkzOiB7XG4gICAgICAgICAgICAgICAgICAgICBpdGVtczogNFxuICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAxNDQwOiB7XG4gICAgICAgICAgICAgICAgICAgICBpdGVtczogNFxuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfSk7XG4gICAgICAgICAkKFwiI3NsaWRlci1zZWVuX19saXN0XCIpLm93bENhcm91c2VsKHtcbiAgICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgZG90czogZmFsc2UsXG4gICAgICAgICAgICAgbG9vcDogJChcIi5vd2wtY2Fyb3VzZWwgPiAuaXRlbVwiKS5sZW5ndGggPD0gMiA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICAgICAgICAgIDA6IHtcbiAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAyXG4gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIDU3Nzoge1xuICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IDNcbiAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgOTkzOiB7XG4gICAgICAgICAgICAgICAgICAgICBpdGVtczogNFxuICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAxNDQwOiB7XG4gICAgICAgICAgICAgICAgICAgICBpdGVtczogNFxuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfSk7XG4gICAgICAgICAkKFwiI2Jsb2ctc2xpZGVyXCIpLm93bENhcm91c2VsKHtcbiAgICAgICAgICAgICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgICAgICAgICBsb29wOiB0cnVlLFxuICAgICAgICAgICAgIG1hcmdpbjogMjAsXG4gICAgICAgICAgICAgbmF2OiB0cnVlLFxuICAgICAgICAgICAgIGxhenlMb2FkOiB0cnVlLFxuICAgICAgICAgICAgIG5hdlRleHQ6IFtcIjxpIGNsYXNzPSdpY29uLWFycm93LXNsaWRlci1sZWZ0IHJhbmRvbS1hcnJvdy1wcmV2JyBhcmlhLWhpZGRlbj0ndHJ1ZSc+PC9pPlwiLCBcIjxpIGNsYXNzPSdpY29uLWFycm93LXNsaWRlci1yaWdodCByYW5kb20tYXJyb3ctbmV4dCcgYXJpYS1oaWRkZW49J3RydWUnPjwvaT5cIl0sXG4gICAgICAgICAgICAgcmVzcG9uc2l2ZToge1xuICAgICAgICAgICAgICAgICAwOiB7XG4gICAgICAgICAgICAgICAgICAgICBpdGVtczogMVxuICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICA2MDA6IHtcbiAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAyXG4gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIDEwMDA6IHtcbiAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAzXG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9XG4gICAgICAgICB9KTtcbiAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIucmF0aW5nLXN0YXJzIC5sYWJlbC1zdGFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICQoXCIjdXNlcl9yYXRpbmdcIikudmFsKCQodGhpcykuYXR0cihcImRhdGEtc3RhclwiKSlcbiAgICAgICAgIH0pO1xuICAgICAgICAgLy8gbW9iaWxlIG1lbnVcbiAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIuYnRuLW9wZW4tbW9iaWxlLW5hdlwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5hdk1vYmlsZVwiKS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgICAgICAgICQoXCJodG1sXCIpLmFkZENsYXNzKFwiZGlzYWJsZS1ib2R5LXNjcm9sbFwiKTtcbiAgICAgICAgICAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImRpc2FibGUtYm9keS1zY3JvbGxcIilcbiAgICAgICAgIH0pO1xuICAgICAgICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5idG4tY2xvc2UtbW9iaWxlLW5hdlwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5hdk1vYmlsZVwiKS5zdHlsZS53aWR0aCA9IFwiMFwiO1xuICAgICAgICAgICAgICQoXCJodG1sXCIpLnJlbW92ZUNsYXNzKFwiZGlzYWJsZS1ib2R5LXNjcm9sbFwiKTtcbiAgICAgICAgICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImRpc2FibGUtYm9keS1zY3JvbGxcIilcbiAgICAgICAgIH0pO1xuICAgICAgICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5jbG9zZS1tb2JpbGUtbmF2XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmF2TW9iaWxlXCIpLnN0eWxlLndpZHRoID0gXCIwXCJcbiAgICAgICAgIH0pO1xuICAgICAgICAgJChcIiNsb2dpbk1vZGFsXCIpLm9uKFwiaGlkZGVuLmJzLm1vZGFsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgIGlmICgkKFwiYm9keVwiKS5oYXNDbGFzcyhcImRpc2FibGUtYm9keS1zY3JvbGxcIikpIHtcbiAgICAgICAgICAgICAgICAgJChcImh0bWxcIikucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlLWJvZHktc2Nyb2xsXCIpO1xuICAgICAgICAgICAgICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImRpc2FibGUtYm9keS1zY3JvbGxcIilcbiAgICAgICAgICAgICB9XG4gICAgICAgICB9KVxuICAgICB9KTtcbiIsIlxuICAgICQoJy5wcmljZS1pbnB1dCcpLmtleXByZXNzKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAodHlwZW9mIHRob3VzYW5kc19zZXBhcmF0b3IgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRob3VzYW5kc19zZXBhcmF0b3IgPSAnLic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRob3VzYW5kc19zZXBhcmF0b3IgPT0gJy4nKSB7XG4gICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKChldmVudC53aGljaCAhPSA0NiB8fCAkdGhpcy52YWwoKS5pbmRleE9mKCcuJykgIT0gLTEpICYmXG4gICAgICAgICAgICAgICAgKChldmVudC53aGljaCA8IDQ4IHx8IGV2ZW50LndoaWNoID4gNTcpICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudC53aGljaCAhPSAwICYmIGV2ZW50LndoaWNoICE9IDgpKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdGV4dCA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBpZiAoKHRleHQuaW5kZXhPZignLicpICE9IC0xKSAmJlxuICAgICAgICAgICAgICAgICh0ZXh0LnN1YnN0cmluZyh0ZXh0LmluZGV4T2YoJy4nKSkubGVuZ3RoID4gMikgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQud2hpY2ggIT0gMCAmJiBldmVudC53aGljaCAhPSA4KSAmJlxuICAgICAgICAgICAgICAgICgkKHRoaXMpWzBdLnNlbGVjdGlvblN0YXJ0ID49IHRleHQubGVuZ3RoIC0gMikpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgICAgIGlmICgoZXZlbnQud2hpY2ggIT0gNDQgfHwgJHRoaXMudmFsKCkuaW5kZXhPZignLCcpICE9IC0xKSAmJlxuICAgICAgICAgICAgICAgICgoZXZlbnQud2hpY2ggPCA0OCB8fCBldmVudC53aGljaCA+IDU3KSAmJlxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQud2hpY2ggIT0gMCAmJiBldmVudC53aGljaCAhPSA4KSkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRleHQgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgaWYgKCh0ZXh0LmluZGV4T2YoJywnKSAhPSAtMSkgJiZcbiAgICAgICAgICAgICAgICAodGV4dC5zdWJzdHJpbmcodGV4dC5pbmRleE9mKCcsJykpLmxlbmd0aCA+IDIpICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50LndoaWNoICE9IDAgJiYgZXZlbnQud2hpY2ggIT0gOCkgJiZcbiAgICAgICAgICAgICAgICAoJCh0aGlzKVswXS5zZWxlY3Rpb25TdGFydCA+PSB0ZXh0Lmxlbmd0aCAtIDIpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy9mdWxsIHNjcmVlblxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcImlmcmFtZVwiKS5hdHRyKFwiYWxsb3dmdWxsc2NyZWVuXCIsIFwiXCIpXG4gICAgfSk7XG4iLCJcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXF1ZXN0O1xuICAgICAgICAvL21ha2UgcmVnaXN0ZXJlZCBjb21tZW50XG4gICAgICAgICQoXCIjbWFrZV9jb21tZW50X3JlZ2lzdGVyZWRcIikuc3VibWl0KGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHZhciBjb21tZW50X3RleHQgPSAkLnRyaW0oJCgnI2NvbW1lbnRfdGV4dCcpLnZhbCgpKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50X3RleHQubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICQoJyNjb21tZW50X3RleHQnKS5hZGRDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCcjY29tbWVudF90ZXh0JykucmVtb3ZlQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgdmFyICRpbnB1dHMgPSAkZm9ybS5maW5kKFwiaW5wdXQsIHNlbGVjdCwgYnV0dG9uLCB0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjcHJvZHVjdF9jb21tZW50X2xpbWl0XCIpLnZhbCgpKTtcblxuICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWREYXRhID0gJGZvcm0uc2VyaWFsaXplQXJyYXkoKTtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWREYXRhLnB1c2goe25hbWU6IGNzZnJfdG9rZW5fbmFtZSwgdmFsdWU6ICQuY29va2llKGNzZnJfY29va2llX25hbWUpfSk7XG4gICAgICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBcImxhbmdfZm9sZGVyXCIsIHZhbHVlOiBsYW5nX2ZvbGRlcn0pO1xuICAgICAgICAgICAgc2VyaWFsaXplZERhdGEucHVzaCh7bmFtZTogXCJsaW1pdFwiLCB2YWx1ZTogbGltaXR9KTtcblxuICAgICAgICAgICAgJGlucHV0cy5wcm9wKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICByZXF1ZXN0ID0gJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJwcm9kdWN0X2NvbnRyb2xsZXIvbWFrZV9jb21tZW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICAgICAgZGF0YTogc2VyaWFsaXplZERhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcXVlc3QuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAkaW5wdXRzLnByb3AoXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb21tZW50LXJlc3VsdFwiKS5pbm5lckhUTUwgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAkKFwiI21ha2VfY29tbWVudF9yZWdpc3RlcmVkXCIpWzBdLnJlc2V0KCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICAvL21ha2UgY29tbWVudFxuICAgICAgICAkKFwiI21ha2VfY29tbWVudFwiKS5zdWJtaXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGNvbW1lbnRfbmFtZSA9ICQudHJpbSgkKCcjY29tbWVudF9uYW1lJykudmFsKCkpO1xuICAgICAgICAgICAgdmFyIGNvbW1lbnRfZW1haWwgPSAkLnRyaW0oJCgnI2NvbW1lbnRfZW1haWwnKS52YWwoKSk7XG4gICAgICAgICAgICB2YXIgY29tbWVudF90ZXh0ID0gJC50cmltKCQoJyNjb21tZW50X3RleHQnKS52YWwoKSk7XG5cbiAgICAgICAgICAgIGlmIChjb21tZW50X25hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICQoJyNjb21tZW50X25hbWUnKS5hZGRDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCcjY29tbWVudF9uYW1lJykucmVtb3ZlQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbW1lbnRfZW1haWwubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICQoJyNjb21tZW50X2VtYWlsJykuYWRkQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCgnI2NvbW1lbnRfZW1haWwnKS5yZW1vdmVDbGFzcyhcImlzLWludmFsaWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tbWVudF90ZXh0Lmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAkKCcjY29tbWVudF90ZXh0JykuYWRkQ2xhc3MoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCgnI2NvbW1lbnRfdGV4dCcpLnJlbW92ZUNsYXNzKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgdmFyICRpbnB1dHMgPSAkZm9ybS5maW5kKFwiaW5wdXQsIHNlbGVjdCwgYnV0dG9uLCB0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgIHZhciBsaW1pdCA9IHBhcnNlSW50KCQoXCIjcHJvZHVjdF9jb21tZW50X2xpbWl0XCIpLnZhbCgpKTtcblxuICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWREYXRhID0gJGZvcm0uc2VyaWFsaXplQXJyYXkoKTtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWREYXRhLnB1c2goe25hbWU6IGNzZnJfdG9rZW5fbmFtZSwgdmFsdWU6ICQuY29va2llKGNzZnJfY29va2llX25hbWUpfSk7XG4gICAgICAgICAgICBzZXJpYWxpemVkRGF0YS5wdXNoKHtuYW1lOiBcImxhbmdfZm9sZGVyXCIsIHZhbHVlOiBsYW5nX2ZvbGRlcn0pO1xuICAgICAgICAgICAgc2VyaWFsaXplZERhdGEucHVzaCh7bmFtZTogXCJsaW1pdFwiLCB2YWx1ZTogbGltaXR9KTtcblxuICAgICAgICAgICAgdmFyIHJlY2FwdGNoYV9zdGF0dXMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGlzX3JlY2FwdGNoYV9lbmFibGVkID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAkKHNlcmlhbGl6ZWREYXRhKS5lYWNoKGZ1bmN0aW9uIChpLCBmaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQubmFtZSA9PSBcImctcmVjYXB0Y2hhLXJlc3BvbnNlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmctcmVjYXB0Y2hhJykuYWRkQ2xhc3MoXCJpcy1yZWNhcHRjaGEtaW52YWxpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNhcHRjaGFfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWNhcHRjaGFfc3RhdHVzID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAkKCcuZy1yZWNhcHRjaGEnKS5yZW1vdmVDbGFzcyhcImlzLXJlY2FwdGNoYS1pbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgICRpbnB1dHMucHJvcChcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJwcm9kdWN0X2NvbnRyb2xsZXIvbWFrZV9jb21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBzZXJpYWxpemVkRGF0YSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dHMucHJvcChcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3JlY2FwdGNoYV9lbmFibGVkID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyZWNhcHRjaGEucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbW1lbnQtcmVzdWx0XCIpLmlubmVySFRNTCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI21ha2VfY29tbWVudFwiKVswXS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH0pOyIsIiAgICAkKCcjZm9ybS1wcm9kdWN0LWZpbHRlcnMgaW5wdXRbbmFtZT1mb3JtX2xhbmdfYmFzZV91cmxdJykucmVtb3ZlKCk7XG4gICAgJCgnI2Zvcm0tcHJvZHVjdC1maWx0ZXJzIGlucHV0W25hbWU9bGFuZ19mb2xkZXJdJykucmVtb3ZlKCk7XG4gICAgJCgnI2Zvcm0tY29sbGVjdGlvbi1maWx0ZXJzIGlucHV0W25hbWU9Zm9ybV9sYW5nX2Jhc2VfdXJsXScpLnJlbW92ZSgpO1xuICAgICQoJyNmb3JtLWNvbGxlY3Rpb24tZmlsdGVycyBpbnB1dFtuYW1lPWxhbmdfZm9sZGVyXScpLnJlbW92ZSgpO1xuICAgICQoJyNmb3JtLXJlbW92ZS1mcm9tLWNhcnQgaW5wdXRbbmFtZT1mb3JtX2xhbmdfYmFzZV91cmxdJykucmVtb3ZlKCk7XG4gICAgJCgnI2Zvcm0tcmVtb3ZlLWZyb20tY2FydCBpbnB1dFtuYW1lPWxhbmdfZm9sZGVyXScpLnJlbW92ZSgpOyIsIiQoJy5pdGVtLXF1aWNrLWJ1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICBpZiAoJCgnc3BhbicpLmhhc0NsYXNzKCduZXdfcHJpY2UnKSkge1xuICAgIHZhciBwcmljZSA9ICQodGhpcykucGFyZW50KCkuc2libGluZ3MoJy5pdGVtLWRldGFpbHMnKS5jaGlsZHJlbignLml0ZW0tbWV0YScpLmNoaWxkcmVuKCcubmV3X3ByaWNlJykuY2hpbGRyZW4oJ21ldGFbaXRlbXByb3A9XCJwcmljZVwiXScpLmF0dHIoJ2NvbnRlbnQnKTtcbiAgICB2YXIgb2xkUHJpY2UgPSAkKHRoaXMpLnBhcmVudCgpLnNpYmxpbmdzKCcuaXRlbS1kZXRhaWxzJykuY2hpbGRyZW4oJy5pdGVtLW1ldGEnKS5jaGlsZHJlbignLm9sZF9wcmljZScpLmNoaWxkcmVuKCdtZXRhW2l0ZW1wcm9wPVwicHJpY2VcIl0nKS5hdHRyKCdjb250ZW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHByaWNlID0gJCh0aGlzKS5wYXJlbnQoKS5zaWJsaW5ncygnLml0ZW0tZGV0YWlscycpLmNoaWxkcmVuKCcuaXRlbS1tZXRhJykuY2hpbGRyZW4oJy5wcmljZScpLmNoaWxkcmVuKCdtZXRhW2l0ZW1wcm9wPVwicHJpY2VcIl0nKS5hdHRyKCdjb250ZW50Jyk7XG4gIH1cbiAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcjcXVhbnRpdHlfdG91Y2hzcGluJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHByaWNlRmllbGQgPSAkKCcucHJvZHVjdC1jb250ZW50LWRldGFpbHMnKS5jaGlsZHJlbignLnJvdy1jdXN0b20ucHJpY2UnKS5jaGlsZHJlbignc3Bhbi5wcmljZScpO1xuICAgIHZhciBuZXdQcmljZUZpZWxkID0gJCgnLnJvdy1jdXN0b20ucHJpY2UnKS5jaGlsZHJlbignc3Bhbi5uZXdfcHJpY2UnKTtcbiAgICB2YXIgb2xkUHJpY2VGaWVsZCA9ICQoJy5yb3ctY3VzdG9tLnByaWNlJykuY2hpbGRyZW4oJ3NwYW4ub2xkX3ByaWNlJyk7XG4gICAgdmFyIHF1YW50aXR5ID0gJCgnI3F1YW50aXR5X3RvdWNoc3BpbicpLnZhbCgpO1xuICAgIGlmIChwcmljZS5oYXNDbGFzcyhwcmljZSkpIHtcbiAgICAgIHZhciB0b3RhbFByaWNlID0gKHByaWNlICogcXVhbnRpdHkpO1xuICAgICAgcHJpY2VGaWVsZC5odG1sKHRvdGFsUHJpY2UgKyBcIjxzcGFuPuKCvTwvc3Bhbj5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0b3RhbFByaWNlID0gKHByaWNlICogcXVhbnRpdHkpLnRvRml4ZWQoMik7XG4gICAgICB2YXIgb2xkVG90YWxQcmljZSA9IChvbGRQcmljZSAqIHF1YW50aXR5KTtcbiAgICAgIG5ld1ByaWNlRmllbGQuaHRtbCh0b3RhbFByaWNlICsgXCI8c3Bhbj7igr08L3NwYW4+XCIpO1xuICAgICAgb2xkUHJpY2VGaWVsZC5odG1sKG9sZFRvdGFsUHJpY2UgKyBcIjxzcGFuPuKCvTwvc3Bhbj5cIik7XG4gICAgfVxuICB9KTtcbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgdmFyIHByaWNlID0gJCgnbWV0YVtpdGVtcHJvcD1cInByaWNlXCJdJykuYXR0cignY29udGVudCcpO1xuICB2YXIgb2xkUHJpY2UgPSAkKCcub2xkX3ByaWNlJykuY2hpbGRyZW4oJ21ldGFbaXRlbXByb3A9XCJwcmljZVwiXScpLmF0dHIoJ2NvbnRlbnQnKTtcbiAgdmFyIG1heFF1YW50aXR5ID0gJCgnI3F1YW50aXR5X3RvdWNoc3BpbicpLmF0dHIoJ2RhdGEtbWF4LXF1YW50aXR5Jyk7XG5cbiAgdmFyIHByaWNlRmllbGQgPSAkKCcucHJvZHVjdC1jb250ZW50LWRldGFpbHMnKS5jaGlsZHJlbignLnJvdy1jdXN0b20ucHJpY2UnKS5jaGlsZHJlbignc3Bhbi5wcmljZScpO1xuICB2YXIgbmV3UHJpY2VGaWVsZCA9ICQoJy5wcm9kdWN0LWNvbnRlbnQtZGV0YWlscycpLmNoaWxkcmVuKCcucm93LWN1c3RvbS5wcmljZScpLmNoaWxkcmVuKCdzcGFuLm5ld19wcmljZScpO1xuICB2YXIgb2xkUHJpY2VGaWVsZCA9ICQoJy5wcm9kdWN0LWNvbnRlbnQtZGV0YWlscycpLmNoaWxkcmVuKCcucm93LWN1c3RvbS5wcmljZScpLmNoaWxkcmVuKCdzcGFuLm9sZF9wcmljZScpO1xuXG4gIHZhciBtaW5PcmRlclF1YW50aXR5ID0gKCskKCcjcXVhbnRpdHlfdG91Y2hzcGluJykuYXR0cignZGF0YS1taW4tb3JkZXInKSB8fCAxKTtcblxuICAkKCcjcXVhbnRpdHlfdG91Y2hzcGluJykudmFsKG1pbk9yZGVyUXVhbnRpdHkpO1xuICB2YXIgcXVhbnRpdHkgPSBtaW5PcmRlclF1YW50aXR5O1xuXG4gIHZhciBkZWZpbmVQcmljZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgkKCcucm93LWN1c3RvbS5wcmljZSBzcGFuJykuaGFzQ2xhc3MoJ3ByaWNlJykpIHtcbiAgICAgIHZhciB0b3RhbFByaWNlID0gKHByaWNlICogcXVhbnRpdHkpO1xuICAgICAgcHJpY2VGaWVsZC5odG1sKHRvdGFsUHJpY2UgKyBcIiA8c3Bhbj7igr08L3NwYW4+XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdG90YWxQcmljZSA9IChwcmljZSAqIHF1YW50aXR5KS50b0ZpeGVkKDIpO1xuICAgICAgdmFyIG9sZFRvdGFsUHJpY2UgPSAob2xkUHJpY2UgKiBxdWFudGl0eSk7XG4gICAgICBuZXdQcmljZUZpZWxkLmh0bWwodG90YWxQcmljZSArIFwiPHNwYW4+4oK9PC9zcGFuPlwiKTtcbiAgICAgIG9sZFByaWNlRmllbGQuaHRtbChvbGRUb3RhbFByaWNlICsgXCIgPHNwYW4+4oK9PC9zcGFuPlwiKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlc2V0UHJpY2UgPSBmdW5jdGlvbigpIHtcbiAgICAkKCcjcXVhbnRpdHlfdG91Y2hzcGluJykudmFsKHF1YW50aXR5KTtcbiAgICBkZWZpbmVQcmljZSgpO1xuICB9XG5cbiAgJCgkKCcjcXVhbnRpdHlfdG91Y2hzcGluJykpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoJCgnI3F1YW50aXR5X3RvdWNoc3BpbicpLnZhbCgpICUgbWluT3JkZXJRdWFudGl0eSAhPSAwKSB7XG4gICAgICByZXNldFByaWNlKCk7XG4gICAgfSBlbHNlIGlmICgkKCcjcXVhbnRpdHlfdG91Y2hzcGluJykudmFsKCkgPiBtYXhRdWFudGl0eSApIHtcbiAgICAgIHJlc2V0UHJpY2UoKTtcbiAgICB9IGVsc2UgaWYgKCQoJyNxdWFudGl0eV90b3VjaHNwaW4nKS52YWwoKSA9PSAwKSB7XG4gICAgICByZXNldFByaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1YW50aXR5ID0gKyQoJyNxdWFudGl0eV90b3VjaHNwaW4nKS52YWwoKTtcbiAgICAgIGRlZmluZVByaWNlKCk7XG4gICAgfVxuICB9KTtcblxuICAkKCcuaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duJykub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChtaW5PcmRlclF1YW50aXR5ID09IDEpIHtcbiAgICAgIGlmIChxdWFudGl0eSA8PSBtaW5PcmRlclF1YW50aXR5KSB7XG4gICAgICAgIHJlc2V0UHJpY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHF1YW50aXR5IDw9IG1pbk9yZGVyUXVhbnRpdHkpIHtcbiAgICAgICAgcmVzZXRQcmljZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVhbnRpdHkgLT0gbWluT3JkZXJRdWFudGl0eTtcbiAgICAgICAgcmVzZXRQcmljZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgJCgnLmlucHV0LWdyb3VwLWFwcGVuZCAuYm9vdHN0cmFwLXRvdWNoc3Bpbi11cCcpLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbigpIHtcbiAgICBpZiAobWluT3JkZXJRdWFudGl0eSA9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1YW50aXR5ICs9IG1pbk9yZGVyUXVhbnRpdHk7XG4gICAgICByZXNldFByaWNlKCk7XG4gICAgfVxuICB9KTtcblxuICBkZWZpbmVQcmljZSgpO1xufSk7XG4iLCIgICAgLy9zZXQgbWFpbiBpbWFnZVxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcuYnRuLXNldC1pbWFnZS1tYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW1hZ2VfaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtaW1hZ2UtaWQnKTtcbiAgICAgICAgdmFyIHByb2R1Y3RfaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtcHJvZHVjdC1pZCcpO1xuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIFwiaW1hZ2VfaWRcIjogaW1hZ2VfaWQsXG4gICAgICAgICAgICBcInByb2R1Y3RfaWRcIjogcHJvZHVjdF9pZFxuICAgICAgICB9O1xuICAgICAgICAkKCcuYmFkZ2UtaXMtaW1hZ2UtbWFpbicpLnJlbW92ZUNsYXNzKCdiYWRnZS1zdWNjZXNzJyk7XG4gICAgICAgICQoJy5iYWRnZS1pcy1pbWFnZS1tYWluJykuYWRkQ2xhc3MoJ2JhZGdlLXNlY29uZGFyeScpO1xuICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdiYWRnZS1zZWNvbmRhcnknKTtcbiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYmFkZ2Utc3VjY2VzcycpO1xuICAgICAgICBkYXRhW2NzZnJfdG9rZW5fbmFtZV0gPSAkLmNvb2tpZShjc2ZyX2Nvb2tpZV9uYW1lKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBiYXNlX3VybCArIFwiZmlsZV9jb250cm9sbGVyL3NldF9pbWFnZV9tYWluXCIsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyIsIlxuICAgIC8vc2V0IG1haW4gaW1hZ2Ugc2Vzc2lvblxuXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5idG4tc2V0LWltYWdlLW1haW4tc2Vzc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGZpbGVfaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtZmlsZS1pZCcpO1xuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIFwiZmlsZV9pZFwiOiBmaWxlX2lkXG4gICAgICAgIH07XG4gICAgICAgICQoJy5iYWRnZS1pcy1pbWFnZS1tYWluJykucmVtb3ZlQ2xhc3MoJ2JhZGdlLXN1Y2Nlc3MnKTtcbiAgICAgICAgJCgnLmJhZGdlLWlzLWltYWdlLW1haW4nKS5hZGRDbGFzcygnYmFkZ2Utc2Vjb25kYXJ5Jyk7XG4gICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2JhZGdlLXNlY29uZGFyeScpO1xuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdiYWRnZS1zdWNjZXNzJyk7XG4gICAgICAgIGRhdGFbY3Nmcl90b2tlbl9uYW1lXSA9ICQuY29va2llKGNzZnJfY29va2llX25hbWUpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IGJhc2VfdXJsICsgXCJmaWxlX2NvbnRyb2xsZXIvc2V0X2ltYWdlX21haW5fc2Vzc2lvblwiLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsiLCJcblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNzaG93X3Bob25lX251bWJlcicsIGZ1bmN0aW9uICgpIHtcblx0ICAgICQodGhpcykuaGlkZSgpO1xuXHQgICAgJChcIiNwaG9uZV9udW1iZXJcIikuc2hvdygpO1xuXHR9KTtcbiIsIlxuXHQkKFwiZm9ybVwiKS5zdWJtaXQoZnVuY3Rpb24gKCkge1xuXHQgICAgJChcImlucHV0W25hbWU9J1wiICsgY3Nmcl90b2tlbl9uYW1lICsgXCInXVwiKS52YWwoJC5jb29raWUoY3Nmcl9jb29raWVfbmFtZSkpO1xuXHR9KTtcbiIsIlxuICAgICQoXCIjZm9ybV92YWxpZGF0ZVwiKS5zdWJtaXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAkKCcuY3VzdG9tLWNvbnRyb2wtdmFsaWRhdGUtaW5wdXQnKS5yZW1vdmVDbGFzcygnY3VzdG9tLWNvbnRyb2wtdmFsaWRhdGUtZXJyb3InKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcuY3VzdG9tLWNvbnRyb2wtdmFsaWRhdGUtaW5wdXQgLmVycm9yJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5pcyhcIjp2aXNpYmxlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJ1tdJywgJycpO1xuICAgICAgICAgICAgICAgICAgICAkKCcubGFiZWxfdmFsaWRhdGVfJyArIG5hbWUpLmFkZENsYXNzKCdjdXN0b20tY29udHJvbC12YWxpZGF0ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxMDApO1xuICAgIH0pO1xuXG4gICAgJCgnLmN1c3RvbS1jb250cm9sLXZhbGlkYXRlLWlucHV0IGlucHV0JykuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmFtZSA9ICQodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCdbXScsICcnKTtcbiAgICAgICAgJCgnLmxhYmVsX3ZhbGlkYXRlXycgKyBuYW1lKS5yZW1vdmVDbGFzcygnY3VzdG9tLWNvbnRyb2wtdmFsaWRhdGUtZXJyb3InKTtcbiAgICB9KTtcblxuICAgICQoXCIjZm9ybV92YWxpZGF0ZVwiKS52YWxpZGF0ZSgpO1xuICAgICQoXCIjZm9ybV92YWxpZGF0ZV9zZWFyY2hcIikudmFsaWRhdGUoKTtcbiAgICAkKFwiI2Zvcm1fdmFsaWRhdGVfc2VhcmNoX21vYmlsZVwiKS52YWxpZGF0ZSgpO1xuICAgICQoXCIjZm9ybV92YWxpZGF0ZV9wYXlvdXRfMVwiKS52YWxpZGF0ZSgpO1xuICAgICQoXCIjZm9ybV92YWxpZGF0ZV9wYXlvdXRfMlwiKS52YWxpZGF0ZSgpO1xuICAgICQoXCIjZm9ybV92YWxpZGF0ZV9wYXlvdXRfM1wiKS52YWxpZGF0ZSgpO1xuICAgICQoXCIjZm9ybV92YWxpZGF0ZV9uZXdzbGV0dGVyXCIpLnZhbGlkYXRlKCk7XG4gICAgJChcIiNmb3JtX2FkZF9jYXJ0XCIpLnZhbGlkYXRlKCk7XG4gICAgJChcIiNmb3JtX2FkZF9jYXJ0X21vYmlsZVwiKS52YWxpZGF0ZSgpO1xuXG4gICAgLy92YWxpZGF0ZSBwcm9kdWN0IHZhcmlhdGlvbnNcbiAgICAkKFwiI2Zvcm1fYWRkX2NhcnRcIikuc3VibWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCgnI2Zvcm1fYWRkX2NhcnQgLmN1c3RvbS1jb250cm9sLXZhcmlhdGlvbiBpbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2Vycm9yJykpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoJ2lkJyk7XG4gICAgICAgICAgICAgICAgJCgnI2Zvcm1fYWRkX2NhcnQgLmN1c3RvbS1jb250cm9sLXZhcmlhdGlvbiBsYWJlbCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdmb3InKSA9PSBpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cignaWQnKTtcbiAgICAgICAgICAgICAgICAkKCcjZm9ybV9hZGRfY2FydCAuY3VzdG9tLWNvbnRyb2wtdmFyaWF0aW9uIGxhYmVsJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2ZvcicpID09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgJChcIiNmb3JtX2FkZF9jYXJ0X21vYmlsZVwiKS5zdWJtaXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAkKCcjZm9ybV9hZGRfY2FydF9tb2JpbGUgLmN1c3RvbS1jb250cm9sLXZhcmlhdGlvbiBpbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2Vycm9yJykpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoJ2lkJyk7XG4gICAgICAgICAgICAgICAgJCgnI2Zvcm1fYWRkX2NhcnRfbW9iaWxlIC5jdXN0b20tY29udHJvbC12YXJpYXRpb24gbGFiZWwnKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignZm9yJykgPT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoJ2lkJyk7XG4gICAgICAgICAgICAgICAgJCgnI2Zvcm1fYWRkX2NhcnRfbW9iaWxlIC5jdXN0b20tY29udHJvbC12YXJpYXRpb24gbGFiZWwnKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignZm9yJykgPT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcuY3VzdG9tLWNvbnRyb2wtdmFyaWF0aW9uIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmFtZSA9ICQodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICAkKCcuY3VzdG9tLWNvbnRyb2wtdmFyaWF0aW9uIGxhYmVsJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdkYXRhLWlucHV0LW5hbWUnKSA9PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCgnLnZhbGlkYXRlX3Rlcm1zJykuc3VibWl0KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoISQoJy5jdXN0b20tY29udHJvbC12YWxpZGF0ZS1pbnB1dCBpbnB1dCcpLmlzKFwiOmNoZWNrZWRcIikpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgJCgnLmN1c3RvbS1jb250cm9sLXZhbGlkYXRlLWlucHV0JykuYWRkQ2xhc3MoJ2N1c3RvbS1jb250cm9sLXZhbGlkYXRlLWVycm9yJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQoJy5jdXN0b20tY29udHJvbC12YWxpZGF0ZS1pbnB1dCcpLnJlbW92ZUNsYXNzKCdjdXN0b20tY29udHJvbC12YWxpZGF0ZS1lcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKFwiaW5wdXQga2V5dXAgcGFzdGUgY2hhbmdlXCIsIFwiLnZhbGlkYXRlX3ByaWNlIC5wcmljZS1pbnB1dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWwgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgIGlmICgkLmlzTnVtZXJpYyh2YWwpICYmIHZhbCAhPSAwKSB7XG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICQoJ2lucHV0W3R5cGU9cmFkaW9dW25hbWU9cHJvZHVjdF90eXBlXScpLmNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09ICdkaWdpdGFsJykge1xuICAgICAgICAgICAgJCgnLmxpc3Rpbmdfb3JkaW5hcnlfbGlzdGluZycpLmhpZGUoKTtcbiAgICAgICAgICAgICQoJy5saXN0aW5nX3Rha2Vfb2ZmZXJzJykuaGlkZSgpO1xuICAgICAgICAgICAgJCgnLmxpc3Rpbmdfc2VsbF9vbl9zaXRlIGlucHV0JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJCgnLmxpc3Rpbmdfb3JkaW5hcnlfbGlzdGluZycpLnNob3coKTtcbiAgICAgICAgICAgICQoJy5saXN0aW5nX3Rha2Vfb2ZmZXJzJykuc2hvdygpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoJy52YWxpZGF0ZV9wcmljZScpLnN1Ym1pdChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgJCgnLnZhbGlkYXRlX3ByaWNlIC52YWxpZGF0ZS1wcmljZS1pbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJC5pc051bWVyaWModmFsKSAmJiB2YWwgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuIiwiXG4gICAgJC5mbi53cmFwSW5UYWcgPSBmdW5jdGlvbiAob3B0cykge1xuICAgICAgICBmdW5jdGlvbiBnZXRUZXh0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50ZXh0Q29udGVudCA/IG9iai50ZXh0Q29udGVudCA6IG9iai5pbm5lclRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGFnID0gb3B0cy50YWcgfHwgJ3N0cm9uZycsXG4gICAgICAgICAgICB3b3JkcyA9IG9wdHMud29yZHMgfHwgW10sXG4gICAgICAgICAgICByZWdleCA9IFJlZ0V4cCh3b3Jkcy5qb2luKCd8JyksICdnaScpLFxuICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSAnPCcgKyB0YWcgKyAnPiQmPC8nICsgdGFnICsgJz4nO1xuICAgICAgICAkKHRoaXMpLmNvbnRlbnRzKCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICAgICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoZ2V0VGV4dCh0aGlzKS5yZXBsYWNlKHJlZ2V4LCByZXBsYWNlbWVudCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0cy5pZ25vcmVDaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS53cmFwSW5UYWcob3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4iXX0=
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment