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
← All changes | includes/page-form-builder/preview/_out/bfb-preview.js +126 -2 10.15.6 → 11.9 View file →
@@ -145,9 +145,130 @@
145 145 }
146 146 return form_settings;
147 147 }
148 148
149 + /**
150 + * Read a Form Style control directly from DOM.
151 + *
152 + * @param {string} key
153 + * @returns {string|null}
154 + */
155 + read_form_style_control_value(key) {
156 + var control = null;
157 + var checked = null;
158 + if (key === 'booking_form_style') {
159 + checked = d.querySelector('input[type="radio"][name="booking_form_style"]:checked');
160 + return checked ? String(checked.value || '') : null;
161 + }
162 + control = d.querySelector('[data-wpbc-bfb-fs-key="' + key + '"]');
163 + if (!control) {
164 + control = d.getElementById(key);
165 + }
166 + if (!control) {
167 + return null;
168 + }
169 + if (control.matches && control.matches('input[type="radio"]')) {
170 + checked = d.querySelector('input[type="radio"][name="' + control.name + '"]:checked');
171 + return checked ? String(checked.value || '') : null;
172 + }
173 + if (control.matches && control.matches('input[type="checkbox"]')) {
174 + return control.checked ? 'On' : 'Off';
175 + }
176 + if (typeof control.value !== 'undefined') {
177 + return String(control.value == null ? '' : control.value);
178 + }
179 + return null;
180 + }
181 +
182 + /**
183 + * Build the current global Form Style override for preview only.
184 + *
185 + * @returns {Object}
186 + */
187 + get_current_form_style_settings() {
188 + var style_keys = ['booking_form_style', 'booking_form_accent_enabled', 'booking_form_accent_color', 'booking_form_custom_background_color', 'booking_form_custom_border_color', 'booking_form_custom_border_width', 'booking_form_custom_border_radius', 'booking_form_custom_padding_vertical', 'booking_form_custom_padding_horizontal', 'booking_form_custom_text_color', 'booking_form_custom_field_background_color', 'booking_form_custom_field_text_color', 'booking_form_custom_field_border_color', 'booking_form_custom_button_background_color', 'booking_form_custom_button_text_color', 'booking_form_custom_button_border_color', 'booking_form_custom_button_hover_background_color', 'booking_form_custom_button_hover_text_color', 'booking_form_custom_button_hover_border_color', 'booking_form_custom_secondary_button_background_color', 'booking_form_custom_secondary_button_text_color', 'booking_form_custom_secondary_button_border_color', 'booking_form_custom_secondary_button_hover_background_color', 'booking_form_custom_secondary_button_hover_text_color', 'booking_form_custom_secondary_button_hover_border_color'];
189 + var out = {};
190 + var collected = {};
191 + var self = this;
192 + var localized = w.wpbc_bfb_settings_vars && w.wpbc_bfb_settings_vars.global_form_style ? w.wpbc_bfb_settings_vars.global_form_style : {};
193 + if (w.WPBC_BFB_FormSettings && typeof w.WPBC_BFB_FormSettings.collect === 'function') {
194 + collected = w.WPBC_BFB_FormSettings.collect('global') || {};
195 + }
196 + style_keys.forEach(function (key) {
197 + var dom_value = self.read_form_style_control_value(key);
198 + if (null !== dom_value) {
199 + out[key] = dom_value;
200 + } else if (Object.prototype.hasOwnProperty.call(collected, key)) {
201 + out[key] = collected[key];
202 + } else if (Object.prototype.hasOwnProperty.call(localized, key)) {
203 + out[key] = localized[key];
204 + }
205 + });
206 + return out;
207 + }
208 +
149 209 /**
210 + * Get the currently selected calendar skin URL from the Builder page.
211 + *
212 + * @returns {string}
213 + */
214 + get_selected_calendar_skin_url() {
215 + var select_el = d.querySelector('.js-wpbc-bfb-calendar-skin');
216 + if (select_el && select_el.options) {
217 + var selected_option = select_el.options[select_el.selectedIndex];
218 + if (selected_option) {
219 + var selected_url = selected_option.getAttribute('data-wpbc-calendar-skin-url');
220 + if (selected_url) {
221 + return String(selected_url);
222 + }
223 + }
224 + }
225 + var stylesheet = d.getElementById('wpbc-calendar-skin-css');
226 + if (stylesheet && stylesheet.href) {
227 + return String(stylesheet.href);
228 + }
229 + return '';
230 + }
231 +
232 + /**
233 + * Apply the unsaved Builder calendar skin inside the loaded Preview iframe.
234 + *
235 + * @param {string} skin_url
236 + * @param {Function} done
237 + * @param {number} tries
238 + */
239 + apply_calendar_skin_to_iframe(skin_url, done, tries) {
240 + var self = this;
241 + var attempt_num = Number(tries || 0);
242 + if (!skin_url || !this.iframe || !this.iframe.contentWindow) {
243 + if (typeof done === 'function') {
244 + done();
245 + }
246 + return;
247 + }
248 + try {
249 + if (typeof this.iframe.contentWindow.wpbc__calendar__change_skin === 'function') {
250 + this.iframe.contentWindow.wpbc__calendar__change_skin(skin_url);
251 + if (typeof done === 'function') {
252 + done();
253 + }
254 + return;
255 + }
256 + } catch (e) {
257 + dev.error('wpbc_bfb_preview_client.apply_calendar_skin_to_iframe', e);
258 + }
259 + if (attempt_num >= 20) {
260 + if (typeof done === 'function') {
261 + done();
262 + }
263 + return;
264 + }
265 + w.setTimeout(function () {
266 + self.apply_calendar_skin_to_iframe(skin_url, done, attempt_num + 1);
267 + }, 100);
268 + }
269 +
270 + /**
150 271 * Send snapshot to server and update iframe src with returned preview URL.
151 272 *
152 273 * @param {{source_button?:HTMLElement}} [opts]
153 274 */
@@ -176,8 +297,9 @@
176 297 var cfg = w.WPBC_BFB_Ajax || {};
177 298
178 299 // Build settings payload (same as real saving).
179 300 var form_settings = this.get_current_form_settings(cfg.form_name || 'standard');
301 + var preview_form_style = this.get_current_form_style_settings();
180 302 payload.append('action', 'WPBC_AJX_BFB_SAVE_FORM_CONFIG');
181 303 payload.append('nonce', cfg.nonce_save || this.nonce || '');
182 304
183 305 // IMPORTANT:
@@ -190,8 +312,9 @@
190 312 payload.append('structure', JSON.stringify(structure));
191 313
192 314 // Send real settings (options + compiled css_vars).
193 315 payload.append('settings', JSON.stringify(form_settings));
316 + payload.append('preview_form_style', JSON.stringify(preview_form_style));
194 317
195 318 // ----------------------------------------------------------------------------
196 319 // Choose where advanced_form + content_form are taken from (auto|builder|advanced)
197 320 // ----------------------------------------------------------------------------
@@ -263,8 +386,9 @@
263 386 } else if (typeof w.ajaxurl !== 'undefined' && w.ajaxurl) {
264 387 ajax_url = w.ajaxurl;
265 388 }
266 389 var self = this;
390 + var preview_calendar_skin_url = this.get_selected_calendar_skin_url();
267 391 function end_busy_now() {
268 392 self._end_busy($source_btn);
269 393 }
270 394 if (!ajax_url) {
@@ -291,9 +415,9 @@
291 415
292 416 // Wait until iframe has really loaded the preview URL.
293 417 var on_load = function () {
294 418 self.iframe.removeEventListener('load', on_load);
295 - end_busy_now();
419 + self.apply_calendar_skin_to_iframe(preview_calendar_skin_url, end_busy_now);
296 420 };
297 421 self.iframe.addEventListener('load', on_load);
298 422 self.iframe.setAttribute('src', data.data.preview_url);
299 423 }).catch(function (err) {
@@ -875,5 +999,5 @@
875 999 } else {
876 1000 d.addEventListener('DOMContentLoaded', wpbc_bfb_init_preview_client);
877 1001 }
878 1002 })(window, document);
879 -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvcHJldmlldy9fb3V0L2JmYi1wcmV2aWV3LmpzIiwibmFtZXMiOlsidyIsImQiLCJkZXYiLCJfd3BiYyIsImxvZyIsImVycm9yIiwid3BiY19iZmJfcHJldmlld19jbGllbnQiLCJjb25zdHJ1Y3RvciIsInJvb3RfZWwiLCJpZnJhbWUiLCJxdWVyeVNlbGVjdG9yIiwibG9hZGVyIiwiYnV0dG9uIiwibm9uY2UiLCJnZXRBdHRyaWJ1dGUiLCJpc19idXN5IiwiYmluZF9ldmVudHMiLCJzZXRfbG9hZGVyX3Zpc2libGUiLCJpc192aXNpYmxlIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwic2VsZiIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVfcHJldmlldyIsImdldF9jdXJyZW50X3N0cnVjdHVyZSIsIndwYmNfYmZiIiwiZ2V0X3N0cnVjdHVyZSIsImUiLCJwYXJzZV9sZW5ndGhfdmFsdWUiLCJ2YWx1ZSIsInJhdyIsIlN0cmluZyIsInRyaW0iLCJtIiwibWF0Y2giLCJudW0iLCJ1bml0IiwiZ2V0X2N1cnJlbnRfZm9ybV9zZXR0aW5ncyIsImZvcm1fbmFtZSIsImZvcm1fc2V0dGluZ3MiLCJvcHRpb25zIiwiY3NzX3ZhcnMiLCJ3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSIsInNldHRpbmdzIiwib3B0cyIsInN0cnVjdHVyZSIsInNvdXJjZV9idG4iLCJzb3VyY2VfYnV0dG9uIiwiJHNvdXJjZV9idG4iLCJqUXVlcnkiLCJ3cGJjX2JmYl9fYnV0dG9uX2J1c3lfc3RhcnQiLCJsZW5ndGgiLCJzZXRfYnV0dG9uX2J1c3kiLCJwYXlsb2FkIiwiRm9ybURhdGEiLCJjZmciLCJXUEJDX0JGQl9BamF4IiwiYXBwZW5kIiwibm9uY2Vfc2F2ZSIsImVuZ2luZSIsImVuZ2luZV92ZXJzaW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZXZpZXdfc291cmNlIiwid3BiY19iZmJfcHJldmlld19fZ2V0X3NvdXJjZSIsImFkdiIsIndwYmNfYmZiX3ByZXZpZXdfX3JlYWRfYWR2YW5jZWRfbW9kZV9wYXlsb2FkIiwiY2FuX3VzZV9hZHZhbmNlZCIsImlzX2RpcnR5Iiwid3BiY19iZmJfcHJldmlld19faGFzX3RleHQiLCJhZHZhbmNlZF9mb3JtIiwiY29udGVudF9mb3JtIiwid3BiY19hZG1pbl9zaG93X21lc3NhZ2UiLCJhbHJlYWR5X2hhc19hZHYiLCJoYXMiLCJXUEJDX0JGQl9FeHBvcnRlciIsImV4cG9ydF9hbGwiLCJ3aWR0aF9jb21iaW5lZCIsImJvb2tpbmdfZm9ybV9sYXlvdXRfd2lkdGgiLCJwYXJzZWRfd2lkdGgiLCJ3aWR0aF91bml0IiwiZXhwb3J0X29wdGlvbnMiLCJnYXBQZXJjZW50IiwiZm9ybV9zbHVnIiwiZm9ybV93aWR0aF92YWx1ZSIsImZvcm1fd2lkdGhfdW5pdCIsImV4cG9ydF9yZXN1bHQiLCJmaWVsZHNfZGF0YSIsImNvbnNvbGUiLCJhamF4X3VybCIsIndwYmNfYmZiX19nZXRfYWpheF91cmwiLCJhamF4dXJsIiwiZW5kX2J1c3lfbm93IiwiX2VuZF9idXN5IiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwidGhlbiIsInJlc3BvbnNlIiwianNvbiIsImRhdGEiLCJzdWNjZXNzIiwicHJldmlld191cmwiLCJvbl9sb2FkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldEF0dHJpYnV0ZSIsImNhdGNoIiwiZXJyIiwid3BiY19iZmJfX2J1dHRvbl9idXN5X2VuZCIsInJlc2V0X2J1c3lfc3RhdGUiLCIkYnRucyIsImVhY2giLCIkYiIsImhhc0NsYXNzIiwiJGJ0biIsInJlbW92ZUF0dHJpYnV0ZSIsInNldF9tb2RlIiwibW9kZSIsIndwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfbW9kZV9hY3RpdmUiLCJjb250YWlucyIsIndwYmNfYmZiX3ByZXZpZXdfX2dldF9hY3RpdmVfdG9wX3RhYl9pZCIsIndwYmNfYmZiX3ByZXZpZXdfX2JpbmRfZm9ybV9hamF4X2xvYWRlZF9ldmVudHMiLCJjbGllbnQiLCJfX3dwYmNfYmZiX3ByZXZpZXdfX2Zvcm1fYWpheF9sb2FkZWRfYm91bmQiLCJkZWJvdW5jZV9pZCIsImV2IiwiZGV0IiwiZGV0YWlsIiwiZm4iLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidHJpZXMiLCJ3YWl0X2Zvcl9idWlsZGVyIiwicGFzc2l2ZSIsImJ0biIsInYiLCJzYXZlX3NvdXJjZSIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsIndwYmNfYmZiX2FkdmFuY2VkX2VkaXRvcl9hcGkiLCJnZXRfdmFsdWVzIiwidGFfZm9ybSIsImdldEVsZW1lbnRCeUlkIiwidGFfY29udGVudCIsIndwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfdGFiX2xpbmsiLCJlbCIsIndwYmNfYmZiX3ByZXZpZXdfX2lzX2J1aWxkZXJfdGFiX2xpbmsiLCJ3cGJjX2JmYl9fYWN0aXZhdGVfcGFuZWxfdGFiIiwidGFiX2lkIiwidGFiX2xpbmsiLCJjbGljayIsIl9lIiwibmF2IiwicGFuZWxzX3Jvb3QiLCJwYW5lbHNfcm9vdF9zZWxlY3RvciIsIl9lMiIsInBhbmVsX2Jhc2VfY2xhc3MiLCJmcm9tX25hdiIsInNlbGVjdG9yX2FsbCIsInBhbmVsX25vZGVzIiwicXVlcnlTZWxlY3RvckFsbCIsImkiLCJzdHlsZSIsImRpc3BsYXkiLCJzZWxlY3Rvcl9hY3RpdmUiLCJhY3RpdmVfcGFuZWwiLCJpdGVtcyIsImoiLCJhY3RpdmVfaXRlbSIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsInRhYiIsIm5hdl9pZCIsImlkIiwiX2UzIiwid3BiY19iZmJfcHJldmlld19fc3luY19tb2RlX3RvX3RhYiIsIndwYmNfYmZiX3ByZXZpZXdfX2JpbmRfdG9wX3RhYl9ldmVudHMiLCJwcmV2X2lkIiwicHJldl90YWIiLCJUT1BfTkFWX0lEIiwicmV0dXJuX3RhYl9pZCIsInJlbWVtYmVyX3JldHVybl90YWJfZnJvbV9kb20iLCJjdXIiLCJnZXRfcmV0dXJuX3RhYl9pZCIsInQiLCJ3cGJjX2JmYl9pbml0X3ByZXZpZXdfY2xpZW50Iiwicm9vdCIsIldQQkNfQkZCX1ByZXZpZXciLCJzaG93X3ByZXZpZXciLCJvcHQiLCJzcmMiLCJzaG93X2J1aWxkZXIiLCJiYWNrX3RvIiwic2hvd19hZHZhbmNlZF90YWIiLCJ3cGJjX2JmYl9iaW5kX3RvcF90b29sYmFyX2J1dHRvbnMiLCJidG5fcHJldmlld19saXN0IiwiYnRuX2J1aWxkZXJfbGlzdCIsImJ0bl9yZWZyZXNoX2xpc3QiLCJmb3JfZWFjaF9ub2RlIiwibGlzdCIsImNiIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIiwiY2FsbCIsImJ0bl9wcmV2aWV3IiwicHJldmVudERlZmF1bHQiLCJidG5fcmVmcmVzaCIsInVwZGF0ZSIsImJ0bl9idWlsZGVyIiwicmVhZHlTdGF0ZSIsIndpbmRvdyIsImRvY3VtZW50Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvcHJldmlldy9fc3JjL2JmYi1wcmV2aWV3LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA9PSBGaWxlICAvaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvcHJldmlldy9fb3V0L2JmYi1wcmV2aWV3LmpzXHJcbi8vID09IEJGQiBQcmV2aWV3IENsaWVudCDigJQgc2VuZHMgY3VycmVudCBzdHJ1Y3R1cmUgdmlhIEFKQVggYW5kIGxvYWRzIHByZXZpZXcgVVJMIGludG8gaWZyYW1lXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNpbXBsZSBsb2dnZXIgYWxpYXMgKG9wdGlvbmFsKS5cclxuXHQgKlxyXG5cdCAqIEB0eXBlIHt7bG9nOkZ1bmN0aW9uLCBlcnJvcjpGdW5jdGlvbn19XHJcblx0ICovXHJcblx0dmFyIGRldiA9ICh3Ll93cGJjICYmIHcuX3dwYmMuZGV2KSA/IHcuX3dwYmMuZGV2IDoge1xyXG5cdFx0bG9nOiBmdW5jdGlvbiAoKSB7fSxcclxuXHRcdGVycm9yOiBmdW5jdGlvbiAoKSB7fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByZXZpZXcgY2xpZW50IGNsYXNzLlxyXG5cdCAqIEJpbmRzIHRvIGEgcHJldmlldyBwYW5lbCByb290IHRoYXQgY29udGFpbnMgYnV0dG9uICsgaWZyYW1lLlxyXG5cdCAqL1xyXG5cdGNsYXNzIHdwYmNfYmZiX3ByZXZpZXdfY2xpZW50IHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvb3RfZWwgUm9vdCBlbGVtZW50IG9mIHRoZSBwcmV2aWV3IHBhbmVsLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3Rvcihyb290X2VsKSB7XHJcblx0XHRcdHRoaXMucm9vdF9lbCA9IHJvb3RfZWw7XHJcblx0XHRcdHRoaXMuaWZyYW1lICA9IHJvb3RfZWwucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLXByZXZpZXctaWZyYW1lPVwiMVwiXScgKTtcclxuXHRcdFx0dGhpcy5sb2FkZXIgID0gcm9vdF9lbC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItcHJldmlldy1sb2FkZXI9XCIxXCJdJyApOyAvLyBORVdcclxuXHRcdFx0dGhpcy5idXR0b24gID0gbnVsbDsgLy8gTm8gbG9jYWwgXCJVcGRhdGUgUHJldmlld1wiIGJ1dHRvbiBpbiBwYW5lbCBhbnltb3JlLlxyXG5cclxuXHRcdFx0dGhpcy5ub25jZSAgID0gcm9vdF9lbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXByZXZpZXctbm9uY2UnICkgfHwgJyc7XHJcblx0XHRcdHRoaXMuaXNfYnVzeSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKCAhdGhpcy5pZnJhbWUgKSB7XHJcblx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQnLCAnTWlzc2luZyBpZnJhbWUgZWxlbWVudCcgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuYmluZF9ldmVudHMoKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG93L2hpZGUgdGhlIG92ZXJsYXkgbG9hZGVyIG92ZXIgdGhlIGlmcmFtZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzX3Zpc2libGVcclxuXHRcdCAqL1xyXG5cdFx0c2V0X2xvYWRlcl92aXNpYmxlKGlzX3Zpc2libGUpIHtcclxuXHRcdFx0aWYgKCAhdGhpcy5sb2FkZXIgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggaXNfdmlzaWJsZSApIHtcclxuXHRcdFx0XHR0aGlzLmxvYWRlci5jbGFzc0xpc3QuYWRkKCAnaXMtdmlzaWJsZScgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmxvYWRlci5jbGFzc0xpc3QucmVtb3ZlKCAnaXMtdmlzaWJsZScgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQmluZCBVSSBldmVudHMgKHBhbmVsLWxvY2FsIGJ1dHRvbiwgaWYgcHJlc2VudCkuXHJcblx0XHQgKi9cclxuXHRcdGJpbmRfZXZlbnRzKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAoICEgdGhpcy5idXR0b24gKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0c2VsZi51cGRhdGVfcHJldmlldygpO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgY3VycmVudCBCRkIgc3RydWN0dXJlIGZyb20gZ2xvYmFsIGJ1aWxkZXIuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybnMge09iamVjdHxudWxsfVxyXG5cdFx0ICovXHJcblx0XHRnZXRfY3VycmVudF9zdHJ1Y3R1cmUoKSB7XHJcblx0XHRcdGlmICggISB3LndwYmNfYmZiIHx8IHR5cGVvZiB3LndwYmNfYmZiLmdldF9zdHJ1Y3R1cmUgIT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQnLCAnd3BiY19iZmIuZ2V0X3N0cnVjdHVyZSgpIGlzIG5vdCBhdmFpbGFibGUnICk7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0cmV0dXJuIHcud3BiY19iZmIuZ2V0X3N0cnVjdHVyZSgpO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQuZ2V0X2N1cnJlbnRfc3RydWN0dXJlJywgZSApO1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBQYXJzZSBjb21iaW5lZCBsZW5ndGggdmFsdWUgbGlrZSBcIjEwMCVcIiwgXCIzMjBweFwiLCBcIjEyLjVyZW1cIi5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuXHRcdCAqIEByZXR1cm4ge3tudW06c3RyaW5nLCB1bml0OnN0cmluZ319XHJcblx0XHQgKi9cclxuXHRcdHBhcnNlX2xlbmd0aF92YWx1ZSh2YWx1ZSkge1xyXG5cdFx0XHR2YXIgcmF3ID0gU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKS50cmltKCk7XHJcblx0XHRcdHZhciBtID0gcmF3Lm1hdGNoKC9eXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pXFxzKihbYS16JV0qKVxccyokL2kpO1xyXG5cdFx0XHRpZiAoIW0pIHtcclxuXHRcdFx0XHRyZXR1cm4geyBudW06IHJhdywgdW5pdDogJycgfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4geyBudW06IChtWzFdIHx8ICcnKSwgdW5pdDogKG1bMl0gfHwgJycpIH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBjdXJyZW50IGZvcm0gc2V0dGluZ3MgcGF5bG9hZCAoc2FtZSBzdHJ1Y3R1cmUgYXMgcmVhbCBTYXZlKTpcclxuXHRcdCAqIHtcclxuXHRcdCAqICAgb3B0aW9uczogeyAuLi5zb3VyY2Utb2YtdHJ1dGguLi4gfSxcclxuXHRcdCAqICAgY3NzX3ZhcnM6IHsgLi4uY29tcGlsZWQuLi4gfVxyXG5cdFx0ICogfVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtX25hbWVcclxuXHRcdCAqIEByZXR1cm5zIHt7b3B0aW9uczpPYmplY3QsIGNzc192YXJzOk9iamVjdH19XHJcblx0XHQgKi9cclxuXHRcdGdldF9jdXJyZW50X2Zvcm1fc2V0dGluZ3MoZm9ybV9uYW1lKSB7XHJcblxyXG5cdFx0XHR2YXIgZm9ybV9zZXR0aW5ncyA9IHtcclxuXHRcdFx0XHRvcHRpb25zIDoge30sXHJcblx0XHRcdFx0Y3NzX3ZhcnM6IHt9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyAtLS0gc2FtZSBldmVudCBjb250cmFjdCBhcyBhamF4L19vdXQvYmZiLWFqYXguanMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSggJ3dwYmM6YmZiOmZvcm1fc2V0dGluZ3M6Y29sbGVjdCcsIHtcclxuXHRcdFx0XHRzZXR0aW5ncyA6IGZvcm1fc2V0dGluZ3MsXHJcblx0XHRcdFx0Zm9ybV9uYW1lOiBmb3JtX25hbWUgfHwgJ3N0YW5kYXJkJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBTdHJpY3Q6IHJlcXVpcmUgY29ycmVjdCBzaGFwZS5cclxuXHRcdFx0aWYgKCAhZm9ybV9zZXR0aW5ncyB8fCB0eXBlb2YgZm9ybV9zZXR0aW5ncyAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdFx0Zm9ybV9zZXR0aW5ncyA9IHsgb3B0aW9uczoge30sIGNzc192YXJzOiB7fSB9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggIWZvcm1fc2V0dGluZ3Mub3B0aW9ucyB8fCB0eXBlb2YgZm9ybV9zZXR0aW5ncy5vcHRpb25zICE9PSAnb2JqZWN0JyApIHtcclxuXHRcdFx0XHRmb3JtX3NldHRpbmdzLm9wdGlvbnMgPSB7fTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoICFmb3JtX3NldHRpbmdzLmNzc192YXJzIHx8IHR5cGVvZiBmb3JtX3NldHRpbmdzLmNzc192YXJzICE9PSAnb2JqZWN0JyApIHtcclxuXHRcdFx0XHRmb3JtX3NldHRpbmdzLmNzc192YXJzID0ge307XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmb3JtX3NldHRpbmdzO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNlbmQgc25hcHNob3QgdG8gc2VydmVyIGFuZCB1cGRhdGUgaWZyYW1lIHNyYyB3aXRoIHJldHVybmVkIHByZXZpZXcgVVJMLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7e3NvdXJjZV9idXR0b24/OkhUTUxFbGVtZW50fX0gW29wdHNdXHJcblx0XHQgKi9cclxuXHRcdHVwZGF0ZV9wcmV2aWV3KCBvcHRzICkge1xyXG5cdFx0XHRpZiAoIHRoaXMuaXNfYnVzeSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBzdHJ1Y3R1cmUgPSB0aGlzLmdldF9jdXJyZW50X3N0cnVjdHVyZSgpO1xyXG5cdFx0XHRpZiAoICEgc3RydWN0dXJlICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5zZXRfbG9hZGVyX3Zpc2libGUoIHRydWUgKTtcclxuXHJcblx0XHRcdHZhciBvcHRpb25zICAgID0gb3B0cyB8fCB7fTtcclxuXHRcdFx0dmFyIHNvdXJjZV9idG4gPSBvcHRpb25zLnNvdXJjZV9idXR0b24gfHwgbnVsbDtcclxuXHJcblx0XHRcdHZhciAkc291cmNlX2J0biA9IG51bGw7XHJcblx0XHRcdGlmICggc291cmNlX2J0biAmJiB3LmpRdWVyeSAmJiB0eXBlb2Ygdy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfc3RhcnQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0JHNvdXJjZV9idG4gPSB3LmpRdWVyeSggc291cmNlX2J0biApO1xyXG5cdFx0XHRcdGlmICggJHNvdXJjZV9idG4gJiYgJHNvdXJjZV9idG4ubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0dy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfc3RhcnQoICRzb3VyY2VfYnRuICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmlzX2J1c3kgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLnNldF9idXR0b25fYnVzeSggdHJ1ZSApOyAvLyBsb2NhbCBcIlVwZGF0ZSBQcmV2aWV3XCIgYnV0dG9uIGluIHRoZSBwYW5lbFxyXG5cclxuXHRcdFx0dmFyIHBheWxvYWQgPSBuZXcgdy5Gb3JtRGF0YSgpO1xyXG5cdFx0XHR2YXIgY2ZnICAgICA9IHcuV1BCQ19CRkJfQWpheCB8fCB7fTtcclxuXHJcblx0XHRcdC8vIEJ1aWxkIHNldHRpbmdzIHBheWxvYWQgKHNhbWUgYXMgcmVhbCBzYXZpbmcpLlxyXG5cdFx0XHR2YXIgZm9ybV9zZXR0aW5ncyA9IHRoaXMuZ2V0X2N1cnJlbnRfZm9ybV9zZXR0aW5ncyggY2ZnLmZvcm1fbmFtZSB8fCAnc3RhbmRhcmQnICk7XHJcblxyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ2FjdGlvbicsICdXUEJDX0FKWF9CRkJfU0FWRV9GT1JNX0NPTkZJRycgKTtcclxuXHRcdFx0cGF5bG9hZC5hcHBlbmQoICdub25jZScsICggY2ZnLm5vbmNlX3NhdmUgfHwgdGhpcy5ub25jZSB8fCAnJyApICk7XHJcblxyXG5cdFx0XHQvLyBJTVBPUlRBTlQ6XHJcblx0XHRcdC8vIC0gZm9ybV9uYW1lIGlzIHRoZSBsb2dpY2FsIGZvcm0ga2V5ICh1c3VhbGx5ICdzdGFuZGFyZCcgb3Igc2VsZWN0ZWQgZm9ybSlcclxuXHRcdFx0cGF5bG9hZC5hcHBlbmQoICdmb3JtX25hbWUnLCAoIGNmZy5mb3JtX25hbWUgfHwgJ3N0YW5kYXJkJyApICk7XHJcblx0XHRcdHBheWxvYWQuYXBwZW5kKCAnc3RhdHVzJywgJ3ByZXZpZXcnICk7XHJcblx0XHRcdHBheWxvYWQuYXBwZW5kKCAncmV0dXJuX3ByZXZpZXdfdXJsJywgJzEnICk7XHJcblxyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ2VuZ2luZScsICggY2ZnLmVuZ2luZSB8fCAnYmZiJyApICk7XHJcblx0XHRcdHBheWxvYWQuYXBwZW5kKCAnZW5naW5lX3ZlcnNpb24nLCAoIGNmZy5lbmdpbmVfdmVyc2lvbiB8fCAnMS4wJyApICk7XHJcblxyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ3N0cnVjdHVyZScsIEpTT04uc3RyaW5naWZ5KCBzdHJ1Y3R1cmUgKSApO1xyXG5cclxuXHRcdFx0Ly8gU2VuZCByZWFsIHNldHRpbmdzIChvcHRpb25zICsgY29tcGlsZWQgY3NzX3ZhcnMpLlxyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ3NldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoIGZvcm1fc2V0dGluZ3MgKSApO1xyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBDaG9vc2Ugd2hlcmUgYWR2YW5jZWRfZm9ybSArIGNvbnRlbnRfZm9ybSBhcmUgdGFrZW4gZnJvbSAoYXV0b3xidWlsZGVyfGFkdmFuY2VkKVxyXG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRcdHZhciBwcmV2aWV3X3NvdXJjZSA9IHdwYmNfYmZiX3ByZXZpZXdfX2dldF9zb3VyY2UoIGNmZywgc291cmNlX2J0biApO1xyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ3ByZXZpZXdfc291cmNlJywgcHJldmlld19zb3VyY2UgKTtcclxuXHJcblx0XHRcdHZhciBhZHYgPSBudWxsO1xyXG5cclxuXHRcdFx0Ly8gMSkgVHJ5IEFkdmFuY2VkIE1vZGUgdGV4dCAoaWYgc2VsZWN0ZWQgLyBhdXRvK2RpcnR5KVxyXG5cdFx0XHRpZiAoIHByZXZpZXdfc291cmNlID09PSAnYWR2YW5jZWQnIHx8IHByZXZpZXdfc291cmNlID09PSAnYXV0bycgKSB7XHJcblxyXG5cdFx0XHRcdGFkdiA9IHdwYmNfYmZiX3ByZXZpZXdfX3JlYWRfYWR2YW5jZWRfbW9kZV9wYXlsb2FkKCBkLCB3ICk7XHJcblxyXG5cdFx0XHRcdHZhciBjYW5fdXNlX2FkdmFuY2VkID1cclxuXHRcdFx0XHRcdFx0KHByZXZpZXdfc291cmNlID09PSAnYWR2YW5jZWQnKSB8fFxyXG5cdFx0XHRcdFx0XHQocHJldmlld19zb3VyY2UgPT09ICdhdXRvJyAmJiBhZHYgJiYgYWR2LmlzX2RpcnR5KTtcclxuXHJcblx0XHRcdFx0aWYgKCBjYW5fdXNlX2FkdmFuY2VkICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIEZvcmNlZCBcImFkdmFuY2VkXCIgYnV0IGVtcHR5IC0+IGZhbGxiYWNrIHRvIGJ1aWxkZXIgZXhwb3J0LlxyXG5cdFx0XHRcdFx0aWYgKCAhIHdwYmNfYmZiX3ByZXZpZXdfX2hhc190ZXh0KCBhZHYuYWR2YW5jZWRfZm9ybSApICYmICEgd3BiY19iZmJfcHJldmlld19faGFzX3RleHQoIGFkdi5jb250ZW50X2Zvcm0gKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHcud3BiY19hZG1pbl9zaG93X21lc3NhZ2UgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0dy53cGJjX2FkbWluX3Nob3dfbWVzc2FnZShcclxuXHRcdFx0XHRcdFx0XHRcdCdBZHZhbmNlZCBNb2RlIGlzIHNlbGVjdGVkLCBidXQgZWRpdG9ycyBhcmUgZW1wdHkuIFVzaW5nIEJ1aWxkZXIgZXhwb3J0LicsXHJcblx0XHRcdFx0XHRcdFx0XHQnd2FybmluZycsXHJcblx0XHRcdFx0XHRcdFx0XHQ2MDAwXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIHdwYmNfYmZiX3ByZXZpZXdfX2hhc190ZXh0KCBhZHYuYWR2YW5jZWRfZm9ybSApICkge1xyXG5cdFx0XHRcdFx0XHRcdHBheWxvYWQuYXBwZW5kKCAnYWR2YW5jZWRfZm9ybScsIGFkdi5hZHZhbmNlZF9mb3JtICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKCB3cGJjX2JmYl9wcmV2aWV3X19oYXNfdGV4dCggYWR2LmNvbnRlbnRfZm9ybSApICkge1xyXG5cdFx0XHRcdFx0XHRcdHBheWxvYWQuYXBwZW5kKCAnY29udGVudF9mb3JtJywgYWR2LmNvbnRlbnRfZm9ybSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gMikgSWYgbm90IHRha2VuIGZyb20gQWR2YW5jZWQgTW9kZSAtPiBleHBvcnQgZnJvbSBCdWlsZGVyIHN0cnVjdHVyZSAoY3VycmVudCBiZWhhdmlvcilcclxuXHRcdFx0dmFyIGFscmVhZHlfaGFzX2FkdiA9XHJcblx0XHRcdFx0XHRwYXlsb2FkLmhhcyAmJiAocGF5bG9hZC5oYXMoICdhZHZhbmNlZF9mb3JtJyApIHx8IHBheWxvYWQuaGFzKCAnY29udGVudF9mb3JtJyApKTsgLy8gc29tZSBicm93c2Vyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgLy8gc3VwcG9ydFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgLy8gRm9ybURhdGEuaGFzXHJcblxyXG5cdFx0XHQvLyBGYWxsYmFjayBmb3Igb2xkIGJyb3dzZXJzIChubyBGb3JtRGF0YS5oYXMpXHJcblx0XHRcdGlmICggdHlwZW9mIHBheWxvYWQuaGFzICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdGFscmVhZHlfaGFzX2FkdiA9IGZhbHNlOyAvLyBqdXN0IHRyeSBleHBvcnRlciBpZiBuZWVkZWRcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAhIGFscmVhZHlfaGFzX2FkdiApIHtcclxuXHJcblx0XHRcdFx0aWYgKCB3LldQQkNfQkZCX0V4cG9ydGVyICYmIHR5cGVvZiB3LldQQkNfQkZCX0V4cG9ydGVyLmV4cG9ydF9hbGwgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHdpZHRoX2NvbWJpbmVkID0gZm9ybV9zZXR0aW5ncy5vcHRpb25zLmJvb2tpbmdfZm9ybV9sYXlvdXRfd2lkdGggfHwgJyc7XHJcblx0XHRcdFx0XHRcdHZhciBwYXJzZWRfd2lkdGggICA9IHRoaXMucGFyc2VfbGVuZ3RoX3ZhbHVlKCB3aWR0aF9jb21iaW5lZCApO1xyXG5cdFx0XHRcdFx0XHR2YXIgd2lkdGhfdW5pdCAgICAgPSBwYXJzZWRfd2lkdGgudW5pdCA/IHBhcnNlZF93aWR0aC51bml0IDogJyUnO1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGV4cG9ydF9vcHRpb25zID0ge1xyXG5cdFx0XHRcdFx0XHRcdGdhcFBlcmNlbnQgICAgICA6IDMsXHJcblx0XHRcdFx0XHRcdFx0Zm9ybV9zbHVnICAgICAgIDogKGNmZy5mb3JtX25hbWUgfHwgJ3N0YW5kYXJkJyksXHJcblx0XHRcdFx0XHRcdFx0Zm9ybV93aWR0aF92YWx1ZTogcGFyc2VkX3dpZHRoLm51bSxcclxuXHRcdFx0XHRcdFx0XHRmb3JtX3dpZHRoX3VuaXQgOiB3aWR0aF91bml0XHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZXhwb3J0X3Jlc3VsdCA9IHcuV1BCQ19CRkJfRXhwb3J0ZXIuZXhwb3J0X2FsbCggc3RydWN0dXJlIHx8IFtdLCBleHBvcnRfb3B0aW9ucyApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBleHBvcnRfcmVzdWx0ICkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggZXhwb3J0X3Jlc3VsdC5hZHZhbmNlZF9mb3JtICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cGF5bG9hZC5hcHBlbmQoICdhZHZhbmNlZF9mb3JtJywgZXhwb3J0X3Jlc3VsdC5hZHZhbmNlZF9mb3JtICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmICggZXhwb3J0X3Jlc3VsdC5maWVsZHNfZGF0YSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHBheWxvYWQuYXBwZW5kKCAnY29udGVudF9mb3JtJywgZXhwb3J0X3Jlc3VsdC5maWVsZHNfZGF0YSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnV1BCQyBCRkI6IGV4cG9ydF9hbGwgZXJyb3InLCBlICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0Ly8gVXNlIHNoYXJlZCBoZWxwZXIgaWYgYXZhaWxhYmxlOyBmYWxsYmFjayB0byBhamF4dXJsLlxyXG5cdFx0XHR2YXIgYWpheF91cmwgPSAnJztcclxuXHRcdFx0aWYgKCB0eXBlb2Ygdy53cGJjX2JmYl9fZ2V0X2FqYXhfdXJsID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdGFqYXhfdXJsID0gdy53cGJjX2JmYl9fZ2V0X2FqYXhfdXJsKCk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB3LmFqYXh1cmwgIT09ICd1bmRlZmluZWQnICYmIHcuYWpheHVybCApIHtcclxuXHRcdFx0XHRhamF4X3VybCA9IHcuYWpheHVybDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZW5kX2J1c3lfbm93KCkge1xyXG5cdFx0XHRcdHNlbGYuX2VuZF9idXN5KCAkc291cmNlX2J0biApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICEgYWpheF91cmwgKSB7XHJcblx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQnLCAnYWpheCBVUkwgaXMgbm90IGRlZmluZWQnICk7XHJcblx0XHRcdFx0ZW5kX2J1c3lfbm93KCk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR3LmZldGNoKCBhamF4X3VybCwge1xyXG5cdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdGJvZHk6ICAgcGF5bG9hZFxyXG5cdFx0XHR9IClcclxuXHRcdFx0LnRoZW4oIGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG5cdFx0XHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XHJcblx0XHRcdH0gKVxyXG5cdFx0XHQudGhlbiggZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRpZiAoICEgZGF0YSB8fCAhIGRhdGEuc3VjY2VzcyB8fCAhIGRhdGEuZGF0YSB8fCAhIGRhdGEuZGF0YS5wcmV2aWV3X3VybCApIHtcclxuXHRcdFx0XHRcdGRldi5lcnJvciggJ3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50JywgJ1ByZXZpZXcgQUpBWCBlcnJvcicsIGRhdGEgKTtcclxuXHRcdFx0XHRcdGVuZF9idXN5X25vdygpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCAhIHNlbGYuaWZyYW1lICkge1xyXG5cdFx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQnLCAnTWlzc2luZyBpZnJhbWUgZWxlbWVudCcgKTtcclxuXHRcdFx0XHRcdGVuZF9idXN5X25vdygpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gV2FpdCB1bnRpbCBpZnJhbWUgaGFzIHJlYWxseSBsb2FkZWQgdGhlIHByZXZpZXcgVVJMLlxyXG5cdFx0XHRcdHZhciBvbl9sb2FkID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0c2VsZi5pZnJhbWUucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCBvbl9sb2FkICk7XHJcblx0XHRcdFx0XHRlbmRfYnVzeV9ub3coKTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRzZWxmLmlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIG9uX2xvYWQgKTtcclxuXHRcdFx0XHRzZWxmLmlmcmFtZS5zZXRBdHRyaWJ1dGUoICdzcmMnLCBkYXRhLmRhdGEucHJldmlld191cmwgKTtcclxuXHRcdFx0fSApXHJcblx0XHRcdC5jYXRjaCggZnVuY3Rpb24gKGVycikge1xyXG5cdFx0XHRcdGRldi5lcnJvciggJ3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50JywgJ1ByZXZpZXcgQUpBWCBmYWlsZWQnLCBlcnIgKTtcclxuXHRcdFx0XHRlbmRfYnVzeV9ub3coKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSW50ZXJuYWwgaGVscGVyOiBzdG9wIGJ1c3kgc3RhdGUgb24gcGFuZWwgYnV0dG9uICsgb3B0aW9uYWwgdG9wIHRvb2xiYXIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7alF1ZXJ5fG51bGx9ICRzb3VyY2VfYnRuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfZW5kX2J1c3koJHNvdXJjZV9idG4pIHtcclxuXHRcdFx0dGhpcy5pc19idXN5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuc2V0X2J1dHRvbl9idXN5KCBmYWxzZSApO1xyXG5cdFx0XHR0aGlzLnNldF9sb2FkZXJfdmlzaWJsZSggZmFsc2UgKTsgLy8gTkVXXHJcblxyXG5cdFx0XHRpZiAoICRzb3VyY2VfYnRuICYmIHR5cGVvZiB3LndwYmNfYmZiX19idXR0b25fYnVzeV9lbmQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0dy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfZW5kKCAkc291cmNlX2J0biApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBGb3JjZS1yZXNldCBhbnkgYnVzeSBzdGF0ZXMgcmVsYXRlZCB0byBwcmV2aWV3LlxyXG5cdFx0ICogVGhpcyBpcyBjYWxsZWQgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byBCdWlsZGVyIG1vZGUgKHNvZnQtY2FuY2VsIFVYKS5cclxuXHRcdCAqL1xyXG5cdFx0cmVzZXRfYnVzeV9zdGF0ZSgpIHtcclxuXHRcdFx0dGhpcy5pc19idXN5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuc2V0X2J1dHRvbl9idXN5KCBmYWxzZSApOyAvLyBwYW5lbCBidXR0b24sIGlmIGFueVxyXG5cdFx0XHR0aGlzLnNldF9sb2FkZXJfdmlzaWJsZSggZmFsc2UgKTsgLy8gTkVXXHJcblxyXG5cdFx0XHRpZiAoIHcualF1ZXJ5ICYmIHR5cGVvZiB3LndwYmNfYmZiX19idXR0b25fYnVzeV9lbmQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0Ly8gVG9wIHRvb2xiYXIgYnV0dG9ucyB0aGF0IG1heSBzaG93IFwiTG9hZGluZyBwcmV2aWV3Li4uXCJcclxuXHRcdFx0XHR2YXIgJGJ0bnMgPSB3LmpRdWVyeShcclxuXHRcdFx0XHRcdCdbZGF0YS13cGJjLWJmYi10b3AtcHJldmlldy1idG49XCIxXCJdLCcgK1xyXG5cdFx0XHRcdFx0J1tkYXRhLXdwYmMtYmZiLXRvcC1yZWZyZXNoLWJ0bj1cIjFcIl0nXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0JGJ0bnMuZWFjaCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0dmFyICRiID0gdy5qUXVlcnkoIHRoaXMgKTtcclxuXHRcdFx0XHRcdGlmICggJGIuaGFzQ2xhc3MoICd3cGJjLWlzLWJ1c3knICkgKSB7XHJcblx0XHRcdFx0XHRcdHcud3BiY19iZmJfX2J1dHRvbl9idXN5X2VuZCggJGIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNpbXBsZSBidXN5IGluZGljYXRvciBmb3IgdGhlIHBhbmVsIFwiVXBkYXRlIFByZXZpZXdcIiBidXR0b24uXHJcblx0XHQgKiBSZXVzZXMgZ2xvYmFsIFdQQkMgYnVzeSBoZWxwZXJzIGlmIGF2YWlsYWJsZSwgc28gdGhlIHNwaW5uZXIgbWF0Y2hlcyBTYXZlL0xvYWQgYnV0dG9ucy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzX2J1c3lcclxuXHRcdCAqL1xyXG5cdFx0c2V0X2J1dHRvbl9idXN5KCBpc19idXN5ICkge1xyXG5cdFx0XHRpZiAoICEgdGhpcy5idXR0b24gKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiBqUXVlcnkgKyBnbG9iYWwgaGVscGVycyBleGlzdCwgdXNlIHNhbWUgc3Bpbm5lciBhcyBvdGhlciB0b29sYmFyIGJ1dHRvbnMuXHJcblx0XHRcdGlmICggdy5qUXVlcnkgJiYgdHlwZW9mIHcud3BiY19iZmJfX2J1dHRvbl9idXN5X3N0YXJ0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB3LndwYmNfYmZiX19idXR0b25fYnVzeV9lbmQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0dmFyICRidG4gPSB3LmpRdWVyeSggdGhpcy5idXR0b24gKTtcclxuXHJcblx0XHRcdFx0aWYgKCBpc19idXN5ICkge1xyXG5cdFx0XHRcdFx0dy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfc3RhcnQoICRidG4gKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfZW5kKCAkYnRuICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZhbGxiYWNrOiBzaW1wbGUgZGlzYWJsZWQgc3RhdGUgd2l0aG91dCBzcGlubmVyLlxyXG5cdFx0XHRpZiAoIGlzX2J1c3kgKSB7XHJcblx0XHRcdFx0dGhpcy5idXR0b24uc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0dGhpcy5idXR0b24uY2xhc3NMaXN0LmFkZCggJ3dwYmNfYmZiX19wcmV2aWV3X2J0bl9idXN5JyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSggJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdHRoaXMuYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoICd3cGJjX2JmYl9fcHJldmlld19idG5fYnVzeScgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2V0IGN1cnJlbnQgdmlldyBtb2RlOiBcImJ1aWxkZXJcIiBvciBcInByZXZpZXdcIi5cclxuXHRcdCAqIEFwcGxpZXMvcmVtb3ZlcyBDU1MgY2xhc3Mgb24gPGJvZHk+LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7KCdidWlsZGVyJ3wncHJldmlldycpfSBtb2RlXHJcblx0XHQgKi9cclxuXHRcdHNldF9tb2RlKCBtb2RlICkge1xyXG5cdFx0XHR2YXIgYm9keSA9IGQuYm9keTtcclxuXHRcdFx0aWYgKCAhIGJvZHkgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIG1vZGUgPT09ICdwcmV2aWV3JyApIHtcclxuXHRcdFx0XHRib2R5LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fbW9kZV9wcmV2aWV3JyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJvZHkuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19tb2RlX3ByZXZpZXcnICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyAtLSBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8qKlxyXG5cdCAqIElzIFByZXZpZXcgbW9kZSBjdXJyZW50bHkgYWN0aXZlP1xyXG5cdCAqIFdlIHByZWZlciBib2R5IGNsYXNzIChzZXQgYnkgY2xpZW50LnNldF9tb2RlKSwgZmFsbGJhY2sgdG8gYWN0aXZlIHRhYiBpZC5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19faXNfcHJldmlld19tb2RlX2FjdGl2ZSgpIHtcclxuXHRcdHZhciBib2R5ID0gZC5ib2R5O1xyXG5cdFx0aWYgKCBib2R5ICYmIGJvZHkuY2xhc3NMaXN0ICYmIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX21vZGVfcHJldmlldycgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKHdwYmNfYmZiX3ByZXZpZXdfX2dldF9hY3RpdmVfdG9wX3RhYl9pZCgpID09PSAncHJldmlld190YWInKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdoZW4gYSBmb3JtIGlzIGxvYWRlZCB2aWEgQUpBWCB3aGlsZSBQcmV2aWV3IHRhYiBpcyBhY3RpdmUsXHJcblx0ICogcmVmcmVzaCB0aGUgaWZyYW1lIHNvIGl0IHNob3dzIHRoZSBuZXdseSBsb2FkZWQgZm9ybS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7d3BiY19iZmJfcHJldmlld19jbGllbnR9IGNsaWVudFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX3ByZXZpZXdfX2JpbmRfZm9ybV9hamF4X2xvYWRlZF9ldmVudHMoY2xpZW50KSB7XHJcblxyXG5cdFx0aWYgKCAhIGNsaWVudCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFByZXZlbnQgZG91YmxlIGJpbmRpbmcgaWYgdGhpcyBzY3JpcHQgaXMgaW5qZWN0ZWQgdHdpY2UuXHJcblx0XHRpZiAoIHcuX193cGJjX2JmYl9wcmV2aWV3X19mb3JtX2FqYXhfbG9hZGVkX2JvdW5kID09PSAnMScgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHcuX193cGJjX2JmYl9wcmV2aWV3X19mb3JtX2FqYXhfbG9hZGVkX2JvdW5kID0gJzEnO1xyXG5cclxuXHRcdHZhciBkZWJvdW5jZV9pZCA9IG51bGw7XHJcblxyXG5cdFx0ZC5hZGRFdmVudExpc3RlbmVyKFxyXG5cdFx0XHQnd3BiYzpiZmI6Zm9ybTphamF4X2xvYWRlZCcsXHJcblx0XHRcdGZ1bmN0aW9uIChldikge1xyXG5cclxuXHRcdFx0XHQvLyBPbmx5IGRvIGFueXRoaW5nIGlmIFByZXZpZXcgaXMgY3VycmVudGx5IGFjdGl2ZS5cclxuXHRcdFx0XHRpZiAoICEgd3BiY19iZmJfcHJldmlld19faXNfcHJldmlld19tb2RlX2FjdGl2ZSgpICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIGRldCA9IChldiAmJiBldi5kZXRhaWwpID8gZXYuZGV0YWlsIDoge307XHJcblx0XHRcdFx0dmFyIGZuICA9IGRldC5mb3JtX25hbWUgPyBTdHJpbmcoIGRldC5mb3JtX25hbWUgKSA6ICcnO1xyXG5cclxuXHRcdFx0XHQvLyBCZXN0LWVmZm9ydDoga2VlcCBjZmcuZm9ybV9uYW1lIGluIHN5bmMgZm9yIHBheWxvYWQgYnVpbGRpbmcuXHJcblx0XHRcdFx0aWYgKCBmbiApIHtcclxuXHRcdFx0XHRcdHcuV1BCQ19CRkJfQWpheCAgICAgICAgICAgPSB3LldQQkNfQkZCX0FqYXggfHwge307XHJcblx0XHRcdFx0XHR3LldQQkNfQkZCX0FqYXguZm9ybV9uYW1lID0gZm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBEZWJvdW5jZSBtdWx0aXBsZSByYXBpZCBsb2FkcyAob3Igc2Vjb25kYXJ5IGV2ZW50cykuXHJcblx0XHRcdFx0aWYgKCBkZWJvdW5jZV9pZCApIHtcclxuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggZGVib3VuY2VfaWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGRlYm91bmNlX2lkID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0ZGVib3VuY2VfaWQgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRcdC8vIFByZXZpZXcgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgd2hpbGUgd2FpdGluZy5cclxuXHRcdFx0XHRcdGlmICggISB3cGJjX2JmYl9wcmV2aWV3X19pc19wcmV2aWV3X21vZGVfYWN0aXZlKCkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgYWxyZWFkeSBzZW5kaW5nIHByZXZpZXcsIGRvbid0IHN0YWNrIGFub3RoZXIgcmVxdWVzdC5cclxuXHRcdFx0XHRcdGlmICggY2xpZW50LmlzX2J1c3kgKSB7XHJcblx0XHRcdFx0XHRcdC8vIFRyeSBvbmNlIG1vcmUgc2hvcnRseSAoc2FmZSkuXHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIHdwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfbW9kZV9hY3RpdmUoKSAmJiAhIGNsaWVudC5pc19idXN5ICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2xpZW50LnVwZGF0ZV9wcmV2aWV3KCB7IHNvdXJjZV9idXR0b246IG51bGwgfSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSwgMjUwICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBXYWl0IHVudGlsIGJ1aWxkZXIgQVBJIGlzIHByZXNlbnQgKGZvcm0gbG9hZCBjYW4gYmUgYXN5bmMpLlxyXG5cdFx0XHRcdFx0dmFyIHRyaWVzID0gMDtcclxuXHRcdFx0XHRcdChmdW5jdGlvbiB3YWl0X2Zvcl9idWlsZGVyKCkge1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCAhIHdwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfbW9kZV9hY3RpdmUoKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICggdy53cGJjX2JmYiAmJiB0eXBlb2Ygdy53cGJjX2JmYi5nZXRfc3RydWN0dXJlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRcdGNsaWVudC51cGRhdGVfcHJldmlldyggeyBzb3VyY2VfYnV0dG9uOiBudWxsIH0gKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHRyaWVzKys7XHJcblx0XHRcdFx0XHRcdGlmICggdHJpZXMgPCAxNSApIHtcclxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCB3YWl0X2Zvcl9idWlsZGVyLCAyMDAgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHR9LCAxODAgKTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdHsgcGFzc2l2ZTogdHJ1ZSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19fZ2V0X3NvdXJjZShjZmcsIGJ0bikge1xyXG5cclxuXHRcdC8vIHByaW9yaXR5OiBidXR0b24gYXR0ciAtPiBnbG9iYWwgY2ZnIC0+IGRlZmF1bHRcclxuXHRcdHZhciB2ID0gJyc7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAoIGJ0biAmJiBidG4uZ2V0QXR0cmlidXRlICkge1xyXG5cdFx0XHRcdHYgPSBidG4uZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1wcmV2aWV3LXNvdXJjZScgKSB8fCBidG4uZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1zYXZlLXNvdXJjZScgKSB8fCAnJztcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoIGUgKSB7fVxyXG5cclxuXHRcdGlmICggISB2ICYmIGNmZyAmJiAoY2ZnLnByZXZpZXdfc291cmNlIHx8IGNmZy5zYXZlX3NvdXJjZSkgKSB7XHJcblx0XHRcdHYgPSBjZmcucHJldmlld19zb3VyY2UgfHwgY2ZnLnNhdmVfc291cmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHYgPSBTdHJpbmcoIHYgfHwgJ2F1dG8nICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdGlmICggWyAnYnVpbGRlcicsICdhZHZhbmNlZCcsICdhdXRvJyBdLmluZGV4T2YoIHYgKSA9PT0gLTEgKSB7XHJcblx0XHRcdHYgPSAnYnVpbGRlcic7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX3ByZXZpZXdfX2hhc190ZXh0KHYpIHtcclxuXHRcdHJldHVybiAhISAodiAmJiBTdHJpbmcoIHYgKS50cmltKCkpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19fcmVhZF9hZHZhbmNlZF9tb2RlX3BheWxvYWQoZCwgdykge1xyXG5cclxuXHRcdC8vIGJlc3Q6IEFQSSAoc3luY3MgQ29kZU1pcnJvciAtPiB0ZXh0YXJlYSlcclxuXHRcdGlmICggdy53cGJjX2JmYl9hZHZhbmNlZF9lZGl0b3JfYXBpICYmIHR5cGVvZiB3LndwYmNfYmZiX2FkdmFuY2VkX2VkaXRvcl9hcGkuZ2V0X3ZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRyZXR1cm4gdy53cGJjX2JmYl9hZHZhbmNlZF9lZGl0b3JfYXBpLmdldF92YWx1ZXMoKTtcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGZhbGxiYWNrOiByZWFkIHRleHRhcmVhcyBkaXJlY3RseVxyXG5cdFx0dmFyIHRhX2Zvcm0gICAgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2FkdmFuY2VkX2Zvcm1fZWRpdG9yJyApO1xyXG5cdFx0dmFyIHRhX2NvbnRlbnQgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2NvbnRlbnRfZm9ybV9lZGl0b3InICk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YWR2YW5jZWRfZm9ybTogdGFfZm9ybSA/IFN0cmluZyggdGFfZm9ybS52YWx1ZSB8fCAnJyApIDogJycsXHJcblx0XHRcdGNvbnRlbnRfZm9ybSA6IHRhX2NvbnRlbnQgPyBTdHJpbmcoIHRhX2NvbnRlbnQudmFsdWUgfHwgJycgKSA6ICcnLFxyXG5cdFx0XHRpc19kaXJ0eSAgICAgOiBmYWxzZVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIHRoaXMgZWxlbWVudCB0aGUgUHJldmlldyBUQUIgbGluayBpbiB0b3AgdGFicyBuYXY/XHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fG51bGx9IGVsXHJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19pc19wcmV2aWV3X3RhYl9saW5rKGVsKSB7XHJcblx0XHRpZiAoICFlbCB8fCAhZWwuZ2V0QXR0cmlidXRlICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWFjdGlvbicgKSA9PT0gJ3BhbmVsJyAmJlxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLXRhYicgKSA9PT0gJ3ByZXZpZXdfdGFiJ1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIHRoaXMgZWxlbWVudCB0aGUgQnVpbGRlciBUQUIgbGluayBpbiB0b3AgdGFicyBuYXY/XHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fG51bGx9IGVsXHJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19pc19idWlsZGVyX3RhYl9saW5rKGVsKSB7XHJcblx0XHRpZiAoICFlbCB8fCAhZWwuZ2V0QXR0cmlidXRlICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWFjdGlvbicgKSA9PT0gJ3BhbmVsJyAmJlxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLXRhYicgKSA9PT0gJ2J1aWxkZXJfdGFiJ1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFjdGl2YXRlIGEgXCJwYW5lbFwiIHRhYiBhbmQgc2hvdyBpdHMgcGFuZWwgc2VjdGlvbiAoc2NvcGVkKS5cclxuXHQgKlxyXG5cdCAqIFN0cmF0ZWd5OlxyXG5cdCAqIDEpIFRyeSB0byBjbGljayB0aGUgcmVhbCB0b3AtdGFiIGxpbmsgKGJlc3QpLlxyXG5cdCAqIDIpIElmIGxpbmsgZG9lcyBub3QgZXhpc3QgKGUuZy4gUHJldmlldyB0YWIgcmVtb3ZlZCBmcm9tIG5hdiksIGRvIGEgc2NvcGVkIG1hbnVhbCBzd2l0Y2g6XHJcblx0ICogICAgLSB1c2UgbmF2J3MgZGF0YS13cGJjLWJmYi1wYW5lbHMtcm9vdCArIGRhdGEtd3BiYy1iZmItcGFuZWwtY2xhc3NcclxuXHQgKiAgICAtIGhpZGUvc2hvdyBPTkxZIHRob3NlIG91dGVyIHBhbmVsc1xyXG5cdCAqICAgIC0gRE8gTk9UIHRvdWNoIGlubmVyIHBhbmVsc1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhYl9pZFxyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfX2FjdGl2YXRlX3BhbmVsX3RhYih0YWJfaWQpIHtcclxuXHJcblx0XHR0YWJfaWQgPSBTdHJpbmcoIHRhYl9pZCB8fCAnJyApLnRyaW0oKTtcclxuXHRcdGlmICggISB0YWJfaWQgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAxKSBCZXN0OiB0cmlnZ2VyIGV4aXN0aW5nIHRvcC10YWJzIHN3aXRjaGluZyBieSBjbGlja2luZyB0aGUgdGFiIGxpbmsgKGlmIGl0IGV4aXN0cykuXHJcblx0XHR2YXIgdGFiX2xpbmsgPSBkLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1hY3Rpb249XCJwYW5lbFwiXVtkYXRhLXdwYmMtYmZiLXRhYj1cIicgKyB0YWJfaWQgKyAnXCJdJyApO1xyXG5cdFx0aWYgKCB0YWJfbGluayAmJiB0eXBlb2YgdGFiX2xpbmsuY2xpY2sgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dGFiX2xpbmsuY2xpY2soKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge31cclxuXHRcdH1cclxuXHJcblx0XHQvLyAyKSBGYWxsYmFjazogc2NvcGVkIG1hbnVhbCB0b2dnbGUgKG91dGVyIHBhbmVscyBvbmx5KS5cclxuXHRcdHZhciBuYXYgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX3RvcF9ob3Jpc29udGFsX25hdicgKTtcclxuXHJcblx0XHQvLyBEZXRlcm1pbmUgb3V0ZXIgcGFuZWxzIHJvb3QuXHJcblx0XHR2YXIgcGFuZWxzX3Jvb3QgICAgICAgICAgPSBkO1xyXG5cdFx0dmFyIHBhbmVsc19yb290X3NlbGVjdG9yID0gJyc7XHJcblxyXG5cdFx0aWYgKCBuYXYgKSB7XHJcblx0XHRcdHBhbmVsc19yb290X3NlbGVjdG9yID0gbmF2LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItcGFuZWxzLXJvb3QnICkgfHwgJyc7XHJcblx0XHRcdHBhbmVsc19yb290X3NlbGVjdG9yID0gU3RyaW5nKCBwYW5lbHNfcm9vdF9zZWxlY3RvciB8fCAnJyApLnRyaW0oKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGYWxsYmFjayBpZiBhdHRyaWJ1dGUgbWlzc2luZzogcHJlZmVyICN3cGJjX2JmYl9fdG9wX3BhbmVscyBpZiBwcmVzZW50LlxyXG5cdFx0aWYgKCAhIHBhbmVsc19yb290X3NlbGVjdG9yICkge1xyXG5cdFx0XHRwYW5lbHNfcm9vdF9zZWxlY3RvciA9ICcjd3BiY19iZmJfX3RvcF9wYW5lbHMnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggcGFuZWxzX3Jvb3Rfc2VsZWN0b3IgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIHJvb3RfZWwgPSBkLnF1ZXJ5U2VsZWN0b3IoIHBhbmVsc19yb290X3NlbGVjdG9yICk7XHJcblx0XHRcdFx0aWYgKCByb290X2VsICkge1xyXG5cdFx0XHRcdFx0cGFuZWxzX3Jvb3QgPSByb290X2VsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF9lMiApIHt9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRGV0ZXJtaW5lIG91dGVyIGJhc2UgY2xhc3MgKElNUE9SVEFOVDogbXVzdCBiZSB0aGUgT1VURVIgYmFzZSwgbm90IHdwYmNfYmZiX190YWJfc2VjdGlvbikuXHJcblx0XHR2YXIgcGFuZWxfYmFzZV9jbGFzcyA9ICd3cGJjX2JmYl9fdG9wX3RhYl9zZWN0aW9uJztcclxuXHRcdGlmICggbmF2ICkge1xyXG5cdFx0XHR2YXIgZnJvbV9uYXYgPSBuYXYuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1wYW5lbC1jbGFzcycgKSB8fCAnJztcclxuXHRcdFx0ZnJvbV9uYXYgICAgID0gU3RyaW5nKCBmcm9tX25hdiB8fCAnJyApLnRyaW0oKTtcclxuXHRcdFx0aWYgKCBmcm9tX25hdiApIHtcclxuXHRcdFx0XHRwYW5lbF9iYXNlX2NsYXNzID0gZnJvbV9uYXY7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBVcGRhdGUgYWN0aXZlIHRhYiBvbiBuYXYgKHNvdXJjZSBvZiB0cnV0aCkuXHJcblx0XHRpZiAoIG5hdiApIHtcclxuXHRcdFx0bmF2LnNldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aXZlLXRhYicsIHRhYl9pZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhpZGUgT05MWSBvdXRlciBwYW5lbHMgKHNjb3BlZCBieSBiYXNlIGNsYXNzKS5cclxuXHRcdHZhciBzZWxlY3Rvcl9hbGwgPSAnLicgKyBwYW5lbF9iYXNlX2NsYXNzO1xyXG5cdFx0dmFyIHBhbmVsX25vZGVzICA9IHBhbmVsc19yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIHNlbGVjdG9yX2FsbCApO1xyXG5cclxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IHBhbmVsX25vZGVzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRwYW5lbF9ub2Rlc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNob3cgcmVxdWVzdGVkIG91dGVyIHBhbmVsLlxyXG5cdFx0dmFyIHNlbGVjdG9yX2FjdGl2ZSA9ICcuJyArIHBhbmVsX2Jhc2VfY2xhc3MgKyAnX18nICsgdGFiX2lkO1xyXG5cdFx0dmFyIGFjdGl2ZV9wYW5lbCAgICA9IHBhbmVsc19yb290LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yX2FjdGl2ZSApO1xyXG5cclxuXHRcdGlmICggISBhY3RpdmVfcGFuZWwgKSB7XHJcblx0XHRcdC8vIEJhY2t3YXJkLWNvbXBhdGlibGUgZmFsbGJhY2sgKGlmIHNvbWVvbmUgZm9yZ290IHRvIGFkZCBvdXRlciBjbGFzc2VzKS5cclxuXHRcdFx0YWN0aXZlX3BhbmVsID0gcGFuZWxzX3Jvb3QucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fdGFiX3NlY3Rpb25fXycgKyB0YWJfaWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGFjdGl2ZV9wYW5lbCApIHtcclxuXHRcdFx0YWN0aXZlX3BhbmVsLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNYXJrIGFjdGl2ZSBpdGVtIGluIG91dGVyIG5hdiBpZiBpdCBleGlzdHMgKFByZXZpZXcgY2FuIGJlIG1pc3NpbmcpLlxyXG5cdFx0aWYgKCBuYXYgKSB7XHJcblx0XHRcdHZhciBpdGVtcyA9IG5hdi5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfdWlfZWxfX2hvcmlzX25hdl9pdGVtJyApO1xyXG5cdFx0XHRmb3IgKCB2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7IGorKyApIHtcclxuXHRcdFx0XHRpdGVtc1tqXS5jbGFzc0xpc3QucmVtb3ZlKCAnYWN0aXZlJyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgYWN0aXZlX2l0ZW0gPSBuYXYucXVlcnlTZWxlY3RvciggJy53cGJjX3VpX2VsX19ob3Jpc19uYXZfaXRlbV9fJyArIHRhYl9pZCApO1xyXG5cdFx0XHRpZiAoIGFjdGl2ZV9pdGVtICkge1xyXG5cdFx0XHRcdGFjdGl2ZV9pdGVtLmNsYXNzTGlzdC5hZGQoICdhY3RpdmUnICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBFbWl0IHNhbWUgZXZlbnQgYXMgYmZiLXRvcC10YWJzLmpzIHNvIG90aGVyIG1vZHVsZXMgc3RheSBpbiBzeW5jLlxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZC5kaXNwYXRjaEV2ZW50KFxyXG5cdFx0XHRcdG5ldyBDdXN0b21FdmVudCggJ3dwYmM6YmZiOnRvcC10YWInLCB7XHJcblx0XHRcdFx0XHRkZXRhaWw6IHtcclxuXHRcdFx0XHRcdFx0dGFiICAgOiB0YWJfaWQsXHJcblx0XHRcdFx0XHRcdG5hdl9pZDogKG5hdiAmJiBuYXYuaWQpID8gU3RyaW5nKCBuYXYuaWQgKSA6ICcnXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApXHJcblx0XHRcdCk7XHJcblx0XHR9IGNhdGNoICggX2UzICkge31cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgY3VycmVudGx5IGFjdGl2ZSB0b3AgdGFiIGlkIGZyb20gdGhlIG5hdiBjb250YWluZXIuXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19fZ2V0X2FjdGl2ZV90b3BfdGFiX2lkKCkge1xyXG5cdFx0dmFyIG5hdiA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fdG9wX2hvcmlzb250YWxfbmF2JyApO1xyXG5cdFx0aWYgKCAhbmF2ICkge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmF2LmdldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aXZlLXRhYicgKSB8fCAnJztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN5bmMgcHJldmlldyBcIm1vZGVcIiB3aXRoIGN1cnJlbnRseSBhY3RpdmUgdG9wIHRhYi5cclxuXHQgKlxyXG5cdCAqIFJ1bGVzOlxyXG5cdCAqIC0gcHJldmlld190YWIgPT4gZW5hYmxlIHByZXZpZXcgbW9kZSAoYnV0dG9ucyBtYWtlIHNlbnNlKVxyXG5cdCAqIC0gYW55IG90aGVyIHRhYiA9PiBkaXNhYmxlIHByZXZpZXcgbW9kZSArIHJlc2V0IGJ1c3kgc3RhdGVzXHJcblx0ICpcclxuXHQgKiBJTVBPUlRBTlQ6XHJcblx0ICogLSBXZSBkbyBOT1QgY2hhbmdlIHRoZSBhY3RpdmUgdG9wIHRhYiBoZXJlIChubyBwYW5lbCBzd2l0Y2hpbmcpLlxyXG5cdCAqICAgV2Ugb25seSBzeW5jIHByZXZpZXcgVUkgbW9kZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWJfaWRcclxuXHQgKiBAcGFyYW0ge3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50fSBjbGllbnRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19zeW5jX21vZGVfdG9fdGFiKHRhYl9pZCwgY2xpZW50KSB7XHJcblxyXG5cdFx0dGFiX2lkID0gU3RyaW5nKCB0YWJfaWQgfHwgJycgKTtcclxuXHJcblx0XHRpZiAoICFjbGllbnQgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICdwcmV2aWV3X3RhYicgPT09IHRhYl9pZCApIHtcclxuXHRcdFx0Y2xpZW50LnNldF9tb2RlKCAncHJldmlldycgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIExlYXZpbmcgcHJldmlldyAtPiBzb2Z0LWNhbmNlbCBidXN5IHN0YXRlIGFuZCBoaWRlIHByZXZpZXctc3BlY2lmaWMgdG9vbGJhci5cclxuXHRcdGlmICggdHlwZW9mIGNsaWVudC5yZXNldF9idXN5X3N0YXRlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRjbGllbnQucmVzZXRfYnVzeV9zdGF0ZSgpO1xyXG5cdFx0fVxyXG5cdFx0Y2xpZW50LnNldF9tb2RlKCAnYnVpbGRlcicgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJpbmQgdG8gdG9wLXRhYiBzd2l0Y2ggZXZlbnQgZW1pdHRlZCBieSBiZmItdG9wLXRhYnMuanMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50fSBjbGllbnRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19iaW5kX3RvcF90YWJfZXZlbnRzKGNsaWVudCkge1xyXG5cclxuXHRcdC8vIFN5bmMgaW1tZWRpYXRlbHkgKGluIGNhc2UgZXZlbnQgYWxyZWFkeSBmaXJlZCBiZWZvcmUgdGhpcyBzY3JpcHQgaW5pdCkuXHJcblx0XHR3cGJjX2JmYl9wcmV2aWV3X19zeW5jX21vZGVfdG9fdGFiKCB3cGJjX2JmYl9wcmV2aWV3X19nZXRfYWN0aXZlX3RvcF90YWJfaWQoKSwgY2xpZW50ICk7XHJcblxyXG5cdFx0Ly8gUmVhY3QgdG8gZnV0dXJlIHRhYiBjaGFuZ2VzLlxyXG5cdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnd3BiYzpiZmI6dG9wLXRhYicsIGZ1bmN0aW9uIChldikge1xyXG5cdFx0XHR2YXIgZGV0ICAgICA9IChldiAmJiBldi5kZXRhaWwpID8gZXYuZGV0YWlsIDoge307XHJcblx0XHRcdHZhciB0YWJfaWQgID0gZGV0LnRhYiA/IFN0cmluZyggZGV0LnRhYiApIDogJyc7XHJcblx0XHRcdHZhciBuYXZfaWQgID0gZGV0Lm5hdl9pZCA/IFN0cmluZyggZGV0Lm5hdl9pZCApIDogJyc7XHJcblx0XHRcdHZhciBwcmV2X2lkID0gZGV0LnByZXZfdGFiID8gU3RyaW5nKCBkZXQucHJldl90YWIgKSA6ICcnO1xyXG5cclxuXHRcdFx0Ly8gSWYgdXNlciBzd2l0Y2hlZCB0byBwcmV2aWV3X3RhYiBpbiB0aGUgTUFJTiB0b3AgbmF2LFxyXG5cdFx0XHQvLyByZW1lbWJlciB3aGF0IHRhYiB0aGV5IGNhbWUgZnJvbS5cclxuXHRcdFx0aWYgKCBuYXZfaWQgPT09IFRPUF9OQVZfSUQgJiYgdGFiX2lkID09PSAncHJldmlld190YWInICYmIHByZXZfaWQgJiYgcHJldl9pZCAhPT0gJ3ByZXZpZXdfdGFiJyApIHtcclxuXHRcdFx0XHRyZXR1cm5fdGFiX2lkID0gcHJldl9pZDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0d3BiY19iZmJfcHJldmlld19fc3luY19tb2RlX3RvX3RhYiggdGFiX2lkLCBjbGllbnQgKTtcclxuXHRcdH0gKTtcclxuXHJcblx0fVxyXG5cclxuXHJcblx0Ly8gLS0gQmluZCB8IEluaXQgb24gTG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgVE9QX05BVl9JRCA9ICd3cGJjX2JmYl9fdG9wX2hvcmlzb250YWxfbmF2JztcclxuXHR2YXIgcmV0dXJuX3RhYl9pZCA9ICdidWlsZGVyX3RhYic7XHJcblxyXG5cdGZ1bmN0aW9uIHJlbWVtYmVyX3JldHVybl90YWJfZnJvbV9kb20oKSB7XHJcblx0XHR2YXIgY3VyID0gd3BiY19iZmJfcHJldmlld19fZ2V0X2FjdGl2ZV90b3BfdGFiX2lkKCk7XHJcblx0XHRpZiAoY3VyICYmIGN1ciAhPT0gJ3ByZXZpZXdfdGFiJykge1xyXG5cdFx0XHRyZXR1cm5fdGFiX2lkID0gY3VyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3JldHVybl90YWJfaWQoKSB7XHJcblx0XHR2YXIgdCA9IFN0cmluZyhyZXR1cm5fdGFiX2lkIHx8ICcnKS50cmltKCk7XHJcblx0XHRpZiAoIXQgfHwgdCA9PT0gJ3ByZXZpZXdfdGFiJykgdCA9ICdidWlsZGVyX3RhYic7XHJcblx0XHRyZXR1cm4gdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEF1dG8taW5pdCBwcmV2aWV3IGNsaWVudCBvbiBCdWlsZGVyIHBhZ2UgYW5kIHdpcmUgdG9wIHRvb2xiYXIgYnV0dG9ucy5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9pbml0X3ByZXZpZXdfY2xpZW50KCkge1xyXG5cdFx0dmFyIHJvb3QgPSBkLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1wcmV2aWV3LXJvb3Q9XCIxXCJdJyApO1xyXG5cclxuXHRcdGlmICggIXJvb3QgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgY2xpZW50ID0gbmV3IHdwYmNfYmZiX3ByZXZpZXdfY2xpZW50KCByb290ICk7XHJcblxyXG5cdFx0aWYgKCAhdy5XUEJDX0JGQl9QcmV2aWV3ICkge1xyXG5cdFx0XHR3LldQQkNfQkZCX1ByZXZpZXcgPSB7XHJcblx0XHRcdFx0Y2xpZW50OiBjbGllbnQsXHJcblxyXG5cdFx0XHRcdHNob3dfcHJldmlldzogZnVuY3Rpb24gKG9wdHMpIHtcclxuXHRcdFx0XHRcdHZhciBvcHQgPSBvcHRzIHx8IHt9O1xyXG5cdFx0XHRcdFx0dmFyIHNyYyA9IG9wdC5zb3VyY2VfYnV0dG9uIHx8IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hlcmUgd2Ugd2VyZSBCRUZPUkUgc3dpdGNoaW5nIHRvIHByZXZpZXcuXHJcblx0XHRcdFx0XHRyZW1lbWJlcl9yZXR1cm5fdGFiX2Zyb21fZG9tKCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhIHdwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfdGFiX2xpbmsoIHNyYyApICkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2JmYl9fYWN0aXZhdGVfcGFuZWxfdGFiKCAncHJldmlld190YWInICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gRW5hYmxlIHByZXZpZXcgbW9kZSBVSSAoc2hvd3MgcmVmcmVzaC9iYWNrIGJ1dHRvbnMgZXRjKS5cclxuXHRcdFx0XHRcdGNsaWVudC5zZXRfbW9kZSggJ3ByZXZpZXcnICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSU1QT1JUQU5UOiBBbHdheXMgcmVnZW5lcmF0ZSB3aGVuIHNob3dfcHJldmlldygpIGlzIGNhbGxlZCAoUHJldmlldyB0YWIgY2xpY2sgaW5jbHVkZWQpLlxyXG5cdFx0XHRcdFx0Y2xpZW50LnVwZGF0ZV9wcmV2aWV3KCB7IHNvdXJjZV9idXR0b246IHNyYyB9ICk7XHJcblx0XHRcdFx0fSxcclxuXHJcblxyXG5cdFx0XHRcdHNob3dfYnVpbGRlcjogZnVuY3Rpb24gKG9wdHMpIHtcclxuXHRcdFx0XHRcdHZhciBvcHQgPSBvcHRzIHx8IHt9O1xyXG5cdFx0XHRcdFx0dmFyIHNyYyA9IG9wdC5zb3VyY2VfYnV0dG9uIHx8IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBjbGllbnQgJiYgdHlwZW9mIGNsaWVudC5yZXNldF9idXN5X3N0YXRlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRjbGllbnQucmVzZXRfYnVzeV9zdGF0ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBiYWNrX3RvID0gZ2V0X3JldHVybl90YWJfaWQoKTtcclxuXHJcblx0XHRcdFx0XHQvLyBJZiBCYWNrIGJ1dHRvbiBpdHNlbGYgaXMgbm90IGEgcmVhbCB0YWIgbGluayAtPiBqdXN0IGFjdGl2YXRlIHJlbWVtYmVyZWQgdGFiLlxyXG5cdFx0XHRcdFx0Ly8gSWYgYWN0aXZhdGlvbiBmYWlscyAodGFiIHJlbW92ZWQpLCBmYWxsYmFjayB0byBidWlsZGVyX3RhYi5cclxuXHRcdFx0XHRcdGlmICggISB3cGJjX2JmYl9wcmV2aWV3X19pc19idWlsZGVyX3RhYl9saW5rKCBzcmMgKSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAhIHdwYmNfYmZiX19hY3RpdmF0ZV9wYW5lbF90YWIoIGJhY2tfdG8gKSApIHtcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2JmYl9fYWN0aXZhdGVfcGFuZWxfdGFiKCAnYnVpbGRlcl90YWInICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjbGllbnQuc2V0X21vZGUoICdidWlsZGVyJyApO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdHNob3dfYWR2YW5jZWRfdGFiOiBmdW5jdGlvbiAob3B0cykge1xyXG5cdFx0XHRcdFx0dmFyIG9wdCA9IG9wdHMgfHwge307XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBjbGllbnQgJiYgdHlwZW9mIGNsaWVudC5yZXNldF9idXN5X3N0YXRlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRjbGllbnQucmVzZXRfYnVzeV9zdGF0ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0d3BiY19iZmJfX2FjdGl2YXRlX3BhbmVsX3RhYiggJ2FkdmFuY2VkX3RhYicgKTtcclxuXHRcdFx0XHRcdGNsaWVudC5zZXRfbW9kZSggJ2J1aWxkZXInICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTGlzdGVuIGZvciB0b3AtdGFiIGNoYW5nZXMgYW5kIHN5bmMgcHJldmlldyBtb2RlIGF1dG9tYXRpY2FsbHkuXHJcblx0XHR3cGJjX2JmYl9wcmV2aWV3X19iaW5kX3RvcF90YWJfZXZlbnRzKCBjbGllbnQgKTtcclxuXHJcblx0XHQvLyBXaGVuIGEgZm9ybSBpcyBsb2FkZWQgdmlhIEFKQVgsIHJlZnJlc2ggcHJldmlldyAob25seSBpZiBwcmV2aWV3IG1vZGUgaXMgYWN0aXZlKS5cclxuXHRcdHdwYmNfYmZiX3ByZXZpZXdfX2JpbmRfZm9ybV9hamF4X2xvYWRlZF9ldmVudHMoIGNsaWVudCApO1xyXG5cclxuXHRcdHdwYmNfYmZiX2JpbmRfdG9wX3Rvb2xiYXJfYnV0dG9ucyggY2xpZW50ICk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQmluZCB0b3AgdG9vbGJhciBCdWlsZGVyIC8gUHJldmlldyAvIFJlZnJlc2ggYnV0dG9ucy5cclxuXHQgKiBTdXBwb3J0cyBtdWx0aXBsZSBlbGVtZW50cyBmb3IgZWFjaCBhY3Rpb24gKHRvb2xiYXIgYnV0dG9ucywgdG9wIHRhYnMsIGV0Yy4pXHJcblx0ICogdmlhIGRhdGEtd3BiYy1iZmItdG9wLSotYnRuPVwiMVwiLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX2JpbmRfdG9wX3Rvb2xiYXJfYnV0dG9ucyhjbGllbnQpIHtcclxuXHJcblx0XHR2YXIgYnRuX3ByZXZpZXdfbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLXdwYmMtYmZiLXRvcC1wcmV2aWV3LWJ0bj1cIjFcIl0nICk7XHJcblx0XHR2YXIgYnRuX2J1aWxkZXJfbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLXdwYmMtYmZiLXRvcC1idWlsZGVyLWJ0bj1cIjFcIl0nICk7XHJcblx0XHR2YXIgYnRuX3JlZnJlc2hfbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLXdwYmMtYmZiLXRvcC1yZWZyZXNoLWJ0bj1cIjFcIl0nICk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gZm9yX2VhY2hfbm9kZShsaXN0LCBjYikge1xyXG5cdFx0XHRpZiAoICFsaXN0IHx8ICFsaXN0Lmxlbmd0aCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggbGlzdCwgZnVuY3Rpb24gKGVsKSB7XHJcblx0XHRcdFx0aWYgKCBlbCAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRjYiggZWwgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3JfZWFjaF9ub2RlKCBidG5fcHJldmlld19saXN0LCBmdW5jdGlvbiAoYnRuX3ByZXZpZXcpIHtcclxuXHJcblx0XHRcdC8vIFByZXZlbnQgZG91YmxlIGJpbmRpbmcgaWYgdGhpcyBzY3JpcHQgcnVucyB0d2ljZS5cclxuXHRcdFx0aWYgKCBidG5fcHJldmlldy5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWJvdW5kJyApID09PSAnMScgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGJ0bl9wcmV2aWV3LnNldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItYm91bmQnLCAnMScgKTtcclxuXHJcblx0XHRcdGJ0bl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuXHRcdFx0XHRpZiAoIHcuV1BCQ19CRkJfUHJldmlldyAmJiB0eXBlb2Ygdy5XUEJDX0JGQl9QcmV2aWV3LnNob3dfcHJldmlldyA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdHcuV1BCQ19CRkJfUHJldmlldy5zaG93X3ByZXZpZXcoIHtcclxuXHRcdFx0XHRcdFx0c291cmNlX2J1dHRvbjogYnRuX3ByZXZpZXdcclxuXHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH0gKTtcclxuXHJcblx0XHRmb3JfZWFjaF9ub2RlKCBidG5fcmVmcmVzaF9saXN0LCBmdW5jdGlvbiAoYnRuX3JlZnJlc2gpIHtcclxuXHJcblx0XHRcdGlmICggYnRuX3JlZnJlc2guZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1ib3VuZCcgKSA9PT0gJzEnICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRidG5fcmVmcmVzaC5zZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWJvdW5kJywgJzEnICk7XHJcblxyXG5cdFx0XHRidG5fcmVmcmVzaC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0aWYgKCB3LldQQkNfQkZCX1ByZXZpZXcgJiYgdHlwZW9mIHcuV1BCQ19CRkJfUHJldmlldy5zaG93X3ByZXZpZXcgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHR3LldQQkNfQkZCX1ByZXZpZXcuc2hvd19wcmV2aWV3KCB7XHJcblx0XHRcdFx0XHRcdHVwZGF0ZSAgICAgICA6IHRydWUsXHJcblx0XHRcdFx0XHRcdHNvdXJjZV9idXR0b246IGJ0bl9yZWZyZXNoXHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0Zm9yX2VhY2hfbm9kZSggYnRuX2J1aWxkZXJfbGlzdCwgZnVuY3Rpb24gKGJ0bl9idWlsZGVyKSB7XHJcblxyXG5cdFx0XHRpZiAoIGJ0bl9idWlsZGVyLmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItYm91bmQnICkgPT09ICcxJyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0YnRuX2J1aWxkZXIuc2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1ib3VuZCcsICcxJyApO1xyXG5cclxuXHRcdFx0YnRuX2J1aWxkZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdGlmICggdy5XUEJDX0JGQl9QcmV2aWV3ICYmIHR5cGVvZiB3LldQQkNfQkZCX1ByZXZpZXcuc2hvd19idWlsZGVyID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0dy5XUEJDX0JGQl9QcmV2aWV3LnNob3dfYnVpbGRlciggeyBzb3VyY2VfYnV0dG9uOiBidG5fYnVpbGRlciB9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHJcblx0aWYgKCBkLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgZC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnICkge1xyXG5cdFx0c2V0VGltZW91dCggd3BiY19iZmJfaW5pdF9wcmV2aWV3X2NsaWVudCwgMCApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRkLmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgd3BiY19iZmJfaW5pdF9wcmV2aWV3X2NsaWVudCApO1xyXG5cdH1c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
1003 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvcHJldmlldy9fb3V0L2JmYi1wcmV2aWV3LmpzIiwibmFtZXMiOlsidyIsImQiLCJkZXYiLCJfd3BiYyIsImxvZyIsImVycm9yIiwid3BiY19iZmJfcHJldmlld19jbGllbnQiLCJjb25zdHJ1Y3RvciIsInJvb3RfZWwiLCJpZnJhbWUiLCJxdWVyeVNlbGVjdG9yIiwibG9hZGVyIiwiYnV0dG9uIiwibm9uY2UiLCJnZXRBdHRyaWJ1dGUiLCJpc19idXN5IiwiYmluZF9ldmVudHMiLCJzZXRfbG9hZGVyX3Zpc2libGUiLCJpc192aXNpYmxlIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwic2VsZiIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVfcHJldmlldyIsImdldF9jdXJyZW50X3N0cnVjdHVyZSIsIndwYmNfYmZiIiwiZ2V0X3N0cnVjdHVyZSIsImUiLCJwYXJzZV9sZW5ndGhfdmFsdWUiLCJ2YWx1ZSIsInJhdyIsIlN0cmluZyIsInRyaW0iLCJtIiwibWF0Y2giLCJudW0iLCJ1bml0IiwiZ2V0X2N1cnJlbnRfZm9ybV9zZXR0aW5ncyIsImZvcm1fbmFtZSIsImZvcm1fc2V0dGluZ3MiLCJvcHRpb25zIiwiY3NzX3ZhcnMiLCJ3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSIsInNldHRpbmdzIiwicmVhZF9mb3JtX3N0eWxlX2NvbnRyb2xfdmFsdWUiLCJrZXkiLCJjb250cm9sIiwiY2hlY2tlZCIsImdldEVsZW1lbnRCeUlkIiwibWF0Y2hlcyIsIm5hbWUiLCJnZXRfY3VycmVudF9mb3JtX3N0eWxlX3NldHRpbmdzIiwic3R5bGVfa2V5cyIsIm91dCIsImNvbGxlY3RlZCIsImxvY2FsaXplZCIsIndwYmNfYmZiX3NldHRpbmdzX3ZhcnMiLCJnbG9iYWxfZm9ybV9zdHlsZSIsIldQQkNfQkZCX0Zvcm1TZXR0aW5ncyIsImNvbGxlY3QiLCJmb3JFYWNoIiwiZG9tX3ZhbHVlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0X3NlbGVjdGVkX2NhbGVuZGFyX3NraW5fdXJsIiwic2VsZWN0X2VsIiwic2VsZWN0ZWRfb3B0aW9uIiwic2VsZWN0ZWRJbmRleCIsInNlbGVjdGVkX3VybCIsInN0eWxlc2hlZXQiLCJocmVmIiwiYXBwbHlfY2FsZW5kYXJfc2tpbl90b19pZnJhbWUiLCJza2luX3VybCIsImRvbmUiLCJ0cmllcyIsImF0dGVtcHRfbnVtIiwiTnVtYmVyIiwiY29udGVudFdpbmRvdyIsIndwYmNfX2NhbGVuZGFyX19jaGFuZ2Vfc2tpbiIsInNldFRpbWVvdXQiLCJvcHRzIiwic3RydWN0dXJlIiwic291cmNlX2J0biIsInNvdXJjZV9idXR0b24iLCIkc291cmNlX2J0biIsImpRdWVyeSIsIndwYmNfYmZiX19idXR0b25fYnVzeV9zdGFydCIsImxlbmd0aCIsInNldF9idXR0b25fYnVzeSIsInBheWxvYWQiLCJGb3JtRGF0YSIsImNmZyIsIldQQkNfQkZCX0FqYXgiLCJwcmV2aWV3X2Zvcm1fc3R5bGUiLCJhcHBlbmQiLCJub25jZV9zYXZlIiwiZW5naW5lIiwiZW5naW5lX3ZlcnNpb24iLCJKU09OIiwic3RyaW5naWZ5IiwicHJldmlld19zb3VyY2UiLCJ3cGJjX2JmYl9wcmV2aWV3X19nZXRfc291cmNlIiwiYWR2Iiwid3BiY19iZmJfcHJldmlld19fcmVhZF9hZHZhbmNlZF9tb2RlX3BheWxvYWQiLCJjYW5fdXNlX2FkdmFuY2VkIiwiaXNfZGlydHkiLCJ3cGJjX2JmYl9wcmV2aWV3X19oYXNfdGV4dCIsImFkdmFuY2VkX2Zvcm0iLCJjb250ZW50X2Zvcm0iLCJ3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSIsImFscmVhZHlfaGFzX2FkdiIsImhhcyIsIldQQkNfQkZCX0V4cG9ydGVyIiwiZXhwb3J0X2FsbCIsIndpZHRoX2NvbWJpbmVkIiwiYm9va2luZ19mb3JtX2xheW91dF93aWR0aCIsInBhcnNlZF93aWR0aCIsIndpZHRoX3VuaXQiLCJleHBvcnRfb3B0aW9ucyIsImdhcFBlcmNlbnQiLCJmb3JtX3NsdWciLCJmb3JtX3dpZHRoX3ZhbHVlIiwiZm9ybV93aWR0aF91bml0IiwiZXhwb3J0X3Jlc3VsdCIsImZpZWxkc19kYXRhIiwiY29uc29sZSIsImFqYXhfdXJsIiwid3BiY19iZmJfX2dldF9hamF4X3VybCIsImFqYXh1cmwiLCJwcmV2aWV3X2NhbGVuZGFyX3NraW5fdXJsIiwiZW5kX2J1c3lfbm93IiwiX2VuZF9idXN5IiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwidGhlbiIsInJlc3BvbnNlIiwianNvbiIsImRhdGEiLCJzdWNjZXNzIiwicHJldmlld191cmwiLCJvbl9sb2FkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldEF0dHJpYnV0ZSIsImNhdGNoIiwiZXJyIiwid3BiY19iZmJfX2J1dHRvbl9idXN5X2VuZCIsInJlc2V0X2J1c3lfc3RhdGUiLCIkYnRucyIsImVhY2giLCIkYiIsImhhc0NsYXNzIiwiJGJ0biIsInJlbW92ZUF0dHJpYnV0ZSIsInNldF9tb2RlIiwibW9kZSIsIndwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfbW9kZV9hY3RpdmUiLCJjb250YWlucyIsIndwYmNfYmZiX3ByZXZpZXdfX2dldF9hY3RpdmVfdG9wX3RhYl9pZCIsIndwYmNfYmZiX3ByZXZpZXdfX2JpbmRfZm9ybV9hamF4X2xvYWRlZF9ldmVudHMiLCJjbGllbnQiLCJfX3dwYmNfYmZiX3ByZXZpZXdfX2Zvcm1fYWpheF9sb2FkZWRfYm91bmQiLCJkZWJvdW5jZV9pZCIsImV2IiwiZGV0IiwiZGV0YWlsIiwiZm4iLCJjbGVhclRpbWVvdXQiLCJ3YWl0X2Zvcl9idWlsZGVyIiwicGFzc2l2ZSIsImJ0biIsInYiLCJzYXZlX3NvdXJjZSIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsIndwYmNfYmZiX2FkdmFuY2VkX2VkaXRvcl9hcGkiLCJnZXRfdmFsdWVzIiwidGFfZm9ybSIsInRhX2NvbnRlbnQiLCJ3cGJjX2JmYl9wcmV2aWV3X19pc19wcmV2aWV3X3RhYl9saW5rIiwiZWwiLCJ3cGJjX2JmYl9wcmV2aWV3X19pc19idWlsZGVyX3RhYl9saW5rIiwid3BiY19iZmJfX2FjdGl2YXRlX3BhbmVsX3RhYiIsInRhYl9pZCIsInRhYl9saW5rIiwiY2xpY2siLCJfZSIsIm5hdiIsInBhbmVsc19yb290IiwicGFuZWxzX3Jvb3Rfc2VsZWN0b3IiLCJfZTIiLCJwYW5lbF9iYXNlX2NsYXNzIiwiZnJvbV9uYXYiLCJzZWxlY3Rvcl9hbGwiLCJwYW5lbF9ub2RlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpIiwic3R5bGUiLCJkaXNwbGF5Iiwic2VsZWN0b3JfYWN0aXZlIiwiYWN0aXZlX3BhbmVsIiwiaXRlbXMiLCJqIiwiYWN0aXZlX2l0ZW0iLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJ0YWIiLCJuYXZfaWQiLCJpZCIsIl9lMyIsIndwYmNfYmZiX3ByZXZpZXdfX3N5bmNfbW9kZV90b190YWIiLCJ3cGJjX2JmYl9wcmV2aWV3X19iaW5kX3RvcF90YWJfZXZlbnRzIiwicHJldl9pZCIsInByZXZfdGFiIiwiVE9QX05BVl9JRCIsInJldHVybl90YWJfaWQiLCJyZW1lbWJlcl9yZXR1cm5fdGFiX2Zyb21fZG9tIiwiY3VyIiwiZ2V0X3JldHVybl90YWJfaWQiLCJ0Iiwid3BiY19iZmJfaW5pdF9wcmV2aWV3X2NsaWVudCIsInJvb3QiLCJXUEJDX0JGQl9QcmV2aWV3Iiwic2hvd19wcmV2aWV3Iiwib3B0Iiwic3JjIiwic2hvd19idWlsZGVyIiwiYmFja190byIsInNob3dfYWR2YW5jZWRfdGFiIiwid3BiY19iZmJfYmluZF90b3BfdG9vbGJhcl9idXR0b25zIiwiYnRuX3ByZXZpZXdfbGlzdCIsImJ0bl9idWlsZGVyX2xpc3QiLCJidG5fcmVmcmVzaF9saXN0IiwiZm9yX2VhY2hfbm9kZSIsImxpc3QiLCJjYiIsIkFycmF5IiwiYnRuX3ByZXZpZXciLCJwcmV2ZW50RGVmYXVsdCIsImJ0bl9yZWZyZXNoIiwidXBkYXRlIiwiYnRuX2J1aWxkZXIiLCJyZWFkeVN0YXRlIiwid2luZG93IiwiZG9jdW1lbnQiXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9wcmV2aWV3L19zcmMvYmZiLXByZXZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9wcmV2aWV3L19vdXQvYmZiLXByZXZpZXcuanNcclxuLy8gPT0gQkZCIFByZXZpZXcgQ2xpZW50IOKAlCBzZW5kcyBjdXJyZW50IHN0cnVjdHVyZSB2aWEgQUpBWCBhbmQgbG9hZHMgcHJldmlldyBVUkwgaW50byBpZnJhbWVcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbihmdW5jdGlvbiAodywgZCkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0LyoqXHJcblx0ICogU2ltcGxlIGxvZ2dlciBhbGlhcyAob3B0aW9uYWwpLlxyXG5cdCAqXHJcblx0ICogQHR5cGUge3tsb2c6RnVuY3Rpb24sIGVycm9yOkZ1bmN0aW9ufX1cclxuXHQgKi9cclxuXHR2YXIgZGV2ID0gKHcuX3dwYmMgJiYgdy5fd3BiYy5kZXYpID8gdy5fd3BiYy5kZXYgOiB7XHJcblx0XHRsb2c6IGZ1bmN0aW9uICgpIHt9LFxyXG5cdFx0ZXJyb3I6IGZ1bmN0aW9uICgpIHt9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogUHJldmlldyBjbGllbnQgY2xhc3MuXHJcblx0ICogQmluZHMgdG8gYSBwcmV2aWV3IHBhbmVsIHJvb3QgdGhhdCBjb250YWlucyBidXR0b24gKyBpZnJhbWUuXHJcblx0ICovXHJcblx0Y2xhc3Mgd3BiY19iZmJfcHJldmlld19jbGllbnQge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdF9lbCBSb290IGVsZW1lbnQgb2YgdGhlIHByZXZpZXcgcGFuZWwuXHJcblx0XHQgKi9cclxuXHRcdGNvbnN0cnVjdG9yKHJvb3RfZWwpIHtcclxuXHRcdFx0dGhpcy5yb290X2VsID0gcm9vdF9lbDtcclxuXHRcdFx0dGhpcy5pZnJhbWUgID0gcm9vdF9lbC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItcHJldmlldy1pZnJhbWU9XCIxXCJdJyApO1xyXG5cdFx0XHR0aGlzLmxvYWRlciAgPSByb290X2VsLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1wcmV2aWV3LWxvYWRlcj1cIjFcIl0nICk7IC8vIE5FV1xyXG5cdFx0XHR0aGlzLmJ1dHRvbiAgPSBudWxsOyAvLyBObyBsb2NhbCBcIlVwZGF0ZSBQcmV2aWV3XCIgYnV0dG9uIGluIHBhbmVsIGFueW1vcmUuXHJcblxyXG5cdFx0XHR0aGlzLm5vbmNlICAgPSByb290X2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtcHJldmlldy1ub25jZScgKSB8fCAnJztcclxuXHRcdFx0dGhpcy5pc19idXN5ID0gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoICF0aGlzLmlmcmFtZSApIHtcclxuXHRcdFx0XHRkZXYuZXJyb3IoICd3cGJjX2JmYl9wcmV2aWV3X2NsaWVudCcsICdNaXNzaW5nIGlmcmFtZSBlbGVtZW50JyApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5iaW5kX2V2ZW50cygpO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3cvaGlkZSB0aGUgb3ZlcmxheSBsb2FkZXIgb3ZlciB0aGUgaWZyYW1lLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNfdmlzaWJsZVxyXG5cdFx0ICovXHJcblx0XHRzZXRfbG9hZGVyX3Zpc2libGUoaXNfdmlzaWJsZSkge1xyXG5cdFx0XHRpZiAoICF0aGlzLmxvYWRlciApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpc192aXNpYmxlICkge1xyXG5cdFx0XHRcdHRoaXMubG9hZGVyLmNsYXNzTGlzdC5hZGQoICdpcy12aXNpYmxlJyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMubG9hZGVyLmNsYXNzTGlzdC5yZW1vdmUoICdpcy12aXNpYmxlJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCaW5kIFVJIGV2ZW50cyAocGFuZWwtbG9jYWwgYnV0dG9uLCBpZiBwcmVzZW50KS5cclxuXHRcdCAqL1xyXG5cdFx0YmluZF9ldmVudHMoKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHJcblx0XHRcdGlmICggISB0aGlzLmJ1dHRvbiApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRzZWxmLnVwZGF0ZV9wcmV2aWV3KCk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCBjdXJyZW50IEJGQiBzdHJ1Y3R1cmUgZnJvbSBnbG9iYWwgYnVpbGRlci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fG51bGx9XHJcblx0XHQgKi9cclxuXHRcdGdldF9jdXJyZW50X3N0cnVjdHVyZSgpIHtcclxuXHRcdFx0aWYgKCAhIHcud3BiY19iZmIgfHwgdHlwZW9mIHcud3BiY19iZmIuZ2V0X3N0cnVjdHVyZSAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRkZXYuZXJyb3IoICd3cGJjX2JmYl9wcmV2aWV3X2NsaWVudCcsICd3cGJjX2JmYi5nZXRfc3RydWN0dXJlKCkgaXMgbm90IGF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRyZXR1cm4gdy53cGJjX2JmYi5nZXRfc3RydWN0dXJlKCk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRkZXYuZXJyb3IoICd3cGJjX2JmYl9wcmV2aWV3X2NsaWVudC5nZXRfY3VycmVudF9zdHJ1Y3R1cmUnLCBlICk7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIGNvbWJpbmVkIGxlbmd0aCB2YWx1ZSBsaWtlIFwiMTAwJVwiLCBcIjMyMHB4XCIsIFwiMTIuNXJlbVwiLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxyXG5cdFx0ICogQHJldHVybiB7e251bTpzdHJpbmcsIHVuaXQ6c3RyaW5nfX1cclxuXHRcdCAqL1xyXG5cdFx0cGFyc2VfbGVuZ3RoX3ZhbHVlKHZhbHVlKSB7XHJcblx0XHRcdHZhciByYXcgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpLnRyaW0oKTtcclxuXHRcdFx0dmFyIG0gPSByYXcubWF0Y2goL15cXHMqKC0/XFxkKyg/OlxcLlxcZCspPylcXHMqKFthLXolXSopXFxzKiQvaSk7XHJcblx0XHRcdGlmICghbSkge1xyXG5cdFx0XHRcdHJldHVybiB7IG51bTogcmF3LCB1bml0OiAnJyB9O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB7IG51bTogKG1bMV0gfHwgJycpLCB1bml0OiAobVsyXSB8fCAnJykgfTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIGN1cnJlbnQgZm9ybSBzZXR0aW5ncyBwYXlsb2FkIChzYW1lIHN0cnVjdHVyZSBhcyByZWFsIFNhdmUpOlxyXG5cdFx0ICoge1xyXG5cdFx0ICogICBvcHRpb25zOiB7IC4uLnNvdXJjZS1vZi10cnV0aC4uLiB9LFxyXG5cdFx0ICogICBjc3NfdmFyczogeyAuLi5jb21waWxlZC4uLiB9XHJcblx0XHQgKiB9XHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGZvcm1fbmFtZVxyXG5cdFx0ICogQHJldHVybnMge3tvcHRpb25zOk9iamVjdCwgY3NzX3ZhcnM6T2JqZWN0fX1cclxuXHRcdCAqL1xyXG5cdFx0Z2V0X2N1cnJlbnRfZm9ybV9zZXR0aW5ncyhmb3JtX25hbWUpIHtcblxyXG5cdFx0XHR2YXIgZm9ybV9zZXR0aW5ncyA9IHtcclxuXHRcdFx0XHRvcHRpb25zIDoge30sXHJcblx0XHRcdFx0Y3NzX3ZhcnM6IHt9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyAtLS0gc2FtZSBldmVudCBjb250cmFjdCBhcyBhamF4L19vdXQvYmZiLWFqYXguanMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSggJ3dwYmM6YmZiOmZvcm1fc2V0dGluZ3M6Y29sbGVjdCcsIHtcclxuXHRcdFx0XHRzZXR0aW5ncyA6IGZvcm1fc2V0dGluZ3MsXHJcblx0XHRcdFx0Zm9ybV9uYW1lOiBmb3JtX25hbWUgfHwgJ3N0YW5kYXJkJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBTdHJpY3Q6IHJlcXVpcmUgY29ycmVjdCBzaGFwZS5cclxuXHRcdFx0aWYgKCAhZm9ybV9zZXR0aW5ncyB8fCB0eXBlb2YgZm9ybV9zZXR0aW5ncyAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdFx0Zm9ybV9zZXR0aW5ncyA9IHsgb3B0aW9uczoge30sIGNzc192YXJzOiB7fSB9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggIWZvcm1fc2V0dGluZ3Mub3B0aW9ucyB8fCB0eXBlb2YgZm9ybV9zZXR0aW5ncy5vcHRpb25zICE9PSAnb2JqZWN0JyApIHtcclxuXHRcdFx0XHRmb3JtX3NldHRpbmdzLm9wdGlvbnMgPSB7fTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoICFmb3JtX3NldHRpbmdzLmNzc192YXJzIHx8IHR5cGVvZiBmb3JtX3NldHRpbmdzLmNzc192YXJzICE9PSAnb2JqZWN0JyApIHtcclxuXHRcdFx0XHRmb3JtX3NldHRpbmdzLmNzc192YXJzID0ge307XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmb3JtX3NldHRpbmdzO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJlYWQgYSBGb3JtIFN0eWxlIGNvbnRyb2wgZGlyZWN0bHkgZnJvbSBET00uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdFx0ICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuXHRcdCAqL1xuXHRcdHJlYWRfZm9ybV9zdHlsZV9jb250cm9sX3ZhbHVlKGtleSkge1xuXHRcdFx0dmFyIGNvbnRyb2wgPSBudWxsO1xuXHRcdFx0dmFyIGNoZWNrZWQgPSBudWxsO1xuXG5cdFx0XHRpZiAoIGtleSA9PT0gJ2Jvb2tpbmdfZm9ybV9zdHlsZScgKSB7XG5cdFx0XHRcdGNoZWNrZWQgPSBkLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cImJvb2tpbmdfZm9ybV9zdHlsZVwiXTpjaGVja2VkJyApO1xuXHRcdFx0XHRyZXR1cm4gY2hlY2tlZCA/IFN0cmluZyggY2hlY2tlZC52YWx1ZSB8fCAnJyApIDogbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Y29udHJvbCA9IGQucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWZzLWtleT1cIicgKyBrZXkgKyAnXCJdJyApO1xuXHRcdFx0aWYgKCAhIGNvbnRyb2wgKSB7XG5cdFx0XHRcdGNvbnRyb2wgPSBkLmdldEVsZW1lbnRCeUlkKCBrZXkgKTtcblx0XHRcdH1cblx0XHRcdGlmICggISBjb250cm9sICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBjb250cm9sLm1hdGNoZXMgJiYgY29udHJvbC5tYXRjaGVzKCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyApICkge1xuXHRcdFx0XHRjaGVja2VkID0gZC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY29udHJvbC5uYW1lICsgJ1wiXTpjaGVja2VkJyApO1xuXHRcdFx0XHRyZXR1cm4gY2hlY2tlZCA/IFN0cmluZyggY2hlY2tlZC52YWx1ZSB8fCAnJyApIDogbnVsbDtcblx0XHRcdH1cblx0XHRcdGlmICggY29udHJvbC5tYXRjaGVzICYmIGNvbnRyb2wubWF0Y2hlcyggJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuY2hlY2tlZCA/ICdPbicgOiAnT2ZmJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIGNvbnRyb2wudmFsdWUgPT0gbnVsbCA/ICcnIDogY29udHJvbC52YWx1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBCdWlsZCB0aGUgY3VycmVudCBnbG9iYWwgRm9ybSBTdHlsZSBvdmVycmlkZSBmb3IgcHJldmlldyBvbmx5LlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge09iamVjdH1cblx0XHQgKi9cblx0XHRnZXRfY3VycmVudF9mb3JtX3N0eWxlX3NldHRpbmdzKCkge1xuXHRcdFx0dmFyIHN0eWxlX2tleXMgPSBbXG5cdFx0XHRcdCdib29raW5nX2Zvcm1fc3R5bGUnLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2FjY2VudF9lbmFibGVkJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9hY2NlbnRfY29sb3InLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3JhZGl1cycsXG5cdFx0XHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwnLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwnLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0XHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX3RleHRfY29sb3InLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3InLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0XHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdFx0XHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3InLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yJyxcblx0XHRcdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ib3JkZXJfY29sb3InLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3InLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3InLFxuXHRcdFx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcidcblx0XHRcdF07XG5cdFx0XHR2YXIgb3V0ID0ge307XG5cdFx0XHR2YXIgY29sbGVjdGVkID0ge307XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XHR2YXIgbG9jYWxpemVkID0gdy53cGJjX2JmYl9zZXR0aW5nc192YXJzICYmIHcud3BiY19iZmJfc2V0dGluZ3NfdmFycy5nbG9iYWxfZm9ybV9zdHlsZVxuXHRcdFx0XHQ/IHcud3BiY19iZmJfc2V0dGluZ3NfdmFycy5nbG9iYWxfZm9ybV9zdHlsZVxuXHRcdFx0XHQ6IHt9O1xuXG5cdFx0XHRpZiAoIHcuV1BCQ19CRkJfRm9ybVNldHRpbmdzICYmIHR5cGVvZiB3LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0ID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0XHRjb2xsZWN0ZWQgPSB3LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0KCAnZ2xvYmFsJyApIHx8IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZV9rZXlzLmZvckVhY2goIGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0dmFyIGRvbV92YWx1ZSA9IHNlbGYucmVhZF9mb3JtX3N0eWxlX2NvbnRyb2xfdmFsdWUoIGtleSApO1xuXHRcdFx0XHRpZiAoIG51bGwgIT09IGRvbV92YWx1ZSApIHtcblx0XHRcdFx0XHRvdXRba2V5XSA9IGRvbV92YWx1ZTtcblx0XHRcdFx0fSBlbHNlIGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBjb2xsZWN0ZWQsIGtleSApICkge1xuXHRcdFx0XHRcdG91dFtrZXldID0gY29sbGVjdGVkW2tleV07XG5cdFx0XHRcdH0gZWxzZSBpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggbG9jYWxpemVkLCBrZXkgKSApIHtcblx0XHRcdFx0XHRvdXRba2V5XSA9IGxvY2FsaXplZFtrZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fVxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbGVuZGFyIHNraW4gVVJMIGZyb20gdGhlIEJ1aWxkZXIgcGFnZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRnZXRfc2VsZWN0ZWRfY2FsZW5kYXJfc2tpbl91cmwoKSB7XHJcblx0XHRcdHZhciBzZWxlY3RfZWwgPSBkLnF1ZXJ5U2VsZWN0b3IoICcuanMtd3BiYy1iZmItY2FsZW5kYXItc2tpbicgKTtcclxuXHRcdFx0aWYgKCBzZWxlY3RfZWwgJiYgc2VsZWN0X2VsLm9wdGlvbnMgKSB7XHJcblx0XHRcdFx0dmFyIHNlbGVjdGVkX29wdGlvbiA9IHNlbGVjdF9lbC5vcHRpb25zWyBzZWxlY3RfZWwuc2VsZWN0ZWRJbmRleCBdO1xyXG5cdFx0XHRcdGlmICggc2VsZWN0ZWRfb3B0aW9uICkge1xyXG5cdFx0XHRcdFx0dmFyIHNlbGVjdGVkX3VybCA9IHNlbGVjdGVkX29wdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtY2FsZW5kYXItc2tpbi11cmwnICk7XHJcblx0XHRcdFx0XHRpZiAoIHNlbGVjdGVkX3VybCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFN0cmluZyggc2VsZWN0ZWRfdXJsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgc3R5bGVzaGVldCA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjLWNhbGVuZGFyLXNraW4tY3NzJyApO1xyXG5cdFx0XHRpZiAoIHN0eWxlc2hlZXQgJiYgc3R5bGVzaGVldC5ocmVmICkge1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIHN0eWxlc2hlZXQuaHJlZiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBcHBseSB0aGUgdW5zYXZlZCBCdWlsZGVyIGNhbGVuZGFyIHNraW4gaW5zaWRlIHRoZSBsb2FkZWQgUHJldmlldyBpZnJhbWUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNraW5fdXJsXHJcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkb25lXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gdHJpZXNcclxuXHRcdCAqL1xyXG5cdFx0YXBwbHlfY2FsZW5kYXJfc2tpbl90b19pZnJhbWUoc2tpbl91cmwsIGRvbmUsIHRyaWVzKSB7XHJcblx0XHRcdHZhciBzZWxmICAgICAgICA9IHRoaXM7XHJcblx0XHRcdHZhciBhdHRlbXB0X251bSA9IE51bWJlciggdHJpZXMgfHwgMCApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHNraW5fdXJsIHx8ICEgdGhpcy5pZnJhbWUgfHwgISB0aGlzLmlmcmFtZS5jb250ZW50V2luZG93ICkge1xyXG5cdFx0XHRcdGlmICggdHlwZW9mIGRvbmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRkb25lKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiB0aGlzLmlmcmFtZS5jb250ZW50V2luZG93LndwYmNfX2NhbGVuZGFyX19jaGFuZ2Vfc2tpbiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cud3BiY19fY2FsZW5kYXJfX2NoYW5nZV9za2luKCBza2luX3VybCApO1xyXG5cdFx0XHRcdFx0aWYgKCB0eXBlb2YgZG9uZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0ZG9uZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQuYXBwbHlfY2FsZW5kYXJfc2tpbl90b19pZnJhbWUnLCBlICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggYXR0ZW1wdF9udW0gPj0gMjAgKSB7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgZG9uZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdGRvbmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR3LnNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRzZWxmLmFwcGx5X2NhbGVuZGFyX3NraW5fdG9faWZyYW1lKCBza2luX3VybCwgZG9uZSwgYXR0ZW1wdF9udW0gKyAxICk7XHJcblx0XHRcdH0sIDEwMCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2VuZCBzbmFwc2hvdCB0byBzZXJ2ZXIgYW5kIHVwZGF0ZSBpZnJhbWUgc3JjIHdpdGggcmV0dXJuZWQgcHJldmlldyBVUkwuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHt7c291cmNlX2J1dHRvbj86SFRNTEVsZW1lbnR9fSBbb3B0c11cclxuXHRcdCAqL1xyXG5cdFx0dXBkYXRlX3ByZXZpZXcoIG9wdHMgKSB7XHJcblx0XHRcdGlmICggdGhpcy5pc19idXN5ICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIHN0cnVjdHVyZSA9IHRoaXMuZ2V0X2N1cnJlbnRfc3RydWN0dXJlKCk7XHJcblx0XHRcdGlmICggISBzdHJ1Y3R1cmUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLnNldF9sb2FkZXJfdmlzaWJsZSggdHJ1ZSApO1xyXG5cclxuXHRcdFx0dmFyIG9wdGlvbnMgICAgPSBvcHRzIHx8IHt9O1xyXG5cdFx0XHR2YXIgc291cmNlX2J0biA9IG9wdGlvbnMuc291cmNlX2J1dHRvbiB8fCBudWxsO1xyXG5cclxuXHRcdFx0dmFyICRzb3VyY2VfYnRuID0gbnVsbDtcclxuXHRcdFx0aWYgKCBzb3VyY2VfYnRuICYmIHcualF1ZXJ5ICYmIHR5cGVvZiB3LndwYmNfYmZiX19idXR0b25fYnVzeV9zdGFydCA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHQkc291cmNlX2J0biA9IHcualF1ZXJ5KCBzb3VyY2VfYnRuICk7XHJcblx0XHRcdFx0aWYgKCAkc291cmNlX2J0biAmJiAkc291cmNlX2J0bi5sZW5ndGggKSB7XHJcblx0XHRcdFx0XHR3LndwYmNfYmZiX19idXR0b25fYnVzeV9zdGFydCggJHNvdXJjZV9idG4gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuaXNfYnVzeSA9IHRydWU7XHJcblx0XHRcdHRoaXMuc2V0X2J1dHRvbl9idXN5KCB0cnVlICk7IC8vIGxvY2FsIFwiVXBkYXRlIFByZXZpZXdcIiBidXR0b24gaW4gdGhlIHBhbmVsXHJcblxyXG5cdFx0XHR2YXIgcGF5bG9hZCA9IG5ldyB3LkZvcm1EYXRhKCk7XHJcblx0XHRcdHZhciBjZmcgICAgID0gdy5XUEJDX0JGQl9BamF4IHx8IHt9O1xyXG5cclxuXHRcdFx0Ly8gQnVpbGQgc2V0dGluZ3MgcGF5bG9hZCAoc2FtZSBhcyByZWFsIHNhdmluZykuXG5cdFx0XHR2YXIgZm9ybV9zZXR0aW5ncyA9IHRoaXMuZ2V0X2N1cnJlbnRfZm9ybV9zZXR0aW5ncyggY2ZnLmZvcm1fbmFtZSB8fCAnc3RhbmRhcmQnICk7XG5cdFx0XHR2YXIgcHJldmlld19mb3JtX3N0eWxlID0gdGhpcy5nZXRfY3VycmVudF9mb3JtX3N0eWxlX3NldHRpbmdzKCk7XG5cclxuXHRcdFx0cGF5bG9hZC5hcHBlbmQoICdhY3Rpb24nLCAnV1BCQ19BSlhfQkZCX1NBVkVfRk9STV9DT05GSUcnICk7XHJcblx0XHRcdHBheWxvYWQuYXBwZW5kKCAnbm9uY2UnLCAoIGNmZy5ub25jZV9zYXZlIHx8IHRoaXMubm9uY2UgfHwgJycgKSApO1xyXG5cclxuXHRcdFx0Ly8gSU1QT1JUQU5UOlxyXG5cdFx0XHQvLyAtIGZvcm1fbmFtZSBpcyB0aGUgbG9naWNhbCBmb3JtIGtleSAodXN1YWxseSAnc3RhbmRhcmQnIG9yIHNlbGVjdGVkIGZvcm0pXHJcblx0XHRcdHBheWxvYWQuYXBwZW5kKCAnZm9ybV9uYW1lJywgKCBjZmcuZm9ybV9uYW1lIHx8ICdzdGFuZGFyZCcgKSApO1xyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ3N0YXR1cycsICdwcmV2aWV3JyApO1xyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ3JldHVybl9wcmV2aWV3X3VybCcsICcxJyApO1xyXG5cclxuXHRcdFx0cGF5bG9hZC5hcHBlbmQoICdlbmdpbmUnLCAoIGNmZy5lbmdpbmUgfHwgJ2JmYicgKSApO1xyXG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ2VuZ2luZV92ZXJzaW9uJywgKCBjZmcuZW5naW5lX3ZlcnNpb24gfHwgJzEuMCcgKSApO1xyXG5cclxuXHRcdFx0cGF5bG9hZC5hcHBlbmQoICdzdHJ1Y3R1cmUnLCBKU09OLnN0cmluZ2lmeSggc3RydWN0dXJlICkgKTtcclxuXHJcblx0XHRcdC8vIFNlbmQgcmVhbCBzZXR0aW5ncyAob3B0aW9ucyArIGNvbXBpbGVkIGNzc192YXJzKS5cblx0XHRcdHBheWxvYWQuYXBwZW5kKCAnc2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeSggZm9ybV9zZXR0aW5ncyApICk7XG5cdFx0XHRwYXlsb2FkLmFwcGVuZCggJ3ByZXZpZXdfZm9ybV9zdHlsZScsIEpTT04uc3RyaW5naWZ5KCBwcmV2aWV3X2Zvcm1fc3R5bGUgKSApO1xuXHJcblx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gQ2hvb3NlIHdoZXJlIGFkdmFuY2VkX2Zvcm0gKyBjb250ZW50X2Zvcm0gYXJlIHRha2VuIGZyb20gKGF1dG98YnVpbGRlcnxhZHZhbmNlZClcclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHR2YXIgcHJldmlld19zb3VyY2UgPSB3cGJjX2JmYl9wcmV2aWV3X19nZXRfc291cmNlKCBjZmcsIHNvdXJjZV9idG4gKTtcclxuXHRcdFx0cGF5bG9hZC5hcHBlbmQoICdwcmV2aWV3X3NvdXJjZScsIHByZXZpZXdfc291cmNlICk7XHJcblxyXG5cdFx0XHR2YXIgYWR2ID0gbnVsbDtcclxuXHJcblx0XHRcdC8vIDEpIFRyeSBBZHZhbmNlZCBNb2RlIHRleHQgKGlmIHNlbGVjdGVkIC8gYXV0bytkaXJ0eSlcclxuXHRcdFx0aWYgKCBwcmV2aWV3X3NvdXJjZSA9PT0gJ2FkdmFuY2VkJyB8fCBwcmV2aWV3X3NvdXJjZSA9PT0gJ2F1dG8nICkge1xyXG5cclxuXHRcdFx0XHRhZHYgPSB3cGJjX2JmYl9wcmV2aWV3X19yZWFkX2FkdmFuY2VkX21vZGVfcGF5bG9hZCggZCwgdyApO1xyXG5cclxuXHRcdFx0XHR2YXIgY2FuX3VzZV9hZHZhbmNlZCA9XHJcblx0XHRcdFx0XHRcdChwcmV2aWV3X3NvdXJjZSA9PT0gJ2FkdmFuY2VkJykgfHxcclxuXHRcdFx0XHRcdFx0KHByZXZpZXdfc291cmNlID09PSAnYXV0bycgJiYgYWR2ICYmIGFkdi5pc19kaXJ0eSk7XHJcblxyXG5cdFx0XHRcdGlmICggY2FuX3VzZV9hZHZhbmNlZCApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBGb3JjZWQgXCJhZHZhbmNlZFwiIGJ1dCBlbXB0eSAtPiBmYWxsYmFjayB0byBidWlsZGVyIGV4cG9ydC5cclxuXHRcdFx0XHRcdGlmICggISB3cGJjX2JmYl9wcmV2aWV3X19oYXNfdGV4dCggYWR2LmFkdmFuY2VkX2Zvcm0gKSAmJiAhIHdwYmNfYmZiX3ByZXZpZXdfX2hhc190ZXh0KCBhZHYuY29udGVudF9mb3JtICkgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRcdHcud3BiY19hZG1pbl9zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHQnQWR2YW5jZWQgTW9kZSBpcyBzZWxlY3RlZCwgYnV0IGVkaXRvcnMgYXJlIGVtcHR5LiBVc2luZyBCdWlsZGVyIGV4cG9ydC4nLFxyXG5cdFx0XHRcdFx0XHRcdFx0J3dhcm5pbmcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0NjAwMFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCB3cGJjX2JmYl9wcmV2aWV3X19oYXNfdGV4dCggYWR2LmFkdmFuY2VkX2Zvcm0gKSApIHtcclxuXHRcdFx0XHRcdFx0XHRwYXlsb2FkLmFwcGVuZCggJ2FkdmFuY2VkX2Zvcm0nLCBhZHYuYWR2YW5jZWRfZm9ybSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICggd3BiY19iZmJfcHJldmlld19faGFzX3RleHQoIGFkdi5jb250ZW50X2Zvcm0gKSApIHtcclxuXHRcdFx0XHRcdFx0XHRwYXlsb2FkLmFwcGVuZCggJ2NvbnRlbnRfZm9ybScsIGFkdi5jb250ZW50X2Zvcm0gKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIDIpIElmIG5vdCB0YWtlbiBmcm9tIEFkdmFuY2VkIE1vZGUgLT4gZXhwb3J0IGZyb20gQnVpbGRlciBzdHJ1Y3R1cmUgKGN1cnJlbnQgYmVoYXZpb3IpXHJcblx0XHRcdHZhciBhbHJlYWR5X2hhc19hZHYgPVxyXG5cdFx0XHRcdFx0cGF5bG9hZC5oYXMgJiYgKHBheWxvYWQuaGFzKCAnYWR2YW5jZWRfZm9ybScgKSB8fCBwYXlsb2FkLmhhcyggJ2NvbnRlbnRfZm9ybScgKSk7IC8vIHNvbWUgYnJvd3NlcnNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIC8vIHN1cHBvcnRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIC8vIEZvcm1EYXRhLmhhc1xyXG5cclxuXHRcdFx0Ly8gRmFsbGJhY2sgZm9yIG9sZCBicm93c2VycyAobm8gRm9ybURhdGEuaGFzKVxyXG5cdFx0XHRpZiAoIHR5cGVvZiBwYXlsb2FkLmhhcyAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRhbHJlYWR5X2hhc19hZHYgPSBmYWxzZTsgLy8ganVzdCB0cnkgZXhwb3J0ZXIgaWYgbmVlZGVkXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggISBhbHJlYWR5X2hhc19hZHYgKSB7XHJcblxyXG5cdFx0XHRcdGlmICggdy5XUEJDX0JGQl9FeHBvcnRlciAmJiB0eXBlb2Ygdy5XUEJDX0JGQl9FeHBvcnRlci5leHBvcnRfYWxsID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHJcblx0XHRcdFx0XHRcdHZhciB3aWR0aF9jb21iaW5lZCA9IGZvcm1fc2V0dGluZ3Mub3B0aW9ucy5ib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHR2YXIgcGFyc2VkX3dpZHRoICAgPSB0aGlzLnBhcnNlX2xlbmd0aF92YWx1ZSggd2lkdGhfY29tYmluZWQgKTtcclxuXHRcdFx0XHRcdFx0dmFyIHdpZHRoX3VuaXQgICAgID0gcGFyc2VkX3dpZHRoLnVuaXQgPyBwYXJzZWRfd2lkdGgudW5pdCA6ICclJztcclxuXHJcblx0XHRcdFx0XHRcdHZhciBleHBvcnRfb3B0aW9ucyA9IHtcclxuXHRcdFx0XHRcdFx0XHRnYXBQZXJjZW50ICAgICAgOiAzLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1fc2x1ZyAgICAgICA6IChjZmcuZm9ybV9uYW1lIHx8ICdzdGFuZGFyZCcpLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1fd2lkdGhfdmFsdWU6IHBhcnNlZF93aWR0aC5udW0sXHJcblx0XHRcdFx0XHRcdFx0Zm9ybV93aWR0aF91bml0IDogd2lkdGhfdW5pdFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGV4cG9ydF9yZXN1bHQgPSB3LldQQkNfQkZCX0V4cG9ydGVyLmV4cG9ydF9hbGwoIHN0cnVjdHVyZSB8fCBbXSwgZXhwb3J0X29wdGlvbnMgKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggZXhwb3J0X3Jlc3VsdCApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGV4cG9ydF9yZXN1bHQuYWR2YW5jZWRfZm9ybSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHBheWxvYWQuYXBwZW5kKCAnYWR2YW5jZWRfZm9ybScsIGV4cG9ydF9yZXN1bHQuYWR2YW5jZWRfZm9ybSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoIGV4cG9ydF9yZXN1bHQuZmllbGRzX2RhdGEgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwYXlsb2FkLmFwcGVuZCggJ2NvbnRlbnRfZm9ybScsIGV4cG9ydF9yZXN1bHQuZmllbGRzX2RhdGEgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1dQQkMgQkZCOiBleHBvcnRfYWxsIGVycm9yJywgZSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdC8vIFVzZSBzaGFyZWQgaGVscGVyIGlmIGF2YWlsYWJsZTsgZmFsbGJhY2sgdG8gYWpheHVybC5cclxuXHRcdFx0dmFyIGFqYXhfdXJsID0gJyc7XHJcblx0XHRcdGlmICggdHlwZW9mIHcud3BiY19iZmJfX2dldF9hamF4X3VybCA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRhamF4X3VybCA9IHcud3BiY19iZmJfX2dldF9hamF4X3VybCgpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2Ygdy5hamF4dXJsICE9PSAndW5kZWZpbmVkJyAmJiB3LmFqYXh1cmwgKSB7XHJcblx0XHRcdFx0YWpheF91cmwgPSB3LmFqYXh1cmw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0dmFyIHByZXZpZXdfY2FsZW5kYXJfc2tpbl91cmwgPSB0aGlzLmdldF9zZWxlY3RlZF9jYWxlbmRhcl9za2luX3VybCgpO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZW5kX2J1c3lfbm93KCkge1xyXG5cdFx0XHRcdHNlbGYuX2VuZF9idXN5KCAkc291cmNlX2J0biApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICEgYWpheF91cmwgKSB7XHJcblx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQnLCAnYWpheCBVUkwgaXMgbm90IGRlZmluZWQnICk7XHJcblx0XHRcdFx0ZW5kX2J1c3lfbm93KCk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR3LmZldGNoKCBhamF4X3VybCwge1xyXG5cdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdGJvZHk6ICAgcGF5bG9hZFxyXG5cdFx0XHR9IClcclxuXHRcdFx0LnRoZW4oIGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG5cdFx0XHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XHJcblx0XHRcdH0gKVxyXG5cdFx0XHQudGhlbiggZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRpZiAoICEgZGF0YSB8fCAhIGRhdGEuc3VjY2VzcyB8fCAhIGRhdGEuZGF0YSB8fCAhIGRhdGEuZGF0YS5wcmV2aWV3X3VybCApIHtcclxuXHRcdFx0XHRcdGRldi5lcnJvciggJ3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50JywgJ1ByZXZpZXcgQUpBWCBlcnJvcicsIGRhdGEgKTtcclxuXHRcdFx0XHRcdGVuZF9idXN5X25vdygpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCAhIHNlbGYuaWZyYW1lICkge1xyXG5cdFx0XHRcdFx0ZGV2LmVycm9yKCAnd3BiY19iZmJfcHJldmlld19jbGllbnQnLCAnTWlzc2luZyBpZnJhbWUgZWxlbWVudCcgKTtcclxuXHRcdFx0XHRcdGVuZF9idXN5X25vdygpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gV2FpdCB1bnRpbCBpZnJhbWUgaGFzIHJlYWxseSBsb2FkZWQgdGhlIHByZXZpZXcgVVJMLlxyXG5cdFx0XHRcdHZhciBvbl9sb2FkID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0c2VsZi5pZnJhbWUucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCBvbl9sb2FkICk7XHJcblx0XHRcdFx0XHRzZWxmLmFwcGx5X2NhbGVuZGFyX3NraW5fdG9faWZyYW1lKCBwcmV2aWV3X2NhbGVuZGFyX3NraW5fdXJsLCBlbmRfYnVzeV9ub3cgKTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRzZWxmLmlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIG9uX2xvYWQgKTtcclxuXHRcdFx0XHRzZWxmLmlmcmFtZS5zZXRBdHRyaWJ1dGUoICdzcmMnLCBkYXRhLmRhdGEucHJldmlld191cmwgKTtcclxuXHRcdFx0fSApXHJcblx0XHRcdC5jYXRjaCggZnVuY3Rpb24gKGVycikge1xyXG5cdFx0XHRcdGRldi5lcnJvciggJ3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50JywgJ1ByZXZpZXcgQUpBWCBmYWlsZWQnLCBlcnIgKTtcclxuXHRcdFx0XHRlbmRfYnVzeV9ub3coKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSW50ZXJuYWwgaGVscGVyOiBzdG9wIGJ1c3kgc3RhdGUgb24gcGFuZWwgYnV0dG9uICsgb3B0aW9uYWwgdG9wIHRvb2xiYXIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7alF1ZXJ5fG51bGx9ICRzb3VyY2VfYnRuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfZW5kX2J1c3koJHNvdXJjZV9idG4pIHtcclxuXHRcdFx0dGhpcy5pc19idXN5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuc2V0X2J1dHRvbl9idXN5KCBmYWxzZSApO1xyXG5cdFx0XHR0aGlzLnNldF9sb2FkZXJfdmlzaWJsZSggZmFsc2UgKTsgLy8gTkVXXHJcblxyXG5cdFx0XHRpZiAoICRzb3VyY2VfYnRuICYmIHR5cGVvZiB3LndwYmNfYmZiX19idXR0b25fYnVzeV9lbmQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0dy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfZW5kKCAkc291cmNlX2J0biApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBGb3JjZS1yZXNldCBhbnkgYnVzeSBzdGF0ZXMgcmVsYXRlZCB0byBwcmV2aWV3LlxyXG5cdFx0ICogVGhpcyBpcyBjYWxsZWQgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byBCdWlsZGVyIG1vZGUgKHNvZnQtY2FuY2VsIFVYKS5cclxuXHRcdCAqL1xyXG5cdFx0cmVzZXRfYnVzeV9zdGF0ZSgpIHtcclxuXHRcdFx0dGhpcy5pc19idXN5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuc2V0X2J1dHRvbl9idXN5KCBmYWxzZSApOyAvLyBwYW5lbCBidXR0b24sIGlmIGFueVxyXG5cdFx0XHR0aGlzLnNldF9sb2FkZXJfdmlzaWJsZSggZmFsc2UgKTsgLy8gTkVXXHJcblxyXG5cdFx0XHRpZiAoIHcualF1ZXJ5ICYmIHR5cGVvZiB3LndwYmNfYmZiX19idXR0b25fYnVzeV9lbmQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0Ly8gVG9wIHRvb2xiYXIgYnV0dG9ucyB0aGF0IG1heSBzaG93IFwiTG9hZGluZyBwcmV2aWV3Li4uXCJcclxuXHRcdFx0XHR2YXIgJGJ0bnMgPSB3LmpRdWVyeShcclxuXHRcdFx0XHRcdCdbZGF0YS13cGJjLWJmYi10b3AtcHJldmlldy1idG49XCIxXCJdLCcgK1xyXG5cdFx0XHRcdFx0J1tkYXRhLXdwYmMtYmZiLXRvcC1yZWZyZXNoLWJ0bj1cIjFcIl0nXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0JGJ0bnMuZWFjaCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0dmFyICRiID0gdy5qUXVlcnkoIHRoaXMgKTtcclxuXHRcdFx0XHRcdGlmICggJGIuaGFzQ2xhc3MoICd3cGJjLWlzLWJ1c3knICkgKSB7XHJcblx0XHRcdFx0XHRcdHcud3BiY19iZmJfX2J1dHRvbl9idXN5X2VuZCggJGIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNpbXBsZSBidXN5IGluZGljYXRvciBmb3IgdGhlIHBhbmVsIFwiVXBkYXRlIFByZXZpZXdcIiBidXR0b24uXHJcblx0XHQgKiBSZXVzZXMgZ2xvYmFsIFdQQkMgYnVzeSBoZWxwZXJzIGlmIGF2YWlsYWJsZSwgc28gdGhlIHNwaW5uZXIgbWF0Y2hlcyBTYXZlL0xvYWQgYnV0dG9ucy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzX2J1c3lcclxuXHRcdCAqL1xyXG5cdFx0c2V0X2J1dHRvbl9idXN5KCBpc19idXN5ICkge1xyXG5cdFx0XHRpZiAoICEgdGhpcy5idXR0b24gKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiBqUXVlcnkgKyBnbG9iYWwgaGVscGVycyBleGlzdCwgdXNlIHNhbWUgc3Bpbm5lciBhcyBvdGhlciB0b29sYmFyIGJ1dHRvbnMuXHJcblx0XHRcdGlmICggdy5qUXVlcnkgJiYgdHlwZW9mIHcud3BiY19iZmJfX2J1dHRvbl9idXN5X3N0YXJ0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB3LndwYmNfYmZiX19idXR0b25fYnVzeV9lbmQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0dmFyICRidG4gPSB3LmpRdWVyeSggdGhpcy5idXR0b24gKTtcclxuXHJcblx0XHRcdFx0aWYgKCBpc19idXN5ICkge1xyXG5cdFx0XHRcdFx0dy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfc3RhcnQoICRidG4gKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dy53cGJjX2JmYl9fYnV0dG9uX2J1c3lfZW5kKCAkYnRuICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZhbGxiYWNrOiBzaW1wbGUgZGlzYWJsZWQgc3RhdGUgd2l0aG91dCBzcGlubmVyLlxyXG5cdFx0XHRpZiAoIGlzX2J1c3kgKSB7XHJcblx0XHRcdFx0dGhpcy5idXR0b24uc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0dGhpcy5idXR0b24uY2xhc3NMaXN0LmFkZCggJ3dwYmNfYmZiX19wcmV2aWV3X2J0bl9idXN5JyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSggJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdHRoaXMuYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoICd3cGJjX2JmYl9fcHJldmlld19idG5fYnVzeScgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2V0IGN1cnJlbnQgdmlldyBtb2RlOiBcImJ1aWxkZXJcIiBvciBcInByZXZpZXdcIi5cclxuXHRcdCAqIEFwcGxpZXMvcmVtb3ZlcyBDU1MgY2xhc3Mgb24gPGJvZHk+LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7KCdidWlsZGVyJ3wncHJldmlldycpfSBtb2RlXHJcblx0XHQgKi9cclxuXHRcdHNldF9tb2RlKCBtb2RlICkge1xyXG5cdFx0XHR2YXIgYm9keSA9IGQuYm9keTtcclxuXHRcdFx0aWYgKCAhIGJvZHkgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIG1vZGUgPT09ICdwcmV2aWV3JyApIHtcclxuXHRcdFx0XHRib2R5LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fbW9kZV9wcmV2aWV3JyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJvZHkuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19tb2RlX3ByZXZpZXcnICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyAtLSBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8qKlxyXG5cdCAqIElzIFByZXZpZXcgbW9kZSBjdXJyZW50bHkgYWN0aXZlP1xyXG5cdCAqIFdlIHByZWZlciBib2R5IGNsYXNzIChzZXQgYnkgY2xpZW50LnNldF9tb2RlKSwgZmFsbGJhY2sgdG8gYWN0aXZlIHRhYiBpZC5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19faXNfcHJldmlld19tb2RlX2FjdGl2ZSgpIHtcclxuXHRcdHZhciBib2R5ID0gZC5ib2R5O1xyXG5cdFx0aWYgKCBib2R5ICYmIGJvZHkuY2xhc3NMaXN0ICYmIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX21vZGVfcHJldmlldycgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKHdwYmNfYmZiX3ByZXZpZXdfX2dldF9hY3RpdmVfdG9wX3RhYl9pZCgpID09PSAncHJldmlld190YWInKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdoZW4gYSBmb3JtIGlzIGxvYWRlZCB2aWEgQUpBWCB3aGlsZSBQcmV2aWV3IHRhYiBpcyBhY3RpdmUsXHJcblx0ICogcmVmcmVzaCB0aGUgaWZyYW1lIHNvIGl0IHNob3dzIHRoZSBuZXdseSBsb2FkZWQgZm9ybS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7d3BiY19iZmJfcHJldmlld19jbGllbnR9IGNsaWVudFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX3ByZXZpZXdfX2JpbmRfZm9ybV9hamF4X2xvYWRlZF9ldmVudHMoY2xpZW50KSB7XHJcblxyXG5cdFx0aWYgKCAhIGNsaWVudCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFByZXZlbnQgZG91YmxlIGJpbmRpbmcgaWYgdGhpcyBzY3JpcHQgaXMgaW5qZWN0ZWQgdHdpY2UuXHJcblx0XHRpZiAoIHcuX193cGJjX2JmYl9wcmV2aWV3X19mb3JtX2FqYXhfbG9hZGVkX2JvdW5kID09PSAnMScgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHcuX193cGJjX2JmYl9wcmV2aWV3X19mb3JtX2FqYXhfbG9hZGVkX2JvdW5kID0gJzEnO1xyXG5cclxuXHRcdHZhciBkZWJvdW5jZV9pZCA9IG51bGw7XHJcblxyXG5cdFx0ZC5hZGRFdmVudExpc3RlbmVyKFxyXG5cdFx0XHQnd3BiYzpiZmI6Zm9ybTphamF4X2xvYWRlZCcsXHJcblx0XHRcdGZ1bmN0aW9uIChldikge1xyXG5cclxuXHRcdFx0XHQvLyBPbmx5IGRvIGFueXRoaW5nIGlmIFByZXZpZXcgaXMgY3VycmVudGx5IGFjdGl2ZS5cclxuXHRcdFx0XHRpZiAoICEgd3BiY19iZmJfcHJldmlld19faXNfcHJldmlld19tb2RlX2FjdGl2ZSgpICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIGRldCA9IChldiAmJiBldi5kZXRhaWwpID8gZXYuZGV0YWlsIDoge307XHJcblx0XHRcdFx0dmFyIGZuICA9IGRldC5mb3JtX25hbWUgPyBTdHJpbmcoIGRldC5mb3JtX25hbWUgKSA6ICcnO1xyXG5cclxuXHRcdFx0XHQvLyBCZXN0LWVmZm9ydDoga2VlcCBjZmcuZm9ybV9uYW1lIGluIHN5bmMgZm9yIHBheWxvYWQgYnVpbGRpbmcuXHJcblx0XHRcdFx0aWYgKCBmbiApIHtcclxuXHRcdFx0XHRcdHcuV1BCQ19CRkJfQWpheCAgICAgICAgICAgPSB3LldQQkNfQkZCX0FqYXggfHwge307XHJcblx0XHRcdFx0XHR3LldQQkNfQkZCX0FqYXguZm9ybV9uYW1lID0gZm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBEZWJvdW5jZSBtdWx0aXBsZSByYXBpZCBsb2FkcyAob3Igc2Vjb25kYXJ5IGV2ZW50cykuXHJcblx0XHRcdFx0aWYgKCBkZWJvdW5jZV9pZCApIHtcclxuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggZGVib3VuY2VfaWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGRlYm91bmNlX2lkID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0ZGVib3VuY2VfaWQgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRcdC8vIFByZXZpZXcgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgd2hpbGUgd2FpdGluZy5cclxuXHRcdFx0XHRcdGlmICggISB3cGJjX2JmYl9wcmV2aWV3X19pc19wcmV2aWV3X21vZGVfYWN0aXZlKCkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgYWxyZWFkeSBzZW5kaW5nIHByZXZpZXcsIGRvbid0IHN0YWNrIGFub3RoZXIgcmVxdWVzdC5cclxuXHRcdFx0XHRcdGlmICggY2xpZW50LmlzX2J1c3kgKSB7XHJcblx0XHRcdFx0XHRcdC8vIFRyeSBvbmNlIG1vcmUgc2hvcnRseSAoc2FmZSkuXHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIHdwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfbW9kZV9hY3RpdmUoKSAmJiAhIGNsaWVudC5pc19idXN5ICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2xpZW50LnVwZGF0ZV9wcmV2aWV3KCB7IHNvdXJjZV9idXR0b246IG51bGwgfSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSwgMjUwICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBXYWl0IHVudGlsIGJ1aWxkZXIgQVBJIGlzIHByZXNlbnQgKGZvcm0gbG9hZCBjYW4gYmUgYXN5bmMpLlxyXG5cdFx0XHRcdFx0dmFyIHRyaWVzID0gMDtcclxuXHRcdFx0XHRcdChmdW5jdGlvbiB3YWl0X2Zvcl9idWlsZGVyKCkge1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCAhIHdwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfbW9kZV9hY3RpdmUoKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICggdy53cGJjX2JmYiAmJiB0eXBlb2Ygdy53cGJjX2JmYi5nZXRfc3RydWN0dXJlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRcdGNsaWVudC51cGRhdGVfcHJldmlldyggeyBzb3VyY2VfYnV0dG9uOiBudWxsIH0gKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHRyaWVzKys7XHJcblx0XHRcdFx0XHRcdGlmICggdHJpZXMgPCAxNSApIHtcclxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCB3YWl0X2Zvcl9idWlsZGVyLCAyMDAgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHR9LCAxODAgKTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdHsgcGFzc2l2ZTogdHJ1ZSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19fZ2V0X3NvdXJjZShjZmcsIGJ0bikge1xyXG5cclxuXHRcdC8vIHByaW9yaXR5OiBidXR0b24gYXR0ciAtPiBnbG9iYWwgY2ZnIC0+IGRlZmF1bHRcclxuXHRcdHZhciB2ID0gJyc7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAoIGJ0biAmJiBidG4uZ2V0QXR0cmlidXRlICkge1xyXG5cdFx0XHRcdHYgPSBidG4uZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1wcmV2aWV3LXNvdXJjZScgKSB8fCBidG4uZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1zYXZlLXNvdXJjZScgKSB8fCAnJztcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoIGUgKSB7fVxyXG5cclxuXHRcdGlmICggISB2ICYmIGNmZyAmJiAoY2ZnLnByZXZpZXdfc291cmNlIHx8IGNmZy5zYXZlX3NvdXJjZSkgKSB7XHJcblx0XHRcdHYgPSBjZmcucHJldmlld19zb3VyY2UgfHwgY2ZnLnNhdmVfc291cmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHYgPSBTdHJpbmcoIHYgfHwgJ2F1dG8nICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdGlmICggWyAnYnVpbGRlcicsICdhZHZhbmNlZCcsICdhdXRvJyBdLmluZGV4T2YoIHYgKSA9PT0gLTEgKSB7XHJcblx0XHRcdHYgPSAnYnVpbGRlcic7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX3ByZXZpZXdfX2hhc190ZXh0KHYpIHtcclxuXHRcdHJldHVybiAhISAodiAmJiBTdHJpbmcoIHYgKS50cmltKCkpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19fcmVhZF9hZHZhbmNlZF9tb2RlX3BheWxvYWQoZCwgdykge1xyXG5cclxuXHRcdC8vIGJlc3Q6IEFQSSAoc3luY3MgQ29kZU1pcnJvciAtPiB0ZXh0YXJlYSlcclxuXHRcdGlmICggdy53cGJjX2JmYl9hZHZhbmNlZF9lZGl0b3JfYXBpICYmIHR5cGVvZiB3LndwYmNfYmZiX2FkdmFuY2VkX2VkaXRvcl9hcGkuZ2V0X3ZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRyZXR1cm4gdy53cGJjX2JmYl9hZHZhbmNlZF9lZGl0b3JfYXBpLmdldF92YWx1ZXMoKTtcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGZhbGxiYWNrOiByZWFkIHRleHRhcmVhcyBkaXJlY3RseVxyXG5cdFx0dmFyIHRhX2Zvcm0gICAgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2FkdmFuY2VkX2Zvcm1fZWRpdG9yJyApO1xyXG5cdFx0dmFyIHRhX2NvbnRlbnQgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2NvbnRlbnRfZm9ybV9lZGl0b3InICk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YWR2YW5jZWRfZm9ybTogdGFfZm9ybSA/IFN0cmluZyggdGFfZm9ybS52YWx1ZSB8fCAnJyApIDogJycsXHJcblx0XHRcdGNvbnRlbnRfZm9ybSA6IHRhX2NvbnRlbnQgPyBTdHJpbmcoIHRhX2NvbnRlbnQudmFsdWUgfHwgJycgKSA6ICcnLFxyXG5cdFx0XHRpc19kaXJ0eSAgICAgOiBmYWxzZVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIHRoaXMgZWxlbWVudCB0aGUgUHJldmlldyBUQUIgbGluayBpbiB0b3AgdGFicyBuYXY/XHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fG51bGx9IGVsXHJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19pc19wcmV2aWV3X3RhYl9saW5rKGVsKSB7XHJcblx0XHRpZiAoICFlbCB8fCAhZWwuZ2V0QXR0cmlidXRlICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWFjdGlvbicgKSA9PT0gJ3BhbmVsJyAmJlxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLXRhYicgKSA9PT0gJ3ByZXZpZXdfdGFiJ1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIHRoaXMgZWxlbWVudCB0aGUgQnVpbGRlciBUQUIgbGluayBpbiB0b3AgdGFicyBuYXY/XHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fG51bGx9IGVsXHJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19pc19idWlsZGVyX3RhYl9saW5rKGVsKSB7XHJcblx0XHRpZiAoICFlbCB8fCAhZWwuZ2V0QXR0cmlidXRlICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWFjdGlvbicgKSA9PT0gJ3BhbmVsJyAmJlxyXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLXRhYicgKSA9PT0gJ2J1aWxkZXJfdGFiJ1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFjdGl2YXRlIGEgXCJwYW5lbFwiIHRhYiBhbmQgc2hvdyBpdHMgcGFuZWwgc2VjdGlvbiAoc2NvcGVkKS5cclxuXHQgKlxyXG5cdCAqIFN0cmF0ZWd5OlxyXG5cdCAqIDEpIFRyeSB0byBjbGljayB0aGUgcmVhbCB0b3AtdGFiIGxpbmsgKGJlc3QpLlxyXG5cdCAqIDIpIElmIGxpbmsgZG9lcyBub3QgZXhpc3QgKGUuZy4gUHJldmlldyB0YWIgcmVtb3ZlZCBmcm9tIG5hdiksIGRvIGEgc2NvcGVkIG1hbnVhbCBzd2l0Y2g6XHJcblx0ICogICAgLSB1c2UgbmF2J3MgZGF0YS13cGJjLWJmYi1wYW5lbHMtcm9vdCArIGRhdGEtd3BiYy1iZmItcGFuZWwtY2xhc3NcclxuXHQgKiAgICAtIGhpZGUvc2hvdyBPTkxZIHRob3NlIG91dGVyIHBhbmVsc1xyXG5cdCAqICAgIC0gRE8gTk9UIHRvdWNoIGlubmVyIHBhbmVsc1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhYl9pZFxyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfX2FjdGl2YXRlX3BhbmVsX3RhYih0YWJfaWQpIHtcclxuXHJcblx0XHR0YWJfaWQgPSBTdHJpbmcoIHRhYl9pZCB8fCAnJyApLnRyaW0oKTtcclxuXHRcdGlmICggISB0YWJfaWQgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAxKSBCZXN0OiB0cmlnZ2VyIGV4aXN0aW5nIHRvcC10YWJzIHN3aXRjaGluZyBieSBjbGlja2luZyB0aGUgdGFiIGxpbmsgKGlmIGl0IGV4aXN0cykuXHJcblx0XHR2YXIgdGFiX2xpbmsgPSBkLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1hY3Rpb249XCJwYW5lbFwiXVtkYXRhLXdwYmMtYmZiLXRhYj1cIicgKyB0YWJfaWQgKyAnXCJdJyApO1xyXG5cdFx0aWYgKCB0YWJfbGluayAmJiB0eXBlb2YgdGFiX2xpbmsuY2xpY2sgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dGFiX2xpbmsuY2xpY2soKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge31cclxuXHRcdH1cclxuXHJcblx0XHQvLyAyKSBGYWxsYmFjazogc2NvcGVkIG1hbnVhbCB0b2dnbGUgKG91dGVyIHBhbmVscyBvbmx5KS5cclxuXHRcdHZhciBuYXYgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX3RvcF9ob3Jpc29udGFsX25hdicgKTtcclxuXHJcblx0XHQvLyBEZXRlcm1pbmUgb3V0ZXIgcGFuZWxzIHJvb3QuXHJcblx0XHR2YXIgcGFuZWxzX3Jvb3QgICAgICAgICAgPSBkO1xyXG5cdFx0dmFyIHBhbmVsc19yb290X3NlbGVjdG9yID0gJyc7XHJcblxyXG5cdFx0aWYgKCBuYXYgKSB7XHJcblx0XHRcdHBhbmVsc19yb290X3NlbGVjdG9yID0gbmF2LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItcGFuZWxzLXJvb3QnICkgfHwgJyc7XHJcblx0XHRcdHBhbmVsc19yb290X3NlbGVjdG9yID0gU3RyaW5nKCBwYW5lbHNfcm9vdF9zZWxlY3RvciB8fCAnJyApLnRyaW0oKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGYWxsYmFjayBpZiBhdHRyaWJ1dGUgbWlzc2luZzogcHJlZmVyICN3cGJjX2JmYl9fdG9wX3BhbmVscyBpZiBwcmVzZW50LlxyXG5cdFx0aWYgKCAhIHBhbmVsc19yb290X3NlbGVjdG9yICkge1xyXG5cdFx0XHRwYW5lbHNfcm9vdF9zZWxlY3RvciA9ICcjd3BiY19iZmJfX3RvcF9wYW5lbHMnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggcGFuZWxzX3Jvb3Rfc2VsZWN0b3IgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIHJvb3RfZWwgPSBkLnF1ZXJ5U2VsZWN0b3IoIHBhbmVsc19yb290X3NlbGVjdG9yICk7XHJcblx0XHRcdFx0aWYgKCByb290X2VsICkge1xyXG5cdFx0XHRcdFx0cGFuZWxzX3Jvb3QgPSByb290X2VsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF9lMiApIHt9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRGV0ZXJtaW5lIG91dGVyIGJhc2UgY2xhc3MgKElNUE9SVEFOVDogbXVzdCBiZSB0aGUgT1VURVIgYmFzZSwgbm90IHdwYmNfYmZiX190YWJfc2VjdGlvbikuXHJcblx0XHR2YXIgcGFuZWxfYmFzZV9jbGFzcyA9ICd3cGJjX2JmYl9fdG9wX3RhYl9zZWN0aW9uJztcclxuXHRcdGlmICggbmF2ICkge1xyXG5cdFx0XHR2YXIgZnJvbV9uYXYgPSBuYXYuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1wYW5lbC1jbGFzcycgKSB8fCAnJztcclxuXHRcdFx0ZnJvbV9uYXYgICAgID0gU3RyaW5nKCBmcm9tX25hdiB8fCAnJyApLnRyaW0oKTtcclxuXHRcdFx0aWYgKCBmcm9tX25hdiApIHtcclxuXHRcdFx0XHRwYW5lbF9iYXNlX2NsYXNzID0gZnJvbV9uYXY7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBVcGRhdGUgYWN0aXZlIHRhYiBvbiBuYXYgKHNvdXJjZSBvZiB0cnV0aCkuXHJcblx0XHRpZiAoIG5hdiApIHtcclxuXHRcdFx0bmF2LnNldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aXZlLXRhYicsIHRhYl9pZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhpZGUgT05MWSBvdXRlciBwYW5lbHMgKHNjb3BlZCBieSBiYXNlIGNsYXNzKS5cclxuXHRcdHZhciBzZWxlY3Rvcl9hbGwgPSAnLicgKyBwYW5lbF9iYXNlX2NsYXNzO1xyXG5cdFx0dmFyIHBhbmVsX25vZGVzICA9IHBhbmVsc19yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIHNlbGVjdG9yX2FsbCApO1xyXG5cclxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IHBhbmVsX25vZGVzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRwYW5lbF9ub2Rlc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNob3cgcmVxdWVzdGVkIG91dGVyIHBhbmVsLlxyXG5cdFx0dmFyIHNlbGVjdG9yX2FjdGl2ZSA9ICcuJyArIHBhbmVsX2Jhc2VfY2xhc3MgKyAnX18nICsgdGFiX2lkO1xyXG5cdFx0dmFyIGFjdGl2ZV9wYW5lbCAgICA9IHBhbmVsc19yb290LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yX2FjdGl2ZSApO1xyXG5cclxuXHRcdGlmICggISBhY3RpdmVfcGFuZWwgKSB7XHJcblx0XHRcdC8vIEJhY2t3YXJkLWNvbXBhdGlibGUgZmFsbGJhY2sgKGlmIHNvbWVvbmUgZm9yZ290IHRvIGFkZCBvdXRlciBjbGFzc2VzKS5cclxuXHRcdFx0YWN0aXZlX3BhbmVsID0gcGFuZWxzX3Jvb3QucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fdGFiX3NlY3Rpb25fXycgKyB0YWJfaWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGFjdGl2ZV9wYW5lbCApIHtcclxuXHRcdFx0YWN0aXZlX3BhbmVsLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNYXJrIGFjdGl2ZSBpdGVtIGluIG91dGVyIG5hdiBpZiBpdCBleGlzdHMgKFByZXZpZXcgY2FuIGJlIG1pc3NpbmcpLlxyXG5cdFx0aWYgKCBuYXYgKSB7XHJcblx0XHRcdHZhciBpdGVtcyA9IG5hdi5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfdWlfZWxfX2hvcmlzX25hdl9pdGVtJyApO1xyXG5cdFx0XHRmb3IgKCB2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7IGorKyApIHtcclxuXHRcdFx0XHRpdGVtc1tqXS5jbGFzc0xpc3QucmVtb3ZlKCAnYWN0aXZlJyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgYWN0aXZlX2l0ZW0gPSBuYXYucXVlcnlTZWxlY3RvciggJy53cGJjX3VpX2VsX19ob3Jpc19uYXZfaXRlbV9fJyArIHRhYl9pZCApO1xyXG5cdFx0XHRpZiAoIGFjdGl2ZV9pdGVtICkge1xyXG5cdFx0XHRcdGFjdGl2ZV9pdGVtLmNsYXNzTGlzdC5hZGQoICdhY3RpdmUnICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBFbWl0IHNhbWUgZXZlbnQgYXMgYmZiLXRvcC10YWJzLmpzIHNvIG90aGVyIG1vZHVsZXMgc3RheSBpbiBzeW5jLlxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZC5kaXNwYXRjaEV2ZW50KFxyXG5cdFx0XHRcdG5ldyBDdXN0b21FdmVudCggJ3dwYmM6YmZiOnRvcC10YWInLCB7XHJcblx0XHRcdFx0XHRkZXRhaWw6IHtcclxuXHRcdFx0XHRcdFx0dGFiICAgOiB0YWJfaWQsXHJcblx0XHRcdFx0XHRcdG5hdl9pZDogKG5hdiAmJiBuYXYuaWQpID8gU3RyaW5nKCBuYXYuaWQgKSA6ICcnXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApXHJcblx0XHRcdCk7XHJcblx0XHR9IGNhdGNoICggX2UzICkge31cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgY3VycmVudGx5IGFjdGl2ZSB0b3AgdGFiIGlkIGZyb20gdGhlIG5hdiBjb250YWluZXIuXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19iZmJfcHJldmlld19fZ2V0X2FjdGl2ZV90b3BfdGFiX2lkKCkge1xyXG5cdFx0dmFyIG5hdiA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fdG9wX2hvcmlzb250YWxfbmF2JyApO1xyXG5cdFx0aWYgKCAhbmF2ICkge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmF2LmdldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aXZlLXRhYicgKSB8fCAnJztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN5bmMgcHJldmlldyBcIm1vZGVcIiB3aXRoIGN1cnJlbnRseSBhY3RpdmUgdG9wIHRhYi5cclxuXHQgKlxyXG5cdCAqIFJ1bGVzOlxyXG5cdCAqIC0gcHJldmlld190YWIgPT4gZW5hYmxlIHByZXZpZXcgbW9kZSAoYnV0dG9ucyBtYWtlIHNlbnNlKVxyXG5cdCAqIC0gYW55IG90aGVyIHRhYiA9PiBkaXNhYmxlIHByZXZpZXcgbW9kZSArIHJlc2V0IGJ1c3kgc3RhdGVzXHJcblx0ICpcclxuXHQgKiBJTVBPUlRBTlQ6XHJcblx0ICogLSBXZSBkbyBOT1QgY2hhbmdlIHRoZSBhY3RpdmUgdG9wIHRhYiBoZXJlIChubyBwYW5lbCBzd2l0Y2hpbmcpLlxyXG5cdCAqICAgV2Ugb25seSBzeW5jIHByZXZpZXcgVUkgbW9kZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWJfaWRcclxuXHQgKiBAcGFyYW0ge3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50fSBjbGllbnRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19zeW5jX21vZGVfdG9fdGFiKHRhYl9pZCwgY2xpZW50KSB7XHJcblxyXG5cdFx0dGFiX2lkID0gU3RyaW5nKCB0YWJfaWQgfHwgJycgKTtcclxuXHJcblx0XHRpZiAoICFjbGllbnQgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICdwcmV2aWV3X3RhYicgPT09IHRhYl9pZCApIHtcclxuXHRcdFx0Y2xpZW50LnNldF9tb2RlKCAncHJldmlldycgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIExlYXZpbmcgcHJldmlldyAtPiBzb2Z0LWNhbmNlbCBidXN5IHN0YXRlIGFuZCBoaWRlIHByZXZpZXctc3BlY2lmaWMgdG9vbGJhci5cclxuXHRcdGlmICggdHlwZW9mIGNsaWVudC5yZXNldF9idXN5X3N0YXRlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRjbGllbnQucmVzZXRfYnVzeV9zdGF0ZSgpO1xyXG5cdFx0fVxyXG5cdFx0Y2xpZW50LnNldF9tb2RlKCAnYnVpbGRlcicgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJpbmQgdG8gdG9wLXRhYiBzd2l0Y2ggZXZlbnQgZW1pdHRlZCBieSBiZmItdG9wLXRhYnMuanMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3dwYmNfYmZiX3ByZXZpZXdfY2xpZW50fSBjbGllbnRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9wcmV2aWV3X19iaW5kX3RvcF90YWJfZXZlbnRzKGNsaWVudCkge1xyXG5cclxuXHRcdC8vIFN5bmMgaW1tZWRpYXRlbHkgKGluIGNhc2UgZXZlbnQgYWxyZWFkeSBmaXJlZCBiZWZvcmUgdGhpcyBzY3JpcHQgaW5pdCkuXHJcblx0XHR3cGJjX2JmYl9wcmV2aWV3X19zeW5jX21vZGVfdG9fdGFiKCB3cGJjX2JmYl9wcmV2aWV3X19nZXRfYWN0aXZlX3RvcF90YWJfaWQoKSwgY2xpZW50ICk7XHJcblxyXG5cdFx0Ly8gUmVhY3QgdG8gZnV0dXJlIHRhYiBjaGFuZ2VzLlxyXG5cdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnd3BiYzpiZmI6dG9wLXRhYicsIGZ1bmN0aW9uIChldikge1xyXG5cdFx0XHR2YXIgZGV0ICAgICA9IChldiAmJiBldi5kZXRhaWwpID8gZXYuZGV0YWlsIDoge307XHJcblx0XHRcdHZhciB0YWJfaWQgID0gZGV0LnRhYiA/IFN0cmluZyggZGV0LnRhYiApIDogJyc7XHJcblx0XHRcdHZhciBuYXZfaWQgID0gZGV0Lm5hdl9pZCA/IFN0cmluZyggZGV0Lm5hdl9pZCApIDogJyc7XHJcblx0XHRcdHZhciBwcmV2X2lkID0gZGV0LnByZXZfdGFiID8gU3RyaW5nKCBkZXQucHJldl90YWIgKSA6ICcnO1xyXG5cclxuXHRcdFx0Ly8gSWYgdXNlciBzd2l0Y2hlZCB0byBwcmV2aWV3X3RhYiBpbiB0aGUgTUFJTiB0b3AgbmF2LFxyXG5cdFx0XHQvLyByZW1lbWJlciB3aGF0IHRhYiB0aGV5IGNhbWUgZnJvbS5cclxuXHRcdFx0aWYgKCBuYXZfaWQgPT09IFRPUF9OQVZfSUQgJiYgdGFiX2lkID09PSAncHJldmlld190YWInICYmIHByZXZfaWQgJiYgcHJldl9pZCAhPT0gJ3ByZXZpZXdfdGFiJyApIHtcclxuXHRcdFx0XHRyZXR1cm5fdGFiX2lkID0gcHJldl9pZDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0d3BiY19iZmJfcHJldmlld19fc3luY19tb2RlX3RvX3RhYiggdGFiX2lkLCBjbGllbnQgKTtcclxuXHRcdH0gKTtcclxuXHJcblx0fVxyXG5cclxuXHJcblx0Ly8gLS0gQmluZCB8IEluaXQgb24gTG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgVE9QX05BVl9JRCA9ICd3cGJjX2JmYl9fdG9wX2hvcmlzb250YWxfbmF2JztcclxuXHR2YXIgcmV0dXJuX3RhYl9pZCA9ICdidWlsZGVyX3RhYic7XHJcblxyXG5cdGZ1bmN0aW9uIHJlbWVtYmVyX3JldHVybl90YWJfZnJvbV9kb20oKSB7XHJcblx0XHR2YXIgY3VyID0gd3BiY19iZmJfcHJldmlld19fZ2V0X2FjdGl2ZV90b3BfdGFiX2lkKCk7XHJcblx0XHRpZiAoY3VyICYmIGN1ciAhPT0gJ3ByZXZpZXdfdGFiJykge1xyXG5cdFx0XHRyZXR1cm5fdGFiX2lkID0gY3VyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3JldHVybl90YWJfaWQoKSB7XHJcblx0XHR2YXIgdCA9IFN0cmluZyhyZXR1cm5fdGFiX2lkIHx8ICcnKS50cmltKCk7XHJcblx0XHRpZiAoIXQgfHwgdCA9PT0gJ3ByZXZpZXdfdGFiJykgdCA9ICdidWlsZGVyX3RhYic7XHJcblx0XHRyZXR1cm4gdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEF1dG8taW5pdCBwcmV2aWV3IGNsaWVudCBvbiBCdWlsZGVyIHBhZ2UgYW5kIHdpcmUgdG9wIHRvb2xiYXIgYnV0dG9ucy5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9pbml0X3ByZXZpZXdfY2xpZW50KCkge1xyXG5cdFx0dmFyIHJvb3QgPSBkLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1wcmV2aWV3LXJvb3Q9XCIxXCJdJyApO1xyXG5cclxuXHRcdGlmICggIXJvb3QgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgY2xpZW50ID0gbmV3IHdwYmNfYmZiX3ByZXZpZXdfY2xpZW50KCByb290ICk7XHJcblxyXG5cdFx0aWYgKCAhdy5XUEJDX0JGQl9QcmV2aWV3ICkge1xyXG5cdFx0XHR3LldQQkNfQkZCX1ByZXZpZXcgPSB7XHJcblx0XHRcdFx0Y2xpZW50OiBjbGllbnQsXHJcblxyXG5cdFx0XHRcdHNob3dfcHJldmlldzogZnVuY3Rpb24gKG9wdHMpIHtcclxuXHRcdFx0XHRcdHZhciBvcHQgPSBvcHRzIHx8IHt9O1xyXG5cdFx0XHRcdFx0dmFyIHNyYyA9IG9wdC5zb3VyY2VfYnV0dG9uIHx8IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hlcmUgd2Ugd2VyZSBCRUZPUkUgc3dpdGNoaW5nIHRvIHByZXZpZXcuXHJcblx0XHRcdFx0XHRyZW1lbWJlcl9yZXR1cm5fdGFiX2Zyb21fZG9tKCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhIHdwYmNfYmZiX3ByZXZpZXdfX2lzX3ByZXZpZXdfdGFiX2xpbmsoIHNyYyApICkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2JmYl9fYWN0aXZhdGVfcGFuZWxfdGFiKCAncHJldmlld190YWInICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gRW5hYmxlIHByZXZpZXcgbW9kZSBVSSAoc2hvd3MgcmVmcmVzaC9iYWNrIGJ1dHRvbnMgZXRjKS5cclxuXHRcdFx0XHRcdGNsaWVudC5zZXRfbW9kZSggJ3ByZXZpZXcnICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSU1QT1JUQU5UOiBBbHdheXMgcmVnZW5lcmF0ZSB3aGVuIHNob3dfcHJldmlldygpIGlzIGNhbGxlZCAoUHJldmlldyB0YWIgY2xpY2sgaW5jbHVkZWQpLlxyXG5cdFx0XHRcdFx0Y2xpZW50LnVwZGF0ZV9wcmV2aWV3KCB7IHNvdXJjZV9idXR0b246IHNyYyB9ICk7XHJcblx0XHRcdFx0fSxcclxuXHJcblxyXG5cdFx0XHRcdHNob3dfYnVpbGRlcjogZnVuY3Rpb24gKG9wdHMpIHtcclxuXHRcdFx0XHRcdHZhciBvcHQgPSBvcHRzIHx8IHt9O1xyXG5cdFx0XHRcdFx0dmFyIHNyYyA9IG9wdC5zb3VyY2VfYnV0dG9uIHx8IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBjbGllbnQgJiYgdHlwZW9mIGNsaWVudC5yZXNldF9idXN5X3N0YXRlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRjbGllbnQucmVzZXRfYnVzeV9zdGF0ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBiYWNrX3RvID0gZ2V0X3JldHVybl90YWJfaWQoKTtcclxuXHJcblx0XHRcdFx0XHQvLyBJZiBCYWNrIGJ1dHRvbiBpdHNlbGYgaXMgbm90IGEgcmVhbCB0YWIgbGluayAtPiBqdXN0IGFjdGl2YXRlIHJlbWVtYmVyZWQgdGFiLlxyXG5cdFx0XHRcdFx0Ly8gSWYgYWN0aXZhdGlvbiBmYWlscyAodGFiIHJlbW92ZWQpLCBmYWxsYmFjayB0byBidWlsZGVyX3RhYi5cclxuXHRcdFx0XHRcdGlmICggISB3cGJjX2JmYl9wcmV2aWV3X19pc19idWlsZGVyX3RhYl9saW5rKCBzcmMgKSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAhIHdwYmNfYmZiX19hY3RpdmF0ZV9wYW5lbF90YWIoIGJhY2tfdG8gKSApIHtcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2JmYl9fYWN0aXZhdGVfcGFuZWxfdGFiKCAnYnVpbGRlcl90YWInICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjbGllbnQuc2V0X21vZGUoICdidWlsZGVyJyApO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdHNob3dfYWR2YW5jZWRfdGFiOiBmdW5jdGlvbiAob3B0cykge1xyXG5cdFx0XHRcdFx0dmFyIG9wdCA9IG9wdHMgfHwge307XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBjbGllbnQgJiYgdHlwZW9mIGNsaWVudC5yZXNldF9idXN5X3N0YXRlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRjbGllbnQucmVzZXRfYnVzeV9zdGF0ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0d3BiY19iZmJfX2FjdGl2YXRlX3BhbmVsX3RhYiggJ2FkdmFuY2VkX3RhYicgKTtcclxuXHRcdFx0XHRcdGNsaWVudC5zZXRfbW9kZSggJ2J1aWxkZXInICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTGlzdGVuIGZvciB0b3AtdGFiIGNoYW5nZXMgYW5kIHN5bmMgcHJldmlldyBtb2RlIGF1dG9tYXRpY2FsbHkuXHJcblx0XHR3cGJjX2JmYl9wcmV2aWV3X19iaW5kX3RvcF90YWJfZXZlbnRzKCBjbGllbnQgKTtcclxuXHJcblx0XHQvLyBXaGVuIGEgZm9ybSBpcyBsb2FkZWQgdmlhIEFKQVgsIHJlZnJlc2ggcHJldmlldyAob25seSBpZiBwcmV2aWV3IG1vZGUgaXMgYWN0aXZlKS5cclxuXHRcdHdwYmNfYmZiX3ByZXZpZXdfX2JpbmRfZm9ybV9hamF4X2xvYWRlZF9ldmVudHMoIGNsaWVudCApO1xyXG5cclxuXHRcdHdwYmNfYmZiX2JpbmRfdG9wX3Rvb2xiYXJfYnV0dG9ucyggY2xpZW50ICk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQmluZCB0b3AgdG9vbGJhciBCdWlsZGVyIC8gUHJldmlldyAvIFJlZnJlc2ggYnV0dG9ucy5cclxuXHQgKiBTdXBwb3J0cyBtdWx0aXBsZSBlbGVtZW50cyBmb3IgZWFjaCBhY3Rpb24gKHRvb2xiYXIgYnV0dG9ucywgdG9wIHRhYnMsIGV0Yy4pXHJcblx0ICogdmlhIGRhdGEtd3BiYy1iZmItdG9wLSotYnRuPVwiMVwiLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX2JpbmRfdG9wX3Rvb2xiYXJfYnV0dG9ucyhjbGllbnQpIHtcclxuXHJcblx0XHR2YXIgYnRuX3ByZXZpZXdfbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLXdwYmMtYmZiLXRvcC1wcmV2aWV3LWJ0bj1cIjFcIl0nICk7XHJcblx0XHR2YXIgYnRuX2J1aWxkZXJfbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLXdwYmMtYmZiLXRvcC1idWlsZGVyLWJ0bj1cIjFcIl0nICk7XHJcblx0XHR2YXIgYnRuX3JlZnJlc2hfbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLXdwYmMtYmZiLXRvcC1yZWZyZXNoLWJ0bj1cIjFcIl0nICk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gZm9yX2VhY2hfbm9kZShsaXN0LCBjYikge1xyXG5cdFx0XHRpZiAoICFsaXN0IHx8ICFsaXN0Lmxlbmd0aCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggbGlzdCwgZnVuY3Rpb24gKGVsKSB7XHJcblx0XHRcdFx0aWYgKCBlbCAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRjYiggZWwgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3JfZWFjaF9ub2RlKCBidG5fcHJldmlld19saXN0LCBmdW5jdGlvbiAoYnRuX3ByZXZpZXcpIHtcclxuXHJcblx0XHRcdC8vIFByZXZlbnQgZG91YmxlIGJpbmRpbmcgaWYgdGhpcyBzY3JpcHQgcnVucyB0d2ljZS5cclxuXHRcdFx0aWYgKCBidG5fcHJldmlldy5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWJvdW5kJyApID09PSAnMScgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGJ0bl9wcmV2aWV3LnNldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItYm91bmQnLCAnMScgKTtcclxuXHJcblx0XHRcdGJ0bl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuXHRcdFx0XHRpZiAoIHcuV1BCQ19CRkJfUHJldmlldyAmJiB0eXBlb2Ygdy5XUEJDX0JGQl9QcmV2aWV3LnNob3dfcHJldmlldyA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdHcuV1BCQ19CRkJfUHJldmlldy5zaG93X3ByZXZpZXcoIHtcclxuXHRcdFx0XHRcdFx0c291cmNlX2J1dHRvbjogYnRuX3ByZXZpZXdcclxuXHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH0gKTtcclxuXHJcblx0XHRmb3JfZWFjaF9ub2RlKCBidG5fcmVmcmVzaF9saXN0LCBmdW5jdGlvbiAoYnRuX3JlZnJlc2gpIHtcclxuXHJcblx0XHRcdGlmICggYnRuX3JlZnJlc2guZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1ib3VuZCcgKSA9PT0gJzEnICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRidG5fcmVmcmVzaC5zZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWJvdW5kJywgJzEnICk7XHJcblxyXG5cdFx0XHRidG5fcmVmcmVzaC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0aWYgKCB3LldQQkNfQkZCX1ByZXZpZXcgJiYgdHlwZW9mIHcuV1BCQ19CRkJfUHJldmlldy5zaG93X3ByZXZpZXcgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHR3LldQQkNfQkZCX1ByZXZpZXcuc2hvd19wcmV2aWV3KCB7XHJcblx0XHRcdFx0XHRcdHVwZGF0ZSAgICAgICA6IHRydWUsXHJcblx0XHRcdFx0XHRcdHNvdXJjZV9idXR0b246IGJ0bl9yZWZyZXNoXHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0Zm9yX2VhY2hfbm9kZSggYnRuX2J1aWxkZXJfbGlzdCwgZnVuY3Rpb24gKGJ0bl9idWlsZGVyKSB7XHJcblxyXG5cdFx0XHRpZiAoIGJ0bl9idWlsZGVyLmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItYm91bmQnICkgPT09ICcxJyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0YnRuX2J1aWxkZXIuc2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1ib3VuZCcsICcxJyApO1xyXG5cclxuXHRcdFx0YnRuX2J1aWxkZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdGlmICggdy5XUEJDX0JGQl9QcmV2aWV3ICYmIHR5cGVvZiB3LldQQkNfQkZCX1ByZXZpZXcuc2hvd19idWlsZGVyID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0dy5XUEJDX0JGQl9QcmV2aWV3LnNob3dfYnVpbGRlciggeyBzb3VyY2VfYnV0dG9uOiBidG5fYnVpbGRlciB9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHJcblx0aWYgKCBkLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgZC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnICkge1xyXG5cdFx0c2V0VGltZW91dCggd3BiY19iZmJfaW5pdF9wcmV2aWV3X2NsaWVudCwgMCApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRkLmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgd3BiY19iZmJfaW5pdF9wcmV2aWV3X2NsaWVudCApO1xyXG5cdH1cclxuXHJcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsVUFBVUEsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDaEIsWUFBWTs7RUFFWjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0VBQ0MsSUFBSUMsR0FBRyxHQUFJRixDQUFDLENBQUNHLEtBQUssSUFBSUgsQ0FBQyxDQUFDRyxLQUFLLENBQUNELEdBQUcsR0FBSUYsQ0FBQyxDQUFDRyxLQUFLLENBQUNELEdBQUcsR0FBRztJQUNsREUsR0FBRyxFQUFFLFNBQUFBLENBQUEsRUFBWSxDQUFDLENBQUM7SUFDbkJDLEtBQUssRUFBRSxTQUFBQSxDQUFBLEVBQVksQ0FBQztFQUNyQixDQUFDOztFQUVEO0FBQ0Q7QUFDQTtBQUNBO0VBQ0MsTUFBTUMsdUJBQXVCLENBQUM7SUFFN0I7QUFDRjtBQUNBO0lBQ0VDLFdBQVdBLENBQUNDLE9BQU8sRUFBRTtNQUNwQixJQUFJLENBQUNBLE9BQU8sR0FBR0EsT0FBTztNQUN0QixJQUFJLENBQUNDLE1BQU0sR0FBSUQsT0FBTyxDQUFDRSxhQUFhLENBQUUsb0NBQXFDLENBQUM7TUFDNUUsSUFBSSxDQUFDQyxNQUFNLEdBQUlILE9BQU8sQ0FBQ0UsYUFBYSxDQUFFLG9DQUFxQyxDQUFD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