@agilemotion/oui-react-js 2.0.6 → 2.0.8

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.
@@ -177,22 +177,44 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
177
177
  }
178
178
  },
179
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.
180
+ // Read returns values.current iff every bound field's
181
+ // register entry is valid. Side effect: invokes each
182
+ // field's cached onValidityChange to refresh marker UI
183
+ // from register state no re-validation, no setFieldValidity
184
+ // writes. Symmetric (fires for valid + invalid) so a field
185
+ // whose UI got out of sync with the register (stale hasError
186
+ // from some non-doHandleChange path) is repainted to match.
187
+ // setStates are idempotent (React bails on same value), so
188
+ // repeated form.value reads cost zero re-renders after the
189
+ // first paint. The markers gate inside the callback ensures
190
+ // refreshes only paint when global markers are enabled.
191
+ let formValid = true;
185
192
  if (loadingRef.current === false && values.current) {
186
193
  for (const field of fields) {
187
194
  if (field.bindValueToForm === false) continue;
188
195
  const v = fieldValidity.current.get(field.id);
189
- if (v && v.valid === false) {
190
- return null;
196
+ formValid = formValid && (v === undefined || v.valid);
197
+ if (v && typeof v.onValidityChange === 'function') {
198
+ v.onValidityChange(v.valid, v.message);
199
+ }
200
+ // Outbound-normalize the stored value so non-string field
201
+ // types (Date for DatePicker, lookup objects, etc.) serialize
202
+ // to wire format on JSON.stringify. Restores the behavior the
203
+ // old getter provided via parseValue(_, false). Idempotent for
204
+ // typed valueParsers — repeat reads see the already-normalized
205
+ // value and re-emit the same string. parseValue is a pure JS
206
+ // transform with no React state side effects, so unlike the
207
+ // validate call we removed in seq=44, this can't drive a
208
+ // re-render loop.
209
+ if (!_Utils.default.isNull(field.handle) && !_Utils.default.isNull(field.handle.api) && typeof field.handle.api.parseValue === 'function') {
210
+ const path = getValuePath(field.id, values.current);
211
+ if (!_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject)) {
212
+ path.valueObject[path.valueProperty] = field.handle.api.parseValue(path.valueObject[path.valueProperty], false);
213
+ }
191
214
  }
192
215
  }
193
- return values.current;
194
216
  }
195
- return null;
217
+ return formValid ? values.current : null;
196
218
  },
197
219
  setFieldError: (id, error) => {
198
220
  return setFieldError(id, error);
@@ -386,6 +408,16 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
386
408
  loadingRef.current = false;
387
409
  let event = new _Event.default(props.handle, props.viewId, null);
388
410
  _Observable.default.fireEvent(_EventType.default.COMPONENT_LOAD, event);
411
+
412
+ // Initial load complete. Enable markers globally so all subsequent
413
+ // validation flows (save click, value changes, button-driven
414
+ // validateAll) surface error UI. BaseField self-validation during
415
+ // initial load locally suppresses markers in its own try/finally,
416
+ // so this re-enable doesn't cause a load-time flash for fields
417
+ // that mount during this same effect cycle. Async data arriving
418
+ // later will re-validate via BaseField's [props.values, config]
419
+ // useEffect, which also locally suppresses markers.
420
+ _ApplicationManager.default.enableFormMarkers(true);
389
421
  return () => {
390
422
  _Observable.default.clearComponentEventListeners(props.handle);
391
423
  };
@@ -684,4 +716,4 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
684
716
  }, !_Utils.default.isNull(props.config.id) ? render(props.config) : /*#__PURE__*/_react.default.createElement("div", null, "ERROR: A form must have an ID"));
685
717
  });
686
718
  var _default = exports.default = Form;
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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
719
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwiZmllbGRWYWxpZGl0eSIsIk1hcCIsInNlY3Rpb25Db3VudGVyIiwiYXBpIiwiaWQiLCJkb1VwZGF0ZVZhbHVlIiwibmFtZSIsInVwZGF0ZVZhbHVlIiwiY2xlYXIiLCJkb0NsZWFyIiwic2V0VmFsdWUiLCJkb0hhbmRsZUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJvcHRpb25zIiwic2VsZWN0ZWRJZCIsImhhbmRsZUNoYW5nZSIsImdldFZhbHVlUGF0aCIsImFkZEZpZWxkIiwicmVmIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJyZW1vdmVGaWVsZCIsInNldEZpZWxkVmFsaWRpdHkiLCJyZXN1bHQiLCJjdXJyZW50Iiwic2V0IiwiY2xlYXJGaWVsZFZhbGlkaXR5IiwiZGVsZXRlIiwidmFsaWRhdGVBbGwiLCJmaWVsZCIsImhhbmRsZSIsInBhdGgiLCJjdXJyZW50VmFsdWUiLCJ2YWx1ZU9iamVjdCIsInZhbHVlUHJvcGVydHkiLCJ2YWxpZGF0ZSIsImZpcnN0SW52YWxpZCIsInYiLCJnZXQiLCJ2YWxpZCIsImRvVmFsaWRhdGVQYXJlbnQiLCJzY3JvbGxUbyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJnZXRGaWVsZCIsImZpZWxkRGF0YUJpbmRpbmdzIiwiZmllbGROYW1lcyIsInNlY3Rpb25zIiwic2VjdGlvbiIsImoiLCJjb21wb25lbnRzIiwiY29tcG9uZW50IiwidHlwZSIsImdldEZpZWxkc0Zyb21UYWIiLCJrIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsIm1vZGVsIiwicGFyc2VWYWx1ZXMiLCJ0cmFuc2Zvcm1EYXRhT2JqZWN0IiwiZm9ybVZhbGlkIiwidW5kZWZpbmVkIiwib25WYWxpZGl0eUNoYW5nZSIsIm1lc3NhZ2UiLCJwYXJzZVZhbHVlIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZ2V0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm1vcmVDaGlsZHJlbiIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJzZWN0aW9uSGFuZGxlIiwiY2hpbGQiLCJyZWZyZXNoIiwicGFyc2VkQ29uZmlnIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImNyZWF0ZVNlY3Rpb25IYW5kbGUiLCJ1cGRhdGVWaWV3VGl0bGUiLCJ2aWV3IiwiZ2V0VmlldyIsInRpdGxlIiwiaW5jbHVkZXMiLCJ1cGRhdGVBcHBCYXJUaXRsZSIsImhhbmRsZURhdGFBcnJpdmVkIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJEQVRBX0FSUklWRUQiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsImV2ZW50Q29uZmlnIiwiY29tcG9uZW50Q29uZmlnIiwiZXZlbnREYXRhIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwiY29tcG9uZW50VmFsdWUiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJpbnZva2VScGMiLCJ0aGVuIiwiY29uc29sZSIsImNhdGNoIiwiZXJyb3JUeXBlIiwicHVibGlzaEVycm9yTWVzc2FnZSIsInNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsImV4ZWN1dGUiLCJwYXJhbWV0ZXIiLCJpc0V4cHJlc3Npb24iLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJpc0V2ZW50RGF0YSIsInRvU3RyaW5nIiwic3RhcnRzV2l0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwiYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsInZhbCIsIm1hcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJ1c2VFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImF1dG9Mb2FkRGF0YSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInN1YnNjcmlwdGlvbiIsImV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwiYWN0aW9ucyIsImFjdGlvblR5cGUiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImhhbmRsZUxvYWRDb21wbGV0ZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIm1vZGVsQ2hhbmdlSGFuZGxlciIsImtleSIsInBhcnNlZFZhbHVlcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm9iamVjdFZhbHVlIiwiZGF0YUFycml2ZWRIYW5kbGVyIiwic3BsaWNlIiwidXBkYXRlRXJyb3JzIiwiaXNQYXJlbnRJbnZhbGlkIiwidmFsaWRhdGVGaWVsZCIsInZhbHMiLCJjdXJyZW50VmFsdWVzIiwiZ3JvdXBGaWVsZCIsInZhbGlkYXRpb25Hcm91cCIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwRmllbGRJZCIsImdyaWRGaWVsZFBhdGgiLCJncm91cEZpZWxkVmFsIiwibG9nIiwiVkFMVUVfQ0hBTkdFIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsInJlbmRlciIsImZvcm0iLCJjcmVhdGVFbGVtZW50Iiwia2V5SGFuZGxlciIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsInBhZGRpbmciLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Zvcm0uanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge21ha2VTdHlsZXN9IGZyb20gJ0BtdWkvc3R5bGVzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgU2VjdGlvbiBmcm9tICcuL1NlY3Rpb24nO1xuaW1wb3J0ICcuL0Zvcm0uY3NzJztcbmltcG9ydCB7aW52b2tlUnBjfSBmcm9tICcuLi8uLi9SZXN0U2VydmljZSc7XG5pbXBvcnQge011dGV4fSBmcm9tICdhc3luYy1tdXRleCc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciBmcm9tICcuLi8uLi9ldmVudC9TZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCB7Y2xlYXJ9IGZyb20gXCJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQvZGlzdC9jbGVhclwiO1xuXG5jb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVzKHRoZW1lID0+ICh7XG4gICAgY29udGFpbmVyOiB7XG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgJyYgdHIgdGQnOiB7XG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IHtcbiAgICAgICAgbWFyZ2luOiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBtaW5XaWR0aDogMTIwLFxuICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgfSxcbiAgICBzZWxlY3RFbXB0eToge1xuICAgICAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG4gICAgfSxcbiAgICByb290OiB7fVxufSkpO1xuXG5jb25zdCBGb3JtID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gUmVhY3QudXNlUmVmKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSA/IHByb3BzLnZhbHVlcyA6IHt9KTtcbiAgICAgICAgY29uc3QgW21hc3RlclZhbHVlcywgc2V0TWFzdGVyVmFsdWVzXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgICAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gUmVhY3QudXNlU3RhdGUoVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpKTtcbiAgICAgICAgY29uc3QgW2JpbmRlcl0gPSBSZWFjdC51c2VTdGF0ZShVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmJpbmRlcikgPyAnUExBSU5fT0JKRUNUJyA6IHByb3BzLmNvbmZpZy5iaW5kZXIpO1xuICAgICAgICBjb25zdCBbZmllbGRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRXJyb3JDYWxsYmFjayA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgICBjb25zdCBbc2VjdGlvbkhhbmRsZXNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbZmllbGRQYXJlbnRFcnJvcnNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgICAgICAgLy8gVmFsaWRpdHkgcmVnaXN0ZXI6IE1hcDxmaWVsZElkLCB7IHZhbGlkLCBtZXNzYWdlLCBmb3JjZU1hcmtlciB9Pi5cbiAgICAgICAgLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgXCJpcyB0aGlzIGZpZWxkIHZhbGlkP1wiLiBCYXNlRmllbGQgd3JpdGVzXG4gICAgICAgIC8vIGhlcmUgZnJvbSBkb1ZhbGlkYXRpb247IGZvcm0udmFsdWUgcmVhZHMgaGVyZSB3aXRob3V0IGludm9raW5nIGFueVxuICAgICAgICAvLyBmaWVsZCBtZXRob2RzIChraWxscyB0aGUgYmktZGlyZWN0aW9uYWwgcmVuZGVyLXRpbWUgY2hhaW4gdGhhdFxuICAgICAgICAvLyBwcm9kdWNlZCBSZWFjdCAjMTg1KS5cbiAgICAgICAgY29uc3QgZmllbGRWYWxpZGl0eSA9IFJlYWN0LnVzZVJlZihuZXcgTWFwKCkpO1xuICAgICAgICBsZXQgc2VjdGlvbkNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsaWRpdHk6IChpZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRpdHkuY3VycmVudC5zZXQoaWQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhckZpZWxkVmFsaWRpdHk6IChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQWxsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGxpY2l0IFwiZm9yY2UtdmFsaWRhdGUgZXZlcnkgZmllbGRcIiBjb21tYW5kLiBSZXBsYWNlcyB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGhhY2sgb2YgcmVhZGluZyBmb3JtLnZhbHVlIHB1cmVseSBmb3IgaXRzIHNpZGUgZWZmZWN0cy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRmllbGRzIHdyaXRlIGludG8gZmllbGRWYWxpZGl0eSB2aWEgZG9WYWxpZGF0aW9uIGFzIGEgc2lkZVxuICAgICAgICAgICAgICAgICAgICAvLyBlZmZlY3Qgb2YgdmFsaWRhdGU7IHdlIHRoZW4gd2FsayB0aGUgcmVnaXN0ZXIgZm9yIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgLy8gZmllbGRzIHRvIGRyaXZlIFVYIChzY3JvbGxUbyBmaXJzdCwgcmVmcmVzaCBjb250YWluZXIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2spIOKAlCBzYW1lIFVYIHRoZSBnZXR0ZXIgdXNlZCB0byBwcm92aWRlLCBub3cgb3B0LWluLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKSAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyB0aGUgYWN0dWFsIGN1cnJlbnQgdmFsdWUgc28gZG9WYWxpZGF0aW9uJ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycykgY2FjaGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdHMgcmVhbGl0eS4gV2l0aG91dCB0aGlzIHdlIHdlcmUgcGFzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bGwsIHdoaWNoIG1hZGUgY2FjaGUgaGl0cyBvcGFxdWUgaW4gbG9ncyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZWQgVXRpbHMudmFsaWRhdGVGaWVsZCB0byBmYWxsIGJhY2sgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXNbaWRdIGV2ZXJ5IHRpbWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHZhbHVlcy5jdXJyZW50LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdEludmFsaWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi52YWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0SW52YWxpZCA9PT0gbnVsbCkgZmlyc3RJbnZhbGlkID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlLmFwaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaXJzdEludmFsaWQuaGFuZGxlLmFwaS5zY3JvbGxUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkuc2Nyb2xsVG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQpICYmIGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZERhdGEoYWN0aW9uQ29uZmlnLCBjb25maWcsIGV2ZW50ID8gZXZlbnQuZGF0YSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmluZERhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvQmluZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmVudDogKGlkLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZ2V0RmllbGQoaWQpLCBpbnZhbGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBmaWVsZERhdGFCaW5kaW5ncygpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5jb25maWcuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uID0gcHJvcHMuY29uZmlnLnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uLmNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50ID0gc2VjdGlvbi5jb21wb25lbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tVGFiKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gY29tcG9uZW50LmZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaCghVXRpbHMuaXNOdWxsKGZpZWxkLmRhdGFCaW5kaW5nKSA/IGZpZWxkLmRhdGFCaW5kaW5nIDogZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZE5hbWVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0Q29udGFpbmVyRXJyb3JIYW5kbGVyKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQgbW9kZWwobW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KG1vZGVsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMobW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgcmV0dXJucyB2YWx1ZXMuY3VycmVudCBpZmYgZXZlcnkgYm91bmQgZmllbGQnc1xuICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBlbnRyeSBpcyB2YWxpZC4gU2lkZSBlZmZlY3Q6IGludm9rZXMgZWFjaFxuICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCdzIGNhY2hlZCBvblZhbGlkaXR5Q2hhbmdlIHRvIHJlZnJlc2ggbWFya2VyIFVJXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gcmVnaXN0ZXIgc3RhdGUg4oCUIG5vIHJlLXZhbGlkYXRpb24sIG5vIHNldEZpZWxkVmFsaWRpdHlcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGVzLiBTeW1tZXRyaWMgKGZpcmVzIGZvciB2YWxpZCArIGludmFsaWQpIHNvIGEgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2UgVUkgZ290IG91dCBvZiBzeW5jIHdpdGggdGhlIHJlZ2lzdGVyIChzdGFsZSBoYXNFcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHNvbWUgbm9uLWRvSGFuZGxlQ2hhbmdlIHBhdGgpIGlzIHJlcGFpbnRlZCB0byBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0U3RhdGVzIGFyZSBpZGVtcG90ZW50IChSZWFjdCBiYWlscyBvbiBzYW1lIHZhbHVlKSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwZWF0ZWQgZm9ybS52YWx1ZSByZWFkcyBjb3N0IHplcm8gcmUtcmVuZGVycyBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFpbnQuIFRoZSBtYXJrZXJzIGdhdGUgaW5zaWRlIHRoZSBjYWxsYmFjayBlbnN1cmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hlcyBvbmx5IHBhaW50IHdoZW4gZ2xvYmFsIG1hcmtlcnMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZSAmJiB2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmluZFZhbHVlVG9Gb3JtID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1WYWxpZCA9IGZvcm1WYWxpZCAmJiAodiA9PT0gdW5kZWZpbmVkIHx8IHYudmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2Lm9uVmFsaWRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vblZhbGlkaXR5Q2hhbmdlKHYudmFsaWQsIHYubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dGJvdW5kLW5vcm1hbGl6ZSB0aGUgc3RvcmVkIHZhbHVlIHNvIG5vbi1zdHJpbmcgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcyAoRGF0ZSBmb3IgRGF0ZVBpY2tlciwgbG9va3VwIG9iamVjdHMsIGV0Yy4pIHNlcmlhbGl6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHdpcmUgZm9ybWF0IG9uIEpTT04uc3RyaW5naWZ5LiBSZXN0b3JlcyB0aGUgYmVoYXZpb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGdldHRlciBwcm92aWRlZCB2aWEgcGFyc2VWYWx1ZShfLCBmYWxzZSkuIElkZW1wb3RlbnQgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZWQgdmFsdWVQYXJzZXJzIOKAlCByZXBlYXQgcmVhZHMgc2VlIHRoZSBhbHJlYWR5LW5vcm1hbGl6ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBhbmQgcmUtZW1pdCB0aGUgc2FtZSBzdHJpbmcuIHBhcnNlVmFsdWUgaXMgYSBwdXJlIEpTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIHdpdGggbm8gUmVhY3Qgc3RhdGUgc2lkZSBlZmZlY3RzLCBzbyB1bmxpa2UgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY2FsbCB3ZSByZW1vdmVkIGluIHNlcT00NCwgdGhpcyBjYW4ndCBkcml2ZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmUtcmVuZGVyIGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsaWQgPyB2YWx1ZXMuY3VycmVudCA6IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbCBsb2FkIGNvbXBsZXRlLiBFbmFibGUgbWFya2VycyBnbG9iYWxseSBzbyBhbGwgc3Vic2VxdWVudFxuICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmbG93cyAoc2F2ZSBjbGljaywgdmFsdWUgY2hhbmdlcywgYnV0dG9uLWRyaXZlblxuICAgICAgICAgICAgLy8gdmFsaWRhdGVBbGwpIHN1cmZhY2UgZXJyb3IgVUkuIEJhc2VGaWVsZCBzZWxmLXZhbGlkYXRpb24gZHVyaW5nXG4gICAgICAgICAgICAvLyBpbml0aWFsIGxvYWQgbG9jYWxseSBzdXBwcmVzc2VzIG1hcmtlcnMgaW4gaXRzIG93biB0cnkvZmluYWxseSxcbiAgICAgICAgICAgIC8vIHNvIHRoaXMgcmUtZW5hYmxlIGRvZXNuJ3QgY2F1c2UgYSBsb2FkLXRpbWUgZmxhc2ggZm9yIGZpZWxkc1xuICAgICAgICAgICAgLy8gdGhhdCBtb3VudCBkdXJpbmcgdGhpcyBzYW1lIGVmZmVjdCBjeWNsZS4gQXN5bmMgZGF0YSBhcnJpdmluZ1xuICAgICAgICAgICAgLy8gbGF0ZXIgd2lsbCByZS12YWxpZGF0ZSB2aWEgQmFzZUZpZWxkJ3MgW3Byb3BzLnZhbHVlcywgY29uZmlnXVxuICAgICAgICAgICAgLy8gdXNlRWZmZWN0LCB3aGljaCBhbHNvIGxvY2FsbHkgc3VwcHJlc3NlcyBtYXJrZXJzLlxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZykgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLmNvbmZpZywgcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChtYXN0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbbWFzdGVyVmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGRzRnJvbVRhYiA9ICh0YWIpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFiUGFnZSBvZiB0YWIudGFiUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0YWJQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZm9ybVNlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGRzLmNvbmNhdChmaWVsZHNldC5maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybURhdGFPYmplY3QgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1WYWx1ZXMgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoYmluZGVyID09PSAnTUFQX09CSkVDVCcpIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBtYXAgPSBkYXRhLm1hcDtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gcHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGZvcm1WYWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgdG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2b1t0b2tlbl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvW3Rva2VuXSA9IG1hcFtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9DbGVhcigpIHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5jdXJyZW50ID0ge307XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvQmluZERhdGEoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkudmFsdWUgPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUoZGF0YVtrZXldLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVmFsdWVzKGRhdGEpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGZpZWxkLmlkLCBwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUob2JqZWN0VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05VTEwgZmllbGQgcmVmZXJlbmNlIHdoaWxlIHBhcnNpbmcgZm9ybSB2YWx1ZSAtICcgKyBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHBhcnNlZFZhbHVlcztcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmRhdGFBcnJpdmVkSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9pZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgLy9wcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyhwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWxpZGl0eS5jdXJyZW50LmRlbGV0ZShpZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCwgdXBkYXRlRXJyb3JzID0gdHJ1ZSkge1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5wYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNQYXJlbnRJbnZhbGlkID0gaW52YWxpZDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldICE9PSBmaWVsZCAmJiBmaWVsZHNbaV0ucGFyZW50SWQgPT09IGZpZWxkLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BhcmVudEludmFsaWQgPSBpc1BhcmVudEludmFsaWQgfHwgIShVdGlscy5pc051bGwoZmllbGRzW2ldLmVycm9yKSB8fCBmaWVsZHNbaV0uZXJyb3IubGVuZ3RoID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpZWxkUGFyZW50RXJyb3JzW2ZpZWxkLnBhcmVudElkXSA9IGlzUGFyZW50SW52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVwZGF0ZUVycm9ycyAmJiAhVXRpbHMuaXNOdWxsKGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCkgJiYgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRQYXJlbnRFcnJvcnM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0ZUZpZWxkID0gKGZpZWxkLCBpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBpbnZhbGlkID0gZmllbGQuaGFuZGxlLmFwaS52YWxpZGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBbaWRdOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0sIHZhbHVlKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaW52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZ2V0VmFsdWVQYXRoID0gKGlkLCB2YWxzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHt9O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZXMgPSB2YWxzO1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2YWxzKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXMgPSB2YWx1ZXMuY3VycmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY3VycmVudFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gaWQuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gY3VycmVudFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZVByb3BlcnR5ID0gdG9rZW5zWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZvID0gY3VycmVudFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2b1t0b2tlbnNbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5zW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9bdG9rZW5zW2ldXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5zW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCA9IHZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZVByb3BlcnR5ID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9IYW5kbGVDaGFuZ2UgPSAoaWQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGdldFZhbHVlUGF0aChpZCwgbnVsbCk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC52YWx1ZVByb3BlcnR5KSAmJiBsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZCA9IHZhbGlkYXRlRmllbGQoZmllbGQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0aW9uR3JvdXAgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuZ2V0VmFsaWRhdGlvbkdyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWxpZGF0aW9uR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICE9PSBncm91cEZpZWxkICYmIHZhbGlkYXRpb25Hcm91cCA9PT0gZmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZElkID0gZ3JvdXBGaWVsZC5oYW5kbGUuYXBpLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JpZEZpZWxkUGF0aCA9IGdldFZhbHVlUGF0aChncm91cEZpZWxkSWQsIG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGdyaWRGaWVsZFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZFZhbCA9IGdyaWRGaWVsZFBhdGgudmFsdWVPYmplY3RbZ3JpZEZpZWxkUGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1WYWxpZGF0aW5nIGZvcm0nLCBncm91cEZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRmllbGQoZ3JvdXBGaWVsZCwgZ3JvdXBGaWVsZElkLCBncm91cEZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKGludmFsaWQgPyBudWxsIDogdmFsdWVzLmN1cnJlbnQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIodmFsdWVzLmN1cnJlbnQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnMoZmFsc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLnByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zKHByb3BzLmNvbmZpZy5pZCk7XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuVkFMVUVfQ0hBTkdFLCBldmVudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2V0RmllbGRFcnJvciA9IChpZCwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWRkRmllbGQgPSAoaWQsIGhhbmRsZSwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBmaWVsZC5lcnJvcjtcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZChpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpZWxkID0ge307XG4gICAgICAgICAgICBmaWVsZC5pZCA9IGlkO1xuICAgICAgICAgICAgZmllbGQuaGFuZGxlID0gaGFuZGxlO1xuICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9IGJpbmRWYWx1ZVRvRm9ybTtcbiAgICAgICAgICAgIGZpZWxkLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChmaWVsZCk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHZhbHVlcy5jdXJyZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UgPSAobmFtZSwgb3B0aW9ucywgc2VsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZih0eXBlb2Ygc2VsZWN0aW9uID09PSAnb2JqZWN0JyAmJiAoVXRpbHMuaXNOdWxsKG9wdGlvbnMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFZhbHVlID0gbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbaV0uaWQgPT09IHNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlID0gb3B0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvSGFuZGxlQ2hhbmdlKG5hbWUsIHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkVmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdXBkYXRlVmFsdWUgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcih7XG4gICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgW25hbWVdOiB2YWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7XG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKGZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKFV0aWxzLmlzTnVsbChmb3JtLnNlY3Rpb25zKSB8fCBmb3JtLnNlY3Rpb25zLmxlbmd0aCA9PT0gMCkgP1xuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb24uaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmlkID0gc2VjdGlvbkNvdW50ZXIgKyAnLWZvcm0tc2VjdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e3NlY3Rpb25Db3VudGVyKyt9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24ga2V5SGFuZGxlcj17cHJvcHMua2V5SGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17c2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17Y3JlYXRlU2VjdGlvbkhhbmRsZShzZWN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm09eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChwcm9wcy5oYW5kbGUuYXBpKSA/IHByb3BzLmhhbmRsZS5hcGkgOiBhcGkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ9e3Byb3BzLnZpZXdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17dmFsdWVzLmN1cnJlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHZpc2libGUgJiZcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9IGlkPXtwcm9wcy5jb25maWcuaWR9IHN0eWxlPXtcbiAgICAgICAgICAgICAgICBwcm9wcy5jbGFzc05hbWUgPT09ICdkZWZhdWx0Rm9ybScgP1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5tZXJnZVN0eWxlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzcwdmgnXG4gICAgICAgICAgICAgICAgICAgIH0sIHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuaWQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcihwcm9wcy5jb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PkVSUk9SOiBBIGZvcm0gbXVzdCBoYXZlIGFuIElEPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+KTtcbiAgICB9KVxuO1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFdBQUEsR0FB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