PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / page-form-builder / admin-page-tpl / _out / modal__form_open.js

modal__form_open.js in Booking Calendar 11.9, at includes/page-form-builder/admin-page-tpl/_out/modal__form_open.js

407 lines 53.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 /**
4 * Booking Calendar — Load Form modal helper (BFB Admin)
5 *
6 * UI.Modal_Load_Form.open(on_confirm, on_open)
7 *
8 * on_confirm(payload):
9 * payload = { form_slug: string, form: Object|null }
10 *
11 * Depends on:
12 * - UI.Templates.ensure_dom_ref_from_wp_template
13 * - UI.Modals.show/hide
14 * - wpbc_bfb__ajax_list_user_forms()
15 *
16 * @file: ../includes/page-form-builder/admin-page-tpl/_out/modal__form_open.js
17 */
18 (function (w, d) {
19 'use strict';
20
21 const Core = w.WPBC_BFB_Core = w.WPBC_BFB_Core || {};
22 const UI = Core.UI = Core.UI || {};
23 UI.Modal_Load_Form = UI.Modal_Load_Form || {};
24
25 // Idempotency guard.
26 if (UI.Modal_Load_Form.__bound) {
27 return;
28 }
29 UI.Modal_Load_Form.__bound = true;
30 const MODAL_DOM_ID = 'wpbc_bfb_modal__load_form';
31 const TPL_MODAL_ID = 'wpbc-bfb-tpl-modal-load_form';
32 const ID_SEARCH = 'wpbc_bfb_popup_modal__load_form__search';
33 const SEL_CONFIRM = '#' + MODAL_DOM_ID + ' [data-wpbc-bfb-confirm="1"]';
34 const SEL_CANCEL = '#' + MODAL_DOM_ID + ' [data-wpbc-bfb-cancel="1"]';
35 const SEL_ERROR = '#' + MODAL_DOM_ID + ' [data-wpbc-bfb-error="1"]';
36 function has_text(v) {
37 return !!(v && String(v).trim());
38 }
39 function get_el(id) {
40 return d.getElementById(id);
41 }
42 function get_modal_el() {
43 return d.getElementById(MODAL_DOM_ID);
44 }
45 function set_error(msg) {
46 const modal_el = get_modal_el();
47 const el = modal_el ? modal_el.querySelector('[data-wpbc-bfb-error="1"]') : null;
48 if (!el) {
49 return;
50 }
51 if (has_text(msg)) {
52 el.innerHTML = String(msg);
53 el.style.display = '';
54 } else {
55 el.innerHTML = '';
56 el.style.display = 'none';
57 }
58 }
59 function set_confirm_enabled(is_enabled) {
60 const modal_el = get_modal_el();
61 const btn = modal_el ? modal_el.querySelector('[data-wpbc-bfb-confirm="1"]') : null;
62 if (!btn) {
63 return;
64 }
65 if (is_enabled) {
66 btn.classList.remove('disabled');
67 btn.setAttribute('aria-disabled', 'false');
68 } else {
69 btn.classList.add('disabled');
70 btn.setAttribute('aria-disabled', 'true');
71 }
72 }
73 function escape_html(s) {
74 return String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;');
75 }
76 function render_list(modal_el, forms) {
77 const root = modal_el ? modal_el.querySelector('[data-wpbc-bfb-forms-list="1"]') : null;
78 if (!root) {
79 return;
80 }
81 let html = '';
82 let any = false;
83 for (let i = 0; i < (forms || []).length; i++) {
84 const item = forms[i] || {};
85 const slug = String(item.form_slug || '');
86 const title = String(item.title || slug || '');
87 const desc = String(item.description || '');
88 const pic = String(item.picture_url || item.image_url || '');
89 if (!slug) {
90 continue;
91 }
92 any = true;
93 const thumb = pic ? '<img src="' + escape_html(pic) + '" alt="" />' : '<div class="wpbc_bfb__load_form_item_thumb_blank_img">No image</div>';
94 const meta = '<div class="form_item_text_slug">' + escape_html(slug) + '</div>';
95 const line2 = desc ? '<div class="form_item_text_desc">' + escape_html(desc) + '</div>' : '';
96 html += '' + '<div class="wpbc_bfb__load_form_item" data-wpbc-bfb-form-item="1" data-form-slug="' + escape_html(slug) + '"' + ' >' + ' <div class="wpbc_bfb__load_form_item_thumb">' + thumb + '</div>' + ' <div class="wpbc_bfb__load_form_item_text">' + ' <div class="form_item_text_title">' + escape_html(title) + '</div>' + meta + line2 + ' </div>' + '</div>';
97 }
98 if (!any) {
99 html = '<div style="padding:10px;color:#666;">No forms found.</div>';
100 }
101 root.innerHTML = html;
102
103 // Re-apply selection highlight if still present on this page.
104 const sel = modal_el.__wpbc_bfb_selected_form_slug || '';
105 if (sel) {
106 let found = null;
107 try {
108 found = root.querySelector('[data-form-slug="' + CSS.escape(sel) + '"]');
109 } catch (_e) {
110 found = null;
111 }
112 if (found) {
113 // found.style.background = '#f6f7f7';
114 found.classList.add('wpbc_bfb__load_form_item_selected');
115 set_confirm_enabled(true);
116 } else {
117 // Selection not on this page anymore -> reset.
118 root.querySelectorAll('.wpbc_bfb__load_form_item').forEach(el => {
119 el.classList.remove('wpbc_bfb__load_form_item_selected');
120 });
121 modal_el.__wpbc_bfb_selected_form_slug = '';
122 set_confirm_enabled(false);
123 }
124 }
125 }
126 function set_pager(modal_el, page, has_more) {
127 const pager = modal_el ? modal_el.querySelector('[data-wpbc-bfb-forms-pager="1"]') : null;
128 if (!pager) {
129 return;
130 }
131 const prev = pager.querySelector('[data-wpbc-bfb-page-prev="1"]');
132 const next = pager.querySelector('[data-wpbc-bfb-page-next="1"]');
133 const lab = pager.querySelector('[data-wpbc-bfb-page-label="1"]');
134 page = parseInt(page || 1, 10);
135 if (!page || page < 1) {
136 page = 1;
137 }
138 if (lab) {
139 lab.textContent = 'Page ' + page;
140 }
141 const prev_enabled = page > 1;
142 const next_enabled = !!has_more;
143 function set_btn(btn, enabled) {
144 if (!btn) {
145 return;
146 }
147 if (enabled) {
148 btn.classList.remove('disabled');
149 btn.setAttribute('aria-disabled', 'false');
150 } else {
151 btn.classList.add('disabled');
152 btn.setAttribute('aria-disabled', 'true');
153 }
154 }
155 set_btn(prev, prev_enabled);
156 set_btn(next, next_enabled);
157 }
158 function set_loading(modal_el, is_loading) {
159 const root = modal_el ? modal_el.querySelector('[data-wpbc-bfb-forms-list="1"]') : null;
160 if (!root) {
161 return;
162 }
163 if (is_loading) {
164 const mainNav = document.querySelector('.wpbc_bfb_popup_modal__forms_loading_spin_container').outerHTML;
165 root.innerHTML = mainNav;
166 // root.innerHTML = '<div class="wpbc_bfb_popup_modal__forms_loading_spin_container" data-wpbc-bfb-forms-loading="1">Loading...</div>'; //.
167 }
168 }
169 function bind_handlers(modal_el) {
170 if (!modal_el || modal_el.__wpbc_bfb_handlers_bound) {
171 return;
172 }
173 modal_el.__wpbc_bfb_handlers_bound = true;
174
175 // Click select item (delegated inside list).
176 modal_el.addEventListener('click', function (e) {
177 if (!e || !e.target || !e.target.closest) {
178 return;
179 }
180 const item = e.target.closest('[data-wpbc-bfb-form-item="1"]');
181 if (!item) {
182 return;
183 }
184 const slug = item.getAttribute('data-form-slug') || '';
185 modal_el.__wpbc_bfb_selected_form_slug = slug;
186
187 // Visual highlight
188 const root = modal_el.querySelector('[data-wpbc-bfb-forms-list="1"]');
189 if (root) {
190 const all = root.querySelectorAll('[data-wpbc-bfb-form-item="1"]');
191 for (let i = 0; i < all.length; i++) {
192 all[i].style.background = '';
193 }
194 }
195 // item.style.background = '#f6f7f7';
196 root.querySelectorAll('.wpbc_bfb__load_form_item').forEach(el => {
197 el.classList.remove('wpbc_bfb__load_form_item_selected');
198 });
199 item.classList.add('wpbc_bfb__load_form_item_selected');
200 set_confirm_enabled(!!slug);
201 }, true);
202
203 // Search filter. (server-side, debounced).
204 const search_el = get_el(ID_SEARCH);
205 if (search_el) {
206 if (!modal_el.__wpbc_bfb_search_timer) {
207 modal_el.__wpbc_bfb_search_timer = 0;
208 }
209 search_el.addEventListener('input', function () {
210 const v = String(search_el.value || '');
211 if (modal_el.__wpbc_bfb_search_timer) {
212 clearTimeout(modal_el.__wpbc_bfb_search_timer);
213 }
214 modal_el.__wpbc_bfb_search_timer = setTimeout(function () {
215 load_forms(modal_el, 1, v);
216 }, 300);
217 }, true);
218 }
219
220 // Pager click.
221 modal_el.addEventListener('click', function (e) {
222 if (!e || !e.target || !e.target.closest) {
223 return;
224 }
225 const prev = e.target.closest('[data-wpbc-bfb-page-prev="1"]');
226 const next = e.target.closest('[data-wpbc-bfb-page-next="1"]');
227 if (!prev && !next) {
228 return;
229 }
230 e.preventDefault();
231 if (prev && (prev.classList.contains('disabled') || prev.getAttribute('aria-disabled') === 'true') || next && (next.classList.contains('disabled') || next.getAttribute('aria-disabled') === 'true')) {
232 return;
233 }
234 const page = parseInt(modal_el.__wpbc_bfb_page || 1, 10) || 1;
235 const search = String(modal_el.__wpbc_bfb_search || '');
236 if (prev) {
237 load_forms(modal_el, Math.max(1, page - 1), search);
238 }
239 if (next) {
240 load_forms(modal_el, page + 1, search);
241 }
242 }, true);
243 }
244 function load_forms(modal_el, page, search, done) {
245 if (typeof w.wpbc_bfb__ajax_list_user_forms !== 'function') {
246 set_error('WPBC BFB: list forms helper missing.');
247 set_loading(modal_el, false);
248 if (typeof done === 'function') {
249 done(false, null);
250 }
251 return;
252 }
253 page = parseInt(page || 1, 10);
254 search = String(search || '');
255 if (!page || page < 1) {
256 page = 1;
257 }
258 set_error('');
259 set_confirm_enabled(false);
260 modal_el.__wpbc_bfb_selected_form_slug = '';
261 set_loading(modal_el, true);
262 w.wpbc_bfb__ajax_list_user_forms(null, {
263 include_global: 0,
264 page: page,
265 limit: 20,
266 search: search
267 }, function (ok, data) {
268 if (!ok || !data || !data.forms) {
269 set_loading(modal_el, false);
270 set_error('Failed to load forms list.');
271 set_pager(modal_el, 1, false);
272 if (typeof done === 'function') {
273 done(false, null);
274 }
275 return;
276 }
277 modal_el.__wpbc_bfb_forms_cache = data.forms || [];
278 modal_el.__wpbc_bfb_page = data.page || page;
279 modal_el.__wpbc_bfb_has_more = !!data.has_more;
280 modal_el.__wpbc_bfb_search = search;
281 render_list(modal_el, modal_el.__wpbc_bfb_forms_cache);
282 set_pager(modal_el, modal_el.__wpbc_bfb_page, modal_el.__wpbc_bfb_has_more);
283 set_error('');
284 if (typeof done === 'function') {
285 done(true, data);
286 }
287 });
288 }
289 UI.Modal_Load_Form.open = function (on_confirm, on_open) {
290 const ref = UI.Templates.ensure_dom_ref_from_wp_template(TPL_MODAL_ID, MODAL_DOM_ID);
291 if (!ref || !ref.el) {
292 return;
293 }
294 let modal_el = ref.el;
295 if (modal_el && modal_el.id !== MODAL_DOM_ID) {
296 const inside = modal_el.querySelector ? modal_el.querySelector('#' + MODAL_DOM_ID) : null;
297 if (inside) {
298 modal_el = inside;
299 }
300 }
301 if (!modal_el) {
302 return;
303 }
304 modal_el.__wpbc_bfb_load_form_cb = typeof on_confirm === 'function' ? on_confirm : null;
305 bind_handlers(modal_el);
306
307 // Reset basic UI.
308 const search_el = get_el(ID_SEARCH);
309 if (search_el) {
310 search_el.value = '';
311 }
312 modal_el.__wpbc_bfb_forms_cache = [];
313 modal_el.__wpbc_bfb_selected_form_slug = '';
314 set_error('');
315 set_confirm_enabled(false);
316 set_loading(modal_el, true);
317 UI.Modals.show(modal_el);
318
319 // Load list via ajax.
320 modal_el.__wpbc_bfb_page = 1;
321 modal_el.__wpbc_bfb_has_more = false;
322 modal_el.__wpbc_bfb_search = '';
323 load_forms(modal_el, 1, '');
324 set_pager(modal_el, 1, false);
325
326 // Focus search.
327 w.setTimeout(function () {
328 const s = get_el(ID_SEARCH);
329 if (s && s.focus) {
330 try {
331 s.focus();
332 } catch (_e) {}
333 }
334 }, 0);
335 if (on_open) {
336 try {
337 on_open(modal_el);
338 } catch (_e2) {}
339 }
340 };
341
342 // Confirm / Cancel (delegated).
343 d.addEventListener('click', function (e) {
344 const modal_el = get_modal_el();
345 if (!modal_el || !e || !e.target || !e.target.closest) {
346 return;
347 }
348 const is_confirm = e.target.closest(SEL_CONFIRM);
349 if (is_confirm) {
350 e.preventDefault();
351 if (is_confirm.classList.contains('disabled') || is_confirm.getAttribute('aria-disabled') === 'true') {
352 return;
353 }
354 const slug = modal_el.__wpbc_bfb_selected_form_slug || '';
355 if (!slug) {
356 return;
357 }
358 const cb = modal_el.__wpbc_bfb_load_form_cb || null;
359 modal_el.__wpbc_bfb_load_form_cb = null;
360 UI.Modals.hide(modal_el);
361 if (cb) {
362 // Try to find selected full object:
363 let full = null;
364 const list = modal_el.__wpbc_bfb_forms_cache || [];
365 for (let i = 0; i < list.length; i++) {
366 if (String(list[i].form_slug || '') === String(slug)) {
367 full = list[i];
368 break;
369 }
370 }
371 try {
372 cb({
373 form_slug: slug,
374 form: full
375 });
376 } catch (_e3) {}
377 }
378 return;
379 }
380 const is_cancel = e.target.closest(SEL_CANCEL);
381 if (is_cancel) {
382 e.preventDefault();
383 modal_el.__wpbc_bfb_load_form_cb = null;
384 UI.Modals.hide(modal_el);
385 }
386 }, true);
387 })(window, document);
388 function wpbc_bfb__menu_forms__load(menu_option_this) {
389 WPBC_BFB_Core.UI.Modal_Load_Form.open(function (payload) {
390 if (!payload || !payload.form_slug) {
391 return;
392 }
393
394 // Load selected form into builder.
395 if (typeof window.wpbc_bfb__ajax_load_form_by_slug !== 'function') {
396 wpbc_admin_show_message('WPBC BFB: load-by-slug helper missing.', 'error', 10000);
397 return;
398 }
399 window.wpbc_bfb__ajax_load_form_by_slug(payload.form_slug, menu_option_this, function (ok, data) {
400 if (ok) {
401 wpbc_admin_show_message('Form loaded', 'success', 1500, false);
402 }
403 });
404 });
405 }
406 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvYWRtaW4tcGFnZS10cGwvX291dC9tb2RhbF9fZm9ybV9vcGVuLmpzIiwibmFtZXMiOlsidyIsImQiLCJDb3JlIiwiV1BCQ19CRkJfQ29yZSIsIlVJIiwiTW9kYWxfTG9hZF9Gb3JtIiwiX19ib3VuZCIsIk1PREFMX0RPTV9JRCIsIlRQTF9NT0RBTF9JRCIsIklEX1NFQVJDSCIsIlNFTF9DT05GSVJNIiwiU0VMX0NBTkNFTCIsIlNFTF9FUlJPUiIsImhhc190ZXh0IiwidiIsIlN0cmluZyIsInRyaW0iLCJnZXRfZWwiLCJpZCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0X21vZGFsX2VsIiwic2V0X2Vycm9yIiwibXNnIiwibW9kYWxfZWwiLCJlbCIsInF1ZXJ5U2VsZWN0b3IiLCJpbm5lckhUTUwiLCJzdHlsZSIsImRpc3BsYXkiLCJzZXRfY29uZmlybV9lbmFibGVkIiwiaXNfZW5hYmxlZCIsImJ0biIsImNsYXNzTGlzdCIsInJlbW92ZSIsInNldEF0dHJpYnV0ZSIsImFkZCIsImVzY2FwZV9odG1sIiwicyIsInJlcGxhY2UiLCJyZW5kZXJfbGlzdCIsImZvcm1zIiwicm9vdCIsImh0bWwiLCJhbnkiLCJpIiwibGVuZ3RoIiwiaXRlbSIsInNsdWciLCJmb3JtX3NsdWciLCJ0aXRsZSIsImRlc2MiLCJkZXNjcmlwdGlvbiIsInBpYyIsInBpY3R1cmVfdXJsIiwiaW1hZ2VfdXJsIiwidGh1bWIiLCJtZXRhIiwibGluZTIiLCJzZWwiLCJfX3dwYmNfYmZiX3NlbGVjdGVkX2Zvcm1fc2x1ZyIsImZvdW5kIiwiQ1NTIiwiZXNjYXBlIiwiX2UiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsInNldF9wYWdlciIsInBhZ2UiLCJoYXNfbW9yZSIsInBhZ2VyIiwicHJldiIsIm5leHQiLCJsYWIiLCJwYXJzZUludCIsInRleHRDb250ZW50IiwicHJldl9lbmFibGVkIiwibmV4dF9lbmFibGVkIiwic2V0X2J0biIsImVuYWJsZWQiLCJzZXRfbG9hZGluZyIsImlzX2xvYWRpbmciLCJtYWluTmF2IiwiZG9jdW1lbnQiLCJvdXRlckhUTUwiLCJiaW5kX2hhbmRsZXJzIiwiX193cGJjX2JmYl9oYW5kbGVyc19ib3VuZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwidGFyZ2V0IiwiY2xvc2VzdCIsImdldEF0dHJpYnV0ZSIsImFsbCIsImJhY2tncm91bmQiLCJzZWFyY2hfZWwiLCJfX3dwYmNfYmZiX3NlYXJjaF90aW1lciIsInZhbHVlIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImxvYWRfZm9ybXMiLCJwcmV2ZW50RGVmYXVsdCIsImNvbnRhaW5zIiwiX193cGJjX2JmYl9wYWdlIiwic2VhcmNoIiwiX193cGJjX2JmYl9zZWFyY2giLCJNYXRoIiwibWF4IiwiZG9uZSIsIndwYmNfYmZiX19hamF4X2xpc3RfdXNlcl9mb3JtcyIsImluY2x1ZGVfZ2xvYmFsIiwibGltaXQiLCJvayIsImRhdGEiLCJfX3dwYmNfYmZiX2Zvcm1zX2NhY2hlIiwiX193cGJjX2JmYl9oYXNfbW9yZSIsIm9wZW4iLCJvbl9jb25maXJtIiwib25fb3BlbiIsInJlZiIsIlRlbXBsYXRlcyIsImVuc3VyZV9kb21fcmVmX2Zyb21fd3BfdGVtcGxhdGUiLCJpbnNpZGUiLCJfX3dwYmNfYmZiX2xvYWRfZm9ybV9jYiIsIk1vZGFscyIsInNob3ciLCJmb2N1cyIsIl9lMiIsImlzX2NvbmZpcm0iLCJjYiIsImhpZGUiLCJmdWxsIiwibGlzdCIsImZvcm0iLCJfZTMiLCJpc19jYW5jZWwiLCJ3aW5kb3ciLCJ3cGJjX2JmYl9fbWVudV9mb3Jtc19fbG9hZCIsIm1lbnVfb3B0aW9uX3RoaXMiLCJwYXlsb2FkIiwid3BiY19iZmJfX2FqYXhfbG9hZF9mb3JtX2J5X3NsdWciLCJ3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSJdLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL2FkbWluLXBhZ2UtdHBsL19zcmMvbW9kYWxfX2Zvcm1fb3Blbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQm9va2luZyBDYWxlbmRhciDigJQgTG9hZCBGb3JtIG1vZGFsIGhlbHBlciAoQkZCIEFkbWluKVxyXG4gKlxyXG4gKiBVSS5Nb2RhbF9Mb2FkX0Zvcm0ub3Blbihvbl9jb25maXJtLCBvbl9vcGVuKVxyXG4gKlxyXG4gKiBvbl9jb25maXJtKHBheWxvYWQpOlxyXG4gKiBwYXlsb2FkID0geyBmb3JtX3NsdWc6IHN0cmluZywgZm9ybTogT2JqZWN0fG51bGwgfVxyXG4gKlxyXG4gKiBEZXBlbmRzIG9uOlxyXG4gKiAtIFVJLlRlbXBsYXRlcy5lbnN1cmVfZG9tX3JlZl9mcm9tX3dwX3RlbXBsYXRlXHJcbiAqIC0gVUkuTW9kYWxzLnNob3cvaGlkZVxyXG4gKiAtIHdwYmNfYmZiX19hamF4X2xpc3RfdXNlcl9mb3JtcygpXHJcbiAqXHJcbiAqIEBmaWxlOiAuLi9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9hZG1pbi1wYWdlLXRwbC9fb3V0L21vZGFsX19mb3JtX29wZW4uanNcclxuICovXHJcbihmdW5jdGlvbiAodywgZCkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0Y29uc3QgQ29yZSAgICAgICAgID0gKHcuV1BCQ19CRkJfQ29yZSA9IHcuV1BCQ19CRkJfQ29yZSB8fCB7fSk7XHJcblx0Y29uc3QgVUkgICAgICAgICAgID0gKENvcmUuVUkgPSBDb3JlLlVJIHx8IHt9KTtcclxuXHRVSS5Nb2RhbF9Mb2FkX0Zvcm0gPSBVSS5Nb2RhbF9Mb2FkX0Zvcm0gfHwge307XHJcblxyXG5cdC8vIElkZW1wb3RlbmN5IGd1YXJkLlxyXG5cdGlmICggVUkuTW9kYWxfTG9hZF9Gb3JtLl9fYm91bmQgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdFVJLk1vZGFsX0xvYWRfRm9ybS5fX2JvdW5kID0gdHJ1ZTtcclxuXHJcblx0Y29uc3QgTU9EQUxfRE9NX0lEID0gJ3dwYmNfYmZiX21vZGFsX19sb2FkX2Zvcm0nO1xyXG5cdGNvbnN0IFRQTF9NT0RBTF9JRCA9ICd3cGJjLWJmYi10cGwtbW9kYWwtbG9hZF9mb3JtJztcclxuXHJcblx0Y29uc3QgSURfU0VBUkNIID0gJ3dwYmNfYmZiX3BvcHVwX21vZGFsX19sb2FkX2Zvcm1fX3NlYXJjaCc7XHJcblxyXG5cdGNvbnN0IFNFTF9DT05GSVJNID0gJyMnICsgTU9EQUxfRE9NX0lEICsgJyBbZGF0YS13cGJjLWJmYi1jb25maXJtPVwiMVwiXSc7XHJcblx0Y29uc3QgU0VMX0NBTkNFTCAgPSAnIycgKyBNT0RBTF9ET01fSUQgKyAnIFtkYXRhLXdwYmMtYmZiLWNhbmNlbD1cIjFcIl0nO1xyXG5cdGNvbnN0IFNFTF9FUlJPUiAgID0gJyMnICsgTU9EQUxfRE9NX0lEICsgJyBbZGF0YS13cGJjLWJmYi1lcnJvcj1cIjFcIl0nO1xyXG5cclxuXHRmdW5jdGlvbiBoYXNfdGV4dCh2KSB7XHJcblx0XHRyZXR1cm4gISEgKHYgJiYgU3RyaW5nKCB2ICkudHJpbSgpKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9lbChpZCkge1xyXG5cdFx0cmV0dXJuIGQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfbW9kYWxfZWwoKSB7XHJcblx0XHRyZXR1cm4gZC5nZXRFbGVtZW50QnlJZCggTU9EQUxfRE9NX0lEICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRfZXJyb3IobXNnKSB7XHJcblx0XHRjb25zdCBtb2RhbF9lbCA9IGdldF9tb2RhbF9lbCgpO1xyXG5cdFx0Y29uc3QgZWwgICAgICAgPSBtb2RhbF9lbCA/IG1vZGFsX2VsLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1lcnJvcj1cIjFcIl0nICkgOiBudWxsO1xyXG5cdFx0aWYgKCAhIGVsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBoYXNfdGV4dCggbXNnICkgKSB7XHJcblx0XHRcdGVsLmlubmVySFRNTCAgICAgPSBTdHJpbmcoIG1zZyApO1xyXG5cdFx0XHRlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRlbC5pbm5lckhUTUwgICAgID0gJyc7XHJcblx0XHRcdGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRfY29uZmlybV9lbmFibGVkKGlzX2VuYWJsZWQpIHtcclxuXHRcdGNvbnN0IG1vZGFsX2VsID0gZ2V0X21vZGFsX2VsKCk7XHJcblx0XHRjb25zdCBidG4gICAgICA9IG1vZGFsX2VsID8gbW9kYWxfZWwucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWNvbmZpcm09XCIxXCJdJyApIDogbnVsbDtcclxuXHRcdGlmICggISBidG4gKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGlzX2VuYWJsZWQgKSB7XHJcblx0XHRcdGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdGJ0bi5zZXRBdHRyaWJ1dGUoICdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0YnRuLmNsYXNzTGlzdC5hZGQoICdkaXNhYmxlZCcgKTtcclxuXHRcdFx0YnRuLnNldEF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGVzY2FwZV9odG1sKHMpIHtcclxuXHRcdHJldHVybiBTdHJpbmcoIHMgPT0gbnVsbCA/ICcnIDogcyApXHJcblx0XHRcdC5yZXBsYWNlKCAvJi9nLCAnJmFtcDsnIClcclxuXHRcdFx0LnJlcGxhY2UoIC88L2csICcmbHQ7JyApXHJcblx0XHRcdC5yZXBsYWNlKCAvPi9nLCAnJmd0OycgKVxyXG5cdFx0XHQucmVwbGFjZSggL1wiL2csICcmcXVvdDsnIClcclxuXHRcdFx0LnJlcGxhY2UoIC8nL2csICcmIzAzOTsnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZW5kZXJfbGlzdChtb2RhbF9lbCwgZm9ybXMpIHtcclxuXHRcdGNvbnN0IHJvb3QgPSBtb2RhbF9lbCA/IG1vZGFsX2VsLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1mb3Jtcy1saXN0PVwiMVwiXScgKSA6IG51bGw7XHJcblx0XHRpZiAoICEgcm9vdCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBodG1sID0gJyc7XHJcblx0XHRsZXQgYW55ICA9IGZhbHNlO1xyXG5cclxuXHRcdGZvciAoIGxldCBpID0gMDsgaSA8IChmb3JtcyB8fCBbXSkubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gID0gZm9ybXNbaV0gfHwge307XHJcblx0XHRcdGNvbnN0IHNsdWcgID0gU3RyaW5nKCBpdGVtLmZvcm1fc2x1ZyB8fCAnJyApO1xyXG5cdFx0XHRjb25zdCB0aXRsZSA9IFN0cmluZyggaXRlbS50aXRsZSB8fCBzbHVnIHx8ICcnICk7XHJcblx0XHRcdGNvbnN0IGRlc2MgID0gU3RyaW5nKCBpdGVtLmRlc2NyaXB0aW9uIHx8ICcnICk7XHJcblx0XHRcdGNvbnN0IHBpYyAgID0gU3RyaW5nKCBpdGVtLnBpY3R1cmVfdXJsIHx8IGl0ZW0uaW1hZ2VfdXJsIHx8ICcnICk7XHJcblxyXG5cdFx0XHRpZiAoICEgc2x1ZyApIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRhbnkgPSB0cnVlO1xyXG5cclxuXHRcdFx0Y29uc3QgdGh1bWIgPSBwaWNcclxuXHRcdFx0XHQ/ICc8aW1nIHNyYz1cIicgKyBlc2NhcGVfaHRtbCggcGljICkgKyAnXCIgYWx0PVwiXCIgLz4nXHJcblx0XHRcdFx0OiAnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19sb2FkX2Zvcm1faXRlbV90aHVtYl9ibGFua19pbWdcIj5ObyBpbWFnZTwvZGl2Pic7XHJcblxyXG5cdFx0XHRjb25zdCBtZXRhID0gJzxkaXYgY2xhc3M9XCJmb3JtX2l0ZW1fdGV4dF9zbHVnXCI+JyArIGVzY2FwZV9odG1sKCBzbHVnICkgKyAnPC9kaXY+JztcclxuXHJcblx0XHRcdGNvbnN0IGxpbmUyID0gZGVzYyA/ICc8ZGl2IGNsYXNzPVwiZm9ybV9pdGVtX3RleHRfZGVzY1wiPicgKyBlc2NhcGVfaHRtbCggZGVzYyApICsgJzwvZGl2PicgOiAnJztcclxuXHJcblx0XHRcdGh0bWwgKz0gJydcclxuXHRcdFx0XHQrICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2xvYWRfZm9ybV9pdGVtXCIgZGF0YS13cGJjLWJmYi1mb3JtLWl0ZW09XCIxXCIgZGF0YS1mb3JtLXNsdWc9XCInICsgZXNjYXBlX2h0bWwoIHNsdWcgKSArICdcIidcclxuXHRcdFx0XHQrICcgPidcclxuXHRcdFx0XHQrICcgIDxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9fbG9hZF9mb3JtX2l0ZW1fdGh1bWJcIj4nICsgdGh1bWIgKyAnPC9kaXY+J1xyXG5cdFx0XHRcdCsgJyAgPGRpdiAgY2xhc3M9XCJ3cGJjX2JmYl9fbG9hZF9mb3JtX2l0ZW1fdGV4dFwiPidcclxuXHRcdFx0XHQrICcgICAgPGRpdiBjbGFzcz1cImZvcm1faXRlbV90ZXh0X3RpdGxlXCI+JyArIGVzY2FwZV9odG1sKCB0aXRsZSApICsgJzwvZGl2PidcclxuXHRcdFx0XHQrIG1ldGFcclxuXHRcdFx0XHQrIGxpbmUyXHJcblx0XHRcdFx0KyAnICA8L2Rpdj4nXHJcblx0XHRcdFx0KyAnPC9kaXY+JztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICEgYW55ICkge1xyXG5cdFx0XHRodG1sID0gJzxkaXYgc3R5bGU9XCJwYWRkaW5nOjEwcHg7Y29sb3I6IzY2NjtcIj5ObyBmb3JtcyBmb3VuZC48L2Rpdj4nO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJvb3QuaW5uZXJIVE1MID0gaHRtbDtcclxuXHJcblx0XHQvLyBSZS1hcHBseSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGlmIHN0aWxsIHByZXNlbnQgb24gdGhpcyBwYWdlLlxyXG5cdFx0Y29uc3Qgc2VsID0gbW9kYWxfZWwuX193cGJjX2JmYl9zZWxlY3RlZF9mb3JtX3NsdWcgfHwgJyc7XHJcblx0XHRpZiAoIHNlbCApIHtcclxuXHRcdFx0bGV0IGZvdW5kID0gbnVsbDtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRmb3VuZCA9IHJvb3QucXVlcnlTZWxlY3RvciggJ1tkYXRhLWZvcm0tc2x1Zz1cIicgKyBDU1MuZXNjYXBlKCBzZWwgKSArICdcIl0nICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRmb3VuZCA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBmb3VuZCApIHtcclxuXHRcdFx0XHQvLyBmb3VuZC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNmY3ZjcnO1xyXG5cdFx0XHRcdGZvdW5kLmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fbG9hZF9mb3JtX2l0ZW1fc2VsZWN0ZWQnICk7XHJcblx0XHRcdFx0c2V0X2NvbmZpcm1fZW5hYmxlZCggdHJ1ZSApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIFNlbGVjdGlvbiBub3Qgb24gdGhpcyBwYWdlIGFueW1vcmUgLT4gcmVzZXQuXHJcblx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19sb2FkX2Zvcm1faXRlbScgKS5mb3JFYWNoKCAoZWwpID0+IHtcclxuXHRcdFx0XHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUoICd3cGJjX2JmYl9fbG9hZF9mb3JtX2l0ZW1fc2VsZWN0ZWQnICk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdG1vZGFsX2VsLl9fd3BiY19iZmJfc2VsZWN0ZWRfZm9ybV9zbHVnID0gJyc7XHJcblx0XHRcdFx0c2V0X2NvbmZpcm1fZW5hYmxlZCggZmFsc2UgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0X3BhZ2VyKG1vZGFsX2VsLCBwYWdlLCBoYXNfbW9yZSkge1xyXG5cdFx0Y29uc3QgcGFnZXIgPSBtb2RhbF9lbCA/IG1vZGFsX2VsLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1mb3Jtcy1wYWdlcj1cIjFcIl0nICkgOiBudWxsO1xyXG5cdFx0aWYgKCAhIHBhZ2VyICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJldiA9IHBhZ2VyLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1wYWdlLXByZXY9XCIxXCJdJyApO1xyXG5cdFx0Y29uc3QgbmV4dCA9IHBhZ2VyLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1wYWdlLW5leHQ9XCIxXCJdJyApO1xyXG5cdFx0Y29uc3QgbGFiICA9IHBhZ2VyLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1wYWdlLWxhYmVsPVwiMVwiXScgKTtcclxuXHJcblx0XHRwYWdlID0gcGFyc2VJbnQoIHBhZ2UgfHwgMSwgMTAgKTtcclxuXHRcdGlmICggISBwYWdlIHx8IHBhZ2UgPCAxICkge1xyXG5cdFx0XHRwYWdlID0gMTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGxhYiApIHtcclxuXHRcdFx0bGFiLnRleHRDb250ZW50ID0gJ1BhZ2UgJyArIHBhZ2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJldl9lbmFibGVkID0gKHBhZ2UgPiAxKTtcclxuXHRcdGNvbnN0IG5leHRfZW5hYmxlZCA9ICEhIGhhc19tb3JlO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHNldF9idG4oYnRuLCBlbmFibGVkKSB7XHJcblx0XHRcdGlmICggISBidG4gKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggZW5hYmxlZCApIHtcclxuXHRcdFx0XHRidG4uY2xhc3NMaXN0LnJlbW92ZSggJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdGJ0bi5zZXRBdHRyaWJ1dGUoICdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJ0bi5jbGFzc0xpc3QuYWRkKCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0YnRuLnNldEF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHNldF9idG4oIHByZXYsIHByZXZfZW5hYmxlZCApO1xyXG5cdFx0c2V0X2J0biggbmV4dCwgbmV4dF9lbmFibGVkICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRfbG9hZGluZyhtb2RhbF9lbCwgaXNfbG9hZGluZykge1xyXG5cdFx0Y29uc3Qgcm9vdCA9IG1vZGFsX2VsID8gbW9kYWxfZWwucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWZvcm1zLWxpc3Q9XCIxXCJdJyApIDogbnVsbDtcclxuXHRcdGlmICggISByb290ICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpc19sb2FkaW5nICkge1xyXG5cdFx0XHRjb25zdCBtYWluTmF2ICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfcG9wdXBfbW9kYWxfX2Zvcm1zX2xvYWRpbmdfc3Bpbl9jb250YWluZXInICkub3V0ZXJIVE1MO1xyXG5cdFx0XHRyb290LmlubmVySFRNTCA9IG1haW5OYXY7XHJcblx0XHRcdC8vIHJvb3QuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9wb3B1cF9tb2RhbF9fZm9ybXNfbG9hZGluZ19zcGluX2NvbnRhaW5lclwiIGRhdGEtd3BiYy1iZmItZm9ybXMtbG9hZGluZz1cIjFcIj5Mb2FkaW5nLi4uPC9kaXY+JzsgLy8uXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBiaW5kX2hhbmRsZXJzKG1vZGFsX2VsKSB7XHJcblx0XHRpZiAoICEgbW9kYWxfZWwgfHwgbW9kYWxfZWwuX193cGJjX2JmYl9oYW5kbGVyc19ib3VuZCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0bW9kYWxfZWwuX193cGJjX2JmYl9oYW5kbGVyc19ib3VuZCA9IHRydWU7XHJcblxyXG5cdFx0Ly8gQ2xpY2sgc2VsZWN0IGl0ZW0gKGRlbGVnYXRlZCBpbnNpZGUgbGlzdCkuXHJcblx0XHRtb2RhbF9lbC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRpZiAoICEgZSB8fCAhIGUudGFyZ2V0IHx8ICEgZS50YXJnZXQuY2xvc2VzdCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBlLnRhcmdldC5jbG9zZXN0KCAnW2RhdGEtd3BiYy1iZmItZm9ybS1pdGVtPVwiMVwiXScgKTtcclxuXHRcdFx0aWYgKCAhIGl0ZW0gKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBzbHVnICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGl0ZW0uZ2V0QXR0cmlidXRlKCAnZGF0YS1mb3JtLXNsdWcnICkgfHwgJyc7XHJcblx0XHRcdG1vZGFsX2VsLl9fd3BiY19iZmJfc2VsZWN0ZWRfZm9ybV9zbHVnID0gc2x1ZztcclxuXHJcblx0XHRcdC8vIFZpc3VhbCBoaWdobGlnaHRcclxuXHRcdFx0Y29uc3Qgcm9vdCA9IG1vZGFsX2VsLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1mb3Jtcy1saXN0PVwiMVwiXScgKTtcclxuXHRcdFx0aWYgKCByb290ICkge1xyXG5cdFx0XHRcdGNvbnN0IGFsbCA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLXdwYmMtYmZiLWZvcm0taXRlbT1cIjFcIl0nICk7XHJcblx0XHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgYWxsLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdFx0YWxsW2ldLnN0eWxlLmJhY2tncm91bmQgPSAnJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gaXRlbS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNmY3ZjcnO1xyXG5cdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2xvYWRfZm9ybV9pdGVtJyApLmZvckVhY2goIChlbCkgPT4ge1xyXG5cdFx0XHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUoICd3cGJjX2JmYl9fbG9hZF9mb3JtX2l0ZW1fc2VsZWN0ZWQnICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0aXRlbS5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfX2xvYWRfZm9ybV9pdGVtX3NlbGVjdGVkJyApO1xyXG5cdFx0XHRzZXRfY29uZmlybV9lbmFibGVkKCAhISBzbHVnICk7XHJcblx0XHR9LCB0cnVlICk7XHJcblxyXG5cdFx0Ly8gU2VhcmNoIGZpbHRlci4gKHNlcnZlci1zaWRlLCBkZWJvdW5jZWQpLlxyXG5cdFx0Y29uc3Qgc2VhcmNoX2VsID0gZ2V0X2VsKCBJRF9TRUFSQ0ggKTtcclxuXHRcdGlmICggc2VhcmNoX2VsICkge1xyXG5cdFx0XHRpZiAoICEgbW9kYWxfZWwuX193cGJjX2JmYl9zZWFyY2hfdGltZXIgKSB7XHJcblx0XHRcdFx0bW9kYWxfZWwuX193cGJjX2JmYl9zZWFyY2hfdGltZXIgPSAwO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzZWFyY2hfZWwuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdGNvbnN0IHYgPSBTdHJpbmcoIHNlYXJjaF9lbC52YWx1ZSB8fCAnJyApO1xyXG5cclxuXHRcdFx0XHRpZiAoIG1vZGFsX2VsLl9fd3BiY19iZmJfc2VhcmNoX3RpbWVyICkge1xyXG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KCBtb2RhbF9lbC5fX3dwYmNfYmZiX3NlYXJjaF90aW1lciApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRtb2RhbF9lbC5fX3dwYmNfYmZiX3NlYXJjaF90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdGxvYWRfZm9ybXMoIG1vZGFsX2VsLCAxLCB2ICk7XHJcblx0XHRcdFx0fSwgMzAwICk7XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBQYWdlciBjbGljay5cclxuXHRcdG1vZGFsX2VsLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdGlmICggISBlIHx8ICEgZS50YXJnZXQgfHwgISBlLnRhcmdldC5jbG9zZXN0ICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgcHJldiA9IGUudGFyZ2V0LmNsb3Nlc3QoICdbZGF0YS13cGJjLWJmYi1wYWdlLXByZXY9XCIxXCJdJyApO1xyXG5cdFx0XHRjb25zdCBuZXh0ID0gZS50YXJnZXQuY2xvc2VzdCggJ1tkYXRhLXdwYmMtYmZiLXBhZ2UtbmV4dD1cIjFcIl0nICk7XHJcblxyXG5cdFx0XHRpZiAoICEgcHJldiAmJiAhIG5leHQgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRpZiAoIChwcmV2ICYmIChwcmV2LmNsYXNzTGlzdC5jb250YWlucyggJ2Rpc2FibGVkJyApIHx8IHByZXYuZ2V0QXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcgKSA9PT0gJ3RydWUnKSkgfHxcclxuXHRcdFx0XHQobmV4dCAmJiAobmV4dC5jbGFzc0xpc3QuY29udGFpbnMoICdkaXNhYmxlZCcgKSB8fCBuZXh0LmdldEF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnICkgPT09ICd0cnVlJykpICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgcGFnZSAgID0gcGFyc2VJbnQoIG1vZGFsX2VsLl9fd3BiY19iZmJfcGFnZSB8fCAxLCAxMCApIHx8IDE7XHJcblx0XHRcdGNvbnN0IHNlYXJjaCA9IFN0cmluZyggbW9kYWxfZWwuX193cGJjX2JmYl9zZWFyY2ggfHwgJycgKTtcclxuXHJcblx0XHRcdGlmICggcHJldiApIHtcclxuXHRcdFx0XHRsb2FkX2Zvcm1zKCBtb2RhbF9lbCwgTWF0aC5tYXgoIDEsIHBhZ2UgLSAxICksIHNlYXJjaCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggbmV4dCApIHtcclxuXHRcdFx0XHRsb2FkX2Zvcm1zKCBtb2RhbF9lbCwgcGFnZSArIDEsIHNlYXJjaCApO1xyXG5cdFx0XHR9XHJcblx0XHR9LCB0cnVlICk7XHJcblxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gbG9hZF9mb3Jtcyhtb2RhbF9lbCwgcGFnZSwgc2VhcmNoLCBkb25lKSB7XHJcblx0XHRpZiAoIHR5cGVvZiB3LndwYmNfYmZiX19hamF4X2xpc3RfdXNlcl9mb3JtcyAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0c2V0X2Vycm9yKCAnV1BCQyBCRkI6IGxpc3QgZm9ybXMgaGVscGVyIG1pc3NpbmcuJyApO1xyXG5cdFx0XHRzZXRfbG9hZGluZyggbW9kYWxfZWwsIGZhbHNlICk7XHJcblx0XHRcdGlmICggdHlwZW9mIGRvbmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0ZG9uZSggZmFsc2UsIG51bGwgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0cGFnZSAgID0gcGFyc2VJbnQoIHBhZ2UgfHwgMSwgMTAgKTtcclxuXHRcdHNlYXJjaCA9IFN0cmluZyggc2VhcmNoIHx8ICcnICk7XHJcblxyXG5cdFx0aWYgKCAhIHBhZ2UgfHwgcGFnZSA8IDEgKSB7XHJcblx0XHRcdHBhZ2UgPSAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNldF9lcnJvciggJycgKTtcclxuXHRcdHNldF9jb25maXJtX2VuYWJsZWQoIGZhbHNlICk7XHJcblx0XHRtb2RhbF9lbC5fX3dwYmNfYmZiX3NlbGVjdGVkX2Zvcm1fc2x1ZyA9ICcnO1xyXG5cdFx0c2V0X2xvYWRpbmcoIG1vZGFsX2VsLCB0cnVlICk7XHJcblxyXG5cdFx0dy53cGJjX2JmYl9fYWpheF9saXN0X3VzZXJfZm9ybXMoXHJcblx0XHRcdG51bGwsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRpbmNsdWRlX2dsb2JhbDogMCxcclxuXHRcdFx0XHRwYWdlICAgICAgICAgIDogcGFnZSxcclxuXHRcdFx0XHRsaW1pdCAgICAgICAgIDogMjAsXHJcblx0XHRcdFx0c2VhcmNoICAgICAgICA6IHNlYXJjaFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbiAob2ssIGRhdGEpIHtcclxuXHRcdFx0XHRpZiAoICEgb2sgfHwgISBkYXRhIHx8ICEgZGF0YS5mb3JtcyApIHtcclxuXHRcdFx0XHRcdHNldF9sb2FkaW5nKCBtb2RhbF9lbCwgZmFsc2UgKTtcclxuXHRcdFx0XHRcdHNldF9lcnJvciggJ0ZhaWxlZCB0byBsb2FkIGZvcm1zIGxpc3QuJyApO1xyXG5cdFx0XHRcdFx0c2V0X3BhZ2VyKCBtb2RhbF9lbCwgMSwgZmFsc2UgKTtcclxuXHRcdFx0XHRcdGlmICggdHlwZW9mIGRvbmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdGRvbmUoIGZhbHNlLCBudWxsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRtb2RhbF9lbC5fX3dwYmNfYmZiX2Zvcm1zX2NhY2hlID0gZGF0YS5mb3JtcyB8fCBbXTtcclxuXHRcdFx0XHRtb2RhbF9lbC5fX3dwYmNfYmZiX3BhZ2UgICAgICAgID0gZGF0YS5wYWdlIHx8IHBhZ2U7XHJcblx0XHRcdFx0bW9kYWxfZWwuX193cGJjX2JmYl9oYXNfbW9yZSAgICA9ICEhIGRhdGEuaGFzX21vcmU7XHJcblx0XHRcdFx0bW9kYWxfZWwuX193cGJjX2JmYl9zZWFyY2ggICAgICA9IHNlYXJjaDtcclxuXHJcblx0XHRcdFx0cmVuZGVyX2xpc3QoIG1vZGFsX2VsLCBtb2RhbF9lbC5fX3dwYmNfYmZiX2Zvcm1zX2NhY2hlICk7XHJcblx0XHRcdFx0c2V0X3BhZ2VyKCBtb2RhbF9lbCwgbW9kYWxfZWwuX193cGJjX2JmYl9wYWdlLCBtb2RhbF9lbC5fX3dwYmNfYmZiX2hhc19tb3JlICk7XHJcblxyXG5cdFx0XHRcdHNldF9lcnJvciggJycgKTtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiBkb25lID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0ZG9uZSggdHJ1ZSwgZGF0YSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cclxuXHRVSS5Nb2RhbF9Mb2FkX0Zvcm0ub3BlbiA9IGZ1bmN0aW9uIChvbl9jb25maXJtLCBvbl9vcGVuKSB7XHJcblxyXG5cdFx0Y29uc3QgcmVmID0gVUkuVGVtcGxhdGVzLmVuc3VyZV9kb21fcmVmX2Zyb21fd3BfdGVtcGxhdGUoIFRQTF9NT0RBTF9JRCwgTU9EQUxfRE9NX0lEICk7XHJcblx0XHRpZiAoICEgcmVmIHx8ICEgcmVmLmVsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG1vZGFsX2VsID0gcmVmLmVsO1xyXG5cdFx0aWYgKCBtb2RhbF9lbCAmJiBtb2RhbF9lbC5pZCAhPT0gTU9EQUxfRE9NX0lEICkge1xyXG5cdFx0XHRjb25zdCBpbnNpZGUgPSBtb2RhbF9lbC5xdWVyeVNlbGVjdG9yID8gbW9kYWxfZWwucXVlcnlTZWxlY3RvciggJyMnICsgTU9EQUxfRE9NX0lEICkgOiBudWxsO1xyXG5cdFx0XHRpZiAoIGluc2lkZSApIHtcclxuXHRcdFx0XHRtb2RhbF9lbCA9IGluc2lkZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKCAhIG1vZGFsX2VsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bW9kYWxfZWwuX193cGJjX2JmYl9sb2FkX2Zvcm1fY2IgPSAodHlwZW9mIG9uX2NvbmZpcm0gPT09ICdmdW5jdGlvbicpID8gb25fY29uZmlybSA6IG51bGw7XHJcblxyXG5cdFx0YmluZF9oYW5kbGVycyggbW9kYWxfZWwgKTtcclxuXHJcblx0XHQvLyBSZXNldCBiYXNpYyBVSS5cclxuXHRcdGNvbnN0IHNlYXJjaF9lbCA9IGdldF9lbCggSURfU0VBUkNIICk7XHJcblx0XHRpZiAoIHNlYXJjaF9lbCApIHtcclxuXHRcdFx0c2VhcmNoX2VsLnZhbHVlID0gJyc7XHJcblx0XHR9XHJcblx0XHRtb2RhbF9lbC5fX3dwYmNfYmZiX2Zvcm1zX2NhY2hlICAgICAgICA9IFtdO1xyXG5cdFx0bW9kYWxfZWwuX193cGJjX2JmYl9zZWxlY3RlZF9mb3JtX3NsdWcgPSAnJztcclxuXHRcdHNldF9lcnJvciggJycgKTtcclxuXHRcdHNldF9jb25maXJtX2VuYWJsZWQoIGZhbHNlICk7XHJcblx0XHRzZXRfbG9hZGluZyggbW9kYWxfZWwsIHRydWUgKTtcclxuXHJcblx0XHRVSS5Nb2RhbHMuc2hvdyggbW9kYWxfZWwgKTtcclxuXHJcblx0XHQvLyBMb2FkIGxpc3QgdmlhIGFqYXguXHJcblx0XHRtb2RhbF9lbC5fX3dwYmNfYmZiX3BhZ2UgICAgID0gMTtcclxuXHRcdG1vZGFsX2VsLl9fd3BiY19iZmJfaGFzX21vcmUgPSBmYWxzZTtcclxuXHRcdG1vZGFsX2VsLl9fd3BiY19iZmJfc2VhcmNoICAgPSAnJztcclxuXHJcblx0XHRsb2FkX2Zvcm1zKCBtb2RhbF9lbCwgMSwgJycgKTtcclxuXHRcdHNldF9wYWdlciggbW9kYWxfZWwsIDEsIGZhbHNlICk7XHJcblxyXG5cdFx0Ly8gRm9jdXMgc2VhcmNoLlxyXG5cdFx0dy5zZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGNvbnN0IHMgPSBnZXRfZWwoIElEX1NFQVJDSCApO1xyXG5cdFx0XHRpZiAoIHMgJiYgcy5mb2N1cyApIHtcclxuXHRcdFx0XHR0cnkgeyBzLmZvY3VzKCk7IH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdH1cclxuXHRcdH0sIDAgKTtcclxuXHJcblx0XHRpZiAoIG9uX29wZW4gKSB7XHJcblx0XHRcdHRyeSB7IG9uX29wZW4oIG1vZGFsX2VsICk7IH0gY2F0Y2ggKCBfZTIgKSB7fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIENvbmZpcm0gLyBDYW5jZWwgKGRlbGVnYXRlZCkuXHJcblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuXHRcdGNvbnN0IG1vZGFsX2VsID0gZ2V0X21vZGFsX2VsKCk7XHJcblx0XHRpZiAoICEgbW9kYWxfZWwgfHwgISBlIHx8ICEgZS50YXJnZXQgfHwgISBlLnRhcmdldC5jbG9zZXN0ICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXNfY29uZmlybSA9IGUudGFyZ2V0LmNsb3Nlc3QoIFNFTF9DT05GSVJNICk7XHJcblx0XHRpZiAoIGlzX2NvbmZpcm0gKSB7XHJcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdGlmICggaXNfY29uZmlybS5jbGFzc0xpc3QuY29udGFpbnMoICdkaXNhYmxlZCcgKSB8fCBpc19jb25maXJtLmdldEF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnICkgPT09ICd0cnVlJyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHNsdWcgPSBtb2RhbF9lbC5fX3dwYmNfYmZiX3NlbGVjdGVkX2Zvcm1fc2x1ZyB8fCAnJztcclxuXHRcdFx0aWYgKCAhIHNsdWcgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjYiAgICAgICAgICAgICAgICAgICAgICAgICA9IG1vZGFsX2VsLl9fd3BiY19iZmJfbG9hZF9mb3JtX2NiIHx8IG51bGw7XHJcblx0XHRcdG1vZGFsX2VsLl9fd3BiY19iZmJfbG9hZF9mb3JtX2NiID0gbnVsbDtcclxuXHJcblx0XHRcdFVJLk1vZGFscy5oaWRlKCBtb2RhbF9lbCApO1xyXG5cclxuXHRcdFx0aWYgKCBjYiApIHtcclxuXHRcdFx0XHQvLyBUcnkgdG8gZmluZCBzZWxlY3RlZCBmdWxsIG9iamVjdDpcclxuXHRcdFx0XHRsZXQgZnVsbCAgID0gbnVsbDtcclxuXHRcdFx0XHRjb25zdCBsaXN0ID0gbW9kYWxfZWwuX193cGJjX2JmYl9mb3Jtc19jYWNoZSB8fCBbXTtcclxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdFx0aWYgKCBTdHJpbmcoIGxpc3RbaV0uZm9ybV9zbHVnIHx8ICcnICkgPT09IFN0cmluZyggc2x1ZyApICkge1xyXG5cdFx0XHRcdFx0XHRmdWxsID0gbGlzdFtpXTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRyeSB7IGNiKCB7IGZvcm1fc2x1Zzogc2x1ZywgZm9ybTogZnVsbCB9ICk7IH0gY2F0Y2ggKCBfZTMgKSB7fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpc19jYW5jZWwgPSBlLnRhcmdldC5jbG9zZXN0KCBTRUxfQ0FOQ0VMICk7XHJcblx0XHRpZiAoIGlzX2NhbmNlbCApIHtcclxuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRtb2RhbF9lbC5fX3dwYmNfYmZiX2xvYWRfZm9ybV9jYiA9IG51bGw7XHJcblx0XHRcdFVJLk1vZGFscy5oaWRlKCBtb2RhbF9lbCApO1xyXG5cdFx0fVxyXG5cclxuXHR9LCB0cnVlICk7XHJcblxyXG59KSggd2luZG93LCBkb2N1bWVudCApO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYmZiX19tZW51X2Zvcm1zX19sb2FkKG1lbnVfb3B0aW9uX3RoaXMpIHtcclxuXHJcblx0V1BCQ19CRkJfQ29yZS5VSS5Nb2RhbF9Mb2FkX0Zvcm0ub3BlbiggZnVuY3Rpb24gKHBheWxvYWQpIHtcclxuXHJcblx0XHRpZiAoICEgcGF5bG9hZCB8fCAhIHBheWxvYWQuZm9ybV9zbHVnICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTG9hZCBzZWxlY3RlZCBmb3JtIGludG8gYnVpbGRlci5cclxuXHRcdGlmICggdHlwZW9mIHdpbmRvdy53cGJjX2JmYl9fYWpheF9sb2FkX2Zvcm1fYnlfc2x1ZyAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0d3BiY19hZG1pbl9zaG93X21lc3NhZ2UoICdXUEJDIEJGQjogbG9hZC1ieS1zbHVnIGhlbHBlciBtaXNzaW5nLicsICdlcnJvcicsIDEwMDAwICk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR3aW5kb3cud3BiY19iZmJfX2FqYXhfbG9hZF9mb3JtX2J5X3NsdWcoIHBheWxvYWQuZm9ybV9zbHVnLCBtZW51X29wdGlvbl90aGlzLCBmdW5jdGlvbiAob2ssIGRhdGEpIHtcclxuXHRcdFx0aWYgKCBvayApIHtcclxuXHRcdFx0XHR3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSggJ0Zvcm0gbG9hZGVkJywgJ3N1Y2Nlc3MnLCAxNTAwLCBmYWxzZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblxyXG5cdH0gKTtcclxufVxyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxVQUFVQSxDQUFDLEVBQUVDLENBQUMsRUFBRTtFQUNoQixZQUFZOztFQUVaLE1BQU1DLElBQUksR0FBWUYsQ0FBQyxDQUFDRyxhQUFhLEdBQUdILENBQUMsQ0FBQ0csYUFBYSxJQUFJLENBQUMsQ0FBRTtFQUM5RCxNQUFNQyxFQUFFLEdBQWNGLElBQUksQ0FBQ0UsRUFBRSxHQUFHRixJQUFJLENBQUNFLEVBQUUsSUFBSSxDQUFDLENBQUU7RUFDOUNBLEVBQUUsQ0FBQ0MsZUFBZSxHQUFHRCxFQUFFLENBQUNDLGVBQWUsSUFBSSxDQUFDLENBQUM7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
407