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 / field-packs / section / _out / section-wptpl.js

section-wptpl.js in Booking Calendar 11.9, at includes/page-form-builder/field-packs/section/_out/section-wptpl.js

172 lines 22.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 /**
4 * WPBC BFB: Section Renderer (WP-template–driven, slim version)
5 * ---------------------------------------------------------------------------------
6 * - Delegates column-style logic to UI.WPBC_BFB_Column_Styles (separate module)
7 * - Inspector glue is moved to: /_out/core/bfb-inspector-patches.js
8 *
9 * Contracts:
10 * - Registry: Registry.register( 'section', WPBC_BFB_Section );
11 * - Class API: static get_defaults(), static render(el, data, ctx), static on_field_drop(data, el, ctx?)
12 *
13 * File: /includes/page-form-builder/field-packs/section/_out/section-wptpl.js
14 *
15 * @since 11.0.0
16 * @modified 2025-09-16 11:24
17 * @version 1.1.0
18 */
19 (function (w) {
20 'use strict';
21
22 var Core = w.WPBC_BFB_Core || {};
23 var Registry = Core.WPBC_BFB_Field_Renderer_Registry;
24 var Base = Core.WPBC_BFB_Field_Base;
25 var UI = Core.UI = Core.UI || {};
26 if (!Registry || typeof Registry.register !== 'function' || !Base) {
27 w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('WPBC_BFB_Section', 'Core registry/base missing');
28 return;
29 }
30
31 // Shortcuts.
32 var S = Core.WPBC_BFB_Sanitize;
33 var ColStyles = UI.WPBC_BFB_Column_Styles || null;
34
35 /**
36 * Clamp number of columns to supported range.
37 *
38 * @param {number|string} n
39 * @returns {number}
40 */
41 function clamp_cols(n) {
42 return S.clamp(Number(n) || 1, 1, 4);
43 }
44 class WPBC_BFB_Section extends Base {
45 static template_id = 'wpbc-bfb-section';
46
47 /**
48 * Default data for a new Section.
49 * NOTE: Keep in sync with PHP schema.
50 */
51 static get_defaults() {
52 return {
53 type: 'section',
54 label: 'Section',
55 columns: 1,
56 id: '',
57 html_id: '',
58 cssclass: '',
59 col_styles: '' // JSON string, empty by default to avoid activation
60 };
61 }
62
63 /**
64 * Render section preview into element.
65 *
66 * @param {HTMLElement} el
67 * @param {object} data
68 * @param {object} ctx
69 */
70 static render(el, data, ctx) {
71 if (!el) {
72 return;
73 }
74 var d = this.normalize_data(data);
75 var html_id = d.html_id ? S.sanitize_html_id(String(d.html_id)) : '';
76 var next_class = S.sanitize_css_classlist(String(d.cssclass || ''));
77 var col_styles = d.col_styles != null ? String(d.col_styles) : '';
78
79 // Treat legacy "[]" as empty / inactive.
80 if (col_styles.trim() === '[]') {
81 col_styles = '';
82 }
83 el.classList.add('wpbc_bfb__section');
84 el.dataset.type = 'section';
85 el.dataset.label = d.label != null ? String(d.label) : '';
86 el.dataset.columns = d.columns != null ? String(clamp_cols(d.columns)) : '1';
87 el.dataset.html_id = html_id;
88 el.dataset.cssclass = next_class || '';
89 el.dataset.col_styles = col_styles;
90
91 // Replace previous custom classes.
92 var prev = el.__wpbc_prev_classes || '';
93 if (prev) {
94 prev.split(/\s+/).filter(Boolean).forEach(function (cls) {
95 el.classList.remove(cls);
96 });
97 }
98 if (next_class) {
99 next_class.split(/\s+/).filter(Boolean).forEach(function (cls) {
100 el.classList.add(cls);
101 });
102 }
103 el.__wpbc_prev_classes = next_class || '';
104
105 // Render wp.template.
106 var tpl = this.get_template(this.template_id);
107 if (typeof tpl !== 'function') {
108 w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('section_wptpl.tpl.missing', 'Template not found: ' + this.template_id);
109 el.innerHTML = '<div class="wpbc_bfb__error" role="alert">Template not found: wpbc-bfb-section.</div>';
110 return;
111 }
112 try {
113 el.innerHTML = tpl({
114 type: 'section',
115 label: el.dataset.label || 'Section',
116 columns: Number(el.dataset.columns || 1),
117 id: d.id || '',
118 html_id: html_id,
119 cssclass: next_class
120 });
121 } catch (e) {
122 w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('section_wptpl.tpl.render', e);
123 el.innerHTML = '<div class="wpbc_bfb__error" role="alert">Error rendering section preview.</div>';
124 }
125
126 // Apply per-column styles via shared UI service (no-op if missing).
127 try {
128 if (ColStyles && typeof ColStyles.apply === 'function') {
129 var arr = ColStyles.parse_col_styles(col_styles);
130 ColStyles.apply(el, arr);
131 }
132 } catch (e2) {
133 w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('section_wptpl.apply_col_styles', e2);
134 }
135
136 // Overlay controls (selection/toolbar), if available.
137 UI && UI.WPBC_BFB_Overlay && UI.WPBC_BFB_Overlay.ensure && UI.WPBC_BFB_Overlay.ensure(ctx && ctx.builder, el);
138 }
139
140 /**
141 * After drop hook.
142 *
143 * @param {object} data
144 * @param {HTMLElement} el
145 * @param {object} ctx
146 */
147 static on_field_drop(data, el, ctx) {
148 try {
149 var cols = clamp_cols(data && (data.columns != null ? data.columns : data['data-columns']) || el && el.dataset && el.dataset.columns || 1);
150 if (ctx && ctx.builder && typeof ctx.builder.set_section_columns === 'function') {
151 ctx.builder.set_section_columns(el, cols);
152 }
153 el.dataset.columns = String(cols);
154
155 // Re-apply styles (baseline + activation state).
156 if (ColStyles && typeof ColStyles.apply === 'function') {
157 var arr = ColStyles.parse_col_styles(el.dataset.col_styles || '');
158 ColStyles.apply(el, arr);
159 }
160 } catch (e) {
161 w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('WPBC_BFB_Section.on_field_drop', e);
162 }
163 }
164 }
165 try {
166 Registry.register('section', WPBC_BFB_Section);
167 } catch (e) {
168 w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('WPBC_BFB_Section.register_wptpl', e);
169 }
170 })(window);
171 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZmllbGQtcGFja3Mvc2VjdGlvbi9fb3V0L3NlY3Rpb24td3B0cGwuanMiLCJuYW1lcyI6WyJ3IiwiQ29yZSIsIldQQkNfQkZCX0NvcmUiLCJSZWdpc3RyeSIsIldQQkNfQkZCX0ZpZWxkX1JlbmRlcmVyX1JlZ2lzdHJ5IiwiQmFzZSIsIldQQkNfQkZCX0ZpZWxkX0Jhc2UiLCJVSSIsInJlZ2lzdGVyIiwiX3dwYmMiLCJkZXYiLCJlcnJvciIsIlMiLCJXUEJDX0JGQl9TYW5pdGl6ZSIsIkNvbFN0eWxlcyIsIldQQkNfQkZCX0NvbHVtbl9TdHlsZXMiLCJjbGFtcF9jb2xzIiwibiIsImNsYW1wIiwiTnVtYmVyIiwiV1BCQ19CRkJfU2VjdGlvbiIsInRlbXBsYXRlX2lkIiwiZ2V0X2RlZmF1bHRzIiwidHlwZSIsImxhYmVsIiwiY29sdW1ucyIsImlkIiwiaHRtbF9pZCIsImNzc2NsYXNzIiwiY29sX3N0eWxlcyIsInJlbmRlciIsImVsIiwiZGF0YSIsImN0eCIsImQiLCJub3JtYWxpemVfZGF0YSIsInNhbml0aXplX2h0bWxfaWQiLCJTdHJpbmciLCJuZXh0X2NsYXNzIiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInRyaW0iLCJjbGFzc0xpc3QiLCJhZGQiLCJkYXRhc2V0IiwicHJldiIsIl9fd3BiY19wcmV2X2NsYXNzZXMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJmb3JFYWNoIiwiY2xzIiwicmVtb3ZlIiwidHBsIiwiZ2V0X3RlbXBsYXRlIiwiaW5uZXJIVE1MIiwiZSIsImFwcGx5IiwiYXJyIiwicGFyc2VfY29sX3N0eWxlcyIsImUyIiwiV1BCQ19CRkJfT3ZlcmxheSIsImVuc3VyZSIsImJ1aWxkZXIiLCJvbl9maWVsZF9kcm9wIiwiY29scyIsInNldF9zZWN0aW9uX2NvbHVtbnMiLCJ3aW5kb3ciXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9maWVsZC1wYWNrcy9zZWN0aW9uL19zcmMvc2VjdGlvbi13cHRwbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogV1BCQyBCRkI6IFNlY3Rpb24gUmVuZGVyZXIgKFdQLXRlbXBsYXRl4oCTZHJpdmVuLCBzbGltIHZlcnNpb24pXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKiAtIERlbGVnYXRlcyBjb2x1bW4tc3R5bGUgbG9naWMgdG8gVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcyAoc2VwYXJhdGUgbW9kdWxlKVxyXG4gKiAtIEluc3BlY3RvciBnbHVlIGlzIG1vdmVkIHRvOiAgL19vdXQvY29yZS9iZmItaW5zcGVjdG9yLXBhdGNoZXMuanNcclxuICpcclxuICogQ29udHJhY3RzOlxyXG4gKiAtIFJlZ2lzdHJ5OiAgUmVnaXN0cnkucmVnaXN0ZXIoICdzZWN0aW9uJywgV1BCQ19CRkJfU2VjdGlvbiApO1xyXG4gKiAtIENsYXNzIEFQSTogc3RhdGljIGdldF9kZWZhdWx0cygpLCBzdGF0aWMgcmVuZGVyKGVsLCBkYXRhLCBjdHgpLCBzdGF0aWMgb25fZmllbGRfZHJvcChkYXRhLCBlbCwgY3R4PylcclxuICpcclxuICogRmlsZTogL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL2ZpZWxkLXBhY2tzL3NlY3Rpb24vX291dC9zZWN0aW9uLXdwdHBsLmpzXHJcbiAqXHJcbiAqIEBzaW5jZSAgICAgMTEuMC4wXHJcbiAqIEBtb2RpZmllZCAgMjAyNS0wOS0xNiAxMToyNFxyXG4gKiBAdmVyc2lvbiAgIDEuMS4wXHJcbiAqL1xyXG4oZnVuY3Rpb24gKCB3ICkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0dmFyIENvcmUgICAgID0gdy5XUEJDX0JGQl9Db3JlIHx8IHt9O1xyXG5cdHZhciBSZWdpc3RyeSA9IENvcmUuV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnk7XHJcblx0dmFyIEJhc2UgICAgID0gQ29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlO1xyXG5cdHZhciBVSSAgICAgICA9ICggQ29yZS5VSSA9IENvcmUuVUkgfHwge30gKTtcclxuXHJcblx0aWYgKCAhIFJlZ2lzdHJ5IHx8IHR5cGVvZiBSZWdpc3RyeS5yZWdpc3RlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhIEJhc2UgKSB7XHJcblx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnV1BCQ19CRkJfU2VjdGlvbicsICdDb3JlIHJlZ2lzdHJ5L2Jhc2UgbWlzc2luZycgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8vIFNob3J0Y3V0cy5cclxuXHR2YXIgUyAgICAgICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHR2YXIgQ29sU3R5bGVzID0gVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcyB8fCBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBDbGFtcCBudW1iZXIgb2YgY29sdW1ucyB0byBzdXBwb3J0ZWQgcmFuZ2UuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG5cclxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGNsYW1wX2NvbHMoIG4gKSB7XHJcblx0XHRyZXR1cm4gUy5jbGFtcCggTnVtYmVyKCBuICkgfHwgMSwgMSwgNCApO1xyXG5cdH1cclxuXHJcblx0Y2xhc3MgV1BCQ19CRkJfU2VjdGlvbiBleHRlbmRzIEJhc2Uge1xyXG5cclxuXHRcdHN0YXRpYyB0ZW1wbGF0ZV9pZCA9ICd3cGJjLWJmYi1zZWN0aW9uJztcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlZmF1bHQgZGF0YSBmb3IgYSBuZXcgU2VjdGlvbi5cclxuXHRcdCAqIE5PVEU6IEtlZXAgaW4gc3luYyB3aXRoIFBIUCBzY2hlbWEuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfZGVmYXVsdHMoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZSAgICAgICA6ICdzZWN0aW9uJyxcclxuXHRcdFx0XHRsYWJlbCAgICAgIDogJ1NlY3Rpb24nLFxyXG5cdFx0XHRcdGNvbHVtbnMgICAgOiAxLFxyXG5cdFx0XHRcdGlkICAgICAgICAgOiAnJyxcclxuXHRcdFx0XHRodG1sX2lkICAgIDogJycsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICA6ICcnLFxyXG5cdFx0XHRcdGNvbF9zdHlsZXMgOiAnJyAgICAgICAgICAgLy8gSlNPTiBzdHJpbmcsIGVtcHR5IGJ5IGRlZmF1bHQgdG8gYXZvaWQgYWN0aXZhdGlvblxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVuZGVyIHNlY3Rpb24gcHJldmlldyBpbnRvIGVsZW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSAgICAgIGRhdGFcclxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSAgICAgIGN0eFxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcmVuZGVyKCBlbCwgZGF0YSwgY3R4ICkge1xyXG5cdFx0XHRpZiAoICEgZWwgKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdFx0dmFyIGQgICAgICAgICAgPSB0aGlzLm5vcm1hbGl6ZV9kYXRhKCBkYXRhICk7XHJcblx0XHRcdHZhciBodG1sX2lkICAgID0gZC5odG1sX2lkID8gUy5zYW5pdGl6ZV9odG1sX2lkKCBTdHJpbmcoIGQuaHRtbF9pZCApICkgOiAnJztcclxuXHRcdFx0dmFyIG5leHRfY2xhc3MgPSBTLnNhbml0aXplX2Nzc19jbGFzc2xpc3QoIFN0cmluZyggZC5jc3NjbGFzcyB8fCAnJyApICk7XHJcblx0XHRcdHZhciBjb2xfc3R5bGVzID0gKCBkLmNvbF9zdHlsZXMgIT0gbnVsbCApID8gU3RyaW5nKCBkLmNvbF9zdHlsZXMgKSA6ICcnO1xyXG5cclxuXHRcdFx0Ly8gVHJlYXQgbGVnYWN5IFwiW11cIiBhcyBlbXB0eSAvIGluYWN0aXZlLlxyXG5cdFx0XHRpZiAoIGNvbF9zdHlsZXMudHJpbSgpID09PSAnW10nICkgeyBjb2xfc3R5bGVzID0gJyc7IH1cclxuXHJcblx0XHRcdGVsLmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0ZWwuZGF0YXNldC50eXBlICAgICAgID0gJ3NlY3Rpb24nO1xyXG5cdFx0XHRlbC5kYXRhc2V0LmxhYmVsICAgICAgPSAoIGQubGFiZWwgIT0gbnVsbCA/IFN0cmluZyggZC5sYWJlbCApIDogJycgKTtcclxuXHRcdFx0ZWwuZGF0YXNldC5jb2x1bW5zICAgID0gKCBkLmNvbHVtbnMgIT0gbnVsbCA/IFN0cmluZyggY2xhbXBfY29scyggZC5jb2x1bW5zICkgKSA6ICcxJyApO1xyXG5cdFx0XHRlbC5kYXRhc2V0Lmh0bWxfaWQgICAgPSBodG1sX2lkO1xyXG5cdFx0XHRlbC5kYXRhc2V0LmNzc2NsYXNzICAgPSBuZXh0X2NsYXNzIHx8ICcnO1xyXG5cdFx0XHRlbC5kYXRhc2V0LmNvbF9zdHlsZXMgPSBjb2xfc3R5bGVzO1xyXG5cclxuXHRcdFx0Ly8gUmVwbGFjZSBwcmV2aW91cyBjdXN0b20gY2xhc3Nlcy5cclxuXHRcdFx0dmFyIHByZXYgPSAoIGVsLl9fd3BiY19wcmV2X2NsYXNzZXMgfHwgJycgKTtcclxuXHRcdFx0aWYgKCBwcmV2ICkge1xyXG5cdFx0XHRcdHByZXYuc3BsaXQoIC9cXHMrLyApLmZpbHRlciggQm9vbGVhbiApLmZvckVhY2goIGZ1bmN0aW9uICggY2xzICkgeyBlbC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTsgfSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggbmV4dF9jbGFzcyApIHtcclxuXHRcdFx0XHRuZXh0X2NsYXNzLnNwbGl0KCAvXFxzKy8gKS5maWx0ZXIoIEJvb2xlYW4gKS5mb3JFYWNoKCBmdW5jdGlvbiAoIGNscyApIHsgZWwuY2xhc3NMaXN0LmFkZCggY2xzICk7IH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbC5fX3dwYmNfcHJldl9jbGFzc2VzID0gbmV4dF9jbGFzcyB8fCAnJztcclxuXHJcblx0XHRcdC8vIFJlbmRlciB3cC50ZW1wbGF0ZS5cclxuXHRcdFx0dmFyIHRwbCA9IHRoaXMuZ2V0X3RlbXBsYXRlKCB0aGlzLnRlbXBsYXRlX2lkICk7XHJcblx0XHRcdGlmICggdHlwZW9mIHRwbCAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnc2VjdGlvbl93cHRwbC50cGwubWlzc2luZycsICdUZW1wbGF0ZSBub3QgZm91bmQ6ICcgKyB0aGlzLnRlbXBsYXRlX2lkICk7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9fZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5UZW1wbGF0ZSBub3QgZm91bmQ6IHdwYmMtYmZiLXNlY3Rpb24uPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRlbC5pbm5lckhUTUwgPSB0cGwoIHtcclxuXHRcdFx0XHRcdHR5cGUgICAgIDogJ3NlY3Rpb24nLFxyXG5cdFx0XHRcdFx0bGFiZWwgICAgOiBlbC5kYXRhc2V0LmxhYmVsIHx8ICdTZWN0aW9uJyxcclxuXHRcdFx0XHRcdGNvbHVtbnMgIDogTnVtYmVyKCBlbC5kYXRhc2V0LmNvbHVtbnMgfHwgMSApLFxyXG5cdFx0XHRcdFx0aWQgICAgICAgOiBkLmlkIHx8ICcnLFxyXG5cdFx0XHRcdFx0aHRtbF9pZCAgOiBodG1sX2lkLFxyXG5cdFx0XHRcdFx0Y3NzY2xhc3MgOiBuZXh0X2NsYXNzXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnc2VjdGlvbl93cHRwbC50cGwucmVuZGVyJywgZSApO1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+RXJyb3IgcmVuZGVyaW5nIHNlY3Rpb24gcHJldmlldy48L2Rpdj4nO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBcHBseSBwZXItY29sdW1uIHN0eWxlcyB2aWEgc2hhcmVkIFVJIHNlcnZpY2UgKG5vLW9wIGlmIG1pc3NpbmcpLlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGlmICggQ29sU3R5bGVzICYmIHR5cGVvZiBDb2xTdHlsZXMuYXBwbHkgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHR2YXIgYXJyID0gQ29sU3R5bGVzLnBhcnNlX2NvbF9zdHlsZXMoIGNvbF9zdHlsZXMgKTtcclxuXHRcdFx0XHRcdENvbFN0eWxlcy5hcHBseSggZWwsIGFyciApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIGUyICkge1xyXG5cdFx0XHRcdHcuX3dwYmMgJiYgdy5fd3BiYy5kZXYgJiYgdy5fd3BiYy5kZXYuZXJyb3IgJiYgdy5fd3BiYy5kZXYuZXJyb3IoICdzZWN0aW9uX3dwdHBsLmFwcGx5X2NvbF9zdHlsZXMnLCBlMiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPdmVybGF5IGNvbnRyb2xzIChzZWxlY3Rpb24vdG9vbGJhciksIGlmIGF2YWlsYWJsZS5cclxuXHRcdFx0VUkgJiYgVUkuV1BCQ19CRkJfT3ZlcmxheSAmJiBVSS5XUEJDX0JGQl9PdmVybGF5LmVuc3VyZSAmJiBVSS5XUEJDX0JGQl9PdmVybGF5LmVuc3VyZSggY3R4ICYmIGN0eC5idWlsZGVyLCBlbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQWZ0ZXIgZHJvcCBob29rLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSAgICAgIGRhdGFcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHQgKiBAcGFyYW0ge29iamVjdH0gICAgICBjdHhcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoIGRhdGEsIGVsLCBjdHggKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIGNvbHMgPSBjbGFtcF9jb2xzKFxyXG5cdFx0XHRcdFx0KCBkYXRhICYmICggZGF0YS5jb2x1bW5zICE9IG51bGwgPyBkYXRhLmNvbHVtbnMgOiBkYXRhWydkYXRhLWNvbHVtbnMnXSApIClcclxuXHRcdFx0XHRcdHx8ICggZWwgJiYgZWwuZGF0YXNldCAmJiBlbC5kYXRhc2V0LmNvbHVtbnMgKVxyXG5cdFx0XHRcdFx0fHwgMVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKCBjdHggJiYgY3R4LmJ1aWxkZXIgJiYgdHlwZW9mIGN0eC5idWlsZGVyLnNldF9zZWN0aW9uX2NvbHVtbnMgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRjdHguYnVpbGRlci5zZXRfc2VjdGlvbl9jb2x1bW5zKCBlbCwgY29scyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbC5kYXRhc2V0LmNvbHVtbnMgPSBTdHJpbmcoIGNvbHMgKTtcclxuXHJcblx0XHRcdFx0Ly8gUmUtYXBwbHkgc3R5bGVzIChiYXNlbGluZSArIGFjdGl2YXRpb24gc3RhdGUpLlxyXG5cdFx0XHRcdGlmICggQ29sU3R5bGVzICYmIHR5cGVvZiBDb2xTdHlsZXMuYXBwbHkgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHR2YXIgYXJyID0gQ29sU3R5bGVzLnBhcnNlX2NvbF9zdHlsZXMoIGVsLmRhdGFzZXQuY29sX3N0eWxlcyB8fCAnJyApO1xyXG5cdFx0XHRcdFx0Q29sU3R5bGVzLmFwcGx5KCBlbCwgYXJyICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnV1BCQ19CRkJfU2VjdGlvbi5vbl9maWVsZF9kcm9wJywgZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0cnkge1xyXG5cdFx0UmVnaXN0cnkucmVnaXN0ZXIoICdzZWN0aW9uJywgV1BCQ19CRkJfU2VjdGlvbiApO1xyXG5cdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0dy5fd3BiYyAmJiB3Ll93cGJjLmRldiAmJiB3Ll93cGJjLmRldi5lcnJvciAmJiB3Ll93cGJjLmRldi5lcnJvciggJ1dQQkNfQkZCX1NlY3Rpb24ucmVnaXN0ZXJfd3B0cGwnLCBlICk7XHJcblx0fVxyXG5cclxufSkoIHdpbmRvdyApO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFVBQVdBLENBQUMsRUFBRztFQUNmLFlBQVk7O0VBRVosSUFBSUMsSUFBSSxHQUFPRCxDQUFDLENBQUNFLGFBQWEsSUFBSSxDQUFDLENBQUM7RUFDcEMsSUFBSUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLGdDQUFnQztFQUNwRCxJQUFJQyxJQUFJLEdBQU9KLElBQUksQ0FBQ0ssbUJBQW1CO0VBQ3ZDLElBQUlDLEVBQUUsR0FBV04sSUFBSSxDQUFDTSxFQUFFLEdBQUdOLElBQUksQ0FBQ00sRUFBRSxJQUFJLENBQUMsQ0FBRztFQUUxQyxJQUFLLENBQUVKLFFBQVEsSUFBSSxPQUFPQSxRQUFRLENBQUNLLFFBQVEsS0FBSyxVQUFVLElBQUksQ0FBRUgsSUFBSSxFQUFHO0lBQ3RFTCxDQUFDLENBQUNTLEtBQUssSUFBSVQsQ0FBQyxDQUFDUyxLQUFLLENBQUNDLEdBQUcsSUFBSVYsQ0FBQyxDQUFDUyxLQUFLLENBQUNDLEdBQUcsQ0FBQ0MsS0FBSyxJ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
172