@agilemotion/oui-react-js 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,6 +35,12 @@ const BaseField = props => {
35
35
  const initialValueBound = _react.default.useRef(false);
36
36
  const ref = _react.default.useRef(null);
37
37
  const valid = _react.default.useRef(false);
38
+ // Memo of the last (currentValue, required, markers) tuple + its result.valid.
39
+ // doValidation short-circuits when the inputs are unchanged so repeated reads
40
+ // of @#{form}.value (which iterates fields and calls validate on each in
41
+ // Form.jsx get value()) don't keep firing setErrorMessage/setHasError and
42
+ // re-render-loop the whole form.
43
+ const lastValidation = _react.default.useRef(null);
38
44
  _react.default.useEffect(() => {
39
45
  initialValueBound.current = false;
40
46
  bind();
@@ -78,7 +84,11 @@ const BaseField = props => {
78
84
  }, [required]);
79
85
  const doValidation = (values, currentValue) => {
80
86
  if (config) {
81
- console.log("*********[BaseField.doValidation] id=", config.id, "required=", required, "markers=", _ApplicationManager.default.isFormMarkersEnabled(), "currentValue=", currentValue);
87
+ const markers = _ApplicationManager.default.isFormMarkersEnabled();
88
+ const last = lastValidation.current;
89
+ if (last !== null && last.currentValue === currentValue && last.required === required && last.markers === markers) {
90
+ return last.valid;
91
+ }
82
92
  let path = props.form().getValuePath(config.dataBinding || config.id);
83
93
  let result = {
84
94
  valid: true
@@ -92,13 +102,29 @@ const BaseField = props => {
92
102
  if (result.valid) {
93
103
  result = _Utils.default.validateField(path.valueProperty, required, path.valueObject, currentValue, config.validator);
94
104
  }
95
- console.log("*********[BaseField.doValidation] id=", config.id, "result.valid=", result.valid, "result.message=", result.message, "result.forceMarker=", result.forceMarker);
96
- setErrorMessage(_ApplicationManager.default.isFormMarkersEnabled() || result.forceMarker ? result.message : '');
97
- setHasError(!result.valid && (_ApplicationManager.default.isFormMarkersEnabled() || result.forceMarker));
98
- valid.current = result.valid && (_ApplicationManager.default.isFormMarkersEnabled() || result.forceMarker);
99
- if (_ApplicationManager.default.isFormMarkersEnabled()) {
105
+ setErrorMessage(markers || result.forceMarker ? result.message : '');
106
+ setHasError(!result.valid && (markers || result.forceMarker));
107
+ valid.current = result.valid && (markers || result.forceMarker);
108
+ if (markers) {
100
109
  props.form().setFieldError(config.id, typeof result.message === 'undefined' ? null : result.message);
101
110
  }
111
+ lastValidation.current = {
112
+ currentValue,
113
+ required,
114
+ markers,
115
+ valid: result.valid
116
+ };
117
+
118
+ // Publish to the form's validity register. Single source of truth
119
+ // for "is this field valid?" — form.value reads from here without
120
+ // calling back into the field (kills the bi-directional chain).
121
+ if (typeof props.form === 'function' && typeof props.form().setFieldValidity === 'function') {
122
+ props.form().setFieldValidity(config.id || config.dataBinding, {
123
+ valid: result.valid,
124
+ message: result.message,
125
+ forceMarker: result.forceMarker
126
+ });
127
+ }
102
128
  return result.valid;
103
129
  }
104
130
  return false;
@@ -146,6 +172,18 @@ const BaseField = props => {
146
172
  setErrorMessage(field.error);
147
173
  }
148
174
  }
175
+ // Intentionally do NOT validate on mount: valueRef.current is not
176
+ // yet bound from the form's master data at this point — bind()
177
+ // runs in a later render cycle via the [valueObject] useEffect.
178
+ // Validating here would mark every field-with-master-value as
179
+ // invalid (currentValue=null), permanently flipping form.value to
180
+ // null. Register stays empty for this field until either user
181
+ // interaction (handleChange → validateField → doValidation →
182
+ // setFieldValidity) or an explicit form.api.validateAll() runs.
183
+ // form.value treats empty-register as "optimistically valid" — so
184
+ // any save flow MUST call form.api.validateAll() before reading
185
+ // form.value, or invalid data will pass through silently.
186
+ loadingRef.current = false;
149
187
  }
150
188
  });
151
189
  _react.default.useEffect(() => {
@@ -341,4 +379,4 @@ const BaseField = props => {
341
379
  }))) : null;
342
380
  };
343
381
  exports.BaseField = BaseField;
344
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9PYnNlcnZhYmxlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9FdmVudFR5cGUiLCJfRHluYW1pY0pTIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQmFzZUZpZWxkIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUyIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIlJlYWN0IiwidXNlU3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvck1lc3NhZ2UiLCJ2YWx1ZU9iamVjdCIsInNldFZhbHVlT2JqZWN0IiwidmFsdWVQcm9wZXJ0eSIsInNldFZhbHVlUHJvcGVydHkiLCJsb2FkaW5nUmVmIiwidXNlUmVmIiwiY29uZmlnIiwic2V0Q29uZmlnIiwidmFsdWUiLCJzZXRWYWx1ZSIsIlV0aWxzIiwiaXNOdWxsIiwidmFsdWVSZWYiLCJzZWxlY3RPcHRpb25zIiwic2V0U2VsZWN0T3B0aW9ucyIsImRpc2FibGVkIiwic2V0RGlzYWJsZWQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInJlcXVpcmVkIiwic2V0UmVxdWlyZWQiLCJtaW5EYXRlIiwic2V0TWluRGF0ZSIsIm1heERhdGUiLCJzZXRNYXhEYXRlIiwicmVzZXRTd2l0Y2giLCJzZXRSZXNldFN3aXRjaCIsInZhbGlkYXRlT25DaGFuZ2UiLCJpbml0aWFsVmFsdWVCb3VuZCIsInJlZiIsInZhbGlkIiwidXNlRWZmZWN0IiwiY3VycmVudCIsImJpbmQiLCJib3VuZFZhbHVlIiwiZmllbGRUeXBlIiwiaWQiLCJ2YWx1ZVBhcnNlciIsImZvcm0iLCJ2YWxpZGF0ZVBhcmVudCIsImRhdGFCaW5kaW5nIiwiZG9WYWxpZGF0aW9uIiwidmFsdWVzIiwiY3VycmVudFZhbHVlIiwiY29uc29sZSIsImxvZyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwicGF0aCIsImdldFZhbHVlUGF0aCIsInJlc3VsdCIsInZhbGlkYXRvciIsInNjcmlwdCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHRPYmplY3QiLCJjb25jYXQiLCJtZXNzYWdlIiwidmFsaWRhdGVGaWVsZCIsImZvcmNlTWFya2VyIiwic2V0RmllbGRFcnJvciIsImhhbmRsZSIsImFwaSIsInBhcnNlZENvbmZpZyIsInBhcnNlQ29uZmlnIiwidmlld0lkIiwiZXZlbnRNYW5hZ2VyIiwiYWRkU3Vic2NyaXB0aW9ucyIsImV2ZW50SGFuZGxpbmdDb25maWciLCJhZGRTeXN0ZW1TdWJzY3JpcHRpb25zIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImV2ZW50IiwiRXZlbnQiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJDT01QT05FTlRfTE9BRCIsInNjcmlwdFZhbHVlIiwiaXNFeHByZXNzaW9uIiwiZXhlY3V0ZVNjcmlwdCIsInJlcGxhY2UiLCJ2YWwiLCJpbnN0YW5jZVR5cGUiLCJoYW5kbGVDaGFuZ2UiLCJmaWVsZCIsImFkZEZpZWxkIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJlcnJvciIsImxlbmd0aCIsImNsZWFyQ29tcG9uZW50RXZlbnRMaXN0ZW5lcnMiLCJyZW1vdmVGaWVsZCIsImhhbmRsZVZhbHVlQ2hhbmdlIiwibmV3VmFsdWUiLCJ2YWx1ZUNoYW5nZWQiLCJKU09OIiwic3RyaW5naWZ5Iiwic3BsaWNlIiwibmV3VmFsdWVFbGVtZW50IiwicHVzaCIsInNlbGVjdEl0ZW1DaGFuZ2UiLCJoYW5kbGVTZWxlY3RJdGVtQ2hhbmdlIiwic2VsZWN0T3B0aW9uIiwidmFsdWVDaGFuZ2VIYW5kbGVyIiwiVkFMVUVfQ0hBTkdFIiwidmFsaWRhdGUiLCJwYXJzZVZhbHVlIiwiaW5ib3VuZCIsInJvd3MiLCJyb3dzSGFuZGxlciIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwIiwiY2xlYXIiLCJjbGVhckhhbmRsZXIiLCJzY3JvbGxUbyIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsInZhbHVlQ2hhbmdlQ2FsbGJhY2siLCJoYW5kbGVMb2FkQ29tcGxldGUiLCJyZWZyZXNoIiwicmVxdWlyZWROZXdWYWwiLCJudWxsYWJsZSIsImlzUmVxdWlyZWQiLCJyZXNldCIsInNldEZpZWxkUmVxdWlyZWQiLCJuZXdWYWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJnZXRDaGlsZHJlbiIsImxvYWREYXRhIiwibG9hZERhdGFIYW5kbGVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImtleSIsInN0eWxlIiwidGV4dEFsaWduIiwibWFyZ2luTGVmdCIsImF0dHJpYnV0ZXMiLCJpbmRleCIsImRpc3BsYXkiLCJnZXRDb21wb25lbnRBdHRyaWJ1dGUiLCJjaGlsZHJlbiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9CYXNlRmllbGQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuLi8uLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuLi8uLi9ldmVudC9FdmVudCc7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgZHluYW1pY0pTIGZyb20gJy4uLy4uL0R5bmFtaWNKUyc7XG5cbmV4cG9ydCBjb25zdCBCYXNlRmllbGQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFt2YWx1ZU9iamVjdCwgc2V0VmFsdWVPYmplY3RdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt2YWx1ZVByb3BlcnR5LCBzZXRWYWx1ZVByb3BlcnR5XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IGxvYWRpbmdSZWYgPSBSZWFjdC51c2VSZWYodHJ1ZSk7XG4gICAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIC8vIFRPRE8gOiBSZXBsYWNlIHRoZSBzdGF0ZSB2YWx1ZSB3aXRoIHRoZSB2YWx1ZVJlZiBiZWxvdy4gVGhlIHN0YXRlIHZhbHVlIGlzIG9jY2F0aW9uYWx5IG5vdCBhdmFpbGFibGUgaW4gdGltZSBmb3IgZXZlbnQgc2NyaXB0c1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZSkgPyBwcm9wcy52YWx1ZSA6IG51bGwpO1xuICAgIC8vIFRPRE8gOiBSZXBsYWNlIHRoZSBzdGF0ZSB2YWx1ZSB3aXRoIHRoaXMgcmVmIGZvciB0aGUgcmVhc29uIG1lbnNpb25lZCBhYm92ZVxuICAgIGNvbnN0IHZhbHVlUmVmID0gUmVhY3QudXNlUmVmKCFVdGlscy5pc051bGwocHJvcHMudmFsdWUpID8gcHJvcHMudmFsdWUgOiBudWxsKTtcbiAgICBjb25zdCBbc2VsZWN0T3B0aW9ucywgc2V0U2VsZWN0T3B0aW9uc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2Rpc2FibGVkLCBzZXREaXNhYmxlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtyZXF1aXJlZCwgc2V0UmVxdWlyZWRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW21pbkRhdGUsIHNldE1pbkRhdGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW21heERhdGUsIHNldE1heERhdGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3Jlc2V0U3dpdGNoLCBzZXRSZXNldFN3aXRjaF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgdmFsaWRhdGVPbkNoYW5nZSA9IFJlYWN0LnVzZVJlZigpO1xuICAgIGNvbnN0IGluaXRpYWxWYWx1ZUJvdW5kID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgdmFsaWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBiaW5kKCk7XG4gICAgfSwgW3ZhbHVlT2JqZWN0XSk7XG5cbiAgICBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgICBsZXQgYm91bmRWYWx1ZSA9IHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldO1xuICAgICAgICBpZiAoYm91bmRWYWx1ZSAmJiAhaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCkge1xuICAgICAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0xPT0tVUCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJvdW5kVmFsdWUgfHwgVXRpbHMuaXNOdWxsKGJvdW5kVmFsdWUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy52YWx1ZVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUocHJvcHMudmFsdWVQYXJzZXIoYm91bmRWYWx1ZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoYm91bmRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhbHVlUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKHByb3BzLnZhbHVlUGFyc2VyKGJvdW5kVmFsdWUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShib3VuZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGJpbmQoKTtcbiAgICB9LCBbdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV1dKTtcblxuICAgIC8vIENoYW5nZSB0aGUgcmVxdWlyZWQgdmFsdWUgYW5kIHJlLXZhbGlkYXRlIGZpZWxkIGlmIG5lY2Vzc2FyeVxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGNvbmZpZykgJiYgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAudmFsaWRhdGVQYXJlbnQoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgZG9WYWxpZGF0aW9uKHByb3BzLnZhbHVlcywgdmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IG51bGw7XG4gICAgfSwgW3JlcXVpcmVkXSk7XG5cbiAgICBjb25zdCBkb1ZhbGlkYXRpb24gPSAodmFsdWVzLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgaWYoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBcIioqKioqKioqKltCYXNlRmllbGQuZG9WYWxpZGF0aW9uXSBpZD1cIiwgY29uZmlnLmlkLFxuICAgICAgICAgICAgICAgIFwicmVxdWlyZWQ9XCIsIHJlcXVpcmVkLFxuICAgICAgICAgICAgICAgIFwibWFya2Vycz1cIiwgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCksXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50VmFsdWU9XCIsIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IHBhdGggPSBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWVQYXRoKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt2YWxpZDogdHJ1ZX07XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yKSAmJiAhVXRpbHMuaXNOdWxsKGNvbmZpZy52YWxpZGF0b3Iuc2NyaXB0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0T2JqZWN0KGAke2NvbmZpZy5pZH1WYWxpZGF0b3JgLCBjb25maWcudmFsaWRhdG9yLnNjcmlwdCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZSA/IHJlc3VsdC5tZXNzYWdlIDogY29uZmlnLnZhbGlkYXRvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFV0aWxzLnZhbGlkYXRlRmllbGQocGF0aC52YWx1ZVByb3BlcnR5LCByZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCwgY3VycmVudFZhbHVlLCBjb25maWcudmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgXCIqKioqKioqKipbQmFzZUZpZWxkLmRvVmFsaWRhdGlvbl0gaWQ9XCIsIGNvbmZpZy5pZCxcbiAgICAgICAgICAgICAgICBcInJlc3VsdC52YWxpZD1cIiwgcmVzdWx0LnZhbGlkLFxuICAgICAgICAgICAgICAgIFwicmVzdWx0Lm1lc3NhZ2U9XCIsIHJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIFwicmVzdWx0LmZvcmNlTWFya2VyPVwiLCByZXN1bHQuZm9yY2VNYXJrZXJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSB8fCByZXN1bHQuZm9yY2VNYXJrZXIgPyByZXN1bHQubWVzc2FnZSA6ICcnKTtcbiAgICAgICAgICAgIHNldEhhc0Vycm9yKCFyZXN1bHQudmFsaWQgJiYgKGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpIHx8IHJlc3VsdC5mb3JjZU1hcmtlcikpO1xuICAgICAgICAgICAgdmFsaWQuY3VycmVudCA9IHJlc3VsdC52YWxpZCAmJiAoYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkgfHwgcmVzdWx0LmZvcmNlTWFya2VyKTtcblxuICAgICAgICAgICAgaWYgKGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRGaWVsZEVycm9yKGNvbmZpZy5pZCwgdHlwZW9mIHJlc3VsdC5tZXNzYWdlID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXN1bHQubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoY29uZmlnKSkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZENvbmZpZyA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKHBhcnNlZENvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnLCBwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyhwcm9wcy52aWV3SWQsIHBhcnNlZENvbmZpZyk7XG4gICAgICAgICAgICBzZXRDb25maWcocGFyc2VkQ29uZmlnKTtcbiAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKSk7XG4gICAgICAgICAgICBzZXREaXNhYmxlZChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy5kaXNhYmxlZCwgcGFyc2VkQ29uZmlnLmlkLCBmYWxzZSkpO1xuXG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykgJiYgIVV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC5nZXRWYWx1ZVBhdGgoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgcHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVPYmplY3QocGF0aC52YWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVQcm9wZXJ0eShwYXRoLnZhbHVlUHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjcmlwdFZhbHVlID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihwcm9wcy5jb25maWcudmFsdWUpID9cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQocHJvcHMuY29uZmlnLmlkLnJlcGxhY2UoJy4nLCAnXycpICsgJ1ZhbHVlJywgcHJvcHMuY29uZmlnLnZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNjcmlwdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gc2NyaXB0VmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgPyBzY3JpcHRWYWx1ZS52YWx1ZSA6IHNjcmlwdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGFuZGxlQ2hhbmdlKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQsIHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZhbHVlcywgY29uZmlnXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSB0cnVlICYmICFVdGlscy5pc051bGwoY29uZmlnKSkge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmFkZEZpZWxkKGNvbmZpZy5pZCB8fCBjb25maWcuZGF0YUJpbmRpbmcsIHByb3BzLmhhbmRsZSwgcHJvcHMucGFyZW50SWQsIHByb3BzLmJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkgJiYgIVV0aWxzLmlzTnVsbChmaWVsZC5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRIYXNFcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKGZpZWxkLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5mb3JtKCkpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmNsZWFyQ29tcG9uZW50RXZlbnRMaXN0ZW5lcnMocHJvcHMuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUZpZWxkKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyB8fCBwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGhhbmRsZVZhbHVlQ2hhbmdlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIGluaXRpYWxWYWx1ZUJvdW5kLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBsZXQgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUgIT09IHZhbHVlUmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwobmV3VmFsdWUpICYmICFVdGlscy5pc051bGwodmFsdWVSZWYuY3VycmVudCkpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnU0VMRUNUJyB8fCBwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnTE9PS1VQJykge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCA9IG5ld1ZhbHVlLmlkICE9PSB2YWx1ZVJlZi5jdXJyZW50LmlkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnREFURScgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1RJTUUnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUgIT09IHZhbHVlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlUmVmLmN1cnJlbnQpICE9PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0dSSUQnICYmIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldKSB7XG4gICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XS5zcGxpY2UoMCwgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0ubGVuZ3RoKTtcblxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBuZXdWYWx1ZUVsZW1lbnQgb2YgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0ucHVzaChuZXdWYWx1ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkID0gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmhhbmRsZUNoYW5nZSghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZykgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBpZCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlQ2hhbmdlZCkge1xuICAgICAgICAgICAgbGV0IGlkID0gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgLy9hcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnModHJ1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0SXRlbUNoYW5nZSA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAuaGFuZGxlU2VsZWN0SXRlbUNoYW5nZShpZCwgc2VsZWN0T3B0aW9ucywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKHNlbGVjdEl0ZW1DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBzZWxlY3RJdGVtQ2hhbmdlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0T3B0aW9uIG9mIHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbi5pZCA9PT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gc2VsZWN0T3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5oYW5kbGVDaGFuZ2UoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcpID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogaWQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcihuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuVkFMVUVfQ0hBTkdFLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZXMsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb1ZhbGlkYXRpb24odmFsdWVzLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcnNlVmFsdWU6ICh2YWx1ZSwgaW5ib3VuZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlUGFyc2VyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudmFsdWVQYXJzZXIodmFsdWUsIGluYm91bmQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgdmFsaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkLmN1cnJlbnQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHJvd3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnJvd3NIYW5kbGVyID8gcHJvcHMucm93c0hhbmRsZXIoKSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkdyb3VwOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFVdGlscy5pc051bGwoY29uZmlnLnZhbGlkYXRvcikgPyBjb25maWcudmFsaWRhdG9yLmdyb3VwIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNsZWFySGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuY2xlYXJIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjcm9sbFRvOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbCh2YWx1ZVByb3BlcnR5KSAmJiAhVXRpbHMuaXNOdWxsKHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZVBhcnNlcikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudmFsdWVQYXJzZXIodmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0sIGZhbHNlKSA6IHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudmFsdWVQYXJzZXIgPyBwcm9wcy52YWx1ZVBhcnNlcih2YWx1ZSwgZmFsc2UpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlKHZhbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUNhbGxiYWNrKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHNldERpc2FibGVkKGRpc2FibGVkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgdmlzaWJsZSh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVMb2FkQ29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcuZGlzYWJsZWQsIHBhcnNlZENvbmZpZy5pZCkpO1xuICAgICAgICAgICAgICAgIGxldCByZXF1aXJlZE5ld1ZhbCA9ICFVdGlscy5pc051bGwocGFyc2VkQ29uZmlnLnZhbGlkYXRvcikgP1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJzZWRDb25maWcuaWQsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIHx8IFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyc2VkQ29uZmlnLmlkLCBmYWxzZSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9uQ2hhbmdlLmN1cnJlbnQgPSByZXF1aXJlZCAhPT0gbnVsbCAmJiByZXF1aXJlZCAhPT0gcmVxdWlyZWROZXdWYWwgJiYgbG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXRSZXF1aXJlZChyZXF1aXJlZE5ld1ZhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgcmVxdWlyZWQoaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKGlzUmVxdWlyZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBtaW5EYXRlKG1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRNaW5EYXRlKG1pbkRhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBtYXhEYXRlKG1heERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRNYXhEYXRlKG1heERhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBzZWxlY3RPcHRpb25zKHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RPcHRpb25zKHNlbGVjdE9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0KCkge1xuICAgICAgICAgICAgICAgIHNldFJlc2V0U3dpdGNoKCFyZXNldFN3aXRjaCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0RmllbGRSZXF1aXJlZChuZXdWYWwsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IHZhbGlkYXRlO1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKG5ld1ZhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q2hpbGRyZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5nZXRDaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvYWREYXRhKCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wcy5sb2FkRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMubG9hZERhdGFIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gY29uZmlnID9cbiAgICAgICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPVwiY29sLSotKlwiIGtleT17Y29uZmlnLmlkfSBzdHlsZT17e1xuICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ubWFyZ2luTGVmdCkgPyBwcm9wcy5jb25maWcuYXR0cmlidXRlcz8uc3R5bGU/Lm1hcmdpbkxlZnQgOlxuICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5pbmRleCA9PT0gMCA/IDAgOiAnOHB4JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICF2aXNpYmxlIHx8IFV0aWxzLmdldENvbXBvbmVudEF0dHJpYnV0ZShjb25maWcsICdoaWRkZW4nLCBmYWxzZSkgPT09IHRydWUgPyAnbm9uZScgOiAnYmxvY2snXG4gICAgICAgIH19PlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAge3Byb3BzLmNoaWxkcmVuKHtcbiAgICAgICAgICAgIG1pbkRhdGU6IG1pbkRhdGUsXG4gICAgICAgICAgICBtYXhEYXRlOiBtYXhEYXRlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgdmFsdWVPYmplY3Q6IHZhbHVlT2JqZWN0LFxuICAgICAgICAgICAgdmFsdWVQcm9wZXJ0eTogdmFsdWVQcm9wZXJ0eSxcbiAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2hhbmdlOiBoYW5kbGVWYWx1ZUNoYW5nZSxcbiAgICAgICAgICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICAgICAgICAgIHNldFNlbGVjdE9wdGlvbnM6IHNldFNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxuICAgICAgICAgICAgc2V0UmVzZXRTd2l0Y2g6IHNldFJlc2V0U3dpdGNoLFxuICAgICAgICAgICAgcmVzZXRTd2l0Y2g6IHJlc2V0U3dpdGNoLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgaGFzRXJyb3I6IGhhc0Vycm9yLFxuICAgICAgICAgICAgZG9WYWxpZGF0aW9uOiBkb1ZhbGlkYXRpb24sXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGxvYWRpbmdSZWY6IGxvYWRpbmdSZWZcbiAgICAgICAgfSl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDogbnVsbDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLG1CQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFBd0MsU0FBQUQsdUJBQUFRLENBQUEsV0FB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
382
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9PYnNlcnZhYmxlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9FdmVudFR5cGUiLCJfRHluYW1pY0pTIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQmFzZUZpZWxkIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUyIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIlJlYWN0IiwidXNlU3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvck1lc3NhZ2UiLCJ2YWx1ZU9iamVjdCIsInNldFZhbHVlT2JqZWN0IiwidmFsdWVQcm9wZXJ0eSIsInNldFZhbHVlUHJvcGVydHkiLCJsb2FkaW5nUmVmIiwidXNlUmVmIiwiY29uZmlnIiwic2V0Q29uZmlnIiwidmFsdWUiLCJzZXRWYWx1ZSIsIlV0aWxzIiwiaXNOdWxsIiwidmFsdWVSZWYiLCJzZWxlY3RPcHRpb25zIiwic2V0U2VsZWN0T3B0aW9ucyIsImRpc2FibGVkIiwic2V0RGlzYWJsZWQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInJlcXVpcmVkIiwic2V0UmVxdWlyZWQiLCJtaW5EYXRlIiwic2V0TWluRGF0ZSIsIm1heERhdGUiLCJzZXRNYXhEYXRlIiwicmVzZXRTd2l0Y2giLCJzZXRSZXNldFN3aXRjaCIsInZhbGlkYXRlT25DaGFuZ2UiLCJpbml0aWFsVmFsdWVCb3VuZCIsInJlZiIsInZhbGlkIiwibGFzdFZhbGlkYXRpb24iLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiYmluZCIsImJvdW5kVmFsdWUiLCJmaWVsZFR5cGUiLCJpZCIsInZhbHVlUGFyc2VyIiwiZm9ybSIsInZhbGlkYXRlUGFyZW50IiwiZGF0YUJpbmRpbmciLCJkb1ZhbGlkYXRpb24iLCJ2YWx1ZXMiLCJjdXJyZW50VmFsdWUiLCJtYXJrZXJzIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJsYXN0IiwicGF0aCIsImdldFZhbHVlUGF0aCIsInJlc3VsdCIsInZhbGlkYXRvciIsInNjcmlwdCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHRPYmplY3QiLCJjb25jYXQiLCJtZXNzYWdlIiwidmFsaWRhdGVGaWVsZCIsImZvcmNlTWFya2VyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVmFsaWRpdHkiLCJoYW5kbGUiLCJhcGkiLCJwYXJzZWRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImV2ZW50TWFuYWdlciIsImFkZFN1YnNjcmlwdGlvbnMiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJldmVudCIsIkV2ZW50IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiQ09NUE9ORU5UX0xPQUQiLCJzY3JpcHRWYWx1ZSIsImlzRXhwcmVzc2lvbiIsImV4ZWN1dGVTY3JpcHQiLCJyZXBsYWNlIiwidmFsIiwiaW5zdGFuY2VUeXBlIiwiaGFuZGxlQ2hhbmdlIiwiZmllbGQiLCJhZGRGaWVsZCIsInBhcmVudElkIiwiYmluZFZhbHVlVG9Gb3JtIiwiZXJyb3IiLCJsZW5ndGgiLCJjbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzIiwicmVtb3ZlRmllbGQiLCJoYW5kbGVWYWx1ZUNoYW5nZSIsIm5ld1ZhbHVlIiwidmFsdWVDaGFuZ2VkIiwiSlNPTiIsInN0cmluZ2lmeSIsInNwbGljZSIsIm5ld1ZhbHVlRWxlbWVudCIsInB1c2giLCJzZWxlY3RJdGVtQ2hhbmdlIiwiaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSIsInNlbGVjdE9wdGlvbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIlZBTFVFX0NIQU5HRSIsInZhbGlkYXRlIiwicGFyc2VWYWx1ZSIsImluYm91bmQiLCJyb3dzIiwicm93c0hhbmRsZXIiLCJnZXRWYWxpZGF0aW9uR3JvdXAiLCJncm91cCIsImNsZWFyIiwiY2xlYXJIYW5kbGVyIiwic2Nyb2xsVG8iLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJ2YWx1ZUNoYW5nZUNhbGxiYWNrIiwiaGFuZGxlTG9hZENvbXBsZXRlIiwicmVmcmVzaCIsInJlcXVpcmVkTmV3VmFsIiwibnVsbGFibGUiLCJpc1JlcXVpcmVkIiwicmVzZXQiLCJzZXRGaWVsZFJlcXVpcmVkIiwibmV3VmFsIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZ2V0Q2hpbGRyZW4iLCJsb2FkRGF0YSIsImxvYWREYXRhSGFuZGxlciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJrZXkiLCJzdHlsZSIsInRleHRBbGlnbiIsIm1hcmdpbkxlZnQiLCJhdHRyaWJ1dGVzIiwiaW5kZXgiLCJkaXNwbGF5IiwiZ2V0Q29tcG9uZW50QXR0cmlidXRlIiwiY2hpbGRyZW4iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vQmFzZUZpZWxkLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi4vLi4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQgRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuXG5leHBvcnQgY29uc3QgQmFzZUZpZWxkID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbdmFsdWVPYmplY3QsIHNldFZhbHVlT2JqZWN0XSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbdmFsdWVQcm9wZXJ0eSwgc2V0VmFsdWVQcm9wZXJ0eV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBsb2FkaW5nUmVmID0gUmVhY3QudXNlUmVmKHRydWUpO1xuICAgIGNvbnN0IFtjb25maWcsIHNldENvbmZpZ10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICAvLyBUT0RPIDogUmVwbGFjZSB0aGUgc3RhdGUgdmFsdWUgd2l0aCB0aGUgdmFsdWVSZWYgYmVsb3cuIFRoZSBzdGF0ZSB2YWx1ZSBpcyBvY2NhdGlvbmFseSBub3QgYXZhaWxhYmxlIGluIHRpbWUgZm9yIGV2ZW50IHNjcmlwdHNcbiAgICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKCFVdGlscy5pc051bGwocHJvcHMudmFsdWUpID8gcHJvcHMudmFsdWUgOiBudWxsKTtcbiAgICAvLyBUT0RPIDogUmVwbGFjZSB0aGUgc3RhdGUgdmFsdWUgd2l0aCB0aGlzIHJlZiBmb3IgdGhlIHJlYXNvbiBtZW5zaW9uZWQgYWJvdmVcbiAgICBjb25zdCB2YWx1ZVJlZiA9IFJlYWN0LnVzZVJlZighVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlKSA/IHByb3BzLnZhbHVlIDogbnVsbCk7XG4gICAgY29uc3QgW3NlbGVjdE9wdGlvbnMsIHNldFNlbGVjdE9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtkaXNhYmxlZCwgc2V0RGlzYWJsZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcmVxdWlyZWQsIHNldFJlcXVpcmVkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttaW5EYXRlLCBzZXRNaW5EYXRlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttYXhEYXRlLCBzZXRNYXhEYXRlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtyZXNldFN3aXRjaCwgc2V0UmVzZXRTd2l0Y2hdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHZhbGlkYXRlT25DaGFuZ2UgPSBSZWFjdC51c2VSZWYoKTtcbiAgICBjb25zdCBpbml0aWFsVmFsdWVCb3VuZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHZhbGlkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICAvLyBNZW1vIG9mIHRoZSBsYXN0IChjdXJyZW50VmFsdWUsIHJlcXVpcmVkLCBtYXJrZXJzKSB0dXBsZSArIGl0cyByZXN1bHQudmFsaWQuXG4gICAgLy8gZG9WYWxpZGF0aW9uIHNob3J0LWNpcmN1aXRzIHdoZW4gdGhlIGlucHV0cyBhcmUgdW5jaGFuZ2VkIHNvIHJlcGVhdGVkIHJlYWRzXG4gICAgLy8gb2YgQCN7Zm9ybX0udmFsdWUgKHdoaWNoIGl0ZXJhdGVzIGZpZWxkcyBhbmQgY2FsbHMgdmFsaWRhdGUgb24gZWFjaCBpblxuICAgIC8vIEZvcm0uanN4IGdldCB2YWx1ZSgpKSBkb24ndCBrZWVwIGZpcmluZyBzZXRFcnJvck1lc3NhZ2Uvc2V0SGFzRXJyb3IgYW5kXG4gICAgLy8gcmUtcmVuZGVyLWxvb3AgdGhlIHdob2xlIGZvcm0uXG4gICAgY29uc3QgbGFzdFZhbGlkYXRpb24gPSBSZWFjdC51c2VSZWYobnVsbCk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpbml0aWFsVmFsdWVCb3VuZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGJpbmQoKTtcbiAgICB9LCBbdmFsdWVPYmplY3RdKTtcblxuICAgIGZ1bmN0aW9uIGJpbmQoKSB7XG4gICAgICAgIGxldCBib3VuZFZhbHVlID0gdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV07XG4gICAgICAgIGlmIChib3VuZFZhbHVlICYmICFpbml0aWFsVmFsdWVCb3VuZC5jdXJyZW50KSB7XG4gICAgICAgICAgICBpbml0aWFsVmFsdWVCb3VuZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnU0VMRUNUJyB8fCBwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnTE9PS1VQJykge1xuICAgICAgICAgICAgICAgIGlmICghYm91bmRWYWx1ZSB8fCBVdGlscy5pc051bGwoYm91bmRWYWx1ZS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhbHVlUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShwcm9wcy52YWx1ZVBhcnNlcihib3VuZFZhbHVlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShib3VuZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBib3VuZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYocHJvcHMudmFsdWVQYXJzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUocHJvcHMudmFsdWVQYXJzZXIoYm91bmRWYWx1ZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGJvdW5kVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBib3VuZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgYmluZCgpO1xuICAgIH0sIFt2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XV0pO1xuXG4gICAgLy8gQ2hhbmdlIHRoZSByZXF1aXJlZCB2YWx1ZSBhbmQgcmUtdmFsaWRhdGUgZmllbGQgaWYgbmVjZXNzYXJ5XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29uZmlnKSAmJiB2YWxpZGF0ZU9uQ2hhbmdlLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC52YWxpZGF0ZVBhcmVudChjb25maWcuZGF0YUJpbmRpbmcgfHwgY29uZmlnLmlkLCBkb1ZhbGlkYXRpb24ocHJvcHMudmFsdWVzLCB2YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID0gbnVsbDtcbiAgICB9LCBbcmVxdWlyZWRdKTtcblxuICAgIGNvbnN0IGRvVmFsaWRhdGlvbiA9ICh2YWx1ZXMsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICBpZihjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcnMgPSBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBsYXN0VmFsaWRhdGlvbi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKGxhc3QgIT09IG51bGxcbiAgICAgICAgICAgICAgICAmJiBsYXN0LmN1cnJlbnRWYWx1ZSA9PT0gY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgICAgJiYgbGFzdC5yZXF1aXJlZCA9PT0gcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAmJiBsYXN0Lm1hcmtlcnMgPT09IG1hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdC52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhdGggPSBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWVQYXRoKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt2YWxpZDogdHJ1ZX07XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yKSAmJiAhVXRpbHMuaXNOdWxsKGNvbmZpZy52YWxpZGF0b3Iuc2NyaXB0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0T2JqZWN0KGAke2NvbmZpZy5pZH1WYWxpZGF0b3JgLCBjb25maWcudmFsaWRhdG9yLnNjcmlwdCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZSA/IHJlc3VsdC5tZXNzYWdlIDogY29uZmlnLnZhbGlkYXRvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFV0aWxzLnZhbGlkYXRlRmllbGQocGF0aC52YWx1ZVByb3BlcnR5LCByZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCwgY3VycmVudFZhbHVlLCBjb25maWcudmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKG1hcmtlcnMgfHwgcmVzdWx0LmZvcmNlTWFya2VyID8gcmVzdWx0Lm1lc3NhZ2UgOiAnJyk7XG4gICAgICAgICAgICBzZXRIYXNFcnJvcighcmVzdWx0LnZhbGlkICYmIChtYXJrZXJzIHx8IHJlc3VsdC5mb3JjZU1hcmtlcikpO1xuICAgICAgICAgICAgdmFsaWQuY3VycmVudCA9IHJlc3VsdC52YWxpZCAmJiAobWFya2VycyB8fCByZXN1bHQuZm9yY2VNYXJrZXIpO1xuXG4gICAgICAgICAgICBpZiAobWFya2Vycykge1xuICAgICAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAuc2V0RmllbGRFcnJvcihjb25maWcuaWQsIHR5cGVvZiByZXN1bHQubWVzc2FnZSA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXN0VmFsaWRhdGlvbi5jdXJyZW50ID0geyBjdXJyZW50VmFsdWUsIHJlcXVpcmVkLCBtYXJrZXJzLCB2YWxpZDogcmVzdWx0LnZhbGlkIH07XG5cbiAgICAgICAgICAgIC8vIFB1Ymxpc2ggdG8gdGhlIGZvcm0ncyB2YWxpZGl0eSByZWdpc3Rlci4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aFxuICAgICAgICAgICAgLy8gZm9yIFwiaXMgdGhpcyBmaWVsZCB2YWxpZD9cIiDigJQgZm9ybS52YWx1ZSByZWFkcyBmcm9tIGhlcmUgd2l0aG91dFxuICAgICAgICAgICAgLy8gY2FsbGluZyBiYWNrIGludG8gdGhlIGZpZWxkIChraWxscyB0aGUgYmktZGlyZWN0aW9uYWwgY2hhaW4pLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5mb3JtID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwcm9wcy5mb3JtKCkuc2V0RmllbGRWYWxpZGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHByb3BzLmZvcm0oKS5zZXRGaWVsZFZhbGlkaXR5KGNvbmZpZy5pZCB8fCBjb25maWcuZGF0YUJpbmRpbmcsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHJlc3VsdC52YWxpZCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlTWFya2VyOiByZXN1bHQuZm9yY2VNYXJrZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC52YWxpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgIH0pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMocGFyc2VkQ29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgcGFyc2VkQ29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhwYXJzZWRDb25maWcpO1xuICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQsIHRydWUpKTtcbiAgICAgICAgICAgIHNldERpc2FibGVkKFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLmRpc2FibGVkLCBwYXJzZWRDb25maWcuaWQsIGZhbHNlKSk7XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgbnVsbCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5DT01QT05FTlRfTE9BRCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSAmJiAhVXRpbHMuaXNOdWxsKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlUGF0aChjb25maWcuZGF0YUJpbmRpbmcgfHwgY29uZmlnLmlkLCBwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZU9iamVjdChwYXRoLnZhbHVlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZVByb3BlcnR5KHBhdGgudmFsdWVQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NyaXB0VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKHByb3BzLmNvbmZpZy52YWx1ZSkgP1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChwcm9wcy5jb25maWcuaWQucmVwbGFjZSgnLicsICdfJykgKyAnVmFsdWUnLCBwcm9wcy5jb25maWcudmFsdWUpIDpcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuY29uZmlnLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2NyaXB0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBzY3JpcHRWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHNjcmlwdFZhbHVlLnZhbHVlIDogc2NyaXB0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oYW5kbGVDaGFuZ2UoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgdmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMudmFsdWVzLCBjb25maWddKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkaW5nUmVmLmN1cnJlbnQgPT09IHRydWUgJiYgIVV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuYWRkRmllbGQoY29uZmlnLmlkIHx8IGNvbmZpZy5kYXRhQmluZGluZywgcHJvcHMuaGFuZGxlLCBwcm9wcy5wYXJlbnRJZCwgcHJvcHMuYmluZFZhbHVlVG9Gb3JtKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5lcnJvci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEhhc0Vycm9yKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoZmllbGQuZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgZG8gTk9UIHZhbGlkYXRlIG9uIG1vdW50OiB2YWx1ZVJlZi5jdXJyZW50IGlzIG5vdFxuICAgICAgICAgICAgLy8geWV0IGJvdW5kIGZyb20gdGhlIGZvcm0ncyBtYXN0ZXIgZGF0YSBhdCB0aGlzIHBvaW50IOKAlCBiaW5kKClcbiAgICAgICAgICAgIC8vIHJ1bnMgaW4gYSBsYXRlciByZW5kZXIgY3ljbGUgdmlhIHRoZSBbdmFsdWVPYmplY3RdIHVzZUVmZmVjdC5cbiAgICAgICAgICAgIC8vIFZhbGlkYXRpbmcgaGVyZSB3b3VsZCBtYXJrIGV2ZXJ5IGZpZWxkLXdpdGgtbWFzdGVyLXZhbHVlIGFzXG4gICAgICAgICAgICAvLyBpbnZhbGlkIChjdXJyZW50VmFsdWU9bnVsbCksIHBlcm1hbmVudGx5IGZsaXBwaW5nIGZvcm0udmFsdWUgdG9cbiAgICAgICAgICAgIC8vIG51bGwuIFJlZ2lzdGVyIHN0YXlzIGVtcHR5IGZvciB0aGlzIGZpZWxkIHVudGlsIGVpdGhlciB1c2VyXG4gICAgICAgICAgICAvLyBpbnRlcmFjdGlvbiAoaGFuZGxlQ2hhbmdlIOKGkiB2YWxpZGF0ZUZpZWxkIOKGkiBkb1ZhbGlkYXRpb24g4oaSXG4gICAgICAgICAgICAvLyBzZXRGaWVsZFZhbGlkaXR5KSBvciBhbiBleHBsaWNpdCBmb3JtLmFwaS52YWxpZGF0ZUFsbCgpIHJ1bnMuXG4gICAgICAgICAgICAvLyBmb3JtLnZhbHVlIHRyZWF0cyBlbXB0eS1yZWdpc3RlciBhcyBcIm9wdGltaXN0aWNhbGx5IHZhbGlkXCIg4oCUIHNvXG4gICAgICAgICAgICAvLyBhbnkgc2F2ZSBmbG93IE1VU1QgY2FsbCBmb3JtLmFwaS52YWxpZGF0ZUFsbCgpIGJlZm9yZSByZWFkaW5nXG4gICAgICAgICAgICAvLyBmb3JtLnZhbHVlLCBvciBpbnZhbGlkIGRhdGEgd2lsbCBwYXNzIHRocm91Z2ggc2lsZW50bHkuXG4gICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmZvcm0oKSkpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyhwcm9wcy5oYW5kbGUpO1xuICAgICAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlRmllbGQocHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIHx8IHByb3BzLmNvbmZpZy5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgaGFuZGxlVmFsdWVDaGFuZ2UgPSAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIGxldCB2YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSAhPT0gdmFsdWVSZWYuY3VycmVudDtcblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChuZXdWYWx1ZSkgJiYgIVV0aWxzLmlzTnVsbCh2YWx1ZVJlZi5jdXJyZW50KSkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdTRUxFQ1QnIHx8IHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdMT09LVVAnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUuaWQgIT09IHZhbHVlUmVmLmN1cnJlbnQuaWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdEQVRFJyB8fCBwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnVElNRScpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSAhPT0gdmFsdWVSZWYuY3VycmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodmFsdWVSZWYuY3VycmVudCkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnR1JJRCcgJiYgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0pIHtcbiAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldLnNwbGljZSgwLCB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XS5sZW5ndGgpO1xuXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1ZhbHVlRWxlbWVudCBvZiBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XS5wdXNoKG5ld1ZhbHVlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaWQgPSBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuaGFuZGxlQ2hhbmdlKCFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nKSA/IHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyA6IGlkLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICAvL2FwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RJdGVtQ2hhbmdlID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5oYW5kbGVTZWxlY3RJdGVtQ2hhbmdlKGlkLCBzZWxlY3RPcHRpb25zLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWUoc2VsZWN0SXRlbUNoYW5nZSk7XG4gICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHNlbGVjdEl0ZW1DaGFuZ2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RPcHRpb24gb2Ygc2VsZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9uLmlkID09PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBzZWxlY3RPcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLmhhbmRsZUNoYW5nZSghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZykgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBpZCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBhcGkgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZGF0ZTogKHZhbHVlcywgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvVmFsaWRhdGlvbih2YWx1ZXMsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyc2VWYWx1ZTogKHZhbHVlLCBpbmJvdW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVQYXJzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy52YWx1ZVBhcnNlcih2YWx1ZSwgaW5ib3VuZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB2YWxpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWQuY3VycmVudDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmNvbmZpZy5pZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcm93cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMucm93c0hhbmRsZXIgPyBwcm9wcy5yb3dzSGFuZGxlcigpIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRWYWxpZGF0aW9uR3JvdXA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yKSA/IGNvbmZpZy52YWxpZGF0b3IuZ3JvdXAgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVmFsdWVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuY2xlYXJIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5jbGVhckhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2Nyb2xsVG86ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazogXCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHZhbHVlUHJvcGVydHkpICYmICFVdGlscy5pc051bGwodmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlUGFyc2VyKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZVBhcnNlcih2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSwgZmFsc2UpIDogdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy52YWx1ZVBhcnNlciA/IHByb3BzLnZhbHVlUGFyc2VyKHZhbHVlLCBmYWxzZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVmFsdWVDaGFuZ2UodmFsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlQ2FsbGJhY2sodmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoZGlzYWJsZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCB2aXNpYmxlKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlKHZpc2libGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZUxvYWRDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQsIHRydWUpKTtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy5kaXNhYmxlZCwgcGFyc2VkQ29uZmlnLmlkKSk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVpcmVkTmV3VmFsID0gIVV0aWxzLmlzTnVsbChwYXJzZWRDb25maWcudmFsaWRhdG9yKSA/XG4gICAgICAgICAgICAgICAgICAgICFVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52YWxpZGF0b3IubnVsbGFibGUsIHBhcnNlZENvbmZpZy5pZCwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgfHwgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmFsaWRhdG9yLnJlcXVpcmVkLCBwYXJzZWRDb25maWcuaWQsIGZhbHNlKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IHJlcXVpcmVkICE9PSBudWxsICYmIHJlcXVpcmVkICE9PSByZXF1aXJlZE5ld1ZhbCAmJiBsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKHJlcXVpcmVkTmV3VmFsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCByZXF1aXJlZChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgc2V0UmVxdWlyZWQoaXNSZXF1aXJlZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IG1pbkRhdGUobWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldE1pbkRhdGUobWluRGF0ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IG1heERhdGUobWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldE1heERhdGUobWF4RGF0ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHNlbGVjdE9wdGlvbnMoc2VsZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdE9wdGlvbnMoc2VsZWN0T3B0aW9ucyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgc2V0UmVzZXRTd2l0Y2goIXJlc2V0U3dpdGNoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRGaWVsZFJlcXVpcmVkKG5ld1ZhbCwgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID0gdmFsaWRhdGU7XG4gICAgICAgICAgICAgICAgc2V0UmVxdWlyZWQobmV3VmFsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmdldENoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9hZERhdGEoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmxvYWREYXRhSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5sb2FkRGF0YUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBjb25maWcgP1xuICAgICAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9XCJjb2wtKi0qXCIga2V5PXtjb25maWcuaWR9IHN0eWxlPXt7XG4gICAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmF0dHJpYnV0ZXM/LnN0eWxlPy5tYXJnaW5MZWZ0KSA/IHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ubWFyZ2luTGVmdCA6XG4gICAgICAgICAgICAgICAgcHJvcHMuY29uZmlnLmluZGV4ID09PSAwID8gMCA6ICc4cHgnLFxuICAgICAgICAgICAgZGlzcGxheTogIXZpc2libGUgfHwgVXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKGNvbmZpZywgJ2hpZGRlbicsIGZhbHNlKSA9PT0gdHJ1ZSA/ICdub25lJyA6ICdibG9jaydcbiAgICAgICAgfX0+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICB7cHJvcHMuY2hpbGRyZW4oe1xuICAgICAgICAgICAgbWluRGF0ZTogbWluRGF0ZSxcbiAgICAgICAgICAgIG1heERhdGU6IG1heERhdGUsXG4gICAgICAgICAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICB2YWx1ZU9iamVjdDogdmFsdWVPYmplY3QsXG4gICAgICAgICAgICB2YWx1ZVByb3BlcnR5OiB2YWx1ZVByb3BlcnR5LFxuICAgICAgICAgICAgaGFuZGxlVmFsdWVDaGFuZ2U6IGhhbmRsZVZhbHVlQ2hhbmdlLFxuICAgICAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgICAgICAgICAgc2V0U2VsZWN0T3B0aW9uczogc2V0U2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICAgIHNlbGVjdE9wdGlvbnM6IHNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICBzZXRSZXNldFN3aXRjaDogc2V0UmVzZXRTd2l0Y2gsXG4gICAgICAgICAgICByZXNldFN3aXRjaDogcmVzZXRTd2l0Y2gsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBoYXNFcnJvcjogaGFzRXJyb3IsXG4gICAgICAgICAgICBkb1ZhbGlkYXRpb246IGRvVmFsaWRhdGlvbixcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgbG9hZGluZ1JlZjogbG9hZGluZ1JlZlxuICAgICAgICB9KX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgOiBudWxsO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3QyxTQUFBRCx1QkFBQVEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVqQyxNQUFNRyxT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Q0FBQytCLEVBQUc7SUFBQ2tHLEtBQUssRUFBRTtNQUN0REMsU0FBUyxFQUFFLE1BQU07TUFDakJDLFVBQVUsRUFBRSxDQUFDL0gsY0FBSyxDQUFDQyxNQUFNLEVBQUFuQixxQkFBQSxHQUFDRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ29JLFVBQVUsY0FBQWxKLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUF2QkEscUJBQUEsQ0FBeUIrSSxLQUFLLGNBQUEvSSxxQkFBQSx1QkFBOUJBLHFCQUFBLENBQWdDaUosVUFBVSxDQUFDLElBQUFoSixzQkFBQSxHQUFHRixLQUFLLENBQUNlLE1BQU0sQ0FBQ29JLFVBQVUsY0FBQWpKLHNCQUFBLGdCQUFBQSxzQkFBQSxHQUF2QkEsc0JBQUEsQ0FBeUI4SSxLQUFLLGNBQUE5SSxzQkFBQSx1QkFBOUJBLHNCQUFBLENBQWdDZ0osVUFBVSxHQUM5R2xKLEtBQUssQ0FBQ2UsTUFBTSxDQUFDcUksS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSztNQUN4Q0MsT0FBTyxFQUFFLENBQUMzSCxPQUFPLElBQUlQLGNBQUssQ0FBQ21JLHFCQUFxQixDQUFDdkksTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHO0lBQ2xHO0VBQUUsZ0JBQ0Y1QixNQUFBLENBQUFXLE9BQUEsQ0FBQStJLGFBQUEsZUFDQzdJLEtBQUssQ0FBQ3VKLFFBQVEsQ0FBQztJQUNaekgsT0FBTyxFQUFFQSxPQUFPO0lBQ2hCRSxPQUFPLEVBQUVBLE9BQU87SUFDaEJKLFFBQVEsRUFBRUEsUUFBUTtJQUNsQkosUUFBUSxFQUFFQSxRQUFRO0lBQ2xCZixXQUFXLEVBQUVBLFdBQVc7SUFDeEJFLGFBQWEsRUFBRUEsYUFBYTtJQUM1QjBGLGlCQUFpQixFQUFFQSxpQkFBaUI7SUFDcENuRixRQUFRLEVBQUVBLFFBQVE7SUFDbEJLLGdCQUFnQixFQUFFQSxnQkFBZ0I7SUFDbENELGFBQWEsRUFBRUEsYUFBYTtJQUM1QmEsY0FBYyxFQUFFQSxjQUFjO0lBQzlCRCxXQUFXLEVBQUVBLFdBQVc7SUFDeEJqQixLQUFLLEVBQUVBLEtBQUs7SUFDWmQsUUFBUSxFQUFFQSxRQUFRO0lBQ2xCZ0QsWUFBWSxFQUFFQSxZQUFZO0lBQzFCNUMsWUFBWSxFQUFFQSxZQUFZO0lBQzFCTSxVQUFVLEVBQUVBO0VBQ2hCLENBQUMsQ0FDSyxDQUNELENBQUMsR0FDSixJQUFJO0FBQ2QsQ0FBQztBQUFDMkksT0FBQSxDQUFBekosU0FBQSxHQUFBQSxTQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -54,6 +54,12 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
54
54
  const [fieldParentErrors] = _react.default.useState({});
55
55
  const [visible, setVisible] = _react.default.useState(true);
56
56
  const loadingRef = _react.default.useRef(true);
57
+ // Validity register: Map<fieldId, { valid, message, forceMarker }>.
58
+ // Single source of truth for "is this field valid?". BaseField writes
59
+ // here from doValidation; form.value reads here without invoking any
60
+ // field methods (kills the bi-directional render-time chain that
61
+ // produced React #185).
62
+ const fieldValidity = _react.default.useRef(new Map());
57
63
  let sectionCounter = 0;
58
64
  const api = () => {
59
65
  return {
@@ -84,6 +90,48 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
84
90
  removeField: id => {
85
91
  removeField(id);
86
92
  },
93
+ setFieldValidity: (id, result) => {
94
+ fieldValidity.current.set(id, result);
95
+ },
96
+ clearFieldValidity: id => {
97
+ fieldValidity.current.delete(id);
98
+ },
99
+ validateAll: () => {
100
+ // Explicit "force-validate every field" command. Replaces the
101
+ // old hack of reading form.value purely for its side effects.
102
+ // Fields write into fieldValidity via doValidation as a side
103
+ // effect of validate; we then walk the register for invalid
104
+ // fields to drive UX (scrollTo first, refresh container error
105
+ // callback) — same UX the getter used to provide, now opt-in.
106
+ for (const field of fields) {
107
+ if (!_Utils.default.isNull(field.handle) && !_Utils.default.isNull(field.handle.api)) {
108
+ // Pass the actual current value so doValidation's
109
+ // (currentValue, required, markers) cache key
110
+ // reflects reality. Without this we were passing
111
+ // null, which made cache hits opaque in logs and
112
+ // forced Utils.validateField to fall back to
113
+ // values[id] every time.
114
+ const path = getValuePath(field.id, null);
115
+ const currentValue = !_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject) ? path.valueObject[path.valueProperty] : null;
116
+ field.handle.api.validate(values.current, currentValue);
117
+ }
118
+ }
119
+ let firstInvalid = null;
120
+ for (const field of fields) {
121
+ if (field.bindValueToForm === false) continue;
122
+ const v = fieldValidity.current.get(field.id);
123
+ if (v && v.valid === false) {
124
+ doValidateParent(field, true, false);
125
+ if (firstInvalid === null) firstInvalid = field;
126
+ }
127
+ }
128
+ if (!_Utils.default.isNull(firstInvalid) && !_Utils.default.isNull(firstInvalid.handle) && !_Utils.default.isNull(firstInvalid.handle.api) && typeof firstInvalid.handle.api.scrollTo === 'function') {
129
+ firstInvalid.handle.api.scrollTo();
130
+ }
131
+ if (!_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
132
+ containerErrorCallback.current(fieldParentErrors);
133
+ }
134
+ },
87
135
  loadData: (actionConfig, event) => {
88
136
  loadData(actionConfig, config, event ? event.data : null);
89
137
  },
@@ -129,41 +177,20 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
129
177
  }
130
178
  },
131
179
  get value() {
180
+ // Pure read — no side effects, no calls into fields.
181
+ // Validity is computed from the fieldValidity register, which
182
+ // BaseField populates from doValidation. Callers needing to
183
+ // force validation + UX side effects (scrollTo, marker
184
+ // refresh) should call api.validateAll() explicitly.
132
185
  if (loadingRef.current === false && values.current) {
133
- let data = null;
134
- let valid = true;
135
- data = {};
136
- let map = !_Utils.default.isNull(masterValues) ? JSON.parse(JSON.stringify(masterValues)) : {};
137
- if (_Utils.default.isNull(map.id)) {
138
- map.id = values.current.id;
139
- }
140
- let firstInvalidField = null;
141
186
  for (const field of fields) {
142
- if (field.bindValueToForm === false) {
143
- continue;
187
+ if (field.bindValueToForm === false) continue;
188
+ const v = fieldValidity.current.get(field.id);
189
+ if (v && v.valid === false) {
190
+ return null;
144
191
  }
145
- let fieldValid = field.handle.api.validate(values.current, null);
146
- if (fieldValid === false || _Utils.default.isNull(fieldValid)) {
147
- //console.log("Invalid form field [" + field.handle.api.id + "]");
148
- if (firstInvalidField == null) {
149
- firstInvalidField = field;
150
- }
151
- doValidateParent(field, !fieldValid, false);
152
- valid = false;
153
- } else if (valid) {
154
- let id = field.id;
155
- let path = getValuePath(id, values.current);
156
- path.valueObject[path.valueProperty] = field.handle.api.parseValue(path.valueObject[path.valueProperty], false);
157
- }
158
- }
159
- if (firstInvalidField) {
160
- firstInvalidField.handle.api.scrollTo();
161
- }
162
- data = values.current;
163
- if (!_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
164
- containerErrorCallback.current(fieldParentErrors);
165
192
  }
166
- return valid ? data : null;
193
+ return values.current;
167
194
  }
168
195
  return null;
169
196
  },
@@ -483,6 +510,7 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
483
510
  fields.splice(i, 1);
484
511
  }
485
512
  }
513
+ fieldValidity.current.delete(id);
486
514
  };
487
515
  function doValidateParent(field, invalid) {
488
516
  let updateErrors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
@@ -557,6 +585,7 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
557
585
  let gridFieldPath = getValuePath(groupFieldId, null);
558
586
  if (!_Utils.default.isNull(gridFieldPath)) {
559
587
  let groupFieldVal = gridFieldPath.valueObject[gridFieldPath.valueProperty];
588
+ console.log('RE-Validating form', groupFieldVal);
560
589
  validateField(groupField, groupFieldId, groupFieldVal);
561
590
  }
562
591
  }
@@ -655,4 +684,4 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
655
684
  }, !_Utils.default.isNull(props.config.id) ? render(props.config) : /*#__PURE__*/_react.default.createElement("div", null, "ERROR: A form must have an ID"));
656
685
  });
657
686
  var _default = exports.default = Form;
658
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwic2VjdGlvbkNvdW50ZXIiLCJhcGkiLCJpZCIsImRvVXBkYXRlVmFsdWUiLCJuYW1lIiwidXBkYXRlVmFsdWUiLCJjbGVhciIsImRvQ2xlYXIiLCJzZXRWYWx1ZSIsImRvSGFuZGxlQ2hhbmdlIiwiaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSIsIm9wdGlvbnMiLCJzZWxlY3RlZElkIiwiaGFuZGxlQ2hhbmdlIiwiZ2V0VmFsdWVQYXRoIiwiYWRkRmllbGQiLCJyZWYiLCJwYXJlbnRJZCIsImJpbmRWYWx1ZVRvRm9ybSIsInJlbW92ZUZpZWxkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJkb1ZhbGlkYXRlUGFyZW50IiwiZ2V0RmllbGQiLCJmaWVsZERhdGFCaW5kaW5ncyIsImZpZWxkTmFtZXMiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJqIiwiY29tcG9uZW50cyIsImNvbXBvbmVudCIsInR5cGUiLCJnZXRGaWVsZHNGcm9tVGFiIiwiayIsImZpZWxkIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsImN1cnJlbnQiLCJtb2RlbCIsInBhcnNlVmFsdWVzIiwidHJhbnNmb3JtRGF0YU9iamVjdCIsInZhbGlkIiwibWFwIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiZmlyc3RJbnZhbGlkRmllbGQiLCJmaWVsZFZhbGlkIiwiaGFuZGxlIiwidmFsaWRhdGUiLCJwYXRoIiwidmFsdWVPYmplY3QiLCJ2YWx1ZVByb3BlcnR5IiwicGFyc2VWYWx1ZSIsInNjcm9sbFRvIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3IiLCJnZXRDaGlsZHJlbiIsImNoaWxkcmVuIiwibW9yZUNoaWxkcmVuIiwicHJvcGVydGllcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wZXJ0eSIsInNlY3Rpb25IYW5kbGUiLCJjaGlsZCIsInJlZnJlc2giLCJwYXJzZWRDb25maWciLCJldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uIiwiY3JlYXRlU2VjdGlvbkhhbmRsZSIsInVwZGF0ZVZpZXdUaXRsZSIsInZpZXciLCJnZXRWaWV3IiwidGl0bGUiLCJpbmNsdWRlcyIsInVwZGF0ZUFwcEJhclRpdGxlIiwiaGFuZGxlRGF0YUFycml2ZWQiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsImZpcmVFdmVudCIsIkV2ZW50VHlwZSIsIkRBVEFfQVJSSVZFRCIsInByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zIiwiZXZlbnRDb25maWciLCJjb21wb25lbnRDb25maWciLCJldmVudERhdGEiLCJ1bmRlZmluZWQiLCJzZXJ2aWNlIiwiZGF0YVNlcnZpY2UiLCJjb21wb25lbnRWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZSIsImludm9rZVJwYyIsInRoZW4iLCJyZXN1bHQiLCJjb25zb2xlIiwiY2F0Y2giLCJlcnJvclR5cGUiLCJwdWJsaXNoRXJyb3JNZXNzYWdlIiwic2VydmljZUNhbGxBY3Rpb25IYW5kbGVyIiwiZXhlY3V0ZSIsInBhcmFtZXRlciIsImlzRXhwcmVzc2lvbiIsImZpbGxFdmVudERhdGFWYWx1ZSIsImlzRXZlbnREYXRhIiwidG9TdHJpbmciLCJzdGFydHNXaXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJhZGRTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb24iLCJkeW5hbWljSlMiLCJleGVjdXRlU2NyaXB0IiwiY29uY2F0IiwidmFsIiwicmVzb2x2ZUV4cHJlc3Npb25WYWx1ZSIsInVzZUVmZmVjdCIsImV2ZW50SGFuZGxpbmdDb25maWciLCJzdWJzY3JpcHRpb25zIiwiYXV0b0xvYWREYXRhIiwiZ2V0Q29tcG9uZW50QXR0cmlidXRlIiwic3Vic2NyaXB0aW9uIiwiZXZlbnRUeXBlIiwiQ09NUE9ORU5UX0xPQUQiLCJhY3Rpb25zIiwiYWN0aW9uVHlwZSIsImFkZFN1YnNjcmlwdGlvbnMiLCJhZGRTeXN0ZW1TdWJzY3JpcHRpb25zIiwiaGFuZGxlTG9hZENvbXBsZXRlIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsImVuYWJsZUZvcm1NYXJrZXJzIiwidmFsdWVDaGFuZ2VIYW5kbGVyIiwibW9kZWxDaGFuZ2VIYW5kbGVyIiwia2V5IiwicGFyc2VkVmFsdWVzIiwib2JqZWN0VmFsdWUiLCJkYXRhQXJyaXZlZEhhbmRsZXIiLCJzcGxpY2UiLCJ1cGRhdGVFcnJvcnMiLCJpc1BhcmVudEludmFsaWQiLCJ2YWxpZGF0ZUZpZWxkIiwidmFscyIsImN1cnJlbnRWYWx1ZXMiLCJncm91cEZpZWxkIiwidmFsaWRhdGlvbkdyb3VwIiwiZ2V0VmFsaWRhdGlvbkdyb3VwIiwiZ3JvdXBGaWVsZElkIiwiZ3JpZEZpZWxkUGF0aCIsImdyb3VwRmllbGRWYWwiLCJWQUxVRV9DSEFOR0UiLCJzZWxlY3Rpb24iLCJzZWxlY3RlZFZhbHVlIiwicmVuZGVyIiwiZm9ybSIsImNyZWF0ZUVsZW1lbnQiLCJrZXlIYW5kbGVyIiwiZGlzYWJsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsIm1lcmdlU3R5bGVzIiwicGFkZGluZyIsIm92ZXJmbG93IiwibWF4SGVpZ2h0IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vRm9ybS5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7bWFrZVN0eWxlc30gZnJvbSAnQG11aS9zdHlsZXMnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCBTZWN0aW9uIGZyb20gJy4vU2VjdGlvbic7XG5pbXBvcnQgJy4vRm9ybS5jc3MnO1xuaW1wb3J0IHtpbnZva2VScGN9IGZyb20gJy4uLy4uL1Jlc3RTZXJ2aWNlJztcbmltcG9ydCB7TXV0ZXh9IGZyb20gJ2FzeW5jLW11dGV4JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi4vLi4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyIGZyb20gJy4uLy4uL2V2ZW50L1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgZHluYW1pY0pTIGZyb20gJy4uLy4uL0R5bmFtaWNKUyc7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IHtjbGVhcn0gZnJvbSBcIkB0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudC9kaXN0L2NsZWFyXCI7XG5cbmNvbnN0IHVzZVN0eWxlcyA9IG1ha2VTdHlsZXModGhlbWUgPT4gKHtcbiAgICBjb250YWluZXI6IHtcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAnJiB0ciB0ZCc6IHtcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdDoge1xuICAgICAgICBtYXJnaW46IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgICAgIG1pbldpZHRoOiAxMjAsXG4gICAgICAgIG1pbkhlaWdodDogNDhcbiAgICB9LFxuICAgIHNlbGVjdEVtcHR5OiB7XG4gICAgICAgIG1hcmdpblRvcDogdGhlbWUuc3BhY2luZygyKSxcbiAgICB9LFxuICAgIHJvb3Q6IHt9XG59KSk7XG5cbmNvbnN0IEZvcm0gPSBSZWFjdC5tZW1vKChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBSZWFjdC51c2VSZWYoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpID8gcHJvcHMudmFsdWVzIDoge30pO1xuICAgICAgICBjb25zdCBbbWFzdGVyVmFsdWVzLCBzZXRNYXN0ZXJWYWx1ZXNdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IFtjb25maWcsIHNldENvbmZpZ10gPSBSZWFjdC51c2VTdGF0ZShVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCkpO1xuICAgICAgICBjb25zdCBbYmluZGVyXSA9IFJlYWN0LnVzZVN0YXRlKFV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuYmluZGVyKSA/ICdQTEFJTl9PQkpFQ1QnIDogcHJvcHMuY29uZmlnLmJpbmRlcik7XG4gICAgICAgIGNvbnN0IFtmaWVsZHNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgICAgICBjb25zdCBjb250YWluZXJFcnJvckNhbGxiYWNrID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICAgIGNvbnN0IFtzZWN0aW9uSGFuZGxlc10gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgICAgIGNvbnN0IFtmaWVsZFBhcmVudEVycm9yc10gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICAgICAgICBjb25zdCBsb2FkaW5nUmVmID0gUmVhY3QudXNlUmVmKHRydWUpO1xuICAgICAgICBsZXQgc2VjdGlvbkNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWREYXRhOiAoYWN0aW9uQ29uZmlnLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2FkRGF0YShhY3Rpb25Db25maWcsIGNvbmZpZywgZXZlbnQgPyBldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiaW5kRGF0YTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9CaW5kRGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlUGFyZW50OiAoaWQsIGludmFsaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9WYWxpZGF0ZVBhcmVudChnZXRGaWVsZChpZCksIGludmFsaWQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IGZpZWxkRGF0YUJpbmRpbmdzKCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmNvbmZpZy5zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb24gPSBwcm9wcy5jb25maWcuc2VjdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNlY3Rpb24uY29tcG9uZW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnQgPSBzZWN0aW9uLmNvbXBvbmVudHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkcyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGdldEZpZWxkc0Zyb21UYWIoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBjb21wb25lbnQuZmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZmllbGRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1trXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5wdXNoKCFVdGlscy5pc051bGwoZmllbGQuZGF0YUJpbmRpbmcpID8gZmllbGQuZGF0YUJpbmRpbmcgOiBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkTmFtZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRDb250YWluZXJFcnJvckhhbmRsZXIoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50ID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgbW9kZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKG1vZGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMoe30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QobW9kZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhtb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UgJiYgdmFsdWVzLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXAgPSAhVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1hc3RlclZhbHVlcykpIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKG1hcC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuaWQgPSB2YWx1ZXMuY3VycmVudC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0SW52YWxpZEZpZWxkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkVmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHZhbHVlcy5jdXJyZW50LCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRWYWxpZCA9PT0gZmFsc2UgfHwgVXRpbHMuaXNOdWxsKGZpZWxkVmFsaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJJbnZhbGlkIGZvcm0gZmllbGQgW1wiICsgZmllbGQuaGFuZGxlLmFwaS5pZCArIFwiXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmlyc3RJbnZhbGlkRmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkRmllbGQgPSBmaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZmllbGQsICFmaWVsZFZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBmaWVsZC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBnZXRWYWx1ZVBhdGgoaWQsIHZhbHVlcy5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldID0gZmllbGQuaGFuZGxlLmFwaS5wYXJzZVZhbHVlKHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmlyc3RJbnZhbGlkRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEludmFsaWRGaWVsZC5oYW5kbGUuYXBpLnNjcm9sbFRvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB2YWx1ZXMuY3VycmVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KSAmJiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudChmaWVsZFBhcmVudEVycm9ycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZCA/IGRhdGEgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyhwcm9wcy5oYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcpICYmICFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHByb3BzLnZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtwcm9wcy5jb25maWcsIHByb3BzLnZhbHVlc10pO1xuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXN0ZXJWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRGF0YUFycml2ZWQobWFzdGVyVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW21hc3RlclZhbHVlc10pO1xuXG4gICAgICAgIGNvbnN0IGdldEZpZWxkc0Zyb21UYWIgPSAodGFiKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGRzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhYlBhZ2Ugb2YgdGFiLnRhYlBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGFiUGFnZS5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2Zvcm1TZWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZHNldCBvZiBjb21wb25lbnQuY29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZmllbGRzZXQuZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1EYXRhT2JqZWN0ID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGxldCBmb3JtVmFsdWVzID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnKSB7XG4gICAgICAgICAgICAgICAgZm9ybVZhbHVlcyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgbWFwID0gZGF0YS5tYXA7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwobWFwKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VucyA9IHByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBmb3JtVmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IHRva2Vuc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IHRva2Vucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodm9bdG9rZW5dKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9bdG9rZW5dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2byA9IHZvW3Rva2VuXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSBtYXBbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybVZhbHVlcyA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmb3JtVmFsdWVzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIGRvQ2xlYXIoKSB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnMoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgICAgICAgZmllbGQuaGFuZGxlLmFwaS5jbGVhcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHt9O1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIoe30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnModHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkb0JpbmREYXRhKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLnZhbHVlID0gZmllbGQuaGFuZGxlLmFwaS5wYXJzZVZhbHVlKGRhdGFba2V5XSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVZhbHVlcyhkYXRhKSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgcGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsdWUgPSBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlLmFwaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldID0gZmllbGQuaGFuZGxlLmFwaS5wYXJzZVZhbHVlKG9iamVjdFZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdOVUxMIGZpZWxkIHJlZmVyZW5jZSB3aGlsZSBwYXJzaW5nIGZvcm0gdmFsdWUgLSAnICsgZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWVzLmN1cnJlbnQgPSBwYXJzZWRWYWx1ZXM7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuZGF0YUFycml2ZWRIYW5kbGVyKHBhcnNlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIC8vcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHBhcnNlZFZhbHVlcyk7XG4gICAgICAgICAgICAvL31cbiAgICAgICAgfVxuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLnZhbHVlc10pO1xuXG4gICAgICAgIGNvbnN0IGdldEZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZW1vdmVGaWVsZCA9IChpZCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkLCB1cGRhdGVFcnJvcnMgPSB0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkLnBhcmVudElkKSkge1xuICAgICAgICAgICAgICAgIGxldCBpc1BhcmVudEludmFsaWQgPSBpbnZhbGlkO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0gIT09IGZpZWxkICYmIGZpZWxkc1tpXS5wYXJlbnRJZCA9PT0gZmllbGQucGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGFyZW50SW52YWxpZCA9IGlzUGFyZW50SW52YWxpZCB8fCAhKFV0aWxzLmlzTnVsbChmaWVsZHNbaV0uZXJyb3IpIHx8IGZpZWxkc1tpXS5lcnJvci5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRQYXJlbnRFcnJvcnNbZmllbGQucGFyZW50SWRdID0gaXNQYXJlbnRJbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlRXJyb3JzICYmICFVdGlscy5pc051bGwoY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KSAmJiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudChmaWVsZFBhcmVudEVycm9ycyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZFBhcmVudEVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSAoZmllbGQsIGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRWYWx1ZVBhdGggPSAoaWQsIHZhbHMpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0ge307XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHZhbHM7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHMpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjdXJyZW50VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGxldCB0b2tlbnMgPSBpZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvW3Rva2Vuc1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbnNbaV1dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gdm87XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkb0hhbmRsZUNoYW5nZSA9IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGlkLCBudWxsKTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlUHJvcGVydHkpICYmIGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkID0gdmFsaWRhdGVGaWVsZChmaWVsZCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRpb25Hcm91cCA9IGdyb3VwRmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbGlkYXRpb25Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgIT09IGdyb3VwRmllbGQgJiYgdmFsaWRhdGlvbkdyb3VwID09PSBmaWVsZC5oYW5kbGUuYXBpLmdldFZhbGlkYXRpb25Hcm91cCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkSWQgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncmlkRmllbGRQYXRoID0gZ2V0VmFsdWVQYXRoKGdyb3VwRmllbGRJZCwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZ3JpZEZpZWxkUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkVmFsID0gZ3JpZEZpZWxkUGF0aC52YWx1ZU9iamVjdFtncmlkRmllbGRQYXRoLnZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZChncm91cEZpZWxkLCBncm91cEZpZWxkSWQsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIoaW52YWxpZCA/IG51bGwgOiB2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCB2YWx1ZXMuY3VycmVudCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gKGlkLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGRGaWVsZCA9IChpZCwgaGFuZGxlLCBwYXJlbnRJZCwgYmluZFZhbHVlVG9Gb3JtKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGZpZWxkLmVycm9yO1xuICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGQgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkLmlkID0gaWQ7XG4gICAgICAgICAgICBmaWVsZC5oYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICBmaWVsZC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgZmllbGQuYmluZFZhbHVlVG9Gb3JtID0gYmluZFZhbHVlVG9Gb3JtO1xuICAgICAgICAgICAgZmllbGQucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSA9IChuYW1lLCBvcHRpb25zLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmIChVdGlscy5pc051bGwob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tpXS5pZCA9PT0gc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UobmFtZSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAuLi52YWx1ZXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZW5kZXIoZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoVXRpbHMuaXNOdWxsKGZvcm0uc2VjdGlvbnMpIHx8IGZvcm0uc2VjdGlvbnMubGVuZ3RoID09PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoc2VjdGlvbi5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uaWQgPSBzZWN0aW9uQ291bnRlciArICctZm9ybS1zZWN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17c2VjdGlvbkNvdW50ZXIrK30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiBrZXlIYW5kbGVyPXtwcm9wcy5rZXlIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtzZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtjcmVhdGVTZWN0aW9uSGFuZGxlKHNlY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLmhhbmRsZS5hcGkpID8gcHJvcHMuaGFuZGxlLmFwaSA6IGFwaSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt2YWx1ZXMuY3VycmVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0gaWQ9e3Byb3BzLmNvbmZpZy5pZH0gc3R5bGU9e1xuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSA9PT0gJ2RlZmF1bHRGb3JtJyA/XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxNnB4IDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnNzB2aCdcbiAgICAgICAgICAgICAgICAgICAgfSwgcHJvcHMuY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5pZCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+RVJST1I6IEEgZm9ybSBtdXN0IGhhdmUgYW4gSUQ8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj4pO1xuICAgIH0pXG47XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssV0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sbUJBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLHlCQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxVQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVyxNQUFBLEdBQUFaLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBWSxNQUFBLEdBQUFaLE9BQUE7QUFBNkQsU0FBQUQsdUJBQUFjLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyxRQUFBSCxDQUFBLEVBQUFJLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQVAsQ0FBQSxPQUFBTSxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBUixDQUFBLEdBQUFJLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFYLENBQUEsRUFB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
687
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwiZmllbGRWYWxpZGl0eSIsIk1hcCIsInNlY3Rpb25Db3VudGVyIiwiYXBpIiwiaWQiLCJkb1VwZGF0ZVZhbHVlIiwibmFtZSIsInVwZGF0ZVZhbHVlIiwiY2xlYXIiLCJkb0NsZWFyIiwic2V0VmFsdWUiLCJkb0hhbmRsZUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJvcHRpb25zIiwic2VsZWN0ZWRJZCIsImhhbmRsZUNoYW5nZSIsImdldFZhbHVlUGF0aCIsImFkZEZpZWxkIiwicmVmIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJyZW1vdmVGaWVsZCIsInNldEZpZWxkVmFsaWRpdHkiLCJyZXN1bHQiLCJjdXJyZW50Iiwic2V0IiwiY2xlYXJGaWVsZFZhbGlkaXR5IiwiZGVsZXRlIiwidmFsaWRhdGVBbGwiLCJmaWVsZCIsImhhbmRsZSIsInBhdGgiLCJjdXJyZW50VmFsdWUiLCJ2YWx1ZU9iamVjdCIsInZhbHVlUHJvcGVydHkiLCJ2YWxpZGF0ZSIsImZpcnN0SW52YWxpZCIsInYiLCJnZXQiLCJ2YWxpZCIsImRvVmFsaWRhdGVQYXJlbnQiLCJzY3JvbGxUbyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJnZXRGaWVsZCIsImZpZWxkRGF0YUJpbmRpbmdzIiwiZmllbGROYW1lcyIsInNlY3Rpb25zIiwic2VjdGlvbiIsImoiLCJjb21wb25lbnRzIiwiY29tcG9uZW50IiwidHlwZSIsImdldEZpZWxkc0Zyb21UYWIiLCJrIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsIm1vZGVsIiwicGFyc2VWYWx1ZXMiLCJ0cmFuc2Zvcm1EYXRhT2JqZWN0Iiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZ2V0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm1vcmVDaGlsZHJlbiIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJzZWN0aW9uSGFuZGxlIiwiY2hpbGQiLCJyZWZyZXNoIiwicGFyc2VkQ29uZmlnIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImNyZWF0ZVNlY3Rpb25IYW5kbGUiLCJ1cGRhdGVWaWV3VGl0bGUiLCJ2aWV3IiwiZ2V0VmlldyIsInRpdGxlIiwiaW5jbHVkZXMiLCJ1cGRhdGVBcHBCYXJUaXRsZSIsImhhbmRsZURhdGFBcnJpdmVkIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJEQVRBX0FSUklWRUQiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsImV2ZW50Q29uZmlnIiwiY29tcG9uZW50Q29uZmlnIiwiZXZlbnREYXRhIiwidW5kZWZpbmVkIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwiY29tcG9uZW50VmFsdWUiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJpbnZva2VScGMiLCJ0aGVuIiwiY29uc29sZSIsImNhdGNoIiwiZXJyb3JUeXBlIiwicHVibGlzaEVycm9yTWVzc2FnZSIsInNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsImV4ZWN1dGUiLCJwYXJhbWV0ZXIiLCJpc0V4cHJlc3Npb24iLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJpc0V2ZW50RGF0YSIsInRvU3RyaW5nIiwic3RhcnRzV2l0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwiYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsInZhbCIsIm1hcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJ1c2VFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImF1dG9Mb2FkRGF0YSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInN1YnNjcmlwdGlvbiIsImV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwiYWN0aW9ucyIsImFjdGlvblR5cGUiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImhhbmRsZUxvYWRDb21wbGV0ZSIsImNsZWFyQ29tcG9uZW50RXZlbnRMaXN0ZW5lcnMiLCJ0YWIiLCJ0YWJQYWdlIiwidGFiUGFnZXMiLCJmaWVsZHNldCIsImZvcm1WYWx1ZXMiLCJ0b2tlbnMiLCJzcGxpdCIsInZvIiwidG9rZW4iLCJlbmFibGVGb3JtTWFya2VycyIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIm1vZGVsQ2hhbmdlSGFuZGxlciIsImtleSIsInBhcnNlVmFsdWUiLCJwYXJzZWRWYWx1ZXMiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJvYmplY3RWYWx1ZSIsImRhdGFBcnJpdmVkSGFuZGxlciIsInNwbGljZSIsInVwZGF0ZUVycm9ycyIsImlzUGFyZW50SW52YWxpZCIsInZhbGlkYXRlRmllbGQiLCJ2YWxzIiwiY3VycmVudFZhbHVlcyIsImdyb3VwRmllbGQiLCJ2YWxpZGF0aW9uR3JvdXAiLCJnZXRWYWxpZGF0aW9uR3JvdXAiLCJncm91cEZpZWxkSWQiLCJncmlkRmllbGRQYXRoIiwiZ3JvdXBGaWVsZFZhbCIsImxvZyIsIlZBTFVFX0NIQU5HRSIsInNlbGVjdGlvbiIsInNlbGVjdGVkVmFsdWUiLCJyZW5kZXIiLCJmb3JtIiwiY3JlYXRlRWxlbWVudCIsImtleUhhbmRsZXIiLCJkaXNhYmxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwibWVyZ2VTdHlsZXMiLCJwYWRkaW5nIiwib3ZlcmZsb3ciLCJtYXhIZWlnaHQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9Gb3JtLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHttYWtlU3R5bGVzfSBmcm9tICdAbXVpL3N0eWxlcyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuaW1wb3J0IFNlY3Rpb24gZnJvbSAnLi9TZWN0aW9uJztcbmltcG9ydCAnLi9Gb3JtLmNzcyc7XG5pbXBvcnQge2ludm9rZVJwY30gZnJvbSAnLi4vLi4vUmVzdFNlcnZpY2UnO1xuaW1wb3J0IHtNdXRleH0gZnJvbSAnYXN5bmMtbXV0ZXgnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuLi8uLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBzZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXIgZnJvbSAnLi4vLi4vZXZlbnQvU2VydmljZUNhbGxBY3Rpb25IYW5kbGVyJztcbmltcG9ydCBkeW5hbWljSlMgZnJvbSAnLi4vLi4vRHluYW1pY0pTJztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnRUeXBlJztcbmltcG9ydCBFdmVudCBmcm9tICcuLi8uLi9ldmVudC9FdmVudCc7XG5pbXBvcnQge2NsZWFyfSBmcm9tIFwiQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50L2Rpc3QvY2xlYXJcIjtcblxuY29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcyh0aGVtZSA9PiAoe1xuICAgIGNvbnRhaW5lcjoge1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICcmIHRyIHRkJzoge1xuICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0OiB7XG4gICAgICAgIG1hcmdpbjogdGhlbWUuc3BhY2luZygxKSxcbiAgICAgICAgbWluV2lkdGg6IDEyMCxcbiAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgIH0sXG4gICAgc2VsZWN0RW1wdHk6IHtcbiAgICAgICAgbWFyZ2luVG9wOiB0aGVtZS5zcGFjaW5nKDIpLFxuICAgIH0sXG4gICAgcm9vdDoge31cbn0pKTtcblxuY29uc3QgRm9ybSA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFJlYWN0LnVzZVJlZighVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykgPyBwcm9wcy52YWx1ZXMgOiB7fSk7XG4gICAgICAgIGNvbnN0IFttYXN0ZXJWYWx1ZXMsIHNldE1hc3RlclZhbHVlc10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICAgICAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlKFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKSk7XG4gICAgICAgIGNvbnN0IFtiaW5kZXJdID0gUmVhY3QudXNlU3RhdGUoVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5iaW5kZXIpID8gJ1BMQUlOX09CSkVDVCcgOiBwcm9wcy5jb25maWcuYmluZGVyKTtcbiAgICAgICAgY29uc3QgW2ZpZWxkc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVycm9yQ2FsbGJhY2sgPSBSZWFjdC51c2VSZWYoKTtcbiAgICAgICAgY29uc3QgW3NlY3Rpb25IYW5kbGVzXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICAgICAgY29uc3QgW2ZpZWxkUGFyZW50RXJyb3JzXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICAgICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdSZWYgPSBSZWFjdC51c2VSZWYodHJ1ZSk7XG4gICAgICAgIC8vIFZhbGlkaXR5IHJlZ2lzdGVyOiBNYXA8ZmllbGRJZCwgeyB2YWxpZCwgbWVzc2FnZSwgZm9yY2VNYXJrZXIgfT4uXG4gICAgICAgIC8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIFwiaXMgdGhpcyBmaWVsZCB2YWxpZD9cIi4gQmFzZUZpZWxkIHdyaXRlc1xuICAgICAgICAvLyBoZXJlIGZyb20gZG9WYWxpZGF0aW9uOyBmb3JtLnZhbHVlIHJlYWRzIGhlcmUgd2l0aG91dCBpbnZva2luZyBhbnlcbiAgICAgICAgLy8gZmllbGQgbWV0aG9kcyAoa2lsbHMgdGhlIGJpLWRpcmVjdGlvbmFsIHJlbmRlci10aW1lIGNoYWluIHRoYXRcbiAgICAgICAgLy8gcHJvZHVjZWQgUmVhY3QgIzE4NSkuXG4gICAgICAgIGNvbnN0IGZpZWxkVmFsaWRpdHkgPSBSZWFjdC51c2VSZWYobmV3IE1hcCgpKTtcbiAgICAgICAgbGV0IHNlY3Rpb25Db3VudGVyID0gMDtcblxuICAgICAgICBjb25zdCBhcGkgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmNvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvVXBkYXRlVmFsdWU6IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9DbGVhcigpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0VmFsdWU6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2U6IChuYW1lLCBvcHRpb25zLCBzZWxlY3RlZElkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTZWxlY3RJdGVtQ2hhbmdlKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlOiAoaWQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvSGFuZGxlQ2hhbmdlKGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZVBhdGg6IChpZCwgdmFsdWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVBhdGgoaWQsIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhZGRGaWVsZDogKGlkLCByZWYsIHBhcmVudElkLCBiaW5kVmFsdWVUb0Zvcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZEZpZWxkKGlkLCByZWYsIHBhcmVudElkLCBiaW5kVmFsdWVUb0Zvcm0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVtb3ZlRmllbGQ6IChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVGaWVsZChpZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZFZhbGlkaXR5OiAoaWQsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuc2V0KGlkLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xlYXJGaWVsZFZhbGlkaXR5OiAoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRWYWxpZGl0eS5jdXJyZW50LmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUFsbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBsaWNpdCBcImZvcmNlLXZhbGlkYXRlIGV2ZXJ5IGZpZWxkXCIgY29tbWFuZC4gUmVwbGFjZXMgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIG9sZCBoYWNrIG9mIHJlYWRpbmcgZm9ybS52YWx1ZSBwdXJlbHkgZm9yIGl0cyBzaWRlIGVmZmVjdHMuXG4gICAgICAgICAgICAgICAgICAgIC8vIEZpZWxkcyB3cml0ZSBpbnRvIGZpZWxkVmFsaWRpdHkgdmlhIGRvVmFsaWRhdGlvbiBhcyBhIHNpZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZWZmZWN0IG9mIHZhbGlkYXRlOyB3ZSB0aGVuIHdhbGsgdGhlIHJlZ2lzdGVyIGZvciBpbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpZWxkcyB0byBkcml2ZSBVWCAoc2Nyb2xsVG8gZmlyc3QsIHJlZnJlc2ggY29udGFpbmVyIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxiYWNrKSDigJQgc2FtZSBVWCB0aGUgZ2V0dGVyIHVzZWQgdG8gcHJvdmlkZSwgbm93IG9wdC1pbi5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZSkgJiYgIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhc3MgdGhlIGFjdHVhbCBjdXJyZW50IHZhbHVlIHNvIGRvVmFsaWRhdGlvbidzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGN1cnJlbnRWYWx1ZSwgcmVxdWlyZWQsIG1hcmtlcnMpIGNhY2hlIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZmxlY3RzIHJlYWxpdHkuIFdpdGhvdXQgdGhpcyB3ZSB3ZXJlIHBhc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudWxsLCB3aGljaCBtYWRlIGNhY2hlIGhpdHMgb3BhcXVlIGluIGxvZ3MgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yY2VkIFV0aWxzLnZhbGlkYXRlRmllbGQgdG8gZmFsbCBiYWNrIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzW2lkXSBldmVyeSB0aW1lLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBnZXRWYWx1ZVBhdGgoZmllbGQuaWQsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9ICFVdGlscy5pc051bGwocGF0aCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaGFuZGxlLmFwaS52YWxpZGF0ZSh2YWx1ZXMuY3VycmVudCwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RJbnZhbGlkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5iaW5kVmFsdWVUb0Zvcm0gPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZ2V0KGZpZWxkLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHYudmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEludmFsaWQgPT09IG51bGwpIGZpcnN0SW52YWxpZCA9IGZpZWxkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpcnN0SW52YWxpZClcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkLmhhbmRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkuc2Nyb2xsVG8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0SW52YWxpZC5oYW5kbGUuYXBpLnNjcm9sbFRvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KSAmJiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KGZpZWxkUGFyZW50RXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZERhdGE6IChhY3Rpb25Db25maWcsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWREYXRhKGFjdGlvbkNvbmZpZywgY29uZmlnLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJpbmREYXRhOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0JpbmREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdmFsaWRhdGVQYXJlbnQ6IChpZCwgaW52YWxpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGdldEZpZWxkKGlkKSwgaW52YWxpZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgZmllbGREYXRhQmluZGluZ3MoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZE5hbWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMuY29uZmlnLnNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VjdGlvbiA9IHByb3BzLmNvbmZpZy5zZWN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2VjdGlvbi5jb21wb25lbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBvbmVudCA9IHNlY3Rpb24uY29tcG9uZW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGRzID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZ2V0RmllbGRzRnJvbVRhYihjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGNvbXBvbmVudC5maWVsZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBmaWVsZHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goIVV0aWxzLmlzTnVsbChmaWVsZC5kYXRhQmluZGluZykgPyBmaWVsZC5kYXRhQmluZGluZyA6IGZpZWxkLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGROYW1lcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldENvbnRhaW5lckVycm9ySGFuZGxlcihjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQgPSBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0IG1vZGVsKG1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwobW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMoe30pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChtb2RlbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKG1vZGVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBQdXJlIHJlYWQg4oCUIG5vIHNpZGUgZWZmZWN0cywgbm8gY2FsbHMgaW50byBmaWVsZHMuXG4gICAgICAgICAgICAgICAgICAgIC8vIFZhbGlkaXR5IGlzIGNvbXB1dGVkIGZyb20gdGhlIGZpZWxkVmFsaWRpdHkgcmVnaXN0ZXIsIHdoaWNoXG4gICAgICAgICAgICAgICAgICAgIC8vIEJhc2VGaWVsZCBwb3B1bGF0ZXMgZnJvbSBkb1ZhbGlkYXRpb24uIENhbGxlcnMgbmVlZGluZyB0b1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZSB2YWxpZGF0aW9uICsgVVggc2lkZSBlZmZlY3RzIChzY3JvbGxUbywgbWFya2VyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2gpIHNob3VsZCBjYWxsIGFwaS52YWxpZGF0ZUFsbCgpIGV4cGxpY2l0bHkuXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlICYmIHZhbHVlcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5iaW5kVmFsdWVUb0Zvcm0gPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gZmllbGRWYWxpZGl0eS5jdXJyZW50LmdldChmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi52YWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RmllbGRFcnJvcjogKGlkLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmllbGRFcnJvcihpZCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0Q2hpbGRyZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGZpZWxkLmhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9yZUNoaWxkcmVuID0gZmllbGQuaGFuZGxlLmFwaS5nZXRDaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtb3JlQ2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKG1vcmVDaGlsZHJlbltqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNlY3Rpb25IYW5kbGVzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VjdGlvbkhhbmRsZSA9IHNlY3Rpb25IYW5kbGVzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goc2VjdGlvbkhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHNlY3Rpb25IYW5kbGUuYXBpLmdldENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlLmFwaS5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJzZWRDb25maWcudmlzaWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZVNlY3Rpb25IYW5kbGUgPSAoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaGFuZGxlID0ge307XG4gICAgICAgICAgICAgICAgc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF0gPSBoYW5kbGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVZpZXdUaXRsZSgpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy52aWV3SWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmlldyA9IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRWaWV3KHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gdmlldy5jb25maWcudGl0bGU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYodGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZS5pbmNsdWRlcyhwcm9wcy5jb25maWcuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnVwZGF0ZUFwcEJhclRpdGxlKHZpZXcuY29uZmlnLmlkLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVEYXRhQXJyaXZlZChkYXRhKSB7XG4gICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIGRhdGEpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLkRBVEFfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLnByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zKGZpZWxkLmhhbmRsZS5hcGkuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbG9hZERhdGEoZXZlbnRDb25maWcsIGNvbXBvbmVudENvbmZpZywgZXZlbnREYXRhID0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHNlcnZpY2UgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSkgPyBjb21wb25lbnRDb25maWcuZGF0YVNlcnZpY2UgOlxuICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnICE9PSBudWxsID8gZXZlbnRDb25maWcuZGF0YVNlcnZpY2UgOiBudWxsO1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudFZhbHVlID0gIVV0aWxzLmlzTnVsbChjb21wb25lbnRDb25maWcudmFsdWUpID8gYXBwbGljYXRpb25NYW5hZ2VyLnJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZShjb21wb25lbnRDb25maWcudmFsdWUsIGV2ZW50RGF0YSkgOlxuICAgICAgICAgICAgICAgICFVdGlscy5pc051bGwoZXZlbnRDb25maWcpID8gYXBwbGljYXRpb25NYW5hZ2VyLnJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZShldmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UpKSB7XG4gICAgICAgICAgICAgICAgZG9DbGVhcigpO1xuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlLnR5cGUgPT09ICdycGMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZVJwYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBwcm9wcy5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ6IHByb3BzLnZpZXdJZFxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5lcnJvclR5cGUgPT09ICdJTlZBTElEX1BBUkFNRVRFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5wdWJsaXNoRXJyb3JNZXNzYWdlKGUsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChldmVudENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBldmVudENvbmZpZy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyA6IEltcGxlbWVudCB0aGUgaW52YWxpZCBwYXJhbWVudGVyIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlci5leGVjdXRlKGV2ZW50Q29uZmlnLCBudWxsLCBudWxsLCBwcm9wcy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QoZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAocGFyYW1ldGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGF0YUFycml2ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29tcG9uZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFZhbHVlID0gYXBwbGljYXRpb25NYW5hZ2VyLmZpbGxFdmVudERhdGFWYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc0V2ZW50RGF0YSA9IGNvbXBvbmVudFZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihjb21wb25lbnRWYWx1ZSkgJiYgIWlzRXZlbnREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKGNvbXBvbmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbihwcm9wcy52aWV3SWQsIHByb3BzLnZpZXdJZCwgcHJvcHMuY29uZmlnLmlkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0KGAke3Byb3BzLmNvbmZpZy5pZH1WYWx1ZUV2YWx1YXRvcmAsIGNvbXBvbmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGVyID09PSAnTUFQX09CSkVDVCcgJiYgVXRpbHMuaXNOdWxsKHZhbHVlLm1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwubWFwID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QodmFsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXModmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGlzRXZlbnREYXRhID8gYXBwbGljYXRpb25NYW5hZ2VyLnJlc29sdmVFeHByZXNzaW9uVmFsdWUoY29tcG9uZW50VmFsdWUsIGV2ZW50RGF0YSkgOiBjb21wb25lbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwoY29tcG9uZW50VmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSBjb21wb25lbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmlld1RpdGxlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICAgICAgICAgIGxldCBldmVudEhhbmRsaW5nQ29uZmlnID0gVXRpbHMuaXNOdWxsKGNvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnKSA/IHt9IDogY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWc7XG4gICAgICAgICAgICBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMgPSBVdGlscy5pc051bGwoZXZlbnRIYW5kbGluZ0NvbmZpZy5zdWJzY3JpcHRpb25zKSA/IFtdIDogZXZlbnRIYW5kbGluZ0NvbmZpZy5zdWJzY3JpcHRpb25zO1xuXG4gICAgICAgICAgICBsZXQgYXV0b0xvYWREYXRhID0gVXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKGNvbmZpZywgJ2F1dG9Mb2FkRGF0YScsIG51bGwpO1xuICAgICAgICAgICAgaWYgKGF1dG9Mb2FkRGF0YSA9PT0gbnVsbCB8fCBhdXRvTG9hZERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IEV2ZW50VHlwZS5DT01QT05FTlRfTE9BRCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6ICdsb2FkRGF0YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsaW5nQ29uZmlnLCBwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyhwcm9wcy52aWV3SWQsIGNvbmZpZyk7XG4gICAgICAgICAgICBzZXRDb25maWcoY29uZmlnKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgaGFuZGxlID0gZmllbGQuaGFuZGxlO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGhhbmRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmFwaS5oYW5kbGVMb2FkQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCBudWxsKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELCBldmVudCk7XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmNsZWFyQ29tcG9uZW50RXZlbnRMaXN0ZW5lcnMocHJvcHMuaGFuZGxlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuY29uZmlnKSAmJiAhVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyhwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbcHJvcHMuY29uZmlnLCBwcm9wcy52YWx1ZXNdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwobWFzdGVyVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG1hc3RlclZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFttYXN0ZXJWYWx1ZXNdKTtcblxuICAgICAgICBjb25zdCBnZXRGaWVsZHNGcm9tVGFiID0gKHRhYikgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWJQYWdlIG9mIHRhYi50YWJQYWdlcykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRhYlBhZ2UuY29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdmb3JtU2VjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRzZXQgb2YgY29tcG9uZW50LmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBmaWVsZHMuY29uY2F0KGZpZWxkc2V0LmZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtRGF0YU9iamVjdCA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBsZXQgZm9ybVZhbHVlcyA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJykge1xuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMgPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IG1hcCA9IGRhdGEubWFwO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtYXApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbnMgPSBwcm9wZXJ0eS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZvID0gZm9ybVZhbHVlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW4gPSB0b2tlbnNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCB0b2tlbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZvW3Rva2VuXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvW3Rva2VuXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9bdG9rZW5dID0gbWFwW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMgPSBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZm9ybVZhbHVlcztcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBkb0NsZWFyKCkge1xuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKGZhbHNlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWVzLmN1cnJlbnQgPSB7fTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIoe30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZG9CaW5kRGF0YShkYXRhKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaGFuZGxlLmFwaS52YWx1ZSA9IGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShkYXRhW2tleV0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VWYWx1ZXMoZGF0YSkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZFZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBnZXRWYWx1ZVBhdGgoZmllbGQuaWQsIHBhcnNlZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbHVlID0gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XSA9IGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShvYmplY3RWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTlVMTCBmaWVsZCByZWZlcmVuY2Ugd2hpbGUgcGFyc2luZyBmb3JtIHZhbHVlIC0gJyArIGZpZWxkLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5jdXJyZW50ID0gcGFyc2VkVmFsdWVzO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuZGF0YUFycml2ZWRIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLmRhdGFBcnJpdmVkSGFuZGxlcihwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2lmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAvL3Byb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcihwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgLy99XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHByb3BzLnZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtwcm9wcy52YWx1ZXNdKTtcblxuICAgICAgICBjb25zdCBnZXRGaWVsZCA9IChpZCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlRmllbGQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZGVsZXRlKGlkKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkLCB1cGRhdGVFcnJvcnMgPSB0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkLnBhcmVudElkKSkge1xuICAgICAgICAgICAgICAgIGxldCBpc1BhcmVudEludmFsaWQgPSBpbnZhbGlkO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0gIT09IGZpZWxkICYmIGZpZWxkc1tpXS5wYXJlbnRJZCA9PT0gZmllbGQucGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGFyZW50SW52YWxpZCA9IGlzUGFyZW50SW52YWxpZCB8fCAhKFV0aWxzLmlzTnVsbChmaWVsZHNbaV0uZXJyb3IpIHx8IGZpZWxkc1tpXS5lcnJvci5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRQYXJlbnRFcnJvcnNbZmllbGQucGFyZW50SWRdID0gaXNQYXJlbnRJbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlRXJyb3JzICYmICFVdGlscy5pc051bGwoY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KSAmJiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudChmaWVsZFBhcmVudEVycm9ycyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZFBhcmVudEVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSAoZmllbGQsIGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRWYWx1ZVBhdGggPSAoaWQsIHZhbHMpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0ge307XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHZhbHM7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHMpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjdXJyZW50VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGxldCB0b2tlbnMgPSBpZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvW3Rva2Vuc1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbnNbaV1dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gdm87XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkb0hhbmRsZUNoYW5nZSA9IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGlkLCBudWxsKTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlUHJvcGVydHkpICYmIGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkID0gdmFsaWRhdGVGaWVsZChmaWVsZCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRpb25Hcm91cCA9IGdyb3VwRmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbGlkYXRpb25Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgIT09IGdyb3VwRmllbGQgJiYgdmFsaWRhdGlvbkdyb3VwID09PSBmaWVsZC5oYW5kbGUuYXBpLmdldFZhbGlkYXRpb25Hcm91cCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkSWQgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncmlkRmllbGRQYXRoID0gZ2V0VmFsdWVQYXRoKGdyb3VwRmllbGRJZCwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZ3JpZEZpZWxkUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkVmFsID0gZ3JpZEZpZWxkUGF0aC52YWx1ZU9iamVjdFtncmlkRmllbGRQYXRoLnZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLVZhbGlkYXRpbmcgZm9ybScsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZChncm91cEZpZWxkLCBncm91cEZpZWxkSWQsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIoaW52YWxpZCA/IG51bGwgOiB2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCB2YWx1ZXMuY3VycmVudCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gKGlkLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGRGaWVsZCA9IChpZCwgaGFuZGxlLCBwYXJlbnRJZCwgYmluZFZhbHVlVG9Gb3JtKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGZpZWxkLmVycm9yO1xuICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGQgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkLmlkID0gaWQ7XG4gICAgICAgICAgICBmaWVsZC5oYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICBmaWVsZC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgZmllbGQuYmluZFZhbHVlVG9Gb3JtID0gYmluZFZhbHVlVG9Gb3JtO1xuICAgICAgICAgICAgZmllbGQucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSA9IChuYW1lLCBvcHRpb25zLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmIChVdGlscy5pc051bGwob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tpXS5pZCA9PT0gc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UobmFtZSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAuLi52YWx1ZXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZW5kZXIoZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoVXRpbHMuaXNOdWxsKGZvcm0uc2VjdGlvbnMpIHx8IGZvcm0uc2VjdGlvbnMubGVuZ3RoID09PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoc2VjdGlvbi5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uaWQgPSBzZWN0aW9uQ291bnRlciArICctZm9ybS1zZWN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17c2VjdGlvbkNvdW50ZXIrK30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiBrZXlIYW5kbGVyPXtwcm9wcy5rZXlIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtzZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtjcmVhdGVTZWN0aW9uSGFuZGxlKHNlY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLmhhbmRsZS5hcGkpID8gcHJvcHMuaGFuZGxlLmFwaSA6IGFwaSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt2YWx1ZXMuY3VycmVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0gaWQ9e3Byb3BzLmNvbmZpZy5pZH0gc3R5bGU9e1xuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSA9PT0gJ2RlZmF1bHRGb3JtJyA/XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxNnB4IDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnNzB2aCdcbiAgICAgICAgICAgICAgICAgICAgfSwgcHJvcHMuY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5pZCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+RVJST1I6IEEgZm9ybSBtdXN0IGhhdmUgYW4gSUQ8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj4pO1xuICAgIH0pXG47XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssV0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sbUJBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLHlCQUFBLEdBQUFULHNCQUFBLENBQUFD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
@@ -8,7 +8,6 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
9
9
  var _BaseField = require("./BaseField");
10
10
  var _Utils = _interopRequireDefault(require("../../Utils"));
11
- var _reactRedux = require("react-redux");
12
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
12
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
13
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
@@ -20,10 +19,16 @@ const TextFieldWrapper = /*#__PURE__*/_react.default.memo(props => {
20
19
  const maxWidth = !_Utils.default.isNull((_props$config$attribu2 = props.config.attributes) === null || _props$config$attribu2 === void 0 || (_props$config$attribu2 = _props$config$attribu2.style) === null || _props$config$attribu2 === void 0 ? void 0 : _props$config$attribu2.maxWidth) ? props.config.attributes.style.maxWidth : null;
21
20
  const minWidth = !_Utils.default.isNull((_props$config$attribu3 = props.config.attributes) === null || _props$config$attribu3 === void 0 || (_props$config$attribu3 = _props$config$attribu3.style) === null || _props$config$attribu3 === void 0 ? void 0 : _props$config$attribu3.minWidth) ? props.config.attributes.style.minWidth : "240px";
22
21
  const height = !_Utils.default.isNull((_props$config$attribu4 = props.config.attributes) === null || _props$config$attribu4 === void 0 || (_props$config$attribu4 = _props$config$attribu4.style) === null || _props$config$attribu4 === void 0 ? void 0 : _props$config$attribu4.height) ? props.config.attributes.style.height : multiline ? '200px' : null;
23
- const secondaryColor = (0, _reactRedux.useSelector)(state => state.dashboard.secondaryThemeColor);
24
22
  const textRef = (0, _react.useRef)(null);
25
23
  const [rows, setRows] = (0, _react.useState)(1);
26
24
  const [localValue, setLocalValue] = (0, _react.useState)(null);
25
+ // Synchronous mirror of localValue so onBlur (and any handler that fires
26
+ // before React commits a pending setLocalValue) reads the latest typed
27
+ // value, not a stale closure capture. This is what makes the debounce safe:
28
+ // when the user clicks save mid-debounce, blur fires the onBlur handler
29
+ // bound on a previous render, and without the ref it would propagate the
30
+ // pre-keystroke value (or null) and clobber the typed text.
31
+ const localValueRef = (0, _react.useRef)(null);
27
32
  const debounceRef = (0, _react.useRef)(null);
28
33
  _react.default.useEffect(() => {
29
34
  if (textRef.current) {
@@ -32,7 +37,16 @@ const TextFieldWrapper = /*#__PURE__*/_react.default.memo(props => {
32
37
  const calculatedRows = Math.floor(height === null ? 20 : height.replace('px', '') / lineHeight);
33
38
  setRows(calculatedRows);
34
39
  }
35
- }, [textRef.current]);
40
+ }, []);
41
+ _react.default.useEffect(() => {
42
+ // Nullish-only check: empty string '' is a deliberate user-cleared
43
+ // state and must NOT be re-synced from base.value. Was `!localValue`
44
+ // which treated '' as falsy and could resurrect an external value
45
+ // over the user's clear.
46
+ if (localValue == null) {
47
+ setLocalValue(base.value);
48
+ }
49
+ }, [base.value]);
36
50
  return /*#__PURE__*/_react.default.createElement(_TextField.default, {
37
51
  id: props.id,
38
52
  type: props.type,
@@ -43,18 +57,20 @@ const TextFieldWrapper = /*#__PURE__*/_react.default.memo(props => {
43
57
  onChange: e => {
44
58
  const value = e.target.value;
45
59
  setLocalValue(value);
60
+ localValueRef.current = value;
46
61
  if (debounceRef.current) {
47
62
  clearTimeout(debounceRef.current);
48
63
  }
49
64
  debounceRef.current = setTimeout(() => {
50
65
  base.handleValueChange(value);
51
- }, 200); // NOT 10ms
66
+ }, 200);
52
67
  },
53
68
  onBlur: () => {
54
69
  if (debounceRef.current) {
55
70
  clearTimeout(debounceRef.current);
71
+ debounceRef.current = null;
56
72
  }
57
- base.handleValueChange(localValue);
73
+ base.handleValueChange(localValueRef.current);
58
74
  },
59
75
  slotProps: {
60
76
  input: {
@@ -92,4 +108,4 @@ const TextField = /*#__PURE__*/_react.default.memo(props => {
92
108
  }, props)));
93
109
  });
94
110
  var _default = exports.default = TextField;
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVGV4dEZpZWxkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9CYXNlRmllbGQiLCJfVXRpbHMiLCJfcmVhY3RSZWR1eCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9leHRlbmRzIiwiYXNzaWduIiwiYmluZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFwcGx5IiwiVGV4dEZpZWxkV3JhcHBlciIsIlJlYWN0IiwibWVtbyIsInByb3BzIiwiX3Byb3BzJGNvbmZpZyRhdHRyaWJ1IiwiX3Byb3BzJGNvbmZpZyRhdHRyaWJ1MiIsIl9wcm9wcyRjb25maWckYXR0cmlidTMiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnU0IiwiX3JlZiIsImJhc2UiLCJtdWx0aWxpbmUiLCJ1c2VTdGF0ZSIsIndpZHRoIiwiVXRpbHMiLCJpc051bGwiLCJjb25maWciLCJhdHRyaWJ1dGVzIiwic3R5bGUiLCJtYXhXaWR0aCIsIm1pbldpZHRoIiwiaGVpZ2h0Iiwic2Vjb25kYXJ5Q29sb3IiLCJ1c2VTZWxlY3RvciIsInN0YXRlIiwiZGFzaGJvYXJkIiwic2Vjb25kYXJ5VGhlbWVDb2xvciIsInRleHRSZWYiLCJ1c2VSZWYiLCJyb3dzIiwic2V0Um93cyIsImxvY2FsVmFsdWUiLCJzZXRMb2NhbFZhbHVlIiwiZGVib3VuY2VSZWYiLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiY29tcHV0ZWRTdHlsZSIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJsaW5lSGVpZ2h0IiwicGFyc2VGbG9hdCIsImNhbGN1bGF0ZWRSb3dzIiwiTWF0aCIsImZsb29yIiwicmVwbGFjZSIsImNyZWF0ZUVsZW1lbnQiLCJpZCIsInR5cGUiLCJyZXF1aXJlZCIsImlucHV0UmVmIiwibGFiZWwiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImhhbmRsZVZhbHVlQ2hhbmdlIiwib25CbHVyIiwic2xvdFByb3BzIiwiaW5wdXQiLCJhdXRvQ29tcGxldGUiLCJzeCIsIm9uS2V5VXAiLCJrZXlIYW5kbGVyIiwiZXJyb3IiLCJoYXNFcnJvciIsImhlbHBlclRleHQiLCJlcnJvck1lc3NhZ2UiLCJtYXJnaW4iLCJkaXNhYmxlZCIsInNpemUiLCJjbGFzc05hbWUiLCJjb2xvciIsInZhcmlhbnQiLCJUZXh0RmllbGQiLCJCYXNlRmllbGQiLCJoYW5kbGUiLCJ2YWx1ZVBhcnNlciIsImluYm91bmQiLCJ0b1N0cmluZyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL1RleHRGaWVsZC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0LCB7dXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRleHRGaWVsZENvbXBvbmVudCBmcm9tICdAbXVpL21hdGVyaWFsL1RleHRGaWVsZCc7XG5pbXBvcnQge0Jhc2VGaWVsZH0gZnJvbSBcIi4vQmFzZUZpZWxkXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uLy4uL1V0aWxzXCI7XG5cbmltcG9ydCB7dXNlU2VsZWN0b3J9IGZyb20gJ3JlYWN0LXJlZHV4J1xuXG5jb25zdCBUZXh0RmllbGRXcmFwcGVyID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgICBjb25zdCBiYXNlID0gcHJvcHMuYmFzZTtcbiAgICBjb25zdCBbbXVsdGlsaW5lXSA9IFJlYWN0LnVzZVN0YXRlKHByb3BzLm11bHRpbGluZSk7XG4gICAgY29uc3Qgd2lkdGggPSAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ud2lkdGgpID8gcHJvcHMuY29uZmlnLmF0dHJpYnV0ZXMuc3R5bGUud2lkdGggOiBcIjEwMCVcIjtcbiAgICBjb25zdCBtYXhXaWR0aCA9ICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmF0dHJpYnV0ZXM/LnN0eWxlPy5tYXhXaWR0aCkgPyBwcm9wcy5jb25maWcuYXR0cmlidXRlcy5zdHlsZS5tYXhXaWR0aCA6IG51bGw7XG4gICAgY29uc3QgbWluV2lkdGggPSAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ubWluV2lkdGgpID8gcHJvcHMuY29uZmlnLmF0dHJpYnV0ZXMuc3R5bGUubWluV2lkdGggOiBcIjI0MHB4XCI7XG4gICAgY29uc3QgaGVpZ2h0ID0gIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuYXR0cmlidXRlcz8uc3R5bGU/LmhlaWdodCkgPyBwcm9wcy5jb25maWcuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQgOiBtdWx0aWxpbmUgPyAnMjAwcHgnIDogbnVsbDtcbiAgICBjb25zdCBzZWNvbmRhcnlDb2xvciA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmRhc2hib2FyZC5zZWNvbmRhcnlUaGVtZUNvbG9yKTtcbiAgICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IFtyb3dzLCBzZXRSb3dzXSA9IHVzZVN0YXRlKDEpO1xuICAgIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IGRlYm91bmNlUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHRleHRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRleHRSZWYuY3VycmVudCk7XG4gICAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmxpbmVIZWlnaHQpIHx8IDIwO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFJvd3MgPSBNYXRoLmZsb29yKCBoZWlnaHQgPT09IG51bGwgPyAyMCA6IGhlaWdodC5yZXBsYWNlKCdweCcsICcnKSAvIGxpbmVIZWlnaHQpO1xuICAgICAgICAgICAgc2V0Um93cyhjYWxjdWxhdGVkUm93cyk7XG4gICAgICAgIH1cbiAgICB9LCBbdGV4dFJlZi5jdXJyZW50XSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dEZpZWxkQ29tcG9uZW50XG4gICAgICAgICAgICBpZD17cHJvcHMuaWR9XG4gICAgICAgICAgICB0eXBlPXtwcm9wcy50eXBlfVxuICAgICAgICAgICAgcmVxdWlyZWQ9e2Jhc2UucmVxdWlyZWR9XG4gICAgICAgICAgICBpbnB1dFJlZj17dGV4dFJlZn1cbiAgICAgICAgICAgIGxhYmVsPXshVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzKSA/IHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzWydsYWJlbCddIDogbnVsbH1cbiAgICAgICAgICAgIHZhbHVlPXtsb2NhbFZhbHVlID8/IGJhc2UudmFsdWUgPz8gJyd9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlYm91bmNlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZS5oYW5kbGVWYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSwgMjAwKTsgLy8gTk9UIDEwbXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkJsdXI9eygpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVib3VuY2VSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VSZWYuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYmFzZS5oYW5kbGVWYWx1ZUNoYW5nZShsb2NhbFZhbHVlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU6IFwibmV3LXBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgICAgIHN4OiB7fVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlVcD17cHJvcHMua2V5SGFuZGxlcn1cbiAgICAgICAgICAgIGVycm9yPXtiYXNlLmhhc0Vycm9yfVxuICAgICAgICAgICAgaGVscGVyVGV4dD17YmFzZS5lcnJvck1lc3NhZ2V9XG4gICAgICAgICAgICBtYXJnaW49XCJkZW5zZVwiXG4gICAgICAgICAgICBtdWx0aWxpbmU9e211bHRpbGluZX1cbiAgICAgICAgICAgIHJvd3M9e3Jvd3N9XG4gICAgICAgICAgICBkaXNhYmxlZD17YmFzZS5kaXNhYmxlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9eydvdWktZm9ybS1pdGVtJ31cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWluV2lkdGg6IG1pbldpZHRoLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBtdWx0aWxpbmUgPyBudWxsIDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnc2Vjb25kYXJ5J1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiPlxuICAgICAgICA8L1RleHRGaWVsZENvbXBvbmVudD5cbiAgICApO1xufSk7XG5cbmNvbnN0IFRleHRGaWVsZCA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJhc2VGaWVsZCB7Li4ucHJvcHN9IGhhbmRsZT17cHJvcHMuaGFuZGxlfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlUGFyc2VyPXsodmFsdWUsIGluYm91bmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICAgIHtiYXNlID0+XG4gICAgICAgICAgICAgICAgPFRleHRGaWVsZFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgYmFzZT17YmFzZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L1RleHRGaWVsZFdyYXBwZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvQmFzZUZpZWxkPlxuICAgICk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEZpZWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBSyxX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
111
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVGV4dEZpZWxkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9CYXNlRmllbGQiLCJfVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIlRleHRGaWVsZFdyYXBwZXIiLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsIl9wcm9wcyRjb25maWckYXR0cmlidSIsIl9wcm9wcyRjb25maWckYXR0cmlidTIiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUzIiwiX3Byb3BzJGNvbmZpZyRhdHRyaWJ1NCIsIl9yZWYiLCJiYXNlIiwibXVsdGlsaW5lIiwidXNlU3RhdGUiLCJ3aWR0aCIsIlV0aWxzIiwiaXNOdWxsIiwiY29uZmlnIiwiYXR0cmlidXRlcyIsInN0eWxlIiwibWF4V2lkdGgiLCJtaW5XaWR0aCIsImhlaWdodCIsInRleHRSZWYiLCJ1c2VSZWYiLCJyb3dzIiwic2V0Um93cyIsImxvY2FsVmFsdWUiLCJzZXRMb2NhbFZhbHVlIiwibG9jYWxWYWx1ZVJlZiIsImRlYm91bmNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsImNvbXB1dGVkU3R5bGUiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwibGluZUhlaWdodCIsInBhcnNlRmxvYXQiLCJjYWxjdWxhdGVkUm93cyIsIk1hdGgiLCJmbG9vciIsInJlcGxhY2UiLCJ2YWx1ZSIsImNyZWF0ZUVsZW1lbnQiLCJpZCIsInR5cGUiLCJyZXF1aXJlZCIsImlucHV0UmVmIiwibGFiZWwiLCJvbkNoYW5nZSIsInRhcmdldCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJoYW5kbGVWYWx1ZUNoYW5nZSIsIm9uQmx1ciIsInNsb3RQcm9wcyIsImlucHV0IiwiYXV0b0NvbXBsZXRlIiwic3giLCJvbktleVVwIiwia2V5SGFuZGxlciIsImVycm9yIiwiaGFzRXJyb3IiLCJoZWxwZXJUZXh0IiwiZXJyb3JNZXNzYWdlIiwibWFyZ2luIiwiZGlzYWJsZWQiLCJzaXplIiwiY2xhc3NOYW1lIiwiY29sb3IiLCJ2YXJpYW50IiwiVGV4dEZpZWxkIiwiQmFzZUZpZWxkIiwiaGFuZGxlIiwidmFsdWVQYXJzZXIiLCJpbmJvdW5kIiwidG9TdHJpbmciLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9UZXh0RmllbGQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCwge3VzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUZXh0RmllbGRDb21wb25lbnQgZnJvbSAnQG11aS9tYXRlcmlhbC9UZXh0RmllbGQnO1xuaW1wb3J0IHtCYXNlRmllbGR9IGZyb20gXCIuL0Jhc2VGaWVsZFwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi8uLi9VdGlsc1wiO1xuXG5jb25zdCBUZXh0RmllbGRXcmFwcGVyID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgICBjb25zdCBiYXNlID0gcHJvcHMuYmFzZTtcbiAgICBjb25zdCBbbXVsdGlsaW5lXSA9IFJlYWN0LnVzZVN0YXRlKHByb3BzLm11bHRpbGluZSk7XG4gICAgY29uc3Qgd2lkdGggPSAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ud2lkdGgpID8gcHJvcHMuY29uZmlnLmF0dHJpYnV0ZXMuc3R5bGUud2lkdGggOiBcIjEwMCVcIjtcbiAgICBjb25zdCBtYXhXaWR0aCA9ICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmF0dHJpYnV0ZXM/LnN0eWxlPy5tYXhXaWR0aCkgPyBwcm9wcy5jb25maWcuYXR0cmlidXRlcy5zdHlsZS5tYXhXaWR0aCA6IG51bGw7XG4gICAgY29uc3QgbWluV2lkdGggPSAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ubWluV2lkdGgpID8gcHJvcHMuY29uZmlnLmF0dHJpYnV0ZXMuc3R5bGUubWluV2lkdGggOiBcIjI0MHB4XCI7XG4gICAgY29uc3QgaGVpZ2h0ID0gIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuYXR0cmlidXRlcz8uc3R5bGU/LmhlaWdodCkgPyBwcm9wcy5jb25maWcuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQgOiBtdWx0aWxpbmUgPyAnMjAwcHgnIDogbnVsbDtcbiAgICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IFtyb3dzLCBzZXRSb3dzXSA9IHVzZVN0YXRlKDEpO1xuICAgIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIC8vIFN5bmNocm9ub3VzIG1pcnJvciBvZiBsb2NhbFZhbHVlIHNvIG9uQmx1ciAoYW5kIGFueSBoYW5kbGVyIHRoYXQgZmlyZXNcbiAgICAvLyBiZWZvcmUgUmVhY3QgY29tbWl0cyBhIHBlbmRpbmcgc2V0TG9jYWxWYWx1ZSkgcmVhZHMgdGhlIGxhdGVzdCB0eXBlZFxuICAgIC8vIHZhbHVlLCBub3QgYSBzdGFsZSBjbG9zdXJlIGNhcHR1cmUuIFRoaXMgaXMgd2hhdCBtYWtlcyB0aGUgZGVib3VuY2Ugc2FmZTpcbiAgICAvLyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzYXZlIG1pZC1kZWJvdW5jZSwgYmx1ciBmaXJlcyB0aGUgb25CbHVyIGhhbmRsZXJcbiAgICAvLyBib3VuZCBvbiBhIHByZXZpb3VzIHJlbmRlciwgYW5kIHdpdGhvdXQgdGhlIHJlZiBpdCB3b3VsZCBwcm9wYWdhdGUgdGhlXG4gICAgLy8gcHJlLWtleXN0cm9rZSB2YWx1ZSAob3IgbnVsbCkgYW5kIGNsb2JiZXIgdGhlIHR5cGVkIHRleHQuXG4gICAgY29uc3QgbG9jYWxWYWx1ZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBkZWJvdW5jZVJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh0ZXh0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0UmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5saW5lSGVpZ2h0KSB8fCAyMDtcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRSb3dzID0gTWF0aC5mbG9vciggaGVpZ2h0ID09PSBudWxsID8gMjAgOiBoZWlnaHQucmVwbGFjZSgncHgnLCAnJykgLyBsaW5lSGVpZ2h0KTtcbiAgICAgICAgICAgIHNldFJvd3MoY2FsY3VsYXRlZFJvd3MpO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gTnVsbGlzaC1vbmx5IGNoZWNrOiBlbXB0eSBzdHJpbmcgJycgaXMgYSBkZWxpYmVyYXRlIHVzZXItY2xlYXJlZFxuICAgICAgICAvLyBzdGF0ZSBhbmQgbXVzdCBOT1QgYmUgcmUtc3luY2VkIGZyb20gYmFzZS52YWx1ZS4gV2FzIGAhbG9jYWxWYWx1ZWBcbiAgICAgICAgLy8gd2hpY2ggdHJlYXRlZCAnJyBhcyBmYWxzeSBhbmQgY291bGQgcmVzdXJyZWN0IGFuIGV4dGVybmFsIHZhbHVlXG4gICAgICAgIC8vIG92ZXIgdGhlIHVzZXIncyBjbGVhci5cbiAgICAgICAgaWYgKGxvY2FsVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TG9jYWxWYWx1ZShiYXNlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sIFtiYXNlLnZhbHVlXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dEZpZWxkQ29tcG9uZW50XG4gICAgICAgICAgICBpZD17cHJvcHMuaWR9XG4gICAgICAgICAgICB0eXBlPXtwcm9wcy50eXBlfVxuICAgICAgICAgICAgcmVxdWlyZWQ9e2Jhc2UucmVxdWlyZWR9XG4gICAgICAgICAgICBpbnB1dFJlZj17dGV4dFJlZn1cbiAgICAgICAgICAgIGxhYmVsPXshVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzKSA/IHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzWydsYWJlbCddIDogbnVsbH1cbiAgICAgICAgICAgIHZhbHVlPXtsb2NhbFZhbHVlID8/IGJhc2UudmFsdWUgPz8gJyd9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgIGxvY2FsVmFsdWVSZWYuY3VycmVudCA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlYm91bmNlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZS5oYW5kbGVWYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkJsdXI9eygpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVib3VuY2VSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VSZWYuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJhc2UuaGFuZGxlVmFsdWVDaGFuZ2UobG9jYWxWYWx1ZVJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU6IFwibmV3LXBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgICAgIHN4OiB7fVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlVcD17cHJvcHMua2V5SGFuZGxlcn1cbiAgICAgICAgICAgIGVycm9yPXtiYXNlLmhhc0Vycm9yfVxuICAgICAgICAgICAgaGVscGVyVGV4dD17YmFzZS5lcnJvck1lc3NhZ2V9XG4gICAgICAgICAgICBtYXJnaW49XCJkZW5zZVwiXG4gICAgICAgICAgICBtdWx0aWxpbmU9e211bHRpbGluZX1cbiAgICAgICAgICAgIHJvd3M9e3Jvd3N9XG4gICAgICAgICAgICBkaXNhYmxlZD17YmFzZS5kaXNhYmxlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9eydvdWktZm9ybS1pdGVtJ31cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWluV2lkdGg6IG1pbldpZHRoLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBtdWx0aWxpbmUgPyBudWxsIDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnc2Vjb25kYXJ5J1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiPlxuICAgICAgICA8L1RleHRGaWVsZENvbXBvbmVudD5cbiAgICApO1xufSk7XG5cbmNvbnN0IFRleHRGaWVsZCA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJhc2VGaWVsZCB7Li4ucHJvcHN9IGhhbmRsZT17cHJvcHMuaGFuZGxlfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlUGFyc2VyPXsodmFsdWUsIGluYm91bmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICAgIHtiYXNlID0+XG4gICAgICAgICAgICAgICAgPFRleHRGaWVsZFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgYmFzZT17YmFzZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L1RleHRGaWVsZFdyYXBwZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvQmFzZUZpZWxkPlxuICAgICk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEZpZWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFBZ0MsU0FBQUUsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBTix3QkFBQU0sQ0FBQSxFQUFBRyxDQUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agilemotion/oui-react-js",
3
- "version": "2.0.4",
3
+ "version": "2.0.6",
4
4
  "description": "AgileMotion React UI Component Library - A comprehensive collection of dashboard components, forms, media controls, and more",
5
5
  "license": "ISC",
6
6
  "author": "",