botframework-webchat-component 4.15.0 → 4.15.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"BasicTranscript.d.ts","sourceRoot":"","sources":["../src/BasicTranscript.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAyD,GAAG,EAAE,MAAM,OAAO,CAAC;AA+zBxF,aAAK,oBAAoB,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,GAAG,CAAC,oBAAoB,CAc9C,CAAC;AAUF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"BasicTranscript.d.ts","sourceRoot":"","sources":["../src/BasicTranscript.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAyD,GAAG,EAAE,MAAM,OAAO,CAAC;AAm1BxF,aAAK,oBAAoB,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,GAAG,CAAC,oBAAoB,CAc9C,CAAC;AAUF,eAAe,eAAe,CAAC"}
@@ -297,19 +297,23 @@ var InternalTranscript = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
297
297
  if (scrollableElement && activityBoundingBoxElement) {
298
298
  // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
299
299
  // eslint-disable-next-line prefer-destructuring
300
- var _activityBoundingBoxE = activityBoundingBoxElement.getClientRects()[0],
301
- activityHeight = _activityBoundingBoxE.height,
302
- activityY = _activityBoundingBoxE.y; // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
300
+ var activityBoundingBoxElementClientRect = activityBoundingBoxElement.getClientRects()[0]; // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
303
301
  // eslint-disable-next-line prefer-destructuring
304
302
 
305
- var scrollableHeight = scrollableElement.getClientRects()[0].height;
306
- var activityOffsetTop = activityY + scrollableElement.scrollTop;
303
+ var scrollableElementClientRect = scrollableElement.getClientRects()[0]; // If either the activity or the transcript scrollable is not on DOM, we will not scroll the view.
307
304
 
308
- var _scrollTop = Math.min(activityOffsetTop, activityOffsetTop - scrollableHeight + activityHeight);
305
+ if (activityBoundingBoxElementClientRect && scrollableElementClientRect) {
306
+ var activityHeight = activityBoundingBoxElementClientRect.height,
307
+ activityY = activityBoundingBoxElementClientRect.y;
308
+ var scrollableHeight = scrollableElementClientRect.height;
309
+ var activityOffsetTop = activityY + scrollableElement.scrollTop;
309
310
 
310
- scrollToBottomScrollTo(_scrollTop, {
311
- behavior: behavior
312
- });
311
+ var _scrollTop = Math.min(activityOffsetTop, activityOffsetTop - scrollableHeight + activityHeight);
312
+
313
+ scrollToBottomScrollTo(_scrollTop, {
314
+ behavior: behavior
315
+ });
316
+ }
313
317
  }
314
318
  }
315
319
  }, [activityElementMapRef, getKeyByActivityId, rootElementRef, scrollToBottomScrollTo]);
@@ -367,7 +371,13 @@ var InternalTranscript = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
367
371
  var scrollableElement = rootElement.querySelector('.webchat__basic-transcript__scrollable'); // "getClientRects()" is not returning an array, thus, it is not destructurable.
368
372
  // eslint-disable-next-line prefer-destructuring
369
373
 
370
- var scrollableClientBottom = scrollableElement.getClientRects()[0].bottom; // Find the activity just above scroll view bottom.
374
+ var scrollableElementClientRect = scrollableElement.getClientRects()[0]; // If the scrollable is not mounted, we cannot measure which activity is in view. Thus, we will not fire any events.
375
+
376
+ if (!scrollableElementClientRect) {
377
+ return;
378
+ }
379
+
380
+ var scrollableClientBottom = scrollableElementClientRect.bottom; // Find the activity just above scroll view bottom.
371
381
  // If the scroll view is already on top, get the first activity.
372
382
 
373
383
  var activityElements = Array.from(activityElementMapRef.current.entries());
@@ -376,7 +386,12 @@ var InternalTranscript = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
376
386
  var _ref8 = _slicedToArray(_ref7, 2),
377
387
  element = _ref8[1];
378
388
 
379
- return element.getClientRects()[0].bottom < scrollableClientBottom + 1;
389
+ // "getClientRects()" is not returning an array, thus, it is not destructurable.
390
+ // eslint-disable-next-line prefer-destructuring
391
+ var elementClientRect = element.getClientRects()[0]; // If the activity is not attached to DOM tree, we should not count it as "bottommost visible activity", as it is not visible.
392
+
393
+ // If the activity is not attached to DOM tree, we should not count it as "bottommost visible activity", as it is not visible.
394
+ return elementClientRect && elementClientRect.bottom < scrollableClientBottom + 1;
380
395
  }) : activityElements[0]) === null || _ref6 === void 0 ? void 0 : _ref6[0]; // When the end-user slowly scrolling the view down, we will mark activity as read when the message fully appear on the screen.
381
396
 
382
397
  activityKeyJustAboveScrollBottom && markActivityKeyAsRead(activityKeyJustAboveScrollBottom);
@@ -836,4 +851,4 @@ BasicTranscript.propTypes = {
836
851
  };
837
852
  var _default = BasicTranscript;
838
853
  exports.default = _default;
839
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RyYW5zY3JpcHQudHN4Il0sIm5hbWVzIjpbInVzZUFjdGl2aXR5S2V5cyIsImhvb2tzIiwidXNlQWN0aXZpdHlLZXlzQnlSZWFkIiwidXNlQ3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsInVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyIiwidXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlciIsInVzZURpcmVjdGlvbiIsInVzZUdldEFjdGl2aXR5QnlLZXkiLCJ1c2VHZXRLZXlCeUFjdGl2aXR5IiwidXNlR2V0S2V5QnlBY3Rpdml0eUlkIiwidXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwidXNlTG9jYWxpemVyIiwidXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkIiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwidXNlU3R5bGVPcHRpb25zIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsImZsZXgiLCJvdmVyZmxvd1giLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsImxpc3RTdHlsZVR5cGUiLCJJbnRlcm5hbFRyYW5zY3JpcHQiLCJyZWYiLCJhY3Rpdml0eUVsZW1lbnRNYXBSZWYiLCJjbGFzc05hbWUiLCJiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCIsImJhc2ljVHJhbnNjcmlwdCIsImJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0IiwiYnViYmxlTnViT2Zmc2V0IiwiZ3JvdXBUaW1lc3RhbXAiLCJzaG93QXZhdGFySW5Hcm91cCIsImFjdGl2ZURlc2NlbmRhbnRJZCIsImFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSIsImRpcmVjdGlvbiIsImZvY3VzZWRBY3Rpdml0eUtleSIsImZvY3VzZWRFeHBsaWNpdGx5IiwiY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsImNyZWF0ZUF2YXRhclJlbmRlcmVyIiwiZm9jdXMiLCJmb2N1c0J5QWN0aXZpdHlLZXkiLCJmb2N1c1JlbGF0aXZlQWN0aXZpdHkiLCJnZXRBY3Rpdml0eUJ5S2V5IiwiZ2V0S2V5QnlBY3Rpdml0eSIsImdldEtleUJ5QWN0aXZpdHlJZCIsImxvY2FsaXplIiwicm9vdENsYXNzTmFtZSIsInJvb3RFbGVtZW50UmVmIiwidGVybWluYXRvckxhYmVsSWQiLCJ0ZXJtaW5hdG9yUmVmIiwiZm9jdXNlZEFjdGl2aXR5S2V5UmVmIiwiaGlkZUFsbFRpbWVzdGFtcHMiLCJ0ZXJtaW5hdG9yVGV4dCIsInRyYW5zY3JpcHRBcmlhTGFiZWwiLCJjYWxsYmFja1JlZiIsImVsZW1lbnQiLCJjdXJyZW50IiwicmVuZGVyaW5nRWxlbWVudHMiLCJ0b3BTaWRlQm90TnViIiwidG9wU2lkZVVzZXJOdWIiLCJmb3JFYWNoIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiZmlyc3RBY3Rpdml0eSIsImFjdGl2aXR5IiwicmVuZGVyQXZhdGFyIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzIiwiaW5kZXhXaXRoaW5TZW5kZXJHcm91cCIsImZpcnN0SW5TZW5kZXJHcm91cCIsImxhc3RJblNlbmRlckdyb3VwIiwibGVuZ3RoIiwiaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCIsInJlbmRlckFjdGl2aXR5IiwiZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwIiwia2V5IiwibGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJyZW5kZXJBY3Rpdml0eVN0YXR1cyIsIm5leHRWaXNpYmxlQWN0aXZpdHkiLCJ1bmRlZmluZWQiLCJ0b3BTaWRlTnViIiwiZnJvbSIsInJvbGUiLCJzaG93Q2FsbG91dCIsInB1c2giLCJhY3Rpdml0eUVsZW1lbnQiLCJzZXQiLCJkZWxldGUiLCJoaWRlVGltZXN0YW1wIiwic2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmQiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiRXJyb3IiLCJhY3Rpdml0eUlkIiwiYWN0aXZpdHlJRCIsInNjcm9sbFRvcCIsImFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZ2V0IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGFibGVFbGVtZW50IiwiZ2V0Q2xpZW50UmVjdHMiLCJhY3Rpdml0eUhlaWdodCIsImhlaWdodCIsImFjdGl2aXR5WSIsInkiLCJzY3JvbGxhYmxlSGVpZ2h0IiwiYWN0aXZpdHlPZmZzZXRUb3AiLCJNYXRoIiwibWluIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxSZWxhdGl2ZSIsImRpc3BsYWNlbWVudCIsInJvb3RFbGVtZW50Iiwic2Nyb2xsYWJsZSIsIm5leHRTY3JvbGxUb3AiLCJvZmZzZXRIZWlnaHQiLCJtYXgiLCJzY3JvbGxIZWlnaHQiLCJtYXJrQWN0aXZpdHlLZXlBc1JlYWQiLCJkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQiLCJoYW5kbGVTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGVDbGllbnRCb3R0b20iLCJib3R0b20iLCJhY3Rpdml0eUVsZW1lbnRzIiwiQXJyYXkiLCJlbnRyaWVzIiwiYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20iLCJyZXZlcnNlIiwiZmluZCIsImlkIiwiaGFuZGxlVHJhbnNjcmlwdEtleURvd24iLCJldmVudCIsInRhcmdldCIsImZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IiLCJmcm9tVHJhbnNjcmlwdCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVkIiwiSW5maW5pdHkiLCJib2R5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVUcmFuc2NyaXB0S2V5RG93bkNhcHR1cmUiLCJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsImRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSIsImhhbmRsZUZvY3VzIiwiaGFuZGxlRm9jdXNGaWxsZXIiLCJhbmRyb2lkIiwibWFwIiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic2hhcGUiLCJpbnN0YW5jZU9mIiwiTWFwIiwiaXNSZXF1aXJlZCIsInN0cmluZyIsIkludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGUiLCJjaGlsZHJlbiIsIm9uRm9jdXNGaWxsZXIiLCJhY3Rpdml0aWVzU3R5bGVTZXQiLCJhY3Rpdml0aWVzIiwiYW5pbWF0aW5nVG9FbmQiLCJhdEVuZCIsInVucmVhZEFjdGl2aXR5S2V5cyIsInN0aWNreSIsInN0eWxlT3B0aW9ucyIsIm1hcmtBbGxBc0Fja25vd2xlZGdlZCIsInByZXZTdGlja3kiLCJ0cmFuc2NyaXB0Um9sZURlc2NyaXB0aW9uIiwic3RpY2t5Q2hhbmdlZFRvVHJ1ZSIsImZsYXQiLCJmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIiLCJyZW5kZXJpbmdBY3Rpdml0eUtleXMiLCJyZW5kZXJpbmdBY3Rpdml0eUtleXNSZWYiLCJuZXh0VW5yZWFkQWN0aXZpdHlLZXlzIiwibmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZiIsInVucmVhZCIsInNvbWUiLCJpbmNsdWRlcyIsImhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2siLCJmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5IiwicmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24iLCJvbkNsaWNrIiwiUmVhY3QiLCJDaGlsZHJlbiIsImNvdW50IiwiYW55IiwiZnVuYyIsInVzZVNjcm9sbGVyIiwiYWN0aXZpdHlLZXlzIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwiYWN0aXZpdHlLZXlzUmVmIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmIiwic3R5bGVPcHRpb25zUmVmIiwiYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IiwiYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IiwiYXV0b1Njcm9sbFNuYXBPblBhZ2UiLCJhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2UiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IiwicGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IiwiYWN0aXZpdHlFbGVtZW50TWFwIiwidmFsdWVzIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXgiLCJpbmRleE9mIiwia2V5cyIsImZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCIsInNsaWNlIiwiYWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkiLCJpbmRleCIsIm50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCIsIm50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AiLCJvZmZzZXRUb3AiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50IiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wIiwiQmFzaWNUcmFuc2NyaXB0IiwiY29udGFpbmVyUmVmIiwic2Nyb2xsZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQVVBOztBQUNBOztBQUNBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFDRUEsZUFERixHQWVJQyw2QkFmSixDQUNFRCxlQURGO0FBQUEsSUFFRUUscUJBRkYsR0FlSUQsNkJBZkosQ0FFRUMscUJBRkY7QUFBQSxJQUdFQywrQkFI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RUFBRUMsU0FBN0U7QUFBd0YsSUFBQSxHQUFHLEVBQUVtTTtBQUE3RixJQUZGLENBREYsQ0FERjtBQVFELENBZEQ7O0FBZ0JBRCxlQUFlLENBQUN0RSxZQUFoQixHQUErQjtBQUM3QjVILEVBQUFBLFNBQVMsRUFBRTtBQURrQixDQUEvQjtBQUlBa00sZUFBZSxDQUFDckUsU0FBaEIsR0FBNEI7QUFDMUI3SCxFQUFBQSxTQUFTLEVBQUU4SCxtQkFBVUs7QUFESyxDQUE1QjtlQUllK0QsZSIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIgYXMgUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyLFxuICBQYW5lbCBhcyBSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwsXG4gIHVzZUFuaW1hdGluZ1RvRW5kLFxuICB1c2VBdEVuZCxcbiAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICB1c2VTY3JvbGxUbyxcbiAgdXNlU2Nyb2xsVG9FbmQsXG4gIHVzZVN0aWNreVxufSBmcm9tICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUNvbXBvbmVudEZhY3RvcnksIEF2YXRhckNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUVsZW1lbnRNYXAgfSBmcm9tICcuL1RyYW5zY3JpcHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBEaXJlY3RMaW5lQWN0aXZpdHkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcbmltcG9ydCB0eXBlIHsgRkMsIEtleWJvYXJkRXZlbnRIYW5kbGVyLCBNdXRhYmxlUmVmT2JqZWN0LCBSZWFjdE5vZGUsIFZGQyB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgYW5kcm9pZCB9IGZyb20gJy4vVXRpbHMvZGV0ZWN0QnJvd3Nlcic7XG5pbXBvcnQgQWN0aXZpdHlSb3cgZnJvbSAnLi9UcmFuc2NyaXB0L0FjdGl2aXR5Um93JztcbmltcG9ydCBCYXNpY1R5cGluZ0luZGljYXRvciBmcm9tICcuL0Jhc2ljVHlwaW5nSW5kaWNhdG9yJztcbmltcG9ydCBGb2N1c1JlZGlyZWN0b3IgZnJvbSAnLi9VdGlscy9Gb2N1c1JlZGlyZWN0b3InO1xuaW1wb3J0IGlucHV0dGFibGVLZXkgZnJvbSAnLi9VdGlscy9UeXBlRm9jdXNTaW5rL2lucHV0dGFibGVLZXknO1xuaW1wb3J0IGlzWmVyb09yUG9zaXRpdmUgZnJvbSAnLi9VdGlscy9pc1plcm9PclBvc2l0aXZlJztcbmltcG9ydCBLZXlib2FyZEhlbHAgZnJvbSAnLi9UcmFuc2NyaXB0L0tleWJvYXJkSGVscCc7XG5pbXBvcnQgTGl2ZVJlZ2lvblRyYW5zY3JpcHQgZnJvbSAnLi9UcmFuc2NyaXB0L0xpdmVSZWdpb25UcmFuc2NyaXB0Jztcbi8vIFRPRE86IFtQMl0gIzQxMzMgUmVuYW1lIHRvIFwiZ2V0VGFiYmFibGVFbGVtZW50c1wiLlxuaW1wb3J0IHRhYmJhYmxlRWxlbWVudHMgZnJvbSAnLi9VdGlscy90YWJiYWJsZUVsZW1lbnRzJztcbmltcG9ydCBUcmFuc2NyaXB0Rm9jdXNDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXInO1xuaW1wb3J0IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlQWN0aXZlRGVzY2VuZGFudElkJztcbmltcG9ydCB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIgZnJvbSAnLi9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL3VzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcic7XG5pbXBvcnQgdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbiBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24nO1xuaW1wb3J0IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSc7XG5pbXBvcnQgdXNlRm9jdXMgZnJvbSAnLi9ob29rcy91c2VGb2N1cyc7XG5pbXBvcnQgdXNlRm9jdXNCeUFjdGl2aXR5S2V5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c0J5QWN0aXZpdHlLZXknO1xuaW1wb3J0IHVzZUZvY3VzZWRBY3Rpdml0eUtleSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEFjdGl2aXR5S2V5JztcbmltcG9ydCB1c2VGb2N1c2VkRXhwbGljaXRseSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEV4cGxpY2l0bHknO1xuaW1wb3J0IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5JztcbmltcG9ydCB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VQcmV2aW91cyc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUnO1xuaW1wb3J0IHVzZVJlZ2lzdGVyU2Nyb2xsVG8gZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlclNjcm9sbFRvJztcbmltcG9ydCB1c2VSZWdpc3RlclNjcm9sbFRvRW5kIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VVbmlxdWVJZCc7XG5pbXBvcnQgdXNlVmFsdWVSZWYgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VWYWx1ZVJlZic7XG5cbmNvbnN0IHtcbiAgdXNlQWN0aXZpdHlLZXlzLFxuICB1c2VBY3Rpdml0eUtleXNCeVJlYWQsXG4gIHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gIHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICB1c2VEaXJlY3Rpb24sXG4gIHVzZUdldEFjdGl2aXR5QnlLZXksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHlJZCxcbiAgdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5LFxuICB1c2VMb2NhbGl6ZXIsXG4gIHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkLFxuICB1c2VTdHlsZU9wdGlvbnNcbn0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgXCJwb3NpdGlvbjogcmVsYXRpdmVcIiBoZXJlIHRvIGZvcm0gYW5vdGhlciBzdGFja2luZyBjb250ZXh0IGZvciB0aGUgc2Nyb2xsLXRvLWVuZCBidXR0b24uXG4gICAgLy8gU3RhY2tpbmcgY29udGV4dCBoZWxwIGlzb2xhdGluZyBlbGVtZW50cyB0aGF0IHVzZSBcInotaW5kZXhcIiBmcm9tIGdsb2JhbCBwb2xsdXRpb24uXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Qb3NpdGlvbmluZy9VbmRlcnN0YW5kaW5nX3pfaW5kZXgvVGhlX3N0YWNraW5nX2NvbnRleHRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19maWxsZXInOiB7XG4gICAgICBmbGV4OiAxXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3RyYW5zY3JpcHQnOiB7XG4gICAgICBsaXN0U3R5bGVUeXBlOiAnbm9uZSdcbiAgICB9XG4gIH1cbn07XG5cbnR5cGUgUmVuZGVyaW5nRWxlbWVudCA9IHtcbiAgYWN0aXZpdHk6IERpcmVjdExpbmVBY3Rpdml0eSAmIHtcbiAgICBjaGFubmVsRGF0YT86IHtcbiAgICAgIFsnd2ViY2hhdDpmYWxsYmFjay10ZXh0J106IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBjYWxsYmFja1JlZjogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xuICBoaWRlVGltZXN0YW1wOiBib29sZWFuO1xuICBrZXk6IHN0cmluZztcbiAgcmVuZGVyQWN0aXZpdHk6IEV4Y2x1ZGU8UmV0dXJuVHlwZTxBY3Rpdml0eUNvbXBvbmVudEZhY3Rvcnk+LCBmYWxzZT47XG4gIHJlbmRlckFjdGl2aXR5U3RhdHVzOiAocHJvcHM6IHsgaGlkZVRpbWVzdGFtcD86IGJvb2xlYW4gfSkgPT4gUmVhY3ROb2RlO1xuICByZW5kZXJBdmF0YXI6IEF2YXRhckNvbXBvbmVudEZhY3Rvcnk7XG4gIHNob3dDYWxsb3V0OiBib29sZWFuO1xufTtcblxudHlwZSBTY3JvbGxCZWhhdmlvciA9ICdhdXRvJyB8ICdzbW9vdGgnO1xudHlwZSBTY3JvbGxUb09wdGlvbnMgPSB7IGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfTtcbnR5cGUgU2Nyb2xsVG9Qb3NpdGlvbiA9IHsgYWN0aXZpdHlJRD86IHN0cmluZzsgc2Nyb2xsVG9wPzogbnVtYmVyIH07XG5cbnR5cGUgSW50ZXJuYWxUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogTXV0YWJsZVJlZk9iamVjdDxBY3Rpdml0eUVsZW1lbnRNYXA+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG4vLyBUT0RPOiBbUDFdICM0MTMzIEFkZCB0ZWxlbWV0cnkgZm9yIGNvbXB1dGluZyBob3cgbWFueSByZS1yZW5kZXIgZG9uZSBzbyBmYXIuXG5jb25zdCBJbnRlcm5hbFRyYW5zY3JpcHQgPSBmb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBJbnRlcm5hbFRyYW5zY3JpcHRQcm9wcz4oXG4gICh7IGFjdGl2aXR5RWxlbWVudE1hcFJlZiwgY2xhc3NOYW1lIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IFt7IGJhc2ljVHJhbnNjcmlwdDogYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICAgIGNvbnN0IFt7IGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LCBidWJibGVOdWJPZmZzZXQsIGdyb3VwVGltZXN0YW1wLCBzaG93QXZhdGFySW5Hcm91cCB9XSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICAgIGNvbnN0IFthY3RpdmVEZXNjZW5kYW50SWRdID0gdXNlQWN0aXZlRGVzY2VuZGFudElkKCk7XG4gICAgY29uc3QgW2FjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZV0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoKTtcbiAgICBjb25zdCBbZGlyZWN0aW9uXSA9IHVzZURpcmVjdGlvbigpO1xuICAgIGNvbnN0IFtmb2N1c2VkQWN0aXZpdHlLZXldID0gdXNlRm9jdXNlZEFjdGl2aXR5S2V5KCk7XG4gICAgY29uc3QgW2ZvY3VzZWRFeHBsaWNpdGx5XSA9IHVzZUZvY3VzZWRFeHBsaWNpdGx5KCk7XG4gICAgY29uc3QgY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciA9IHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIoKTtcbiAgICBjb25zdCBjcmVhdGVBdmF0YXJSZW5kZXJlciA9IHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyKCk7XG4gICAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cygpO1xuICAgIGNvbnN0IGZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZUZvY3VzQnlBY3Rpdml0eUtleSgpO1xuICAgIGNvbnN0IGZvY3VzUmVsYXRpdmVBY3Rpdml0eSA9IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSgpO1xuICAgIGNvbnN0IGdldEFjdGl2aXR5QnlLZXkgPSB1c2VHZXRBY3Rpdml0eUJ5S2V5KCk7XG4gICAgY29uc3QgZ2V0S2V5QnlBY3Rpdml0eSA9IHVzZUdldEtleUJ5QWN0aXZpdHkoKTtcbiAgICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5SWQgPSB1c2VHZXRLZXlCeUFjdGl2aXR5SWQoKTtcbiAgICBjb25zdCBsb2NhbGl6ZSA9IHVzZUxvY2FsaXplcigpO1xuICAgIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgY29uc3QgdGVybWluYXRvckxhYmVsSWQgPSB1c2VVbmlxdWVJZCgnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci1sYWJlbCcpO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBjb25zdCBmb2N1c2VkQWN0aXZpdHlLZXlSZWYgPSB1c2VWYWx1ZVJlZihmb2N1c2VkQWN0aXZpdHlLZXkpO1xuICAgIGNvbnN0IGhpZGVBbGxUaW1lc3RhbXBzID0gZ3JvdXBUaW1lc3RhbXAgPT09IGZhbHNlO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JUZXh0ID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfVEVSTUlOQVRPUl9URVhUJyk7XG4gICAgY29uc3QgdHJhbnNjcmlwdEFyaWFMYWJlbCA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfTEFCRUxfQUxUJyk7XG5cbiAgICBjb25zdCBjYWxsYmFja1JlZiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVmKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RFbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgfSxcbiAgICAgIFtyZWYsIHJvb3RFbGVtZW50UmVmXVxuICAgICk7XG5cbiAgICAvLyBGbGF0dGVuIHRoZSB0cmVlIGJhY2sgaW50byBhbiBhcnJheSB3aXRoIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gcmVuZGVyaW5nLlxuICAgIGNvbnN0IHJlbmRlcmluZ0VsZW1lbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJpbmdFbGVtZW50czogUmVuZGVyaW5nRWxlbWVudFtdID0gW107XG4gICAgICBjb25zdCB0b3BTaWRlQm90TnViID0gaXNaZXJvT3JQb3NpdGl2ZShidWJibGVOdWJPZmZzZXQpO1xuICAgICAgY29uc3QgdG9wU2lkZVVzZXJOdWIgPSBpc1plcm9PclBvc2l0aXZlKGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0KTtcblxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLmZvckVhY2goZW50cmllc1dpdGhTYW1lU2VuZGVyID0+IHtcbiAgICAgICAgY29uc3QgW1t7IGFjdGl2aXR5OiBmaXJzdEFjdGl2aXR5IH1dXSA9IGVudHJpZXNXaXRoU2FtZVNlbmRlcjtcbiAgICAgICAgY29uc3QgcmVuZGVyQXZhdGFyID0gY3JlYXRlQXZhdGFyUmVuZGVyZXIoeyBhY3Rpdml0eTogZmlyc3RBY3Rpdml0eSB9KTtcblxuICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXIuZm9yRWFjaCgoZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLCBpbmRleFdpdGhpblNlbmRlckdyb3VwKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlyc3RJblNlbmRlckdyb3VwID0gIWluZGV4V2l0aGluU2VuZGVyR3JvdXA7XG4gICAgICAgICAgY29uc3QgbGFzdEluU2VuZGVyR3JvdXAgPSBpbmRleFdpdGhpblNlbmRlckdyb3VwID09PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXIubGVuZ3RoIC0gMTtcblxuICAgICAgICAgIGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5mb3JFYWNoKCh7IGFjdGl2aXR5LCByZW5kZXJBY3Rpdml0eSB9LCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwKSA9PiB7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhlIHRpbWVzdGFtcCBhdCB0aGUgZW5kIG9mIHRoZSBzZW5kZXIgZ3JvdXAuIEJ1dCB3ZSBhbHdheXMgc2hvdyB0aGUgXCJTZW5kIGZhaWxlZCwgcmV0cnlcIiBwcm9tcHQuXG4gICAgICAgICAgICBjb25zdCBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPSAhaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cCA9XG4gICAgICAgICAgICAgIGluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPT09IGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQWN0aXZpdHlTdGF0dXMgPSBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIG5leHRWaXNpYmxlQWN0aXZpdHk6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0b3BTaWRlTnViID0gYWN0aXZpdHkuZnJvbT8ucm9sZSA9PT0gJ3VzZXInID8gdG9wU2lkZVVzZXJOdWIgOiB0b3BTaWRlQm90TnViO1xuXG4gICAgICAgICAgICBsZXQgc2hvd0NhbGxvdXQ6IGJvb2xlYW47XG5cbiAgICAgICAgICAgIC8vIERlcGVuZGluZyBvbiB0aGUgXCJzaG93QXZhdGFySW5Hcm91cFwiIHNldHRpbmcsIHRoZSBhdmF0YXIgd2lsbCByZW5kZXIgaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cbiAgICAgICAgICAgIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3NlbmRlcicpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJHcm91cCAmJiBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBsYXN0SW5TZW5kZXJHcm91cCAmJiBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3N0YXR1cycpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGxhc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmluZ0VsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICBhY3Rpdml0eSxcblxuICAgICAgICAgICAgICAvLyBBZnRlciB0aGUgZWxlbWVudCBpcyBtb3VudGVkLCBzZXQgaXQgdG8gYWN0aXZpdHlFbGVtZW50c1JlZi5cbiAgICAgICAgICAgICAgY2FsbGJhY2tSZWY6IGFjdGl2aXR5RWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHlFbGVtZW50XG4gICAgICAgICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LnNldChrZXksIGFjdGl2aXR5RWxlbWVudClcbiAgICAgICAgICAgICAgICAgIDogYWN0aXZpdHlFbGVtZW50TWFwUmVmLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgLy8gXCJoaWRlVGltZXN0YW1wXCIgaXMgYSByZW5kZXItdGltZSBwYXJhbWV0ZXIgZm9yIHJlbmRlckFjdGl2aXR5U3RhdHVzKCkuXG4gICAgICAgICAgICAgIC8vIElmIHRydWUsIGl0IHdpbGwgaGlkZSB0aGUgdGltZXN0YW1wLCBidXQgaXQgd2lsbCBjb250aW51ZSB0byBzaG93IHRoZVxuICAgICAgICAgICAgICAvLyByZXRyeSBwcm9tcHQuIEFuZCBzaG93IHRoZSBzY3JlZW4gcmVhZGVyIHZlcnNpb24gb2YgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgaGlkZVRpbWVzdGFtcDpcbiAgICAgICAgICAgICAgICBoaWRlQWxsVGltZXN0YW1wcyB8fCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwICE9PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHlTdGF0dXMsXG4gICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgc2hvd0NhbGxvdXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVuZGVyaW5nRWxlbWVudHM7XG4gICAgfSwgW1xuICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLFxuICAgICAgYnViYmxlRnJvbVVzZXJOdWJPZmZzZXQsXG4gICAgICBidWJibGVOdWJPZmZzZXQsXG4gICAgICBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgY3JlYXRlQXZhdGFyUmVuZGVyZXIsXG4gICAgICBnZXRLZXlCeUFjdGl2aXR5LFxuICAgICAgaGlkZUFsbFRpbWVzdGFtcHMsXG4gICAgICBzaG93QXZhdGFySW5Hcm91cFxuICAgIF0pO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUbzogKHNjcm9sbFRvcDogbnVtYmVyLCBvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG8oKTtcbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kOiAob3B0aW9ucz86IFNjcm9sbFRvT3B0aW9ucykgPT4gdm9pZCA9IHVzZVNjcm9sbFRvRW5kKCk7XG5cbiAgICBjb25zdCBzY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHBvc2l0aW9uOiBTY3JvbGxUb1Bvc2l0aW9uLCB7IGJlaGF2aW9yID0gJ2F1dG8nIH06IFNjcm9sbFRvT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IEZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVNjcm9sbFRvXCIgbXVzdCBiZSBhIFNjcm9sbFBvc2l0aW9uIG9iamVjdC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgYWN0aXZpdHlJRDogYWN0aXZpdHlJZCwgc2Nyb2xsVG9wIH0gPSBwb3NpdGlvbjtcblxuICAgICAgICBpZiAodHlwZW9mIHNjcm9sbFRvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aXZpdHlJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50XG4gICAgICAgICAgICAuZ2V0KGdldEtleUJ5QWN0aXZpdHlJZChhY3Rpdml0eUlkKSlcbiAgICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RFbGVtZW50UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcblxuICAgICAgICAgIGlmIChzY3JvbGxhYmxlRWxlbWVudCAmJiBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCkge1xuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodDogYWN0aXZpdHlIZWlnaHQsIHk6IGFjdGl2aXR5WSB9ID0gYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodDogc2Nyb2xsYWJsZUhlaWdodCB9ID0gc2Nyb2xsYWJsZUVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5T2Zmc2V0VG9wID0gYWN0aXZpdHlZICsgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBNYXRoLm1pbihhY3Rpdml0eU9mZnNldFRvcCwgYWN0aXZpdHlPZmZzZXRUb3AgLSBzY3JvbGxhYmxlSGVpZ2h0ICsgYWN0aXZpdHlIZWlnaHQpO1xuXG4gICAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBnZXRLZXlCeUFjdGl2aXR5SWQsIHJvb3RFbGVtZW50UmVmLCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxUb0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gc2Nyb2xsVG9Cb3R0b21TY3JvbGxUb0VuZCh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KSxcbiAgICAgIFtzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxSZWxhdGl2ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGRpcmVjdGlvbjogJ2Rvd24nIHwgJ3VwJywgeyBkaXNwbGFjZW1lbnQgfTogeyBkaXNwbGFjZW1lbnQ/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogcm9vdEVsZW1lbnQgfSA9IHJvb3RFbGVtZW50UmVmO1xuXG4gICAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlOiBIVE1MRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG4gICAgICAgIGxldCBuZXh0U2Nyb2xsVG9wOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwbGFjZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICBuZXh0U2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5zY3JvbGxUb3AgKyAoZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTEpICogZGlzcGxhY2VtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgbmV4dFNjcm9sbFRvcCA9IHNjcm9sbGFibGUuc2Nyb2xsVG9wICsgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xKSAqIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgc2Nyb2xsVG8oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Nyb2xsVG9wOiBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxhYmxlLnNjcm9sbEhlaWdodCAtIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0LCBuZXh0U2Nyb2xsVG9wKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgYmVoYXZpb3I6ICdzbW9vdGgnIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBbcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvXVxuICAgICk7XG5cbiAgICAvLyBTaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgPEJhc2ljVHJhbnNjcmlwdD4gaW5zaWRlIHRoZSA8Q29tcG9zZXI+LCB3aGVuIHRoZSBkZXZlbG9wZXIgY2FsbHMgYHNjcm9sbFhYWGAsIHdlIG5lZWQgdG8gY2FsbCBpdCBvbiBhbGwgaW5zdGFuY2VzLlxuICAgIC8vIFdlIGNhbGwgYHVzZVJlZ2lzdGVyU2Nyb2xsWFhYYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgYHVzZVNjcm9sbFhYWGAgd2lsbCBtdWx0aXBsZXggdGhlIGNhbGwgaW50byBlYWNoIGluc3RhbmNlIG9mIDxCYXNpY1RyYW5zY3JpcHQ+LlxuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG8oc2Nyb2xsVG8pO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG9FbmQoc2Nyb2xsVG9FbmQpO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUoc2Nyb2xsUmVsYXRpdmUpO1xuXG4gICAgY29uc3QgbWFya0FjdGl2aXR5S2V5QXNSZWFkID0gdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkKCk7XG5cbiAgICBjb25zdCBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQ6IChzY3JvbGxQb3NpdGlvbjogU2Nyb2xsVG9Qb3NpdGlvbikgPT4gdm9pZCA9XG4gICAgICB1c2VEaXNwYXRjaFNjcm9sbFBvc2l0aW9uKCk7XG5cbiAgICAvLyBUT0RPOiBbUDJdIFdlIHNob3VsZCB1c2UgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gdHJhY2sgd2hhdCBhY3Rpdml0eSBpcyBpbiB0aGUgc2Nyb2xsYWJsZS5cbiAgICAvLyAgICAgICAgICAgIEhvd2V2ZXIsIEludGVyc2VjdGlvbk9ic2VydmVyIGlzIG5vdCBhdmFpbGFibGUgb24gSUUxMSwgd2UgbmVlZCB0byBtYWtlIGEgbGltaXRlZCBwb2x5ZmlsbCBpbiBSZWFjdCBzdHlsZS5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGxQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHsgc2Nyb2xsVG9wIH06IHsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IHJvb3RFbGVtZW50IH0gPSByb290RWxlbWVudFJlZjtcblxuICAgICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSByb290RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fc2Nyb2xsYWJsZScpO1xuXG4gICAgICAgIC8vIFwiZ2V0Q2xpZW50UmVjdHMoKVwiIGlzIG5vdCByZXR1cm5pbmcgYW4gYXJyYXksIHRodXMsIGl0IGlzIG5vdCBkZXN0cnVjdHVyYWJsZS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIGNvbnN0IHsgYm90dG9tOiBzY3JvbGxhYmxlQ2xpZW50Qm90dG9tIH0gPSBzY3JvbGxhYmxlRWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGFjdGl2aXR5IGp1c3QgYWJvdmUgc2Nyb2xsIHZpZXcgYm90dG9tLlxuICAgICAgICAvLyBJZiB0aGUgc2Nyb2xsIHZpZXcgaXMgYWxyZWFkeSBvbiB0b3AsIGdldCB0aGUgZmlyc3QgYWN0aXZpdHkuXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5RWxlbWVudHMgPSBBcnJheS5mcm9tKGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LmVudHJpZXMoKSk7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoXG4gICAgICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudHNcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLy8gQWRkIHN1YnBpeGVsIHRvbGVyYW5jZVxuICAgICAgICAgICAgICAgIC5maW5kKChbLCBlbGVtZW50XSkgPT4gZWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdLmJvdHRvbSA8IHNjcm9sbGFibGVDbGllbnRCb3R0b20gKyAxKVxuICAgICAgICAgICAgOiBhY3Rpdml0eUVsZW1lbnRzWzBdXG4gICAgICAgICk/LlswXTtcblxuICAgICAgICAvLyBXaGVuIHRoZSBlbmQtdXNlciBzbG93bHkgc2Nyb2xsaW5nIHRoZSB2aWV3IGRvd24sIHdlIHdpbGwgbWFyayBhY3Rpdml0eSBhcyByZWFkIHdoZW4gdGhlIG1lc3NhZ2UgZnVsbHkgYXBwZWFyIG9uIHRoZSBzY3JlZW4uXG4gICAgICAgIGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tICYmIG1hcmtBY3Rpdml0eUtleUFzUmVhZChhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgaWYgKGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCkge1xuICAgICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gZ2V0QWN0aXZpdHlCeUtleShhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQoeyAuLi4oYWN0aXZpdHkgPyB7IGFjdGl2aXR5SUQ6IGFjdGl2aXR5LmlkIH0gOiB7fSksIHNjcm9sbFRvcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQsXG4gICAgICAgIGdldEFjdGl2aXR5QnlLZXksXG4gICAgICAgIG1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgICAgICAgcm9vdEVsZW1lbnRSZWZcbiAgICAgIF1cbiAgICApO1xuXG4gICAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uKGhhbmRsZVNjcm9sbFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+PihcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPSB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgZnJvbVRyYW5zY3JpcHQgPSB0YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgaWYgKCFmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yICYmICFmcm9tVHJhbnNjcmlwdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA/IDAgOiAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPyAwIDogLTEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KEluZmluaXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBjYXB0dXJpbmcgcGxhaW4gRU5URVIuXG4gICAgICAgICAgICAvLyBXaGVuIHNjcmVlbiByZWFkZXIgaXMgbm90IHJ1bm5pbmcsIG9yIHNjcmVlbiByZWFkZXIgaXMgcnVubmluZyBvdXRzaWRlIG9mIHNjYW4gbW9kZSwgdGhlIEVOVEVSIGtleSB3aWxsIGJlIGNhcHR1cmVkIGhlcmUuXG4gICAgICAgICAgICBpZiAoIWZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSFRNTEVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudFxuICAgICAgICAgICAgICAgIC5nZXQoZm9jdXNlZEFjdGl2aXR5S2V5UmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYm9keScpO1xuXG4gICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudHMoYm9keSlbMF0/LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgIGZvY3VzKCdzZW5kQm94V2l0aG91dEtleWJvYXJkJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KC1JbmZpbml0eSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIC8vIElmIGEgY3VzdG9tIEhUTUwgY29udHJvbCB3YW50cyB0byBoYW5kbGUgdXAvZG93biBhcnJvdywgd2Ugd2lsbCBwcmV2ZW50IHRoZW0gZnJvbSBsaXN0ZW5pbmcgdG8gdGhpcyBldmVudCB0byBwcmV2ZW50IGJ1Z3MgZHVlIHRvIGhhbmRsaW5nIGFycm93IGtleXMgdHdpY2UuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBmb2N1cywgZm9jdXNlZEFjdGl2aXR5S2V5UmVmLCBmb2N1c1JlbGF0aXZlQWN0aXZpdHksIHRlcm1pbmF0b3JSZWZdXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pj4oXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWx0S2V5LCBjdHJsS2V5LCBrZXksIG1ldGFLZXksIHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKGFsdEtleSB8fCAoY3RybEtleSAmJiBrZXkgIT09ICd2JykgfHwgbWV0YUtleSB8fCAoIWlucHV0dGFibGVLZXkoa2V5KSAmJiBrZXkgIT09ICdCYWNrc3BhY2UnKSkge1xuICAgICAgICAgIC8vIElnbm9yZSBpZiBvbmUgb2YgdGhlIHV0aWxpdHkga2V5IChleGNlcHQgU0hJRlQpIGlzIHByZXNzZWRcbiAgICAgICAgICAvLyBFLmcuIENUUkwtQyBvbiBhIGxpbmsgaW4gb25lIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBub3QganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIC8vIEUuZy4gXCJBXCIgb3IgXCJCYWNrc3BhY2VcIiBzaG91bGQganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbmQga2V5c3Ryb2tlcyB0byBzZW5kIGJveCBpZiB3ZSBhcmUgZm9jdXNpbmcgb24gdGhlIHRyYW5zY3JpcHQgb3IgdGVybWluYXRvci5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fCB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgZm9jdXMoJ3NlbmRCb3gnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtmb2N1c11cbiAgICApO1xuXG4gICAgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQodXNlQ2FsbGJhY2soKCkgPT4gZm9jdXNCeUFjdGl2aXR5S2V5KHVuZGVmaW5lZCksIFtmb2N1c0J5QWN0aXZpdHlLZXldKSk7XG5cbiAgICAvLyBXaGVuIHRoZSBmb2N1c2luZyBhY3Rpdml0eSBoYXMgY2hhbmdlZCwgZGlzcGF0Y2ggYW4gZXZlbnQgdG8gb2JzZXJ2ZXJzIG9mIFwidXNlT2JzZXJ2ZVRyYW5zY3JpcHRGb2N1c1wiLlxuICAgIGNvbnN0IGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSgpO1xuXG4gICAgLy8gRGlzcGF0Y2ggYSBcInRyYW5zY3JpcHQgZm9jdXNcIiBldmVudCBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbi5cbiAgICAvLyBXZSBzaG91bGQgbm90IGRpc3BhdGNoIFwidHJhbnNjcmlwdCBmb2N1c1wiIHdoZW4gYSBuZXcgYWN0aXZpdHkgY29tZS4gQWx0aG91Z2ggdGhlIHNlbGVjdGlvbiBjaGFuZ2UsIGl0IGlzIG5vdCBpbml0aWF0ZWQgZnJvbSB0aGUgdXNlci5cbiAgICB1c2VNZW1vKFxuICAgICAgKCkgPT4gZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5KGZvY3VzZWRFeHBsaWNpdGx5ID8gZm9jdXNlZEFjdGl2aXR5S2V5IDogdW5kZWZpbmVkKSxcbiAgICAgIFtkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXksIGZvY3VzZWRBY3Rpdml0eUtleSwgZm9jdXNlZEV4cGxpY2l0bHldXG4gICAgKTtcblxuICAgIC8vIFdoZW4gdGhlIHRyYW5zY3JpcHQgaXMgYmVpbmcgZm9jdXNlZCBvbiwgd2Ugc2hvdWxkIGRpc3BhdGNoIGEgXCJ0cmFuc2NyaXB0Zm9jdXNcIiBldmVudC5cbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUNhbGxiYWNrKFxuICAgICAgLy8gV2UgY2FsbCBcImZvY3VzQnlBY3Rpdml0eUtleVwiIHdpdGggYWN0aXZpdHkga2V5IG9mIFwidHJ1ZVwiLlxuICAgICAgLy8gSXQgbWVhbnMsIHRyaWVzIHRvIGZvY3VzIG9uIGFueXRoaW5nLlxuICAgICAgKHsgY3VycmVudFRhcmdldCwgdGFyZ2V0IH0pID0+IHRhcmdldCA9PT0gY3VycmVudFRhcmdldCAmJiBmb2N1c0J5QWN0aXZpdHlLZXkodHJ1ZSwgZmFsc2UpLFxuICAgICAgW2ZvY3VzQnlBY3Rpdml0eUtleV1cbiAgICApO1xuXG4gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBJRTExLlxuICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIGFuZCBlbXB0eSBzcGFjZSAoYS5rLmEuIGZpbGxlcikgaW4gYW4gZW1wdHkgdHJhbnNjcmlwdCwgSUUxMSBzYXlzIHRoZSBmb2N1cyBpcyBvbiB0aGUgPGRpdiBjbGFzc05hbWU9XCJmaWxsZXJcIj4sXG4gICAgLy8gZGVzcGl0ZSB0aGUgZmFjdCB0aGVyZSBhcmUgbm8gXCJ0YWJJbmRleFwiIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBmaWxsZXIuXG4gICAgLy8gV2UgbmVlZCB0byBhcnRpZmljaWFsbHkgc2VuZCB0aGUgZm9jdXMgYmFjayB0byB0aGUgdHJhbnNjcmlwdC5cbiAgICBjb25zdCBoYW5kbGVGb2N1c0ZpbGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IGZvY3VzQnlBY3Rpdml0eUtleSh1bmRlZmluZWQpLCBbZm9jdXNCeUFjdGl2aXR5S2V5XSk7XG5cbiAgICAvLyBXaGVuIGZvY3VzIGludG8gdGhlIHRyYW5zY3JpcHQgdXNpbmcgVEFCL1NISUZULVRBQiwgc2Nyb2xsIHRoZSBmb2N1c2VkIGFjdGl2aXR5IGludG8gdmlldy5cbiAgICB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlKFxuICAgICAgcm9vdEVsZW1lbnRSZWYsXG4gICAgICB1c2VDYWxsYmFjaygoKSA9PiBmb2N1c0J5QWN0aXZpdHlLZXkodW5kZWZpbmVkKSwgW2ZvY3VzQnlBY3Rpdml0eUtleV0pXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIC8vIEFsdGhvdWdoIEFuZHJvaWQgVGFsa0JhY2sgMTIuMSBkb2VzIG5vdCBzdXBwb3J0IGBhcmlhLWFjdGl2ZWRlc2NlbmRhbnRgLCB3aGVuIHVzZWQsIGl0IGJlY29tZSBidWdneSBhbmQgd2lsbCBuYXJyYXRlIGNvbnRlbnQgdHdpY2UuXG4gICAgICAgIC8vIFdlIGFyZSBkaXNhYmxpbmcgYGFyaWEtYWN0aXZlZGVzY2VuZGFudGAgZm9yIEFuZHJvaWQuIFNlZSA8QWN0aXZpdHlSb3c+IGZvciBkZXRhaWxzLlxuICAgICAgICBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9e2FuZHJvaWQgPyB1bmRlZmluZWQgOiBhY3RpdmVEZXNjZW5kYW50SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RyYW5zY3JpcHRBcmlhTGFiZWx9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCcsXG4gICAgICAgICAgYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgKyAnJyxcbiAgICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICAgIChjbGFzc05hbWUgfHwgJycpICsgJydcbiAgICAgICAgKX1cbiAgICAgICAgZGlyPXtkaXJlY3Rpb259XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZUZvY3VzfVxuICAgICAgICBvbktleURvd249e2hhbmRsZVRyYW5zY3JpcHRLZXlEb3dufVxuICAgICAgICBvbktleURvd25DYXB0dXJlPXtoYW5kbGVUcmFuc2NyaXB0S2V5RG93bkNhcHR1cmV9XG4gICAgICAgIHJlZj17Y2FsbGJhY2tSZWZ9XG4gICAgICAgIC8vIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIgd2lsbCBvbmx5IHdvcmtzIHdpdGggYSBudW1iZXIgb2Ygcm9sZXMgYW5kIGl0IG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIC8vIEZvciB1cC9kb3duIGFycm93IGtleSBuYXZpZ2F0aW9uIGFjcm9zcyBhY3Rpdml0aWVzLCB0aGlzIGNvbXBvbmVudCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSB0YWIgc2VxdWVuY2UuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiB3aWxsIG5vdCBiZSBuYXJyYXRlZCB3aGVuIHRoZSB1c2VyIHByZXNzIHVwL2Rvd24gYXJyb3cga2V5cy5cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2tiZF9mb2N1c19hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgPlxuICAgICAgICA8TGl2ZVJlZ2lvblRyYW5zY3JpcHQgYWN0aXZpdHlFbGVtZW50TWFwUmVmPXthY3Rpdml0eUVsZW1lbnRNYXBSZWZ9IC8+XG4gICAgICAgIHsvKiBUT0RPOiBbUDJdIEZpeCBFU0xpbnQgZXJyb3IgYG5vLXVzZS1iZWZvcmUtZGVmaW5lYCAqL31cbiAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi99XG4gICAgICAgIDxJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlIG9uRm9jdXNGaWxsZXI9e2hhbmRsZUZvY3VzRmlsbGVyfSB0ZXJtaW5hdG9yUmVmPXt0ZXJtaW5hdG9yUmVmfT5cbiAgICAgICAgICB7cmVuZGVyaW5nRWxlbWVudHMubWFwKFxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIGNhbGxiYWNrUmVmLFxuICAgICAgICAgICAgICBoaWRlVGltZXN0YW1wLFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgcmVuZGVyQXZhdGFyLFxuICAgICAgICAgICAgICBzaG93Q2FsbG91dFxuICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICA8QWN0aXZpdHlSb3cgYWN0aXZpdHk9e2FjdGl2aXR5fSBrZXk9e2tleX0gcmVmPXtjYWxsYmFja1JlZn0+XG4gICAgICAgICAgICAgICAge3JlbmRlckFjdGl2aXR5KHtcbiAgICAgICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvQWN0aXZpdHlSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlPlxuICAgICAgICB7ISFyZW5kZXJpbmdFbGVtZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Jvb3RFbGVtZW50UmVmfSAvPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt0ZXJtaW5hdG9yTGFiZWxJZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvclwiXG4gICAgICAgICAgICAgIHJlZj17dGVybWluYXRvclJlZn1cbiAgICAgICAgICAgICAgcm9sZT1cIm5vdGVcIlxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yLWJvZHlcIj5cbiAgICAgICAgICAgICAgICB7LyogYGlkYCBpcyByZXF1aXJlZCBmb3IgYGFyaWEtbGFiZWxsZWRieWAgKi99XG4gICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mb3JiaWQtZG9tLXByb3BzICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci10ZXh0XCIgaWQ9e3Rlcm1pbmF0b3JMYWJlbElkfT5cbiAgICAgICAgICAgICAgICAgIHt0ZXJtaW5hdG9yVGV4dH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZvY3VzLWluZGljYXRvclwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6ICcnXG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQucHJvcFR5cGVzID0ge1xuICAvLyBQcm9wVHlwZXMgY2Fubm90IHZhbGlkYXRlIHByZWNpc2VseSB3aXRoIGl0cyBUeXBlU2NyaXB0IGNvdW50ZXJwYXJ0LlxuICAvLyBAdHMtaWdub3JlXG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihNYXApXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxudHlwZSBJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBvbkZvY3VzRmlsbGVyOiAoKSA9PiB2b2lkO1xuICB0ZXJtaW5hdG9yUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbi8vIFNlcGFyYXRpbmcgaGlnaC1mcmVxdWVuY3kgaG9va3MgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cbmNvbnN0IEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGU6IEZDPEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGVQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgb25Gb2N1c0ZpbGxlcixcbiAgdGVybWluYXRvclJlZlxufSkgPT4ge1xuICBjb25zdCBbeyBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzU3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICBjb25zdCBbYW5pbWF0aW5nVG9FbmRdOiBbYm9vbGVhbl0gPSB1c2VBbmltYXRpbmdUb0VuZCgpO1xuICBjb25zdCBbYXRFbmRdOiBbYm9vbGVhbl0gPSB1c2VBdEVuZCgpO1xuICBjb25zdCBbLCB1bnJlYWRBY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzQnlSZWFkKCk7XG4gIGNvbnN0IFtzdGlja3ldOiBbYm9vbGVhbl0gPSB1c2VTdGlja3koKTtcbiAgY29uc3QgW3N0eWxlT3B0aW9uc10gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgZm9jdXNCeUFjdGl2aXR5S2V5ID0gdXNlRm9jdXNCeUFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IGxvY2FsaXplID0gdXNlTG9jYWxpemVyKCk7XG4gIGNvbnN0IG1hcmtBY3Rpdml0eUtleUFzUmVhZCA9IHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCgpO1xuICBjb25zdCBtYXJrQWxsQXNBY2tub3dsZWRnZWQgPSB1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQoKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQ6IChvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG9FbmQoKTtcblxuICBjb25zdCBwcmV2U3RpY2t5ID0gdXNlUHJldmlvdXMoc3RpY2t5KTtcbiAgY29uc3QgdHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbiA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfUk9MRV9BTFQnKTtcblxuICBjb25zdCBzdGlja3lDaGFuZ2VkVG9UcnVlID0gcHJldlN0aWNreSAhPT0gc3RpY2t5ICYmIHN0aWNreTtcblxuICAvLyBBY2tub3dsZWRnZWQgbWVhbnMgZWl0aGVyOlxuICAvLyAxLiBUaGUgdXNlciBzZW50IGEgbWVzc2FnZVxuICAvLyAgICAtIFdlIGRvbid0IG5lZWQgYSBjb25kaXRpb24gaGVyZS4gV2hlbiBXZWIgQ2hhdCBzZW5kcyB0aGUgdXNlcidzIG1lc3NhZ2UsIGl0IHdpbGwgc2Nyb2xsIHRvIGJvdHRvbSwgYW5kIGl0IHdpbGwgdHJpZ2dlciBjb25kaXRpb24gMiBiZWxvdy5cbiAgLy8gMi4gVGhlIHVzZXIgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHQsIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblxuICAvLyAgICAtIElmIHRoZSB0cmFuc2NyaXB0IGlzIGFscmVhZHkgYXQgdGhlIGJvdHRvbSwgdGhlIHVzZXIgbmVlZHMgdG8gc2Nyb2xsIHVwIGFuZCB0aGVuIGdvIGJhY2sgZG93blxuICAvLyAgICAtIFdoYXQgaGFwcGVucyBpZiB3ZSBhcmUgcmVsYXhpbmcgXCJzY3JvbGxlZCBmcm9tIGEgbm9uLWJvdHRvbSBzY3JvbGwgcG9zaXRpb25cIjpcbiAgLy8gICAgICAxLiBUaGUgY29uZGl0aW9uIHdpbGwgYmVjb21lIHNvbGVseSBcImF0IHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHRcIlxuICAvLyAgICAgIDIuIEF1dG8tc2Nyb2xsIHdpbGwgYWx3YXlzIHNjcm9sbCB0aGUgdHJhbnNjcmlwdCB0byB0aGUgYm90dG9tXG4gIC8vICAgICAgMy4gV2ViIENoYXQgd2lsbCBhbHdheXMgYWNrbm93bGVkZ2UgYWxsIGFjdGl2aXRpZXMgYXMgaXQgaXMgYXQgdGhlIGJvdHRvbVxuICAvLyAgICAgIDQuIEFja25vd2xlZGdlIGZsYWcgYmVjb21lIHVzZWxlc3NcbiAgLy8gICAgICA1LiBUaGVyZWZvcmUsIGV2ZW4gdGhlIGRldmVsb3BlciBzZXQgXCJwYXVzZSBhZnRlciAzIGFjdGl2aXRpZXNcIiwgaWYgYWN0aXZpdGllcyBhcmUgY29taW5nIGluIGF0IGEgc2xvdyBwYWNlIChub3QgYmF0Y2hlZCBpbiBhIHNpbmdsZSByZW5kZXIpXG4gIC8vICAgICAgICAgV2ViIENoYXQgd2lsbCBrZWVwIHNjcm9sbGluZyBhbmQgbm90IHNuYXBwZWQvcGF1c2VkXG5cbiAgLy8gTm90ZTogV2hlbiBXZWIgQ2hhdCBpcyBsb2FkZWQsIHRoZXJlIGFyZSBubyBhY3Rpdml0aWVzIGFja25vd2xlZGdlZC4gV2UgbmVlZCB0byBhc3N1bWUgYWxsIGFycml2aW5nIGFjdGl2aXRpZXMgYXJlIGFja25vd2xlZGdlZCB1bnRpbCBlbmQtdXNlciBzZW5kcyB0aGVpciBmaXJzdCBhY3Rpdml0eS5cbiAgLy8gICAgICAgQWN0aXZpdGllcyBsb2FkZWQgaW5pdGlhbGx5IGNvdWxkIGJlIGZyb20gY29udmVyc2F0aW9uIGhpc3RvcnkuIFdpdGhvdXQgYXNzdW1pbmcgYWNrbm93bGVkZ2VtZW50LCBXZWIgQ2hhdCB3aWxsIG5vdCBzY3JvbGwgaW5pdGlhbGx5IChhcyBldmVyeXRoaW5nIGlzIG5vdCBhY2tub3dsZWRnZWQpLlxuICAvLyAgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlIGNoYXQgYWRhcHRlciBzaG91bGQgbGV0IFdlYiBDaGF0IGtub3cgaWYgdGhlIGFjdGl2aXR5IGlzIGxvYWRlZCBmcm9tIGhpc3Rvcnkgb3Igbm90LlxuXG4gIC8vIFRPRE86IFtQMl0gIzM2NzAgTW92ZSB0aGUgXCJjb252ZXJzYXRpb24gaGlzdG9yeSBhY2tub3dsZWRnZW1lbnRcIiBsb2dpYyBtZW50aW9uZWQgYWJvdmUgdG8gcG9seWZpbGwgb2YgY2hhdCBhZGFwdGVycy5cbiAgLy8gICAgICAgMS4gQ2hhdCBhZGFwdGVyIHNob3VsZCBzZW5kIFwiYWNrbm93bGVkZ2VkXCIgYXMgcGFydCBvZiBcImNoYW5uZWxEYXRhXCJcbiAgLy8gICAgICAgMi4gSWYgXCJhY2tub3dsZWRnZWRcIiBpcyBcInVuZGVmaW5lZFwiLCB3ZSBzZXQgaXQgdG86XG4gIC8vICAgICAgICAgIGEuIHRydWUsIGlmIHRoZXJlIGFyZSBubyBlZ3Jlc3MgYWN0aXZpdGllcyB5ZXRcbiAgLy8gICAgICAgICAgYi4gT3RoZXJ3aXNlLCBmYWxzZVxuXG4gIHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHN0aWNreUNoYW5nZWRUb1RydWUgJiZcbiAgICAgIC8vIFRPRE86IFtQMl0gQm90aCBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCBhbmQgYG1hcmtBbGxBc0Fja25vd2xlZGdlZGAgaG9vayBhcmUgc2V0dGVycyBvZiB1c2VTdGF0ZS5cbiAgICAgIC8vICAgICAgIFRoaXMgbWVhbnMsIGluIGEgcmVuZGVyIGxvb3AsIHdlIHdpbGwgYmUgY2FsbGluZyBzZXR0ZXIgYW5kIHdpbGwgY2F1c2UgYW5vdGhlciByZS1yZW5kZXIuXG4gICAgICAvLyAgICAgICBUaGlzIGlzIG5vdCB0cml2aWFsIGJ1dCB3ZSBzaG91bGQgdGhpbmsgaWYgdGhlcmUgaXMgYSB3YXkgdG8gYXZvaWQgdGhpcy5cbiAgICAgIG1hcmtBbGxBc0Fja25vd2xlZGdlZCgpLFxuICAgIFttYXJrQWxsQXNBY2tub3dsZWRnZWQsIHN0aWNreUNoYW5nZWRUb1RydWVdXG4gICk7XG5cbiAgY29uc3QgW2ZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcl0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoeyBmbGF0OiB0cnVlIH0pO1xuICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5ID0gdXNlR2V0S2V5QnlBY3Rpdml0eSgpO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5czogc3RyaW5nW10gPSB1c2VNZW1vPHN0cmluZ1tdPihcbiAgICAoKSA9PiBmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIubWFwKCh7IGFjdGl2aXR5IH0pID0+IGdldEtleUJ5QWN0aXZpdHkoYWN0aXZpdHkpKSxcbiAgICBbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyLCBnZXRLZXlCeUFjdGl2aXR5XVxuICApO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiA9IHVzZVZhbHVlUmVmKHJlbmRlcmluZ0FjdGl2aXR5S2V5cyk7XG5cbiAgLy8gVG8gcHJldmVudCBmbGFzaHkgYnV0dG9uLCB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGFub3RoZXIgcmVuZGVyIGxvb3AgdG8gdXBkYXRlIHRoZSBgW3JlYWRBY3Rpdml0eUtleXMsIHVucmVhZEFjdGl2aXR5S2V5c11gIHN0YXRlLlxuICAvLyBJbnN0ZWFkLCB3ZSBhcmUgYnVpbGRpbmcgdGhlIG5leHQgb25lIGluIHRoaXMgYHVzZU1lbW9gIGNhbGwuXG4gIGNvbnN0IG5leHRVbnJlYWRBY3Rpdml0eUtleXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBUaGlzIGNvZGUgbmVlZCB0byBiZSBjYXJlZnVsIHJldmlld2VkIGFzIGl0IHdpbGwgY2F1c2UgYW5vdGhlciByZW5kZXIuIFRoZSBjb2RlIHNob3VsZCBiZSBjb252ZXJnaW5nLlxuICAgIC8vIEFmdGVyIHdlIGNhbGwgYG1hcmtBY3Rpdml0eUtleUFzUmVhZGAsIGV2ZXJ5dGhpbmcgd2lsbCBiZSByZWFkIGFuZCBub3RoaW5nIHdpbGwgYmUgdW5yZWFkLlxuICAgIC8vIFRoYXQgbWVhbnMsIGluIG5leHQgcmVuZGVyLCBgdW5yZWFkQWN0aXZpdHlLZXlzYCB3aWxsIGJlIGVtcHRpZWQgYW5kIHRoZSBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCB3aWxsIG5vdCBnZXQgY2FsbGVkIGFnYWluLlxuICAgIGlmIChzdGlja3kgJiYgdW5yZWFkQWN0aXZpdHlLZXlzLmxlbmd0aCkge1xuICAgICAgbWFya0FjdGl2aXR5S2V5QXNSZWFkKHVucmVhZEFjdGl2aXR5S2V5c1t1bnJlYWRBY3Rpdml0eUtleXMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHVucmVhZEFjdGl2aXR5S2V5cztcbiAgfSwgW21hcmtBY3Rpdml0eUtleUFzUmVhZCwgc3RpY2t5LCB1bnJlYWRBY3Rpdml0eUtleXNdKTtcblxuICBjb25zdCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYobmV4dFVucmVhZEFjdGl2aXR5S2V5cyk7XG5cbiAgLy8gSWYgd2UgYXJlIHJlbmRlcmluZyBhbnl0aGluZyB0aGF0IGlzIHVucmVhZCwgd2Ugc2hvdWxkIHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uLlxuICAvLyBOb3QgZXZlcnl0aGluZyBpbiB0aGUgYHVucmVhZEFjdGl2aXR5S2V5c2AgYXJlIHJlbmRlcmVkLCBzYXksIGJvdCB0eXBpbmcgaW5kaWNhdG9yLlxuICAvLyBXZSBzaG91bGQgbm90IHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uIGZvciBib3QgdHlwaW5nIGluZGljYXRvciBhcyBpdCB3aWxsIGNvbmZ1c2UgdGhlIHVzZXIuXG4gIGNvbnN0IHVucmVhZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbmV4dFVucmVhZEFjdGl2aXR5S2V5cy5zb21lKGtleSA9PiByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KSksXG4gICAgW3JlbmRlcmluZ0FjdGl2aXR5S2V5cywgbmV4dFVucmVhZEFjdGl2aXR5S2V5c11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNjcm9sbFRvRW5kKHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuXG4gICAgY29uc3QgeyBjdXJyZW50OiByZW5kZXJpbmdBY3Rpdml0eUtleXMgfSA9IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZjtcblxuICAgIC8vIEFmdGVyIHRoZSBcIk5ldyBtZXNzYWdlXCIgYnV0dG9uIGlzIGNsaWNrZWQsIGZvY3VzIG9uIHRoZSBmaXJzdCB1bnJlYWQgYWN0aXZpdHkgd2hpY2ggd2lsbCBiZSByZW5kZXJlZC5cbiAgICBjb25zdCBmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5ID0gbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZi5jdXJyZW50LmZpbmQoa2V5ID0+XG4gICAgICByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KVxuICAgICk7XG5cbiAgICBpZiAoZmlyc3RVbnJlYWRSZW5kZXJpbmdBY3Rpdml0eUtleSkge1xuICAgICAgZm9jdXNCeUFjdGl2aXR5S2V5KGZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyB1bnJlYWQgYWN0aXZpdHksIHNlbmQgdGhlIGZvY3VzIHRvIHRoZSB0ZXJtaW5hdG9yIGJsb2NrLlxuICAgICAgdGVybWluYXRvclJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2ZvY3VzQnlBY3Rpdml0eUtleSwgbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZiwgcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmLCBzY3JvbGxUb0VuZCwgdGVybWluYXRvclJlZl0pO1xuXG4gIGNvbnN0IHJlbmRlclNjcm9sbFRvRW5kQnV0dG9uID0gdXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlcigpKHtcbiAgICBhdEVuZDogYW5pbWF0aW5nVG9FbmQgfHwgYXRFbmQgfHwgc3RpY2t5LFxuICAgIHN0eWxlT3B0aW9ucyxcbiAgICB1bnJlYWRcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7cmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24gJiYgcmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24oeyBvbkNsaWNrOiBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrIH0pfVxuICAgICAgeyEhUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pICYmIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Rlcm1pbmF0b3JSZWZ9IC8+fVxuICAgICAgPFJlYWN0U2Nyb2xsVG9Cb3R0b21QYW5lbCBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlXCI+XG4gICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZpbGxlclwiIG9uRm9jdXM9e29uRm9jdXNGaWxsZXJ9IC8+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgYXJpYS1yb2xlZGVzY3JpcHRpb249e3RyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb259XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGFjdGl2aXRpZXNTdHlsZVNldCArICcnLCAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdHJhbnNjcmlwdCcpfVxuICAgICAgICAgIHJvbGU9XCJmZWVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8QmFzaWNUeXBpbmdJbmRpY2F0b3IgLz5cbiAgICAgIDwvUmVhY3RTY3JvbGxUb0JvdHRvbVBhbmVsPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25Gb2N1c0ZpbGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGVybWluYXRvclJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59O1xuXG50eXBlIFNjcm9sbGVyID0gKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfTogeyBvZmZzZXRIZWlnaHQ6IG51bWJlcjsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4gbnVtYmVyO1xuXG4vLyBcInNjcm9sbGVyXCIgaXMgdGhlIGF1dG8tc2Nyb2xsIGxpbWl0ZXIsIGEuay5hLiBhdXRvIHNjcm9sbCBzbmFwLlxuY29uc3QgdXNlU2Nyb2xsZXIgPSAoYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEFjdGl2aXR5RWxlbWVudE1hcD4pOiBTY3JvbGxlciA9PiB7XG4gIGNvbnN0IFthY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzKCk7XG4gIGNvbnN0IFtsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXldID0gdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IFtzdHlsZU9wdGlvbnNdID0gdXNlU3R5bGVPcHRpb25zKCk7XG5cbiAgY29uc3QgYWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYoYWN0aXZpdHlLZXlzKTtcbiAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYobGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KTtcbiAgY29uc3Qgc3R5bGVPcHRpb25zUmVmID0gdXNlVmFsdWVSZWYoc3R5bGVPcHRpb25zKTtcblxuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiB7XG4gICAgICAgICAgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5LFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZSxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldFxuICAgICAgICB9XG4gICAgICB9ID0gc3R5bGVPcHRpb25zUmVmO1xuXG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGF1dG9TY3JvbGxTbmFwT25QYWdlKSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25QYWdlXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQgPT09ICdudW1iZXInID8gYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9PT0gJ251bWJlcicgPyBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA6IDA7XG5cbiAgICAgIGlmIChwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IHx8IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5RWxlbWVudE1hcCB9ID0gYWN0aXZpdHlFbGVtZW50TWFwUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5S2V5cyB9ID0gYWN0aXZpdHlLZXlzUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSB9ID0gbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmO1xuICAgICAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggPSBhY3Rpdml0eUtleXMuaW5kZXhPZihsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgIGlmICh+bGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXgpIHtcbiAgICAgICAgICAvLyBUaGUgYWN0aXZpdHkgdGhhdCB3ZSBhY2tub3dsZWRnZWQgY291bGQgYmUgbm90IHJlbmRlcmVkLCBzdWNoIGFzIHBvc3QgYmFjayBhY3Rpdml0eS5cbiAgICAgICAgICAvLyBXaGVuIGNhbGN1bGF0aW5nIHNjcm9sbCBzbmFwLCB3ZSBjYW4gb25seSBiYXNlIG9uIHRoZSBmaXJzdCB1bmFja25vd2xlZGdlZC1hbmQtcmVuZGVyaW5nIGFjdGl2aXR5LlxuICAgICAgICAgIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLmtleXMoKSk7XG4gICAgICAgICAgbGV0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCA9IC0xO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBhY2tub3dsZWRnZWRBY3Rpdml0eUtleSBvZiBhY3Rpdml0eUtleXMuc2xpY2UoMCwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggKyAxKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmluZGV4T2YoYWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAofmZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlFbGVtZW50cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLnZhbHVlcygpKTtcblxuICAgICAgICAgICAgaWYgKHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgLy8gR2V0cyB0aGUgYWN0aXZpdHkgZWxlbWVudCB3aGljaCB3ZSBzaG91bGQgc25hcCB0by5cbiAgICAgICAgICAgICAgY29uc3QgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIGFjdGl2aXR5RWxlbWVudHNbZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4ICsgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSAtIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYWN0aXZlLWRlc2NlbmRhbnQnXG4gICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICAgIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQub2Zmc2V0VG9wO1xuXG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgICBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3AgK1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRzWytmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXhdO1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCdcbiAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCAtXG4gICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgKiAoMSAtIHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkgK1xuICAgICAgICAgICAgICAgICAgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnZhbHVlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9LFxuICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGFjdGl2aXR5S2V5c1JlZiwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmLCBzdHlsZU9wdGlvbnNSZWZdXG4gICk7XG59O1xuXG50eXBlIEJhc2ljVHJhbnNjcmlwdFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBCYXNpY1RyYW5zY3JpcHQ6IFZGQzxCYXNpY1RyYW5zY3JpcHRQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBhY3Rpdml0eUVsZW1lbnRNYXBSZWYgPSB1c2VSZWY8QWN0aXZpdHlFbGVtZW50TWFwPihuZXcgTWFwKCkpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgc2Nyb2xsZXIgPSB1c2VTY3JvbGxlcihhY3Rpdml0eUVsZW1lbnRNYXBSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRyYW5zY3JpcHRGb2N1c0NvbXBvc2VyIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgIDxSZWFjdFNjcm9sbFRvQm90dG9tQ29tcG9zZXIgc2Nyb2xsZXI9e3Njcm9sbGVyfT5cbiAgICAgICAgPEtleWJvYXJkSGVscCAvPlxuICAgICAgICA8SW50ZXJuYWxUcmFuc2NyaXB0IGFjdGl2aXR5RWxlbWVudE1hcFJlZj17YWN0aXZpdHlFbGVtZW50TWFwUmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gcmVmPXtjb250YWluZXJSZWZ9IC8+XG4gICAgICA8L1JlYWN0U2Nyb2xsVG9Cb3R0b21Db21wb3Nlcj5cbiAgICA8L1RyYW5zY3JpcHRGb2N1c0NvbXBvc2VyPlxuICApO1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiAnJ1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCYXNpY1RyYW5zY3JpcHQ7XG4iXX0=
854
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RyYW5zY3JpcHQudHN4Il0sIm5hbWVzIjpbInVzZUFjdGl2aXR5S2V5cyIsImhvb2tzIiwidXNlQWN0aXZpdHlLZXlzQnlSZWFkIiwidXNlQ3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsInVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyIiwidXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlciIsInVzZURpcmVjdGlvbiIsInVzZUdldEFjdGl2aXR5QnlLZXkiLCJ1c2VHZXRLZXlCeUFjdGl2aXR5IiwidXNlR2V0S2V5QnlBY3Rpdml0eUlkIiwidXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwidXNlTG9jYWxpemVyIiwidXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkIiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwidXNlU3R5bGVPcHRpb25zIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsImZsZXgiLCJvdmVyZmxvd1giLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsImxpc3RTdHlsZVR5cGUiLCJJbnRlcm5hbFRyYW5zY3JpcHQiLCJyZWYiLCJhY3Rpdml0eUVsZW1lbnRNYXBSZWYiLCJjbGFzc05hbWUiLCJiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCIsImJhc2ljVHJhbnNjcmlwdCIsImJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0IiwiYnViYmxlTnViT2Zmc2V0IiwiZ3JvdXBUaW1lc3RhbXAiLCJzaG93QXZhdGFySW5Hcm91cCIsImFjdGl2ZURlc2NlbmRhbnRJZCIsImFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSIsImRpcmVjdGlvbiIsImZvY3VzZWRBY3Rpdml0eUtleSIsImZvY3VzZWRFeHBsaWNpdGx5IiwiY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsImNyZWF0ZUF2YXRhclJlbmRlcmVyIiwiZm9jdXMiLCJmb2N1c0J5QWN0aXZpdHlLZXkiLCJmb2N1c1JlbGF0aXZlQWN0aXZpdHkiLCJnZXRBY3Rpdml0eUJ5S2V5IiwiZ2V0S2V5QnlBY3Rpdml0eSIsImdldEtleUJ5QWN0aXZpdHlJZCIsImxvY2FsaXplIiwicm9vdENsYXNzTmFtZSIsInJvb3RFbGVtZW50UmVmIiwidGVybWluYXRvckxhYmVsSWQiLCJ0ZXJtaW5hdG9yUmVmIiwiZm9jdXNlZEFjdGl2aXR5S2V5UmVmIiwiaGlkZUFsbFRpbWVzdGFtcHMiLCJ0ZXJtaW5hdG9yVGV4dCIsInRyYW5zY3JpcHRBcmlhTGFiZWwiLCJjYWxsYmFja1JlZiIsImVsZW1lbnQiLCJjdXJyZW50IiwicmVuZGVyaW5nRWxlbWVudHMiLCJ0b3BTaWRlQm90TnViIiwidG9wU2lkZVVzZXJOdWIiLCJmb3JFYWNoIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiZmlyc3RBY3Rpdml0eSIsImFjdGl2aXR5IiwicmVuZGVyQXZhdGFyIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzIiwiaW5kZXhXaXRoaW5TZW5kZXJHcm91cCIsImZpcnN0SW5TZW5kZXJHcm91cCIsImxhc3RJblNlbmRlckdyb3VwIiwibGVuZ3RoIiwiaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCIsInJlbmRlckFjdGl2aXR5IiwiZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwIiwia2V5IiwibGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJyZW5kZXJBY3Rpdml0eVN0YXR1cyIsIm5leHRWaXNpYmxlQWN0aXZpdHkiLCJ1bmRlZmluZWQiLCJ0b3BTaWRlTnViIiwiZnJvbSIsInJvbGUiLCJzaG93Q2FsbG91dCIsInB1c2giLCJhY3Rpdml0eUVsZW1lbnQiLCJzZXQiLCJkZWxldGUiLCJoaWRlVGltZXN0YW1wIiwic2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmQiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiRXJyb3IiLCJhY3Rpdml0eUlkIiwiYWN0aXZpdHlJRCIsInNjcm9sbFRvcCIsImFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZ2V0IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGFibGVFbGVtZW50IiwiYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdHMiLCJzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QiLCJhY3Rpdml0eUhlaWdodCIsImhlaWdodCIsImFjdGl2aXR5WSIsInkiLCJzY3JvbGxhYmxlSGVpZ2h0IiwiYWN0aXZpdHlPZmZzZXRUb3AiLCJNYXRoIiwibWluIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxSZWxhdGl2ZSIsImRpc3BsYWNlbWVudCIsInJvb3RFbGVtZW50Iiwic2Nyb2xsYWJsZSIsIm5leHRTY3JvbGxUb3AiLCJvZmZzZXRIZWlnaHQiLCJtYXgiLCJzY3JvbGxIZWlnaHQiLCJtYXJrQWN0aXZpdHlLZXlBc1JlYWQiLCJkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQiLCJoYW5kbGVTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGVDbGllbnRCb3R0b20iLCJib3R0b20iLCJhY3Rpdml0eUVsZW1lbnRzIiwiQXJyYXkiLCJlbnRyaWVzIiwiYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20iLCJyZXZlcnNlIiwiZmluZCIsImVsZW1lbnRDbGllbnRSZWN0IiwiaWQiLCJoYW5kbGVUcmFuc2NyaXB0S2V5RG93biIsImV2ZW50IiwidGFyZ2V0IiwiZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciIsImZyb21UcmFuc2NyaXB0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZWQiLCJJbmZpbml0eSIsImJvZHkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5IiwiZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IiwiaGFuZGxlRm9jdXMiLCJoYW5kbGVGb2N1c0ZpbGxlciIsImFuZHJvaWQiLCJtYXAiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzaGFwZSIsImluc3RhbmNlT2YiLCJNYXAiLCJpc1JlcXVpcmVkIiwic3RyaW5nIiwiSW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZSIsImNoaWxkcmVuIiwib25Gb2N1c0ZpbGxlciIsImFjdGl2aXRpZXNTdHlsZVNldCIsImFjdGl2aXRpZXMiLCJhbmltYXRpbmdUb0VuZCIsImF0RW5kIiwidW5yZWFkQWN0aXZpdHlLZXlzIiwic3RpY2t5Iiwic3R5bGVPcHRpb25zIiwibWFya0FsbEFzQWNrbm93bGVkZ2VkIiwicHJldlN0aWNreSIsInRyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb24iLCJzdGlja3lDaGFuZ2VkVG9UcnVlIiwiZmxhdCIsImZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciIsInJlbmRlcmluZ0FjdGl2aXR5S2V5cyIsInJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiIsIm5leHRVbnJlYWRBY3Rpdml0eUtleXMiLCJuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmIiwidW5yZWFkIiwic29tZSIsImluY2x1ZGVzIiwiaGFuZGxlU2Nyb2xsVG9FbmRCdXR0b25DbGljayIsImZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkiLCJyZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbiIsIm9uQ2xpY2siLCJSZWFjdCIsIkNoaWxkcmVuIiwiY291bnQiLCJhbnkiLCJmdW5jIiwidXNlU2Nyb2xsZXIiLCJhY3Rpdml0eUtleXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkiLCJhY3Rpdml0eUtleXNSZWYiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYiLCJzdHlsZU9wdGlvbnNSZWYiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJhdXRvU2Nyb2xsU25hcE9uUGFnZSIsImF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IiwicGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2VPZmZzZXQiLCJhY3Rpdml0eUVsZW1lbnRNYXAiLCJ2YWx1ZXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCIsImluZGV4T2YiLCJrZXlzIiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4Iiwic2xpY2UiLCJhY2tub3dsZWRnZWRBY3Rpdml0eUtleSIsImluZGV4IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eU9mZnNldFRvcCIsIm9mZnNldFRvcCIsImZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AiLCJCYXNpY1RyYW5zY3JpcHQiLCJjb250YWluZXJSZWYiLCJzY3JvbGxlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBVUE7O0FBQ0E7O0FBQ0E7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJ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LElBQU15QixlQUEwQyxHQUFHLFNBQTdDQSxlQUE2QyxTQUFtQjtBQUFBLE1BQWhCck0sU0FBZ0IsVUFBaEJBLFNBQWdCO0FBQ3BFLE1BQU1ELHFCQUFxQixHQUFHLG1CQUEyQixJQUFJcUksR0FBSixFQUEzQixDQUE5QjtBQUNBLE1BQU1rRSxZQUFZLEdBQUcsb0JBQXJCO0FBRUEsTUFBTUMsUUFBUSxHQUFHaEMsV0FBVyxDQUFDeEsscUJBQUQsQ0FBNUI7QUFFQSxzQkFDRSw2QkFBQyxnQ0FBRDtBQUF5QixJQUFBLFlBQVksRUFBRXVNO0FBQXZDLGtCQUNFLDZCQUFDLDZCQUFEO0FBQTZCLElBQUEsUUFBUSxFQUFFQztBQUF2QyxrQkFDRSw2QkFBQyxxQkFBRCxPQURGLGVBRUUsNkJBQUMsa0JBQUQ7QUFBb0IsSUFBQSxxQkFBcUIsRUFBRXhNLHFCQUEzQztBQUFrRSxJQUFBLFNBQVMsRUFBRUMsU0FBN0U7QUFBd0YsSUFBQSxHQUFHLEVBQUVzTTtBQUE3RixJQUZGLENBREYsQ0FERjtBQVFELENBZEQ7O0FBZ0JBRCxlQUFlLENBQUN0RSxZQUFoQixHQUErQjtBQUM3Qi9ILEVBQUFBLFNBQVMsRUFBRTtBQURrQixDQUEvQjtBQUlBcU0sZUFBZSxDQUFDckUsU0FBaEIsR0FBNEI7QUFDMUJoSSxFQUFBQSxTQUFTLEVBQUVpSSxtQkFBVUs7QUFESyxDQUE1QjtlQUllK0QsZSIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIgYXMgUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyLFxuICBQYW5lbCBhcyBSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwsXG4gIHVzZUFuaW1hdGluZ1RvRW5kLFxuICB1c2VBdEVuZCxcbiAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICB1c2VTY3JvbGxUbyxcbiAgdXNlU2Nyb2xsVG9FbmQsXG4gIHVzZVN0aWNreVxufSBmcm9tICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUNvbXBvbmVudEZhY3RvcnksIEF2YXRhckNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUVsZW1lbnRNYXAgfSBmcm9tICcuL1RyYW5zY3JpcHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBEaXJlY3RMaW5lQWN0aXZpdHkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcbmltcG9ydCB0eXBlIHsgRkMsIEtleWJvYXJkRXZlbnRIYW5kbGVyLCBNdXRhYmxlUmVmT2JqZWN0LCBSZWFjdE5vZGUsIFZGQyB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgYW5kcm9pZCB9IGZyb20gJy4vVXRpbHMvZGV0ZWN0QnJvd3Nlcic7XG5pbXBvcnQgQWN0aXZpdHlSb3cgZnJvbSAnLi9UcmFuc2NyaXB0L0FjdGl2aXR5Um93JztcbmltcG9ydCBCYXNpY1R5cGluZ0luZGljYXRvciBmcm9tICcuL0Jhc2ljVHlwaW5nSW5kaWNhdG9yJztcbmltcG9ydCBGb2N1c1JlZGlyZWN0b3IgZnJvbSAnLi9VdGlscy9Gb2N1c1JlZGlyZWN0b3InO1xuaW1wb3J0IGlucHV0dGFibGVLZXkgZnJvbSAnLi9VdGlscy9UeXBlRm9jdXNTaW5rL2lucHV0dGFibGVLZXknO1xuaW1wb3J0IGlzWmVyb09yUG9zaXRpdmUgZnJvbSAnLi9VdGlscy9pc1plcm9PclBvc2l0aXZlJztcbmltcG9ydCBLZXlib2FyZEhlbHAgZnJvbSAnLi9UcmFuc2NyaXB0L0tleWJvYXJkSGVscCc7XG5pbXBvcnQgTGl2ZVJlZ2lvblRyYW5zY3JpcHQgZnJvbSAnLi9UcmFuc2NyaXB0L0xpdmVSZWdpb25UcmFuc2NyaXB0Jztcbi8vIFRPRE86IFtQMl0gIzQxMzMgUmVuYW1lIHRvIFwiZ2V0VGFiYmFibGVFbGVtZW50c1wiLlxuaW1wb3J0IHRhYmJhYmxlRWxlbWVudHMgZnJvbSAnLi9VdGlscy90YWJiYWJsZUVsZW1lbnRzJztcbmltcG9ydCBUcmFuc2NyaXB0Rm9jdXNDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXInO1xuaW1wb3J0IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlQWN0aXZlRGVzY2VuZGFudElkJztcbmltcG9ydCB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIgZnJvbSAnLi9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL3VzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcic7XG5pbXBvcnQgdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbiBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24nO1xuaW1wb3J0IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSc7XG5pbXBvcnQgdXNlRm9jdXMgZnJvbSAnLi9ob29rcy91c2VGb2N1cyc7XG5pbXBvcnQgdXNlRm9jdXNCeUFjdGl2aXR5S2V5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c0J5QWN0aXZpdHlLZXknO1xuaW1wb3J0IHVzZUZvY3VzZWRBY3Rpdml0eUtleSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEFjdGl2aXR5S2V5JztcbmltcG9ydCB1c2VGb2N1c2VkRXhwbGljaXRseSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEV4cGxpY2l0bHknO1xuaW1wb3J0IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5JztcbmltcG9ydCB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VQcmV2aW91cyc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUnO1xuaW1wb3J0IHVzZVJlZ2lzdGVyU2Nyb2xsVG8gZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlclNjcm9sbFRvJztcbmltcG9ydCB1c2VSZWdpc3RlclNjcm9sbFRvRW5kIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VVbmlxdWVJZCc7XG5pbXBvcnQgdXNlVmFsdWVSZWYgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VWYWx1ZVJlZic7XG5cbmNvbnN0IHtcbiAgdXNlQWN0aXZpdHlLZXlzLFxuICB1c2VBY3Rpdml0eUtleXNCeVJlYWQsXG4gIHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gIHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICB1c2VEaXJlY3Rpb24sXG4gIHVzZUdldEFjdGl2aXR5QnlLZXksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHlJZCxcbiAgdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5LFxuICB1c2VMb2NhbGl6ZXIsXG4gIHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkLFxuICB1c2VTdHlsZU9wdGlvbnNcbn0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgXCJwb3NpdGlvbjogcmVsYXRpdmVcIiBoZXJlIHRvIGZvcm0gYW5vdGhlciBzdGFja2luZyBjb250ZXh0IGZvciB0aGUgc2Nyb2xsLXRvLWVuZCBidXR0b24uXG4gICAgLy8gU3RhY2tpbmcgY29udGV4dCBoZWxwIGlzb2xhdGluZyBlbGVtZW50cyB0aGF0IHVzZSBcInotaW5kZXhcIiBmcm9tIGdsb2JhbCBwb2xsdXRpb24uXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Qb3NpdGlvbmluZy9VbmRlcnN0YW5kaW5nX3pfaW5kZXgvVGhlX3N0YWNraW5nX2NvbnRleHRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19maWxsZXInOiB7XG4gICAgICBmbGV4OiAxXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3RyYW5zY3JpcHQnOiB7XG4gICAgICBsaXN0U3R5bGVUeXBlOiAnbm9uZSdcbiAgICB9XG4gIH1cbn07XG5cbnR5cGUgUmVuZGVyaW5nRWxlbWVudCA9IHtcbiAgYWN0aXZpdHk6IERpcmVjdExpbmVBY3Rpdml0eSAmIHtcbiAgICBjaGFubmVsRGF0YT86IHtcbiAgICAgIFsnd2ViY2hhdDpmYWxsYmFjay10ZXh0J106IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBjYWxsYmFja1JlZjogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xuICBoaWRlVGltZXN0YW1wOiBib29sZWFuO1xuICBrZXk6IHN0cmluZztcbiAgcmVuZGVyQWN0aXZpdHk6IEV4Y2x1ZGU8UmV0dXJuVHlwZTxBY3Rpdml0eUNvbXBvbmVudEZhY3Rvcnk+LCBmYWxzZT47XG4gIHJlbmRlckFjdGl2aXR5U3RhdHVzOiAocHJvcHM6IHsgaGlkZVRpbWVzdGFtcD86IGJvb2xlYW4gfSkgPT4gUmVhY3ROb2RlO1xuICByZW5kZXJBdmF0YXI6IEF2YXRhckNvbXBvbmVudEZhY3Rvcnk7XG4gIHNob3dDYWxsb3V0OiBib29sZWFuO1xufTtcblxudHlwZSBTY3JvbGxCZWhhdmlvciA9ICdhdXRvJyB8ICdzbW9vdGgnO1xudHlwZSBTY3JvbGxUb09wdGlvbnMgPSB7IGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfTtcbnR5cGUgU2Nyb2xsVG9Qb3NpdGlvbiA9IHsgYWN0aXZpdHlJRD86IHN0cmluZzsgc2Nyb2xsVG9wPzogbnVtYmVyIH07XG5cbnR5cGUgSW50ZXJuYWxUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogTXV0YWJsZVJlZk9iamVjdDxBY3Rpdml0eUVsZW1lbnRNYXA+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG4vLyBUT0RPOiBbUDFdICM0MTMzIEFkZCB0ZWxlbWV0cnkgZm9yIGNvbXB1dGluZyBob3cgbWFueSByZS1yZW5kZXIgZG9uZSBzbyBmYXIuXG5jb25zdCBJbnRlcm5hbFRyYW5zY3JpcHQgPSBmb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBJbnRlcm5hbFRyYW5zY3JpcHRQcm9wcz4oXG4gICh7IGFjdGl2aXR5RWxlbWVudE1hcFJlZiwgY2xhc3NOYW1lIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IFt7IGJhc2ljVHJhbnNjcmlwdDogYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICAgIGNvbnN0IFt7IGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LCBidWJibGVOdWJPZmZzZXQsIGdyb3VwVGltZXN0YW1wLCBzaG93QXZhdGFySW5Hcm91cCB9XSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICAgIGNvbnN0IFthY3RpdmVEZXNjZW5kYW50SWRdID0gdXNlQWN0aXZlRGVzY2VuZGFudElkKCk7XG4gICAgY29uc3QgW2FjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZV0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoKTtcbiAgICBjb25zdCBbZGlyZWN0aW9uXSA9IHVzZURpcmVjdGlvbigpO1xuICAgIGNvbnN0IFtmb2N1c2VkQWN0aXZpdHlLZXldID0gdXNlRm9jdXNlZEFjdGl2aXR5S2V5KCk7XG4gICAgY29uc3QgW2ZvY3VzZWRFeHBsaWNpdGx5XSA9IHVzZUZvY3VzZWRFeHBsaWNpdGx5KCk7XG4gICAgY29uc3QgY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciA9IHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIoKTtcbiAgICBjb25zdCBjcmVhdGVBdmF0YXJSZW5kZXJlciA9IHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyKCk7XG4gICAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cygpO1xuICAgIGNvbnN0IGZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZUZvY3VzQnlBY3Rpdml0eUtleSgpO1xuICAgIGNvbnN0IGZvY3VzUmVsYXRpdmVBY3Rpdml0eSA9IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSgpO1xuICAgIGNvbnN0IGdldEFjdGl2aXR5QnlLZXkgPSB1c2VHZXRBY3Rpdml0eUJ5S2V5KCk7XG4gICAgY29uc3QgZ2V0S2V5QnlBY3Rpdml0eSA9IHVzZUdldEtleUJ5QWN0aXZpdHkoKTtcbiAgICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5SWQgPSB1c2VHZXRLZXlCeUFjdGl2aXR5SWQoKTtcbiAgICBjb25zdCBsb2NhbGl6ZSA9IHVzZUxvY2FsaXplcigpO1xuICAgIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgY29uc3QgdGVybWluYXRvckxhYmVsSWQgPSB1c2VVbmlxdWVJZCgnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci1sYWJlbCcpO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBjb25zdCBmb2N1c2VkQWN0aXZpdHlLZXlSZWYgPSB1c2VWYWx1ZVJlZihmb2N1c2VkQWN0aXZpdHlLZXkpO1xuICAgIGNvbnN0IGhpZGVBbGxUaW1lc3RhbXBzID0gZ3JvdXBUaW1lc3RhbXAgPT09IGZhbHNlO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JUZXh0ID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfVEVSTUlOQVRPUl9URVhUJyk7XG4gICAgY29uc3QgdHJhbnNjcmlwdEFyaWFMYWJlbCA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfTEFCRUxfQUxUJyk7XG5cbiAgICBjb25zdCBjYWxsYmFja1JlZiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVmKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RFbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgfSxcbiAgICAgIFtyZWYsIHJvb3RFbGVtZW50UmVmXVxuICAgICk7XG5cbiAgICAvLyBGbGF0dGVuIHRoZSB0cmVlIGJhY2sgaW50byBhbiBhcnJheSB3aXRoIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gcmVuZGVyaW5nLlxuICAgIGNvbnN0IHJlbmRlcmluZ0VsZW1lbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJpbmdFbGVtZW50czogUmVuZGVyaW5nRWxlbWVudFtdID0gW107XG4gICAgICBjb25zdCB0b3BTaWRlQm90TnViID0gaXNaZXJvT3JQb3NpdGl2ZShidWJibGVOdWJPZmZzZXQpO1xuICAgICAgY29uc3QgdG9wU2lkZVVzZXJOdWIgPSBpc1plcm9PclBvc2l0aXZlKGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0KTtcblxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLmZvckVhY2goZW50cmllc1dpdGhTYW1lU2VuZGVyID0+IHtcbiAgICAgICAgY29uc3QgW1t7IGFjdGl2aXR5OiBmaXJzdEFjdGl2aXR5IH1dXSA9IGVudHJpZXNXaXRoU2FtZVNlbmRlcjtcbiAgICAgICAgY29uc3QgcmVuZGVyQXZhdGFyID0gY3JlYXRlQXZhdGFyUmVuZGVyZXIoeyBhY3Rpdml0eTogZmlyc3RBY3Rpdml0eSB9KTtcblxuICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXIuZm9yRWFjaCgoZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLCBpbmRleFdpdGhpblNlbmRlckdyb3VwKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlyc3RJblNlbmRlckdyb3VwID0gIWluZGV4V2l0aGluU2VuZGVyR3JvdXA7XG4gICAgICAgICAgY29uc3QgbGFzdEluU2VuZGVyR3JvdXAgPSBpbmRleFdpdGhpblNlbmRlckdyb3VwID09PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXIubGVuZ3RoIC0gMTtcblxuICAgICAgICAgIGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5mb3JFYWNoKCh7IGFjdGl2aXR5LCByZW5kZXJBY3Rpdml0eSB9LCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwKSA9PiB7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhlIHRpbWVzdGFtcCBhdCB0aGUgZW5kIG9mIHRoZSBzZW5kZXIgZ3JvdXAuIEJ1dCB3ZSBhbHdheXMgc2hvdyB0aGUgXCJTZW5kIGZhaWxlZCwgcmV0cnlcIiBwcm9tcHQuXG4gICAgICAgICAgICBjb25zdCBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPSAhaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cCA9XG4gICAgICAgICAgICAgIGluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPT09IGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQWN0aXZpdHlTdGF0dXMgPSBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIG5leHRWaXNpYmxlQWN0aXZpdHk6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0b3BTaWRlTnViID0gYWN0aXZpdHkuZnJvbT8ucm9sZSA9PT0gJ3VzZXInID8gdG9wU2lkZVVzZXJOdWIgOiB0b3BTaWRlQm90TnViO1xuXG4gICAgICAgICAgICBsZXQgc2hvd0NhbGxvdXQ6IGJvb2xlYW47XG5cbiAgICAgICAgICAgIC8vIERlcGVuZGluZyBvbiB0aGUgXCJzaG93QXZhdGFySW5Hcm91cFwiIHNldHRpbmcsIHRoZSBhdmF0YXIgd2lsbCByZW5kZXIgaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cbiAgICAgICAgICAgIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3NlbmRlcicpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJHcm91cCAmJiBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBsYXN0SW5TZW5kZXJHcm91cCAmJiBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3N0YXR1cycpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGxhc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmluZ0VsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICBhY3Rpdml0eSxcblxuICAgICAgICAgICAgICAvLyBBZnRlciB0aGUgZWxlbWVudCBpcyBtb3VudGVkLCBzZXQgaXQgdG8gYWN0aXZpdHlFbGVtZW50c1JlZi5cbiAgICAgICAgICAgICAgY2FsbGJhY2tSZWY6IGFjdGl2aXR5RWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHlFbGVtZW50XG4gICAgICAgICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LnNldChrZXksIGFjdGl2aXR5RWxlbWVudClcbiAgICAgICAgICAgICAgICAgIDogYWN0aXZpdHlFbGVtZW50TWFwUmVmLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgLy8gXCJoaWRlVGltZXN0YW1wXCIgaXMgYSByZW5kZXItdGltZSBwYXJhbWV0ZXIgZm9yIHJlbmRlckFjdGl2aXR5U3RhdHVzKCkuXG4gICAgICAgICAgICAgIC8vIElmIHRydWUsIGl0IHdpbGwgaGlkZSB0aGUgdGltZXN0YW1wLCBidXQgaXQgd2lsbCBjb250aW51ZSB0byBzaG93IHRoZVxuICAgICAgICAgICAgICAvLyByZXRyeSBwcm9tcHQuIEFuZCBzaG93IHRoZSBzY3JlZW4gcmVhZGVyIHZlcnNpb24gb2YgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgaGlkZVRpbWVzdGFtcDpcbiAgICAgICAgICAgICAgICBoaWRlQWxsVGltZXN0YW1wcyB8fCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwICE9PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHlTdGF0dXMsXG4gICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgc2hvd0NhbGxvdXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVuZGVyaW5nRWxlbWVudHM7XG4gICAgfSwgW1xuICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLFxuICAgICAgYnViYmxlRnJvbVVzZXJOdWJPZmZzZXQsXG4gICAgICBidWJibGVOdWJPZmZzZXQsXG4gICAgICBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgY3JlYXRlQXZhdGFyUmVuZGVyZXIsXG4gICAgICBnZXRLZXlCeUFjdGl2aXR5LFxuICAgICAgaGlkZUFsbFRpbWVzdGFtcHMsXG4gICAgICBzaG93QXZhdGFySW5Hcm91cFxuICAgIF0pO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUbzogKHNjcm9sbFRvcDogbnVtYmVyLCBvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG8oKTtcbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kOiAob3B0aW9ucz86IFNjcm9sbFRvT3B0aW9ucykgPT4gdm9pZCA9IHVzZVNjcm9sbFRvRW5kKCk7XG5cbiAgICBjb25zdCBzY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHBvc2l0aW9uOiBTY3JvbGxUb1Bvc2l0aW9uLCB7IGJlaGF2aW9yID0gJ2F1dG8nIH06IFNjcm9sbFRvT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IEZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVNjcm9sbFRvXCIgbXVzdCBiZSBhIFNjcm9sbFBvc2l0aW9uIG9iamVjdC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgYWN0aXZpdHlJRDogYWN0aXZpdHlJZCwgc2Nyb2xsVG9wIH0gPSBwb3NpdGlvbjtcblxuICAgICAgICBpZiAodHlwZW9mIHNjcm9sbFRvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aXZpdHlJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50XG4gICAgICAgICAgICAuZ2V0KGdldEtleUJ5QWN0aXZpdHlJZChhY3Rpdml0eUlkKSlcbiAgICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RFbGVtZW50UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcblxuICAgICAgICAgIGlmIChzY3JvbGxhYmxlRWxlbWVudCAmJiBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCkge1xuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudENsaWVudFJlY3QgPSBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgICAgICAvLyBFU0xpbnQgY29uZmxpY3Qgd2l0aCBUeXBlU2NyaXB0LiBUaGUgcmVzdWx0IG9mIGdldENsaWVudFJlY3RzKCkgaXMgbm90IGFuIEFycmF5IGJ1dCBET01SZWN0TGlzdCwgYW5kIGNhbm5vdCBiZSBkZXN0cnVjdHVyZWQuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCA9IHNjcm9sbGFibGVFbGVtZW50LmdldENsaWVudFJlY3RzKClbMF07XG5cbiAgICAgICAgICAgIC8vIElmIGVpdGhlciB0aGUgYWN0aXZpdHkgb3IgdGhlIHRyYW5zY3JpcHQgc2Nyb2xsYWJsZSBpcyBub3Qgb24gRE9NLCB3ZSB3aWxsIG5vdCBzY3JvbGwgdGhlIHZpZXcuXG4gICAgICAgICAgICBpZiAoYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0ICYmIHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCkge1xuICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogYWN0aXZpdHlIZWlnaHQsIHk6IGFjdGl2aXR5WSB9ID0gYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0O1xuICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogc2Nyb2xsYWJsZUhlaWdodCB9ID0gc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0O1xuICAgICAgICAgICAgICBjb25zdCBhY3Rpdml0eU9mZnNldFRvcCA9IGFjdGl2aXR5WSArIHNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBNYXRoLm1pbihhY3Rpdml0eU9mZnNldFRvcCwgYWN0aXZpdHlPZmZzZXRUb3AgLSBzY3JvbGxhYmxlSGVpZ2h0ICsgYWN0aXZpdHlIZWlnaHQpO1xuXG4gICAgICAgICAgICAgIHNjcm9sbFRvQm90dG9tU2Nyb2xsVG8oc2Nyb2xsVG9wLCB7IGJlaGF2aW9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGdldEtleUJ5QWN0aXZpdHlJZCwgcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvQm90dG9tU2Nyb2xsVG9dXG4gICAgKTtcblxuICAgIGNvbnN0IHNjcm9sbFRvRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kKHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pLFxuICAgICAgW3Njcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmRdXG4gICAgKTtcblxuICAgIGNvbnN0IHNjcm9sbFJlbGF0aXZlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZGlyZWN0aW9uOiAnZG93bicgfCAndXAnLCB7IGRpc3BsYWNlbWVudCB9OiB7IGRpc3BsYWNlbWVudD86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50OiByb290RWxlbWVudCB9ID0gcm9vdEVsZW1lbnRSZWY7XG5cbiAgICAgICAgaWYgKCFyb290RWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGU6IEhUTUxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcbiAgICAgICAgbGV0IG5leHRTY3JvbGxUb3A6IG51bWJlcjtcblxuICAgICAgICBpZiAodHlwZW9mIGRpc3BsYWNlbWVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICAgIG5leHRTY3JvbGxUb3AgPSBzY3JvbGxhYmxlLnNjcm9sbFRvcCArIChkaXJlY3Rpb24gPT09ICdkb3duJyA/IDEgOiAtMSkgKiBkaXNwbGFjZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICBuZXh0U2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5zY3JvbGxUb3AgKyAoZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTEpICogc2Nyb2xsYWJsZS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBzY3JvbGxUbyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY3JvbGxUb3A6IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbGFibGUuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsYWJsZS5vZmZzZXRIZWlnaHQsIG5leHRTY3JvbGxUb3ApKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBiZWhhdmlvcjogJ3Ntb290aCcgfVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIFtyb290RWxlbWVudFJlZiwgc2Nyb2xsVG9dXG4gICAgKTtcblxuICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGluc3RhbmNlcyBvZiA8QmFzaWNUcmFuc2NyaXB0PiBpbnNpZGUgdGhlIDxDb21wb3Nlcj4sIHdoZW4gdGhlIGRldmVsb3BlciBjYWxscyBgc2Nyb2xsWFhYYCwgd2UgbmVlZCB0byBjYWxsIGl0IG9uIGFsbCBpbnN0YW5jZXMuXG4gICAgLy8gV2UgY2FsbCBgdXNlUmVnaXN0ZXJTY3JvbGxYWFhgIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSBgdXNlU2Nyb2xsWFhYYCB3aWxsIG11bHRpcGxleCB0aGUgY2FsbCBpbnRvIGVhY2ggaW5zdGFuY2Ugb2YgPEJhc2ljVHJhbnNjcmlwdD4uXG4gICAgdXNlUmVnaXN0ZXJTY3JvbGxUbyhzY3JvbGxUbyk7XG4gICAgdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZChzY3JvbGxUb0VuZCk7XG4gICAgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZShzY3JvbGxSZWxhdGl2ZSk7XG5cbiAgICBjb25zdCBtYXJrQWN0aXZpdHlLZXlBc1JlYWQgPSB1c2VNYXJrQWN0aXZpdHlLZXlBc1JlYWQoKTtcblxuICAgIGNvbnN0IGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZDogKHNjcm9sbFBvc2l0aW9uOiBTY3JvbGxUb1Bvc2l0aW9uKSA9PiB2b2lkID1cbiAgICAgIHVzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24oKTtcblxuICAgIC8vIFRPRE86IFtQMl0gV2Ugc2hvdWxkIHVzZSBJbnRlcnNlY3Rpb25PYnNlcnZlciB0byB0cmFjayB3aGF0IGFjdGl2aXR5IGlzIGluIHRoZSBzY3JvbGxhYmxlLlxuICAgIC8vICAgICAgICAgICAgSG93ZXZlciwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSBvbiBJRTExLCB3ZSBuZWVkIHRvIG1ha2UgYSBsaW1pdGVkIHBvbHlmaWxsIGluIFJlYWN0IHN0eWxlLlxuICAgIGNvbnN0IGhhbmRsZVNjcm9sbFBvc2l0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgICAoeyBzY3JvbGxUb3AgfTogeyBzY3JvbGxUb3A6IG51bWJlciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogcm9vdEVsZW1lbnQgfSA9IHJvb3RFbGVtZW50UmVmO1xuXG4gICAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG5cbiAgICAgICAgLy8gXCJnZXRDbGllbnRSZWN0cygpXCIgaXMgbm90IHJldHVybmluZyBhbiBhcnJheSwgdGh1cywgaXQgaXMgbm90IGRlc3RydWN0dXJhYmxlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0ID0gc2Nyb2xsYWJsZUVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAvLyBJZiB0aGUgc2Nyb2xsYWJsZSBpcyBub3QgbW91bnRlZCwgd2UgY2Fubm90IG1lYXN1cmUgd2hpY2ggYWN0aXZpdHkgaXMgaW4gdmlldy4gVGh1cywgd2Ugd2lsbCBub3QgZmlyZSBhbnkgZXZlbnRzLlxuICAgICAgICBpZiAoIXNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgYm90dG9tOiBzY3JvbGxhYmxlQ2xpZW50Qm90dG9tIH0gPSBzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3Q7XG5cbiAgICAgICAgLy8gRmluZCB0aGUgYWN0aXZpdHkganVzdCBhYm92ZSBzY3JvbGwgdmlldyBib3R0b20uXG4gICAgICAgIC8vIElmIHRoZSBzY3JvbGwgdmlldyBpcyBhbHJlYWR5IG9uIHRvcCwgZ2V0IHRoZSBmaXJzdCBhY3Rpdml0eS5cbiAgICAgICAgY29uc3QgYWN0aXZpdHlFbGVtZW50cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwUmVmLmN1cnJlbnQuZW50cmllcygpKTtcbiAgICAgICAgY29uc3QgYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b206IHN0cmluZyB8IHVuZGVmaW5lZCA9IChcbiAgICAgICAgICBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3BcbiAgICAgICAgICAgID8gYWN0aXZpdHlFbGVtZW50c1xuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAvLyBBZGQgc3VicGl4ZWwgdG9sZXJhbmNlXG4gICAgICAgICAgICAgICAgLmZpbmQoKFssIGVsZW1lbnRdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBcImdldENsaWVudFJlY3RzKClcIiBpcyBub3QgcmV0dXJuaW5nIGFuIGFycmF5LCB0aHVzLCBpdCBpcyBub3QgZGVzdHJ1Y3R1cmFibGUuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYWN0aXZpdHkgaXMgbm90IGF0dGFjaGVkIHRvIERPTSB0cmVlLCB3ZSBzaG91bGQgbm90IGNvdW50IGl0IGFzIFwiYm90dG9tbW9zdCB2aXNpYmxlIGFjdGl2aXR5XCIsIGFzIGl0IGlzIG5vdCB2aXNpYmxlLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRDbGllbnRSZWN0ICYmIGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSA8IHNjcm9sbGFibGVDbGllbnRCb3R0b20gKyAxO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IGFjdGl2aXR5RWxlbWVudHNbMF1cbiAgICAgICAgKT8uWzBdO1xuXG4gICAgICAgIC8vIFdoZW4gdGhlIGVuZC11c2VyIHNsb3dseSBzY3JvbGxpbmcgdGhlIHZpZXcgZG93biwgd2Ugd2lsbCBtYXJrIGFjdGl2aXR5IGFzIHJlYWQgd2hlbiB0aGUgbWVzc2FnZSBmdWxseSBhcHBlYXIgb24gdGhlIHNjcmVlbi5cbiAgICAgICAgYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20gJiYgbWFya0FjdGl2aXR5S2V5QXNSZWFkKGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tKTtcblxuICAgICAgICBpZiAoZGlzcGF0Y2hTY3JvbGxQb3NpdGlvbldpdGhBY3Rpdml0eUlkKSB7XG4gICAgICAgICAgY29uc3QgYWN0aXZpdHkgPSBnZXRBY3Rpdml0eUJ5S2V5KGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tKTtcblxuICAgICAgICAgIGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCh7IC4uLihhY3Rpdml0eSA/IHsgYWN0aXZpdHlJRDogYWN0aXZpdHkuaWQgfSA6IHt9KSwgc2Nyb2xsVG9wIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBhY3Rpdml0eUVsZW1lbnRNYXBSZWYsXG4gICAgICAgIGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCxcbiAgICAgICAgZ2V0QWN0aXZpdHlCeUtleSxcbiAgICAgICAgbWFya0FjdGl2aXR5S2V5QXNSZWFkLFxuICAgICAgICByb290RWxlbWVudFJlZlxuICAgICAgXVxuICAgICk7XG5cbiAgICB1c2VPYnNlcnZlU2Nyb2xsUG9zaXRpb24oaGFuZGxlU2Nyb2xsUG9zaXRpb24pO1xuXG4gICAgY29uc3QgaGFuZGxlVHJhbnNjcmlwdEtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD4+KFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA9IHRhcmdldCA9PT0gdGVybWluYXRvclJlZi5jdXJyZW50O1xuICAgICAgICBjb25zdCBmcm9tVHJhbnNjcmlwdCA9IHRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldDtcblxuICAgICAgICBpZiAoIWZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgJiYgIWZyb21UcmFuc2NyaXB0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhhbmRsZWQgPSB0cnVlO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgIGZvY3VzUmVsYXRpdmVBY3Rpdml0eShmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yID8gMCA6IDEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA/IDAgOiAtMSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoSW5maW5pdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGNhcHR1cmluZyBwbGFpbiBFTlRFUi5cbiAgICAgICAgICAgIC8vIFdoZW4gc2NyZWVuIHJlYWRlciBpcyBub3QgcnVubmluZywgb3Igc2NyZWVuIHJlYWRlciBpcyBydW5uaW5nIG91dHNpZGUgb2Ygc2NhbiBtb2RlLCB0aGUgRU5URVIga2V5IHdpbGwgYmUgY2FwdHVyZWQgaGVyZS5cbiAgICAgICAgICAgIGlmICghZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvcikge1xuICAgICAgICAgICAgICBjb25zdCBib2R5OiBIVE1MRWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50XG4gICAgICAgICAgICAgICAgLmdldChmb2N1c2VkQWN0aXZpdHlLZXlSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1ib2R5Jyk7XG5cbiAgICAgICAgICAgICAgdGFiYmFibGVFbGVtZW50cyhib2R5KVswXT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgZm9jdXMoJ3NlbmRCb3hXaXRob3V0S2V5Ym9hcmQnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoLUluZmluaXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGhhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgLy8gSWYgYSBjdXN0b20gSFRNTCBjb250cm9sIHdhbnRzIHRvIGhhbmRsZSB1cC9kb3duIGFycm93LCB3ZSB3aWxsIHByZXZlbnQgdGhlbSBmcm9tIGxpc3RlbmluZyB0byB0aGlzIGV2ZW50IHRvIHByZXZlbnQgYnVncyBkdWUgdG8gaGFuZGxpbmcgYXJyb3cga2V5cyB0d2ljZS5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGZvY3VzLCBmb2N1c2VkQWN0aXZpdHlLZXlSZWYsIGZvY3VzUmVsYXRpdmVBY3Rpdml0eSwgdGVybWluYXRvclJlZl1cbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlVHJhbnNjcmlwdEtleURvd25DYXB0dXJlID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+PihcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyBhbHRLZXksIGN0cmxLZXksIGtleSwgbWV0YUtleSwgdGFyZ2V0IH0gPSBldmVudDtcblxuICAgICAgICBpZiAoYWx0S2V5IHx8IChjdHJsS2V5ICYmIGtleSAhPT0gJ3YnKSB8fCBtZXRhS2V5IHx8ICghaW5wdXR0YWJsZUtleShrZXkpICYmIGtleSAhPT0gJ0JhY2tzcGFjZScpKSB7XG4gICAgICAgICAgLy8gSWdub3JlIGlmIG9uZSBvZiB0aGUgdXRpbGl0eSBrZXkgKGV4Y2VwdCBTSElGVCkgaXMgcHJlc3NlZFxuICAgICAgICAgIC8vIEUuZy4gQ1RSTC1DIG9uIGEgbGluayBpbiBvbmUgb2YgdGhlIG1lc3NhZ2Ugc2hvdWxkIG5vdCBqdW1wIHRvIGNoYXQgYm94XG4gICAgICAgICAgLy8gRS5nLiBcIkFcIiBvciBcIkJhY2tzcGFjZVwiIHNob3VsZCBqdW1wIHRvIGNoYXQgYm94XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VuZCBrZXlzdHJva2VzIHRvIHNlbmQgYm94IGlmIHdlIGFyZSBmb2N1c2luZyBvbiB0aGUgdHJhbnNjcmlwdCBvciB0ZXJtaW5hdG9yLlxuICAgICAgICBpZiAodGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0IHx8IHRhcmdldCA9PT0gdGVybWluYXRvclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBmb2N1cygnc2VuZEJveCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2ZvY3VzXVxuICAgICk7XG5cbiAgICB1c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCh1c2VDYWxsYmFjaygoKSA9PiBmb2N1c0J5QWN0aXZpdHlLZXkodW5kZWZpbmVkKSwgW2ZvY3VzQnlBY3Rpdml0eUtleV0pKTtcblxuICAgIC8vIFdoZW4gdGhlIGZvY3VzaW5nIGFjdGl2aXR5IGhhcyBjaGFuZ2VkLCBkaXNwYXRjaCBhbiBldmVudCB0byBvYnNlcnZlcnMgb2YgXCJ1c2VPYnNlcnZlVHJhbnNjcmlwdEZvY3VzXCIuXG4gICAgY29uc3QgZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5ID0gdXNlRGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5KCk7XG5cbiAgICAvLyBEaXNwYXRjaCBhIFwidHJhbnNjcmlwdCBmb2N1c1wiIGV2ZW50IGJhc2VkIG9uIHVzZXIgc2VsZWN0aW9uLlxuICAgIC8vIFdlIHNob3VsZCBub3QgZGlzcGF0Y2ggXCJ0cmFuc2NyaXB0IGZvY3VzXCIgd2hlbiBhIG5ldyBhY3Rpdml0eSBjb21lLiBBbHRob3VnaCB0aGUgc2VsZWN0aW9uIGNoYW5nZSwgaXQgaXMgbm90IGluaXRpYXRlZCBmcm9tIHRoZSB1c2VyLlxuICAgIHVzZU1lbW8oXG4gICAgICAoKSA9PiBkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXkoZm9jdXNlZEV4cGxpY2l0bHkgPyBmb2N1c2VkQWN0aXZpdHlLZXkgOiB1bmRlZmluZWQpLFxuICAgICAgW2Rpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSwgZm9jdXNlZEFjdGl2aXR5S2V5LCBmb2N1c2VkRXhwbGljaXRseV1cbiAgICApO1xuXG4gICAgLy8gV2hlbiB0aGUgdHJhbnNjcmlwdCBpcyBiZWluZyBmb2N1c2VkIG9uLCB3ZSBzaG91bGQgZGlzcGF0Y2ggYSBcInRyYW5zY3JpcHRmb2N1c1wiIGV2ZW50LlxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlQ2FsbGJhY2soXG4gICAgICAvLyBXZSBjYWxsIFwiZm9jdXNCeUFjdGl2aXR5S2V5XCIgd2l0aCBhY3Rpdml0eSBrZXkgb2YgXCJ0cnVlXCIuXG4gICAgICAvLyBJdCBtZWFucywgdHJpZXMgdG8gZm9jdXMgb24gYW55dGhpbmcuXG4gICAgICAoeyBjdXJyZW50VGFyZ2V0LCB0YXJnZXQgfSkgPT4gdGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0ICYmIGZvY3VzQnlBY3Rpdml0eUtleSh0cnVlLCBmYWxzZSksXG4gICAgICBbZm9jdXNCeUFjdGl2aXR5S2V5XVxuICAgICk7XG5cbiAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IElFMTEuXG4gICAgLy8gV2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYW5kIGVtcHR5IHNwYWNlIChhLmsuYS4gZmlsbGVyKSBpbiBhbiBlbXB0eSB0cmFuc2NyaXB0LCBJRTExIHNheXMgdGhlIGZvY3VzIGlzIG9uIHRoZSA8ZGl2IGNsYXNzTmFtZT1cImZpbGxlclwiPixcbiAgICAvLyBkZXNwaXRlIHRoZSBmYWN0IHRoZXJlIGFyZSBubyBcInRhYkluZGV4XCIgYXR0cmlidXRlcyBzZXQgb24gdGhlIGZpbGxlci5cbiAgICAvLyBXZSBuZWVkIHRvIGFydGlmaWNpYWxseSBzZW5kIHRoZSBmb2N1cyBiYWNrIHRvIHRoZSB0cmFuc2NyaXB0LlxuICAgIGNvbnN0IGhhbmRsZUZvY3VzRmlsbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4gZm9jdXNCeUFjdGl2aXR5S2V5KHVuZGVmaW5lZCksIFtmb2N1c0J5QWN0aXZpdHlLZXldKTtcblxuICAgIC8vIFdoZW4gZm9jdXMgaW50byB0aGUgdHJhbnNjcmlwdCB1c2luZyBUQUIvU0hJRlQtVEFCLCBzY3JvbGwgdGhlIGZvY3VzZWQgYWN0aXZpdHkgaW50byB2aWV3LlxuICAgIHVzZU9ic2VydmVGb2N1c1Zpc2libGUoXG4gICAgICByb290RWxlbWVudFJlZixcbiAgICAgIHVzZUNhbGxiYWNrKCgpID0+IGZvY3VzQnlBY3Rpdml0eUtleSh1bmRlZmluZWQpLCBbZm9jdXNCeUFjdGl2aXR5S2V5XSlcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgLy8gQWx0aG91Z2ggQW5kcm9pZCBUYWxrQmFjayAxMi4xIGRvZXMgbm90IHN1cHBvcnQgYGFyaWEtYWN0aXZlZGVzY2VuZGFudGAsIHdoZW4gdXNlZCwgaXQgYmVjb21lIGJ1Z2d5IGFuZCB3aWxsIG5hcnJhdGUgY29udGVudCB0d2ljZS5cbiAgICAgICAgLy8gV2UgYXJlIGRpc2FibGluZyBgYXJpYS1hY3RpdmVkZXNjZW5kYW50YCBmb3IgQW5kcm9pZC4gU2VlIDxBY3Rpdml0eVJvdz4gZm9yIGRldGFpbHMuXG4gICAgICAgIGFyaWEtYWN0aXZlZGVzY2VuZGFudD17YW5kcm9pZCA/IHVuZGVmaW5lZCA6IGFjdGl2ZURlc2NlbmRhbnRJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dHJhbnNjcmlwdEFyaWFMYWJlbH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgICd3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0JyxcbiAgICAgICAgICBiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCArICcnLFxuICAgICAgICAgIHJvb3RDbGFzc05hbWUsXG4gICAgICAgICAgKGNsYXNzTmFtZSB8fCAnJykgKyAnJ1xuICAgICAgICApfVxuICAgICAgICBkaXI9e2RpcmVjdGlvbn1cbiAgICAgICAgb25Gb2N1cz17aGFuZGxlRm9jdXN9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlVHJhbnNjcmlwdEtleURvd259XG4gICAgICAgIG9uS2V5RG93bkNhcHR1cmU9e2hhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZX1cbiAgICAgICAgcmVmPXtjYWxsYmFja1JlZn1cbiAgICAgICAgLy8gXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiB3aWxsIG9ubHkgd29ya3Mgd2l0aCBhIG51bWJlciBvZiByb2xlcyBhbmQgaXQgbXVzdCBiZSBleHBsaWNpdGx5IHNldC5cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgLy8gRm9yIHVwL2Rvd24gYXJyb3cga2V5IG5hdmlnYXRpb24gYWNyb3NzIGFjdGl2aXRpZXMsIHRoaXMgY29tcG9uZW50IG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIHRhYiBzZXF1ZW5jZS5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiIHdpbGwgbm90IGJlIG5hcnJhdGVkIHdoZW4gdGhlIHVzZXIgcHJlc3MgdXAvZG93biBhcnJvdyBrZXlzLlxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS8ja2JkX2ZvY3VzX2FjdGl2ZWRlc2NlbmRhbnRcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICA+XG4gICAgICAgIDxMaXZlUmVnaW9uVHJhbnNjcmlwdCBhY3Rpdml0eUVsZW1lbnRNYXBSZWY9e2FjdGl2aXR5RWxlbWVudE1hcFJlZn0gLz5cbiAgICAgICAgey8qIFRPRE86IFtQMl0gRml4IEVTTGludCBlcnJvciBgbm8tdXNlLWJlZm9yZS1kZWZpbmVgICovfVxuICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL31cbiAgICAgICAgPEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGUgb25Gb2N1c0ZpbGxlcj17aGFuZGxlRm9jdXNGaWxsZXJ9IHRlcm1pbmF0b3JSZWY9e3Rlcm1pbmF0b3JSZWZ9PlxuICAgICAgICAgIHtyZW5kZXJpbmdFbGVtZW50cy5tYXAoXG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBhY3Rpdml0eSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tSZWYsXG4gICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXAsXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5U3RhdHVzLFxuICAgICAgICAgICAgICByZW5kZXJBdmF0YXIsXG4gICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICB9KSA9PiAoXG4gICAgICAgICAgICAgIDxBY3Rpdml0eVJvdyBhY3Rpdml0eT17YWN0aXZpdHl9IGtleT17a2V5fSByZWY9e2NhbGxiYWNrUmVmfT5cbiAgICAgICAgICAgICAgICB7cmVuZGVyQWN0aXZpdHkoe1xuICAgICAgICAgICAgICAgICAgaGlkZVRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyQXZhdGFyLFxuICAgICAgICAgICAgICAgICAgc2hvd0NhbGxvdXRcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9BY3Rpdml0eVJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L0ludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGU+XG4gICAgICAgIHshIXJlbmRlcmluZ0VsZW1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgPEZvY3VzUmVkaXJlY3RvciByZWRpcmVjdFJlZj17cm9vdEVsZW1lbnRSZWZ9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e3Rlcm1pbmF0b3JMYWJlbElkfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yXCJcbiAgICAgICAgICAgICAgcmVmPXt0ZXJtaW5hdG9yUmVmfVxuICAgICAgICAgICAgICByb2xlPVwibm90ZVwiXG4gICAgICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Rlcm1pbmF0b3ItYm9keVwiPlxuICAgICAgICAgICAgICAgIHsvKiBgaWRgIGlzIHJlcXVpcmVkIGZvciBgYXJpYS1sYWJlbGxlZGJ5YCAqL31cbiAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2ZvcmJpZC1kb20tcHJvcHMgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yLXRleHRcIiBpZD17dGVybWluYXRvckxhYmVsSWR9PlxuICAgICAgICAgICAgICAgICAge3Rlcm1pbmF0b3JUZXh0fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fZm9jdXMtaW5kaWNhdG9yXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG5cbkludGVybmFsVHJhbnNjcmlwdC5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogJydcbn07XG5cbkludGVybmFsVHJhbnNjcmlwdC5wcm9wVHlwZXMgPSB7XG4gIC8vIFByb3BUeXBlcyBjYW5ub3QgdmFsaWRhdGUgcHJlY2lzZWx5IHdpdGggaXRzIFR5cGVTY3JpcHQgY291bnRlcnBhcnQuXG4gIC8vIEB0cy1pZ25vcmVcbiAgYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcClcbiAgfSkuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG50eXBlIEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGVQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIG9uRm9jdXNGaWxsZXI6ICgpID0+IHZvaWQ7XG4gIHRlcm1pbmF0b3JSZWY6IE11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuLy8gU2VwYXJhdGluZyBoaWdoLWZyZXF1ZW5jeSBob29rcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuY29uc3QgSW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZTogRkM8SW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZVByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBvbkZvY3VzRmlsbGVyLFxuICB0ZXJtaW5hdG9yUmVmXG59KSA9PiB7XG4gIGNvbnN0IFt7IGFjdGl2aXRpZXM6IGFjdGl2aXRpZXNTdHlsZVNldCB9XSA9IHVzZVN0eWxlU2V0KCk7XG4gIGNvbnN0IFthbmltYXRpbmdUb0VuZF06IFtib29sZWFuXSA9IHVzZUFuaW1hdGluZ1RvRW5kKCk7XG4gIGNvbnN0IFthdEVuZF06IFtib29sZWFuXSA9IHVzZUF0RW5kKCk7XG4gIGNvbnN0IFssIHVucmVhZEFjdGl2aXR5S2V5c10gPSB1c2VBY3Rpdml0eUtleXNCeVJlYWQoKTtcbiAgY29uc3QgW3N0aWNreV06IFtib29sZWFuXSA9IHVzZVN0aWNreSgpO1xuICBjb25zdCBbc3R5bGVPcHRpb25zXSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICBjb25zdCBmb2N1c0J5QWN0aXZpdHlLZXkgPSB1c2VGb2N1c0J5QWN0aXZpdHlLZXkoKTtcbiAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgY29uc3QgbWFya0FjdGl2aXR5S2V5QXNSZWFkID0gdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkKCk7XG4gIGNvbnN0IG1hcmtBbGxBc0Fja25vd2xlZGdlZCA9IHVzZU1hcmtBbGxBc0Fja25vd2xlZGdlZCgpO1xuICBjb25zdCBzY3JvbGxUb0VuZDogKG9wdGlvbnM/OiBTY3JvbGxUb09wdGlvbnMpID0+IHZvaWQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gIGNvbnN0IHByZXZTdGlja3kgPSB1c2VQcmV2aW91cyhzdGlja3kpO1xuICBjb25zdCB0cmFuc2NyaXB0Um9sZURlc2NyaXB0aW9uID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfQVJJQV9ST0xFX0FMVCcpO1xuXG4gIGNvbnN0IHN0aWNreUNoYW5nZWRUb1RydWUgPSBwcmV2U3RpY2t5ICE9PSBzdGlja3kgJiYgc3RpY2t5O1xuXG4gIC8vIEFja25vd2xlZGdlZCBtZWFucyBlaXRoZXI6XG4gIC8vIDEuIFRoZSB1c2VyIHNlbnQgYSBtZXNzYWdlXG4gIC8vICAgIC0gV2UgZG9uJ3QgbmVlZCBhIGNvbmRpdGlvbiBoZXJlLiBXaGVuIFdlYiBDaGF0IHNlbmRzIHRoZSB1c2VyJ3MgbWVzc2FnZSwgaXQgd2lsbCBzY3JvbGwgdG8gYm90dG9tLCBhbmQgaXQgd2lsbCB0cmlnZ2VyIGNvbmRpdGlvbiAyIGJlbG93LlxuICAvLyAyLiBUaGUgdXNlciBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdHJhbnNjcmlwdCwgZnJvbSBhIG5vbi1ib3R0b20gc2Nyb2xsIHBvc2l0aW9uXG4gIC8vICAgIC0gSWYgdGhlIHRyYW5zY3JpcHQgaXMgYWxyZWFkeSBhdCB0aGUgYm90dG9tLCB0aGUgdXNlciBuZWVkcyB0byBzY3JvbGwgdXAgYW5kIHRoZW4gZ28gYmFjayBkb3duXG4gIC8vICAgIC0gV2hhdCBoYXBwZW5zIGlmIHdlIGFyZSByZWxheGluZyBcInNjcm9sbGVkIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblwiOlxuICAvLyAgICAgIDEuIFRoZSBjb25kaXRpb24gd2lsbCBiZWNvbWUgc29sZWx5IFwiYXQgdGhlIGJvdHRvbSBvZiB0aGUgdHJhbnNjcmlwdFwiXG4gIC8vICAgICAgMi4gQXV0by1zY3JvbGwgd2lsbCBhbHdheXMgc2Nyb2xsIHRoZSB0cmFuc2NyaXB0IHRvIHRoZSBib3R0b21cbiAgLy8gICAgICAzLiBXZWIgQ2hhdCB3aWxsIGFsd2F5cyBhY2tub3dsZWRnZSBhbGwgYWN0aXZpdGllcyBhcyBpdCBpcyBhdCB0aGUgYm90dG9tXG4gIC8vICAgICAgNC4gQWNrbm93bGVkZ2UgZmxhZyBiZWNvbWUgdXNlbGVzc1xuICAvLyAgICAgIDUuIFRoZXJlZm9yZSwgZXZlbiB0aGUgZGV2ZWxvcGVyIHNldCBcInBhdXNlIGFmdGVyIDMgYWN0aXZpdGllc1wiLCBpZiBhY3Rpdml0aWVzIGFyZSBjb21pbmcgaW4gYXQgYSBzbG93IHBhY2UgKG5vdCBiYXRjaGVkIGluIGEgc2luZ2xlIHJlbmRlcilcbiAgLy8gICAgICAgICBXZWIgQ2hhdCB3aWxsIGtlZXAgc2Nyb2xsaW5nIGFuZCBub3Qgc25hcHBlZC9wYXVzZWRcblxuICAvLyBOb3RlOiBXaGVuIFdlYiBDaGF0IGlzIGxvYWRlZCwgdGhlcmUgYXJlIG5vIGFjdGl2aXRpZXMgYWNrbm93bGVkZ2VkLiBXZSBuZWVkIHRvIGFzc3VtZSBhbGwgYXJyaXZpbmcgYWN0aXZpdGllcyBhcmUgYWNrbm93bGVkZ2VkIHVudGlsIGVuZC11c2VyIHNlbmRzIHRoZWlyIGZpcnN0IGFjdGl2aXR5LlxuICAvLyAgICAgICBBY3Rpdml0aWVzIGxvYWRlZCBpbml0aWFsbHkgY291bGQgYmUgZnJvbSBjb252ZXJzYXRpb24gaGlzdG9yeS4gV2l0aG91dCBhc3N1bWluZyBhY2tub3dsZWRnZW1lbnQsIFdlYiBDaGF0IHdpbGwgbm90IHNjcm9sbCBpbml0aWFsbHkgKGFzIGV2ZXJ5dGhpbmcgaXMgbm90IGFja25vd2xlZGdlZCkuXG4gIC8vICAgICAgIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGUgY2hhdCBhZGFwdGVyIHNob3VsZCBsZXQgV2ViIENoYXQga25vdyBpZiB0aGUgYWN0aXZpdHkgaXMgbG9hZGVkIGZyb20gaGlzdG9yeSBvciBub3QuXG5cbiAgLy8gVE9ETzogW1AyXSAjMzY3MCBNb3ZlIHRoZSBcImNvbnZlcnNhdGlvbiBoaXN0b3J5IGFja25vd2xlZGdlbWVudFwiIGxvZ2ljIG1lbnRpb25lZCBhYm92ZSB0byBwb2x5ZmlsbCBvZiBjaGF0IGFkYXB0ZXJzLlxuICAvLyAgICAgICAxLiBDaGF0IGFkYXB0ZXIgc2hvdWxkIHNlbmQgXCJhY2tub3dsZWRnZWRcIiBhcyBwYXJ0IG9mIFwiY2hhbm5lbERhdGFcIlxuICAvLyAgICAgICAyLiBJZiBcImFja25vd2xlZGdlZFwiIGlzIFwidW5kZWZpbmVkXCIsIHdlIHNldCBpdCB0bzpcbiAgLy8gICAgICAgICAgYS4gdHJ1ZSwgaWYgdGhlcmUgYXJlIG5vIGVncmVzcyBhY3Rpdml0aWVzIHlldFxuICAvLyAgICAgICAgICBiLiBPdGhlcndpc2UsIGZhbHNlXG5cbiAgdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgc3RpY2t5Q2hhbmdlZFRvVHJ1ZSAmJlxuICAgICAgLy8gVE9ETzogW1AyXSBCb3RoIGBtYXJrQWN0aXZpdHlLZXlBc1JlYWRgIGFuZCBgbWFya0FsbEFzQWNrbm93bGVkZ2VkYCBob29rIGFyZSBzZXR0ZXJzIG9mIHVzZVN0YXRlLlxuICAgICAgLy8gICAgICAgVGhpcyBtZWFucywgaW4gYSByZW5kZXIgbG9vcCwgd2Ugd2lsbCBiZSBjYWxsaW5nIHNldHRlciBhbmQgd2lsbCBjYXVzZSBhbm90aGVyIHJlLXJlbmRlci5cbiAgICAgIC8vICAgICAgIFRoaXMgaXMgbm90IHRyaXZpYWwgYnV0IHdlIHNob3VsZCB0aGluayBpZiB0aGVyZSBpcyBhIHdheSB0byBhdm9pZCB0aGlzLlxuICAgICAgbWFya0FsbEFzQWNrbm93bGVkZ2VkKCksXG4gICAgW21hcmtBbGxBc0Fja25vd2xlZGdlZCwgc3RpY2t5Q2hhbmdlZFRvVHJ1ZV1cbiAgKTtcblxuICBjb25zdCBbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyXSA9IHVzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcih7IGZsYXQ6IHRydWUgfSk7XG4gIGNvbnN0IGdldEtleUJ5QWN0aXZpdHkgPSB1c2VHZXRLZXlCeUFjdGl2aXR5KCk7XG5cbiAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzOiBzdHJpbmdbXSA9IHVzZU1lbW88c3RyaW5nW10+KFxuICAgICgpID0+IGZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlci5tYXAoKHsgYWN0aXZpdHkgfSkgPT4gZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSkpLFxuICAgIFtmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIsIGdldEtleUJ5QWN0aXZpdHldXG4gICk7XG5cbiAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYocmVuZGVyaW5nQWN0aXZpdHlLZXlzKTtcblxuICAvLyBUbyBwcmV2ZW50IGZsYXNoeSBidXR0b24sIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYW5vdGhlciByZW5kZXIgbG9vcCB0byB1cGRhdGUgdGhlIGBbcmVhZEFjdGl2aXR5S2V5cywgdW5yZWFkQWN0aXZpdHlLZXlzXWAgc3RhdGUuXG4gIC8vIEluc3RlYWQsIHdlIGFyZSBidWlsZGluZyB0aGUgbmV4dCBvbmUgaW4gdGhpcyBgdXNlTWVtb2AgY2FsbC5cbiAgY29uc3QgbmV4dFVucmVhZEFjdGl2aXR5S2V5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFRoaXMgY29kZSBuZWVkIHRvIGJlIGNhcmVmdWwgcmV2aWV3ZWQgYXMgaXQgd2lsbCBjYXVzZSBhbm90aGVyIHJlbmRlci4gVGhlIGNvZGUgc2hvdWxkIGJlIGNvbnZlcmdpbmcuXG4gICAgLy8gQWZ0ZXIgd2UgY2FsbCBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCwgZXZlcnl0aGluZyB3aWxsIGJlIHJlYWQgYW5kIG5vdGhpbmcgd2lsbCBiZSB1bnJlYWQuXG4gICAgLy8gVGhhdCBtZWFucywgaW4gbmV4dCByZW5kZXIsIGB1bnJlYWRBY3Rpdml0eUtleXNgIHdpbGwgYmUgZW1wdGllZCBhbmQgdGhlIGBtYXJrQWN0aXZpdHlLZXlBc1JlYWRgIHdpbGwgbm90IGdldCBjYWxsZWQgYWdhaW4uXG4gICAgaWYgKHN0aWNreSAmJiB1bnJlYWRBY3Rpdml0eUtleXMubGVuZ3RoKSB7XG4gICAgICBtYXJrQWN0aXZpdHlLZXlBc1JlYWQodW5yZWFkQWN0aXZpdHlLZXlzW3VucmVhZEFjdGl2aXR5S2V5cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5yZWFkQWN0aXZpdHlLZXlzO1xuICB9LCBbbWFya0FjdGl2aXR5S2V5QXNSZWFkLCBzdGlja3ksIHVucmVhZEFjdGl2aXR5S2V5c10pO1xuXG4gIGNvbnN0IG5leHRVbnJlYWRBY3Rpdml0eUtleXNSZWYgPSB1c2VWYWx1ZVJlZihuZXh0VW5yZWFkQWN0aXZpdHlLZXlzKTtcblxuICAvLyBJZiB3ZSBhcmUgcmVuZGVyaW5nIGFueXRoaW5nIHRoYXQgaXMgdW5yZWFkLCB3ZSBzaG91bGQgc2hvdyB0aGUgXCJOZXcgbWVzc2FnZXNcIiBidXR0b24uXG4gIC8vIE5vdCBldmVyeXRoaW5nIGluIHRoZSBgdW5yZWFkQWN0aXZpdHlLZXlzYCBhcmUgcmVuZGVyZWQsIHNheSwgYm90IHR5cGluZyBpbmRpY2F0b3IuXG4gIC8vIFdlIHNob3VsZCBub3Qgc2hvdyB0aGUgXCJOZXcgbWVzc2FnZXNcIiBidXR0b24gZm9yIGJvdCB0eXBpbmcgaW5kaWNhdG9yIGFzIGl0IHdpbGwgY29uZnVzZSB0aGUgdXNlci5cbiAgY29uc3QgdW5yZWFkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzLnNvbWUoa2V5ID0+IHJlbmRlcmluZ0FjdGl2aXR5S2V5cy5pbmNsdWRlcyhrZXkpKSxcbiAgICBbcmVuZGVyaW5nQWN0aXZpdHlLZXlzLCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2Nyb2xsVG9FbmQoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG5cbiAgICBjb25zdCB7IGN1cnJlbnQ6IHJlbmRlcmluZ0FjdGl2aXR5S2V5cyB9ID0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmO1xuXG4gICAgLy8gQWZ0ZXIgdGhlIFwiTmV3IG1lc3NhZ2VcIiBidXR0b24gaXMgY2xpY2tlZCwgZm9jdXMgb24gdGhlIGZpcnN0IHVucmVhZCBhY3Rpdml0eSB3aGljaCB3aWxsIGJlIHJlbmRlcmVkLlxuICAgIGNvbnN0IGZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkgPSBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmLmN1cnJlbnQuZmluZChrZXkgPT5cbiAgICAgIHJlbmRlcmluZ0FjdGl2aXR5S2V5cy5pbmNsdWRlcyhrZXkpXG4gICAgKTtcblxuICAgIGlmIChmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5KSB7XG4gICAgICBmb2N1c0J5QWN0aXZpdHlLZXkoZmlyc3RVbnJlYWRSZW5kZXJpbmdBY3Rpdml0eUtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHVucmVhZCBhY3Rpdml0eSwgc2VuZCB0aGUgZm9jdXMgdG8gdGhlIHRlcm1pbmF0b3IgYmxvY2suXG4gICAgICB0ZXJtaW5hdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbZm9jdXNCeUFjdGl2aXR5S2V5LCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmLCByZW5kZXJpbmdBY3Rpdml0eUtleXNSZWYsIHNjcm9sbFRvRW5kLCB0ZXJtaW5hdG9yUmVmXSk7XG5cbiAgY29uc3QgcmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24gPSB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyKCkoe1xuICAgIGF0RW5kOiBhbmltYXRpbmdUb0VuZCB8fCBhdEVuZCB8fCBzdGlja3ksXG4gICAgc3R5bGVPcHRpb25zLFxuICAgIHVucmVhZFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHtyZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbiAmJiByZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbih7IG9uQ2xpY2s6IGhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2sgfSl9XG4gICAgICB7ISFSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbikgJiYgPEZvY3VzUmVkaXJlY3RvciByZWRpcmVjdFJlZj17dGVybWluYXRvclJlZn0gLz59XG4gICAgICA8UmVhY3RTY3JvbGxUb0JvdHRvbVBhbmVsIGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGVcIj5cbiAgICAgICAgPGRpdiBhcmlhLWhpZGRlbj17dHJ1ZX0gY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fZmlsbGVyXCIgb25Gb2N1cz17b25Gb2N1c0ZpbGxlcn0gLz5cbiAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICBhcmlhLXJvbGVkZXNjcmlwdGlvbj17dHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbn1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYWN0aXZpdGllc1N0eWxlU2V0ICsgJycsICd3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190cmFuc2NyaXB0Jyl9XG4gICAgICAgICAgcm9sZT1cImZlZWRcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxCYXNpY1R5cGluZ0luZGljYXRvciAvPlxuICAgICAgPC9SZWFjdFNjcm9sbFRvQm90dG9tUGFuZWw+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn07XG5cbkludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGUucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBvbkZvY3VzRmlsbGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0ZXJtaW5hdG9yUmVmOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbn07XG5cbnR5cGUgU2Nyb2xsZXIgPSAoeyBvZmZzZXRIZWlnaHQsIHNjcm9sbFRvcCB9OiB7IG9mZnNldEhlaWdodDogbnVtYmVyOyBzY3JvbGxUb3A6IG51bWJlciB9KSA9PiBudW1iZXI7XG5cbi8vIFwic2Nyb2xsZXJcIiBpcyB0aGUgYXV0by1zY3JvbGwgbGltaXRlciwgYS5rLmEuIGF1dG8gc2Nyb2xsIHNuYXAuXG5jb25zdCB1c2VTY3JvbGxlciA9IChhY3Rpdml0eUVsZW1lbnRNYXBSZWY6IE11dGFibGVSZWZPYmplY3Q8QWN0aXZpdHlFbGVtZW50TWFwPik6IFNjcm9sbGVyID0+IHtcbiAgY29uc3QgW2FjdGl2aXR5S2V5c10gPSB1c2VBY3Rpdml0eUtleXMoKTtcbiAgY29uc3QgW2xhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleV0gPSB1c2VMYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkoKTtcbiAgY29uc3QgW3N0eWxlT3B0aW9uc10gPSB1c2VTdHlsZU9wdGlvbnMoKTtcblxuICBjb25zdCBhY3Rpdml0eUtleXNSZWYgPSB1c2VWYWx1ZVJlZihhY3Rpdml0eUtleXMpO1xuICBjb25zdCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYgPSB1c2VWYWx1ZVJlZihsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuICBjb25zdCBzdHlsZU9wdGlvbnNSZWYgPSB1c2VWYWx1ZVJlZihzdHlsZU9wdGlvbnMpO1xuXG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAoeyBvZmZzZXRIZWlnaHQsIHNjcm9sbFRvcCB9KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnQ6IHtcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHksXG4gICAgICAgICAgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0LFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25QYWdlLFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH0gPSBzdHlsZU9wdGlvbnNSZWY7XG5cbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkgPVxuICAgICAgICB0eXBlb2YgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMCwgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5KVxuICAgICAgICAgIDogYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5XG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25QYWdlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYXV0b1Njcm9sbFNuYXBPblBhZ2UpKVxuICAgICAgICAgIDogYXV0b1Njcm9sbFNuYXBPblBhZ2VcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDA7XG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCA9PT0gJ251bWJlcicgPyBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0ID09PSAnbnVtYmVyJyA/IGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IDogMDtcblxuICAgICAgaWYgKHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkgfHwgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogYWN0aXZpdHlFbGVtZW50TWFwIH0gPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWY7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogYWN0aXZpdHlLZXlzIH0gPSBhY3Rpdml0eUtleXNSZWY7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IH0gPSBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWY7XG4gICAgICAgIGNvbnN0IHZhbHVlczogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICBjb25zdCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCA9IGFjdGl2aXR5S2V5cy5pbmRleE9mKGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSk7XG5cbiAgICAgICAgaWYgKH5sYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCkge1xuICAgICAgICAgIC8vIFRoZSBhY3Rpdml0eSB0aGF0IHdlIGFja25vd2xlZGdlZCBjb3VsZCBiZSBub3QgcmVuZGVyZWQsIHN1Y2ggYXMgcG9zdCBiYWNrIGFjdGl2aXR5LlxuICAgICAgICAgIC8vIFdoZW4gY2FsY3VsYXRpbmcgc2Nyb2xsIHNuYXAsIHdlIGNhbiBvbmx5IGJhc2Ugb24gdGhlIGZpcnN0IHVuYWNrbm93bGVkZ2VkLWFuZC1yZW5kZXJpbmcgYWN0aXZpdHkuXG4gICAgICAgICAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzID0gQXJyYXkuZnJvbShhY3Rpdml0eUVsZW1lbnRNYXAua2V5cygpKTtcbiAgICAgICAgICBsZXQgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4ID0gLTE7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGFja25vd2xlZGdlZEFjdGl2aXR5S2V5IG9mIGFjdGl2aXR5S2V5cy5zbGljZSgwLCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCArIDEpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5kZXhPZihhY2tub3dsZWRnZWRBY3Rpdml0eUtleSk7XG5cbiAgICAgICAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSByZW5kZXJpbmdBY3Rpdml0eUtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh+Zmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eUVsZW1lbnRzID0gQXJyYXkuZnJvbShhY3Rpdml0eUVsZW1lbnRNYXAudmFsdWVzKCkpO1xuXG4gICAgICAgICAgICBpZiAocGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSkge1xuICAgICAgICAgICAgICAvLyBHZXRzIHRoZSBhY3Rpdml0eSBlbGVtZW50IHdoaWNoIHdlIHNob3VsZCBzbmFwIHRvLlxuICAgICAgICAgICAgICBjb25zdCBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgYWN0aXZpdHlFbGVtZW50c1tmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXggKyBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IC0gMV07XG5cbiAgICAgICAgICAgICAgaWYgKG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCdcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgPVxuICAgICAgICAgICAgICAgICAgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQub2Zmc2V0VG9wICsgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgICAgIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Lm9mZnNldEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCArXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudHNbK2ZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleF07XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50J1xuICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgPVxuICAgICAgICAgICAgICAgIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQub2Zmc2V0VG9wICsgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Lm9mZnNldFRvcDtcblxuICAgICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgLVxuICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wIC1cbiAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCAqICgxIC0gcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSArXG4gICAgICAgICAgICAgICAgICBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2VPZmZzZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4udmFsdWVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH0sXG4gICAgW2FjdGl2aXR5RWxlbWVudE1hcFJlZiwgYWN0aXZpdHlLZXlzUmVmLCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYsIHN0eWxlT3B0aW9uc1JlZl1cbiAgKTtcbn07XG5cbnR5cGUgQmFzaWNUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmNvbnN0IEJhc2ljVHJhbnNjcmlwdDogVkZDPEJhc2ljVHJhbnNjcmlwdFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IGFjdGl2aXR5RWxlbWVudE1hcFJlZiA9IHVzZVJlZjxBY3Rpdml0eUVsZW1lbnRNYXA+KG5ldyBNYXAoKSk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICBjb25zdCBzY3JvbGxlciA9IHVzZVNjcm9sbGVyKGFjdGl2aXR5RWxlbWVudE1hcFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VHJhbnNjcmlwdEZvY3VzQ29tcG9zZXIgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgPFJlYWN0U2Nyb2xsVG9Cb3R0b21Db21wb3NlciBzY3JvbGxlcj17c2Nyb2xsZXJ9PlxuICAgICAgICA8S2V5Ym9hcmRIZWxwIC8+XG4gICAgICAgIDxJbnRlcm5hbFRyYW5zY3JpcHQgYWN0aXZpdHlFbGVtZW50TWFwUmVmPXthY3Rpdml0eUVsZW1lbnRNYXBSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSByZWY9e2NvbnRhaW5lclJlZn0gLz5cbiAgICAgIDwvUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyPlxuICAgIDwvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXI+XG4gICk7XG59O1xuXG5CYXNpY1RyYW5zY3JpcHQuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6ICcnXG59O1xuXG5CYXNpY1RyYW5zY3JpcHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2ljVHJhbnNjcmlwdDtcbiJdfQ==
package/lib/index.js CHANGED
@@ -143,7 +143,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
143
143
  var hooks = _objectSpread(_objectSpread({}, _botframeworkWebchatApi.hooks), componentHooks);
144
144
 
145
145
  exports.hooks = hooks;
146
- var version = "4.15.0";
146
+ var version = "4.15.1";
147
147
  exports.version = version;
148
148
  var Components = {
149
149
  BasicWebChat: _BasicWebChat.default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "botframework-webchat-component",
3
- "version": "4.15.0",
3
+ "version": "4.15.1",
4
4
  "description": "React component of botframework-webchat",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -48,8 +48,8 @@
48
48
  "dependencies": {
49
49
  "@emotion/css": "11.1.3",
50
50
  "base64-js": "1.5.1",
51
- "botframework-webchat-api": "4.15.0",
52
- "botframework-webchat-core": "4.15.0",
51
+ "botframework-webchat-api": "4.15.1",
52
+ "botframework-webchat-core": "4.15.1",
53
53
  "classnames": "2.3.1",
54
54
  "compute-scroll-into-view": "1.0.17",
55
55
  "event-target-shim": "6.0.2",
@@ -267,16 +267,22 @@ const InternalTranscript = forwardRef<HTMLDivElement, InternalTranscriptProps>(
267
267
  if (scrollableElement && activityBoundingBoxElement) {
268
268
  // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
269
269
  // eslint-disable-next-line prefer-destructuring
270
- const { height: activityHeight, y: activityY } = activityBoundingBoxElement.getClientRects()[0];
270
+ const activityBoundingBoxElementClientRect = activityBoundingBoxElement.getClientRects()[0];
271
271
 
272
272
  // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
273
273
  // eslint-disable-next-line prefer-destructuring
274
- const { height: scrollableHeight } = scrollableElement.getClientRects()[0];
275
- const activityOffsetTop = activityY + scrollableElement.scrollTop;
274
+ const scrollableElementClientRect = scrollableElement.getClientRects()[0];
276
275
 
277
- const scrollTop = Math.min(activityOffsetTop, activityOffsetTop - scrollableHeight + activityHeight);
276
+ // If either the activity or the transcript scrollable is not on DOM, we will not scroll the view.
277
+ if (activityBoundingBoxElementClientRect && scrollableElementClientRect) {
278
+ const { height: activityHeight, y: activityY } = activityBoundingBoxElementClientRect;
279
+ const { height: scrollableHeight } = scrollableElementClientRect;
280
+ const activityOffsetTop = activityY + scrollableElement.scrollTop;
278
281
 
279
- scrollToBottomScrollTo(scrollTop, { behavior });
282
+ const scrollTop = Math.min(activityOffsetTop, activityOffsetTop - scrollableHeight + activityHeight);
283
+
284
+ scrollToBottomScrollTo(scrollTop, { behavior });
285
+ }
280
286
  }
281
287
  }
282
288
  },
@@ -342,7 +348,14 @@ const InternalTranscript = forwardRef<HTMLDivElement, InternalTranscriptProps>(
342
348
 
343
349
  // "getClientRects()" is not returning an array, thus, it is not destructurable.
344
350
  // eslint-disable-next-line prefer-destructuring
345
- const { bottom: scrollableClientBottom } = scrollableElement.getClientRects()[0];
351
+ const scrollableElementClientRect = scrollableElement.getClientRects()[0];
352
+
353
+ // If the scrollable is not mounted, we cannot measure which activity is in view. Thus, we will not fire any events.
354
+ if (!scrollableElementClientRect) {
355
+ return;
356
+ }
357
+
358
+ const { bottom: scrollableClientBottom } = scrollableElementClientRect;
346
359
 
347
360
  // Find the activity just above scroll view bottom.
348
361
  // If the scroll view is already on top, get the first activity.
@@ -352,7 +365,14 @@ const InternalTranscript = forwardRef<HTMLDivElement, InternalTranscriptProps>(
352
365
  ? activityElements
353
366
  .reverse()
354
367
  // Add subpixel tolerance
355
- .find(([, element]) => element.getClientRects()[0].bottom < scrollableClientBottom + 1)
368
+ .find(([, element]) => {
369
+ // "getClientRects()" is not returning an array, thus, it is not destructurable.
370
+ // eslint-disable-next-line prefer-destructuring
371
+ const elementClientRect = element.getClientRects()[0];
372
+
373
+ // If the activity is not attached to DOM tree, we should not count it as "bottommost visible activity", as it is not visible.
374
+ return elementClientRect && elementClientRect.bottom < scrollableClientBottom + 1;
375
+ })
356
376
  : activityElements[0]
357
377
  )?.[0];
358
378