@messaia/cdk 18.1.0-rc24 → 18.1.0-rc26

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.
@@ -189,6 +189,14 @@ export class BaseComponent {
189
189
  * Subscriptions for expansion panel changes, managed to avoid memory leaks.
190
190
  */
191
191
  matExpansionPanelSubscriptions = [];
192
+ /**
193
+ * Create a beep audio object and load a sound file from a data URL.
194
+ */
195
+ beepAudio = new Audio("data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");
196
+ /**
197
+ * Create a warn audio object and load a sound file from a data URL.
198
+ */
199
+ warnAudio = new Audio("data:audio/mp3;base64,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");
192
200
  /**
193
201
  * Initializes services and application settings, sets up context helpers,
194
202
  * and initializes the editor with default configurations.
@@ -579,9 +587,10 @@ export class BaseComponent {
579
587
  * @param type The type of the message (Success, Warning, or Error). Defaults to Success.
580
588
  * @param duration The duration (in milliseconds) to show the message. Defaults to 3000ms.
581
589
  * @param actionLabel The label for the action button. Defaults to 'OK'.
590
+ * @param playSound A flag indicating whether to play a warning sound when the message type is Warning. Defaults to false.
582
591
  * @returns An observable that emits when the action button is clicked.
583
592
  */
584
- showMessage(message, type = MessageType.Success, duration = 3000, actionLabel = $localize `:@@ok:OK`) {
593
+ showMessage(message, type = MessageType.Success, duration = 3000, actionLabel = $localize `:@@ok:OK`, playSound = false) {
585
594
  /* Default snack bar class to 'primary' (for success messages) */
586
595
  let snackBarClass = 'primary';
587
596
  /* Determine the appropriate CSS class based on the message type */
@@ -591,9 +600,17 @@ export class BaseComponent {
591
600
  break;
592
601
  case MessageType.Warning:
593
602
  snackBarClass = 'warn';
603
+ /* Play the warning sound if the playSound flag is true */
604
+ if (playSound) {
605
+ this.playWarnSound();
606
+ }
594
607
  break;
595
608
  case MessageType.Error:
596
609
  snackBarClass = 'error';
610
+ /* Play the warning sound if the playSound flag is true */
611
+ if (playSound) {
612
+ this.playWarnSound();
613
+ }
597
614
  break;
598
615
  default:
599
616
  break;
@@ -709,6 +726,50 @@ export class BaseComponent {
709
726
  relativeTo: this.route
710
727
  });
711
728
  }
729
+ /**
730
+ * Plays a short beep sound using an embedded audio file in base64 format.
731
+ * The method loads and plays the audio file immediately upon calling.
732
+ */
733
+ playBeepSound() {
734
+ try {
735
+ this.beepAudio.play();
736
+ }
737
+ catch (error) { }
738
+ }
739
+ /**
740
+ * Plays a short warning sound using an embedded audio file in base64 format.
741
+ * The method loads and plays the audio file immediately upon calling.
742
+ */
743
+ playWarnSound() {
744
+ try {
745
+ this.warnAudio.play();
746
+ }
747
+ catch (error) { }
748
+ }
749
+ /**
750
+ * Logs a message to the console if debug mode is enabled
751
+ * @param message The message to log
752
+ * @param optionalParams Optional parameters for the log
753
+ */
754
+ log(message, ...optionalParams) {
755
+ /* Check if debug mode is enabled */
756
+ if (this.debug) {
757
+ /* Log the message and optional parameters to the console */
758
+ console.log(message, optionalParams);
759
+ }
760
+ }
761
+ /**
762
+ * Logs a warning message to the console if debug mode is enabled
763
+ * @param message The warning message to log
764
+ * @param optionalParams Optional parameters for the warning
765
+ */
766
+ warn(message, ...optionalParams) {
767
+ /* Check if debug mode is enabled */
768
+ if (this.debug) {
769
+ /* Log the warning message and optional parameters to the console */
770
+ console.warn(message, optionalParams);
771
+ }
772
+ }
712
773
  /**
713
774
  * Convert an object to HttpHeaders.
714
775
  *
@@ -767,30 +828,6 @@ export class BaseComponent {
767
828
  return of(result);
768
829
  };
769
830
  }
770
- /**
771
- * Logs a message to the console if debug mode is enabled
772
- * @param message The message to log
773
- * @param optionalParams Optional parameters for the log
774
- */
775
- log(message, ...optionalParams) {
776
- /* Check if debug mode is enabled */
777
- if (this.debug) {
778
- /* Log the message and optional parameters to the console */
779
- console.log(message, optionalParams);
780
- }
781
- }
782
- /**
783
- * Logs a warning message to the console if debug mode is enabled
784
- * @param message The warning message to log
785
- * @param optionalParams Optional parameters for the warning
786
- */
787
- warn(message, ...optionalParams) {
788
- /* Check if debug mode is enabled */
789
- if (this.debug) {
790
- /* Log the warning message and optional parameters to the console */
791
- console.warn(message, optionalParams);
792
- }
793
- }
794
831
  /**
795
832
  * Cleans the object by removing properties that are null, undefined, or empty strings
796
833
  * @param obj The object to clean
@@ -860,4 +897,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
860
897
  type: ViewChildren,
861
898
  args: [MatExpansionPanel]
862
899
  }] } });
863
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9iYXNlL2NvbXBvbmVudHMvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFRLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SixPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBeUMsTUFBTSxFQUErQixNQUFNLGlCQUFpQixDQUFDO0FBQzdILE9BQU8sRUFBNEIsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0Is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O1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGNBQWMsR0FBRyxHQUFZLEVBQUU7SUFDeEMsa0VBQWtFO0lBQ2xFLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdkQ7O09BRUc7SUFDSCxXQUFXO1FBQ1YsMERBQTBEO1FBQzFELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDOzBIQXI3Qm9CLGFBQWE7OEdBQWIsYUFBYSx1TEFpTXBCLGlCQUFpQiwyQkFBVSxVQUFVLDZEQU1yQyxpQkFBaUI7OzJGQXZNVixhQUFhO2tCQURsQyxTQUFTO21IQThDRiwyQkFBMkI7c0JBRGpDLEtBQUs7Z0JBa0hDLE1BQU07c0JBRFosTUFBTTtnQkFxQ0csaUNBQWlDO3NCQUQxQyxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFPM0MsMEJBQTBCO3NCQURuQyxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFR5cGUsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uUGFuZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFNjcm9sbCwgVXJsU2VnbWVudCwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb250ZXh0SGVscGVyIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBBcHBTZXR0aW5nIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9hcHAtc2V0dGluZyc7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3NlcnZpY2UtbG9jYXRvcic7XHJcbmltcG9ydCB7IFZkRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2RpYWxvZ3Mvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWZE1lZGlhU2VydmljZSB9IGZyb20gJy4uLy4uL21lZGlhL3NlcnZpY2VzL21lZGlhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnLi4vLi4vbWVudS9tb2RlbHMvbWVudSc7XHJcbmltcG9ydCB7IFRhc2tEaWFsb2dEYXRhIH0gZnJvbSAnLi4vYmFzZS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBDb21tb24gfSBmcm9tICcuLi9jb25zdGFudHMvY29tbW9uJztcclxuaW1wb3J0IHsgR2xvYmFsUm9sZXMgfSBmcm9tICcuLi9jb25zdGFudHMvZ2xvYmFsLXJvbGVzJztcclxuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tICcuLi9lbnVtcy9tZXNzYWdlLXR5cGUnO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9hdXRoLWhlbHBlcic7XHJcbmltcG9ydCB7IElCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pYmFzZS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdXRoVXNlciB9IGZyb20gJy4uL21vZGVscy9hdXRoLXVzZXInO1xyXG5pbXBvcnQgeyBWZFRhc2tEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL3Rhc2stZGlhbG9nL3Rhc2stZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQSBiYXNlIGxpc3QgY29tcG9uZW50IGZvciBjb21wb25lbnRzIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0LlxyXG4gKi9cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgSUJhc2VDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblx0LyoqXHJcblx0ICogQXBwbGljYXRpb24gc2V0dGluZ3MuXHJcblx0ICovXHJcblx0cHVibGljIGFwcFNldHRpbmc6IEFwcFNldHRpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdlbmVyYWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgd2l0aCBhIGZsZXhpYmxlIHR5cGUgdG8gYWNjb21tb2RhdGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZXR0aW5nczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lbnUgaXRlbXMgZm9yIG5hdmlnYXRpb24uXHJcblx0ICovXHJcblx0cHVibGljIG1lbnU/OiBNZW51O1xyXG5cclxuXHQvKipcclxuXHQgKiBOYW1lIG9mIHRoZSBwcm9qZWN0LCB1c2VkIGZvciBkaXNwbGF5IG9yIGxvZ2dpbmcgcHVycG9zZXMuXHJcblx0ICovXHJcblx0cHVibGljIHByb2plY3ROYW1lPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaXRsZSBvZiB0aGUgY3VycmVudCBwYWdlLCBkaXNwbGF5ZWQgaW4gdGhlIHBhZ2UgaGVhZGVyLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0aXRsZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogU3VidGl0bGUgb2YgdGhlIGN1cnJlbnQgb3V0bGV0LCB1c2VkIGZvciBhZGRpdGlvbmFsIHBhZ2UgY29udGV4dC5cclxuXHQgKi9cclxuXHRwdWJsaWMgc3VidGl0bGU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIGR1bW15IGRhdGEgaXMgdXNlZCBmb3IgdGVzdGluZywgYW5kIGRlYnVnIGxvZ3MgYXJlIGVuYWJsZWQuXHJcblx0ICovXHJcblx0cHVibGljIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlx0IFxyXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIGEgbG9hZGluZyBwcm9jZXNzIGlzIGFjdGl2ZSwgb2Z0ZW4gdXNlZCB0byBzaG93IGEgbG9hZGluZyBzcGlubmVyLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGhhbmRsZSBjaGFuZ2VzIGluIGV4cGFuc2lvbiBwYW5lbHMuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgaGFuZGxlRXhwYW5zaW9uUGFuZWxDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgYSBzYXZlIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXHJcblx0ICovXHJcblx0cHVibGljIF9pc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHB1YmxpYyBnZXQgaXNTYXZpbmcoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1NhdmluZyB8fCB0aGlzLmlzTG9hZGluZzsgfVxyXG5cdHB1YmxpYyBzZXQgaXNTYXZpbmcoaXNTYXZpbmc6IGJvb2xlYW4pIHsgdGhpcy5pc0xvYWRpbmcgPSB0aGlzLl9pc1NhdmluZyA9IGlzU2F2aW5nOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBlZGl0b3IgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0cHVibGljIGlzRWRpdG9ySW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogU3RvcmVzIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHJlcXVlc3RzIG9yIG9wZXJhdGlvbnMuXHJcblx0ICovXHJcblx0cHVibGljIGVycm9yczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFV0aWxpdHkgdG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzY3JlZW4gb3Igd2luZG93IHNpemUuXHJcblx0ICovXHJcblx0cHVibGljIG1lZGlhOiBWZE1lZGlhU2VydmljZTtcclxuXHJcblx0LyoqXHJcblx0ICogTGlzdCBvZiBwZXJtaXR0ZWQgZmlsZSBleHRlbnNpb25zIGZvciB1cGxvYWQgb3Igc2VsZWN0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhbGxvd2VkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBDb21tb24uYWxsb3dlZEV4dGVuc2lvbnM7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBsdWdpbnMgZW5hYmxlZCBpbiB0aGUgVGlueU1DRSBlZGl0b3IuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvclBsdWdpbnM6IHN0cmluZyA9IENvbW1vbi5lZGl0b3JQbHVnaW5zO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIGNvbmZpZ3VyYXRpb24gZm9yIFRpbnlNQ0UgZWRpdG9yLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JUb29sYmFyOiBzdHJpbmcgPSBDb21tb24uZWRpdG9yVG9vbGJhcjtcclxuXHJcblx0LyoqXHJcblx0ICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgZWRpdG9yLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JDb25maWc6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBuYXZpZ2F0aW9uIGFuZCBVUkwgbWFuaXB1bGF0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3V0ZXI6IFJvdXRlcjtcclxuXHJcblx0LyoqXHJcblx0ICogT3B0aW9uYWwgaGFzaCB2YWx1ZSBhcHBlbmRlZCB0byBVUkxzIGZvciBib29rbWFya2luZyBvciBzdGF0ZSBtYW5hZ2VtZW50LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cmxIYXNoPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBDU1MgY2xhc3MgbmFtZShzKSBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXHJcblx0ICovXHJcblx0cHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogUGVybWlzc2lvbiBmbGFnIGZvciBjcmVhdGluZyBuZXcgZW50cmllcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FuQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBlcm1pc3Npb24gZmxhZyBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgZW50cmllcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FuVXBkYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBlcm1pc3Npb24gZmxhZyBmb3IgZGVsZXRpbmcgZW50cmllcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FuRGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZ1bGwgcGF0aCBvZiB0aGUgY3VycmVudCByb3V0ZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudFJvdXRlPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBCYXNlIHBhdGggb2YgdGhlIGN1cnJlbnQgcm91dGUsIGV4Y2x1ZGluZyBzcGVjaWZpYyBwYXJhbWV0ZXJzIG9yIHN1Yi1wYXRocy5cclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudEJhc2VSb3V0ZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogVVJMIHRvIG5hdmlnYXRlIGJhY2sgdG8gYWZ0ZXIgc2F2aW5nIGNoYW5nZXMuXHJcblx0ICovXHJcblx0cHVibGljIHJldHVyblVybD86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBhdXRoZW50aWNhdGVkIHVzZXIuXHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnRVc2VyOiBBdXRoVXNlciA9IEF1dGhIZWxwZXIudXNlcjtcclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFkbWluIHByaXZpbGVnZXMuXHJcblx0ICovXHJcblx0cHVibGljIGlzQWRtaW4gPSBBdXRoSGVscGVyLmhhc1JvbGUoR2xvYmFsUm9sZXMuQWRtaW5pc3RyYXRvcik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluZGljYXRlcyBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBjbGllbnQgYWRtaW4gcHJpdmlsZWdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNDbGllbnRBZG1pbiA9IEF1dGhIZWxwZXIuaGFzUm9sZShHbG9iYWxSb2xlcy5DbGllbnRBZG1pbmlzdHJhdG9yKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGRlcGFydG1lbnQgYWRtaW4gcHJpdmlsZWdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNEZXBhcnRtZW50QWRtaW4gPSBBdXRoSGVscGVyLmhhc1JvbGUoR2xvYmFsUm9sZXMuRGVwYXJ0bWVudEFkbWluaXN0cmF0b3IpO1xyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVyIGZvciByZWxvYWQgYWN0aW9ucywgdXNlZnVsIGZvciByZWZyZXNoaW5nIGRhdGEuXHJcblx0ICovXHJcblx0QE91dHB1dCgpXHJcblx0cHVibGljIHJlbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VydmljZSBmb3Igc2V0dGluZyB0aGUgZG9jdW1lbnQncyB0aXRsZS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdGl0bGVTZXJ2aWNlOiBUaXRsZTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VydmljZSBmb3IgZGlzcGxheWluZyBzbmFjayBiYXIgbm90aWZpY2F0aW9ucy5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc25hY2tCYXJTZXJ2aWNlOiBNYXRTbmFja0JhcjtcclxuXHJcblx0LyoqXHJcblx0ICogU2VydmljZSBmb3IgZGlzcGxheWluZyBjb25maXJtYXRpb24gYW5kIHByb21wdCBkaWFsb2dzLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBWZERpYWxvZ1NlcnZpY2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcnZpY2UgZm9yIG9wZW5pbmcgbW9kYWwgZGlhbG9ncy5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2c7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcnZpY2UgZm9yIG1hbmFnaW5nIGJyb3dzZXIgbG9jYXRpb24gYW5kIGhpc3RvcnkuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGxvY2F0aW9uOiBMb2NhdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2V0cyBhIFVSTCBoYXNoIGZvciBuYXZpZ2F0aW9uIHN0YXRlLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZXRVcmxIYXNoOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogUXVlcnkgbGlzdCBmb3IgYWNjZXNzaW5nIGV4cGFuc2lvbiBwYW5lbCBlbGVtZW50cyBhcyBET00gcmVmZXJlbmNlcy5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKE1hdEV4cGFuc2lvblBhbmVsLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuXHRwcm90ZWN0ZWQgbWF0RXhwYW5zaW9uUGFuZWxFbGVtZW50UXVlcnlMaXN0PzogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuXHQvKipcclxuXHQgKiBRdWVyeSBsaXN0IGZvciBhY2Nlc3NpbmcgTWF0RXhwYW5zaW9uUGFuZWwgY29tcG9uZW50IHJlZmVyZW5jZXMuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZHJlbihNYXRFeHBhbnNpb25QYW5lbClcclxuXHRwcm90ZWN0ZWQgbWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q/OiBRdWVyeUxpc3Q8TWF0RXhwYW5zaW9uUGFuZWw+O1xyXG5cclxuXHQvKipcclxuXHQgKiBTdWJzY3JpcHRpb25zIGZvciBleHBhbnNpb24gcGFuZWwgY2hhbmdlcywgbWFuYWdlZCB0byBhdm9pZCBtZW1vcnkgbGVha3MuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5pdGlhbGl6ZXMgc2VydmljZXMgYW5kIGFwcGxpY2F0aW9uIHNldHRpbmdzLCBzZXRzIHVwIGNvbnRleHQgaGVscGVycywgXHJcblx0ICogYW5kIGluaXRpYWxpemVzIHRoZSBlZGl0b3Igd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHJvdXRlIC0gQWN0aXZhdGVkUm91dGUgaW5zdGFuY2UgZm9yIGFjY2Vzc2luZyByb3V0ZSBwYXJhbWV0ZXJzIGFuZCBkYXRhLlxyXG5cdCAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiAtIENoYW5nZURldGVjdG9yUmVmIGluc3RhbmNlIGZvciBtYW51YWxseSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24uXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgVGl0bGUgc2VydmljZSAqL1xyXG5cdFx0dGhpcy50aXRsZVNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoVGl0bGUpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGRpYWxvZyBzZXJ2aWNlIGZvciBzaG93aW5nIG1vZGFscyAqL1xyXG5cdFx0dGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlKFZkRGlhbG9nU2VydmljZSk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgTWF0ZXJpYWwgZGlhbG9nIGZvciBtYW5hZ2luZyBkaWFsb2dzICovXHJcblx0XHR0aGlzLmRpYWxvZyA9IHRoaXMuZ2V0U2VydmljZShNYXREaWFsb2cpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIG1lZGlhIHNlcnZpY2UgZm9yIG1lZGlhIHF1ZXJpZXMgYW5kIGJyb2FkY2FzdCAqL1xyXG5cdFx0dGhpcy5tZWRpYSA9IHRoaXMuZ2V0U2VydmljZShWZE1lZGlhU2VydmljZSk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgc25hY2tiYXIgc2VydmljZSBmb3Igbm90aWZpY2F0aW9ucyAqL1xyXG5cdFx0dGhpcy5zbmFja0JhclNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoTWF0U25hY2tCYXIpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIHJvdXRlciBzZXJ2aWNlIGZvciBuYXZpZ2F0aW9uICovXHJcblx0XHR0aGlzLnJvdXRlciA9IHRoaXMuZ2V0U2VydmljZShSb3V0ZXIpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzICovXHJcblx0XHR0aGlzLmFwcFNldHRpbmcgPSB0aGlzLmdldFNlcnZpY2UoQXBwU2V0dGluZyk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgbG9jYXRpb24gc2VydmljZSBmb3IgVVJMIG1hbmlwdWxhdGlvbiAqL1xyXG5cdFx0dGhpcy5sb2NhdGlvbiA9IHRoaXMuZ2V0U2VydmljZShMb2NhdGlvbik7XHJcblxyXG5cdFx0LyogU2V0IHVwIGNvbnRleHQgaGVscGVycyB3aXRoIHJvdXRlIGFuZCBhcHBsaWNhdGlvbiBzZXR0aW5ncyAqL1xyXG5cdFx0Q29udGV4dEhlbHBlci5hY3RpdmF0ZWRSb3V0ZSA9IHJvdXRlO1xyXG5cdFx0Q29udGV4dEhlbHBlci5yb3V0ZXIgPSB0aGlzLnJvdXRlcjtcclxuXHRcdENvbnRleHRIZWxwZXIuYXBwU2V0dGluZyA9IHRoaXMuYXBwU2V0dGluZztcclxuXHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBlZGl0b3Igd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zICovXHJcblx0XHR0aGlzLmluaXRFZGl0b3IoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWRcclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBtZW51IGl0ZW1zIGZyb20gcm91dGUgc25hcHNob3QgKi9cclxuXHRcdHZhciBtYWluUm91dGUgPSB0aGlzLmdldE1haW5Sb3V0ZSh0aGlzLnJvdXRlLnNuYXBzaG90KTtcclxuXHRcdGlmIChtYWluUm91dGUpIHtcclxuXHRcdFx0dGhpcy5tZW51ID0gbWFpblJvdXRlLmRhdGEubWVudTtcclxuXHRcdFx0dGhpcy5zZXRUaXRsZXMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcHJvamVjdCBuYW1lICYgZGVidWcgbW9kZSAqL1xyXG5cdFx0dGhpcy5wcm9qZWN0TmFtZSA9IHRoaXMuYXBwU2V0dGluZy5wcm9qZWN0TmFtZTtcclxuXHRcdHRoaXMuZGVidWcgPSB0aGlzLmFwcFNldHRpbmcuZGVidWcgPz8gZmFsc2U7XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gY3JlYXRlLCB1cGRhdGUsIGFuZCBkZWxldGUgKi9cclxuXHRcdHRoaXMuY2FuQ3JlYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdDcmVhdGUnKTtcclxuXHRcdHRoaXMuY2FuVXBkYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdVcGRhdGUnKTtcclxuXHRcdHRoaXMuY2FuRGVsZXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdEZWxldGUnKTtcclxuXHJcblx0XHQvKiBHZXQgdGhlIGhhc2ggZnJvbSB0aGUgVVJMICovXHJcblx0XHR0aGlzLnJvdXRlLmZyYWdtZW50LnN1YnNjcmliZSgoZnJhZ21lbnQ6IHN0cmluZyB8IGFueSkgPT4gdGhpcy51cmxIYXNoID0gZnJhZ21lbnQpO1xyXG5cclxuXHRcdC8qIENoZWNrIHBlcm1pc3Npb25zIGJhc2VkIG9uIHRoZSByb3V0ZSAqL1xyXG5cdFx0aWYgKHRoaXMucm91dGUucGFyZW50KSB7XHJcblx0XHRcdHRoaXMucm91dGUucGFyZW50LnVybC5zdWJzY3JpYmUoKHVybDogVXJsU2VnbWVudFtdKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jbGFzc05hbWUgPz89IHVybC5sZW5ndGggPyB1cmxbMF0ucGF0aC5yZXBsYWNlKC8oLiopcyQvLCAnJDEnKS5yZXBsYWNlKC9eLi8sICh1cmxbMF0ucGF0aFswXSB8fCAnJykudG9VcHBlckNhc2UoKSkgOiAnJztcclxuXHRcdFx0XHR0aGlzLmNhbkNyZWF0ZSA9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYENyZWF0ZSR7dGhpcy5jbGFzc05hbWV9YCk7XHJcblx0XHRcdFx0dGhpcy5jYW5VcGRhdGUgPSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBVcGRhdGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHRcdHRoaXMuY2FuRGVsZXRlID0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgRGVsZXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHRoZSBjdXJyZW50IHJvdXRlIGFuZCBiYXNlIHJvdXRlICovXHJcblx0XHR0aGlzLmN1cnJlbnRSb3V0ZSA9IHdpbmRvdy5idG9hKHRoaXMucm91dGVyLnVybCk7XHJcblx0XHR0aGlzLmN1cnJlbnRCYXNlUm91dGUgPSB0aGlzLnJvdXRlci51cmw/LnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgdGhlIHBhZ2UgdGl0bGUgYmFzZWQgb24gdGhlIG5hdmlnYXRpb24gZW5kIGV2ZW50XHJcblx0XHQgKi9cclxuXHRcdHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdGxldCBuYXZpZ2F0aW9uRW5kID0gKHggYXMgU2Nyb2xsKT8ucm91dGVyRXZlbnQgYXMgTmF2aWdhdGlvbkVuZDtcclxuXHRcdFx0aWYgKG5hdmlnYXRpb25FbmQpIHtcclxuXHRcdFx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudFJvdXRlID0gd2luZG93LmJ0b2EobmF2aWdhdGlvbkVuZC51cmwpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBSZXRyaWV2ZSB0aGUgcmV0dXJuIFVSTCBpZiBhbnkgZnJvbSB0aGUgcXVlcnkgcGFyYW1ldGVycyAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoeCA9PiB0aGlzLnNldFJldHVyblVybCh4LnJldHVyblVybCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkXHJcblx0ICovXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0LyogQnJvYWRjYXN0IHRvIGFsbCBsaXN0ZW5lciBvYnNlcnZhYmxlcyB3aGVuIGxvYWRpbmcgdGhlIHBhZ2UgKi9cclxuXHRcdHRoaXMubWVkaWEuYnJvYWRjYXN0KCk7XHJcblxyXG5cdFx0LyogU2V0IHBhZ2UgdGl0bGVzICovXHJcblx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogRm9yY2UgYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBzaW5jZSBjaGFuZ2UgZGV0ZWN0aW9ucyBcclxuXHRcdCAqIGhhdmUgZmluaXNoZWQgd2hlbiBgbmdBZnRlclZpZXdJbml0YCBpcyBleGVjdXRlZFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHQvKiBMaXN0ZW4gZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzIGlmIGVuYWJsZWQgKi9cclxuXHRcdGlmICh0aGlzLmhhbmRsZUV4cGFuc2lvblBhbmVsQ2hhbmdlcykge1xyXG5cdFx0XHR0aGlzLm9uRXhwYW5zaW9uUGFuZWxDaGFuZ2VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWxvYWRzIHRoZSBjdXJyZW50IHBhZ2Ugb3IgY29tcG9uZW50LlxyXG5cdCAqIFxyXG5cdCAqIFRoaXMgbWV0aG9kIG5hdmlnYXRlcyB0ZW1wb3JhcmlseSB0byB0aGUgcm9vdCBVUkwgYW5kIHRoZW4gXHJcblx0ICogbmF2aWdhdGVzIGJhY2sgdG8gdGhlIGN1cnJlbnQgVVJMIHRvIGVmZmVjdGl2ZWx5IHJlZnJlc2ggdGhlIHBhZ2Ugb3IgY29tcG9uZW50LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG5hdmlnYXRpb24gaXMgc3VjY2Vzc2Z1bCxcclxuXHQgKiAgICAgICAgICAgICAgICAgICByZWNlaXZlcyB0aGUgY3VycmVudCBVUkwgYXMgYW4gYXJndW1lbnQuXHJcblx0ICovXHJcblx0cHVibGljIHJlbG9hZFBhZ2UoY2FsbGJhY2s/OiAoY3VycmVudFVybDogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRsZXQgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHJlcGxhY2VVcmw6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCwgeyByZXBsYWNlVXJsOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdC8qIEV4ZWN1dGUgdGhlIGNhbGxiYWNrIGlmIHByb3ZpZGVkICovXHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjayhjdXJyZW50VXJsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgYmFjayB0byB0aGUgcmV0dXJuIFVSTCBpZiBpdCBleGlzdHMuXHJcblx0ICovXHJcblx0cHVibGljIG5hdmlnYXRlVG9SZXR1cm5VcmwoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0LyogUGFyc2UgdGhlIHJldHVybiBVUkwgaW50byBhIFVybFRyZWUgb2JqZWN0ICovXHJcblx0XHRcdGxldCB1cmxUcmVlOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yZXR1cm5VcmwpO1xyXG5cclxuXHRcdFx0LyogTmF2aWdhdGUgdG8gdGhlIHJldHVybiBVUkwgKi9cclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxUcmVlLnRvU3RyaW5nKCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyogXHJcblx0ICogRm9yY2VzIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0ICogaGF2ZSBmaW5pc2hlZCB3aGVuIGBuZ0FmdGVyVmlld0luaXRgIGlzIGV4ZWN1dGVkLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG5cdFx0LyogVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgdGhlIHJldHVybiBVUkwgYWZ0ZXIgZGVjb2RpbmcgaXQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIC0gVGhlIGVuY29kZWQgcmV0dXJuIFVSTCB0byBzZXQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFJldHVyblVybChyZXR1cm5Vcmw6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0LyogRGVjb2RlIGFuZCBzZXQgdGhlIHJldHVybiBVUkwsIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgKi9cclxuXHRcdFx0dGhpcy5yZXR1cm5VcmwgPSByZXR1cm5VcmwgPyBkZWNvZGVVUklDb21wb25lbnQoYXRvYihyZXR1cm5VcmwpKSA6IHVuZGVmaW5lZDtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdC8qIEhhbmRsZSBlcnJvciBzaWxlbnRseSAqL1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlzdGVuIGZvciBleHBhbnNpb24gcGFuZWwgY2hhbmdlc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkV4cGFuc2lvblBhbmVsQ2hhbmdlcygpOiB2b2lkIHtcclxuXHRcdC8qIExpc3RlbiBmb3IgZXhwYW5zaW9uIHBhbmVsIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q/LmNoYW5nZXMuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHQvKiBVbnN1YnNjcmliZSBmcm9tIG9sZCAnb3BlbmVkJyBhbmQgJ2Nsb3NlZCcgc3Vic2NyaXB0aW9ucyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHggPT4geC51bnN1YnNjcmliZSgpKTtcclxuXHJcblx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuXHRcdFx0LyogR2V0IHRoZSBwYW5lbCBlbmRzIHdpdGggdGhlIElEICduZXcnICovXHJcblx0XHRcdHZhciBuZXdFeHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50Py5pZD8uZW5kc1dpdGgoJy5uZXcnKSkgPz8gLTE7XHJcblx0XHRcdGlmIChuZXdFeHBhbnNpb25QYW5lbEluZGV4ID49IDApIHtcclxuXHRcdFx0XHQvKiBDbG9zZSBhbGwgcGFuZWxzICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8uZmlyc3Q/LmFjY29yZGlvbj8uY2xvc2VBbGwoKTtcclxuXHJcblx0XHRcdFx0LyogT3BlbiB0aGUgbmV3IHBhbmVsICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW25ld0V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblxyXG5cdFx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogRmluZCB0aGUgaW5kZXggb2YgdGhlIHBhbmVsIHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50IElEICovXHJcblx0XHRcdFx0dGhpcy51cmxIYXNoPy5zcGxpdCgnLicpXHJcblx0XHRcdFx0XHQ/LnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwgY3VycmVudFZhbHVlLCBpbmRleCkgPT4gYWNjdW11bGF0b3IuY29uY2F0KChpbmRleCA+IDAgPyAoYWNjdW11bGF0b3Iuc2xpY2UoLTEpLmpvaW4oJy4nKSArICcuJykgOiAnJykgKyBjdXJyZW50VmFsdWUpLCBbXSlcclxuXHRcdFx0XHRcdD8uZm9yRWFjaCgoaGFzaDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhciBleHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50LmlkID09IGhhc2gpID8/IC0xO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5zaW9uUGFuZWxJbmRleCA+PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW2V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyBmb3Igb3BlbmVkIHBhbmVscyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py5mb3JFYWNoKHkgPT4ge1xyXG5cdFx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLnB1c2goeS5vcGVuZWQuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2V0VXJsSGFzaCkge1xyXG5cdFx0XHRcdFx0XHQvKiBHZXQgdGhlIGlkIG9mIHRoZSBjdXJyZW50IG9wZW5lZCBwYW5lbCAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgY3VycmVudFBhbmVsSWQgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgZnJhZ21lbnQ6IGN1cnJlbnRQYW5lbElkLCByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UgcmVtb3ZlIHRoZSBzZWdtZW50IGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHJcblx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgZm9yIGNsb3NlZCBwYW5lbHMgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5wdXNoKHkuY2xvc2VkLnN1YnNjcmliZShfID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnNldFVybEhhc2gpIHtcclxuXHRcdFx0XHRcdFx0LyogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBvcGVuZWQgcGFuZWwgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGN1cnJlbnRQYW5lbElkUGFydHMgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZD8uc3BsaXQoJy4nKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkUGFydHMubGVuZ3RoID4gMSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IGZyYWdtZW50OiBjdXJyZW50UGFuZWxJZFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyksIHJlcGxhY2VVcmw6IHRydWUgfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyAqL1xyXG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIE5vdGlmeSBleHBhbnNpb24gcGFuZWwgbGlzdCBjaGFuZ2VzICovXHJcblx0XHRpZiAodGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdCkge1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0cmlldmVzIGFuIGluc3RhbmNlIGZyb20gdGhlIGluamVjdG9yIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0b2tlbi5cclxuXHQgKiBJZiBub3QgZm91bmQ6XHJcblx0ICogLSBUaHJvd3Mge0BsaW5rIE5vUHJvdmlkZXJFcnJvcn0gaWYgbm8gYG5vdEZvdW5kVmFsdWVgIHRoYXQgaXMgbm90IGVxdWFsIHRvXHJcblx0ICogSW5qZWN0b3IuVEhST1dfSUZfTk9UX0ZPVU5EIGlzIGdpdmVuXHJcblx0ICogLSBSZXR1cm5zIHRoZSBgbm90Rm91bmRWYWx1ZWAgb3RoZXJ3aXNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldFNlcnZpY2U8VD4odG9rZW46IFR5cGU8VD4pOiBUIHtcclxuXHRcdHJldHVybiBTZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKHRva2VuKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIG1haW4gcm91dGUgZnJvbSB0aGUgZ2l2ZW4gc25hcHNob3QgYnkgdHJhdmVyc2luZyB1cCB0byB0aGUgcGFyZW50IHJvdXRlc1xyXG5cdCAqIGlmIHRoZSBjdXJyZW50IHNuYXBzaG90IGRvZXMgbm90IGhhdmUgYSBtZW51IGRlZmluZWQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgYWN0aXZhdGVkIHJvdXRlIHNuYXBzaG90IHRvIGV2YWx1YXRlLlxyXG5cdCAqIEByZXR1cm5zIFRoZSBtYWluIHJvdXRlIHNuYXBzaG90IHRoYXQgaGFzIGEgbWVudSBkZWZpbmVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBnZXRNYWluUm91dGUoc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcclxuXHRcdGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdCEucGFyZW50ICYmICFzbmFwc2hvdC5kYXRhLm1lbnUpIHtcclxuXHRcdFx0LyogUmVjdXJzaXZlbHkgY2FsbCB0byBnZXQgdGhlIG1haW4gcm91dGUgZnJvbSB0aGUgcGFyZW50IHNuYXBzaG90ICovXHJcblx0XHRcdHJldHVybiB0aGlzLmdldE1haW5Sb3V0ZShzbmFwc2hvdCEucGFyZW50ISk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNuYXBzaG90O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgYSBjb25maXJtIGRpYWxvZyB0byBkZWxldGUgYSBzaW5nbGUgaXRlbS5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgY2xvc2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbURpYWxvZygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlybSh7XHJcblx0XHRcdG1lc3NhZ2U6ICRsb2NhbGl6ZWA6QEBkaWFsb2cubWVzc2FnZS5kZWxldGUub25lOkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBpdGVtP2AsXHJcblx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmRlbGV0ZTpDb25maXJtIERlbGV0ZWAsXHJcblx0XHRcdGNhbmNlbEJ1dHRvbjogJGxvY2FsaXplYDpAQGNhbmNlbDpDYW5jZWxgLFxyXG5cdFx0XHRhY2NlcHRCdXR0b246ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdH0pLmFmdGVyQ2xvc2VkKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIGNvbmZpcm0gZGlhbG9nIHRvIGRlbGV0ZSBtdWx0aXBsZSBzZWxlY3RlZCBpdGVtcy5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgY2xvc2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbXNEaWFsb2coKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpcm0oe1xyXG5cdFx0XHRtZXNzYWdlOiAkbG9jYWxpemVgOkBAZGlhbG9nLm1lc3NhZ2UuZGVsZXRlLmxpc3Q6QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbXM/YCxcclxuXHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkaWFsb2cudGl0bGUuZGVsZXRlOkNvbmZpcm0gRGVsZXRlYCxcclxuXHRcdFx0Y2FuY2VsQnV0dG9uOiAkbG9jYWxpemVgOkBAY2FuY2VsOkNhbmNlbGAsXHJcblx0XHRcdGFjY2VwdEJ1dHRvbjogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB0byBzZW5kIHNvbWUgZGF0YS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgaW4gdGhlIGRpYWxvZy5cclxuXHQgKiBAcGFyYW0gb2JzZXJ2YWJsZSAtIFRoZSBvYnNlcnZhYmxlIGluc3RhbmNlIHRvIGhhbmRsZSB0aGUgZGF0YS5cclxuXHQgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBzdWNjZXNzZnVsIG9wZXJhdGlvbi5cclxuXHQgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gYW4gZXJyb3IuXHJcblx0ICogQHBhcmFtIGFjY2VwdEJ1dHRvblRleHQgLSBPcHRpb25hbCB0ZXh0IGZvciB0aGUgYWNjZXB0IGJ1dHRvbi5cclxuXHQgKiBAcGFyYW0gY2FuY2VsQnV0dG9uVGV4dCAtIE9wdGlvbmFsIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzaG93Q29uZmlybWF0aW9uRGlhbG9nKFxyXG5cdFx0bWVzc2FnZTogc3RyaW5nLFxyXG5cdFx0b2JzZXJ2YWJlOiBPYnNlcnZhYmxlPGFueT4sXHJcblx0XHRzdWNjZXNzQ2FsbGJhY2s/OiBGdW5jdGlvbixcclxuXHRcdGVycm9yQ2FsbGJhY2s/OiBGdW5jdGlvbixcclxuXHRcdGFjY2VwdEJ1dHRvblRleHQ/OiBzdHJpbmcsXHJcblx0XHRjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nLFxyXG5cdFx0ZGlhbG9nQ29uZmlnPzogTWF0RGlhbG9nQ29uZmlnXHJcblx0KTogdm9pZCB7XHJcblx0XHR0aGlzLmRpYWxvZ1NlcnZpY2VcclxuXHRcdFx0Lm9wZW5Db25maXJtKHtcclxuXHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlLFxyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmNvbmZpcm06Q29uZmlybWAsXHJcblx0XHRcdFx0Y2FuY2VsQnV0dG9uOiBjYW5jZWxCdXR0b25UZXh0ID8/ICRsb2NhbGl6ZWA6QEBjYW5jZWw6Q2FuY2VsYCxcclxuXHRcdFx0XHRhY2NlcHRCdXR0b246IGFjY2VwdEJ1dHRvblRleHQgPz8gJGxvY2FsaXplYDpAQHllczpZZXNgLFxyXG5cdFx0XHR9LCBkaWFsb2dDb25maWcgPz8gKDxNYXREaWFsb2dDb25maWc+eyBtYXhXaWR0aDogNDgwIH0pKVxyXG5cdFx0XHQuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHRcdG9ic2VydmFiZS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0XHRuZXh0OiAoeCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hvd01lc3NhZ2UoJGxvY2FsaXplYDpAQHNuYWNrYmFyLnNlbmQuc3VjY2VzczpEYXRhIHNlbnQgc3VjY2Vzc2Z1bGx5LmApO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3NDYWxsYmFjayh4KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sIGVycm9yOiAoZXJyb3JzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlcnJvckNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKGVycm9ycyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT3BlbnMgYSB0YXNrIGRpYWxvZyB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbi5cclxuXHQgKiBcclxuXHQgKiBAdHlwZXBhcmFtIFRSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGZyb20gdGhlIGRpYWxvZy5cclxuXHQgKiBAcGFyYW0ge1BhcnRpYWw8VGFza0RpYWxvZ0RhdGE8VFJlc3VsdD4+fSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0YXNrIGRpYWxvZywgaW5jbHVkaW5nIG1lc3NhZ2VzLCBjYWxsYmFja3MsIGFuZCBvYnNlcnZhYmxlIHRhc2tzLlxyXG5cdCAqIFxyXG5cdCAqIEBleGFtcGxlIFxyXG5cdCAqIC8vIEV4YW1wbGUgb2YgaG93IHRvIGNhbGwgc2hvd1Rhc2tEaWFsb2dcclxuXHQgKiB0aGlzLnNob3dUYXNrRGlhbG9nKHtcclxuXHQgKiAgICAgdGl0bGU6ICdQcm9jZXNzaW5nIFRhc2snLFxyXG5cdCAqICAgICBpblByb2dyZXNzTWVzc2FnZTogJ1lvdXIgdGFzayBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuLi4nLFxyXG5cdCAqICAgICBzdWNjZXNzTWVzc2FnZTogJ1Rhc2sgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnLFxyXG5cdCAqICAgICBlcnJvck1lc3NhZ2U6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHlvdXIgdGFzay4nLFxyXG5cdCAqICAgICB0YXNrOiB0aGlzLnNvbWVPYnNlcnZhYmxlVGFzaygpLCAvLyBZb3VyIG9ic2VydmFibGUgdGFzayBnb2VzIGhlcmVcclxuXHQgKiAgICAgc3VjY2Vzc0J1dHRvbkNsaWNrOiAocmVzdWx0LCBkcikgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3MgYnV0dG9uIGNsaWNrZWQhJywgcmVzdWx0KTtcclxuXHQgKiAgICAgICAgIC8vIE9wdGlvbmFsbHkgaGFuZGxlIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGhlcmVcclxuXHQgKiAgICAgICAgIGRyLmNsb3NlKHJlc3VsdCk7IC8vIENsb3NlIHRoZSBkaWFsb2cgd2l0aCB0aGUgcmVzdWx0XHJcblx0ICogICAgIH0sXHJcblx0ICogICAgIHN1Y2Nlc3NDYWxsYmFjazogKHJlc3VsdCkgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3MhJywgcmVzdWx0KTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiAgICAgZXJyb3JDYWxsYmFjazogKGVycm9ycykgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IhJywgZXJyb3JzKTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiAgICAgY2FuY2VsQ2FsbGJhY2s6ICgpID0+IHtcclxuXHQgKiAgICAgICAgIGNvbnNvbGUubG9nKCdUYXNrIHdhcyBjYW5jZWxlZC4nKTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiB9KTtcclxuXHQgKi9cclxuXHRwdWJsaWMgc2hvd1Rhc2tEaWFsb2c8VFJlc3VsdCA9IGFueT4oY29uZmlnOiBQYXJ0aWFsPFRhc2tEaWFsb2dEYXRhPFRSZXN1bHQ+PiwgZGlhbG9nQ29uZmlnPzogTWF0RGlhbG9nQ29uZmlnPFRSZXN1bHQ+KTogTWF0RGlhbG9nUmVmPFZkVGFza0RpYWxvZ0NvbXBvbmVudCwgVFJlc3VsdD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMub3BlbkRpYWxvZzxWZFRhc2tEaWFsb2dDb21wb25lbnQ+KFZkVGFza0RpYWxvZ0NvbXBvbmVudCwgT2JqZWN0LmFzc2lnbihkaWFsb2dDb25maWcgPz8ge30sIDxNYXREaWFsb2dDb25maWc+e1xyXG5cdFx0XHRkYXRhOiBuZXcgVGFza0RpYWxvZ0RhdGEoY29uZmlnKSxcclxuXHRcdFx0ZGlzYWJsZUNsb3NlOiB0cnVlXHJcblx0XHR9KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPcGVucyBhIGRpYWxvZyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgd2l0aCB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cclxuXHQgKlxyXG5cdCAqIEB0eXBlcGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgb3BlbmVkIGFzIGEgZGlhbG9nLlxyXG5cdCAqIEB0eXBlcGFyYW0gRCAtIFRoZSB0eXBlIG9mIHRoZSBkYXRhIHBhc3NlZCB0byB0aGUgZGlhbG9nIChkZWZhdWx0IGlzIGFueSkuXHJcblx0ICogQHBhcmFtIHtUeXBlPFQ+fSBkaWFsb2dUeXBlIC0gVGhlIGNvbXBvbmVudCB0eXBlIHRvIG9wZW4gYXMgYSBkaWFsb2cuXHJcblx0ICogQHBhcmFtIHtNYXREaWFsb2dDb25maWc8RD59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBkaWFsb2csIHN1Y2ggYXMgZGF0YSBhbmQgc3R5bGVzLlxyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkLlxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIHtNYXREaWFsb2dSZWY8VCwgRD59IEEgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgZGlhbG9nLlxyXG5cdCAqIFxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogLy8gRXhhbXBsZSBvZiBob3cgdG8gdXNlIG9wZW5EaWFsb2dcclxuXHQgKiBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm9wZW5EaWFsb2coTXlEaWFsb2dDb21wb25lbnQsIHtcclxuXHQgKiAgICAgZGF0YTogeyBkaWFsb2cgZGF0YSBoZXJlIH0sXHJcblx0ICogICAgIHdpZHRoOiAnODAwcHgnLFxyXG5cdCAqICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jbGFzcydcclxuXHQgKiB9LCAoKSA9PiB7XHJcblx0ICogICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgY2xvc2VkLicpO1xyXG5cdCAqIH0pO1xyXG5cdCAqIFxyXG5cdCAqIC8vIEhhbmRsaW5nIHRoZSByZXN1bHQgZnJvbSB0aGUgZGlhbG9nXHJcblx0ICogZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblx0ICogICAgIGlmIChyZXN1bHQpIHtcclxuXHQgKiAgICAgICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgcmVzdWx0OicsIHJlc3VsdCk7XHJcblx0ICogICAgIH1cclxuXHQgKiB9KTtcclxuXHQgKi9cclxuXHRwdWJsaWMgb3BlbkRpYWxvZzxULCBEID0gYW55PihkaWFsb2dUeXBlOiBUeXBlPFQ+LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZzxEPiwgY2FsbGJhY2s/OiBGdW5jdGlvbik6IE1hdERpYWxvZ1JlZjxULCBEPiB7XHJcblx0XHQvKiBPcGVuIHRoZSBkaWFsb2cgd2l0aCBzcGVjaWZpZWQgdHlwZSBhbmQgY29uZmlndXJhdGlvbiAqL1xyXG5cdFx0dmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oZGlhbG9nVHlwZSwgT2JqZWN0LmFzc2lnbih7XHJcblx0XHRcdHdpZHRoOiAnNjUwcHgnLCAvKiBEZWZhdWx0IHdpZHRoIGZvciB0aGUgZGlhbG9nICovXHJcblx0XHRcdGRhdGE6IHt9LCAvKiBEZWZhdWx0IGRhdGEgcGFzc2VkIHRvIHRoZSBkaWFsb2cgKi9cclxuXHRcdFx0cGFuZWxDbGFzczogWydkaWFsb2ctZnVsbC1zY3JlZW4nXSAvKiBDbGFzcyBmb3IgdGhlIGRpYWxvZyBwYW5lbCAqL1xyXG5cdFx0fSwgY29uZmlnKSk7IC8qIE1lcmdlIHVzZXItZGVmaW5lZCBjb25maWcgd2l0aCBkZWZhdWx0cyAqL1xyXG5cclxuXHRcdC8qIElmIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQsIHN1YnNjcmliZSB0byB0aGUgZGlhbG9nJ3MgYWZ0ZXJDbG9zZWQgZXZlbnQgKi9cclxuXHRcdGlmIChjYWxsYmFjaykge1xyXG5cdFx0XHQvKiBFeGVjdXRlIGNhbGxiYWNrIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkICovXHJcblx0XHRcdGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShfID0+IGNhbGxiYWNrKCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJldHVybiB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgZGlhbG9nICovXHJcblx0XHRyZXR1cm4gZGlhbG9nUmVmO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlzcGxheXMgYSBtZXNzYWdlIHVzaW5nIHRoZSBzbmFjayBiYXIgc2VydmljZS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IChvcHRpb25hbCwgZGVmYXVsdHMgdG8gYSBzdWNjZXNzIG1lc3NhZ2UgaWYgbm90IHByb3ZpZGVkKVxyXG5cdCAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIChTdWNjZXNzLCBXYXJuaW5nLCBvciBFcnJvcikuIERlZmF1bHRzIHRvIFN1Y2Nlc3MuXHJcblx0ICogQHBhcmFtIGR1cmF0aW9uIFRoZSBkdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSB0byBzaG93IHRoZSBtZXNzYWdlLiBEZWZhdWx0cyB0byAzMDAwbXMuXHJcblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b24uIERlZmF1bHRzIHRvICdPSycuXHJcblx0ICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gdGhlIGFjdGlvbiBidXR0b24gaXMgY2xpY2tlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2hvd01lc3NhZ2UoXHJcblx0XHRtZXNzYWdlOiBzdHJpbmcsXHJcblx0XHR0eXBlOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MsXHJcblx0XHRkdXJhdGlvbjogbnVtYmVyID0gMzAwMCxcclxuXHRcdGFjdGlvbkxhYmVsOiBzdHJpbmcgPSAkbG9jYWxpemVgOkBAb2s6T0tgXHJcblx0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcblx0XHQvKiBEZWZhdWx0IHNuYWNrIGJhciBjbGFzcyB0byAncHJpbWFyeScgKGZvciBzdWNjZXNzIG1lc3NhZ2VzKSAqL1xyXG5cdFx0bGV0IHNuYWNrQmFyQ2xhc3MgPSAncHJpbWFyeSc7XHJcblxyXG5cdFx0LyogRGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBDU1MgY2xhc3MgYmFzZWQgb24gdGhlIG1lc3NhZ2UgdHlwZSAqL1xyXG5cdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuU3VjY2VzczpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ3ByaW1hcnknO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBNZXNzYWdlVHlwZS5XYXJuaW5nOlxyXG5cdFx0XHRcdHNuYWNrQmFyQ2xhc3MgPSAnd2Fybic7XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxyXG5cdFx0XHRcdHNuYWNrQmFyQ2xhc3MgPSAnZXJyb3InO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHJcblx0XHQvKiBEaXNwbGF5IHRoZSBtZXNzYWdlIGluIHRoZSBzbmFjayBiYXIsIHdpdGggc3BlY2lmaWVkIGR1cmF0aW9uIGFuZCBDU1MgY2xhc3MgKi9cclxuXHRcdGNvbnN0IHNuYWNrQmFyUmVmID0gdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0YWN0aW9uTGFiZWwsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRkdXJhdGlvbjogZHVyYXRpb24sXHJcblx0XHRcdFx0cGFuZWxDbGFzczogW3NuYWNrQmFyQ2xhc3NdXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0LyogRW1pdHMgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkICovXHJcblx0XHRyZXR1cm4gc25hY2tCYXJSZWYub25BY3Rpb24oKS5waXBlKG1hcCgoKSA9PiB7IH0pKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemVzIHRoZSBUaW55TUNFIGVkaXRvciB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlZGl0b3JDb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0IGVkaXRvciBzZXR0aW5nc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbml0RWRpdG9yKGVkaXRvckNvbmZpZzogYW55ID0ge30pIHtcclxuXHRcdC8qIE1lcmdlIHRoZSBwcm92aWRlZCBlZGl0b3IgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgKi9cclxuXHRcdE9iamVjdC5hc3NpZ24odGhpcy5lZGl0b3JDb25maWcsIHtcclxuXHRcdFx0LyogRGlzYWJsZSBwcm9tb3Rpb25zIGluIHRoZSBlZGl0b3IgKi9cclxuXHRcdFx0cHJvbW90aW9uOiBmYWxzZSxcclxuXHRcdFx0LyogVXNlIHRoZSBtaW5pbWl6ZWQgdmVyc2lvbiBvZiBUaW55TUNFICovXHJcblx0XHRcdHN1ZmZpeDogJy5taW4nLFxyXG5cdFx0XHQvKiBEaXNhYmxlIGRlZmF1bHQgVGlueU1DRSBza2luICovXHJcblx0XHRcdHNraW46IGZhbHNlLFxyXG5cdFx0XHQvKiBTZXQgZWRpdG9yIGhlaWdodCB0byAxNzBweCAqL1xyXG5cdFx0XHRoZWlnaHQ6ICcxNzBweCcsXHJcblx0XHRcdC8qIERpc2FibGUgbG9hZGluZyBleHRlcm5hbCBDU1MgZm9yIGVkaXRvciBjb250ZW50ICovXHJcblx0XHRcdGNvbnRlbnRfY3NzOiBmYWxzZSxcclxuXHRcdFx0LyogU2V0IHRoZSBwbHVnaW5zIHRvIGJlIHVzZWQgaW4gdGhlIGVkaXRvciAqL1xyXG5cdFx0XHRwbHVnaW5zOiB0aGlzLmVkaXRvclBsdWdpbnMsXHJcblx0XHRcdC8qIFNldCB0aGUgdG9vbGJhciBjb25maWd1cmF0aW9uICovXHJcblx0XHRcdHRvb2xiYXI6IHRoaXMuZWRpdG9yVG9vbGJhcixcclxuXHRcdFx0LyogQWx3YXlzIHBhc3RlIGNvbnRlbnQgYXMgcGxhaW4gdGV4dCAqL1xyXG5cdFx0XHRwYXN0ZV9hc190ZXh0OiB0cnVlLFxyXG5cdFx0XHQvKiBTZXQgdGhlIGVkaXRvciBsYW5ndWFnZSB0byBHZXJtYW4gKi9cclxuXHRcdFx0bGFuZ3VhZ2U6ICdkZScsXHJcblx0XHRcdC8qIFNwZWNpZnkgdGhlIFVSTCB0byBsb2FkIHRoZSBHZXJtYW4gbGFuZ3VhZ2UgZmlsZSAqL1xyXG5cdFx0XHRsYW5ndWFnZV91cmw6ICcvYXNzZXRzL3RpbnltY2UvbGFuZ3MvZGUuanMnLFxyXG5cdFx0XHQvKiBTZXQgdGhlIGJhc2UgVVJMIGZvciBkb2N1bWVudHMvZmlsZXMgdXNlZCBpbiB0aGUgZWRpdG9yICovXHJcblx0XHRcdGRvY3VtZW50X2Jhc2VfdXJsOiBgJHt0aGlzLmFwcFNldHRpbmcuYXBpVXJsfWZpbGUvYCxcclxuXHRcdFx0LyogRW5hYmxlIGF1dG9tYXRpYyB1cGxvYWRzIGZvciBmaWxlIGlucHV0cyAqL1xyXG5cdFx0XHRhdXRvbWF0aWNfdXBsb2FkczogdHJ1ZSxcclxuXHRcdFx0LyogVXNlIHJlbGF0aXZlIFVSTHMgZm9yIGxpbmtzIGFuZCBpbWFnZXMgKi9cclxuXHRcdFx0cmVsYXRpdmVfdXJsczogdHJ1ZSxcclxuXHRcdFx0LyogRGlzYWJsZSBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiByZWxhdGl2ZSBVUkxzIHRvIGFic29sdXRlIFVSTHMgKi9cclxuXHRcdFx0Y29udmVydF91cmxzOiBmYWxzZSxcclxuXHRcdFx0LyogRXh0ZW5kIHZhbGlkIEhUTUwgZWxlbWVudHMgdG8gYWxsb3cgc3BlY2lmaWMgYXR0cmlidXRlcyAqL1xyXG5cdFx0XHRleHRlbmRlZF92YWxpZF9lbGVtZW50czogJ3NwYW5baWR8Y2xhc3N8c3R5bGVdLCtAW2RhdGEtb3B0aW9uc10nLFxyXG5cdFx0XHQvKiBBbGxvdyBIVE1MIGluIG5hbWVkIGFuY2hvcnMgKi9cclxuXHRcdFx0YWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3I6IHRydWVcclxuXHRcdH0sIGVkaXRvckNvbmZpZyk7XHJcblxyXG5cdFx0LyogTWFyayB0aGUgZWRpdG9yIGFzIGluaXRpYWxpemVkICovXHJcblx0XHR0aGlzLmlzRWRpdG9ySW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyB0aGUgdGl0bGUgYW5kIHN1YnRpdGxlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbnUgYW5kIHJvdXRlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFRpdGxlcygpOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIHRoZSBtZW51IG9iamVjdCBpcyBhdmFpbGFibGUgKi9cclxuXHRcdGlmICh0aGlzLm1lbnUpIHtcclxuXHRcdFx0LyogU2V0IHRoZSBicm93c2VyIHRhYiB0aXRsZSB1c2luZyB0aGUgbWVudSB0aXRsZSwgaWYgYXZhaWxhYmxlICovXHJcblx0XHRcdHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMubWVudS50aXRsZSA/PyAnJyk7XHJcblx0XHRcdC8qIFVwZGF0ZSB0aGUgbG9jYWwgdGl0bGUgdmFyaWFibGUgZnJvbSB0aGUgdGl0bGUgc2VydmljZSAqL1xyXG5cdFx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHRcdC8qIElmIHRoZXJlIGFyZSBubyBzdWJtZW51IGl0ZW1zLCBleGl0IHRoZSBtZXRob2QgKi9cclxuXHRcdFx0aWYgKCF0aGlzLm1lbnUuaXRlbXMpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFRyeSB0byByZXRyaWV2ZSB0aGUgc3VidGl0bGUgZnJvbSB0aGUgVVJMIHBhcmFtZXRlcnMgKi9cclxuXHRcdFx0dmFyIHN1YnRpdGxlID0gdGhpcy5yb3V0ZT8uc25hcHNob3Q/LnBhcmFtTWFwPy5nZXQoJ3N1YnRpdGxlJyk7XHJcblx0XHRcdGlmIChzdWJ0aXRsZSkge1xyXG5cdFx0XHRcdC8qIEF0dGVtcHQgdG8gZGVjb2RlIHRoZSBzdWJ0aXRsZSBpZiBpdCdzIEJhc2U2NCBlbmNvZGVkICovXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHRoaXMuc3VidGl0bGUgPSB3aW5kb3cuYXRvYihzdWJ0aXRsZSk7XHJcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0LyogSWYgZGVjb2RpbmcgZmFpbHMsIHVzZSB0aGUgcmF3IHN1YnRpdGxlICovXHJcblx0XHRcdFx0XHR0aGlzLnN1YnRpdGxlID0gc3VidGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8qIEdldCB0aGUgY3VycmVudCByb3V0ZSBwYXRoLCBleGNsdWRpbmcgcXVlcnkgcGFyYW1ldGVycyBhbmQgbWF0cml4IHBhcmFtZXRlcnMgKi9cclxuXHRcdFx0XHRsZXQgY3VycmVudFJvdXRlID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblxyXG5cdFx0XHRcdC8qIEVuc3VyZSB0aGUgcm91dGUgZG9lc24ndCBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggKi9cclxuXHRcdFx0XHRjdXJyZW50Um91dGUgPSBjdXJyZW50Um91dGUuZW5kc1dpdGgoJy8nKSA/IGN1cnJlbnRSb3V0ZS5zdWJzdHJpbmcoMCwgLTEpIDogY3VycmVudFJvdXRlO1xyXG5cclxuXHRcdFx0XHQvKiBGaW5kIHRoZSBzdWJtZW51IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IHJvdXRlICovXHJcblx0XHRcdFx0dmFyIHN1Ym1lbnUgPSB0aGlzLm1lbnUuaXRlbXMuZmlsdGVyKHggPT4geC5wYXRoID09IGN1cnJlbnRSb3V0ZSlbMF07XHJcblx0XHRcdFx0aWYgKHN1Ym1lbnUpIHtcclxuXHRcdFx0XHRcdC8qIFNldCB0aGUgc3VidGl0bGUgdG8gdGhlIG1hdGNoaW5nIHN1Ym1lbnUncyB0aXRsZSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zdWJ0aXRsZSA9IHN1Ym1lbnUudGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgY29tbWFuZHMgYW5kIGEgc3RhcnRpbmcgcG9pbnQuXHJcblx0ICogQHBhcmFtIGNvbW1hbmRzIEFycmF5IG9mIGNvbW1hbmRzIHJlcHJlc2VudGluZyB0aGUgcm91dGUgdG8gbmF2aWdhdGUgdG9cclxuXHQgKiBAcGFyYW0gcXVlcnlQYXJhbXMgT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBmcmFnbWVudCBPcHRpb25hbCBmcmFnbWVudCAoYW5jaG9yKSB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBwcmVzZXJ2ZUZyYWdtZW50IFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgZnJhZ21lbnQgaW4gdGhlIFVSTFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIHF1ZXJ5UGFyYW1zPzogYW55LCBmcmFnbWVudD86IHN0cmluZywgcHJlc2VydmVGcmFnbWVudD86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XHJcblx0XHRcdC8qIE1lcmdlIGFueSBhZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgcmV0dXJuVXJsICovXHJcblx0XHRcdHF1ZXJ5UGFyYW1zOiBPYmplY3QuYXNzaWduKHsgcmV0dXJuVXJsOiB0aGlzLmN1cnJlbnRSb3V0ZSB9LCBxdWVyeVBhcmFtcyB8fCB7fSksXHJcblx0XHRcdC8qIFNldCB0aGUgZnJhZ21lbnQsIGlmIHByb3ZpZGVkICovXHJcblx0XHRcdGZyYWdtZW50OiBmcmFnbWVudCxcclxuXHRcdFx0LyogUHJlc2VydmUgdGhlIGZyYWdtZW50IGZyb20gdGhlIHByZXZpb3VzIFVSTCBpZiBzcGVjaWZpZWQgKi9cclxuXHRcdFx0cHJlc2VydmVGcmFnbWVudDogcHJlc2VydmVGcmFnbWVudCxcclxuXHRcdFx0LyogTWFrZSB0aGUgcm91dGUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcm91dGUgaWYgYXBwbGljYWJsZSAqL1xyXG5cdFx0XHRyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnQgYW4gb2JqZWN0IHRvIEh0dHBIZWFkZXJzLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGhlYWRlcnNcclxuXHQgKiBAcmV0dXJucyBIdHRwSGVhZGVycyBvYmplY3QgY29udGFpbmluZyB0aGUga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIGJvZHlcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdG9IdHRwSGVhZGVycyhib2R5OiBhbnkpOiBIdHRwSGVhZGVycyB7XHJcblx0XHQvKiBJZiB0aGUgYm9keSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgcmV0dXJuIGVtcHR5IGhlYWRlcnMgKi9cclxuXHRcdGlmICghYm9keSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEh0dHBIZWFkZXJzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ29udmVydCB0aGUgb2JqZWN0J3MgcHJvcGVydGllcyB0byBIdHRwSGVhZGVycywgZmlsdGVyaW5nIG91dCBudWxsIG9yIGVtcHR5IHZhbHVlcyAqL1xyXG5cdFx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGJvZHkpXHJcblx0XHRcdC5maWx0ZXIoa2V5ID0+IGJvZHlba2V5XSAhPSBudWxsICYmIGJvZHlba2V5XSAhPSAnJylcclxuXHRcdFx0LnJlZHVjZSgocCwga2V5KSA9PiBwLnNldChrZXksIGJvZHlba2V5XSksIG5ldyBIdHRwSGVhZGVycygpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlcyBhbmQgZm9ybWF0cyBIVFRQIHJlc3BvbnNlIGVycm9ycy5cclxuXHQgKiBAcGFyYW0gZXJyb3JzIFRoZSBlcnJvciBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgSFRUUCByZXNwb25zZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBwYXJzZUVycm9ycyhlcnJvcnM6IGFueSk6IHZvaWQge1xyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgZXJyb3JzIGFycmF5IGFuZCByZXNldCBsb2FkaW5nL3NhdmluZyBpbmRpY2F0b3JzICovXHJcblx0XHR0aGlzLmVycm9ycyA9IFtdO1xyXG5cdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuXHJcblx0XHQvKiBJZiB0aGVyZSBhcmUgZXJyb3JzLCBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgYWRkIHRoZW0gdG8gdGhlIGVycm9ycyBhcnJheSAqL1xyXG5cdFx0aWYgKGVycm9ycykge1xyXG5cdFx0XHRPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goZWwgPT4ge1xyXG5cdFx0XHRcdGxldCBlcnJvciA9IGVycm9yc1tlbF07XHJcblx0XHRcdFx0LyogSWYgdGhlIGVycm9yIGlzIGFuIGFycmF5LCBpdGVyYXRlIG92ZXIgdGhlIGFycmF5IGFuZCBhZGQgZWFjaCBlcnJvciAqL1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGVycm9yKSkge1xyXG5cdFx0XHRcdFx0ZXJyb3IuZm9yRWFjaChlcnIgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ycy5wdXNoKGVycik7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRcdFx0LyogSWYgdGhlIGVycm9yIGlzIGEgc3RyaW5nLCBhZGQgaXQgZGlyZWN0bHkgdG8gdGhlIGVycm9ycyBhcnJheSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5lcnJvcnMucHVzaChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZSBIdHRwIG9wZXJhdGlvbiB0aGF0IGZhaWxlZC5cclxuXHQgKiBMZXQgdGhlIGFwcCBjb250aW51ZS5cclxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uIC0gbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHRoYXQgZmFpbGVkXHJcblx0ICogQHBhcmFtIHJlc3VsdCAtIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBhcyB0aGUgb2JzZXJ2YWJsZSByZXN1bHRcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaGFuZGxlRXJyb3I8VD4ob3BlcmF0aW9uID0gJ29wZXJhdGlvbicsIHJlc3VsdD86IFQpIHtcclxuXHRcdHJldHVybiAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8VD4gPT4ge1xyXG5cclxuXHRcdFx0LyogUGFyc2UgdGhlIGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpO1xyXG5cclxuXHRcdFx0LyogTG9nIHRvIGNvbnNvbGUgKi9cclxuXHRcdFx0dGhpcy53YXJuKGAke29wZXJhdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XHJcblxyXG5cdFx0XHQvKiBMZXQgdGhlIGFwcCBrZWVwIHJ1bm5pbmcgYnkgcmV0dXJuaW5nIGFuIGVtcHR5IHJlc3VsdCAqL1xyXG5cdFx0XHRyZXR1cm4gb2YocmVzdWx0IGFzIFQpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZ3MgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZFxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGxvZ1xyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgbG9nXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGxvZyhtZXNzYWdlOiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xyXG5cdFx0LyogQ2hlY2sgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkICovXHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHQvKiBMb2cgdGhlIG1lc3NhZ2UgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gdGhlIGNvbnNvbGUgKi9cclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSwgb3B0aW9uYWxQYXJhbXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9ncyBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZSBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWRcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlIHRvIGxvZ1xyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgd2FybmluZ1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSB7XHJcblx0XHQvKiBDaGVjayBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWQgKi9cclxuXHRcdGlmICh0aGlzLmRlYnVnKSB7XHJcblx0XHRcdC8qIExvZyB0aGUgd2FybmluZyBtZXNzYWdlIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBjb25zb2xlICovXHJcblx0XHRcdGNvbnNvbGUud2FybihtZXNzYWdlLCBvcHRpb25hbFBhcmFtcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDbGVhbnMgdGhlIG9iamVjdCBieSByZW1vdmluZyBwcm9wZXJ0aWVzIHRoYXQgYXJlIG51bGwsIHVuZGVmaW5lZCwgb3IgZW1wdHkgc3RyaW5nc1xyXG5cdCAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBjbGVhblxyXG5cdCAqIEByZXR1cm5zIFRoZSBjbGVhbmVkIG9iamVjdFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjbGVhbihvYmo6IGFueSk6IGFueSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCAqL1xyXG5cdFx0XHRmb3IgKHZhciBwcm9wTmFtZSBpbiBvYmopIHtcclxuXHRcdFx0XHQvKiBJZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkLCBvciBhbiBlbXB0eSBzdHJpbmcsIGRlbGV0ZSBpdCAqL1xyXG5cdFx0XHRcdGlmIChvYmpbcHJvcE5hbWVdID09PSBudWxsIHx8IG9ialtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCB8fCBvYmpbcHJvcE5hbWVdID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRkZWxldGUgb2JqW3Byb3BOYW1lXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdC8qIEVycm9yIGhhbmRsaW5nIGNhbiBiZSBkb25lIGhlcmUgaWYgbmVjZXNzYXJ5ICovXHJcblx0XHR9XHJcblxyXG5cdFx0LyogUmV0dXJuIHRoZSBjbGVhbmVkIG9iamVjdCAqL1xyXG5cdFx0cmV0dXJuIG9iajtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhbml0aXplcyB0aGUgc3BlY2lmaWVkIG9iamVjdCBieSByZW1vdmluZyBmYWxzeSB2YWx1ZXMgYW5kIGNvbnZlcnRpbmcgc3RyaW5nIG51bWJlcnMgdG8gbnVtYmVyc1xyXG5cdCAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBzYW5pdGl6ZVxyXG5cdCAqIEBwYXJhbSBpZ25vcmUgUHJvcGVydGllcyB0byBpZ25vcmUgZHVyaW5nIHRoZSBzYW5pdGl6YXRpb25cclxuXHQgKiBAcmV0dXJucyBUaGUgc2FuaXRpemVkIG9iamVjdFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzYW5pdGl6ZU9iamVjdChvYmo6IGFueSwgLi4uaWdub3JlOiBzdHJpbmdbXSk6IGFueSB7XHJcblx0XHQvKiBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXMgYW5kIGZpbHRlciBvdXQgZmFsc3kgdmFsdWVzICovXHJcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqKVxyXG5cdFx0XHQuZmlsdGVyKHggPT4gb2JqW3hdKVxyXG5cdFx0XHQvKiBJZ25vcmUgcHJvcGVydGllcyB0aGF0IGFyZSBpbiB0aGUgaWdub3JlIGxpc3QgKGNhc2UgaW5zZW5zaXRpdmUpICovXHJcblx0XHRcdC5maWx0ZXIoeCA9PiAhKGlnbm9yZSB8fCBbXSkubWFwKHggPT4geC50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyh4LnRvTG93ZXJDYXNlKCkpKVxyXG5cdFx0XHQvKiBDb252ZXJ0IHN0cmluZyBudW1iZXJzIHRvIGFjdHVhbCBudW1iZXJzICovXHJcblx0XHRcdC5yZWR1Y2UoKHJlc3VsdDogYW55LCBrZXkpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRba2V5XSA9IGlzTmFOKCtvYmpba2V5XSkgPyBvYmpba2V5XSA6ICtvYmpba2V5XTtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9LCB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVja3MgaWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGFueSB0ZXh0IGluIHRoZSBkb2N1bWVudFxyXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGV4dCBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlIGZhbHNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGlzVGV4dFNlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT5cclxuXHRcdC8qIFVzZSB0aGUgd2luZG93LmdldFNlbGVjdGlvbiBBUEkgdG8gY2hlY2sgaWYgdGV4dCBpcyBzZWxlY3RlZCAqL1xyXG5cdFx0KHdpbmRvdz8uZ2V0U2VsZWN0aW9uKCk/LnRvU3RyaW5nKCk/Lmxlbmd0aCA/PyAwKSA+IDA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgY2FsbGJhY2sgdXNlZCBmb3IgYW55IGN1c3RvbSBjbGVhbnVwIHRoYXQgbmVlZHMgdG8gb2NjdXIgd2hlbiB0aGUgaW5zdGFuY2UgaXMgZGVzdHJveWVkXHJcblx0ICovXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHQvKiBVbnN1YnNjcmliZSBmcm9tIGFsbCBNYXRFeHBhbnNpb25QYW5lbCBzdWJzY3JpcHRpb25zICovXHJcblx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHggPT4geC51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcbn0iXX0=
900
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9iYXNlL2NvbXBvbmVudHMvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFRLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SixPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBeUMsTUFBTSxFQUErQixNQUFNLGlCQUFpQixDQUFDO0FBQzdILE9BQU8sRUFBNEIsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0Is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YTs4R0FBYixhQUFhLHVMQWlNcEIsaUJBQWlCLDJCQUFVLFVBQVUsNkRBTXJDLGlCQUFpQjs7MkZBdk1WLGFBQWE7a0JBRGxDLFNBQVM7bUhBOENGLDJCQUEyQjtzQkFEakMsS0FBSztnQkFrSEMsTUFBTTtzQkFEWixNQUFNO2dCQXFDRyxpQ0FBaUM7c0JBRDFDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU8zQywwQkFBMEI7c0JBRG5DLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVHlwZSwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgU2Nyb2xsLCBVcmxTZWdtZW50LCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRleHRIZWxwZXIgfSBmcm9tICcuLi8uLi9jb21tb24vY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFwcFNldHRpbmcgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2FwcC1zZXR0aW5nJztcclxuaW1wb3J0IHsgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi8uLi9jb21tb24vc2VydmljZXMvc2VydmljZS1sb2NhdG9yJztcclxuaW1wb3J0IHsgVmREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlhbG9ncy9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFZkTWVkaWFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbWVkaWEvc2VydmljZXMvbWVkaWEuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi8uLi9tZW51L21vZGVscy9tZW51JztcclxuaW1wb3J0IHsgVGFza0RpYWxvZ0RhdGEgfSBmcm9tICcuLi9iYXNlLm1vZHVsZSc7XHJcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4uL2NvbnN0YW50cy9jb21tb24nO1xyXG5pbXBvcnQgeyBHbG9iYWxSb2xlcyB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtcm9sZXMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gJy4uL2VudW1zL21lc3NhZ2UtdHlwZSc7XHJcbmltcG9ydCB7IEF1dGhIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2F1dGgtaGVscGVyJztcclxuaW1wb3J0IHsgSUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2liYXNlLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlcic7XHJcbmltcG9ydCB7IFZkVGFza0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vdGFzay1kaWFsb2cvdGFzay1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBBIGJhc2UgbGlzdCBjb21wb25lbnQgZm9yIGNvbXBvbmVudHMgd2l0aCBwYWdpbmF0aW9uIHN1cHBvcnQuXHJcbiAqL1xyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJQmFzZUNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHQvKipcclxuXHQgKiBBcHBsaWNhdGlvbiBzZXR0aW5ncy5cclxuXHQgKi9cclxuXHRwdWJsaWMgYXBwU2V0dGluZzogQXBwU2V0dGluZztcclxuXHJcblx0LyoqXHJcblx0ICogR2VuZXJhbCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB3aXRoIGEgZmxleGlibGUgdHlwZSB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXHJcblx0ICovXHJcblx0cHVibGljIHNldHRpbmdzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWVudSBpdGVtcyBmb3IgbmF2aWdhdGlvbi5cclxuXHQgKi9cclxuXHRwdWJsaWMgbWVudT86IE1lbnU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hbWUgb2YgdGhlIHByb2plY3QsIHVzZWQgZm9yIGRpc3BsYXkgb3IgbG9nZ2luZyBwdXJwb3Nlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgcHJvamVjdE5hbWU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRpdGxlIG9mIHRoZSBjdXJyZW50IHBhZ2UsIGRpc3BsYXllZCBpbiB0aGUgcGFnZSBoZWFkZXIuXHJcblx0ICovXHJcblx0cHVibGljIHRpdGxlPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBTdWJ0aXRsZSBvZiB0aGUgY3VycmVudCBvdXRsZXQsIHVzZWQgZm9yIGFkZGl0aW9uYWwgcGFnZSBjb250ZXh0LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdWJ0aXRsZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgZHVtbXkgZGF0YSBpcyB1c2VkIGZvciB0ZXN0aW5nLCBhbmQgZGVidWcgbG9ncyBhcmUgZW5hYmxlZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHQgXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgYSBsb2FkaW5nIHByb2Nlc3MgaXMgYWN0aXZlLCBvZnRlbiB1c2VkIHRvIHNob3cgYSBsb2FkaW5nIHNwaW5uZXIuXHJcblx0ICovXHJcblx0cHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gaGFuZGxlIGNoYW5nZXMgaW4gZXhwYW5zaW9uIHBhbmVscy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBoYW5kbGVFeHBhbnNpb25QYW5lbENoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBhIHNhdmUgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgX2lzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIGdldCBpc1NhdmluZygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzU2F2aW5nIHx8IHRoaXMuaXNMb2FkaW5nOyB9XHJcblx0cHVibGljIHNldCBpc1NhdmluZyhpc1NhdmluZzogYm9vbGVhbikgeyB0aGlzLmlzTG9hZGluZyA9IHRoaXMuX2lzU2F2aW5nID0gaXNTYXZpbmc7IH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVkaXRvciBoYXMgYmVlbiBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNFZGl0b3JJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTdG9yZXMgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgcmVxdWVzdHMgb3Igb3BlcmF0aW9ucy5cclxuXHQgKi9cclxuXHRwdWJsaWMgZXJyb3JzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogVXRpbGl0eSB0byBldmFsdWF0ZSBtZWRpYSBxdWVyaWVzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNjcmVlbiBvciB3aW5kb3cgc2l6ZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgbWVkaWE6IFZkTWVkaWFTZXJ2aWNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBMaXN0IG9mIHBlcm1pdHRlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIHVwbG9hZCBvciBzZWxlY3Rpb24uXHJcblx0ICovXHJcblx0cHVibGljIGFsbG93ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IENvbW1vbi5hbGxvd2VkRXh0ZW5zaW9ucztcclxuXHJcblx0LyoqXHJcblx0ICogUGx1Z2lucyBlbmFibGVkIGluIHRoZSBUaW55TUNFIGVkaXRvci5cclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdG9yUGx1Z2luczogc3RyaW5nID0gQ29tbW9uLmVkaXRvclBsdWdpbnM7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvb2xiYXIgY29uZmlndXJhdGlvbiBmb3IgVGlueU1DRSBlZGl0b3IuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvclRvb2xiYXI6IHN0cmluZyA9IENvbW1vbi5lZGl0b3JUb29sYmFyO1xyXG5cclxuXHQvKipcclxuXHQgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBlZGl0b3IuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvckNvbmZpZzogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcnZpY2UgZm9yIG5hdmlnYXRpb24gYW5kIFVSTCBtYW5pcHVsYXRpb24uXHJcblx0ICovXHJcblx0cHVibGljIHJvdXRlcjogUm91dGVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBPcHRpb25hbCBoYXNoIHZhbHVlIGFwcGVuZGVkIHRvIFVSTHMgZm9yIGJvb2ttYXJraW5nIG9yIHN0YXRlIG1hbmFnZW1lbnQuXHJcblx0ICovXHJcblx0cHVibGljIHVybEhhc2g/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENTUyBjbGFzcyBuYW1lKHMpIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBQZXJtaXNzaW9uIGZsYWcgZm9yIGNyZWF0aW5nIG5ldyBlbnRyaWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYW5DcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogUGVybWlzc2lvbiBmbGFnIGZvciB1cGRhdGluZyBleGlzdGluZyBlbnRyaWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYW5VcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogUGVybWlzc2lvbiBmbGFnIGZvciBkZWxldGluZyBlbnRyaWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYW5EZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRnVsbCBwYXRoIG9mIHRoZSBjdXJyZW50IHJvdXRlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50Um91dGU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJhc2UgcGF0aCBvZiB0aGUgY3VycmVudCByb3V0ZSwgZXhjbHVkaW5nIHNwZWNpZmljIHBhcmFtZXRlcnMgb3Igc3ViLXBhdGhzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50QmFzZVJvdXRlPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBVUkwgdG8gbmF2aWdhdGUgYmFjayB0byBhZnRlciBzYXZpbmcgY2hhbmdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgcmV0dXJuVXJsPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGF1dGhlbnRpY2F0ZWQgdXNlci5cclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudFVzZXI6IEF1dGhVc2VyID0gQXV0aEhlbHBlci51c2VyO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgYWRtaW4gcHJpdmlsZWdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNBZG1pbiA9IEF1dGhIZWxwZXIuaGFzUm9sZShHbG9iYWxSb2xlcy5BZG1pbmlzdHJhdG9yKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGNsaWVudCBhZG1pbiBwcml2aWxlZ2VzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0NsaWVudEFkbWluID0gQXV0aEhlbHBlci5oYXNSb2xlKEdsb2JhbFJvbGVzLkNsaWVudEFkbWluaXN0cmF0b3IpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgZGVwYXJ0bWVudCBhZG1pbiBwcml2aWxlZ2VzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0RlcGFydG1lbnRBZG1pbiA9IEF1dGhIZWxwZXIuaGFzUm9sZShHbG9iYWxSb2xlcy5EZXBhcnRtZW50QWRtaW5pc3RyYXRvcik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZXIgZm9yIHJlbG9hZCBhY3Rpb25zLCB1c2VmdWwgZm9yIHJlZnJlc2hpbmcgZGF0YS5cclxuXHQgKi9cclxuXHRAT3V0cHV0KClcclxuXHRwdWJsaWMgcmVsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBzZXR0aW5nIHRoZSBkb2N1bWVudCdzIHRpdGxlLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0aXRsZVNlcnZpY2U6IFRpdGxlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBkaXNwbGF5aW5nIHNuYWNrIGJhciBub3RpZmljYXRpb25zLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IE1hdFNuYWNrQmFyO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBkaXNwbGF5aW5nIGNvbmZpcm1hdGlvbiBhbmQgcHJvbXB0IGRpYWxvZ3MuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IFZkRGlhbG9nU2VydmljZTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VydmljZSBmb3Igb3BlbmluZyBtb2RhbCBkaWFsb2dzLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZztcclxuXHJcblx0LyoqXHJcblx0ICogU2VydmljZSBmb3IgbWFuYWdpbmcgYnJvd3NlciBsb2NhdGlvbiBhbmQgaGlzdG9yeS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbG9jYXRpb246IExvY2F0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzZXRzIGEgVVJMIGhhc2ggZm9yIG5hdmlnYXRpb24gc3RhdGUuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFVybEhhc2g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBRdWVyeSBsaXN0IGZvciBhY2Nlc3NpbmcgZXhwYW5zaW9uIHBhbmVsIGVsZW1lbnRzIGFzIERPTSByZWZlcmVuY2VzLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oTWF0RXhwYW5zaW9uUGFuZWwsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG5cdHByb3RlY3RlZCBtYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFF1ZXJ5IGxpc3QgZm9yIGFjY2Vzc2luZyBNYXRFeHBhbnNpb25QYW5lbCBjb21wb25lbnQgcmVmZXJlbmNlcy5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKE1hdEV4cGFuc2lvblBhbmVsKVxyXG5cdHByb3RlY3RlZCBtYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD86IFF1ZXJ5TGlzdDxNYXRFeHBhbnNpb25QYW5lbD47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN1YnNjcmlwdGlvbnMgZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzLCBtYW5hZ2VkIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgYSBiZWVwIGF1ZGlvIG9iamVjdCBhbmQgbG9hZCBhIHNvdW5kIGZpbGUgZnJvbSBhIGRhdGEgVVJMLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBiZWVwQXVkaW8gPSBuZXcgQXVkaW8oXCJkYXRhOmF1ZGlvL3dhdjtiYXNlNjQsLy91UVJBQUFBV01TTHdVSVlBQXNZa1hnb1F3QUVhWUxXZmtXZ0FJMHdXcy9JdEFBQUdEZ1l0QWdBeU4rUVdhQUFpaHdNV200RzhRUVJEaU1jQ0JjSDNDYytDRHYvN3hBNFR2aDlSei95OFFBREJ3TVdnUUFaRy9JTE5BQVJRNEdMVGNEZUlJSWh4R09CQXVEN2hPZkJCMy85NGdjSjN3K281LzVlSUFJQUFBVndXZ1FBVlEyT1JhSVF3RU1BSmlEZzk1RzRuUUw3bVFWV0k2R3dSY2ZzWkFjc0trSnZ4Z3hFanpGVWdmSG9TUTlRcTdLTndxSHd1QjEzTUE0YTFxL0RtQnJIZ1BjbWppR29oLy9Fd0M1bkdQRW1TNFJjZmtWS09oSmYrV09nb3hKY2xGejNrZ24vL2RCQSt5YTFHaHVyTm44emIvLzlOTnV0TnVoejMxZi8vLy85dnQvLy96K0lkQUVBQUFLNExRSUFLb2JISXRFSVlDR0FFeEJ3ZThqY1RvRjl6SUtyRWREWUl1UDJNZ09XRlNFMzR3WWlSNWlxUVBqMEpJZW9WZGxHNFZENFhBNjdtQWNOYTFmaHpBMWp3SHVUUnhEVVEvL2lZQmN6akhpVEpjSXVQeUtsSFFrdi9MSFFVWWt1U2k1N3lRVC8vdWdnZlpOYWpRM1ZteitadC8vK21tM1dtM1E1NzZ2Ly8vLyszMi8vLzUvRU9nQUFBRFZnaFFBQUFBQS8vdVFaQVVBQjFXSTBQWnVnQUFBQUFvUXdBQUFFazNuUmQycUFBQUFBQ2lEZ0FBQUFBQUFCQ3FFRVFSTENnd3BCR01sSmtJejhqS2hHdmo0azZqelJucWFzTktJZW9oNWdJN0JKYUMxQTFBb05CakpnYnlBcFZTNElEbFpnRFU1V1VBeEVLRE5tbUFMSHpacDBGa3oxRk1UbUdGbDFGTUV5b2RJYXZjQ0FVSERXcktBSUE0YWEyb0NnSUxFQnVwWmdIdkFoRUJjWjZqb1FCeFM3NkFnY2NyRmxjekJ2S0xDMFFJMmNCb0NGdmZUREFvN2VvT1FJbnFEUEJ0dnJERVpCTllONXh3Tnd4UVJmdzhaUTV3UVZMdk84T1lVK21IdkZMbERoMDVNZGc3QlQ2WXJSUHBDQnpuTUIyci8veEtKanl5T2grY0ltcjIvNGRvc2N3RDZuZVpqdVpSNEFnQUFCWUFBQUFCeTF4Y2RRdHhZQllZWmRpZmtVRGd6elhhWG45OFowb2k5SUxVNW1CakZBTm1Sd2xWSjMvNmpZREFteGFpREczLzZ4alFRQ0NLa1JiLzZrZy93VytrU0o1Ly9yTG9ia0xTaUttcVAvMGlrSnVEYVNhU2YvNkppTFlMRVluVy8ra1hnMVdSVkpMLzlFbVExWVpJc3YvNlF6d3k1cWs3Lyt0RVUwbmtsczMveklVTVBLTlgvNnlaTGYra0ZnQWZnR3lMRkFVd1kvL3VRWkFVQUJjZDVVaU5QVlhBQUFBcEFBQUFBRTBWWlFLdzlJU0FBQUNnQUFBQUFWUUl5Z0lFbFZyRmtCUytKaGkrRUF1dStsS0FrWVVFSXNtRUFFb01lRG1DRVRNdmZTSFRHa0Y1UldIN2t6L0VTSFdQQXEva2NDUmhxQnRNZG9rUGRNN3ZpbDdSRzk4QTJzYzd6TzZadlRkTTdwbU9VQVpUbkpXK05YeHFtZDQxZHFKNm1MVFh4clBwblY4YXZhSWY1U3ZMN3BuZFB2UHBuZEpSOUt1dThmZVB2dWl1aG9yZ1dqcDdNZi9QUmp4Y0ZDUERrVzMxc3Jpb0NFeGl2djlsY3dLRWFIc2YvN293MkZsMVQvOVJrWGdFaFlFbEFvQ0xGdE1Bcnh3aXZESkorYlIxSFRLSmRsRW9URUxDSXFnRXdWR1NRK2hJbTBOYks4V1hjVEVJMFVQb2EyTmJHNHkySzAwSkVXYlphdkpYa1lhcW85Q1JIUzU1RmNaVGpLRWszTktvQ1lVblNRMHJXeHJaYkZLYktJaE9LUFplMWNKS3paU2FRckl5VUxIRFptVjVLNHh5U3NEUktXT3J1YW5HdGpMSlhGRW13YUliRExYMGhJUEJVUVBWRlZrUWtEb1VOZlNvRGdRR0tQZWtveGVHekE0RFV2bm40Ynh6Y1pydEp5aXBLZlBOeTV3Kzlsblh3Z3FzaXlITmVTVnBlbXc0YldiOXBzWWVxLy91UVpCb0FCUXQ0eU1WeFlBSUFBQWtRb0FBQUh2WXBMNW02QUFnQUFDWERBQUFBRDU5amJsVGlyUWU5dXBGc21aYnBNdWR5N0x6MVgxRFlzeE9PU1dwZlBxTlgyV3FrdEswRE12dUd3bGJOajQ0VGxlTFBRK0dzZmIrR09XT0tKb0lyV2IzY0lNZWVPTjZsejJ1bVRxTVhWOE1qMzB5V1Bwam9TYTl1aks4U3llSlA1eTVtT1cxRDZodkxlcGV2ZUVBRURvMG1nQ1JDbE9FZ0FOdjNCOWE2ZmlrZ1VTdS9EbUFNQVRyR3g3bm5nNXA1aWltUE5ac2ZRTFlCMnNETElrelJLWk9IR0FhVXlEY3BGQlNMRzlNQ1FBTGdBSWdRczJZdW5Pc3pMU0F5UVlQVkMyWWRHR2VIRDJkVGRKazFwQUhHQVdEam5rY0xLRnltUzNSUVpUSW56eVNvQndNRzBRdWVDM2dNc0NFWXhVcWxyY3hLNmsxTFFRY3NteVllUVBkQzJZZnVHUEFTQ0JrY1ZNUVFxcFZKc2h1aTF0a1hRSlFWME9YR0FaTVhTT0VFQlJpclhiVlJRVzd1Z3E3SU03clBXU1p5RGxNM0l1TkVreHpDT0owbnkyVGhOa3lSYWkxYjZldi8vM2R6Tkd6TmIvLzR1QXZIVDVzVVJjWkNGY3VLTGhPRnM4bUxBQUVBdDRVV0FBSUFCQUFBQUFCNHFiSG8wdElqVmtVVS8vdVFaQXdBQmZTRnozWnFRQUFBQUFuZ3dBQUFFMUhqTXAycUFBQUFBQ1pEZ0FBQUQ1VWtURTFVZ1pFVUV4cVl5bk4xcVp2cUlPUkVFRm1CY0pRa3dkeGlGdHcwcUVPa0dZZlJEaWZCdWk5TVFnNFFBSEFxV3RBV0hvQ3h1MVlmNFZmV0xQSU0ybUhERnNiUUVWR3d5cVFvUWN3bmZIZUlrTnQ5WW5raWFTMW9penljcUpyeDRLT1FqYWhaeFdiY1pnenRqMmM0OW5LbWtJZDQ0UzcxajBjOGVWOXlESzZ1UFJ6eDVYMThlRHZqdlE2eUtvOVpTUzZsLy84ZWxlUEsvTGYvL0lJbnJPRi9GdkRvQURZQUdCTUdiN0Z0RXJtNU1YTWxtUEFKUVZnV3RhN1p4MmdvKzh4SjBVaUNiOExISGRmdFd5TEpFMFFJQUlzSStVYlh1NjdkWk1qbWdER0NHbDFIK3ZwRjROU0Rja1NJa2s3VmQrc3hFaEJRTVJVOGovMTJVSVJoelNhVWRRK3JRVTVrR2VGeG0raGIxb2g2cFdXbXYzdXZtUmVEbDBVbnZ0YXBWYUl6bzFqWmJmL3BENkVsTHFTWCtyVW1PUU5wSkZhL3Irc2E0ZS9wQmxBQUJvQUFBQUEzQ1VnU2hMZEdJeHNZN0FVQUJQUnJnQ0FCZER1UTVHQzdEcVBRQ2diYkpVQW9SU1VqK05JRWlnMFlmeVdVaG8xVkJCQkEvL3VRWkI0QUJaeDV6Zk1ha2VBQUFBbXdBQUFBRjVGM1AwdzlHdEFBQUNmQUFBQUF3TGhNRG1BWVdNZ1ZFRzFVMEZJR0NCZ1hCWEF0Zk1IMTAwMDBFRUVFRUVDVUJZbG4wM1RUVGROQkRab3BvcFl2clRUZE5hMzI1bUltTmczVFRQVjlxM3BtWTB4b082YnYzcjAweStJREdpZC85YWFhWlRHTXVqOW1wdTlNcGlvMWRYcnI1SEVSVFpTbXFVMzZBM0N1bXpOLzlSb2J2L1h4NHY5aWprU1JTTkxRaEFXdW1hcDgyV1JTQlVxWFN0Vi9ZY1MrWFZMblNTK1dMRHJvcUFyRmtNRXNBUytlV21yVXpyTzBvRW1FNDBSbE1aNStPRElrQXlLQUdVd1ozbVZLbWNhbWNKbk1XMjZNUlBnVXc2aitMa2h5SEdWR1lqU1VVS05wdUpVUW9PSUF5RHZFeUc4UzV5Zks2ZGhaYzBUeDFLSS9ndmlLTDZxdnZGczErYld0YXo1OHVVTm5yeXE2a3Q1UnpPQ2tQV2xWcVZYMmEvRUVCVWRVMUtyWExmNDBHb2lpRlhLLy8vcXBvaURYck9ncURSMzhKQjBidzdTb0wrWkI5bzFSQ2tRalEyQ0JZWktkLytWSnhaUlJabHFTa0tpd3MwV0Z4VXlDd3NLaU15N2hVVkZoSWFDck5Rc0trVElzTGl2d0tLaWdzajhYWWx3dC9XS2kyTjRkLy91UVJDU0FBalVSTklIcE1aQkdZaWFRUFNZeUFBQUJMQUFBQUFBQUFDV0FBQUFBcFVGL01nKzBhb2hTSVJvYkJBc01sTy8vS2s0c29vc3kxSlNGUllXYUxDNHFaQllXRlJHWmR3cUtpd2tOQlZtb1dGU0prV0Z4WDRGRlJRV1IrTHNTNFcvckZSYi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1ZFRkhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVTI5MWJtUmliM2t1WkdVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNakF3TkdoMGRIQTZMeTkzZDNjdWMyOTFibVJpYjNrdVpHVUFBQUFBQUFBQUFDVT1cIik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBhIHdhcm4gYXVkaW8gb2JqZWN0IGFuZCBsb2FkIGEgc291bmQgZmlsZSBmcm9tIGEgZGF0YSBVUkwuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHdhcm5BdWRpbyA9IG5ldyBBdWRpbyhcImRhdGE6YXVkaW8vbXAzO2Jhc2U2NCwvL3VReEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBV0dsdVp3QUFBQThBQUFBSEFBQUtZd0FwS1NrcEtTa3BLU2twS1NrcEtVMU5UVTFOVFUxTlRVMU5UVTFOZDNkM2QzZDNkM2QzZDNkM2QzZUNnb0tDZ29LQ2dvS0Nnb0tDZ29LeXNyS3lzckt5c3JLeXNyS3lzdGJXMXRiVzF0YlcxdGJXMXRiVy8vLy8vLy8vLy8vLy8vLy8vLzhBQUFBNVRFRk5SVE11TVRBd0FxVUFBQUFBTG40QUFCUkdKQU1mUWdBQVJnQUFDbU9LbHVRYkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLy91QXhBQUFDVlJMWk5TUmdBUENRaXozTTBBQUFJQUFyQW1DWlBwQUNBQUFRTVZEUE5HalJ6TC9pSWdHTGYrdTRnRUhSQUQ0UDRPQWdHTUh3ZkIvVUNBWTRQaC9nZzcwY1FBL3djREdvSHcvbEFRZHhPL2lCM0I4UDZnUWQvejRBQUFCYUxVa2xlS1lBQUFBQUNSd0Z3d0VaWEM4NVJpK28rWlhKME91Q1hnb0JVRFFYUEMrNFpHQlEwYmlVRHdub0Nvd0w2amZBcVJMb2dvQmlraHFKUkpRREpCQk96azhCa3c2UllFOGdPR0RoU0JNRUE0Q0xsSTA4VndjYUpSQW1RS0VRYk5ETERNa0FFK0pKQzhMcERnNEZUQjFDMFRvTEJDZUprUWlFR01zblNYVWtRT2tNNGZxSE1kUkpGeVpEMldrVkVpYk9rUmV0WjBkMmRJTk5HTEJCRFZSUktocXNvbHRKSXZyUmxrcklGbEIySlhtaGJrYXRKWk1rZ2tzbWtNbjJXaWNTbVpQc282bGNtWHlaUExVY2FpVkVsRlpTS2lYWkVzRnhGaWlndFNSVS8vLy9hb3RmLy8vb3FMTHFxWUFSbUJCREhRQWE2LzdEWEpsSUp6WExGV2N3ODFxTFAxWmVtbi8rM0RFRGdCUVlhMXAzWmFBQ2pFMXJQcXcwQUZkRVNBTVJnUzZlcVNNcGdKRVRrMVdnbXBhNngrQ3hLTm5kV3RFSGt2MGx1em9Kb0NxRzJTS0NMMVhkQVM4bFR5MUw5RlE2SHY2TWtUNkx0MUpxSnhkUi8wQi9NZjlsbEJCZjdPZVJiK3N5S0pyYjY1V2RkdnJuVFJTbS9UTDZMZjdsaDcrdVlyV2d3QXpjRVFGbGdaa2R0dURjRG9rSk83N2J5dUg0YmpjRHZ4VVhnWFJFc0RuampUTmp0VEY4QlVuVnU2MVhUWVFnTnNocDN1dFJ3dUFuQVg4MloxM3NjTVFoalpOZDEzU2NMYVBkYnJxdlFLaVJOMS9WWWFIUnV1NjZSd1pac3YxVXBSTDkxK3lsRUZObDMxV0hjYnQvWTRYejY3NjlpUVRkMlgyVXNnSS8xeTZaM1g5UmthbTYvcXNWS2JxQUFBSklCbE1ZNFVBQUFBckNCOUtpQ3NYWE1lNkhxV0lzSzBodXR5Q0FDTXB3cWhiY3dBc0ZnU3hCQTFCc3lMZS8vdUF4QmdBSHZJUlk1bXFBQUdSREdxam5tQUFGakFHa1RHSVh6QTRvRU5KRTJBSUFqcUh3TFNCbVNCU1BxQUthbFFjQTNBK1l0RVZEOGdVVGtzY1VMV0RjNHBJa0VGK0xDUkVpNU5CdlpxWkMwRGJHY0UvTGlLRGFGOGlmSndVa1M1eFFub21FVGd5ZU9XUzJQQ0JnTE5QVmpMRlJVZ3g1SXBEVEx4ak1obWM2UUtUekdJeXpKbUl6SnZIVVRDSmtROUZTeDlGeVNoZngvNWZMU1pTSWtmTUIwbXhvbVFFcXBHUTd5OG92TXlSSGsra21SeGhrNmZ5QkpUeE5aWUo4M1JJRWZUVU9haW80UlhVUkkyTWo1aC8vLy9uU1cvLy8vUW5TUlFDcEFBa1NMYUxhSnFTMVpQNFc0TlVYRllUeUhJY3JrOGN4MVlEQUpKeUpHZTFlU0pIRGlVLy9zY0RBSkZpU1FkTEJRR2p3S2dyZ3JQWU5BMG9HZzZWQmJFb0t2QlhrbEExcVBGUTNsUVZXQ3ZCV0RRZDZ6c1NncmlXV0Rtb0dwNzd2TEJ5Ly84dGZsMFpsNy85Zi8vLy8vLy8vMzB5N2N5WnFlRmwxeVlVWlFFd3VHTmFJRS8vLy8vLy8vLy8vLy8vK3hERUZnUEVWYkVRQUFSK3lLUTBZZ0tBSUFILy90M3AvN3MrMVdST245Zi8vLy92WDZWZGpsYmM3VGxLc2pobEVrQW9sWWpRY0RnWTVrOEZRUVVBUVNBTHRNQVFjZElBSUVtT2VEQklGREFBc3dkQVpzcGJaS3hIeUVEQVNaSUZoMkJPNE5qaERmLzdrTVFaZ0IrcUVWdTV1cEFTd1RYc003TVFBUU1hQkVBWUFvTTRCd2JETDRzUUdIajRCMFF6QU1MWW5DcVhpQ0VFRkNBM2dLb0FRQkMvd0djVW1Bd0hSNEl1bzBURndFeVJOTXZoZkVEQVFqQUlFQXg0Z0RxUVBKbTV1WEdJSVloK1FNQzVBUmNvaklGZ3ovSW1Td3k1WEl1YkdnZjRHOG9HRWdBQ3dHUkhVQmdrSC84bkdjcUY4M0w1dXdka1hLUThDQUJMd3BJUFpEYWtmL3VoTkNiSW1PZVQ3a1RVb2RRV0tER2tGREZpaWFIS0M5QkVmLy9RV2JtWmZjdnBNMnMzYU5VY1NLSTN5a1hpTGlsMlNLSTVILy8vL3VYMGtQLy8velpRdmlkUUFiZ0FDRUFCakthanRJSWp0SUNXV3V1NURFUFB0S3M0OXBSTUkyRndrc3pPczRxVUFJd1VSWmc2S1MwMmlNUkFZaXhzdDBsNXE0YU9VelZBMk9xYzBTTElha0dOQ2dYakd0Q2l4d1IyVHBWZGFyc3Baa0ovTmxwWFpTTXpIZ2tpZHJaMnJRTVJoRjVPN0tXdGpNWlVuMGsycFZKeUhFUktLRktwZDJHNFgyZGxMdXl5SEY4dnNreWs2S1N4eURJMlpTck90UmlTQmFXcXpyVWlZRTRibGFodXkxSkR3WFZMdldwMENlS0JxSVh3RFRCa0pDQURkYTBmYVUxVVZwc051UC83Y01RSWdGSmRyV1dOUFcrS1RiWXM4ckRRQU9DODh0bzVQS3AvUzJTNkIzSDFhTFRFS1NzTUdlZlZxNis5NHhoaERjZzV6dlZNVzFVZUJqdXZuUDM4NWpFVGZPZTdtZFVCeVE2MVJIZHpKV0lKckkvNnBBVXFXcUkrcVlVcUkvZlAwd1dQdTdtUHJLaC9VanU1bnV4N2UyNy80bHcxb1JGVlV6dU0ySHVmcW9oaENuMlIxWDhrcWw3bWU3aUZEcDY1Lysza0RDblFDbEVRUjMzM3R1Z3dBSHREVnUvQTlDNWJXNld6UllPd0pSR0hEbGt1dGFhWmltYUFUVVpadWJwS3V1Z0o0RlZWOVNuU0JMSUhrakJCM1V3N3dSOE5sQTZuWmExdVpCMFBtakw5bGs4ZUNsS3N2WTZPTThoK3BBNk5oeFY2dVpsTTFkbVh1cFRrSTZ1L1hRSlV1MlpkbVhNeVdPdjYxMkpGVHVwZHRSZ2lnNnIxWFNLMERkMWU2akEzUExYWlNycU1ITkdWQUF3UVFZaUFBQUFBQUFBaVFnei8rNERFQndBZFpkbGZXYW1BQVZFVW81ZVlVQUNKam1Gd01CY0FXMWFDSjRLSUZubmliRURuMGhHVktnMGpBVTBzUTBVbVE0ZHdxQUR2RjRMcXc0WXhCalVUVmFRTGpQbGNPakF0Z1pOakU0T2NXUWFFQTBQSE5LNGZBRi9BVkVJU0RQbkNCRll5SjRSVWFhVENuQ3FEMnhjUzQ0aGlGRkZwaWhXSC9LdFkyUzRSZ2owK1JReEVwRTBvdkY0eU5sa3pMWXB1aUpJeGVNelVWc2NKd2ZST21uUlltcGtYcEhqdVZGMXVPa2x5S0RwTFNKdUxwTXdJSVBvbWtrdEd0aktxb1doTEcrY25pQlprTnMwSW9WelZFdmp5VXl3T1FUSk1HaG9SWXlVK2l5MFRMTWxYa29TMy8vLzVmTVNlUi8vYUNvRW9CYU1qNkV4SnF3UWdKS0JDQWtGVFpKUFlESmdHQUlEQ3lpSWRLLzBNYVoxS1ZCSVBNSkI0eWxaRE1ZV00vLzBOVEtXWVBNRFE4TkEwQWdhLzRLbGc0RFN6b2lVSGYrZExIazNDS2Uvd1Zjbzl4RXBNUVUxRk15NHhNRENxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWc9PVwiKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5pdGlhbGl6ZXMgc2VydmljZXMgYW5kIGFwcGxpY2F0aW9uIHNldHRpbmdzLCBzZXRzIHVwIGNvbnRleHQgaGVscGVycywgXHJcblx0ICogYW5kIGluaXRpYWxpemVzIHRoZSBlZGl0b3Igd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHJvdXRlIC0gQWN0aXZhdGVkUm91dGUgaW5zdGFuY2UgZm9yIGFjY2Vzc2luZyByb3V0ZSBwYXJhbWV0ZXJzIGFuZCBkYXRhLlxyXG5cdCAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiAtIENoYW5nZURldGVjdG9yUmVmIGluc3RhbmNlIGZvciBtYW51YWxseSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24uXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgVGl0bGUgc2VydmljZSAqL1xyXG5cdFx0dGhpcy50aXRsZVNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoVGl0bGUpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGRpYWxvZyBzZXJ2aWNlIGZvciBzaG93aW5nIG1vZGFscyAqL1xyXG5cdFx0dGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlKFZkRGlhbG9nU2VydmljZSk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgTWF0ZXJpYWwgZGlhbG9nIGZvciBtYW5hZ2luZyBkaWFsb2dzICovXHJcblx0XHR0aGlzLmRpYWxvZyA9IHRoaXMuZ2V0U2VydmljZShNYXREaWFsb2cpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIG1lZGlhIHNlcnZpY2UgZm9yIG1lZGlhIHF1ZXJpZXMgYW5kIGJyb2FkY2FzdCAqL1xyXG5cdFx0dGhpcy5tZWRpYSA9IHRoaXMuZ2V0U2VydmljZShWZE1lZGlhU2VydmljZSk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgc25hY2tiYXIgc2VydmljZSBmb3Igbm90aWZpY2F0aW9ucyAqL1xyXG5cdFx0dGhpcy5zbmFja0JhclNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoTWF0U25hY2tCYXIpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIHJvdXRlciBzZXJ2aWNlIGZvciBuYXZpZ2F0aW9uICovXHJcblx0XHR0aGlzLnJvdXRlciA9IHRoaXMuZ2V0U2VydmljZShSb3V0ZXIpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzICovXHJcblx0XHR0aGlzLmFwcFNldHRpbmcgPSB0aGlzLmdldFNlcnZpY2UoQXBwU2V0dGluZyk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgbG9jYXRpb24gc2VydmljZSBmb3IgVVJMIG1hbmlwdWxhdGlvbiAqL1xyXG5cdFx0dGhpcy5sb2NhdGlvbiA9IHRoaXMuZ2V0U2VydmljZShMb2NhdGlvbik7XHJcblxyXG5cdFx0LyogU2V0IHVwIGNvbnRleHQgaGVscGVycyB3aXRoIHJvdXRlIGFuZCBhcHBsaWNhdGlvbiBzZXR0aW5ncyAqL1xyXG5cdFx0Q29udGV4dEhlbHBlci5hY3RpdmF0ZWRSb3V0ZSA9IHJvdXRlO1xyXG5cdFx0Q29udGV4dEhlbHBlci5yb3V0ZXIgPSB0aGlzLnJvdXRlcjtcclxuXHRcdENvbnRleHRIZWxwZXIuYXBwU2V0dGluZyA9IHRoaXMuYXBwU2V0dGluZztcclxuXHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBlZGl0b3Igd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zICovXHJcblx0XHR0aGlzLmluaXRFZGl0b3IoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWRcclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBtZW51IGl0ZW1zIGZyb20gcm91dGUgc25hcHNob3QgKi9cclxuXHRcdHZhciBtYWluUm91dGUgPSB0aGlzLmdldE1haW5Sb3V0ZSh0aGlzLnJvdXRlLnNuYXBzaG90KTtcclxuXHRcdGlmIChtYWluUm91dGUpIHtcclxuXHRcdFx0dGhpcy5tZW51ID0gbWFpblJvdXRlLmRhdGEubWVudTtcclxuXHRcdFx0dGhpcy5zZXRUaXRsZXMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcHJvamVjdCBuYW1lICYgZGVidWcgbW9kZSAqL1xyXG5cdFx0dGhpcy5wcm9qZWN0TmFtZSA9IHRoaXMuYXBwU2V0dGluZy5wcm9qZWN0TmFtZTtcclxuXHRcdHRoaXMuZGVidWcgPSB0aGlzLmFwcFNldHRpbmcuZGVidWcgPz8gZmFsc2U7XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gY3JlYXRlLCB1cGRhdGUsIGFuZCBkZWxldGUgKi9cclxuXHRcdHRoaXMuY2FuQ3JlYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdDcmVhdGUnKTtcclxuXHRcdHRoaXMuY2FuVXBkYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdVcGRhdGUnKTtcclxuXHRcdHRoaXMuY2FuRGVsZXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdEZWxldGUnKTtcclxuXHJcblx0XHQvKiBHZXQgdGhlIGhhc2ggZnJvbSB0aGUgVVJMICovXHJcblx0XHR0aGlzLnJvdXRlLmZyYWdtZW50LnN1YnNjcmliZSgoZnJhZ21lbnQ6IHN0cmluZyB8IGFueSkgPT4gdGhpcy51cmxIYXNoID0gZnJhZ21lbnQpO1xyXG5cclxuXHRcdC8qIENoZWNrIHBlcm1pc3Npb25zIGJhc2VkIG9uIHRoZSByb3V0ZSAqL1xyXG5cdFx0aWYgKHRoaXMucm91dGUucGFyZW50KSB7XHJcblx0XHRcdHRoaXMucm91dGUucGFyZW50LnVybC5zdWJzY3JpYmUoKHVybDogVXJsU2VnbWVudFtdKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jbGFzc05hbWUgPz89IHVybC5sZW5ndGggPyB1cmxbMF0ucGF0aC5yZXBsYWNlKC8oLiopcyQvLCAnJDEnKS5yZXBsYWNlKC9eLi8sICh1cmxbMF0ucGF0aFswXSB8fCAnJykudG9VcHBlckNhc2UoKSkgOiAnJztcclxuXHRcdFx0XHR0aGlzLmNhbkNyZWF0ZSA9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYENyZWF0ZSR7dGhpcy5jbGFzc05hbWV9YCk7XHJcblx0XHRcdFx0dGhpcy5jYW5VcGRhdGUgPSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBVcGRhdGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHRcdHRoaXMuY2FuRGVsZXRlID0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgRGVsZXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHRoZSBjdXJyZW50IHJvdXRlIGFuZCBiYXNlIHJvdXRlICovXHJcblx0XHR0aGlzLmN1cnJlbnRSb3V0ZSA9IHdpbmRvdy5idG9hKHRoaXMucm91dGVyLnVybCk7XHJcblx0XHR0aGlzLmN1cnJlbnRCYXNlUm91dGUgPSB0aGlzLnJvdXRlci51cmw/LnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgdGhlIHBhZ2UgdGl0bGUgYmFzZWQgb24gdGhlIG5hdmlnYXRpb24gZW5kIGV2ZW50XHJcblx0XHQgKi9cclxuXHRcdHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdGxldCBuYXZpZ2F0aW9uRW5kID0gKHggYXMgU2Nyb2xsKT8ucm91dGVyRXZlbnQgYXMgTmF2aWdhdGlvbkVuZDtcclxuXHRcdFx0aWYgKG5hdmlnYXRpb25FbmQpIHtcclxuXHRcdFx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudFJvdXRlID0gd2luZG93LmJ0b2EobmF2aWdhdGlvbkVuZC51cmwpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBSZXRyaWV2ZSB0aGUgcmV0dXJuIFVSTCBpZiBhbnkgZnJvbSB0aGUgcXVlcnkgcGFyYW1ldGVycyAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoeCA9PiB0aGlzLnNldFJldHVyblVybCh4LnJldHVyblVybCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkXHJcblx0ICovXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0LyogQnJvYWRjYXN0IHRvIGFsbCBsaXN0ZW5lciBvYnNlcnZhYmxlcyB3aGVuIGxvYWRpbmcgdGhlIHBhZ2UgKi9cclxuXHRcdHRoaXMubWVkaWEuYnJvYWRjYXN0KCk7XHJcblxyXG5cdFx0LyogU2V0IHBhZ2UgdGl0bGVzICovXHJcblx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogRm9yY2UgYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBzaW5jZSBjaGFuZ2UgZGV0ZWN0aW9ucyBcclxuXHRcdCAqIGhhdmUgZmluaXNoZWQgd2hlbiBgbmdBZnRlclZpZXdJbml0YCBpcyBleGVjdXRlZFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHQvKiBMaXN0ZW4gZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzIGlmIGVuYWJsZWQgKi9cclxuXHRcdGlmICh0aGlzLmhhbmRsZUV4cGFuc2lvblBhbmVsQ2hhbmdlcykge1xyXG5cdFx0XHR0aGlzLm9uRXhwYW5zaW9uUGFuZWxDaGFuZ2VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWxvYWRzIHRoZSBjdXJyZW50IHBhZ2Ugb3IgY29tcG9uZW50LlxyXG5cdCAqIFxyXG5cdCAqIFRoaXMgbWV0aG9kIG5hdmlnYXRlcyB0ZW1wb3JhcmlseSB0byB0aGUgcm9vdCBVUkwgYW5kIHRoZW4gXHJcblx0ICogbmF2aWdhdGVzIGJhY2sgdG8gdGhlIGN1cnJlbnQgVVJMIHRvIGVmZmVjdGl2ZWx5IHJlZnJlc2ggdGhlIHBhZ2Ugb3IgY29tcG9uZW50LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG5hdmlnYXRpb24gaXMgc3VjY2Vzc2Z1bCxcclxuXHQgKiAgICAgICAgICAgICAgICAgICByZWNlaXZlcyB0aGUgY3VycmVudCBVUkwgYXMgYW4gYXJndW1lbnQuXHJcblx0ICovXHJcblx0cHVibGljIHJlbG9hZFBhZ2UoY2FsbGJhY2s/OiAoY3VycmVudFVybDogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRsZXQgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHJlcGxhY2VVcmw6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCwgeyByZXBsYWNlVXJsOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdC8qIEV4ZWN1dGUgdGhlIGNhbGxiYWNrIGlmIHByb3ZpZGVkICovXHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjayhjdXJyZW50VXJsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgYmFjayB0byB0aGUgcmV0dXJuIFVSTCBpZiBpdCBleGlzdHMuXHJcblx0ICovXHJcblx0cHVibGljIG5hdmlnYXRlVG9SZXR1cm5VcmwoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0LyogUGFyc2UgdGhlIHJldHVybiBVUkwgaW50byBhIFVybFRyZWUgb2JqZWN0ICovXHJcblx0XHRcdGxldCB1cmxUcmVlOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yZXR1cm5VcmwpO1xyXG5cclxuXHRcdFx0LyogTmF2aWdhdGUgdG8gdGhlIHJldHVybiBVUkwgKi9cclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxUcmVlLnRvU3RyaW5nKCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyogXHJcblx0ICogRm9yY2VzIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0ICogaGF2ZSBmaW5pc2hlZCB3aGVuIGBuZ0FmdGVyVmlld0luaXRgIGlzIGV4ZWN1dGVkLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG5cdFx0LyogVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgdGhlIHJldHVybiBVUkwgYWZ0ZXIgZGVjb2RpbmcgaXQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIC0gVGhlIGVuY29kZWQgcmV0dXJuIFVSTCB0byBzZXQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFJldHVyblVybChyZXR1cm5Vcmw6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0LyogRGVjb2RlIGFuZCBzZXQgdGhlIHJldHVybiBVUkwsIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgKi9cclxuXHRcdFx0dGhpcy5yZXR1cm5VcmwgPSByZXR1cm5VcmwgPyBkZWNvZGVVUklDb21wb25lbnQoYXRvYihyZXR1cm5VcmwpKSA6IHVuZGVmaW5lZDtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdC8qIEhhbmRsZSBlcnJvciBzaWxlbnRseSAqL1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlzdGVuIGZvciBleHBhbnNpb24gcGFuZWwgY2hhbmdlc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkV4cGFuc2lvblBhbmVsQ2hhbmdlcygpOiB2b2lkIHtcclxuXHRcdC8qIExpc3RlbiBmb3IgZXhwYW5zaW9uIHBhbmVsIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q/LmNoYW5nZXMuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHQvKiBVbnN1YnNjcmliZSBmcm9tIG9sZCAnb3BlbmVkJyBhbmQgJ2Nsb3NlZCcgc3Vic2NyaXB0aW9ucyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHggPT4geC51bnN1YnNjcmliZSgpKTtcclxuXHJcblx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuXHRcdFx0LyogR2V0IHRoZSBwYW5lbCBlbmRzIHdpdGggdGhlIElEICduZXcnICovXHJcblx0XHRcdHZhciBuZXdFeHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50Py5pZD8uZW5kc1dpdGgoJy5uZXcnKSkgPz8gLTE7XHJcblx0XHRcdGlmIChuZXdFeHBhbnNpb25QYW5lbEluZGV4ID49IDApIHtcclxuXHRcdFx0XHQvKiBDbG9zZSBhbGwgcGFuZWxzICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8uZmlyc3Q/LmFjY29yZGlvbj8uY2xvc2VBbGwoKTtcclxuXHJcblx0XHRcdFx0LyogT3BlbiB0aGUgbmV3IHBhbmVsICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW25ld0V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblxyXG5cdFx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogRmluZCB0aGUgaW5kZXggb2YgdGhlIHBhbmVsIHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50IElEICovXHJcblx0XHRcdFx0dGhpcy51cmxIYXNoPy5zcGxpdCgnLicpXHJcblx0XHRcdFx0XHQ/LnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwgY3VycmVudFZhbHVlLCBpbmRleCkgPT4gYWNjdW11bGF0b3IuY29uY2F0KChpbmRleCA+IDAgPyAoYWNjdW11bGF0b3Iuc2xpY2UoLTEpLmpvaW4oJy4nKSArICcuJykgOiAnJykgKyBjdXJyZW50VmFsdWUpLCBbXSlcclxuXHRcdFx0XHRcdD8uZm9yRWFjaCgoaGFzaDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhciBleHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50LmlkID09IGhhc2gpID8/IC0xO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5zaW9uUGFuZWxJbmRleCA+PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW2V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyBmb3Igb3BlbmVkIHBhbmVscyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py5mb3JFYWNoKHkgPT4ge1xyXG5cdFx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLnB1c2goeS5vcGVuZWQuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2V0VXJsSGFzaCkge1xyXG5cdFx0XHRcdFx0XHQvKiBHZXQgdGhlIGlkIG9mIHRoZSBjdXJyZW50IG9wZW5lZCBwYW5lbCAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgY3VycmVudFBhbmVsSWQgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgZnJhZ21lbnQ6IGN1cnJlbnRQYW5lbElkLCByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UgcmVtb3ZlIHRoZSBzZWdtZW50IGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHJcblx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgZm9yIGNsb3NlZCBwYW5lbHMgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5wdXNoKHkuY2xvc2VkLnN1YnNjcmliZShfID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnNldFVybEhhc2gpIHtcclxuXHRcdFx0XHRcdFx0LyogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBvcGVuZWQgcGFuZWwgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGN1cnJlbnRQYW5lbElkUGFydHMgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZD8uc3BsaXQoJy4nKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkUGFydHMubGVuZ3RoID4gMSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IGZyYWdtZW50OiBjdXJyZW50UGFuZWxJZFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyksIHJlcGxhY2VVcmw6IHRydWUgfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyAqL1xyXG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIE5vdGlmeSBleHBhbnNpb24gcGFuZWwgbGlzdCBjaGFuZ2VzICovXHJcblx0XHRpZiAodGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdCkge1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0cmlldmVzIGFuIGluc3RhbmNlIGZyb20gdGhlIGluamVjdG9yIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0b2tlbi5cclxuXHQgKiBJZiBub3QgZm91bmQ6XHJcblx0ICogLSBUaHJvd3Mge0BsaW5rIE5vUHJvdmlkZXJFcnJvcn0gaWYgbm8gYG5vdEZvdW5kVmFsdWVgIHRoYXQgaXMgbm90IGVxdWFsIHRvXHJcblx0ICogSW5qZWN0b3IuVEhST1dfSUZfTk9UX0ZPVU5EIGlzIGdpdmVuXHJcblx0ICogLSBSZXR1cm5zIHRoZSBgbm90Rm91bmRWYWx1ZWAgb3RoZXJ3aXNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldFNlcnZpY2U8VD4odG9rZW46IFR5cGU8VD4pOiBUIHtcclxuXHRcdHJldHVybiBTZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKHRva2VuKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIG1haW4gcm91dGUgZnJvbSB0aGUgZ2l2ZW4gc25hcHNob3QgYnkgdHJhdmVyc2luZyB1cCB0byB0aGUgcGFyZW50IHJvdXRlc1xyXG5cdCAqIGlmIHRoZSBjdXJyZW50IHNuYXBzaG90IGRvZXMgbm90IGhhdmUgYSBtZW51IGRlZmluZWQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgYWN0aXZhdGVkIHJvdXRlIHNuYXBzaG90IHRvIGV2YWx1YXRlLlxyXG5cdCAqIEByZXR1cm5zIFRoZSBtYWluIHJvdXRlIHNuYXBzaG90IHRoYXQgaGFzIGEgbWVudSBkZWZpbmVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBnZXRNYWluUm91dGUoc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcclxuXHRcdGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdCEucGFyZW50ICYmICFzbmFwc2hvdC5kYXRhLm1lbnUpIHtcclxuXHRcdFx0LyogUmVjdXJzaXZlbHkgY2FsbCB0byBnZXQgdGhlIG1haW4gcm91dGUgZnJvbSB0aGUgcGFyZW50IHNuYXBzaG90ICovXHJcblx0XHRcdHJldHVybiB0aGlzLmdldE1haW5Sb3V0ZShzbmFwc2hvdCEucGFyZW50ISk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNuYXBzaG90O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgYSBjb25maXJtIGRpYWxvZyB0byBkZWxldGUgYSBzaW5nbGUgaXRlbS5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgY2xvc2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbURpYWxvZygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlybSh7XHJcblx0XHRcdG1lc3NhZ2U6ICRsb2NhbGl6ZWA6QEBkaWFsb2cubWVzc2FnZS5kZWxldGUub25lOkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBpdGVtP2AsXHJcblx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmRlbGV0ZTpDb25maXJtIERlbGV0ZWAsXHJcblx0XHRcdGNhbmNlbEJ1dHRvbjogJGxvY2FsaXplYDpAQGNhbmNlbDpDYW5jZWxgLFxyXG5cdFx0XHRhY2NlcHRCdXR0b246ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdH0pLmFmdGVyQ2xvc2VkKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIGNvbmZpcm0gZGlhbG9nIHRvIGRlbGV0ZSBtdWx0aXBsZSBzZWxlY3RlZCBpdGVtcy5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgY2xvc2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbXNEaWFsb2coKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpcm0oe1xyXG5cdFx0XHRtZXNzYWdlOiAkbG9jYWxpemVgOkBAZGlhbG9nLm1lc3NhZ2UuZGVsZXRlLmxpc3Q6QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbXM/YCxcclxuXHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkaWFsb2cudGl0bGUuZGVsZXRlOkNvbmZpcm0gRGVsZXRlYCxcclxuXHRcdFx0Y2FuY2VsQnV0dG9uOiAkbG9jYWxpemVgOkBAY2FuY2VsOkNhbmNlbGAsXHJcblx0XHRcdGFjY2VwdEJ1dHRvbjogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB0byBzZW5kIHNvbWUgZGF0YS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgaW4gdGhlIGRpYWxvZy5cclxuXHQgKiBAcGFyYW0gb2JzZXJ2YWJsZSAtIFRoZSBvYnNlcnZhYmxlIGluc3RhbmNlIHRvIGhhbmRsZSB0aGUgZGF0YS5cclxuXHQgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBzdWNjZXNzZnVsIG9wZXJhdGlvbi5cclxuXHQgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gYW4gZXJyb3IuXHJcblx0ICogQHBhcmFtIGFjY2VwdEJ1dHRvblRleHQgLSBPcHRpb25hbCB0ZXh0IGZvciB0aGUgYWNjZXB0IGJ1dHRvbi5cclxuXHQgKiBAcGFyYW0gY2FuY2VsQnV0dG9uVGV4dCAtIE9wdGlvbmFsIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzaG93Q29uZmlybWF0aW9uRGlhbG9nKFxyXG5cdFx0bWVzc2FnZTogc3RyaW5nLFxyXG5cdFx0b2JzZXJ2YWJlOiBPYnNlcnZhYmxlPGFueT4sXHJcblx0XHRzdWNjZXNzQ2FsbGJhY2s/OiBGdW5jdGlvbixcclxuXHRcdGVycm9yQ2FsbGJhY2s/OiBGdW5jdGlvbixcclxuXHRcdGFjY2VwdEJ1dHRvblRleHQ/OiBzdHJpbmcsXHJcblx0XHRjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nLFxyXG5cdFx0ZGlhbG9nQ29uZmlnPzogTWF0RGlhbG9nQ29uZmlnXHJcblx0KTogdm9pZCB7XHJcblx0XHR0aGlzLmRpYWxvZ1NlcnZpY2VcclxuXHRcdFx0Lm9wZW5Db25maXJtKHtcclxuXHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlLFxyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmNvbmZpcm06Q29uZmlybWAsXHJcblx0XHRcdFx0Y2FuY2VsQnV0dG9uOiBjYW5jZWxCdXR0b25UZXh0ID8/ICRsb2NhbGl6ZWA6QEBjYW5jZWw6Q2FuY2VsYCxcclxuXHRcdFx0XHRhY2NlcHRCdXR0b246IGFjY2VwdEJ1dHRvblRleHQgPz8gJGxvY2FsaXplYDpAQHllczpZZXNgLFxyXG5cdFx0XHR9LCBkaWFsb2dDb25maWcgPz8gKDxNYXREaWFsb2dDb25maWc+eyBtYXhXaWR0aDogNDgwIH0pKVxyXG5cdFx0XHQuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHRcdG9ic2VydmFiZS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0XHRuZXh0OiAoeCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hvd01lc3NhZ2UoJGxvY2FsaXplYDpAQHNuYWNrYmFyLnNlbmQuc3VjY2VzczpEYXRhIHNlbnQgc3VjY2Vzc2Z1bGx5LmApO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3NDYWxsYmFjayh4KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sIGVycm9yOiAoZXJyb3JzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlcnJvckNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKGVycm9ycyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT3BlbnMgYSB0YXNrIGRpYWxvZyB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbi5cclxuXHQgKiBcclxuXHQgKiBAdHlwZXBhcmFtIFRSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGZyb20gdGhlIGRpYWxvZy5cclxuXHQgKiBAcGFyYW0ge1BhcnRpYWw8VGFza0RpYWxvZ0RhdGE8VFJlc3VsdD4+fSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0YXNrIGRpYWxvZywgaW5jbHVkaW5nIG1lc3NhZ2VzLCBjYWxsYmFja3MsIGFuZCBvYnNlcnZhYmxlIHRhc2tzLlxyXG5cdCAqIFxyXG5cdCAqIEBleGFtcGxlIFxyXG5cdCAqIC8vIEV4YW1wbGUgb2YgaG93IHRvIGNhbGwgc2hvd1Rhc2tEaWFsb2dcclxuXHQgKiB0aGlzLnNob3dUYXNrRGlhbG9nKHtcclxuXHQgKiAgICAgdGl0bGU6ICdQcm9jZXNzaW5nIFRhc2snLFxyXG5cdCAqICAgICBpblByb2dyZXNzTWVzc2FnZTogJ1lvdXIgdGFzayBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuLi4nLFxyXG5cdCAqICAgICBzdWNjZXNzTWVzc2FnZTogJ1Rhc2sgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnLFxyXG5cdCAqICAgICBlcnJvck1lc3NhZ2U6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHlvdXIgdGFzay4nLFxyXG5cdCAqICAgICB0YXNrOiB0aGlzLnNvbWVPYnNlcnZhYmxlVGFzaygpLCAvLyBZb3VyIG9ic2VydmFibGUgdGFzayBnb2VzIGhlcmVcclxuXHQgKiAgICAgc3VjY2Vzc0J1dHRvbkNsaWNrOiAocmVzdWx0LCBkcikgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3MgYnV0dG9uIGNsaWNrZWQhJywgcmVzdWx0KTtcclxuXHQgKiAgICAgICAgIC8vIE9wdGlvbmFsbHkgaGFuZGxlIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGhlcmVcclxuXHQgKiAgICAgICAgIGRyLmNsb3NlKHJlc3VsdCk7IC8vIENsb3NlIHRoZSBkaWFsb2cgd2l0aCB0aGUgcmVzdWx0XHJcblx0ICogICAgIH0sXHJcblx0ICogICAgIHN1Y2Nlc3NDYWxsYmFjazogKHJlc3VsdCkgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3MhJywgcmVzdWx0KTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiAgICAgZXJyb3JDYWxsYmFjazogKGVycm9ycykgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IhJywgZXJyb3JzKTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiAgICAgY2FuY2VsQ2FsbGJhY2s6ICgpID0+IHtcclxuXHQgKiAgICAgICAgIGNvbnNvbGUubG9nKCdUYXNrIHdhcyBjYW5jZWxlZC4nKTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiB9KTtcclxuXHQgKi9cclxuXHRwdWJsaWMgc2hvd1Rhc2tEaWFsb2c8VFJlc3VsdCA9IGFueT4oY29uZmlnOiBQYXJ0aWFsPFRhc2tEaWFsb2dEYXRhPFRSZXN1bHQ+PiwgZGlhbG9nQ29uZmlnPzogTWF0RGlhbG9nQ29uZmlnPFRSZXN1bHQ+KTogTWF0RGlhbG9nUmVmPFZkVGFza0RpYWxvZ0NvbXBvbmVudCwgVFJlc3VsdD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMub3BlbkRpYWxvZzxWZFRhc2tEaWFsb2dDb21wb25lbnQ+KFZkVGFza0RpYWxvZ0NvbXBvbmVudCwgT2JqZWN0LmFzc2lnbihkaWFsb2dDb25maWcgPz8ge30sIDxNYXREaWFsb2dDb25maWc+e1xyXG5cdFx0XHRkYXRhOiBuZXcgVGFza0RpYWxvZ0RhdGEoY29uZmlnKSxcclxuXHRcdFx0ZGlzYWJsZUNsb3NlOiB0cnVlXHJcblx0XHR9KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPcGVucyBhIGRpYWxvZyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgd2l0aCB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cclxuXHQgKlxyXG5cdCAqIEB0eXBlcGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgb3BlbmVkIGFzIGEgZGlhbG9nLlxyXG5cdCAqIEB0eXBlcGFyYW0gRCAtIFRoZSB0eXBlIG9mIHRoZSBkYXRhIHBhc3NlZCB0byB0aGUgZGlhbG9nIChkZWZhdWx0IGlzIGFueSkuXHJcblx0ICogQHBhcmFtIHtUeXBlPFQ+fSBkaWFsb2dUeXBlIC0gVGhlIGNvbXBvbmVudCB0eXBlIHRvIG9wZW4gYXMgYSBkaWFsb2cuXHJcblx0ICogQHBhcmFtIHtNYXREaWFsb2dDb25maWc8RD59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBkaWFsb2csIHN1Y2ggYXMgZGF0YSBhbmQgc3R5bGVzLlxyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkLlxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIHtNYXREaWFsb2dSZWY8VCwgRD59IEEgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgZGlhbG9nLlxyXG5cdCAqIFxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogLy8gRXhhbXBsZSBvZiBob3cgdG8gdXNlIG9wZW5EaWFsb2dcclxuXHQgKiBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm9wZW5EaWFsb2coTXlEaWFsb2dDb21wb25lbnQsIHtcclxuXHQgKiAgICAgZGF0YTogeyBkaWFsb2cgZGF0YSBoZXJlIH0sXHJcblx0ICogICAgIHdpZHRoOiAnODAwcHgnLFxyXG5cdCAqICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jbGFzcydcclxuXHQgKiB9LCAoKSA9PiB7XHJcblx0ICogICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgY2xvc2VkLicpO1xyXG5cdCAqIH0pO1xyXG5cdCAqIFxyXG5cdCAqIC8vIEhhbmRsaW5nIHRoZSByZXN1bHQgZnJvbSB0aGUgZGlhbG9nXHJcblx0ICogZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblx0ICogICAgIGlmIChyZXN1bHQpIHtcclxuXHQgKiAgICAgICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgcmVzdWx0OicsIHJlc3VsdCk7XHJcblx0ICogICAgIH1cclxuXHQgKiB9KTtcclxuXHQgKi9cclxuXHRwdWJsaWMgb3BlbkRpYWxvZzxULCBEID0gYW55PihkaWFsb2dUeXBlOiBUeXBlPFQ+LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZzxEPiwgY2FsbGJhY2s/OiBGdW5jdGlvbik6IE1hdERpYWxvZ1JlZjxULCBEPiB7XHJcblx0XHQvKiBPcGVuIHRoZSBkaWFsb2cgd2l0aCBzcGVjaWZpZWQgdHlwZSBhbmQgY29uZmlndXJhdGlvbiAqL1xyXG5cdFx0dmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oZGlhbG9nVHlwZSwgT2JqZWN0LmFzc2lnbih7XHJcblx0XHRcdHdpZHRoOiAnNjUwcHgnLCAvKiBEZWZhdWx0IHdpZHRoIGZvciB0aGUgZGlhbG9nICovXHJcblx0XHRcdGRhdGE6IHt9LCAvKiBEZWZhdWx0IGRhdGEgcGFzc2VkIHRvIHRoZSBkaWFsb2cgKi9cclxuXHRcdFx0cGFuZWxDbGFzczogWydkaWFsb2ctZnVsbC1zY3JlZW4nXSAvKiBDbGFzcyBmb3IgdGhlIGRpYWxvZyBwYW5lbCAqL1xyXG5cdFx0fSwgY29uZmlnKSk7IC8qIE1lcmdlIHVzZXItZGVmaW5lZCBjb25maWcgd2l0aCBkZWZhdWx0cyAqL1xyXG5cclxuXHRcdC8qIElmIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQsIHN1YnNjcmliZSB0byB0aGUgZGlhbG9nJ3MgYWZ0ZXJDbG9zZWQgZXZlbnQgKi9cclxuXHRcdGlmIChjYWxsYmFjaykge1xyXG5cdFx0XHQvKiBFeGVjdXRlIGNhbGxiYWNrIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkICovXHJcblx0XHRcdGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShfID0+IGNhbGxiYWNrKCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJldHVybiB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgZGlhbG9nICovXHJcblx0XHRyZXR1cm4gZGlhbG9nUmVmO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlzcGxheXMgYSBtZXNzYWdlIHVzaW5nIHRoZSBzbmFjayBiYXIgc2VydmljZS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IChvcHRpb25hbCwgZGVmYXVsdHMgdG8gYSBzdWNjZXNzIG1lc3NhZ2UgaWYgbm90IHByb3ZpZGVkKVxyXG5cdCAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIChTdWNjZXNzLCBXYXJuaW5nLCBvciBFcnJvcikuIERlZmF1bHRzIHRvIFN1Y2Nlc3MuXHJcblx0ICogQHBhcmFtIGR1cmF0aW9uIFRoZSBkdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSB0byBzaG93IHRoZSBtZXNzYWdlLiBEZWZhdWx0cyB0byAzMDAwbXMuXHJcblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b24uIERlZmF1bHRzIHRvICdPSycuXHJcblx0ICogQHBhcmFtIHBsYXlTb3VuZCBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHBsYXkgYSB3YXJuaW5nIHNvdW5kIHdoZW4gdGhlIG1lc3NhZ2UgdHlwZSBpcyBXYXJuaW5nLiBEZWZhdWx0cyB0byBmYWxzZS5cclxuXHQgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93TWVzc2FnZShcclxuXHRcdG1lc3NhZ2U6IHN0cmluZyxcclxuXHRcdHR5cGU6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZVR5cGUuU3VjY2VzcyxcclxuXHRcdGR1cmF0aW9uOiBudW1iZXIgPSAzMDAwLFxyXG5cdFx0YWN0aW9uTGFiZWw6IHN0cmluZyA9ICRsb2NhbGl6ZWA6QEBvazpPS2AsXHJcblx0XHRwbGF5U291bmQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cdCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG5cdFx0LyogRGVmYXVsdCBzbmFjayBiYXIgY2xhc3MgdG8gJ3ByaW1hcnknIChmb3Igc3VjY2VzcyBtZXNzYWdlcykgKi9cclxuXHRcdGxldCBzbmFja0JhckNsYXNzID0gJ3ByaW1hcnknO1xyXG5cclxuXHRcdC8qIERldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgQ1NTIGNsYXNzIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHR5cGUgKi9cclxuXHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRjYXNlIE1lc3NhZ2VUeXBlLlN1Y2Nlc3M6XHJcblx0XHRcdFx0c25hY2tCYXJDbGFzcyA9ICdwcmltYXJ5JztcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ3dhcm4nO1xyXG5cclxuXHRcdFx0XHQvKiBQbGF5IHRoZSB3YXJuaW5nIHNvdW5kIGlmIHRoZSBwbGF5U291bmQgZmxhZyBpcyB0cnVlICovXHJcblx0XHRcdFx0aWYgKHBsYXlTb3VuZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wbGF5V2FyblNvdW5kKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuRXJyb3I6XHJcblx0XHRcdFx0c25hY2tCYXJDbGFzcyA9ICdlcnJvcic7XHJcblxyXG5cdFx0XHRcdC8qIFBsYXkgdGhlIHdhcm5pbmcgc291bmQgaWYgdGhlIHBsYXlTb3VuZCBmbGFnIGlzIHRydWUgKi9cclxuXHRcdFx0XHRpZiAocGxheVNvdW5kKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBsYXlXYXJuU291bmQoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHJcblx0XHQvKiBEaXNwbGF5IHRoZSBtZXNzYWdlIGluIHRoZSBzbmFjayBiYXIsIHdpdGggc3BlY2lmaWVkIGR1cmF0aW9uIGFuZCBDU1MgY2xhc3MgKi9cclxuXHRcdGNvbnN0IHNuYWNrQmFyUmVmID0gdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0YWN0aW9uTGFiZWwsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRkdXJhdGlvbjogZHVyYXRpb24sXHJcblx0XHRcdFx0cGFuZWxDbGFzczogW3NuYWNrQmFyQ2xhc3NdXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0LyogRW1pdHMgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkICovXHJcblx0XHRyZXR1cm4gc25hY2tCYXJSZWYub25BY3Rpb24oKS5waXBlKG1hcCgoKSA9PiB7IH0pKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemVzIHRoZSBUaW55TUNFIGVkaXRvciB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlZGl0b3JDb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0IGVkaXRvciBzZXR0aW5nc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbml0RWRpdG9yKGVkaXRvckNvbmZpZzogYW55ID0ge30pIHtcclxuXHRcdC8qIE1lcmdlIHRoZSBwcm92aWRlZCBlZGl0b3IgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgKi9cclxuXHRcdE9iamVjdC5hc3NpZ24odGhpcy5lZGl0b3JDb25maWcsIHtcclxuXHRcdFx0LyogRGlzYWJsZSBwcm9tb3Rpb25zIGluIHRoZSBlZGl0b3IgKi9cclxuXHRcdFx0cHJvbW90aW9uOiBmYWxzZSxcclxuXHRcdFx0LyogVXNlIHRoZSBtaW5pbWl6ZWQgdmVyc2lvbiBvZiBUaW55TUNFICovXHJcblx0XHRcdHN1ZmZpeDogJy5taW4nLFxyXG5cdFx0XHQvKiBEaXNhYmxlIGRlZmF1bHQgVGlueU1DRSBza2luICovXHJcblx0XHRcdHNraW46IGZhbHNlLFxyXG5cdFx0XHQvKiBTZXQgZWRpdG9yIGhlaWdodCB0byAxNzBweCAqL1xyXG5cdFx0XHRoZWlnaHQ6ICcxNzBweCcsXHJcblx0XHRcdC8qIERpc2FibGUgbG9hZGluZyBleHRlcm5hbCBDU1MgZm9yIGVkaXRvciBjb250ZW50ICovXHJcblx0XHRcdGNvbnRlbnRfY3NzOiBmYWxzZSxcclxuXHRcdFx0LyogU2V0IHRoZSBwbHVnaW5zIHRvIGJlIHVzZWQgaW4gdGhlIGVkaXRvciAqL1xyXG5cdFx0XHRwbHVnaW5zOiB0aGlzLmVkaXRvclBsdWdpbnMsXHJcblx0XHRcdC8qIFNldCB0aGUgdG9vbGJhciBjb25maWd1cmF0aW9uICovXHJcblx0XHRcdHRvb2xiYXI6IHRoaXMuZWRpdG9yVG9vbGJhcixcclxuXHRcdFx0LyogQWx3YXlzIHBhc3RlIGNvbnRlbnQgYXMgcGxhaW4gdGV4dCAqL1xyXG5cdFx0XHRwYXN0ZV9hc190ZXh0OiB0cnVlLFxyXG5cdFx0XHQvKiBTZXQgdGhlIGVkaXRvciBsYW5ndWFnZSB0byBHZXJtYW4gKi9cclxuXHRcdFx0bGFuZ3VhZ2U6ICdkZScsXHJcblx0XHRcdC8qIFNwZWNpZnkgdGhlIFVSTCB0byBsb2FkIHRoZSBHZXJtYW4gbGFuZ3VhZ2UgZmlsZSAqL1xyXG5cdFx0XHRsYW5ndWFnZV91cmw6ICcvYXNzZXRzL3RpbnltY2UvbGFuZ3MvZGUuanMnLFxyXG5cdFx0XHQvKiBTZXQgdGhlIGJhc2UgVVJMIGZvciBkb2N1bWVudHMvZmlsZXMgdXNlZCBpbiB0aGUgZWRpdG9yICovXHJcblx0XHRcdGRvY3VtZW50X2Jhc2VfdXJsOiBgJHt0aGlzLmFwcFNldHRpbmcuYXBpVXJsfWZpbGUvYCxcclxuXHRcdFx0LyogRW5hYmxlIGF1dG9tYXRpYyB1cGxvYWRzIGZvciBmaWxlIGlucHV0cyAqL1xyXG5cdFx0XHRhdXRvbWF0aWNfdXBsb2FkczogdHJ1ZSxcclxuXHRcdFx0LyogVXNlIHJlbGF0aXZlIFVSTHMgZm9yIGxpbmtzIGFuZCBpbWFnZXMgKi9cclxuXHRcdFx0cmVsYXRpdmVfdXJsczogdHJ1ZSxcclxuXHRcdFx0LyogRGlzYWJsZSBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiByZWxhdGl2ZSBVUkxzIHRvIGFic29sdXRlIFVSTHMgKi9cclxuXHRcdFx0Y29udmVydF91cmxzOiBmYWxzZSxcclxuXHRcdFx0LyogRXh0ZW5kIHZhbGlkIEhUTUwgZWxlbWVudHMgdG8gYWxsb3cgc3BlY2lmaWMgYXR0cmlidXRlcyAqL1xyXG5cdFx0XHRleHRlbmRlZF92YWxpZF9lbGVtZW50czogJ3NwYW5baWR8Y2xhc3N8c3R5bGVdLCtAW2RhdGEtb3B0aW9uc10nLFxyXG5cdFx0XHQvKiBBbGxvdyBIVE1MIGluIG5hbWVkIGFuY2hvcnMgKi9cclxuXHRcdFx0YWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3I6IHRydWVcclxuXHRcdH0sIGVkaXRvckNvbmZpZyk7XHJcblxyXG5cdFx0LyogTWFyayB0aGUgZWRpdG9yIGFzIGluaXRpYWxpemVkICovXHJcblx0XHR0aGlzLmlzRWRpdG9ySW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyB0aGUgdGl0bGUgYW5kIHN1YnRpdGxlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbnUgYW5kIHJvdXRlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFRpdGxlcygpOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIHRoZSBtZW51IG9iamVjdCBpcyBhdmFpbGFibGUgKi9cclxuXHRcdGlmICh0aGlzLm1lbnUpIHtcclxuXHRcdFx0LyogU2V0IHRoZSBicm93c2VyIHRhYiB0aXRsZSB1c2luZyB0aGUgbWVudSB0aXRsZSwgaWYgYXZhaWxhYmxlICovXHJcblx0XHRcdHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMubWVudS50aXRsZSA/PyAnJyk7XHJcblx0XHRcdC8qIFVwZGF0ZSB0aGUgbG9jYWwgdGl0bGUgdmFyaWFibGUgZnJvbSB0aGUgdGl0bGUgc2VydmljZSAqL1xyXG5cdFx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHRcdC8qIElmIHRoZXJlIGFyZSBubyBzdWJtZW51IGl0ZW1zLCBleGl0IHRoZSBtZXRob2QgKi9cclxuXHRcdFx0aWYgKCF0aGlzLm1lbnUuaXRlbXMpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFRyeSB0byByZXRyaWV2ZSB0aGUgc3VidGl0bGUgZnJvbSB0aGUgVVJMIHBhcmFtZXRlcnMgKi9cclxuXHRcdFx0dmFyIHN1YnRpdGxlID0gdGhpcy5yb3V0ZT8uc25hcHNob3Q/LnBhcmFtTWFwPy5nZXQoJ3N1YnRpdGxlJyk7XHJcblx0XHRcdGlmIChzdWJ0aXRsZSkge1xyXG5cdFx0XHRcdC8qIEF0dGVtcHQgdG8gZGVjb2RlIHRoZSBzdWJ0aXRsZSBpZiBpdCdzIEJhc2U2NCBlbmNvZGVkICovXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHRoaXMuc3VidGl0bGUgPSB3aW5kb3cuYXRvYihzdWJ0aXRsZSk7XHJcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0LyogSWYgZGVjb2RpbmcgZmFpbHMsIHVzZSB0aGUgcmF3IHN1YnRpdGxlICovXHJcblx0XHRcdFx0XHR0aGlzLnN1YnRpdGxlID0gc3VidGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8qIEdldCB0aGUgY3VycmVudCByb3V0ZSBwYXRoLCBleGNsdWRpbmcgcXVlcnkgcGFyYW1ldGVycyBhbmQgbWF0cml4IHBhcmFtZXRlcnMgKi9cclxuXHRcdFx0XHRsZXQgY3VycmVudFJvdXRlID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblxyXG5cdFx0XHRcdC8qIEVuc3VyZSB0aGUgcm91dGUgZG9lc24ndCBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggKi9cclxuXHRcdFx0XHRjdXJyZW50Um91dGUgPSBjdXJyZW50Um91dGUuZW5kc1dpdGgoJy8nKSA/IGN1cnJlbnRSb3V0ZS5zdWJzdHJpbmcoMCwgLTEpIDogY3VycmVudFJvdXRlO1xyXG5cclxuXHRcdFx0XHQvKiBGaW5kIHRoZSBzdWJtZW51IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IHJvdXRlICovXHJcblx0XHRcdFx0dmFyIHN1Ym1lbnUgPSB0aGlzLm1lbnUuaXRlbXMuZmlsdGVyKHggPT4geC5wYXRoID09IGN1cnJlbnRSb3V0ZSlbMF07XHJcblx0XHRcdFx0aWYgKHN1Ym1lbnUpIHtcclxuXHRcdFx0XHRcdC8qIFNldCB0aGUgc3VidGl0bGUgdG8gdGhlIG1hdGNoaW5nIHN1Ym1lbnUncyB0aXRsZSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zdWJ0aXRsZSA9IHN1Ym1lbnUudGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgY29tbWFuZHMgYW5kIGEgc3RhcnRpbmcgcG9pbnQuXHJcblx0ICogQHBhcmFtIGNvbW1hbmRzIEFycmF5IG9mIGNvbW1hbmRzIHJlcHJlc2VudGluZyB0aGUgcm91dGUgdG8gbmF2aWdhdGUgdG9cclxuXHQgKiBAcGFyYW0gcXVlcnlQYXJhbXMgT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBmcmFnbWVudCBPcHRpb25hbCBmcmFnbWVudCAoYW5jaG9yKSB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBwcmVzZXJ2ZUZyYWdtZW50IFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgZnJhZ21lbnQgaW4gdGhlIFVSTFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIHF1ZXJ5UGFyYW1zPzogYW55LCBmcmFnbWVudD86IHN0cmluZywgcHJlc2VydmVGcmFnbWVudD86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XHJcblx0XHRcdC8qIE1lcmdlIGFueSBhZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgcmV0dXJuVXJsICovXHJcblx0XHRcdHF1ZXJ5UGFyYW1zOiBPYmplY3QuYXNzaWduKHsgcmV0dXJuVXJsOiB0aGlzLmN1cnJlbnRSb3V0ZSB9LCBxdWVyeVBhcmFtcyB8fCB7fSksXHJcblx0XHRcdC8qIFNldCB0aGUgZnJhZ21lbnQsIGlmIHByb3ZpZGVkICovXHJcblx0XHRcdGZyYWdtZW50OiBmcmFnbWVudCxcclxuXHRcdFx0LyogUHJlc2VydmUgdGhlIGZyYWdtZW50IGZyb20gdGhlIHByZXZpb3VzIFVSTCBpZiBzcGVjaWZpZWQgKi9cclxuXHRcdFx0cHJlc2VydmVGcmFnbWVudDogcHJlc2VydmVGcmFnbWVudCxcclxuXHRcdFx0LyogTWFrZSB0aGUgcm91dGUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcm91dGUgaWYgYXBwbGljYWJsZSAqL1xyXG5cdFx0XHRyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBsYXlzIGEgc2hvcnQgYmVlcCBzb3VuZCB1c2luZyBhbiBlbWJlZGRlZCBhdWRpbyBmaWxlIGluIGJhc2U2NCBmb3JtYXQuXHJcblx0ICogVGhlIG1ldGhvZCBsb2FkcyBhbmQgcGxheXMgdGhlIGF1ZGlvIGZpbGUgaW1tZWRpYXRlbHkgdXBvbiBjYWxsaW5nLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwbGF5QmVlcFNvdW5kKCk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5iZWVwQXVkaW8ucGxheSgpO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGxheXMgYSBzaG9ydCB3YXJuaW5nIHNvdW5kIHVzaW5nIGFuIGVtYmVkZGVkIGF1ZGlvIGZpbGUgaW4gYmFzZTY0IGZvcm1hdC5cclxuXHQgKiBUaGUgbWV0aG9kIGxvYWRzIGFuZCBwbGF5cyB0aGUgYXVkaW8gZmlsZSBpbW1lZGlhdGVseSB1cG9uIGNhbGxpbmcuXHJcblx0ICovXHJcblx0cHVibGljIHBsYXlXYXJuU291bmQoKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLndhcm5BdWRpby5wbGF5KCk7XHJcblx0XHR9IGNhdGNoIChlcnJvcikgeyB9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2dzIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWRcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBsb2dcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGxvZ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2cobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZCAqL1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0LyogTG9nIHRoZSBtZXNzYWdlIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBjb25zb2xlICovXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UsIG9wdGlvbmFsUGFyYW1zKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZ3MgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZSB0byBsb2dcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHdhcm5pbmdcclxuXHQgKi9cclxuXHRwdWJsaWMgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0LyogQ2hlY2sgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkICovXHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHQvKiBMb2cgdGhlIHdhcm5pbmcgbWVzc2FnZSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycyB0byB0aGUgY29uc29sZSAqL1xyXG5cdFx0XHRjb25zb2xlLndhcm4obWVzc2FnZSwgb3B0aW9uYWxQYXJhbXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29udmVydCBhbiBvYmplY3QgdG8gSHR0cEhlYWRlcnMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIHdpbGwgYmUgY29udmVydGVkIGludG8gaGVhZGVyc1xyXG5cdCAqIEByZXR1cm5zIEh0dHBIZWFkZXJzIG9iamVjdCBjb250YWluaW5nIHRoZSBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgYm9keVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0b0h0dHBIZWFkZXJzKGJvZHk6IGFueSk6IEh0dHBIZWFkZXJzIHtcclxuXHRcdC8qIElmIHRoZSBib2R5IGlzIG51bGwgb3IgdW5kZWZpbmVkLCByZXR1cm4gZW1wdHkgaGVhZGVycyAqL1xyXG5cdFx0aWYgKCFib2R5KSB7XHJcblx0XHRcdHJldHVybiBuZXcgSHR0cEhlYWRlcnMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDb252ZXJ0IHRoZSBvYmplY3QncyBwcm9wZXJ0aWVzIHRvIEh0dHBIZWFkZXJzLCBmaWx0ZXJpbmcgb3V0IG51bGwgb3IgZW1wdHkgdmFsdWVzICovXHJcblx0XHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYm9keSlcclxuXHRcdFx0LmZpbHRlcihrZXkgPT4gYm9keVtrZXldICE9IG51bGwgJiYgYm9keVtrZXldICE9ICcnKVxyXG5cdFx0XHQucmVkdWNlKChwLCBrZXkpID0+IHAuc2V0KGtleSwgYm9keVtrZXldKSwgbmV3IEh0dHBIZWFkZXJzKCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2VzIGFuZCBmb3JtYXRzIEhUVFAgcmVzcG9uc2UgZXJyb3JzLlxyXG5cdCAqIEBwYXJhbSBlcnJvcnMgVGhlIGVycm9yIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZSBIVFRQIHJlc3BvbnNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHBhcnNlRXJyb3JzKGVycm9yczogYW55KTogdm9pZCB7XHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBlcnJvcnMgYXJyYXkgYW5kIHJlc2V0IGxvYWRpbmcvc2F2aW5nIGluZGljYXRvcnMgKi9cclxuXHRcdHRoaXMuZXJyb3JzID0gW107XHJcblx0XHR0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cclxuXHRcdC8qIElmIHRoZXJlIGFyZSBlcnJvcnMsIGl0ZXJhdGUgdGhyb3VnaCB0aGVtIGFuZCBhZGQgdGhlbSB0byB0aGUgZXJyb3JzIGFycmF5ICovXHJcblx0XHRpZiAoZXJyb3JzKSB7XHJcblx0XHRcdE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChlbCA9PiB7XHJcblx0XHRcdFx0bGV0IGVycm9yID0gZXJyb3JzW2VsXTtcclxuXHRcdFx0XHQvKiBJZiB0aGUgZXJyb3IgaXMgYW4gYXJyYXksIGl0ZXJhdGUgb3ZlciB0aGUgYXJyYXkgYW5kIGFkZCBlYWNoIGVycm9yICovXHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZXJyb3IpKSB7XHJcblx0XHRcdFx0XHRlcnJvci5mb3JFYWNoKGVyciA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JzLnB1c2goZXJyKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgZXJyb3IgaXMgYSBzdHJpbmcsIGFkZCBpdCBkaXJlY3RseSB0byB0aGUgZXJyb3JzIGFycmF5ICovXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlIEh0dHAgb3BlcmF0aW9uIHRoYXQgZmFpbGVkLlxyXG5cdCAqIExldCB0aGUgYXBwIGNvbnRpbnVlLlxyXG5cdCAqIEBwYXJhbSBvcGVyYXRpb24gLSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBmYWlsZWRcclxuXHQgKiBAcGFyYW0gcmVzdWx0IC0gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGFzIHRoZSBvYnNlcnZhYmxlIHJlc3VsdFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xyXG5cdFx0cmV0dXJuIChlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxUPiA9PiB7XHJcblxyXG5cdFx0XHQvKiBQYXJzZSB0aGUgZXJyb3IgbWVzc2FnZXMgKi9cclxuXHRcdFx0dGhpcy5wYXJzZUVycm9ycyhlcnJvcik7XHJcblxyXG5cdFx0XHQvKiBMb2cgdG8gY29uc29sZSAqL1xyXG5cdFx0XHR0aGlzLndhcm4oYCR7b3BlcmF0aW9ufSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuXHJcblx0XHRcdC8qIExldCB0aGUgYXBwIGtlZXAgcnVubmluZyBieSByZXR1cm5pbmcgYW4gZW1wdHkgcmVzdWx0ICovXHJcblx0XHRcdHJldHVybiBvZihyZXN1bHQgYXMgVCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW5zIHRoZSBvYmplY3QgYnkgcmVtb3ZpbmcgcHJvcGVydGllcyB0aGF0IGFyZSBudWxsLCB1bmRlZmluZWQsIG9yIGVtcHR5IHN0cmluZ3NcclxuXHQgKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gY2xlYW5cclxuXHQgKiBAcmV0dXJucyBUaGUgY2xlYW5lZCBvYmplY3RcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2xlYW4ob2JqOiBhbnkpOiBhbnkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgKi9cclxuXHRcdFx0Zm9yICh2YXIgcHJvcE5hbWUgaW4gb2JqKSB7XHJcblx0XHRcdFx0LyogSWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZWxldGUgaXQgKi9cclxuXHRcdFx0XHRpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgfHwgb2JqW3Byb3BOYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIG9ialtwcm9wTmFtZV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHQvKiBFcnJvciBoYW5kbGluZyBjYW4gYmUgZG9uZSBoZXJlIGlmIG5lY2Vzc2FyeSAqL1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJldHVybiB0aGUgY2xlYW5lZCBvYmplY3QgKi9cclxuXHRcdHJldHVybiBvYmo7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYW5pdGl6ZXMgdGhlIHNwZWNpZmllZCBvYmplY3QgYnkgcmVtb3ZpbmcgZmFsc3kgdmFsdWVzIGFuZCBjb252ZXJ0aW5nIHN0cmluZyBudW1iZXJzIHRvIG51bWJlcnNcclxuXHQgKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gc2FuaXRpemVcclxuXHQgKiBAcGFyYW0gaWdub3JlIFByb3BlcnRpZXMgdG8gaWdub3JlIGR1cmluZyB0aGUgc2FuaXRpemF0aW9uXHJcblx0ICogQHJldHVybnMgVGhlIHNhbml0aXplZCBvYmplY3RcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2FuaXRpemVPYmplY3Qob2JqOiBhbnksIC4uLmlnbm9yZTogc3RyaW5nW10pOiBhbnkge1xyXG5cdFx0LyogSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzIGFuZCBmaWx0ZXIgb3V0IGZhbHN5IHZhbHVlcyAqL1xyXG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iailcclxuXHRcdFx0LmZpbHRlcih4ID0+IG9ialt4XSlcclxuXHRcdFx0LyogSWdub3JlIHByb3BlcnRpZXMgdGhhdCBhcmUgaW4gdGhlIGlnbm9yZSBsaXN0IChjYXNlIGluc2Vuc2l0aXZlKSAqL1xyXG5cdFx0XHQuZmlsdGVyKHggPT4gIShpZ25vcmUgfHwgW10pLm1hcCh4ID0+IHgudG9Mb3dlckNhc2UoKSkuaW5jbHVkZXMoeC50b0xvd2VyQ2FzZSgpKSlcclxuXHRcdFx0LyogQ29udmVydCBzdHJpbmcgbnVtYmVycyB0byBhY3R1YWwgbnVtYmVycyAqL1xyXG5cdFx0XHQucmVkdWNlKChyZXN1bHQ6IGFueSwga2V5KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBpc05hTigrb2JqW2tleV0pID8gb2JqW2tleV0gOiArb2JqW2tleV07XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhbnkgdGV4dCBpbiB0aGUgZG9jdW1lbnRcclxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRleHQgaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBmYWxzZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpc1RleHRTZWxlY3RlZCA9ICgpOiBib29sZWFuID0+XHJcblx0XHQvKiBVc2UgdGhlIHdpbmRvdy5nZXRTZWxlY3Rpb24gQVBJIHRvIGNoZWNrIGlmIHRleHQgaXMgc2VsZWN0ZWQgKi9cclxuXHRcdCh3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpPy5sZW5ndGggPz8gMCkgPiAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZFxyXG5cdCAqL1xyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0LyogVW5zdWJzY3JpYmUgZnJvbSBhbGwgTWF0RXhwYW5zaW9uUGFuZWwgc3Vic2NyaXB0aW9ucyAqL1xyXG5cdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnMuZm9yRWFjaCh4ID0+IHgudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG59Il19