tango-app-ui-auth 3.5.0-beta.8-prod-dev12 → 3.5.0-beta.8-prod-dev14

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.
@@ -165,7 +165,8 @@ export class Step3Component {
165
165
  },
166
166
  error: (err) => {
167
167
  if (err) {
168
- this.toastService.getErrorToast(err.error.error);
168
+ const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Enter Valid OTP';
169
+ this.toastService.getErrorToast(errorMessage);
169
170
  }
170
171
  },
171
172
  }));
@@ -214,6 +215,8 @@ export class Step3Component {
214
215
  },
215
216
  error: (res) => {
216
217
  if (res) {
218
+ const errorMessage = res?.error?.message || res?.error?.error || res?.message || 'Enter Valid OTP';
219
+ this.toastService.getErrorToast(errorMessage);
217
220
  this.invalidOtp = true;
218
221
  this.cd.detectChanges();
219
222
  }
@@ -269,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
269
272
  type: ViewChild,
270
273
  args: ['ngOtpInput']
271
274
  }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcDMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1zaWdudXAvc3RlcC9zdGVwMy9zdGVwMy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hdXRoL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hdXRoLXNpZ251cC9zdGVwL3N0ZXAzL3N0ZXAzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFnQjNDLE1BQU0sT0FBTyxjQUFjO0lBd0RoQjtJQUFnQztJQUFpQztJQUF1QjtJQUE4QjtJQUNySDtJQUFnQztJQUFtQztJQXhEN0UsVUFBVSxHQUFXLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtJQUMvQyxRQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsd0JBQXdCO0lBQ25ELFNBQVMsR0FBWSxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7SUFDbkQsVUFBVSxHQUFZLEtBQUssQ0FBQyxDQUFDLDBCQUEwQjtJQUN2RCxxQkFBcUIsQ0FBUztJQUM5QixXQUFXLEdBQVcsS0FBSyxDQUFBO0lBQzNCLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0Msd0NBQXdDO0lBQ3hDLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFF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QUksSUFBSSxDQUFBO1NBQzNCO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUE7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzlCLENBQUM7d0dBaFJZLGNBQWM7NEZBQWQsY0FBYyw4SkNsQjNCLG9pdkRBOHFCQTs7NEZENXBCYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7cVJBZ0RJLGFBQWE7c0JBQXJDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb252ZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbnZlcnNpb24uc2VydmljZSc7XHJcblxyXG5cclxuaW50ZXJmYWNlIElucHV0U3R5bGVzIHtcclxuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7IC8vIERlZmluZSBrZXktdmFsdWUgcGFpcnMgd2hlcmUga2V5cyBhcmUgc3RyaW5ncyBhbmQgdmFsdWVzIGFyZSBzdHJpbmdzXHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3RlcDMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwMy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3N0ZXAzLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RlcDNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7IC8vIEluaXRpYWwgaW5wdXQgdmFsdWVcclxuICBpc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIGZvciBhY3RpdmUgc3RhdGVcclxuICBpc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyBmb3IgaG92ZXIgc3RhdGVcclxuICBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgZm9yIGRpc2FibGVkIHN0YXRlXHJcbiAgYXV0aGxvY2FsU3RvcmFnZVRva2VuOiBzdHJpbmc7XHJcbiAgZW5hYmxlQWdyZWU6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgb25Nb3VzZUVudGVyKCkge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIG1vdXNlIGxlYXZlIGV2ZW50XHJcbiAgb25Nb3VzZUxlYXZlKCkge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcclxuICB9XHJcbiAgICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgaW5wdXQgY2hhbmdlIGV2ZW50XHJcbiAgICBvbklucHV0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGdldCBpbnB1dCBzdHlsZXMgZHluYW1pY2FsbHlcclxuICBnZXRJbnB1dFN0eWxlcygpOiBJbnB1dFN0eWxlcyB7XHJcbiAgICBsZXQgc3R5bGVzOiBJbnB1dFN0eWxlcyA9IHt9OyAvLyBEZWZpbmUgc3R5bGVzIG9iamVjdCB3aXRoIHR5cGUgSW5wdXRTdHlsZXNcclxuICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSAnYmx1ZSc7IC8vIEJvcmRlciBjb2xvciB3aGVuIGlucHV0IGlzIGFjdGl2ZVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzSG92ZXJlZCkge1xyXG4gICAgICBzdHlsZXNbJ2JvcmRlci1jb2xvciddID0gJ2dyZWVuJzsgLy8gQm9yZGVyIGNvbG9yIHdoZW4gaW5wdXQgaXMgaG92ZXJlZFxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgc3R5bGVzWydib3JkZXItY29sb3InXSA9ICcjY2NjJzsgLy8gQm9yZGVyIGNvbG9yIHdoZW4gaW5wdXQgaXMgZGlzYWJsZWRcclxuICAgICAgc3R5bGVzWydjb2xvciddID0gJyM5OTknOyAvLyBUZXh0IGNvbG9yIHdoZW4gaW5wdXQgaXMgZGlzYWJsZWRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSAnI2NjYyc7IC8vIERlZmF1bHQgYm9yZGVyIGNvbG9yXHJcbiAgICAgIHN0eWxlc1snY29sb3InXSA9ICcjMzMzJzsgLy8gRGVmYXVsdCB0ZXh0IGNvbG9yXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG4gIH1cclxuICBwYW5lbE9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIHRlcm1zYW5kY29uZGl0aW9uOiBhbnk7XHJcbiAgdHlwZTogYW55O1xyXG4gIGFjY291bnREYXRhOiBhbnk7XHJcbiAgdGVybXM6IGFueTtcclxuICBpZHZhbHVlOiBhbnk7XHJcbiAgZW1haWw6IGFueTtcclxuICBzaG93dmFsdWU6IGJvb2xlYW4gPWZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ25nT3RwSW5wdXQnKSBuZ090cElucHV0UmVmOiBhbnk7XHJcbiAgY291bnRlcjogbnVtYmVyO1xyXG4gIHRpY2s6IG51bWJlcjtcclxuICByZXNlbmQ6IGJvb2xlYW4gPXRydWU7XHJcbiAgY291bnREb3duOiBhbnk7XHJcbiAgb3RwOiBhbnk7XHJcbiAgYWJvdXRGb3JtRGF0YTogYW55O1xyXG4gIHByaWNpbmdGb3JtRGF0YTogYW55O1xyXG4gIHJldHVyblVybDogYW55O1xyXG4gIGludmFsaWRPdHA6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgc3Vic2NyaXB0aW9uczpTdWJzY3JpcHRpb25bXSA9IFtdXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBhdXRoU2VydmljZTpBdXRoU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6Um91dGVyLCBwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGNkOkNoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIHRvYXN0U2VydmljZTpUb2FzdFNlcnZpY2UsIHByaXZhdGUgc2V0dGVyc2VydmljZTogQ29udmVyc2lvblNlcnZpY2UsXHJcbil7XHJcbiAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgdGhpcy5ncy5lbnZpcm9ubWVudC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgaWYgKGVudikge1xyXG4gICAgICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbiA9IGAke2Vudi5hcHBWZXJzaW9ufS0ke2Vudi5VU0VSREFUQV9LRVl9YDtcclxuICAgIH1cclxuICB9KVxyXG4gIClcclxuXHJcbiAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hdXRoU2VydmljZS5hYm91dEZvcm1EYXRhLnN1YnNjcmliZSgoZGF0YSk9PntpZihkYXRhKXt0aGlzLmFib3V0Rm9ybURhdGEgPSBkYXRhfX0pKVxyXG4gIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYXV0aFNlcnZpY2UucHJpY2luZ0Zvcm1EYXRhLnN1YnNjcmliZSgoZGF0YSk9PntpZihkYXRhKXt0aGlzLnByaWNpbmdGb3JtRGF0YSA9IGRhdGF9fSkpXHJcbn1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pPT57XHJcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vIGdldCByZXR1cm4gdXJsIGZyb20gcm91dGUgcGFyYW1ldGVycyBvciBkZWZhdWx0IHRvICcvJ1xyXG4gIHRoaXMucmV0dXJuVXJsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sncmV0dXJuVXJsJy50b1N0cmluZygpXSB8fCAnLyc7ICAgICAgXHJcbn1cclxuICB1cGRhdGV0ZXJtcyhldnQ6IGFueSkge1xyXG4gICAgdGhpcy50ZXJtcyA9IGV2dC50YXJnZXQuY2hlY2tlZFxyXG4gIH1cclxuXHJcbiAgZW50ZXJwcmlzZWFjdGl2YXRlKCl7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgbmFtZTp0aGlzLmFib3V0Rm9ybURhdGE/LmZpcnN0TmFtZSxcclxuICAgICAgZW1haWw6dGhpcy5hYm91dEZvcm1EYXRhPy5jb3Jwb3JhdGVFbWFpbFxyXG4gICAgfVxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5zZW5kU2lnbnVwT3RwKGRhdGEpLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6KHJlcyk9PntcclxuICAgICAgICAgIGlmKHJlcyl7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRlciA9IDYwO1xyXG4gICAgICAgICAgICB0aGlzLnRpY2sgPSAxMDAwO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMucmVzZW5kID0gZmFsc2U7XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5jb3VudERvd24gPSB0aW1lcigwLCB0aGlzLnRpY2spLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudGVyID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudERvd24udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLmNvdW50ZXIgLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnb3ZlcmxheS1vcGVuJyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd3ZhbHVlID10cnVlIFxyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgICAgIGlmKGVycil7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoZXJyLmVycm9yLmVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICAgICkgIFxyXG4gICAgKVxyXG5cclxuICB9XHJcblxyXG4gIHJlc2VuZE9UUCgpIHtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBuYW1lOnRoaXMuYWJvdXRGb3JtRGF0YT8uZmlyc3ROYW1lLFxyXG4gICAgICBlbWFpbDp0aGlzLmFib3V0Rm9ybURhdGE/LmNvcnBvcmF0ZUVtYWlsXHJcbiAgICB9XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5zZW5kU2lnbnVwT3RwKGRhdGEpLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6KHJlcyk9PntcclxuICAgICAgICAgIGlmKHJlcyl7XHJcbiAgICAgICAgICAgIHRoaXMubmdPdHBJbnB1dFJlZi5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRlciA9IDYwO1xyXG4gICAgICAgICAgICB0aGlzLnRpY2sgPSAxMDAwO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMucmVzZW5kID0gZmFsc2U7XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5jb3VudERvd24gPSB0aW1lcigwLCB0aGlzLnRpY2spLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudGVyID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudERvd24udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLmNvdW50ZXIgLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjooZXJyKT0+e1xyXG4gICAgICAgICAgaWYoZXJyKXtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnIuZXJyb3IuZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICAgKSBcclxuICAgIClcclxuXHJcbiAgfVxyXG4gIG90cHN1Ym1pdCgpe1xyXG4gICBsZXQgZGF0YTphbnkgPSB7XHJcbiAgICAgIGNsaWVudE5hbWU6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY2xpZW50TmFtZSxcclxuICAgICAgd2Vic2l0ZVVybDogdGhpcy5hYm91dEZvcm1EYXRhPy53ZWJzaXRlVXJsLFxyXG4gICAgICAgZmlyc3ROYW1lOiB0aGlzLmFib3V0Rm9ybURhdGE/LmZpcnN0TmFtZSxcclxuICAgICAgIGxhc3ROYW1lOiB0aGlzLmFib3V0Rm9ybURhdGE/Lmxhc3ROYW1lLFxyXG4gICAgICAgY29ycG9yYXRlRW1haWw6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY29ycG9yYXRlRW1haWwsXHJcbiAgICAgICBtb2JpbGVOdW1iZXI6IHRoaXMuYWJvdXRGb3JtRGF0YT8ubW9iaWxlTnVtYmVyLFxyXG4gICAgICAgY291bnRyeUNvZGU6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY291bnRyeUNvZGUsXHJcbiAgICAgICBwYXNzd29yZDogdGhpcy5hYm91dEZvcm1EYXRhPy5wYXNzd29yZCxcclxuICAgICAgIHRvdGFsU3RvcmVzOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8udG90YWxTdG9yZXMudmFsdWUsXHJcbiAgICAgICBzdG9yZVNpemU6dGhpcy5wcmljaW5nRm9ybURhdGE/LnN0b3JlU2l6ZS52YWx1ZSxcclxuICAgICAgIHRvdGFsQ2FtZXJhOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8uc3RvcmVTaXplPy5jYW1lcmFzLFxyXG4gICAgICAgc3Vic2NyaXB0aW9uUGVyaW9kOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8uc3Vic2NyaXB0aW9uUGVyaW9kLFxyXG4gICAgICAgc3Vic2NyaXB0aW9uVHlwZTogdGhpcy5wcmljaW5nRm9ybURhdGE/LnN1YnNjcmlwdGlvblR5cGUsXHJcbiAgICAgICAgb3RwOnRoaXMub3RwXHJcbiAgIH1cclxuXHJcbiAgIGlmKGRhdGEuc3Vic2NyaXB0aW9uVHlwZSA9PT0gJ2ZyZWUnKXtcclxuICAgIGRhdGFbJ3Byb2R1Y3QnXSA9IFsndGFuZ29UcmFmZmljJ11cclxuICAgfWVsc2UgaWYoZGF0YS5zdWJzY3JpcHRpb25UeXBlID09PSAncHJlbWl1bScpe1xyXG4gICAgZGF0YVsncHJvZHVjdCddID0gdGhpcy5nZXRUcnVlS2V5cyh0aGlzLnByaWNpbmdGb3JtRGF0YT8ucHJvZHVjdClcclxuICAgfWVsc2UgaWYoZGF0YS5zdWJzY3JpcHRpb25UeXBlID09PSAnZW50ZXJwcmlzZScpe1xyXG4gICAgZGF0YVsncHJvZHVjdCddID0gWyd0YW5nb1RyYWZmaWMnLCAndGFuZ29ab25lJywgJ3RhbmdvVHJheCddXHJcbiAgIH1cclxuICAgXHJcbiAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ251cChkYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDoocmVzKT0+e1xyXG4gICAgICBpZihyZXMpe1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuYWJvdXRGb3JtRGF0YS5uZXh0KG51bGwpXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5wcmljaW5nRm9ybURhdGEubmV4dChudWxsKVxyXG4gICAgICBcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdvdmVybGF5LW9wZW4nKTtcclxuICAgICAgdGhpcy5zaG93dmFsdWUgPWZhbHNlIFxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICBsZXQgbG9naW5Ub2tlbjogYW55ID1cclxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4pO1xyXG4gICAgaWYgKGxvZ2luVG9rZW4pIHtcclxuICAgICAgbG9naW5Ub2tlbiA9IEpTT04ucGFyc2UobG9naW5Ub2tlbik7XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeShyZXM/LmRhdGE/LnJlc3VsdClcclxuICAgICAgKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMudXNlclByb2ZpbGUoKTtcclxuICAgICAgfVxyXG4gICAgIH0sXHJcbiAgICAgZXJyb3I6KHJlcyk9PntcclxuICAgICAgaWYocmVzKXtcclxuICAgICAgdGhpcy5pbnZhbGlkT3RwID0gdHJ1ZVxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9XHJcbiAgICAgfSxcclxuICAgfSkgXHJcbiAgIClcclxuXHJcbiAgIFxyXG5cclxuICB9XHJcblxyXG4gIG9uT3RwQ2hhbmdlKGV2ZW50OmFueSl7XHJcbiAgICB0aGlzLmludmFsaWRPdHAgPSBmYWxzZVxyXG4gICAgdGhpcy5vdHAgPSBldmVudFxyXG4gIH1cclxuXHJcbiAgZ2V0VHJ1ZUtleXMob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmZpbHRlcihrZXkgPT4gb2JqW2tleV0gPT09IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgdXNlclByb2ZpbGUoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICB0aGlzLmF1dGhTZXJ2aWNlLnVzZXJQcm9maWxlRGV0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMmJiByZXMuY29kZSA9PTIwMCkge1xyXG4gICAgICAgICAgdGhpcy5ncy51c2VyQWNjZXNzLm5leHQocmVzLmRhdGE/LnBlcm1pc3Npb24pXHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL2JyYW5kcyddKTtcclxuICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yZXR1cm5VcmwpO1xyXG4gICAgICAgIH0gXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnIuZXJyb3IuZXJyb3IpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICAgIClcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgcHJldlN0ZXAoKSB7XHJcbiAgICB0aGlzLnNldHRlcnNlcnZpY2UuY29tcGxldGVTdGVwcGVyKHsgc3RlcDogMiwgcHJldjogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBhdEJvdHRvbSA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gZWxlbWVudC5zY3JvbGxUb3AgPD0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAxO1xyXG4gICAgXHJcbiAgICBpZiAoYXRCb3R0b20pIHtcclxuICAgICAgICB0aGlzLmVuYWJsZUFncmVlICA9IHRydWVcclxuICAgIH1cclxufVxyXG5cclxuY2xvc2VNb2RhbCgpe1xyXG4gIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnb3ZlcmxheS1vcGVuJyk7XHJcbiAgdGhpcy5zaG93dmFsdWUgPSAhdGhpcy5zaG93dmFsdWVcclxuICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG5cclxuICB0aGlzLmNvdW50RG93bi51bnN1YnNjcmliZSgpXHJcbn1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtdC0xMCBteC0xNVwiPlxyXG4gICAgPGRpdiBpZD1cImt0X2NvbnRlbnRfY29udGFpbmVyXCIgY2xhc3M9XCJjb250YWluZXIteHhsIGZvbnQgaC0xMDAgIG14LTEwIHBlLTE1IG15LTdcIj5cclxuICAgICAgICA8ZGl2IChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiIGNsYXNzPVwiaC01NTBweCBzdGlja3lcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBjb2wtbWQtMTIgY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItMCBtdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluIGZzLWxnLTEgbWItNCB0ZXh0LWdyYXktODAwXCI+R2VuZXJhbCBUZXJtcyBhbmQgQ29uZGl0aW9ucy1TQUFTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdyZWVtZW50PC9zcGFuPjxzcGFuIGNsYXNzPVwiIHRleHQtbXV0ZWQgZnctc2VtaWJvbGQgbWUtMSBzdWJcIj5UaGVzZSB0ZXJtcyBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zIChoZXJlaW5hZnRlciBjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG8gYXMgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxTQUFTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1z4oCdKTwvc3Bhbj4gc2hhbGwgZ292ZXJuIHlvdXIgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4o4oCcVXNlcuKAnTwvc3Bhbj4gb3IgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxZb3XigJ08L3NwYW4+IG9yIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcWW91cuKAnTwvc3Bhbj5vclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcQ3VzdG9tZXLigJ0pPC9zcGFuPiB1c2Ugb2YgU2VydmljZXMgKGFzIGRlZmluZWQgYmVsb3cpIHRocm91Z2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHdlYnNpdGUgaHR0cHM6Ly90YW5nb2V5ZS5haS8gPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4oV2Vic2l0ZSkuPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIHRleHQtbXV0ZWQgZnctc2VtaWJvbGQgbWUtMSBteS0xIHN1YlwiPkJ5IGFjY2Vzc2luZyBvciB1c2luZyB0aGUgU2VydmljZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBXZWJzaXRlIG9yIGJ5IGV4ZWN1dGluZyBhbiBPcmRlciBGb3JtLCB0aGF0IHJlZmVyZW5jZXMgdGhlc2UgU0FBUyBUZXJtcywgWW91XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlc2UgU2FhUyBUZXJtcy4gSWYgWW91IGFyZSBhY2Nlc3Npbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlIG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYWxmIG9mIGEgQ29tcGFueSBvciBvdGhlciBsZWdhbCBlbnRpdHksIFlvdSByZXByZXNlbnQgdGhhdCBZb3UgaGF2ZSB0aGUgYXV0aG9yaXR5IHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZCBzdWNoIGVudGl0eSBhbmQgaXRzIGFmZmlsaWF0ZXMgdG8gdGhlc2UgU0FBUyBUZXJtcyBpbiB3aGljaCBjYXNlIHRoZSB0ZXJtcyDigJxVc2Vy4oCdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ig4oCcWW914oCdIG9yIOKAnFlvdXLigJ0gb3Ig4oCcQ3VzdG9tZXLigJ0gc2hhbGwgcmVmZXIgdG8gc3VjaCBlbnRpdHkgYW5kIGl0cyBhZmZpbGlhdGVzLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS1sZy0yXCI+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1hbGlnbi1qdXN0aWZ5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEuIERlZmluaXRpb24gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IOKAnE9yZGVyIEZvcm3igJ0gbWVhbnMgdGhlIGVhY2ggb3JkZXIgZm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wb3NhbCBvciBzdGF0ZW1lbnQgb2Ygd29yayByZWZlcmVuY2luZyB0aGlzIEFncmVlbWVudCB3aGVyZXZlciBhcHBsaWNhYmxlLiA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxTb2Z0d2FyZeKAnTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyB0aGUgZGF0YSBhbmFseXRpY3MgYW5kIGJ1c2luZXNzIGludGVsbGlnZW5jZSBzb2Z0d2FyZSBhbmQgaXRzIG9iamVjdCBjb2RlIHZlcnNpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBlbmFibGVzIHRoZSBDdXN0b21lciB0byBpZGVudGlmeSwgYW1vbmdzdCBvdGhlcnMsIGN1c3RvbWVyIGZvb3RmYWxscyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW1vZ3JhcGhpY3MsIGlkZW50aWZ5IG1pc3NlZCBvcHBvcnR1bml0aWVzLCBpbmNsdWRpbmcgYW55IHVwZGF0ZXMgb3IgbmV3IHZlcnNpb25zLjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFNlcnZpY2Vz4oCdPC9zcGFuPnJlZmVyIHRvIHRoZSBpbi1zdG9yZSBBSSBkcml2ZW4gYW5hbHl0aWNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgdGhyb3VnaCB0aGUgU29mdHdhcmUgdG8gdGhlIEN1c3RvbWVyIHRoYXQgaXMgaG9zdGVkIGJ5IFRhbmdvIEV5ZSBhbmQgbWFkZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB0byBDdXN0b21lciBvdmVyIGEgbmV0d29yayB3aGV0aGVyIG9uIGEgdHJpYWwgb3IgcGFpZCBiYXNpcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IOKAnFRlcm3igJ0gc2hhbGwgbWVhbiB0aGF0IHBlcmlvZCBzcGVjaWZpZWQgaW4gYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NoZWR1bGUgdG8gYmUgZXhlY3V0ZWQgc2VwYXJhdGVseSB3aXRoIHRoZSBDdXN0b21lciBkdXJpbmcgd2hpY2ggQ3VzdG9tZXIgd2lsbCBoYXZlIG9uLWxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyBhbmQgdXNlIG9mIHRoZSBTZXJ2aWNlcyB0aHJvdWdoIHRoZSBXZWJzaXRlLiA8L2xpPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4yLiBFbGlnaWJpbGl0eSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWIgbXktN1wiPkluIG9yZGVyIHRvIHVzZSB0aGUgU2VydmljZXMsIFlvdSBtdXN0Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+IEJlIGFib3ZlIDE4IHllYXJzIG9mIGFnZTsgPC9saT4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+Q29tcGxldGUgdGhlIGFjY291bnQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdG8gYWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgU2VydmljZXMgdGhyb3VnaCB0aGUgV2Vic2l0ZTs8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSB3aWxsIHByb3ZpZGUgY29ycmVjdCwgdXB0byBkYXRlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBpbmNsdWRpbmcgYmlsbGluZyBhZGRyZXNzOzwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gWW91IHdpbGwga2VlcCBhbGwgeW91ciBjcmVkZW50aWFscyBhbmQgcGFzc3dvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZGVudGlhbCBhbmQgYWxzbyByZXNwb25zaWJsZSB0byBtYWludGFpbmluZyB0aGUgc2FmZXR5IGFuZCBzZWN1cml0eSBvZiB5b3VyIHBlcnNvbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbjsgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSB3aWxsIHByb3ZpZGUgYWxsIHJlbGV2YW50IGFuZCByZXF1aXJlZCBoYXJkd2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvZnR3YXJlIGFzIHN1Z2dlc3RlZCBieSBUYW5nbyBFeWUgYXQgeW91ciBkZXNpZ25hdGVkIGxvY2F0aW9uIGluIG9yZGVyIHRvIGVuYWJsZSBUYW5nb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXllIHRvIGluc3RhbGwgdGhlIFNvZnR3YXJlIGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIFNlcnZpY2VzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+My4gU2VydmljZXMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj4gSW4gY29uc2lkZXJhdGlvbiBmb3IgcGF5bWVudCBvZiB0aGUgZmVlcywgVGFuZ28gRXllXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudHMgdGhlIEN1c3RvbWVyIGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgcGVyc29uYWwsIHJldm9jYWJsZSwgbGljZW5jZSB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIGFuZCB1c2UgdGhlIFNlcnZpY2VzIGluIGFjY29yZGFuY2Ugd2l0aCBUYW5nbyBFeWXigJlzIGludGVuZGVkIHB1cnBvc2UgZm9yIHRoZSBTZXJ2aWNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4oTGljZW5jZSkuPC9zcGFuPjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIFNlcnZpY2VzIGFyZSBub3QgY29udGluZ2VudCBvbiB0aGUgZGVsaXZlcnkgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBmdXR1cmUgZnVuY3Rpb25hbGl0eSBvciBmZWF0dXJlczwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2Ugb3IgcmVtb3ZlIGZlYXR1cmVzIG9mIHRoZSBTZXJ2aWNlcyBhbmQgb3IgdGhlIFNvZnR3YXJlIGZyb20gdGltZSB0byB0aW1lLiBXaGVyZSB0aGVyZSBpcyBhbnkgbWF0ZXJpYWwgYWx0ZXJhdGlvbiB0byB0aGUgU2VydmljZXMgYW5kIG9yIHRoZSBTb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBjbGF1c2UsIFRhbmdvIEV5ZSB3aWxsIHByb3ZpZGUgdGhlIEN1c3RvbWVyIHdpdGggMzAgYnVzaW5lc3MgZGF5c+KAmSBub3RpY2UgYW5kIHRoZSBDdXN0b21lciBhZ3JlZXMgdGhhdCBhbnkgbWF0ZXJpYWwgYWx0ZXJhdGlvbiBpcyBhdCBUYW5nbyBFeWXigJlzIGRpc2NyZXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkFjY2VzcyB0byB0aGUgU2VydmljZXMgc2hhbGwgYmUgbGltaXRlZCB0byBhdXRob3JpemVkIHBlcnNvbnMgd2l0aCB2YWxpZCBjcmVkZW50aWFscyB3aGljaCBpcyB0byBiZSBhZ3JlZWQgYXQgdGhlIHRpbWUgb2YgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgU2VydmljZXMgYW5kIHRoZSBXZWJzaXRlLiBJZiBpdCBpcyBhIHNpbmdsZSBhY2NvdW50IGFjY2Vzcywgc3VjaCBhY2NvdW50IHNoYWxsIG5vdCBiZSB1c2VkIGJ5IG11bHRpcGxlIHVzZXJzIGF0IHRoZSBzYW1lIHRpbWUuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY2hhbmdlLCBtb2RpZnksIGFtZW5kLCB1cGRhdGUsIHN1c3BlbmQgb3IgZGlzY29udGludWUgdGhlIHdob2xlIG9yIGFueSBwb3J0aW9uIG9mIHRoZSBTZXJ2aWNlcywgV2Vic2l0ZSBvciB0aGUgU2FhUyBUZXJtcyBhdCBhbnkgdGltZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0zXCI+WW91IGFncmVlIHRoYXTCoFRhbmdvIEV5ZTo8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+YS4gd2lsbCBzdXBwbHkgdGhlIFNlcnZpY2VzIG9uIGEgbm9uLWV4Y2x1c2l2ZSBiYXNpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj5iLiBkb2VzIG5vdCBtYWtlIGFueSB3YXJyYW50eSBvciByZXByZXNlbnRhdGlvbiBhcyB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFiaWxpdHkgb2YgdGhlIGZhY2lsaXRpZXMgb3Igc2VydmljZXMgb2YgYW55IHRoaXJkLXBhcnR5IHN1cHBsaWVyczsgYW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj5jLiBpcyBub3QgbGlhYmxlIGZvciBhbnkgZmFpbHVyZSBpbiwgZmF1bHQgd2l0aCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVncmFkYXRpb24gb2YgdGhlIFNlcnZpY2VzL1NvZnR3YXJlIGlmIHRoYXQgZmFpbHVyZSwgZmF1bHQgb3IgZGVncmFkYXRpb24gaXMgYXR0cmlidXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvciBjYXVzZWQgYnkgYW55IGZhaWx1cmUgb2YgdGhlIEN1c3RvbWVyIGVudmlyb25tZW50IG9yIHRoZSBmYWNpbGl0aWVzIG9yIHNlcnZpY2VzIG9mIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmQgcGFydHkuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+NC4gTGljZW5zZSBSZXN0cmljdGlvbnMgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktM1wiPiBZb3UgbXVzdCBub3QgYWNjZXNzIG9yIHVzZSB0aGUgU2VydmljZXMgYW5kIG9yIHRoZSBTb2Z0d2FyZSBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHRoZSBMaWNlbnNlIGFuZCBtYXkgbm90IGRvIG9yIGF1dGhvcml6ZSB0aGUgY29tbWlzc2lvbiBvZiBhbnkgYWN0IHRoYXQgd291bGQgb3IgbWlnaHQgaW52YWxpZGF0ZSBvciBiZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgVGFuZ28gRXll4oCZcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluIHRoZSBTZXJ2aWNlcyBvciBTb2Z0d2FyZS4gV2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nIHByb3Zpc2lvbnMsIHRoZSBDdXN0b21lciBhZ3JlZXMgYW5kIGFja25vd2xlZGdlcyB0aGF0IGl0IG11c3Qgbm90IGFuZCB3aWxsIG5vdCBwZXJtaXQgYW55IHBlcnNvbiB0bzo8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+YS4gcmVzZWxsLCBhc3NpZ24sIHRyYW5zZmVyLCBkaXN0cmlidXRlIG9yIHByb3ZpZGUgb3RoZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYWNjZXNzIHRvIHRoZSBTZXJ2aWNlczs8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmIuIOKAnGZyYW1l4oCdLCDigJxtaXJyb3LigJ0gb3Igc2VydmUgYW55IG9mIHRoZSBTZXJ2aWNlcy9Tb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbiBhbnkgd2ViIHNlcnZlciBvciBvdGhlciBjb21wdXRlciBzZXJ2ZXIgb3ZlciB0aGUgaW50ZXJuZXQgb3IgYW55IG90aGVyIG5ldHdvcms7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmMuIGNvcHksIGFsdGVyLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGZyb20sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjZSwgcmVzZWxsLCB0cmFuc2ZlciB0byBhIHRoaXJkIHBhcnR5LCByZXZlcnNlIGFzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCByZXZlcnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUgb3IgZW5oYW5jZSB0aGUgU2VydmljZXMgb3IgU29mdHdhcmU7IG9yIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5kIC5hbHRlciwgcmVtb3ZlIG9yIHRhbXBlciB3aXRoIGFueSB0cmFkZW1hcmtzLCBhbnkgcGF0ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNvcHlyaWdodCBub3RpY2VzLCBvciBhbnkgY29uZmlkZW50aWFsaXR5IGxlZ2VuZCBvciBub3RpY2UsIG9yIGFueSBudW1iZXJzLCBvciBvdGhlciBtZWFucyBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWNhdGlvbiB1c2VkIG9uIG9yIGluIHJlbGF0aW9uIHRvIHRoZSBTZXJ2aWNlcyBvciBTb2Z0d2FyZS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIEN1c3RvbWVyIG11c3Qgbm90IHVzZSB0aGUgU2VydmljZXMgaW4gYW55IHdheSB3aGljaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiBicmVhY2ggb2YgYW55IHN0YXR1dGUsIHJlZ3VsYXRpb24sIGxhdyBvciBsZWdhbCByaWdodCBvZiBhbnkgcGVyc29uIHdpdGhpbiB0aGUgUmVwdWJsaWMgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5kaWEgb3IgdGhlIGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgQ3VzdG9tZXIgb3IgaXRzIHBlcnNvbm5lbCBhcmUgbG9jYXRlZC7CoDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+NS4gUHJvaGliaXRlZCBVc2UgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXQtN1wiPllvdSBhZ3JlZSB0byB1c2UgdGhlIFdlYnNpdGUgYW5kIHRoZSBTZXJ2aWNlcy9Tb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NlZCB0aHJvdWdoIGl0IGZvciB0aGUgcHVycG9zZSBlbnVtZXJhdGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgYW5kIGFncmVlIG5vdCB0byB1bmRlcnRha2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzo8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+IGEuIFVzZSBvZiB0aGUgV2Vic2l0ZSBhbmQgdGhlIFNlcnZpY2VzIHRvIHZpb2xhdGUgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgbGF3cyBvZiBhbnkganVyaXNkaWN0aW9uIGZyb20gd2hpY2ggWW91IGFjY2VzcyB0aGUgU2VydmljZXMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPiBiLiBVc2UgdGhlIFNlcnZpY2VzIGZvciBjb21wZXRpdGl2ZSBiZW5jaG1hcmtpbmcgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRldmVsb3BpbmcgYSBjb21wZXRpdGl2ZSBwcm9kdWN0IG9yIHNlcnZpY2VzLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj4gYy4gVG8gdXBsb2FkIG9yIG90aGVyd2lzZSBkaXNzZW1pbmF0ZSBhbnkgY29tcHV0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlydXNlcyBvciBvdGhlciBzb2Z0d2FyZSB0aGF0IG1heSB0aGUgU29mdHdhcmUgb2YgVGFuZ28gRXllOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj4gZC4gVG8gdW5sYXdmdWxseSBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXJzIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2UgaW4gaW4gYW4gdW5sYXdmdWwgbWFubmVyOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBtYi01IG1zLTVcIj4gZS4gVG8gc29saWNpdCBvdGhlcnMgdG8gcGVyZm9ybSBvciBwYXJ0aWNpcGF0ZSBpbiBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5sYXdmdWwgYWN0cy48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gcmVzZWxsLCBhc3NpZ24sIHRyYW5zZmVyLCBkaXN0cmlidXRlIG9yIHByb3ZpZGUgb3RoZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYWNjZXNzIHRvIHRoZSBTZXJ2aWNlczs8L2xpPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSBhY2tub3dsZWRnZSB0aGF0IFRhbmdvIEV5ZSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlbGF5ZWQgYW5kIHN0b3JlZCBpbiBpdHMgY2xvdWQgc2VydmVycyB3aGljaCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHlvdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtcy4gWW91IHNoYWxsIGFsd2F5cyBiZSByZXNwb25zaWJsZSBmb3IgdGhlIHNhbWUgYXQgYWxsIHRpbWVzLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhbGwgYXBwbGljYWJsZSBsYXdzIHN0YXR1dGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyeSB5b3UgYXJlIGFjY2Vzc2luZyB0aGUgV2Vic2l0ZS9Tb2Z0d2FyZSBhbmQgdGhlIFNlcnZpY2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNlcm5pbmcgdGhlIHVzZSBvZiB0aGUgaW5mb3JtYXRpb24vdmlkZW8gZm9vdGFnZSB3aGljaCBpcyByZWxheWVkIHRocm91Z2ggeW91ciBjY3R2IGNhbWVyYSB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2xvdWQgc3RvcmFnZSBvZiBUYW5nbyBFeWUuIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBTZXJ2aWNlcyBoYXMgbm90IGJlZW4gZGVzaWduZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29sbGVjdCBvciBwcm9jZXNzIGFueSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gYW5kIGFjY29yZGluZ2x5IHlvdSBhZ3JlZSBub3QgdG8gdXNlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcyB0byBjb2xsZWN0LCBwcm9jZXNzIG9yIHN0b3JlIGFueSBzZW5zaXRpdmUgcGVyc29uYWwgZGF0YSBvbmNlIHlvdSBhY2Nlc3MgdGhlIHJlcG9ydHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGJ5IFRhbmdvIEV5ZSBpbiBwdXJzdWFuY2UgdG8gdGhlIFNlcnZpY2VzLiBUYW5nbyBFeWUgc3BlY2lmaWNhbGx5IGRpc2NsYWltIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWFiaWxpdHkgdGhhdCBtYXkgcmVzdWx0IGZyb20geW91ciB1c2Ugb2YgdGhlIFNlcnZpY2VzIHRvIGNvbGxlY3QsIHByb2Nlc3MgYW5kIHN0b3JlIHNlbnNpdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIG1vbml0b3IgdGhlIHVzZSBvZiB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgV2Vic2l0ZS9TZXJ2aWNlcy9Tb2Z0d2FyZSBieSBZb3UgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugb2YgdGhlc2UgU2FhUyBUZXJtcyBhbmQgYXBwbGljYWJsZSBsYXcuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+SW4gdGhlIGV2ZW50IG9mIHZpb2xhdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIGxhd3MgYW5kIHJlZ3VsYXRpb25zLCBUYW5nbyBFeWUgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gaW52ZXN0aWdhdGUgc3VjaCBicmVhY2hlcyBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb25zIHdoaWNoIHNoYWxsIGluY2x1ZGUgYnV0IG5vdCBiZSBsaW1pdGVkIHRvIHByb3ZpZGluZyB3YXJuaW5nIHRvIGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgb2ZmZW5kZXJzLCBzdXNwZW5kaW5nIGFuZCBvciBldmVuIHRlcm1pbmF0aW5nIHRoZSBTZXJ2aWNlcyBhbmQgYWNjZXNzIHRvIHRoZSBXZWJzaXRlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+Ni4gSW52b2ljaW5nOiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkludm9pY2VzIHdpbGwgYmUgaXNzdWVkIG9uIHRoZSBiYXNpcyBvZiB0aGUgbnVtYmVyIG9mIGRlcGxveWVkIHN0b3JlcyBpbiBleGlzdGVuY2Ugb24gdGhlIGludm9pY2UgZGF0ZSBhbmQgc2hhbGwgYmUgaXNzdWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgUGF5bWVudCBUZXJtcyBpbiB0aGUgY29tbWVyY2lhbCB0ZXJtcyBhYm92ZS4gVGFuZ28gRXllIHNoYWxsIGJpbGwgQ3VzdG9tZXIgZm9yIGFwcGxpY2FibGUgdGF4ZXMgYXMgYSBzZXBhcmF0ZSBsaW5lIGl0ZW0gb24gZWFjaCBpbnZvaWNlLiBDdXN0b21lciBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgcGF5bWVudCBvZiBhbGwgc2FsZXMgYW5kIHVzZSB0YXhlcywgR29vZHMgYW5kIFNlcnZpY2VzIHRheCwgb3Igc2ltaWxhciBjaGFyZ2VzIHJlbGF0aW5nIHRvIEN1c3RvbWVy4oCZcyBwdXJjaGFzZSBhbmQgdXNlIG9mIHRoZSBTZXJ2aWNlcy48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj43LiBQYXltZW50OiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+UGF5bWVudCBzaGFsbCBiZSBtYWRlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgUGF5bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXJtcyBpbiB0aGUgY29tbWVyY2lhbCB0ZXJtcyB3aGljaCBzaGFsbCBiZSBhZ3JlZWQgdG8gc2VwYXJhdGVseSBiZXR3ZWVuIFRhbmdvIEV5ZSBhbmQgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIGFuZCB3aGljaCBzaGFsbCBiZSByZWFkIGFuZCBiZSBjb3Rlcm1pbm91cyB3aXRoIHRoZXNlIFNhYVMgVGVybXMgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4oUGF5bWVudCBUZXJtcykuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIG90aGVyd2lzZSwgcGF5bWVudHMgYXJlIG5vbi1yZWZ1bmRhYmxlLiBJbiB0aGUgZXZlbnQgdGhlIEN1c3RvbWVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxzIHRvIG1ha2UgdGhlIHBheW1lbnQgYXMgcGVyIHRoZSBwYXltZW50IHRlcm1zLCBUYW5nbyBFeWUgc2hhbGwgc2VuZCBhIHdyaXR0ZW4gbm90aWNlIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQgdG8gZW5zdXJlIHRoYXQgdGhlIHBheW1lbnQgaXMgbWFkZSB3aXRoaW4gMzAgKHRoaXJ0eSkgZGF5cyAo4oCcQWRkaXRpb25hbCBQZXJpb2TigJ0pIGZyb20gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgb2YgcmVjZWlwdCBzdWNoIHdyaXR0ZW4gbm90aWNlLiBJZiB0aGUgY3VzdG9tZXIgZmFpbHMgdG8gbWFrZSB0aGUgcGF5bWVudCB3aXRoaW4gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgUGVyaW9kLCB0aGUgYWNjZXNzIHRvIHRoZSB3ZWIgcG9ydGFsIHdpbGwgYmUgYmxvY2tlZCBhbmQgdGhlIFNlcnZpY2VzIHNoYWxsIGJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmRlZCA3IChzZXZlbikgZGF5cyBhZnRlciBzZW5kaW5nIGEgcmVtaW5kZXIgZW1haWwgdG8gQ3VzdG9tZXIgZnJvbSB0aGUgZXhwaXJ5IG9mIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIFBlcmlvZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5QYXJ0aWVzIGFja25vd2xlZGdlIHRoYXQgdGltZSBpcyBvZiB0aGUgZXNzZW5jZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BlY3QgdG8gcGF5bWVudHMgcmVxdWlyZWQgdW5kZXIgdGhpcyBjbGF1c2UuIEluIHRoZSBldmVudCBvZiBhbnkgZGVsYXkgaW4gcGF5bWVudCBieSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIsIFRhbmdvIEV5ZSBtYXkgcmVxdWlyZSB0aGUgQ3VzdG9tZXIgdG8gcGF5IFRhbmdvIEV5ZSBhIGxhdGUgcGF5bWVudCBwZW5hbHR5IGVxdWFsIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWx2ZSBwZXJjZW50ICgxMiUpIHBlciBhbm51bSBvbiBhbGwgb3V0c3RhbmRpbmcgcGF5bWVudHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjguSW50ZWxsZWN0dWFsIFByb3BlcnR5PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkFsbCBUYW5nbyBFeWUgU29mdHdhcmUsIGluY2x1ZGluZyB0aGUgV2Vic2l0ZSBhbmQgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMgdGhlcmV0bywgYW5kIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY3JlYXRlZCBieSBUYW5nbyBFeWUgaW4gZnVydGhlcmFuY2UgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIG9yIGFueSB3b3JrcywgcHJvZHVjdHMsIGRvY3VtZW50cywgbWF0ZXJpYWxzIGNyZWF0ZWQgdXNpbmcsIGluY29ycG9yYXRpbmcsIGNvbXByaXNpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW4sIG9yIHJlbGF0aW5nIHRvIHN1Y2ggaW50ZWxsZWN0dWFsIHByb3BlcnR5ICjigJxUYW5nbyBFeWUgSVDigJ0pIHNoYWxsIGF0IGFsbCB0aW1lcyByZW1haW4gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiBUYW5nbyBFeWUgYW5kL29yIGl0cyBub21pbmVlcyBvciBhZmZpbGlhdGVzLCBhcyB0aGUgY2FzZSBtYXkgYmUsIGFuZCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgc2hhbGwgbm90IGhhdmUgYW55IHJpZ2h0LCB0aXRsZSwgY2xhaW0gZXRjLiB3aGF0c29ldmVyIG92ZXIgdGhlIHNhbWUuIE5vdGhpbmcgY29udGFpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlcmVpbiBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgYSB0cmFuc2ZlciwgYXNzaWdubWVudCBvciBjb252ZXlhbmNlIGJ5IFRhbmdvIEV5ZSB0byBDdXN0b21lciBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3duZXJzaGlwLCBpbnRlcmVzdCBvciB0aXRsZSB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9yIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXR0YWNoZWQgdG8gdGhlIFRhbmdvIEV5ZSBJUC4gVGhlIEN1c3RvbWVyIGlzIG9ubHkgYXV0aG9yaXplZCB0byByZWNlaXZlIGEgcmlnaHQgdG8gYWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIEV5ZSBJUCBmb3IgdGhlIHRlcm0gZXhwbGljaXRseSBncmFudGVkIGJ5IFRhbmdvIEV5ZSB0byBDdXN0b21lciBhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aXNpb25zIG9mIHRoZXNlIFNhYVMgVGVybXMuIFRoaXMgYXV0aG9yaXphdGlvbiBpcyBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub24tc3ViLWxpY2Vuc2FibGUsIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBDdXN0b21lciBzaGFsbCBub3QgaGF2ZSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgdG8gbW9kaWZ5LCBhZGFwdCwgaW5jb3Jwb3JhdGUsIGNyZWF0ZSBhbnkgZGVyaXZhdGl2ZSB1c2luZyBvciBpbmNvcnBvcmF0aW5nIFRhbmdvIEV5ZSBJUFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBpbiBhbnkgbWFubmVyIHRyYW5zZmVyLCBlbmN1bWJlciwgYWxpZW5hdGUsIHNlbGwsIHNoYXJlLCBhc3NpZ24sIGxpY2Vuc2Ugb3Igc3ViLWxldCBpdCB0byBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmQgcGFydHkuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QXMgYmV0d2VlbiB0aGUgcGFydGllcywgQ3VzdG9tZXIgcmV0YWlucyBhbGwgcmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8g4oCTwqA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5hLiBhbGwgcmF3IGRhdGEgZ2VuZXJhdGVkIGZyb20gdGhlIHVzZSBvZiB0aGUgU29mdHdhcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0ZXh0LCBzb3VuZCwgdmlkZW8sIG9yIGltYWdlIGZpbGVzLCBidXQgZXhjbHVkaW5nIGFueSBCdXNpbmVzcyBEYXRhICjigJxHZW5lcmF0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0YeKAnSk7IGFuZMKgwqA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+Yi4gcmF3IGRhdGEgb3duZWQgYnkgYW5kIHJlbGF0aW5nIHRvIHRoZSBDdXN0b21lciwgc3VjaCBhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wYW55IGluZm9ybWF0aW9uLCBzdG9yZSBsb2NhdGlvbiBhbmQgZGV0YWlscyBvZiB0aGUgem9uZXMsIGVtcGxveWVlIGluZm9ybWF0aW9uLCBidXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkaW5nIGFueSBHZW5lcmF0ZWQgRGF0YSAo4oCcQnVzaW5lc3MgLCB0aGF0IGlzIHByb3ZpZGVkIHRvIFRhbmdvIEV5ZSBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgdGhyb3VnaCB0aGUgQ3VzdG9tZXLigJlzIHVzZSBvZiB0aGUgU29mdHdhcmUgKHRvZ2V0aGVyLCDigJxDdXN0b21lciBEYXRh4oCdKS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIEN1c3RvbWVyIGhlcmVieSBncmFudHMgdG8gVGFuZ28gRXllIGEgbm9uLWV4Y2x1c2l2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd29ybGR3aWRlLCBmdWxseSBwYWlkIHVwIGFuZCByb3lhbHR5IGZyZWUgcmlnaHQgYW5kIGxpY2Vuc2UgdG8gdXNlIHRoZSBHZW5lcmF0ZWQgRGF0YSBmb3IgKGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aXNpb24gb2YgU2VydmljZXMgYW5kIGZ1bGZpbGxtZW50IG9mIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgYW5kOyAoaWkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltcHJvdmluZyB0aGUgU29mdHdhcmUuwqA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgaGVyZWJ5IGdyYW50cyB0byBUYW5nbyBFeWUgYSBub24tZXhjbHVzaXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQgdXAgYW5kIHJveWFsdHkgZnJlZSByaWdodCBhbmQgbGljZW5zZSB0byB1c2UgdGhlIEJ1c2luZXNzIERhdGEgZm9yIChpKSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlzaW9uIG9mIFNlcnZpY2VzIGFuZCBmdWxmaWxsbWVudCBvZiBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zOyBhbmQgKGlpKSBpbXByb3ZpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFNvZnR3YXJlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkN1c3RvbWVyIGFncmVlcyB0byBwcm92aWRlIGNvbW1lbnRzIG9yIGZlZWRiYWNrLCBpZiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvIFRhbmdvIEV5ZSByZWdhcmRpbmcgdGhlIFNvZnR3YXJlIG9yIGZ1dHVyZSByZWxlYXNlcy8gZGV2ZWxvcG1lbnQgdG8gdGhlIFNvZnR3YXJlIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Ugb2YgdGhlIHdvcmsgY2FycmllZCBvdXQgZHVyaW5nIHRoaXMgZW5nYWdlbWVudCB3aXRoIHRoZSBDdXN0b21lciBvciBhbnkgYW5kIGFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrbm93bGVkZ2UgYW5kIGluZm9ybWF0aW9uIG9mIGdlbmVyaWMgbmF0dXJlLCBhcmlzaW5nIG91dCBvZiB1c2Ugb2YgdGhlIFNvZnR3YXJlIGJ5IHRoZSBDdXN0b21lcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBkaXNjbG9zaW5nIGFueSBDdXN0b21lciBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gb3IgQ3VzdG9tZXIgRGF0YS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgdW5kZXJ0YWtlcyB0byBwcm9tcHRseSBpbmZvcm0gVGFuZ28gRXllIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSBpbmZyaW5nZW1lbnQgb2YgVGFuZ28gRXllIElQIHJpZ2h0cyBieSB0aGlyZCBwYXJ0aWVzLCBhbmQgc2hhbGwgcGVybWl0IFRhbmdvIEV5ZSB0byBhc3N1bWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc29sZSBhdXRob3JpdHkgdG8gdGFrZSBhcHByb3ByaWF0ZSBsZWdhbCBhY3Rpb24uIEN1c3RvbWVyIHNoYWxsIG5vdCBtYWtlIGFueSBzdGF0ZW1lbnQgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRtaXNzaW9uIGluIHJlbGF0aW9uIHRvIHN1Y2ggY2xhaW0gd2hpY2ggbWF5IHByZWp1ZGljaWFsbHkgYWZmZWN0IHRoZSBjaGFuY2VzIG9mIHNldHRsZW1lbnQgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZW5zZSBvZiBzdWNoIGNsYWltLCBhbmQgc2hhbGwgcHJvdmlkZSBpbmZvcm1hdGlvbiBhbmQgYXNzaXN0YW5jZSByZWFzb25hYmx5IHJlcXVlc3RlZCBpblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIHdpdGggc3VjaCBjbGFpbSBvciBzdWl0LjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSBoZXJlYnkgdW5kZXJ0YWtlcywgaW4gdGhlIGV2ZW50IHRoYXQgdGhpcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGllcyBhY3QgYWdhaW5zdCB0aGUgQ3VzdG9tZXIgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlciBpbiByZWxhdGlvbiB0byB0aGUgU29mdHdhcmUgb3IgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIEV5ZSBJUCwgdG8gcHJvdmlkZSB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGVpciBwb3NzZXNzaW9uIGFuZCBvdGhlcndpc2UgZG8gYW5kIGV4ZWN1dGUgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHMsIHRoaW5ncywgbWF0dGVycyBhbmQgZGVlZHMgYXMgbWF5IGJlIHJlYXNvbmFibHkgcmVxdWlyZWQgYnkgdGhlIEN1c3RvbWVyLCBmcm9tIHRpbWUgdG8gdGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0byBzaG93IG93bmVyc2hpcCBvZiBzdWNoIFRhbmdvIEV5ZSBJUC48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+Q3VzdG9tZXIgaGVyZWJ5IGNvbnNlbnRzIGFuZCBvcHRzIGluIHRvIHJlY2VpdmUgY29tbXVuaWNhdGlvbnMgdGhhdCBUYW5nbyBFeWUgbWF5IHNlbmQgdmlhIGNhbGwgb3IgbWVzc2FnZSBzZXJ2aWNlIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50LCB0byBDdXN0b21lciBpbmNsdWRpbmcgaXRzIGVtcGxveWVlcywgc3RhZmYgYW5kIG90aGVyIHJlcHJlc2VudGF0aXZlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+OS4gRGF0YSBQcm90ZWN0aW9uIGFuZCBQcml2YWN5IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5FYWNoIFBhcnR5IHNoYWxsIGF0IGFsbCB0aW1lcyBjb21wbHkgd2l0aCBpdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JsaWdhdGlvbnMgdW5kZXIgYXBwbGljYWJsZSBwcml2YWN5IHJlZ3VsYXRpb25zIGluIHJlbGF0aW9uIHRvIHRoZSBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSwgYW5kIEN1c3RvbWVyIERhdGEgdGhhdCBpcyBjb2xsZWN0ZWQsIHN0b3JlZCBhbmQvb3IgcHJvY2Vzc2VkIGJ5IGl0IGluIHRoZSBjb3Vyc2Ugb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWluZyBpdHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcy4gRnVydGhlciBlYWNoIFBhcnR5IHNoYWxsIHByb2Nlc3Mgc3VjaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3MgRGF0YSwgYW5kIEN1c3RvbWVyIERhdGEgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSBmb3IgdGhlIHB1cnBvc2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIHBlcmZvcm1pbmcgdGhlaXIgcmVzcGVjdGl2ZSBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkVhY2ggcGFydHkgc2hhbGwgdGFrZSBhcHByb3ByaWF0ZSB0ZWNobmljYWwgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXphdGlvbmFsIG1lYXN1cmVzIGFzIHJlcXVpcmVkIHVuZGVyIGFwcGxpY2FibGUgbGF3IGFnYWluc3QgYW55IGRhdGEgYnJlYWNoLCB1bmF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgdW5sYXdmdWwgcHJvY2Vzc2luZyBvZiB0aGUgcGVyc29uYWwgZGF0YSBvciBpdHMgYWNjaWRlbnRhbCBsb3NzLCBkZXN0cnVjdGlvbiBvciBkYW1hZ2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEwLiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJzIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5FYWNoIFBhcnR5IHJlcHJlc2VudHMsIHdhcnJhbnRzIGFuZCBjb3ZlbmFudHMgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYXQ6IChpKSBpdCBpcyBkdWx5IG9yZ2FuaXplZCBhbmQgdmFsaWRseSBleGlzdGluZyBhbmQgaW4gZ29vZCBzdGFuZGluZyB1bmRlciB0aGUgbGF3cyBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RhdGUgb2YgaXRzIGluY29ycG9yYXRpb24gb3IgZm9ybWF0aW9uOyAoaWkpIGl0IGhhcyB0aGUgZnVsbCByaWdodCBhbmQgYXV0aG9yaXR5IHRvIGVudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlc2UgU2FhUyBUZXJtcyBhbmQgdGhhdCB0aGVzZSBTYWFTIFRlcm1zIGNvbnN0aXR1dGVzIGEgbGVnYWwsIHZhbGlkIGFuZCBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ibGlnYXRpb247IChpaWkpIHRoZSBleGVjdXRpb24sIGRlbGl2ZXJ5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGVzZSBTYWFTIFRlcm1zIGRvZXMgbm90IGFuZCB3aWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb25mbGljdCB3aXRoLCBvciBjb25zdGl0dXRlIGEgYnJlYWNoIG9yIGRlZmF1bHQgdW5kZXIsIGl0cyBjaGFydGVyIG9mIG9yZ2FuaXphdGlvbiwgb3IgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0IG9yIG90aGVyIGluc3RydW1lbnQgdG8gd2hpY2ggaXQgaXMgYSBwYXJ0eTsgKGl2KSBpdCB3aWxsIGNvbXBseSB3aXRoLCBhbmQgd2lsbCBlbnN1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsIG9mIGl0cyBwZXJzb25uZWwsIHRoaXJkIHBhcnR5IGFnZW50cywgY29uc3VsdGFudHMgZXRjLiwgY29tcGx5IHdpdGggYWxsIGxhd3MgYW5kIHJlZ3VsYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgdG8gKGkpIHRoZSBwcm92aXNpb24sIG9yIGFjY2VzcyBhbmQgdXNlIG9mIHRoZSBTb2Z0d2FyZTsgYW5kIChpaSkgcGVyZm9ybWFuY2Ugb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBsYXdzIGFuZCByZWd1bGF0aW9ucyByZWxhdGVkIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhY3ksIGRhdGEgcHJvdGVjdGlvbiwgZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9ucywgZXhwb3J0IGFuZCBjb25maWRlbnRpYWxpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIHJlcHJlc2VudHMsIHdhcnJhbnRzIGFuZCBjb3ZlbmFudHMgdGhhdCAoaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFuZ28gRXllIHBlcnNvbm5lbCBzaGFsbCBwcm92aWRlIHRoZSBTZXJ2aWNlcyBpbiBhIGRpbGlnZW50IGFuZCBwcm9mZXNzaW9uYWwgbWFubmVyIHdpdGggZHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmUgKGlpKSBUYW5nbyBFeWUgSVAgZG9lcyBub3QgYW5kIHdpbGwgbm90IGluZnJpbmdlLCBtaXNhcHByb3ByaWF0ZSBvciBvdGhlcndpc2UgdmlvbGF0ZSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgcGFydHkgd2l0aGluIHRoZSB0ZXJyaXRvcnkgb2YgSW5kaWEgYW5kIG9yIGFueSBvdGhlciBjb3VudHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGl0cyByaWdoc3QgYXJlIHJlZ2lzdGVyZWQ7IGFuZCAoaWlpKSBhbGwgU2VydmljZXMgdGhhdCBhcmUgcHJvdmlkZWQgd2lsbCBiZSBmcmVlIGZyb20gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtub3duIG1hbGljaW91cyBjb2RlIG9yIGluc3RydWN0aW9ucyB0aGF0IG1heSBpbnRlbnRpb25hbGx5IGRpc3J1cHQsIGRhbWFnZSBvciBpbnRlcmZlcmUgd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnkgdXNlIGJ5IEN1c3RvbWVyLiBUYW5nbyBFeWUgZnVydGhlciB3YXJyYW50cyBhbmQgcmVwcmVzZW50cyB0byB0aGUgQ3VzdG9tZXIgdGhhdCBpdCBob2xkcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdpbGwgY29udGludWUgdG8gaG9sZCwgYW55IGFuZCBhbGwgbGljZW5zZXMsIHBlcm1pdHMgb3Igb3RoZXIgYXV0aG9yaXphdGlvbnMgcmVxdWlyZWQgYnkgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgbGF3IHRvIHBlcmZvcm0gdGhlIFNlcnZpY2VzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVzZSBTYWFTIFRlcm1zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj48c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnEFwcGxpY2FibGUgbGF34oCdPC9zcGFuPiBtZWFucyBhbnkgYXBwbGljYWJsZSBsYXcsIHN0YXR1dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUsIHJlZ3VsYXRpb24sIG9yZGluYW5jZSwgcmVxdWlyZW1lbnQsIGRpcmVjdGlvbnMsIGd1aWRlbGluZXMsIGFubm91bmNlbWVudCBvciBvdGhlciBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiBvciByZXF1aXJlbWVudCBvZiBhbnkgZ292ZXJubWVudCBvciBxdWFzaSBnb3Zlcm5tZW50OyBkZXBhcnRtZW50LCBhZ2VuY3kgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGFsaXR5IG9mIGFueSBnb3Zlcm5tZW50IHRoZXJlb2YsIGFueSBjb3VydCBvciBhcmJpdHJhbCB0cmlidW5hbCBhcHBsaWNhYmxlIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyB1bmRlciB0aGUgcmVwdWJsaWMgb2YgSW5kaWEuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRIRSBTT0ZUV0FSRSBBTkQgQU5ZVEhJTkcgUFJPVklERUQgSU4gQ09OTkVDVElPTiBXSVRIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRIRVNFIFNhYVMgVEVSTVMgQVJFIFBST1ZJREVEIOKAnEFTLUlT4oCdLiBFWENFUFQgRk9SIFRIRSBFWFBSRVNTIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUyBJTlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUSElTIFNFQ1RJT04gNiwgVEFOR08gRVlFIERPRVMgTk9UIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTLCBJTVBMSUVEIE9SXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRVVE9SWSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBRVUFMSVRZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgU1lTVEVNIElOVEVHUkFUSU9OLCBFUlJPUi1GUkVFLCBVTi1JTlRFUlJVUFRJT04sIFNVUFBPUlRcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09SUkVDVElPTiBPUiBSRVBBSVIgKFVOTEVTUyBPVEhFUldJU0UgQUdSRUVEKSBPUiBPVEhFUldJU0UgVEhBVCBUQU5HTyBFWUUgU09GVFdBUkUgSEVSRVVOREVSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdJTEwgT1BFUkFURSBJTiBFVkVSWSBDT01CSU5BVElPTiBPUiBFTlZJUk9OTUVOVCBERVNJUkVEIEJZIENVU1RPTUVSIFdJVEggQU5ZIERBVEEsIERFVklDRVMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENPTVBVVEVSIFNZU1RFTVMgQU5EIFBST0dSQU1TIE9GIElUUyBDSE9JQ0UgT1IgVEhBVCBUSEUgUkVNRURZSU5HIE9GIE9ORSBQUk9HUkFNIEVSUk9SIERPRVMgTk9UXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVCBJTiBUSEUgT0NDVVJSRU5DRSBPRiBPVEhFUiBQUk9HUkFNIEVSUk9SUy4gQUxMIFNVQ0ggUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTIEFSRVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBIRVJFQlkgRElTQ0xBSU1FRC48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEN1c3RvbWVyIHdhcnJhbnRzIHRoYXQ6IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPiBhLiBDdXN0b21lciBEYXRhIGRvZXMgbm90IGFuZCB3aWxsIG5vdCBpbmZyaW5nZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzYXBwcm9wcmlhdGUgb3Igb3RoZXJ3aXNlIHZpb2xhdGUgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IHRoaXJkIHBhcnR5OzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5iLiBpdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBhbnkgc2VjdXJpdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdnVsbmVyYWJpbGl0aWVzIGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHN1Y2ggdnVsbmVyYWJpbGl0aWVzIGFyaXNpbmcgc29sZWx5IGZyb20gdGhlIG5hdHVyZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBEYXRhOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj4gYy4gaXQgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgRW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGNvbXBseSB3aXRoIGFsbCByZXF1aXJlbWVudHMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBpbiByZWxhdGlvbiB0byB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlKTs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+IGQuIGl0IHNoYWxsIGltbWVkaWF0ZWx5IG5vdGlmeSBUYW5nbyBFeWUgb2YgKGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSBhY2NvdW50LXJlbGF0ZWQgYWJ1c2U7IChiKSB0aGUgdW5hdXRob3JpemVkIGRpc2Nsb3N1cmUsIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZWlyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQgY3JlZGVudGlhbHMgYnkgb3IgdG8gYW55IHRoaXJkIHBhcnR5OyBhbmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+IGUuIGl0IHNoYWxsIG5vdCwgYW5kIHNoYWxsIG5vdCBwZXJtaXQgYW55IHBhcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIHBlcnNvbiB0bywgYWNjZXNzIG9yIHVzZSB0aGUgU29mdHdhcmUgZXhjZXB0IGFzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgdGhlc2UgU2FhUyBURVJNUy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgV2l0aG91dCBsaW1pdGluZyB0aGUgZ2VuZXJhbGl0eSBvZiB0aGUgZm9yZWdvaW5nLCBDdXN0b21lciBzaGFsbCBub3QsIGFuZCBzaGFsbCBub3QgcGVybWl0IGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0eSBvciBwZXJzb24gdG86PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtMTBcIj4gMS4gaW50ZXJmZXJlIHdpdGggb3IgZGlzcnVwdCB0aGUgaW50ZWdyaXR5IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSwgb3IgY2lyY3VtdmVudCwgYnlwYXNzLCBkZWxldGUgb3IgcmVtb3ZlIGFueSBmb3JtIG9mIHByb3RlY3Rpb24sIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLCBmdW5jdGlvbmFsaXR5IG9yIHRlY2huaWNhbCByZXN0cmljdGlvbnMgb3IgbGltaXRhdGlvbnMsIG9yIHRvIGVuYWJsZSBmdW5jdGlvbmFsaXR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkIGJ5IFRhbmdvIEV5ZSwgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBTb2Z0d2FyZTs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy0xMFwiPiAyLiBhY2Nlc3Mgb3IgdXNlIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCB1bmRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVzZSBTYWFTIFRlcm1zLCBpbiBhbnkgbWFubmVyIG9yIGZvciBhbnkgcHVycG9zZSB0aGF0IHZpb2xhdGVzIGFueSBhcHBsaWNhYmxlIGxhdywgdGhlIHJpZ2h0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiBvdGhlcnMsIGluIGEgd2F5IHRoYXQgY291bGQgaGFybSB0aGUgc2VydmljZS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy0xMFwiPjMuIHJldmVyc2UgZW5naW5lZXIsIGRpc2Fzc2VtYmxlLCBkZS1jb21waWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNyZWF0ZSwgY29weSBvciByZXByb2R1Y2UgdGhlIHNvdXJjZSBjb2RlIG9yIG9iamVjdCBjb2RlIG9mIHRoZSBTb2Z0d2FyZSBvciBwZXJmb3JtIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9ucyAod2l0aG91dCBUYW5nbyBFeWXigJlzIHByaW9yIHdyaXR0ZW4gY29uc2VudCk7IGFuZDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjExLiBDdXN0b21lcuKAmXMgQWNjb3VudCA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcnMgYXJlIGZ1bGx5IHJlc3BvbnNpYmxlIHRvIHNhZmVndWFyZCB0aGVpciBhY2Nlc3MgY3JlZGVudGlhbHMgLSBpbmNsdWRpbmcgaW4gdGhlIHNlbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjb21iaW5hdGlvbiBvZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xMi4gRHVyYXRpb24sIFJlbmV3YWwgYW5kIFRlcm1pbmF0aW9uIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGluIHRoZSBwcm9wb3NhbCwgdGhlc2UgU2FhUyBUZXJtcyBzaGFsbCBjb250aW51ZSB0byBiZSBlZmZlY3RpdmUgZHVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kXHJcbiAgICAgICAgICAgICAgICAgICAgdGhlIEN1c3RvbWVyIHVzZXMgYW5kIG9yIGNvbnRpbnVlcyB0byB1c2UgdGhlIFNvZnR3YXJlLCB1bmxlc3MgdGVybWluYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybXMgc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgaGVyZWluLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgaW4gdGhlIE9yZGVyIEZvcm0sIGZlZXMgc2hhbGwgYmUgc3ViamVjdCB0byBhdXRvbWF0aWMgaW5jcmVtZW50IGF0IHRoZSByYXRlIG9mIDclIHBlciBhbm51bSBhZnRlciBldmVyeSAxMiBtb250aHMuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFaXRoZXIgcGFydHkgbWF5IHRlcm1pbmF0ZSB0aGVpciBidXNpbmVzcyByZWxhdGlvbnNoaXAgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBpbW1lZGlhdGVseSB1cG9uIGFcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFjaCBieSB0aGUgb3RoZXIgcGFydHkgdGhhdCBoYXMgbm90IGJlZW4gY3VyZWQgd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2Ugb2ZcclxuICAgICAgICAgICAgICAgICAgICBzdWNoXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWNoLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFaXRoZXIgcGFydHkgbWF5IGFsc28gdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IHVwb24gdGhpcnR5ICgzMCkgZGF5cyB3cml0dGVuIG5vdGljZSB3aXRob3V0XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduaW5nIGFueVxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbi4gQ3VzdG9tZXIgd2lsbCBwYXkgaW4gZnVsbCBmb3IgdGhlIFNvZnR3YXJlIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3QgZGF5IG9uIHdoaWNoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgd2FzIHVzZWQuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhKSBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBpbW1lZGlhdGVseSBjZWFzZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChiKSBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBtYXkgZGVsZXRlIHRoZSBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3MgRGF0YSBhbmQgQ3VzdG9tZXIgRGF0YSBjb2xsZWN0ZWQsIHN0b3JlZCBhbmQvb3IgcHJvY2Vzc2VkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb3ZpZGluZyB0aGUgU29mdHdhcmUgd2l0aGluIDE1IChmaWZ0ZWVuKSBkYXlzIG9mIHJlY2VpcHQgb2Ygbm90aWNlIG9mIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYykgSWYgVGFuZ28gRXllIHRlcm1pbmF0ZXMgdGhlc2UgU2FhUyBUZXJtcyBkdWUgdG8gYSBicmVhY2ggYnkgQ3VzdG9tZXIgb2YgYW55IG9mIHRoZSBwcm92aXNpb25zIGNvbnRhaW5lZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCB0aGVuIEN1c3RvbWVyIHNoYWxsIGltbWVkaWF0ZWx5IHBheSB0byBUYW5nbyBFeWUgYWxsIGFtb3VudHMgdGhlbiBkdWUgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcy4gSWYgQ3VzdG9tZXIgdGVybWluYXRlcyB0aGVzZSBTYWFTIFRlcm1zIGR1ZSB0byBhIGJyZWFjaCBieSBUYW5nbyBFeWUsIHRoZW4gVGFuZ28gRXllIHNoYWxsIGltbWVkaWF0ZWx5IHJlcGF5IHRvIEN1c3RvbWVyIGFsbCBwcmUtcGFpZCBhbW91bnRzIGZvciBhbnkgdW5wZXJmb3JtZWQgU2VydmljZXMgc2NoZWR1bGVkIHRvIGJlIGRlbGl2ZXJlZCBhZnRlciB0aGUgdGVybWluYXRpb24gZGF0ZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkKSBTdWJqZWN0IHRvIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCB1cG9uIGl0cyB0ZXJtaW5hdGlvbiBhbmQgdXBvbiBzdWJzZXF1ZW50IHdyaXR0ZW4gcmVxdWVzdCBieSB0aGUgRGlzY2xvc2luZyBQYXJ0eSwgdGhlIFJlY2VpdmluZyBQYXJ0eSBvZiB0YW5naWJsZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gc2hhbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHN1Y2ggaW5mb3JtYXRpb24gb3IgZGVzdHJveSBzdWNoIGluZm9ybWF0aW9uIGFuZCBwcm92aWRlIHdyaXR0ZW4gY2VydGlmaWNhdGlvbiBvZiBzdWNoIGRlc3RydWN0aW9uLCBwcm92aWRlZCB0aGF0IHRoZSByZWNlaXZpbmcgcGFydHkgbWF5IHBlcm1pdCBpdHMgbGVnYWwgY291bnNlbCB0byByZXRhaW4gb25lIGFyY2hpdmFsIGNvcHkgb2Ygc3VjaCBpbmZvcm1hdGlvbiBpbiB0aGUgZXZlbnQgb2YgYSBzdWJzZXF1ZW50IGRpc3B1dGUgYmV0d2VlbiB0aGUgcGFydGllcy5cclxuVGhlIHByb3Zpc2lvbnMgcmVsYXRpbmcgdG8gY29uZmlkZW50aWFsaXR5LCBhcyB3ZWxsIGFzIGZvciBsaWFiaWxpdHksIGFwcGxpY2FibGUgbGF3IGFuZCBzZXR0bGVtZW50IG9mIGRpc3B1dGVzIHNoYWxsIHN1cnZpdmUgdGhlIGV4cGlyYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVGVybWluYXRpb24gc2hhbGwgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9yIG9ibGlnYXRpb25zIG9mIHRoZSBwYXJ0aWVzIGluY3VycmVkIHByaW9yIHRvIHRoZSBkYXRlIG9mIHRlcm1pbmF0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTMuIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLCBUYW5nbyBFeWUgc2hhbGwgaW1tZWRpYXRlbHkgY2Vhc2UgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZS5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLCBUYW5nbyBFeWUgc2hhbGwgZGVsZXRlIHRoZSBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3MgRGF0YSBhbmRcclxuICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBEYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkLCBzdG9yZWQgYW5kL29yIHByb2Nlc3NlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGZvciB0aGUgcHVycG9zZSBvZiBwcm92aWRpbmcgdGhlIFNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgd2l0aGluIDE1XHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZnRlZW4pIGRheXMgb2YgcmVjZWlwdCBvZiBub3RpY2Ugb2YgdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSWYgVGFuZ28gRXllIHRlcm1pbmF0ZXMgdGhlc2UgU2FhUyBUZXJtcyBkdWUgdG8gYSBicmVhY2ggYnkgQ3VzdG9tZXIgb2YgYW55IG9mIHRoZSBwcm92aXNpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkIHVuZGVyIHRoZXNlXHJcbiAgICAgICAgICAgICAgICAgICAgU2FhUyBUZXJtcywgdGhlbiBDdXN0b21lciBzaGFsbCBpbW1lZGlhdGVseSBwYXkgdG8gVGFuZ28gRXllIGFsbCBhbW91bnRzIHRoZW4gZHVlIHVuZGVyIHRoZXNlIFNhYVNcclxuICAgICAgICAgICAgICAgICAgICBUZXJtcy4gSWZcclxuICAgICAgICAgICAgICAgICAgICBDdXN0b21lciB0ZXJtaW5hdGVzIHRoZXNlIFNhYVMgVGVybXMgZHVlIHRvIGEgYnJlYWNoIGJ5IFRhbmdvIEV5ZSwgdGhlbiBUYW5nbyBFeWUgc2hhbGwgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgICAgICAgICByZXBheSB0b1xyXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIGFsbCBwcmUtcGFpZCBhbW91bnRzIGZvciBhbnkgdW5wZXJmb3JtZWQgU2VydmljZXMgc2NoZWR1bGVkIHRvIGJlIGRlbGl2ZXJlZCBhZnRlciB0aGVcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGlvbiBkYXRlLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBTdWJqZWN0IHRvIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCB1cG9uIGl0cyB0ZXJtaW5hdGlvbiBhbmQgdXBvbiBzdWJzZXF1ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiByZXF1ZXN0IGJ5XHJcbiAgICAgICAgICAgICAgICAgICAgdGhlIERpc2Nsb3NpbmcgUGFydHksIHRoZSBSZWNlaXZpbmcgUGFydHkgb2YgdGFuZ2libGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHNoYWxsIGltbWVkaWF0ZWx5XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2hcclxuICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvciBkZXN0cm95IHN1Y2ggaW5mb3JtYXRpb24gYW5kIHByb3ZpZGUgd3JpdHRlbiBjZXJ0aWZpY2F0aW9uIG9mIHN1Y2ggZGVzdHJ1Y3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgdGhhdCB0aGVcclxuICAgICAgICAgICAgICAgICAgICByZWNlaXZpbmcgcGFydHkgbWF5IHBlcm1pdCBpdHMgbGVnYWwgY291bnNlbCB0byByZXRhaW4gb25lIGFyY2hpdmFsIGNvcHkgb2Ygc3VjaCBpbmZvcm1hdGlvbiBpbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICBldmVudCBvZiBhXHJcbiAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBkaXNwdXRlIGJldHdlZW4gdGhlIHBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRoZSBwcm92aXNpb25zIHJlbGF0aW5nIHRvIGNvbmZpZGVudGlhbGl0eSwgYXMgd2VsbCBhcyBmb3IgbGlhYmlsaXR5LCBhcHBsaWNhYmxlIGxhdyBhbmQgc2V0dGxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIG9mIGRpc3B1dGVzXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhbGwgc3Vydml2ZSB0aGUgZXhwaXJhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBUZXJtaW5hdGlvbiBzaGFsbCBub3QgYWZmZWN0IGFueSByaWdodHMgb3Igb2JsaWdhdGlvbnMgb2YgdGhlIHBhcnRpZXMgaW5jdXJyZWQgcHJpb3IgdG8gdGhlIGRhdGUgb2ZcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGlvbixcclxuICAgICAgICAgICAgICAgICAgICB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEzLiBBY2Nlc3MgdG8gQW5hbHl0aWNzIHZpYSBXZWIgUG9ydGFsICYgRXhjZWwgUmVwb3J0czwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgYW5hbHl0aWNzIGlzIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBhKSB3ZWItYmFzZWRcclxuICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiwgYikgZXhjZWwgcmVwb3J0cyBzZW50IHZpYSBlbWFpbCBvciBGaWxlIFRyYW5zZmVyIFByb3RvY29sLlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UcmFpbmluZzogQWxsIOKAnFNvZnR3YXJl4oCdIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzLiBGb3IgYXZvaWRhbmNlIG9mIGRvdWJ0LCBpdCBpcyBjbGFyaWZpZWQgdGhhdCBUYW5nbyBFeWUgYWdyZWVzIHRvIHByb3ZpZGUgc2FtcGxlIGRhc2hib2FyZFxyXG4gICAgICAgICAgICAgICAgICAgIGFuZCBhcnJhbmdlIGZvciB0cmFpbmluZyBzZXNzaW9ucyB0byB0aGUgQ3VzdG9tZXIgYXMgbXV0dWFsbHkgYWdyZWVkIGJ5IHRoZSBQYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT4gLS0+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE0LiBUcmFpbmluZyA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QWxsIOKAnFNvZnR3YXJl4oCdIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBTZXJ2aWNlcy4gRm9yIGF2b2lkYW5jZSBvZiBkb3VidCwgaXQgaXMgY2xhcmlmaWVkIHRoYXQgVGFuZ28gRXllIGFncmVlcyB0byBwcm92aWRlIGEgc2FtcGxlIGRhc2hib2FyZCBhbmQgYXJyYW5nZSBmb3IgdHJhaW5pbmcgc2Vzc2lvbnMgdG8gdGhlIEN1c3RvbWVyIGFzIG11dHVhbGx5IGFncmVlZCBieSB0aGUgUGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xNS4gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkFsbCBwcm9wcmlldGFyeSBvciBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24sIHRlY2huaWNhbCBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yIGtub3ctaG93IGFuZCBhbGwgb3RoZXIgbm9uLXB1YmxpYyBpbmZvcm1hdGlvbiwgbWF0ZXJpYWwgb3IgZGF0YSBpbiB3aGF0ZXZlciBmb3JtIG9yIG1vZGUgb2ZcclxuICAgICAgICAgICAgICAgICAgICBjb21tdW5pY2F0aW9uLCB3aGljaCBpcyBkaXNjbG9zZWQgYnkgYSBwYXJ0eSAo4oCcRGlzY2xvc2luZyBQYXJ0eeKAnSkgdG8gdGhlIG90aGVyIHBhcnR5ICjigJxSZWNlaXZpbmdcclxuICAgICAgICAgICAgICAgICAgICBQYXJ0eeKAnSkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBTb2Z0d2FyZSBhY2Nlc3MgYW5kIHVzYWdlIHdoZXRoZXIgbWFya2VkIGFzIOKAnGNvbmZpZGVudGlhbOKAnSBvciBub3QgYXRcclxuICAgICAgICAgICAgICAgICAgICB0aGUgdGltZSBvZiBkaXNjbG9zdXJlLCBzaGFsbCBiZSB0cmVhdGVkIGFzIOKAnENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbuKAnS4gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhbGwgaW5jbHVkZSwgYnV0IG5vdCBiZSBsaW1pdGVkIHRvLCB0aGUgdGVybXMgYW5kIHByaWNpbmcvY29tbWVyY2lhbCB0ZXJtcyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoZSB0ZWNobmljYWwgYW5kIG90aGVyIHNwZWNpZmljYXRpb25zIG9mIHRoZSBTb2Z0d2FyZSwgYW55IGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgY29kZXMgYW5kIGNvbnRlbnQgYXMgd2VsbCBhcyB0aGUgc29mdHdhcmUgYW5kIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSBhbmQgY29tcG9uZW50cywgYW5kIGFsbFxyXG4gICAgICAgICAgICAgICAgICAgIG90aGVyIG5vbi1wdWJsaWMgaW5mb3JtYXRpb24uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBSZWNlaXZpbmcgUGFydHkgdW5kZXJ0YWtlczogKGkpIG5vdCB0byB1c2UgQ29uZmlkZW50aWFsXHJcbiAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb24gb3RoZXJ3aXNlIHRoYW4gZm9yIHRoZSBwdXJwb3NlIGZvciB3aGljaCBpdCB3YXMgZGlzY2xvc2VkIG9yIHRvIHBlcm1pdCB0aGUgUmVjZWl2aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgUGFydHkgdG8gZXhlcmNpc2UgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgOyAoaWkpIG5vdCB0byBkaXNjbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgdGhlIERpc2Nsb3NpbmcgUGFydHksIG90aGVyIHRoYW4gdG9cclxuICAgICAgICAgICAgICAgICAgICB0aG9zZSBlbXBsb3llZXMsIGFnZW50cywgY29udHJhY3RvcnMsIHN1YmNvbnRyYWN0b3JzLCBsaWNlbnNlZXMgb2YgdGhlIFJlY2VpdmluZyBQYXJ0eSwgaXRzXHJcbiAgICAgICAgICAgICAgICAgICAgQWZmaWxpYXRlcyBvciBhbnkgb3RoZXIgcGFydGllcyB3aG8gaGF2ZSBhIG5lZWQgdG8ga25vdyBpdCBpbiBvcmRlciB0byBhc3Npc3QgdGhlIFJlY2VpdmluZyBQYXJ0eSBpblxyXG4gICAgICAgICAgICAgICAgICAgIHBlcmZvcm1pbmcgaXRzIG9ibGlnYXRpb25zLCBvciB0byBwZXJtaXQgdGhlIFJlY2VpdmluZyBQYXJ0eSB0byBleGVyY2lzZSBpdHMgcmlnaHRzwqAgYW5kIGxpY2Vuc2VzXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IChpaWkpIHRvIHRha2UgYWxsIHN1Y2ggc3RlcHMgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgYWNjZXNzIHRvIHRoZSBEaXNjbG9zaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgUGFydHnigJlzIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiwgYXMgaXQgdGFrZXMgdG8gcHJvdGVjdCBpdHMgb3duIGNvbmZpZGVudGlhbCBvciBwcm9wcmlldGFyeVxyXG4gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9mIGEgc2ltaWxhciBuYXR1cmUsIHdoaWNoIHN0ZXBzIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxlc3MgdGhhbiBhIHJlYXNvbmFibGUgc3RhbmRhcmQgb2ZcclxuICAgICAgICAgICAgICAgICAgICBjYXJlOyBhbmQgaXYpIHRvIHJldHVybiB0byB0aGUgQ3VzdG9tZXIsIG9yIGRlc3Ryb3ksIG9uIHJlcXVlc3QgYWxsIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiB0aGF0XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gZGlzY2xvc2VkIHRvIHRoZW0sIGluY2x1ZGluZyBhbGwgY29waWVzIHRoZXJlb2YgYW5kIHRvIGRlbGV0ZSBhbGwgaW5mb3JtYXRpb24gc3RvcmVkIGluIGFcclxuICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZvcm0gdG8gdGhlIGV4dGVudCBwcmFjdGljYWxseSBwb3NzaWJsZSwgc3ViamVjdCB0byBhbnkgcmlnaHRzIG9yIGxpY2Vuc2VzIGdyYW50ZWRcclxuICAgICAgICAgICAgICAgICAgICB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIC5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIG9ibGlnYXRpb25zIGluIHJlbGF0aW9uIHRvIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVyIHRoZXNlIFNhYVMgVGVybXPCoCBzaGFsbCBub3QgYXBwbHkgdG8gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLCB3aGljaCAoaSkgaGFzIGJlY29tZSBvciBiZWNvbWVzXHJcbiAgICAgICAgICAgICAgICAgICAgcHVibGljbHkgYXZhaWxhYmxlIGJ5IG1lYW5zIG90aGVyIHRoYW4gYSBicmVhY2ggb2YgY29uZmlkZW50aWFsaXR5IG9ibGlnYXRpb25zOyAoaWkpIHdhcyBhbHJlYWR5XHJcbiAgICAgICAgICAgICAgICAgICAga25vd24gdG8gdGhlIFJlY2VpdmluZyBQYXJ0eSBwcmlvciB0byBkaXNjbG9zdXJlOyAoaWlpKSB0aGUgUmVjZWl2aW5nIFBhcnR5IGlzIHJlcXVpcmVkIHRvIGRpc2Nsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gY29tcGx5IHdpdGggYXBwbGljYWJsZSBsYXdzIG9yIHJlZ3VsYXRpb25zIG9yIHdpdGggYSBjb3VydCBvciBhZG1pbmlzdHJhdGl2ZSBvcmRlcjsgb3JcclxuICAgICAgICAgICAgICAgICAgICAoaXYpIGlzIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIGJ5IHRoZSBSZWNlaXZpbmcgUGFydHkgd2l0aG91dCByZWZlcmVuY2UgdG8gb3IgdXNlIG9mIGFueVxyXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBvZiB0aGUgRGlzY2xvc2luZyBQYXJ0eS5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIFJlY2VpdmluZyBQYXJ0eSBzaGFsbCBwcm9tcHRseSwgYW5kIGluIGFueSBjYXNlIHdpdGhpblxyXG4gICAgICAgICAgICAgICAgICAgIHRocmVlICgzKSBkYXlzIGFkdmlzZSB0aGUgRGlzY2xvc2luZyBQYXJ0eSBpbiB3cml0aW5nIG9mIGFueSB1bmF1dGhvcml6ZWQgZGlzY2xvc3VyZSxcclxuICAgICAgICAgICAgICAgICAgICBtaXNhcHByb3ByaWF0aW9uIG9yIG1pc3VzZSBvZiBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gYWZ0ZXIgaXQgYmVjb21lcyBhd2FyZSBvZiBpdCBhbmQgdmljZSB2ZXJzYS5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+SWYgZWl0aGVyIHBhcnR5IGJlY29tZXMgYXdhcmUgdGhhdCBpdCB3aWxsIGJlIHJlcXVpcmVkLCBvclxyXG4gICAgICAgICAgICAgICAgICAgIGlzIGxpa2VseSB0byBiZSByZXF1aXJlZCwgdG8gZGlzY2xvc2UgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgICAgICBsYXdzIG9yIHJlZ3VsYXRpb25zIG9yIHdpdGggYSBjb3VydCBvciBhZG1pbmlzdHJhdGl2ZSBvcmRlciwgaXQgc2hhbGwsIHRvIHRoZSBleHRlbnQgaXQgaXMgbGF3ZnVsbHlcclxuICAgICAgICAgICAgICAgICAgICBhYmxlIHRvIGRvIHNvLCBwcmlvciB0byBhbnkgc3VjaCBkaXNjbG9zdXJlIG5vdGlmeSB0aGUgb3RoZXIgcGFydHksIGFuZCBjb21wbHkgd2l0aCB0aGUgb3RoZXJcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0eeKAmXMgaW5zdHJ1Y3Rpb25zIHRvIHByb3RlY3QgdGhlIGNvbmZpZGVudGlhbGl0eSBvZiB0aGUgaW5mb3JtYXRpb24uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xNi4gSW5kZW1uaXR5IGFuZCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBXaXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgYXZhaWxhYmxlIGluIGxhdyBvciB1bmRlciBlcXVpdHksIGVhY2ggcGFydHkgaGVyZWJ5IGFncmVlcyB0b1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBlbnNhdGUsIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIGhhcm1sZXNzIHRoZSBvdGhlciwgaXRzIGFmZmlsaWF0ZXMsIGRpcmVjdG9ycywgc2hhcmVob2xkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZmljZXJzIGFuZCBlbXBsb3llZXMgYW5kIGFnZW50cywgZnJvbSBhbmQgYWdhaW5zdCBhbnkgYW5kIGFsbCBsb3NzZXMsIGxpYWJpbGl0aWVzLCBkYW1hZ2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmljaWVuY2llcywgZGVtYW5kcywgY2xhaW1zIChpbmNsdWRpbmcgdGhpcmQgcGFydHkgY2xhaW1zKSwgYWN0aW9ucywganVkZ21lbnRzIG9yIGNhdXNlcyBvZlxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgYXNzZXNzbWVudHMsIGludGVyZXN0LCBwZW5hbHRpZXMgYW5kIG90aGVyIGNvc3RzIG9yIGV4cGVuc2VzIChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMpIGJhc2VkIHVwb24sIGFyaXNpbmcgb3V0IG9mLCBvciBpbiByZWxhdGlvbiB0byBvciBvdGhlcndpc2VcclxuICAgICAgICAgICAgICAgICAgICBpbiByZXNwZWN0IG9mIChpKSBhbnkgYnJlYWNoIG9mIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIDsgb3IgKGlpKSBhbnkgd2lsbGZ1bFxyXG4gICAgICAgICAgICAgICAgICAgIG1pc2NvbmR1Y3QsIGZyYXVkLCBvciB3cm9uZ2Z1bCBvciBuZWdsaWdlbnQgYWN0IG9yIG9taXNzaW9uIG9mIGEgUGFydHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBJbiBubyBldmVudCBzaGFsbCBlaXRoZXIgUGFydHkgYmUgbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgYW55IGluZGlyZWN0LCBpbmNpZGVudGFsLCBwdW5pdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICBleGVtcGxhcnksIHNwZWNpYWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBvciBkYW1hZ2VzIGZvciBsb3NzIG9mIHByb2ZpdHMsIHJldmVudWUsIHdoZXRoZXIgaW4gYW5cclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24gaW4gY29udHJhY3Qgb3IgdG9ydCwgb3Igb3RoZXJ3aXNlIChjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG8gYXMg4oCcSW5kaXJlY3QgTG9zc2Vz4oCdKSBldmVuIGlmXHJcbiAgICAgICAgICAgICAgICAgICAgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWFjaCBQYXJ0eeKAmXMgbGlhYmlsaXR5IGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgYnJlYWNoIG9mIGFueSBkaXJlY3QgYW5kIGFjdHVhbFxyXG4gICAgICAgICAgICAgICAgICAgIGxpYWJpbGl0aWVzLCBjb3N0cywgbG9zc2VzLCBkYW1hZ2VzLCBzdWl0cywgcHJvY2VlZGluZ3MsIGNvc3RzLCBleHBlbnNlcyBvciBsaWFiaWxpdGllcyBzdWZmZXJlZCBvclxyXG4gICAgICAgICAgICAgICAgICAgIGluY3VycmVkIGR1ZSB0byByZXN1bHRpbmcgZHVlIHRvIGNsYWltcyBmb3IgYnJlYWNoIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhIFBhcnR5IG9yIHRoaXJkXHJcbiAgICAgICAgICAgICAgICAgICAgcGFydHksIGJyZWFjaCBvZiBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbiwgZGF0YSBicmVhY2gsIGJyZWFjaCBvZiBkYXRhIHByaXZhY3ksIGZyYXVkLCB3aWxsZnVsXHJcbiAgICAgICAgICAgICAgICAgICAgbmVnbGlnZW5jZSwgZ3Jvc3MgbWlzY29uZHVjdCBvciBicmVhY2ggb2YgYXBwbGljYWJsZSBsYXdzIHNoYWxsIGluIG5vIGV2ZW50IGV4Y2VlZCB0aGUgYW5udWFsIHRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgcHVyY2hhc2UgcHJpY2UgcGFpZCBwdXJzdWFudCB0byBncmFudCBvZiBhY2Nlc3MgYW5kIHVzYWdlIG9mIHRoZSBTZXJ2aWNlcy9Tb2Z0d2FyZSBieSB0aGUgQ3VzdG9tZXIuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xNy4gRm9yY2UgTWFqZXVyZSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFYWNoIG9mIHRoZSBQYXJ0aWVzIGlzIG5vdCByZXNwb25zaWJsZSBub3IgbGlhYmxlIGZvciBhbnkgZGVsYXlzIG9yIGZhaWx1cmVzIGluIHBlcmZvcm1hbmNlIGZyb20gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgY2F1c2UgYmV5b25kIGl0cyBjb250cm9sLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byBhY3RzIG9mIEdvZCwgY2hhbmdlcyB0byBsYXcgb3IgcmVndWxhdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZW1iYXJnb2VzLCB3YXIsIHRlcnJvcmlzdCBhY3RzLCBhY3RzIG9yIG9taXNzaW9ucyBvZiB0aGlyZCBwYXJ0eSB0ZWNobm9sb2d5IHByb3ZpZGVycywgcmlvdHMsIGZpcmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGVhcnRocXVha2VzLCBmbG9vZHMsIHBvd2VyIGJsYWNrb3V0cywgc3RyaWtlcywgd2VhdGhlciBjb25kaXRpb25zLCBwYW5kZW1pYywgZXBpZGVtaWMsIGdvdmVybm1lbnRcclxuICAgICAgICAgICAgICAgICAgICBsb2NrZG93bnMgb3IgYW55IG90aGVyIHVuZm9yZXNlZWFibGUgZXZlbnQgYmV5b25kIGl0cyBjb250cm9sIChoZXJlaW5hZnRlciBjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG9cclxuICAgICAgICAgICAgICAgICAgICBhcyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnEZvcmNlIE1hamV1cmUgRXZlbnTigJ0pPC9zcGFuPi4gVXBvbiBvY2N1cnJlbmNlIG9mIGFueSBGb3JjZSBNYWpldXJlIEV2ZW50LCBlaXRoZXIgUGFydHkgc2hhbGwgZ2l2ZVxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGljZSB0byB0aGUgb3RoZXIgcGFydHkgb2YgaXRzIGluYWJpbGl0eSB0byBwZXJmb3JtIG9yIG9mIGRlbGF5IGluIGNvbXBsZXRpbmcgaXRzIG9ibGlnYXRpb25zIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgIG11c3QgYWN0IGRpbGlnZW50bHkgdG8gcmVtZWR5IHRoZSBjYXVzZSBhbmQgcmVzdG9yZSBwZXJmb3JtYW5jZSwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFdoZXJlIEZvcmNlLU1hamV1cmUgRXZlbnQgY29udGludWVzIGZvciBhIHBlcmlvZCBtb3JlIHRoYW4gU2l4dHkgKDYwKSBjb250aW51b3VzIGRheXMsIHRoZW4gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgZWZmZWN0ZWQgUGFydHkgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gaW1tZWRpYXRlbHkgdGVybWluYXRlIHRoZXNlIFNhYVMgVGVybXMgQWdyZWVtZW50IGJ5IHByb3ZpZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGEgd3JpdHRlbiBub3RpY2UuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE4LiBNaXNjZWxsYW5lb3VzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgU2FhUyBUZXJtcyBpcyBkcmF3biB1cCBpbiBFbmdsaXNoLCB3aGljaCBsYW5ndWFnZSBzaGFsbCBnb3Zlcm4gYWxsIGRvY3VtZW50cywgbm90aWNlcyxcclxuICAgICAgICAgICAgICAgICAgICBtZWV0aW5ncywgcHJvY2VlZGluZ3MgYW5kIHByb2Nlc3NlcyByZWxhdGl2ZSB0aGVyZXRvLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBOb3RoaW5nIGluIHRoZXNlIFNhYVMgVGVybXMgc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYSBqb2ludCB2ZW50dXJlLCBhZ2VuY3ksIHBhcnRuZXJzaGlwLFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVyZXN0IGdyb3VwaW5nIG9yIGFueSBvdGhlciBraW5kIG9mIGZvcm1hbCBidXNpbmVzcyBncm91cGluZyBvciBlbnRpdHkgYmV0d2VlbiB0aGUgUGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgTm8gcmlnaHRzIG9yIG9ibGlnYXRpb25zIG9mIHRoZSBQYXJ0aWVzIGFyaXNpbmcgZnJvbSB0aGVzZSBTYWFTIFRlcm1zIG1heSBiZSBhc3NpZ25lZCxcclxuICAgICAgICAgICAgICAgICAgICBzdWItY29udHJhY3RlZCwgb3IgdHJhbnNmZXJyZWQsIGluIHdob2xlIG9yIGluIHBhcnQsIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IHRoZSBvdGhlciBwYXJ0eeKAmXNcclxuICAgICAgICAgICAgICAgICAgICBwcmlvciB3cml0dGVuIGFwcHJvdmFsLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gSW4gY2FzZSBvZiBjb25mbGljdCB0ZXJtcyBiZXR3ZWVuIHRoZXNlIFNhYVMgVGVybXMgYW5kIE9yZGVyIEZvcm0sIHRoZSBPcmRlciBGb3JtIHdpbGwgcHJldmFpbC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbi4gVGhlc2UgU2FhUyBUZXJtcyBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBJbmRpYSwgYW5kIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFBhcnRpZXMgaGVyZWJ5IGFncmVlIHRvIGlycmV2b2NhYmx5IHN1Ym1pdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIG9mIE5ldyBEZWxoaVxyXG4gICAgICAgICAgICAgICAgICAgIGluIHJlc3BlY3Qgb2YgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInJvdyBnLTAgbWItMCBiZy10ZXJtc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1jdXN0b20gZm9ybS1jaGVjay1zb2xpZCBmb3JtLWNoZWNrLWlubGluZSBcIj5cclxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCIhZW5hYmxlQWdyZWVcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByZXF1aXJlZCBuYW1lPVwidG9jXCIgdmFsdWU9XCIxXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGV0ZXJtcygkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LWJvbGQgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dHNpemUgbXQtM1wiPkkgYWdyZWUgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLjwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIXRlcm1zXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tcHJpbWFyeSBtcy0xNSBtZS01IHRleHQtbm93cmFwXCIgKGNsaWNrKT1cImVudGVycHJpc2VhY3RpdmF0ZSgpXCI+XHJcbiAgICAgICAgICAgIFNpZ24gVXBcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIG10LTEyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyB0ZXh0LW5vd3JhcCBidG4tc2V0IG1lLTVcIiAoY2xpY2spPVwicHJldlN0ZXAoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxNUw4IDEwTDEzIDVcIiBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz4gUHJldmlvdXNcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm92ZXJsYXlcIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgKm5nSWY9XCJzaG93dmFsdWVcIj5cclxuXHQ8ZGl2IGNsYXNzPVwicG9wdXBcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcblx0XHQ8aDEgY2xhc3M9XCJhLW8taVwiPlZlcmlmaWNhdGlvbiBDb2RlPC9oMT5cclxuICAgICAgICA8aDUgY2xhc3M9XCJzdWItYW9pXCI+QW4gT1RQIGhhcyBiZWVuIHNlbnQgdG8geW91ciBtYWlsLiBQbGVhc2UgY2hlY2sgJiBzdWJtaXQuPC9oNT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwib3RwLWNvbnRhaW5lciBkLWZsZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm90cC1pbnB1dCBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1vdHAtaW5wdXQgI25nT3RwSW5wdXQgKG9uSW5wdXRDaGFuZ2UpPVwib25PdHBDaGFuZ2UoJGV2ZW50KVwiIGlucHV0bW9kZT1cIm51bWVyaWNcIiBjbGFzcz1cInZlcmlmaWNhdGlvbi1jb2RlXCIgcGxhY2Vob2xkZXI9XCIwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxlbmd0aDogNCAsYWxsb3dOdW1iZXJzT25seTp0cnVlfVwiPjwvbmctb3RwLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaW52YWxpZE90cFwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgdGV4dC1kYW5nZXJcIiA+XHJcbiAgICAgICAgICAgIEludmFsaWQgT1RQICFcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwicmVzZW5kXCIgY2xhc3M9XCJzbWFsbF9sZyBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNlbmRPVFAoKVwiPjxiPlJlc2VuZCBPVFA8L2I+PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFyZXNlbmRcIiBjbGFzcz1cInNtYWxsX2xibCBcIiA+UmVzZW5kIE9UUCAoIHt7Y291bnRlclxyXG4gICAgICAgICAgICAgfX0gKTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGcgYnRuLXByaW1hcnkgbWUtNSB3LTEwMCB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvdHBzdWJtaXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgU3VibWl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcDMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1zaWdudXAvc3RlcC9zdGVwMy9zdGVwMy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hdXRoL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hdXRoLXNpZ251cC9zdGVwL3N0ZXAzL3N0ZXAzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFnQjNDLE1BQU0sT0FBTyxjQUFjO0lBd0RoQjtJQUFnQztJQUFpQztJQUF1QjtJQUE4QjtJQUNySDtJQUFnQztJQUFtQztJQXhEN0UsVUFBVSxHQUFXLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtJQUMvQyxRQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsd0JBQXdCO0lBQ25ELFNBQVMsR0FBWSxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7SUFDbkQsVUFBVSxHQUFZLEtBQUssQ0FBQyxDQUFDLDBCQUEwQjtJQUN2RCxxQkFBcUIsQ0FBUztJQUM5QixXQUFXLEdBQVcsS0FBSyxDQUFBO0lBQzNCLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0Msd0NBQXdDO0lBQ3hDLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFF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QUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXRGLElBQUksUUFBUSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBSSxJQUFJLENBQUE7U0FDM0I7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDOUIsQ0FBQzt3R0FuUlksY0FBYzs0RkFBZCxjQUFjLDhKQ2xCM0Isb2l2REE4cUJBOzs0RkQ1cEJhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVztxUkFnREksYUFBYTtzQkFBckMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IENvbnZlcnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29udmVyc2lvbi5zZXJ2aWNlJztcclxuXHJcblxyXG5pbnRlcmZhY2UgSW5wdXRTdHlsZXMge1xyXG4gIFtrZXk6IHN0cmluZ106IHN0cmluZzsgLy8gRGVmaW5lIGtleS12YWx1ZSBwYWlycyB3aGVyZSBrZXlzIGFyZSBzdHJpbmdzIGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3NcclxufVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdGVwMycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc3RlcDMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdGVwM0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBpbnB1dFZhbHVlOiBzdHJpbmcgPSAnJzsgLy8gSW5pdGlhbCBpbnB1dCB2YWx1ZVxyXG4gIGlzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgZm9yIGFjdGl2ZSBzdGF0ZVxyXG4gIGlzSG92ZXJlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIGZvciBob3ZlciBzdGF0ZVxyXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyBmb3IgZGlzYWJsZWQgc3RhdGVcclxuICBhdXRobG9jYWxTdG9yYWdlVG9rZW46IHN0cmluZztcclxuICBlbmFibGVBZ3JlZTpib29sZWFuID0gZmFsc2VcclxuICBvbk1vdXNlRW50ZXIoKSB7XHJcbiAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgbW91c2UgbGVhdmUgZXZlbnRcclxuICBvbk1vdXNlTGVhdmUoKSB7XHJcbiAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xyXG4gIH1cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGhhbmRsZSBpbnB1dCBjaGFuZ2UgZXZlbnRcclxuICAgIG9uSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gZ2V0IGlucHV0IHN0eWxlcyBkeW5hbWljYWxseVxyXG4gIGdldElucHV0U3R5bGVzKCk6IElucHV0U3R5bGVzIHtcclxuICAgIGxldCBzdHlsZXM6IElucHV0U3R5bGVzID0ge307IC8vIERlZmluZSBzdHlsZXMgb2JqZWN0IHdpdGggdHlwZSBJbnB1dFN0eWxlc1xyXG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgc3R5bGVzWydib3JkZXItY29sb3InXSA9ICdibHVlJzsgLy8gQm9yZGVyIGNvbG9yIHdoZW4gaW5wdXQgaXMgYWN0aXZlXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNIb3ZlcmVkKSB7XHJcbiAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSAnZ3JlZW4nOyAvLyBCb3JkZXIgY29sb3Igd2hlbiBpbnB1dCBpcyBob3ZlcmVkXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICBzdHlsZXNbJ2JvcmRlci1jb2xvciddID0gJyNjY2MnOyAvLyBCb3JkZXIgY29sb3Igd2hlbiBpbnB1dCBpcyBkaXNhYmxlZFxyXG4gICAgICBzdHlsZXNbJ2NvbG9yJ10gPSAnIzk5OSc7IC8vIFRleHQgY29sb3Igd2hlbiBpbnB1dCBpcyBkaXNhYmxlZFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3R5bGVzWydib3JkZXItY29sb3InXSA9ICcjY2NjJzsgLy8gRGVmYXVsdCBib3JkZXIgY29sb3JcclxuICAgICAgc3R5bGVzWydjb2xvciddID0gJyMzMzMnOyAvLyBEZWZhdWx0IHRleHQgY29sb3JcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbiAgfVxyXG4gIHBhbmVsT3BlblN0YXRlID0gZmFsc2U7XHJcbiAgdGVybXNhbmRjb25kaXRpb246IGFueTtcclxuICB0eXBlOiBhbnk7XHJcbiAgYWNjb3VudERhdGE6IGFueTtcclxuICB0ZXJtczogYW55O1xyXG4gIGlkdmFsdWU6IGFueTtcclxuICBlbWFpbDogYW55O1xyXG4gIHNob3d2YWx1ZTogYm9vbGVhbiA9ZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnbmdPdHBJbnB1dCcpIG5nT3RwSW5wdXRSZWY6IGFueTtcclxuICBjb3VudGVyOiBudW1iZXI7XHJcbiAgdGljazogbnVtYmVyO1xyXG4gIHJlc2VuZDogYm9vbGVhbiA9dHJ1ZTtcclxuICBjb3VudERvd246IGFueTtcclxuICBvdHA6IGFueTtcclxuICBhYm91dEZvcm1EYXRhOiBhbnk7XHJcbiAgcHJpY2luZ0Zvcm1EYXRhOiBhbnk7XHJcbiAgcmV0dXJuVXJsOiBhbnk7XHJcbiAgaW52YWxpZE90cDpib29sZWFuID0gZmFsc2VcclxuICBzdWJzY3JpcHRpb25zOlN1YnNjcmlwdGlvbltdID0gW11cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsIHByaXZhdGUgcm91dGU6QWN0aXZhdGVkUm91dGUsIHByaXZhdGUgY2Q6Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsIHByaXZhdGUgdG9hc3RTZXJ2aWNlOlRvYXN0U2VydmljZSwgcHJpdmF0ZSBzZXR0ZXJzZXJ2aWNlOiBDb252ZXJzaW9uU2VydmljZSxcclxuKXtcclxuICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICB0aGlzLmdzLmVudmlyb25tZW50LnN1YnNjcmliZSgoZW52KSA9PiB7XHJcbiAgICBpZiAoZW52KSB7XHJcbiAgICAgIHRoaXMuYXV0aGxvY2FsU3RvcmFnZVRva2VuID0gYCR7ZW52LmFwcFZlcnNpb259LSR7ZW52LlVTRVJEQVRBX0tFWX1gO1xyXG4gICAgfVxyXG4gIH0pXHJcbiAgKVxyXG5cclxuICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmF1dGhTZXJ2aWNlLmFib3V0Rm9ybURhdGEuc3Vic2NyaWJlKChkYXRhKT0+e2lmKGRhdGEpe3RoaXMuYWJvdXRGb3JtRGF0YSA9IGRhdGF9fSkpXHJcbiAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hdXRoU2VydmljZS5wcmljaW5nRm9ybURhdGEuc3Vic2NyaWJlKChkYXRhKT0+e2lmKGRhdGEpe3RoaXMucHJpY2luZ0Zvcm1EYXRhID0gZGF0YX19KSlcclxufVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbik9PntcclxuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxubmdPbkluaXQoKTogdm9pZCB7XHJcbiAgLy8gZ2V0IHJldHVybiB1cmwgZnJvbSByb3V0ZSBwYXJhbWV0ZXJzIG9yIGRlZmF1bHQgdG8gJy8nXHJcbiAgdGhpcy5yZXR1cm5VcmwgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydyZXR1cm5VcmwnLnRvU3RyaW5nKCldIHx8ICcvJzsgICAgICBcclxufVxyXG4gIHVwZGF0ZXRlcm1zKGV2dDogYW55KSB7XHJcbiAgICB0aGlzLnRlcm1zID0gZXZ0LnRhcmdldC5jaGVja2VkXHJcbiAgfVxyXG5cclxuICBlbnRlcnByaXNlYWN0aXZhdGUoKXtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBuYW1lOnRoaXMuYWJvdXRGb3JtRGF0YT8uZmlyc3ROYW1lLFxyXG4gICAgICBlbWFpbDp0aGlzLmFib3V0Rm9ybURhdGE/LmNvcnBvcmF0ZUVtYWlsXHJcbiAgICB9XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnNlbmRTaWdudXBPdHAoZGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICB7XHJcbiAgICAgICAgbmV4dDoocmVzKT0+e1xyXG4gICAgICAgICAgaWYocmVzKXtcclxuICAgICAgICAgICAgdGhpcy5jb3VudGVyID0gNjA7XHJcbiAgICAgICAgICAgIHRoaXMudGljayA9IDEwMDA7XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5yZXNlbmQgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLmNvdW50RG93biA9IHRpbWVyKDAsIHRoaXMudGljaykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ZXIgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50RG93bi51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRlciA9IHRoaXMuY291bnRlciAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdvdmVybGF5LW9wZW4nKTtcclxuICAgICAgICAgICAgdGhpcy5zaG93dmFsdWUgPXRydWUgXHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjooZXJyKT0+e1xyXG4gICAgICAgICAgaWYoZXJyKXtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnIuZXJyb3IuZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICAgKSAgXHJcbiAgICApXHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZW5kT1RQKCkge1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIG5hbWU6dGhpcy5hYm91dEZvcm1EYXRhPy5maXJzdE5hbWUsXHJcbiAgICAgIGVtYWlsOnRoaXMuYWJvdXRGb3JtRGF0YT8uY29ycG9yYXRlRW1haWxcclxuICAgIH1cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnNlbmRTaWdudXBPdHAoZGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICB7XHJcbiAgICAgICAgbmV4dDoocmVzKT0+e1xyXG4gICAgICAgICAgaWYocmVzKXtcclxuICAgICAgICAgICAgdGhpcy5uZ090cElucHV0UmVmLnNldFZhbHVlKCcnKTtcclxuICAgICAgICAgICAgdGhpcy5jb3VudGVyID0gNjA7XHJcbiAgICAgICAgICAgIHRoaXMudGljayA9IDEwMDA7XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5yZXNlbmQgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLmNvdW50RG93biA9IHRpbWVyKDAsIHRoaXMudGljaykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ZXIgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50RG93bi51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRlciA9IHRoaXMuY291bnRlciAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOihlcnIpPT57XHJcbiAgICAgICAgICBpZihlcnIpe1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8uZXJyb3I/LmVycm9yIHx8IGVycj8ubWVzc2FnZSB8fCAnRW50ZXIgVmFsaWQgT1RQJztcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICAgKSBcclxuICAgIClcclxuXHJcbiAgfVxyXG4gIG90cHN1Ym1pdCgpe1xyXG4gICBsZXQgZGF0YTphbnkgPSB7XHJcbiAgICAgIGNsaWVudE5hbWU6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY2xpZW50TmFtZSxcclxuICAgICAgd2Vic2l0ZVVybDogdGhpcy5hYm91dEZvcm1EYXRhPy53ZWJzaXRlVXJsLFxyXG4gICAgICAgZmlyc3ROYW1lOiB0aGlzLmFib3V0Rm9ybURhdGE/LmZpcnN0TmFtZSxcclxuICAgICAgIGxhc3ROYW1lOiB0aGlzLmFib3V0Rm9ybURhdGE/Lmxhc3ROYW1lLFxyXG4gICAgICAgY29ycG9yYXRlRW1haWw6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY29ycG9yYXRlRW1haWwsXHJcbiAgICAgICBtb2JpbGVOdW1iZXI6IHRoaXMuYWJvdXRGb3JtRGF0YT8ubW9iaWxlTnVtYmVyLFxyXG4gICAgICAgY291bnRyeUNvZGU6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY291bnRyeUNvZGUsXHJcbiAgICAgICBwYXNzd29yZDogdGhpcy5hYm91dEZvcm1EYXRhPy5wYXNzd29yZCxcclxuICAgICAgIHRvdGFsU3RvcmVzOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8udG90YWxTdG9yZXMudmFsdWUsXHJcbiAgICAgICBzdG9yZVNpemU6dGhpcy5wcmljaW5nRm9ybURhdGE/LnN0b3JlU2l6ZS52YWx1ZSxcclxuICAgICAgIHRvdGFsQ2FtZXJhOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8uc3RvcmVTaXplPy5jYW1lcmFzLFxyXG4gICAgICAgc3Vic2NyaXB0aW9uUGVyaW9kOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8uc3Vic2NyaXB0aW9uUGVyaW9kLFxyXG4gICAgICAgc3Vic2NyaXB0aW9uVHlwZTogdGhpcy5wcmljaW5nRm9ybURhdGE/LnN1YnNjcmlwdGlvblR5cGUsXHJcbiAgICAgICAgb3RwOnRoaXMub3RwXHJcbiAgIH1cclxuXHJcbiAgIGlmKGRhdGEuc3Vic2NyaXB0aW9uVHlwZSA9PT0gJ2ZyZWUnKXtcclxuICAgIGRhdGFbJ3Byb2R1Y3QnXSA9IFsndGFuZ29UcmFmZmljJ11cclxuICAgfWVsc2UgaWYoZGF0YS5zdWJzY3JpcHRpb25UeXBlID09PSAncHJlbWl1bScpe1xyXG4gICAgZGF0YVsncHJvZHVjdCddID0gdGhpcy5nZXRUcnVlS2V5cyh0aGlzLnByaWNpbmdGb3JtRGF0YT8ucHJvZHVjdClcclxuICAgfWVsc2UgaWYoZGF0YS5zdWJzY3JpcHRpb25UeXBlID09PSAnZW50ZXJwcmlzZScpe1xyXG4gICAgZGF0YVsncHJvZHVjdCddID0gWyd0YW5nb1RyYWZmaWMnLCAndGFuZ29ab25lJywgJ3RhbmdvVHJheCddXHJcbiAgIH1cclxuICAgXHJcbiAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ251cChkYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDoocmVzKT0+e1xyXG4gICAgICBpZihyZXMpe1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuYWJvdXRGb3JtRGF0YS5uZXh0KG51bGwpXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5wcmljaW5nRm9ybURhdGEubmV4dChudWxsKVxyXG4gICAgICBcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdvdmVybGF5LW9wZW4nKTtcclxuICAgICAgdGhpcy5zaG93dmFsdWUgPWZhbHNlIFxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICBsZXQgbG9naW5Ub2tlbjogYW55ID1cclxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4pO1xyXG4gICAgaWYgKGxvZ2luVG9rZW4pIHtcclxuICAgICAgbG9naW5Ub2tlbiA9IEpTT04ucGFyc2UobG9naW5Ub2tlbik7XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeShyZXM/LmRhdGE/LnJlc3VsdClcclxuICAgICAgKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMudXNlclByb2ZpbGUoKTtcclxuICAgICAgfVxyXG4gICAgIH0sXHJcbiAgICAgZXJyb3I6KHJlcyk9PntcclxuICAgICAgaWYocmVzKXtcclxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcz8uZXJyb3I/Lm1lc3NhZ2UgfHwgcmVzPy5lcnJvcj8uZXJyb3IgfHwgcmVzPy5tZXNzYWdlIHx8ICdFbnRlciBWYWxpZCBPVFAnO1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgIHRoaXMuaW52YWxpZE90cCA9IHRydWVcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgIH0sXHJcbiAgIH0pIFxyXG4gICApXHJcblxyXG4gICBcclxuXHJcbiAgfVxyXG5cclxuICBvbk90cENoYW5nZShldmVudDphbnkpe1xyXG4gICAgdGhpcy5pbnZhbGlkT3RwID0gZmFsc2VcclxuICAgIHRoaXMub3RwID0gZXZlbnRcclxuICB9XHJcblxyXG4gIGdldFRydWVLZXlzKG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoa2V5ID0+IG9ialtrZXldID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIHVzZXJQcm9maWxlKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgdGhpcy5hdXRoU2VydmljZS51c2VyUHJvZmlsZURldCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzJiYgcmVzLmNvZGUgPT0yMDApIHtcclxuICAgICAgICAgIHRoaXMuZ3MudXNlckFjY2Vzcy5uZXh0KHJlcy5kYXRhPy5wZXJtaXNzaW9uKVxyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9icmFuZHMnXSk7XHJcbiAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucmV0dXJuVXJsKTtcclxuICAgICAgICB9IFxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoZXJyLmVycm9yLmVycm9yKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgICApXHJcbiAgICBcclxuICB9XHJcblxyXG4gIHByZXZTdGVwKCkge1xyXG4gICAgdGhpcy5zZXR0ZXJzZXJ2aWNlLmNvbXBsZXRlU3RlcHBlcih7IHN0ZXA6IDIsIHByZXY6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgY29uc3QgYXRCb3R0b20gPSBlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wIDw9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgMTtcclxuICAgIFxyXG4gICAgaWYgKGF0Qm90dG9tKSB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVBZ3JlZSAgPSB0cnVlXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsb3NlTW9kYWwoKXtcclxuICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ292ZXJsYXktb3BlbicpO1xyXG4gIHRoaXMuc2hvd3ZhbHVlID0gIXRoaXMuc2hvd3ZhbHVlXHJcbiAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuXHJcbiAgdGhpcy5jb3VudERvd24udW5zdWJzY3JpYmUoKVxyXG59XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgbXQtMTAgbXgtMTVcIj5cclxuICAgIDxkaXYgaWQ9XCJrdF9jb250ZW50X2NvbnRhaW5lclwiIGNsYXNzPVwiY29udGFpbmVyLXh4bCBmb250IGgtMTAwICBteC0xMCBwZS0xNSBteS03XCI+XHJcbiAgICAgICAgPGRpdiAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIiBjbGFzcz1cImgtNTUwcHggc3RpY2t5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgY29sLW1kLTEyIGNvbC1zbS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLTAgbXQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbiBmcy1sZy0xIG1iLTQgdGV4dC1ncmF5LTgwMFwiPkdlbmVyYWwgVGVybXMgYW5kIENvbmRpdGlvbnMtU0FBU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFncmVlbWVudDwvc3Bhbj48c3BhbiBjbGFzcz1cIiB0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIG1lLTEgc3ViXCI+VGhlc2UgdGVybXMgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucyAoaGVyZWluYWZ0ZXIgY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvIGFzIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcU0FBU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtc+KAnSk8L3NwYW4+IHNoYWxsIGdvdmVybiB5b3VyIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+KOKAnFVzZXLigJ08L3NwYW4+IG9yIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcWW914oCdPC9zcGFuPiBvciA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFlvdXLigJ08L3NwYW4+b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnEN1c3RvbWVy4oCdKTwvc3Bhbj4gdXNlIG9mIFNlcnZpY2VzIChhcyBkZWZpbmVkIGJlbG93KSB0aHJvdWdoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB3ZWJzaXRlIGh0dHBzOi8vdGFuZ29leWUuYWkvIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+KFdlYnNpdGUpLjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiB0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIG1lLTEgbXktMSBzdWJcIj5CeSBhY2Nlc3Npbmcgb3IgdXNpbmcgdGhlIFNlcnZpY2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgV2Vic2l0ZSBvciBieSBleGVjdXRpbmcgYW4gT3JkZXIgRm9ybSwgdGhhdCByZWZlcmVuY2VzIHRoZXNlIFNBQVMgVGVybXMsIFlvdVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZXNlIFNhYVMgVGVybXMuIElmIFlvdSBhcmUgYWNjZXNzaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSBvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaGFsZiBvZiBhIENvbXBhbnkgb3Igb3RoZXIgbGVnYWwgZW50aXR5LCBZb3UgcmVwcmVzZW50IHRoYXQgWW91IGhhdmUgdGhlIGF1dGhvcml0eSB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmQgc3VjaCBlbnRpdHkgYW5kIGl0cyBhZmZpbGlhdGVzIHRvIHRoZXNlIFNBQVMgVGVybXMgaW4gd2hpY2ggY2FzZSB0aGUgdGVybXMg4oCcVXNlcuKAnVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIOKAnFlvdeKAnSBvciDigJxZb3Vy4oCdIG9yIOKAnEN1c3RvbWVy4oCdIHNoYWxsIHJlZmVyIHRvIHN1Y2ggZW50aXR5IGFuZCBpdHMgYWZmaWxpYXRlcy48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktbGctMlwiPiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYWxpZ24tanVzdGlmeVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xLiBEZWZpbml0aW9uIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiDigJxPcmRlciBGb3Jt4oCdIG1lYW5zIHRoZSBlYWNoIG9yZGVyIGZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcG9zYWwgb3Igc3RhdGVtZW50IG9mIHdvcmsgcmVmZXJlbmNpbmcgdGhpcyBBZ3JlZW1lbnQgd2hlcmV2ZXIgYXBwbGljYWJsZS4gPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcU29mdHdhcmXigJ08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhlIGRhdGEgYW5hbHl0aWNzIGFuZCBidXNpbmVzcyBpbnRlbGxpZ2VuY2Ugc29mdHdhcmUgYW5kIGl0cyBvYmplY3QgY29kZSB2ZXJzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZW5hYmxlcyB0aGUgQ3VzdG9tZXIgdG8gaWRlbnRpZnksIGFtb25nc3Qgb3RoZXJzLCBjdXN0b21lciBmb290ZmFsbHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVtb2dyYXBoaWNzLCBpZGVudGlmeSBtaXNzZWQgb3Bwb3J0dW5pdGllcywgaW5jbHVkaW5nIGFueSB1cGRhdGVzIG9yIG5ldyB2ZXJzaW9ucy48L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxTZXJ2aWNlc+KAnTwvc3Bhbj5yZWZlciB0byB0aGUgaW4tc3RvcmUgQUkgZHJpdmVuIGFuYWx5dGljc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHRocm91Z2ggdGhlIFNvZnR3YXJlIHRvIHRoZSBDdXN0b21lciB0aGF0IGlzIGhvc3RlZCBieSBUYW5nbyBFeWUgYW5kIG1hZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgdG8gQ3VzdG9tZXIgb3ZlciBhIG5ldHdvcmsgd2hldGhlciBvbiBhIHRyaWFsIG9yIHBhaWQgYmFzaXMuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiDigJxUZXJt4oCdIHNoYWxsIG1lYW4gdGhhdCBwZXJpb2Qgc3BlY2lmaWVkIGluIGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVkdWxlIHRvIGJlIGV4ZWN1dGVkIHNlcGFyYXRlbHkgd2l0aCB0aGUgQ3VzdG9tZXIgZHVyaW5nIHdoaWNoIEN1c3RvbWVyIHdpbGwgaGF2ZSBvbi1saW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgYW5kIHVzZSBvZiB0aGUgU2VydmljZXMgdGhyb3VnaCB0aGUgV2Vic2l0ZS4gPC9saT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+Mi4gRWxpZ2liaWxpdHkgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ViIG15LTdcIj5JbiBvcmRlciB0byB1c2UgdGhlIFNlcnZpY2VzLCBZb3UgbXVzdDo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPiBCZSBhYm92ZSAxOCB5ZWFycyBvZiBhZ2U7IDwvbGk+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkNvbXBsZXRlIHRoZSBhY2NvdW50IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHRvIGFjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFNlcnZpY2VzIHRocm91Z2ggdGhlIFdlYnNpdGU7PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5Zb3Ugd2lsbCBwcm92aWRlIGNvcnJlY3QsIHVwdG8gZGF0ZSBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcywgaW5jbHVkaW5nIGJpbGxpbmcgYWRkcmVzczs8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IFlvdSB3aWxsIGtlZXAgYWxsIHlvdXIgY3JlZGVudGlhbHMgYW5kIHBhc3N3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWRlbnRpYWwgYW5kIGFsc28gcmVzcG9uc2libGUgdG8gbWFpbnRhaW5pbmcgdGhlIHNhZmV0eSBhbmQgc2VjdXJpdHkgb2YgeW91ciBwZXJzb25hbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb247IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5Zb3Ugd2lsbCBwcm92aWRlIGFsbCByZWxldmFudCBhbmQgcmVxdWlyZWQgaGFyZHdhcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzb2Z0d2FyZSBhcyBzdWdnZXN0ZWQgYnkgVGFuZ28gRXllIGF0IHlvdXIgZGVzaWduYXRlZCBsb2NhdGlvbiBpbiBvcmRlciB0byBlbmFibGUgVGFuZ29cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV5ZSB0byBpbnN0YWxsIHRoZSBTb2Z0d2FyZSBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBTZXJ2aWNlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjMuIFNlcnZpY2VzIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+IEluIGNvbnNpZGVyYXRpb24gZm9yIHBheW1lbnQgb2YgdGhlIGZlZXMsIFRhbmdvIEV5ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbnRzIHRoZSBDdXN0b21lciBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHBlcnNvbmFsLCByZXZvY2FibGUsIGxpY2VuY2UgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyBhbmQgdXNlIHRoZSBTZXJ2aWNlcyBpbiBhY2NvcmRhbmNlIHdpdGggVGFuZ28gRXll4oCZcyBpbnRlbmRlZCBwdXJwb3NlIGZvciB0aGUgU2VydmljZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+KExpY2VuY2UpLjwvc3Bhbj48L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBTZXJ2aWNlcyBhcmUgbm90IGNvbnRpbmdlbnQgb24gdGhlIGRlbGl2ZXJ5IG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZnV0dXJlIGZ1bmN0aW9uYWxpdHkgb3IgZmVhdHVyZXM8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY2hhbmdlIG9yIHJlbW92ZSBmZWF0dXJlcyBvZiB0aGUgU2VydmljZXMgYW5kIG9yIHRoZSBTb2Z0d2FyZSBmcm9tIHRpbWUgdG8gdGltZS4gV2hlcmUgdGhlcmUgaXMgYW55IG1hdGVyaWFsIGFsdGVyYXRpb24gdG8gdGhlIFNlcnZpY2VzIGFuZCBvciB0aGUgU29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgY2xhdXNlLCBUYW5nbyBFeWUgd2lsbCBwcm92aWRlIHRoZSBDdXN0b21lciB3aXRoIDMwIGJ1c2luZXNzIGRheXPigJkgbm90aWNlIGFuZCB0aGUgQ3VzdG9tZXIgYWdyZWVzIHRoYXQgYW55IG1hdGVyaWFsIGFsdGVyYXRpb24gaXMgYXQgVGFuZ28gRXll4oCZcyBkaXNjcmV0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5BY2Nlc3MgdG8gdGhlIFNlcnZpY2VzIHNoYWxsIGJlIGxpbWl0ZWQgdG8gYXV0aG9yaXplZCBwZXJzb25zIHdpdGggdmFsaWQgY3JlZGVudGlhbHMgd2hpY2ggaXMgdG8gYmUgYWdyZWVkIGF0IHRoZSB0aW1lIG9mIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIFNlcnZpY2VzIGFuZCB0aGUgV2Vic2l0ZS4gSWYgaXQgaXMgYSBzaW5nbGUgYWNjb3VudCBhY2Nlc3MsIHN1Y2ggYWNjb3VudCBzaGFsbCBub3QgYmUgdXNlZCBieSBtdWx0aXBsZSB1c2VycyBhdCB0aGUgc2FtZSB0aW1lLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNoYW5nZSwgbW9kaWZ5LCBhbWVuZCwgdXBkYXRlLCBzdXNwZW5kIG9yIGRpc2NvbnRpbnVlIHRoZSB3aG9sZSBvciBhbnkgcG9ydGlvbiBvZiB0aGUgU2VydmljZXMsIFdlYnNpdGUgb3IgdGhlIFNhYVMgVGVybXMgYXQgYW55IHRpbWUuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktM1wiPllvdSBhZ3JlZSB0aGF0wqBUYW5nbyBFeWU6PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPmEuIHdpbGwgc3VwcGx5IHRoZSBTZXJ2aWNlcyBvbiBhIG5vbi1leGNsdXNpdmUgYmFzaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+Yi4gZG9lcyBub3QgbWFrZSBhbnkgd2FycmFudHkgb3IgcmVwcmVzZW50YXRpb24gYXMgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhYmlsaXR5IG9mIHRoZSBmYWNpbGl0aWVzIG9yIHNlcnZpY2VzIG9mIGFueSB0aGlyZC1wYXJ0eSBzdXBwbGllcnM7IGFuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+Yy4gaXMgbm90IGxpYWJsZSBmb3IgYW55IGZhaWx1cmUgaW4sIGZhdWx0IHdpdGggb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZ3JhZGF0aW9uIG9mIHRoZSBTZXJ2aWNlcy9Tb2Z0d2FyZSBpZiB0aGF0IGZhaWx1cmUsIGZhdWx0IG9yIGRlZ3JhZGF0aW9uIGlzIGF0dHJpYnV0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb3IgY2F1c2VkIGJ5IGFueSBmYWlsdXJlIG9mIHRoZSBDdXN0b21lciBlbnZpcm9ubWVudCBvciB0aGUgZmFjaWxpdGllcyBvciBzZXJ2aWNlcyBvZiBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXJkIHBhcnR5LjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjQuIExpY2Vuc2UgUmVzdHJpY3Rpb25zIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTNcIj4gWW91IG11c3Qgbm90IGFjY2VzcyBvciB1c2UgdGhlIFNlcnZpY2VzIGFuZCBvciB0aGUgU29mdHdhcmUgZXhjZXB0IGFzIHBlcm1pdHRlZCBieSB0aGUgTGljZW5zZSBhbmQgbWF5IG5vdCBkbyBvciBhdXRob3JpemUgdGhlIGNvbW1pc3Npb24gb2YgYW55IGFjdCB0aGF0IHdvdWxkIG9yIG1pZ2h0IGludmFsaWRhdGUgb3IgYmUgaW5jb25zaXN0ZW50IHdpdGggdGhlIFRhbmdvIEV5ZeKAmXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiB0aGUgU2VydmljZXMgb3IgU29mdHdhcmUuIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZyBwcm92aXNpb25zLCB0aGUgQ3VzdG9tZXIgYWdyZWVzIGFuZCBhY2tub3dsZWRnZXMgdGhhdCBpdCBtdXN0IG5vdCBhbmQgd2lsbCBub3QgcGVybWl0IGFueSBwZXJzb24gdG86PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmEuIHJlc2VsbCwgYXNzaWduLCB0cmFuc2ZlciwgZGlzdHJpYnV0ZSBvciBwcm92aWRlIG90aGVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFjY2VzcyB0byB0aGUgU2VydmljZXM7PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5iLiDigJxmcmFtZeKAnSwg4oCcbWlycm9y4oCdIG9yIHNlcnZlIGFueSBvZiB0aGUgU2VydmljZXMvU29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb24gYW55IHdlYiBzZXJ2ZXIgb3Igb3RoZXIgY29tcHV0ZXIgc2VydmVyIG92ZXIgdGhlIGludGVybmV0IG9yIGFueSBvdGhlciBuZXR3b3JrOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5jLiBjb3B5LCBhbHRlciwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBmcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXByb2R1Y2UsIHJlc2VsbCwgdHJhbnNmZXIgdG8gYSB0aGlyZCBwYXJ0eSwgcmV2ZXJzZSBhc3NlbWJsZSwgcmV2ZXJzZSBlbmdpbmVlciwgcmV2ZXJzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlIG9yIGVuaGFuY2UgdGhlIFNlcnZpY2VzIG9yIFNvZnR3YXJlOyBvciA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+ZCAuYWx0ZXIsIHJlbW92ZSBvciB0YW1wZXIgd2l0aCBhbnkgdHJhZGVtYXJrcywgYW55IHBhdGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBjb3B5cmlnaHQgbm90aWNlcywgb3IgYW55IGNvbmZpZGVudGlhbGl0eSBsZWdlbmQgb3Igbm90aWNlLCBvciBhbnkgbnVtYmVycywgb3Igb3RoZXIgbWVhbnMgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmljYXRpb24gdXNlZCBvbiBvciBpbiByZWxhdGlvbiB0byB0aGUgU2VydmljZXMgb3IgU29mdHdhcmUuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBDdXN0b21lciBtdXN0IG5vdCB1c2UgdGhlIFNlcnZpY2VzIGluIGFueSB3YXkgd2hpY2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW4gYnJlYWNoIG9mIGFueSBzdGF0dXRlLCByZWd1bGF0aW9uLCBsYXcgb3IgbGVnYWwgcmlnaHQgb2YgYW55IHBlcnNvbiB3aXRoaW4gdGhlIFJlcHVibGljIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluZGlhIG9yIHRoZSBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIEN1c3RvbWVyIG9yIGl0cyBwZXJzb25uZWwgYXJlIGxvY2F0ZWQuwqA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjUuIFByb2hpYml0ZWQgVXNlIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG10LTdcIj5Zb3UgYWdyZWUgdG8gdXNlIHRoZSBXZWJzaXRlIGFuZCB0aGUgU2VydmljZXMvU29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzZWQgdGhyb3VnaCBpdCBmb3IgdGhlIHB1cnBvc2UgZW51bWVyYXRlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGFuZCBhZ3JlZSBub3QgdG8gdW5kZXJ0YWtlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPiBhLiBVc2Ugb2YgdGhlIFdlYnNpdGUgYW5kIHRoZSBTZXJ2aWNlcyB0byB2aW9sYXRlIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIGxhd3Mgb2YgYW55IGp1cmlzZGljdGlvbiBmcm9tIHdoaWNoIFlvdSBhY2Nlc3MgdGhlIFNlcnZpY2VzLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj4gYi4gVXNlIHRoZSBTZXJ2aWNlcyBmb3IgY29tcGV0aXRpdmUgYmVuY2htYXJraW5nIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXZlbG9waW5nIGEgY29tcGV0aXRpdmUgcHJvZHVjdCBvciBzZXJ2aWNlcy48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+IGMuIFRvIHVwbG9hZCBvciBvdGhlcndpc2UgZGlzc2VtaW5hdGUgYW55IGNvbXB1dGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpcnVzZXMgb3Igb3RoZXIgc29mdHdhcmUgdGhhdCBtYXkgdGhlIFNvZnR3YXJlIG9mIFRhbmdvIEV5ZTs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+IGQuIFRvIHVubGF3ZnVsbHkgZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IG90aGVycyBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGluIGluIGFuIHVubGF3ZnVsIG1hbm5lcjs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbWItNSBtcy01XCI+IGUuIFRvIHNvbGljaXQgb3RoZXJzIHRvIHBlcmZvcm0gb3IgcGFydGljaXBhdGUgaW4gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVubGF3ZnVsIGFjdHMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IHJlc2VsbCwgYXNzaWduLCB0cmFuc2ZlciwgZGlzdHJpYnV0ZSBvciBwcm92aWRlIG90aGVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFjY2VzcyB0byB0aGUgU2VydmljZXM7PC9saT4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5Zb3UgYWNrbm93bGVkZ2UgdGhhdCBUYW5nbyBFeWUgd2lsbCBub3QgYmUgbGlhYmxlIGZvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnkgaW5mb3JtYXRpb24gdGhhdCBpcyByZWxheWVkIGFuZCBzdG9yZWQgaW4gaXRzIGNsb3VkIHNlcnZlcnMgd2hpY2ggaXMgYWNjZXNzZWQgdGhyb3VnaCB5b3VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMuIFlvdSBzaGFsbCBhbHdheXMgYmUgcmVzcG9uc2libGUgZm9yIHRoZSBzYW1lIGF0IGFsbCB0aW1lcy5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5Zb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cyBzdGF0dXRlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cnkgeW91IGFyZSBhY2Nlc3NpbmcgdGhlIFdlYnNpdGUvU29mdHdhcmUgYW5kIHRoZSBTZXJ2aWNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25jZXJuaW5nIHRoZSB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uL3ZpZGVvIGZvb3RhZ2Ugd2hpY2ggaXMgcmVsYXllZCB0aHJvdWdoIHlvdXIgY2N0diBjYW1lcmEgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsb3VkIHN0b3JhZ2Ugb2YgVGFuZ28gRXllLiA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5Zb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgU2VydmljZXMgaGFzIG5vdCBiZWVuIGRlc2lnbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNvbGxlY3Qgb3IgcHJvY2VzcyBhbnkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGFuZCBhY2NvcmRpbmdseSB5b3UgYWdyZWUgbm90IHRvIHVzZSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZXMgdG8gY29sbGVjdCwgcHJvY2VzcyBvciBzdG9yZSBhbnkgc2Vuc2l0aXZlIHBlcnNvbmFsIGRhdGEgb25jZSB5b3UgYWNjZXNzIHRoZSByZXBvcnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBieSBUYW5nbyBFeWUgaW4gcHVyc3VhbmNlIHRvIHRoZSBTZXJ2aWNlcy4gVGFuZ28gRXllIHNwZWNpZmljYWxseSBkaXNjbGFpbSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlhYmlsaXR5IHRoYXQgbWF5IHJlc3VsdCBmcm9tIHlvdXIgdXNlIG9mIHRoZSBTZXJ2aWNlcyB0byBjb2xsZWN0LCBwcm9jZXNzIGFuZCBzdG9yZSBzZW5zaXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uYWwgaW5mb3JtYXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIHJlc2VydmVzIHRoZSByaWdodCB0byBtb25pdG9yIHRoZSB1c2Ugb2YgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdlYnNpdGUvU2VydmljZXMvU29mdHdhcmUgYnkgWW91IHRvIGVuc3VyZSBjb21wbGlhbmNlIG9mIHRoZXNlIFNhYVMgVGVybXMgYW5kIGFwcGxpY2FibGUgbGF3LlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkluIHRoZSBldmVudCBvZiB2aW9sYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSBsYXdzIGFuZCByZWd1bGF0aW9ucywgVGFuZ28gRXllIHNoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIGludmVzdGlnYXRlIHN1Y2ggYnJlYWNoZXMgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9ucyB3aGljaCBzaGFsbCBpbmNsdWRlIGJ1dCBub3QgYmUgbGltaXRlZCB0byBwcm92aWRpbmcgd2FybmluZyB0byBmaXJzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lIG9mZmVuZGVycywgc3VzcGVuZGluZyBhbmQgb3IgZXZlbiB0ZXJtaW5hdGluZyB0aGUgU2VydmljZXMgYW5kIGFjY2VzcyB0byB0aGUgV2Vic2l0ZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjYuIEludm9pY2luZzogPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5JbnZvaWNlcyB3aWxsIGJlIGlzc3VlZCBvbiB0aGUgYmFzaXMgb2YgdGhlIG51bWJlciBvZiBkZXBsb3llZCBzdG9yZXMgaW4gZXhpc3RlbmNlIG9uIHRoZSBpbnZvaWNlIGRhdGUgYW5kIHNoYWxsIGJlIGlzc3VlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFBheW1lbnQgVGVybXMgaW4gdGhlIGNvbW1lcmNpYWwgdGVybXMgYWJvdmUuIFRhbmdvIEV5ZSBzaGFsbCBiaWxsIEN1c3RvbWVyIGZvciBhcHBsaWNhYmxlIHRheGVzIGFzIGEgc2VwYXJhdGUgbGluZSBpdGVtIG9uIGVhY2ggaW52b2ljZS4gQ3VzdG9tZXIgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIHBheW1lbnQgb2YgYWxsIHNhbGVzIGFuZCB1c2UgdGF4ZXMsIEdvb2RzIGFuZCBTZXJ2aWNlcyB0YXgsIG9yIHNpbWlsYXIgY2hhcmdlcyByZWxhdGluZyB0byBDdXN0b21lcuKAmXMgcHVyY2hhc2UgYW5kIHVzZSBvZiB0aGUgU2VydmljZXMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+Ny4gUGF5bWVudDogPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPlBheW1lbnQgc2hhbGwgYmUgbWFkZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFBheW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVybXMgaW4gdGhlIGNvbW1lcmNpYWwgdGVybXMgd2hpY2ggc2hhbGwgYmUgYWdyZWVkIHRvIHNlcGFyYXRlbHkgYmV0d2VlbiBUYW5nbyBFeWUgYW5kIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBhbmQgd2hpY2ggc2hhbGwgYmUgcmVhZCBhbmQgYmUgY290ZXJtaW5vdXMgd2l0aCB0aGVzZSBTYWFTIFRlcm1zIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+KFBheW1lbnQgVGVybXMpLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBvdGhlcndpc2UsIHBheW1lbnRzIGFyZSBub24tcmVmdW5kYWJsZS4gSW4gdGhlIGV2ZW50IHRoZSBDdXN0b21lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlscyB0byBtYWtlIHRoZSBwYXltZW50IGFzIHBlciB0aGUgcGF5bWVudCB0ZXJtcywgVGFuZ28gRXllIHNoYWxsIHNlbmQgYSB3cml0dGVuIG5vdGljZSB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xpZW50IHRvIGVuc3VyZSB0aGF0IHRoZSBwYXltZW50IGlzIG1hZGUgd2l0aGluIDMwICh0aGlydHkpIGRheXMgKOKAnEFkZGl0aW9uYWwgUGVyaW9k4oCdKSBmcm9tIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlIG9mIHJlY2VpcHQgc3VjaCB3cml0dGVuIG5vdGljZS4gSWYgdGhlIGN1c3RvbWVyIGZhaWxzIHRvIG1ha2UgdGhlIHBheW1lbnQgd2l0aGluIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIFBlcmlvZCwgdGhlIGFjY2VzcyB0byB0aGUgd2ViIHBvcnRhbCB3aWxsIGJlIGJsb2NrZWQgYW5kIHRoZSBTZXJ2aWNlcyBzaGFsbCBiZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5kZWQgNyAoc2V2ZW4pIGRheXMgYWZ0ZXIgc2VuZGluZyBhIHJlbWluZGVyIGVtYWlsIHRvIEN1c3RvbWVyIGZyb20gdGhlIGV4cGlyeSBvZiB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBQZXJpb2QuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+UGFydGllcyBhY2tub3dsZWRnZSB0aGF0IHRpbWUgaXMgb2YgdGhlIGVzc2VuY2Ugd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwZWN0IHRvIHBheW1lbnRzIHJlcXVpcmVkIHVuZGVyIHRoaXMgY2xhdXNlLiBJbiB0aGUgZXZlbnQgb2YgYW55IGRlbGF5IGluIHBheW1lbnQgYnkgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyLCBUYW5nbyBFeWUgbWF5IHJlcXVpcmUgdGhlIEN1c3RvbWVyIHRvIHBheSBUYW5nbyBFeWUgYSBsYXRlIHBheW1lbnQgcGVuYWx0eSBlcXVhbCB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0d2VsdmUgcGVyY2VudCAoMTIlKSBwZXIgYW5udW0gb24gYWxsIG91dHN0YW5kaW5nIHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj44LkludGVsbGVjdHVhbCBQcm9wZXJ0eTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5BbGwgVGFuZ28gRXllIFNvZnR3YXJlLCBpbmNsdWRpbmcgdGhlIFdlYnNpdGUgYW5kIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVzIHRoZXJldG8sIGFuZCBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNyZWF0ZWQgYnkgVGFuZ28gRXllIGluIGZ1cnRoZXJhbmNlIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBvciBhbnkgd29ya3MsIHByb2R1Y3RzLCBkb2N1bWVudHMsIG1hdGVyaWFscyBjcmVhdGVkIHVzaW5nLCBpbmNvcnBvcmF0aW5nLCBjb21wcmlzaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluLCBvciByZWxhdGluZyB0byBzdWNoIGludGVsbGVjdHVhbCBwcm9wZXJ0eSAo4oCcVGFuZ28gRXllIElQ4oCdKSBzaGFsbCBhdCBhbGwgdGltZXMgcmVtYWluIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpdmUgcHJvcGVydHkgb2YgVGFuZ28gRXllIGFuZC9vciBpdHMgbm9taW5lZXMgb3IgYWZmaWxpYXRlcywgYXMgdGhlIGNhc2UgbWF5IGJlLCBhbmQgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIHNoYWxsIG5vdCBoYXZlIGFueSByaWdodCwgdGl0bGUsIGNsYWltIGV0Yy4gd2hhdHNvZXZlciBvdmVyIHRoZSBzYW1lLiBOb3RoaW5nIGNvbnRhaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZXJlaW4gc2hhbGwgYmUgY29uc3RydWVkIGFzIGEgdHJhbnNmZXIsIGFzc2lnbm1lbnQgb3IgY29udmV5YW5jZSBieSBUYW5nbyBFeWUgdG8gQ3VzdG9tZXIgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG93bmVyc2hpcCwgaW50ZXJlc3Qgb3IgdGl0bGUgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGF0dGFjaGVkIHRvIHRoZSBUYW5nbyBFeWUgSVAuIFRoZSBDdXN0b21lciBpcyBvbmx5IGF1dGhvcml6ZWQgdG8gcmVjZWl2ZSBhIHJpZ2h0IHRvIGFjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYW5nbyBFeWUgSVAgZm9yIHRoZSB0ZXJtIGV4cGxpY2l0bHkgZ3JhbnRlZCBieSBUYW5nbyBFeWUgdG8gQ3VzdG9tZXIgYW5kIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlzaW9ucyBvZiB0aGVzZSBTYWFTIFRlcm1zLiBUaGlzIGF1dGhvcml6YXRpb24gaXMgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uLXN1Yi1saWNlbnNhYmxlLCB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCB1bmRlciB0aGlzIEFncmVlbWVudC4gQ3VzdG9tZXIgc2hhbGwgbm90IGhhdmUgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IHRvIG1vZGlmeSwgYWRhcHQsIGluY29ycG9yYXRlLCBjcmVhdGUgYW55IGRlcml2YXRpdmUgdXNpbmcgb3IgaW5jb3Jwb3JhdGluZyBUYW5nbyBFeWUgSVBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW4gYW55IG1hbm5lciB0cmFuc2ZlciwgZW5jdW1iZXIsIGFsaWVuYXRlLCBzZWxsLCBzaGFyZSwgYXNzaWduLCBsaWNlbnNlIG9yIHN1Yi1sZXQgaXQgdG8gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXJkIHBhcnR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkFzIGJldHdlZW4gdGhlIHBhcnRpZXMsIEN1c3RvbWVyIHJldGFpbnMgYWxsIHJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIOKAk8KgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+YS4gYWxsIHJhdyBkYXRhIGdlbmVyYXRlZCBmcm9tIHRoZSB1c2Ugb2YgdGhlIFNvZnR3YXJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGV4dCwgc291bmQsIHZpZGVvLCBvciBpbWFnZSBmaWxlcywgYnV0IGV4Y2x1ZGluZyBhbnkgQnVzaW5lc3MgRGF0YSAo4oCcR2VuZXJhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGHigJ0pOyBhbmTCoMKgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmIuIHJhdyBkYXRhIG93bmVkIGJ5IGFuZCByZWxhdGluZyB0byB0aGUgQ3VzdG9tZXIsIHN1Y2ggYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFueSBpbmZvcm1hdGlvbiwgc3RvcmUgbG9jYXRpb24gYW5kIGRldGFpbHMgb2YgdGhlIHpvbmVzLCBlbXBsb3llZSBpbmZvcm1hdGlvbiwgYnV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGluZyBhbnkgR2VuZXJhdGVkIERhdGEgKOKAnEJ1c2luZXNzICwgdGhhdCBpcyBwcm92aWRlZCB0byBUYW5nbyBFeWUgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIHRocm91Z2ggdGhlIEN1c3RvbWVy4oCZcyB1c2Ugb2YgdGhlIFNvZnR3YXJlICh0b2dldGhlciwg4oCcQ3VzdG9tZXIgRGF0YeKAnSkuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBDdXN0b21lciBoZXJlYnkgZ3JhbnRzIHRvIFRhbmdvIEV5ZSBhIG5vbi1leGNsdXNpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkd2lkZSwgZnVsbHkgcGFpZCB1cCBhbmQgcm95YWx0eSBmcmVlIHJpZ2h0IGFuZCBsaWNlbnNlIHRvIHVzZSB0aGUgR2VuZXJhdGVkIERhdGEgZm9yIChpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlzaW9uIG9mIFNlcnZpY2VzIGFuZCBmdWxmaWxsbWVudCBvZiBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGFuZDsgKGlpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbXByb3ZpbmcgdGhlIFNvZnR3YXJlLsKgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIEN1c3RvbWVyIGhlcmVieSBncmFudHMgdG8gVGFuZ28gRXllIGEgbm9uLWV4Y2x1c2l2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd29ybGR3aWRlLCBmdWxseSBwYWlkIHVwIGFuZCByb3lhbHR5IGZyZWUgcmlnaHQgYW5kIGxpY2Vuc2UgdG8gdXNlIHRoZSBCdXNpbmVzcyBEYXRhIGZvciAoaSkgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3Zpc2lvbiBvZiBTZXJ2aWNlcyBhbmQgZnVsZmlsbG1lbnQgb2Ygb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtczsgYW5kIChpaSkgaW1wcm92aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTb2Z0d2FyZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5DdXN0b21lciBhZ3JlZXMgdG8gcHJvdmlkZSBjb21tZW50cyBvciBmZWVkYmFjaywgaWYgYW55LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0byBUYW5nbyBFeWUgcmVnYXJkaW5nIHRoZSBTb2Z0d2FyZSBvciBmdXR1cmUgcmVsZWFzZXMvIGRldmVsb3BtZW50IHRvIHRoZSBTb2Z0d2FyZSBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIG9mIHRoZSB3b3JrIGNhcnJpZWQgb3V0IGR1cmluZyB0aGlzIGVuZ2FnZW1lbnQgd2l0aCB0aGUgQ3VzdG9tZXIgb3IgYW55IGFuZCBhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAga25vd2xlZGdlIGFuZCBpbmZvcm1hdGlvbiBvZiBnZW5lcmljIG5hdHVyZSwgYXJpc2luZyBvdXQgb2YgdXNlIG9mIHRoZSBTb2Z0d2FyZSBieSB0aGUgQ3VzdG9tZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgZGlzY2xvc2luZyBhbnkgQ3VzdG9tZXIgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIG9yIEN1c3RvbWVyIERhdGEuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIEN1c3RvbWVyIHVuZGVydGFrZXMgdG8gcHJvbXB0bHkgaW5mb3JtIFRhbmdvIEV5ZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnkgaW5mcmluZ2VtZW50IG9mIFRhbmdvIEV5ZSBJUCByaWdodHMgYnkgdGhpcmQgcGFydGllcywgYW5kIHNoYWxsIHBlcm1pdCBUYW5nbyBFeWUgdG8gYXNzdW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvbGUgYXV0aG9yaXR5IHRvIHRha2UgYXBwcm9wcmlhdGUgbGVnYWwgYWN0aW9uLiBDdXN0b21lciBzaGFsbCBub3QgbWFrZSBhbnkgc3RhdGVtZW50IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbiBpbiByZWxhdGlvbiB0byBzdWNoIGNsYWltIHdoaWNoIG1heSBwcmVqdWRpY2lhbGx5IGFmZmVjdCB0aGUgY2hhbmNlcyBvZiBzZXR0bGVtZW50IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVuc2Ugb2Ygc3VjaCBjbGFpbSwgYW5kIHNoYWxsIHByb3ZpZGUgaW5mb3JtYXRpb24gYW5kIGFzc2lzdGFuY2UgcmVhc29uYWJseSByZXF1ZXN0ZWQgaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiB3aXRoIHN1Y2ggY2xhaW0gb3Igc3VpdC48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgaGVyZWJ5IHVuZGVydGFrZXMsIGluIHRoZSBldmVudCB0aGF0IHRoaXJkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpZXMgYWN0IGFnYWluc3QgdGhlIEN1c3RvbWVyIGZvciBhbnkgcmVhc29uIHdoYXRzb2V2ZXIgaW4gcmVsYXRpb24gdG8gdGhlIFNvZnR3YXJlIG9yIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYW5nbyBFeWUgSVAsIHRvIHByb3ZpZGUgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlaXIgcG9zc2Vzc2lvbiBhbmQgb3RoZXJ3aXNlIGRvIGFuZCBleGVjdXRlIGFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RzLCB0aGluZ3MsIG1hdHRlcnMgYW5kIGRlZWRzIGFzIG1heSBiZSByZWFzb25hYmx5IHJlcXVpcmVkIGJ5IHRoZSBDdXN0b21lciwgZnJvbSB0aW1lIHRvIHRpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG8gc2hvdyBvd25lcnNoaXAgb2Ygc3VjaCBUYW5nbyBFeWUgSVAuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkN1c3RvbWVyIGhlcmVieSBjb25zZW50cyBhbmQgb3B0cyBpbiB0byByZWNlaXZlIGNvbW11bmljYXRpb25zIHRoYXQgVGFuZ28gRXllIG1heSBzZW5kIHZpYSBjYWxsIG9yIG1lc3NhZ2Ugc2VydmljZSByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCwgdG8gQ3VzdG9tZXIgaW5jbHVkaW5nIGl0cyBlbXBsb3llZXMsIHN0YWZmIGFuZCBvdGhlciByZXByZXNlbnRhdGl2ZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjkuIERhdGEgUHJvdGVjdGlvbiBhbmQgUHJpdmFjeSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+RWFjaCBQYXJ0eSBzaGFsbCBhdCBhbGwgdGltZXMgY29tcGx5IHdpdGggaXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ibGlnYXRpb25zIHVuZGVyIGFwcGxpY2FibGUgcHJpdmFjeSByZWd1bGF0aW9ucyBpbiByZWxhdGlvbiB0byB0aGUgR2VuZXJhdGVkIERhdGEsIEJ1c2luZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEsIGFuZCBDdXN0b21lciBEYXRhIHRoYXQgaXMgY29sbGVjdGVkLCBzdG9yZWQgYW5kL29yIHByb2Nlc3NlZCBieSBpdCBpbiB0aGUgY291cnNlIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1pbmcgaXRzIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMuIEZ1cnRoZXIgZWFjaCBQYXJ0eSBzaGFsbCBwcm9jZXNzIHN1Y2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIERhdGEsIEJ1c2luZXNzIERhdGEsIGFuZCBDdXN0b21lciBEYXRhIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgZm9yIHRoZSBwdXJwb3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiBwZXJmb3JtaW5nIHRoZWlyIHJlc3BlY3RpdmUgb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5FYWNoIHBhcnR5IHNoYWxsIHRha2UgYXBwcm9wcmlhdGUgdGVjaG5pY2FsIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25hbCBtZWFzdXJlcyBhcyByZXF1aXJlZCB1bmRlciBhcHBsaWNhYmxlIGxhdyBhZ2FpbnN0IGFueSBkYXRhIGJyZWFjaCwgdW5hdXRob3JpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIHVubGF3ZnVsIHByb2Nlc3Npbmcgb2YgdGhlIHBlcnNvbmFsIGRhdGEgb3IgaXRzIGFjY2lkZW50YWwgbG9zcywgZGVzdHJ1Y3Rpb24gb3IgZGFtYWdlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xMC4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVycyA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+RWFjaCBQYXJ0eSByZXByZXNlbnRzLCB3YXJyYW50cyBhbmQgY292ZW5hbnRzIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGF0OiAoaSkgaXQgaXMgZHVseSBvcmdhbml6ZWQgYW5kIHZhbGlkbHkgZXhpc3RpbmcgYW5kIGluIGdvb2Qgc3RhbmRpbmcgdW5kZXIgdGhlIGxhd3Mgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YXRlIG9mIGl0cyBpbmNvcnBvcmF0aW9uIG9yIGZvcm1hdGlvbjsgKGlpKSBpdCBoYXMgdGhlIGZ1bGwgcmlnaHQgYW5kIGF1dGhvcml0eSB0byBlbnRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZXNlIFNhYVMgVGVybXMgYW5kIHRoYXQgdGhlc2UgU2FhUyBUZXJtcyBjb25zdGl0dXRlcyBhIGxlZ2FsLCB2YWxpZCBhbmQgYmluZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmxpZ2F0aW9uOyAoaWlpKSB0aGUgZXhlY3V0aW9uLCBkZWxpdmVyeSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlc2UgU2FhUyBUZXJtcyBkb2VzIG5vdCBhbmQgd2lsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3QgY29uZmxpY3Qgd2l0aCwgb3IgY29uc3RpdHV0ZSBhIGJyZWFjaCBvciBkZWZhdWx0IHVuZGVyLCBpdHMgY2hhcnRlciBvZiBvcmdhbml6YXRpb24sIG9yIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cmFjdCBvciBvdGhlciBpbnN0cnVtZW50IHRvIHdoaWNoIGl0IGlzIGEgcGFydHk7IChpdikgaXQgd2lsbCBjb21wbHkgd2l0aCwgYW5kIHdpbGwgZW5zdXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBvZiBpdHMgcGVyc29ubmVsLCB0aGlyZCBwYXJ0eSBhZ2VudHMsIGNvbnN1bHRhbnRzIGV0Yy4sIGNvbXBseSB3aXRoIGFsbCBsYXdzIGFuZCByZWd1bGF0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIHRvIChpKSB0aGUgcHJvdmlzaW9uLCBvciBhY2Nlc3MgYW5kIHVzZSBvZiB0aGUgU29mdHdhcmU7IGFuZCAoaWkpIHBlcmZvcm1hbmNlIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gbGF3cyBhbmQgcmVndWxhdGlvbnMgcmVsYXRlZCB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcml2YWN5LCBkYXRhIHByb3RlY3Rpb24sIGVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbnMsIGV4cG9ydCBhbmQgY29uZmlkZW50aWFsaXR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSByZXByZXNlbnRzLCB3YXJyYW50cyBhbmQgY292ZW5hbnRzIHRoYXQgKGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIEV5ZSBwZXJzb25uZWwgc2hhbGwgcHJvdmlkZSB0aGUgU2VydmljZXMgaW4gYSBkaWxpZ2VudCBhbmQgcHJvZmVzc2lvbmFsIG1hbm5lciB3aXRoIGR1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJlIChpaSkgVGFuZ28gRXllIElQIGRvZXMgbm90IGFuZCB3aWxsIG5vdCBpbmZyaW5nZSwgbWlzYXBwcm9wcmlhdGUgb3Igb3RoZXJ3aXNlIHZpb2xhdGUgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IHBhcnR5IHdpdGhpbiB0aGUgdGVycml0b3J5IG9mIEluZGlhIGFuZCBvciBhbnkgb3RoZXIgY291bnRyeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpdHMgcmlnaHN0IGFyZSByZWdpc3RlcmVkOyBhbmQgKGlpaSkgYWxsIFNlcnZpY2VzIHRoYXQgYXJlIHByb3ZpZGVkIHdpbGwgYmUgZnJlZSBmcm9tIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrbm93biBtYWxpY2lvdXMgY29kZSBvciBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgaW50ZW50aW9uYWxseSBkaXNydXB0LCBkYW1hZ2Ugb3IgaW50ZXJmZXJlIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW55IHVzZSBieSBDdXN0b21lci4gVGFuZ28gRXllIGZ1cnRoZXIgd2FycmFudHMgYW5kIHJlcHJlc2VudHMgdG8gdGhlIEN1c3RvbWVyIHRoYXQgaXQgaG9sZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3aWxsIGNvbnRpbnVlIHRvIGhvbGQsIGFueSBhbmQgYWxsIGxpY2Vuc2VzLCBwZXJtaXRzIG9yIG90aGVyIGF1dGhvcml6YXRpb25zIHJlcXVpcmVkIGJ5IGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIGxhdyB0byBwZXJmb3JtIHRoZSBTZXJ2aWNlcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlc2UgU2FhUyBUZXJtcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+PHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxBcHBsaWNhYmxlIGxhd+KAnTwvc3Bhbj4gbWVhbnMgYW55IGFwcGxpY2FibGUgbGF3LCBzdGF0dXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlLCByZWd1bGF0aW9uLCBvcmRpbmFuY2UsIHJlcXVpcmVtZW50LCBkaXJlY3Rpb25zLCBndWlkZWxpbmVzLCBhbm5vdW5jZW1lbnQgb3Igb3RoZXIgYmluZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gb3IgcmVxdWlyZW1lbnQgb2YgYW55IGdvdmVybm1lbnQgb3IgcXVhc2kgZ292ZXJubWVudDsgZGVwYXJ0bWVudCwgYWdlbmN5IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhbGl0eSBvZiBhbnkgZ292ZXJubWVudCB0aGVyZW9mLCBhbnkgY291cnQgb3IgYXJiaXRyYWwgdHJpYnVuYWwgYXBwbGljYWJsZSBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgdW5kZXIgdGhlIHJlcHVibGljIG9mIEluZGlhLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5USEUgU09GVFdBUkUgQU5EIEFOWVRISU5HIFBST1ZJREVEIElOIENPTk5FQ1RJT04gV0lUSFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUSEVTRSBTYWFTIFRFUk1TIEFSRSBQUk9WSURFRCDigJxBUy1JU+KAnS4gRVhDRVBUIEZPUiBUSEUgRVhQUkVTUyBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMgSU5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVEhJUyBTRUNUSU9OIDYsIFRBTkdPIEVZRSBET0VTIE5PVCBNQUtFIEFOWSBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUywgSU1QTElFRCBPUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTVEFUVVRPUlkgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgUVVBTElUWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFNZU1RFTSBJTlRFR1JBVElPTiwgRVJST1ItRlJFRSwgVU4tSU5URVJSVVBUSU9OLCBTVVBQT1JUXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENPUlJFQ1RJT04gT1IgUkVQQUlSIChVTkxFU1MgT1RIRVJXSVNFIEFHUkVFRCkgT1IgT1RIRVJXSVNFIFRIQVQgVEFOR08gRVlFIFNPRlRXQVJFIEhFUkVVTkRFUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXSUxMIE9QRVJBVEUgSU4gRVZFUlkgQ09NQklOQVRJT04gT1IgRU5WSVJPTk1FTlQgREVTSVJFRCBCWSBDVVNUT01FUiBXSVRIIEFOWSBEQVRBLCBERVZJQ0VTLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDT01QVVRFUiBTWVNURU1TIEFORCBQUk9HUkFNUyBPRiBJVFMgQ0hPSUNFIE9SIFRIQVQgVEhFIFJFTUVEWUlORyBPRiBPTkUgUFJPR1JBTSBFUlJPUiBET0VTIE5PVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQgSU4gVEhFIE9DQ1VSUkVOQ0UgT0YgT1RIRVIgUFJPR1JBTSBFUlJPUlMuIEFMTCBTVUNIIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUyBBUkVcclxuICAgICAgICAgICAgICAgICAgICAgICAgSEVSRUJZIERJU0NMQUlNRUQuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBDdXN0b21lciB3YXJyYW50cyB0aGF0OiA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj4gYS4gQ3VzdG9tZXIgRGF0YSBkb2VzIG5vdCBhbmQgd2lsbCBub3QgaW5mcmluZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pc2FwcHJvcHJpYXRlIG9yIG90aGVyd2lzZSB2aW9sYXRlIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSB0aGlyZCBwYXJ0eTs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+Yi4gaXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgYW55IHNlY3VyaXR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZ1bG5lcmFiaWxpdGllcyBhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiBzdWNoIHZ1bG5lcmFiaWxpdGllcyBhcmlzaW5nIHNvbGVseSBmcm9tIHRoZSBuYXR1cmUgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgRGF0YTs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+IGMuIGl0IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IEVuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VycyBjb21wbHkgd2l0aCBhbGwgcmVxdWlyZW1lbnRzIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgaW4gcmVsYXRpb24gdG8gdGhlIHVzZSBvZiB0aGUgU29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSk7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPiBkLiBpdCBzaGFsbCBpbW1lZGlhdGVseSBub3RpZnkgVGFuZ28gRXllIG9mIChhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnkgYWNjb3VudC1yZWxhdGVkIGFidXNlOyAoYikgdGhlIHVuYXV0aG9yaXplZCBkaXNjbG9zdXJlLCB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGVpclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50IGNyZWRlbnRpYWxzIGJ5IG9yIHRvIGFueSB0aGlyZCBwYXJ0eTsgYW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPiBlLiBpdCBzaGFsbCBub3QsIGFuZCBzaGFsbCBub3QgcGVybWl0IGFueSBwYXJ0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBwZXJzb24gdG8sIGFjY2VzcyBvciB1c2UgdGhlIFNvZnR3YXJlIGV4Y2VwdCBhcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5IHRoZXNlIFNhYVMgVEVSTVMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgbGltaXRpbmcgdGhlIGdlbmVyYWxpdHkgb2YgdGhlIGZvcmVnb2luZywgQ3VzdG9tZXIgc2hhbGwgbm90LCBhbmQgc2hhbGwgbm90IHBlcm1pdCBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHkgb3IgcGVyc29uIHRvOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTEwXCI+IDEuIGludGVyZmVyZSB3aXRoIG9yIGRpc3J1cHQgdGhlIGludGVncml0eSBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUsIG9yIGNpcmN1bXZlbnQsIGJ5cGFzcywgZGVsZXRlIG9yIHJlbW92ZSBhbnkgZm9ybSBvZiBwcm90ZWN0aW9uLCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSwgZnVuY3Rpb25hbGl0eSBvciB0ZWNobmljYWwgcmVzdHJpY3Rpb25zIG9yIGxpbWl0YXRpb25zLCBvciB0byBlbmFibGUgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBieSBUYW5nbyBFeWUsIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgU29mdHdhcmU7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtMTBcIj4gMi4gYWNjZXNzIG9yIHVzZSB0aGUgU29mdHdhcmUgcHJvdmlkZWQgdW5kZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgU2FhUyBUZXJtcywgaW4gYW55IG1hbm5lciBvciBmb3IgYW55IHB1cnBvc2UgdGhhdCB2aW9sYXRlcyBhbnkgYXBwbGljYWJsZSBsYXcsIHRoZSByaWdodHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Ygb3RoZXJzLCBpbiBhIHdheSB0aGF0IGNvdWxkIGhhcm0gdGhlIHNlcnZpY2UuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtMTBcIj4zLiByZXZlcnNlIGVuZ2luZWVyLCBkaXNhc3NlbWJsZSwgZGUtY29tcGlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjcmVhdGUsIGNvcHkgb3IgcmVwcm9kdWNlIHRoZSBzb3VyY2UgY29kZSBvciBvYmplY3QgY29kZSBvZiB0aGUgU29mdHdhcmUgb3IgcGVyZm9ybSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgKHdpdGhvdXQgVGFuZ28gRXll4oCZcyBwcmlvciB3cml0dGVuIGNvbnNlbnQpOyBhbmQ8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xMS4gQ3VzdG9tZXLigJlzIEFjY291bnQgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJzIGFyZSBmdWxseSByZXNwb25zaWJsZSB0byBzYWZlZ3VhcmQgdGhlaXIgYWNjZXNzIGNyZWRlbnRpYWxzIC0gaW5jbHVkaW5nIGluIHRoZSBzZW5zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY29tYmluYXRpb24gb2YgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTIuIER1cmF0aW9uLCBSZW5ld2FsIGFuZCBUZXJtaW5hdGlvbiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgcHJvcG9zYWwsIHRoZXNlIFNhYVMgVGVybXMgc2hhbGwgY29udGludWUgdG8gYmUgZWZmZWN0aXZlIGR1cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIHBlcmlvZFxyXG4gICAgICAgICAgICAgICAgICAgIHRoZSBDdXN0b21lciB1c2VzIGFuZCBvciBjb250aW51ZXMgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHRlcm1pbmF0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1zIHNldFxyXG4gICAgICAgICAgICAgICAgICAgIG91dFxyXG4gICAgICAgICAgICAgICAgICAgIGhlcmVpbi5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGluIHRoZSBPcmRlciBGb3JtLCBmZWVzIHNoYWxsIGJlIHN1YmplY3QgdG8gYXV0b21hdGljIGluY3JlbWVudCBhdCB0aGUgcmF0ZSBvZiA3JSBwZXIgYW5udW0gYWZ0ZXIgZXZlcnkgMTIgbW9udGhzLlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWl0aGVyIHBhcnR5IG1heSB0ZXJtaW5hdGUgdGhlaXIgYnVzaW5lc3MgcmVsYXRpb25zaGlwIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgaW1tZWRpYXRlbHkgdXBvbiBhXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxcclxuICAgICAgICAgICAgICAgICAgICBicmVhY2ggYnkgdGhlIG90aGVyIHBhcnR5IHRoYXQgaGFzIG5vdCBiZWVuIGN1cmVkIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjaFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFjaC5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWl0aGVyIHBhcnR5IG1heSBhbHNvIHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCB1cG9uIHRoaXJ0eSAoMzApIGRheXMgd3JpdHRlbiBub3RpY2Ugd2l0aG91dFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbmluZyBhbnlcclxuICAgICAgICAgICAgICAgICAgICByZWFzb24uIEN1c3RvbWVyIHdpbGwgcGF5IGluIGZ1bGwgZm9yIHRoZSBTb2Z0d2FyZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsYXN0IGRheSBvbiB3aGljaCB0aGVcclxuICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgIHdhcyB1c2VkLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFZmZlY3Qgb2YgVGVybWluYXRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYSkgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLCBUYW5nbyBFeWUgc2hhbGwgaW1tZWRpYXRlbHkgY2Vhc2UgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgU29mdHdhcmUuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYikgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLCBUYW5nbyBFeWUgbWF5IGRlbGV0ZSB0aGUgR2VuZXJhdGVkIERhdGEsIEJ1c2luZXNzIERhdGEgYW5kIEN1c3RvbWVyIERhdGEgY29sbGVjdGVkLCBzdG9yZWQgYW5kL29yIHByb2Nlc3NlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGZvciB0aGUgcHVycG9zZSBvZiBwcm92aWRpbmcgdGhlIFNvZnR3YXJlIHdpdGhpbiAxNSAoZmlmdGVlbikgZGF5cyBvZiByZWNlaXB0IG9mIG5vdGljZSBvZiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGMpIElmIFRhbmdvIEV5ZSB0ZXJtaW5hdGVzIHRoZXNlIFNhYVMgVGVybXMgZHVlIHRvIGEgYnJlYWNoIGJ5IEN1c3RvbWVyIG9mIGFueSBvZiB0aGUgcHJvdmlzaW9ucyBjb250YWluZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcywgdGhlbiBDdXN0b21lciBzaGFsbCBpbW1lZGlhdGVseSBwYXkgdG8gVGFuZ28gRXllIGFsbCBhbW91bnRzIHRoZW4gZHVlIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMuIElmIEN1c3RvbWVyIHRlcm1pbmF0ZXMgdGhlc2UgU2FhUyBUZXJtcyBkdWUgdG8gYSBicmVhY2ggYnkgVGFuZ28gRXllLCB0aGVuIFRhbmdvIEV5ZSBzaGFsbCBpbW1lZGlhdGVseSByZXBheSB0byBDdXN0b21lciBhbGwgcHJlLXBhaWQgYW1vdW50cyBmb3IgYW55IHVucGVyZm9ybWVkIFNlcnZpY2VzIHNjaGVkdWxlZCB0byBiZSBkZWxpdmVyZWQgYWZ0ZXIgdGhlIHRlcm1pbmF0aW9uIGRhdGUuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZCkgU3ViamVjdCB0byB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcywgdXBvbiBpdHMgdGVybWluYXRpb24gYW5kIHVwb24gc3Vic2VxdWVudCB3cml0dGVuIHJlcXVlc3QgYnkgdGhlIERpc2Nsb3NpbmcgUGFydHksIHRoZSBSZWNlaXZpbmcgUGFydHkgb2YgdGFuZ2libGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHNoYWxsIGltbWVkaWF0ZWx5IHJldHVybiBzdWNoIGluZm9ybWF0aW9uIG9yIGRlc3Ryb3kgc3VjaCBpbmZvcm1hdGlvbiBhbmQgcHJvdmlkZSB3cml0dGVuIGNlcnRpZmljYXRpb24gb2Ygc3VjaCBkZXN0cnVjdGlvbiwgcHJvdmlkZWQgdGhhdCB0aGUgcmVjZWl2aW5nIHBhcnR5IG1heSBwZXJtaXQgaXRzIGxlZ2FsIGNvdW5zZWwgdG8gcmV0YWluIG9uZSBhcmNoaXZhbCBjb3B5IG9mIHN1Y2ggaW5mb3JtYXRpb24gaW4gdGhlIGV2ZW50IG9mIGEgc3Vic2VxdWVudCBkaXNwdXRlIGJldHdlZW4gdGhlIHBhcnRpZXMuXHJcblRoZSBwcm92aXNpb25zIHJlbGF0aW5nIHRvIGNvbmZpZGVudGlhbGl0eSwgYXMgd2VsbCBhcyBmb3IgbGlhYmlsaXR5LCBhcHBsaWNhYmxlIGxhdyBhbmQgc2V0dGxlbWVudCBvZiBkaXNwdXRlcyBzaGFsbCBzdXJ2aXZlIHRoZSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRlcm1pbmF0aW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvciBvYmxpZ2F0aW9ucyBvZiB0aGUgcGFydGllcyBpbmN1cnJlZCBwcmlvciB0byB0aGUgZGF0ZSBvZiB0ZXJtaW5hdGlvbiwgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgYmV0d2VlbiB0aGUgcGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEzLiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFVwb24gdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcywgVGFuZ28gRXllIHNoYWxsIGltbWVkaWF0ZWx5IGNlYXNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFVwb24gdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcywgVGFuZ28gRXllIHNoYWxsIGRlbGV0ZSB0aGUgR2VuZXJhdGVkIERhdGEsIEJ1c2luZXNzIERhdGEgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgRGF0YVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3RlZCwgc3RvcmVkIGFuZC9vciBwcm9jZXNzZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJvdmlkaW5nIHRoZSBTb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgIHdpdGhpbiAxNVxyXG4gICAgICAgICAgICAgICAgICAgIChmaWZ0ZWVuKSBkYXlzIG9mIHJlY2VpcHQgb2Ygbm90aWNlIG9mIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIElmIFRhbmdvIEV5ZSB0ZXJtaW5hdGVzIHRoZXNlIFNhYVMgVGVybXMgZHVlIHRvIGEgYnJlYWNoIGJ5IEN1c3RvbWVyIG9mIGFueSBvZiB0aGUgcHJvdmlzaW9uc1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCB1bmRlciB0aGVzZVxyXG4gICAgICAgICAgICAgICAgICAgIFNhYVMgVGVybXMsIHRoZW4gQ3VzdG9tZXIgc2hhbGwgaW1tZWRpYXRlbHkgcGF5IHRvIFRhbmdvIEV5ZSBhbGwgYW1vdW50cyB0aGVuIGR1ZSB1bmRlciB0aGVzZSBTYWFTXHJcbiAgICAgICAgICAgICAgICAgICAgVGVybXMuIElmXHJcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgdGVybWluYXRlcyB0aGVzZSBTYWFTIFRlcm1zIGR1ZSB0byBhIGJyZWFjaCBieSBUYW5nbyBFeWUsIHRoZW4gVGFuZ28gRXllIHNoYWxsIGltbWVkaWF0ZWx5XHJcbiAgICAgICAgICAgICAgICAgICAgcmVwYXkgdG9cclxuICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBhbGwgcHJlLXBhaWQgYW1vdW50cyBmb3IgYW55IHVucGVyZm9ybWVkIFNlcnZpY2VzIHNjaGVkdWxlZCB0byBiZSBkZWxpdmVyZWQgYWZ0ZXIgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYXRpb24gZGF0ZS5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCB0byB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcywgdXBvbiBpdHMgdGVybWluYXRpb24gYW5kIHVwb24gc3Vic2VxdWVudFxyXG4gICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4gcmVxdWVzdCBieVxyXG4gICAgICAgICAgICAgICAgICAgIHRoZSBEaXNjbG9zaW5nIFBhcnR5LCB0aGUgUmVjZWl2aW5nIFBhcnR5IG9mIHRhbmdpYmxlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBzaGFsbCBpbW1lZGlhdGVseVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWNoXHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb3IgZGVzdHJveSBzdWNoIGluZm9ybWF0aW9uIGFuZCBwcm92aWRlIHdyaXR0ZW4gY2VydGlmaWNhdGlvbiBvZiBzdWNoIGRlc3RydWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHRoYXQgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjZWl2aW5nIHBhcnR5IG1heSBwZXJtaXQgaXRzIGxlZ2FsIGNvdW5zZWwgdG8gcmV0YWluIG9uZSBhcmNoaXZhbCBjb3B5IG9mIHN1Y2ggaW5mb3JtYXRpb24gaW4gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQgb2YgYVxyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgZGlzcHV0ZSBiZXR3ZWVuIHRoZSBwYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdmlzaW9ucyByZWxhdGluZyB0byBjb25maWRlbnRpYWxpdHksIGFzIHdlbGwgYXMgZm9yIGxpYWJpbGl0eSwgYXBwbGljYWJsZSBsYXcgYW5kIHNldHRsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICBvZiBkaXNwdXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYWxsIHN1cnZpdmUgdGhlIGV4cGlyYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVGVybWluYXRpb24gc2hhbGwgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9yIG9ibGlnYXRpb25zIG9mIHRoZSBwYXJ0aWVzIGluY3VycmVkIHByaW9yIHRvIHRoZSBkYXRlIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgYmV0d2VlbiB0aGUgcGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xMy4gQWNjZXNzIHRvIEFuYWx5dGljcyB2aWEgV2ViIFBvcnRhbCAmIEV4Y2VsIFJlcG9ydHM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIGFuYWx5dGljcyBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYSkgd2ViLWJhc2VkXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24sIGIpIGV4Y2VsIHJlcG9ydHMgc2VudCB2aWEgZW1haWwgb3IgRmlsZSBUcmFuc2ZlciBQcm90b2NvbC5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VHJhaW5pbmc6IEFsbCDigJxTb2Z0d2FyZeKAnSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCB0aGVcclxuICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcy4gRm9yIGF2b2lkYW5jZSBvZiBkb3VidCwgaXQgaXMgY2xhcmlmaWVkIHRoYXQgVGFuZ28gRXllIGFncmVlcyB0byBwcm92aWRlIHNhbXBsZSBkYXNoYm9hcmRcclxuICAgICAgICAgICAgICAgICAgICBhbmQgYXJyYW5nZSBmb3IgdHJhaW5pbmcgc2Vzc2lvbnMgdG8gdGhlIEN1c3RvbWVyIGFzIG11dHVhbGx5IGFncmVlZCBieSB0aGUgUGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+IC0tPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xNC4gVHJhaW5pbmcgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkFsbCDigJxTb2Z0d2FyZeKAnSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgU2VydmljZXMuIEZvciBhdm9pZGFuY2Ugb2YgZG91YnQsIGl0IGlzIGNsYXJpZmllZCB0aGF0IFRhbmdvIEV5ZSBhZ3JlZXMgdG8gcHJvdmlkZSBhIHNhbXBsZSBkYXNoYm9hcmQgYW5kIGFycmFuZ2UgZm9yIHRyYWluaW5nIHNlc3Npb25zIHRvIHRoZSBDdXN0b21lciBhcyBtdXR1YWxseSBhZ3JlZWQgYnkgdGhlIFBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTUuIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5BbGwgcHJvcHJpZXRhcnkgb3IgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uLCB0ZWNobmljYWwgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBvciBrbm93LWhvdyBhbmQgYWxsIG90aGVyIG5vbi1wdWJsaWMgaW5mb3JtYXRpb24sIG1hdGVyaWFsIG9yIGRhdGEgaW4gd2hhdGV2ZXIgZm9ybSBvciBtb2RlIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbXVuaWNhdGlvbiwgd2hpY2ggaXMgZGlzY2xvc2VkIGJ5IGEgcGFydHkgKOKAnERpc2Nsb3NpbmcgUGFydHnigJ0pIHRvIHRoZSBvdGhlciBwYXJ0eSAo4oCcUmVjZWl2aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgUGFydHnigJ0pIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgU29mdHdhcmUgYWNjZXNzIGFuZCB1c2FnZSB3aGV0aGVyIG1hcmtlZCBhcyDigJxjb25maWRlbnRpYWzigJ0gb3Igbm90IGF0XHJcbiAgICAgICAgICAgICAgICAgICAgdGhlIHRpbWUgb2YgZGlzY2xvc3VyZSwgc2hhbGwgYmUgdHJlYXRlZCBhcyDigJxDb25maWRlbnRpYWwgSW5mb3JtYXRpb27igJ0uIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWxsIGluY2x1ZGUsIGJ1dCBub3QgYmUgbGltaXRlZCB0bywgdGhlIHRlcm1zIGFuZCBwcmljaW5nL2NvbW1lcmNpYWwgdGVybXMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyxcclxuICAgICAgICAgICAgICAgICAgICB0aGUgdGVjaG5pY2FsIGFuZCBvdGhlciBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgU29mdHdhcmUsIGFueSBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgc29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIGNvZGVzIGFuZCBjb250ZW50IGFzIHdlbGwgYXMgdGhlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgYW5kIGNvbXBvbmVudHMsIGFuZCBhbGxcclxuICAgICAgICAgICAgICAgICAgICBvdGhlciBub24tcHVibGljIGluZm9ybWF0aW9uLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgUmVjZWl2aW5nIFBhcnR5IHVuZGVydGFrZXM6IChpKSBub3QgdG8gdXNlIENvbmZpZGVudGlhbFxyXG4gICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIG90aGVyd2lzZSB0aGFuIGZvciB0aGUgcHVycG9zZSBmb3Igd2hpY2ggaXQgd2FzIGRpc2Nsb3NlZCBvciB0byBwZXJtaXQgdGhlIFJlY2VpdmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcnR5IHRvIGV4ZXJjaXNlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIDsgKGlpKSBub3QgdG8gZGlzY2xvc2VcclxuICAgICAgICAgICAgICAgICAgICBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSBEaXNjbG9zaW5nIFBhcnR5LCBvdGhlciB0aGFuIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgdGhvc2UgZW1wbG95ZWVzLCBhZ2VudHMsIGNvbnRyYWN0b3JzLCBzdWJjb250cmFjdG9ycywgbGljZW5zZWVzIG9mIHRoZSBSZWNlaXZpbmcgUGFydHksIGl0c1xyXG4gICAgICAgICAgICAgICAgICAgIEFmZmlsaWF0ZXMgb3IgYW55IG90aGVyIHBhcnRpZXMgd2hvIGhhdmUgYSBuZWVkIHRvIGtub3cgaXQgaW4gb3JkZXIgdG8gYXNzaXN0IHRoZSBSZWNlaXZpbmcgUGFydHkgaW5cclxuICAgICAgICAgICAgICAgICAgICBwZXJmb3JtaW5nIGl0cyBvYmxpZ2F0aW9ucywgb3IgdG8gcGVybWl0IHRoZSBSZWNlaXZpbmcgUGFydHkgdG8gZXhlcmNpc2UgaXRzIHJpZ2h0c8KgIGFuZCBsaWNlbnNlc1xyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVyIHRoaXMgQWdyZWVtZW50OyAoaWlpKSB0byB0YWtlIGFsbCBzdWNoIHN0ZXBzIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGFjY2VzcyB0byB0aGUgRGlzY2xvc2luZ1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcnR54oCZcyBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24sIGFzIGl0IHRha2VzIHRvIHByb3RlY3QgaXRzIG93biBjb25maWRlbnRpYWwgb3IgcHJvcHJpZXRhcnlcclxuICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvZiBhIHNpbWlsYXIgbmF0dXJlLCB3aGljaCBzdGVwcyBzaGFsbCBpbiBubyBldmVudCBiZSBsZXNzIHRoYW4gYSByZWFzb25hYmxlIHN0YW5kYXJkIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZTsgYW5kIGl2KSB0byByZXR1cm4gdG8gdGhlIEN1c3RvbWVyLCBvciBkZXN0cm95LCBvbiByZXF1ZXN0IGFsbCBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gdGhhdFxyXG4gICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIGRpc2Nsb3NlZCB0byB0aGVtLCBpbmNsdWRpbmcgYWxsIGNvcGllcyB0aGVyZW9mIGFuZCB0byBkZWxldGUgYWxsIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBhXHJcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1yZWFkYWJsZSBmb3JtIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FsbHkgcG9zc2libGUsIHN1YmplY3QgdG8gYW55IHJpZ2h0cyBvciBsaWNlbnNlcyBncmFudGVkXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyAuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBvYmxpZ2F0aW9ucyBpbiByZWxhdGlvbiB0byBDb25maWRlbnRpYWwgSW5mb3JtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB1bmRlciB0aGVzZSBTYWFTIFRlcm1zwqAgc2hhbGwgbm90IGFwcGx5IHRvIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiwgd2hpY2ggKGkpIGhhcyBiZWNvbWUgb3IgYmVjb21lc1xyXG4gICAgICAgICAgICAgICAgICAgIHB1YmxpY2x5IGF2YWlsYWJsZSBieSBtZWFucyBvdGhlciB0aGFuIGEgYnJlYWNoIG9mIGNvbmZpZGVudGlhbGl0eSBvYmxpZ2F0aW9uczsgKGlpKSB3YXMgYWxyZWFkeVxyXG4gICAgICAgICAgICAgICAgICAgIGtub3duIHRvIHRoZSBSZWNlaXZpbmcgUGFydHkgcHJpb3IgdG8gZGlzY2xvc3VyZTsgKGlpaSkgdGhlIFJlY2VpdmluZyBQYXJ0eSBpcyByZXF1aXJlZCB0byBkaXNjbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIGFwcGxpY2FibGUgbGF3cyBvciByZWd1bGF0aW9ucyBvciB3aXRoIGEgY291cnQgb3IgYWRtaW5pc3RyYXRpdmUgb3JkZXI7IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgKGl2KSBpcyBpbmRlcGVuZGVudGx5IGRldmVsb3BlZCBieSB0aGUgUmVjZWl2aW5nIFBhcnR5IHdpdGhvdXQgcmVmZXJlbmNlIHRvIG9yIHVzZSBvZiBhbnlcclxuICAgICAgICAgICAgICAgICAgICBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gb2YgdGhlIERpc2Nsb3NpbmcgUGFydHkuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBSZWNlaXZpbmcgUGFydHkgc2hhbGwgcHJvbXB0bHksIGFuZCBpbiBhbnkgY2FzZSB3aXRoaW5cclxuICAgICAgICAgICAgICAgICAgICB0aHJlZSAoMykgZGF5cyBhZHZpc2UgdGhlIERpc2Nsb3NpbmcgUGFydHkgaW4gd3JpdGluZyBvZiBhbnkgdW5hdXRob3JpemVkIGRpc2Nsb3N1cmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWlzYXBwcm9wcmlhdGlvbiBvciBtaXN1c2Ugb2YgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGFmdGVyIGl0IGJlY29tZXMgYXdhcmUgb2YgaXQgYW5kIHZpY2UgdmVyc2EuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPklmIGVpdGhlciBwYXJ0eSBiZWNvbWVzIGF3YXJlIHRoYXQgaXQgd2lsbCBiZSByZXF1aXJlZCwgb3JcclxuICAgICAgICAgICAgICAgICAgICBpcyBsaWtlbHkgdG8gYmUgcmVxdWlyZWQsIHRvIGRpc2Nsb3NlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBpbiBvcmRlciB0byBjb21wbHkgd2l0aCBhcHBsaWNhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgbGF3cyBvciByZWd1bGF0aW9ucyBvciB3aXRoIGEgY291cnQgb3IgYWRtaW5pc3RyYXRpdmUgb3JkZXIsIGl0IHNoYWxsLCB0byB0aGUgZXh0ZW50IGl0IGlzIGxhd2Z1bGx5XHJcbiAgICAgICAgICAgICAgICAgICAgYWJsZSB0byBkbyBzbywgcHJpb3IgdG8gYW55IHN1Y2ggZGlzY2xvc3VyZSBub3RpZnkgdGhlIG90aGVyIHBhcnR5LCBhbmQgY29tcGx5IHdpdGggdGhlIG90aGVyXHJcbiAgICAgICAgICAgICAgICAgICAgcGFydHnigJlzIGluc3RydWN0aW9ucyB0byBwcm90ZWN0IHRoZSBjb25maWRlbnRpYWxpdHkgb2YgdGhlIGluZm9ybWF0aW9uLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTYuIEluZGVtbml0eSBhbmQgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgV2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IGF2YWlsYWJsZSBpbiBsYXcgb3IgdW5kZXIgZXF1aXR5LCBlYWNoIHBhcnR5IGhlcmVieSBhZ3JlZXMgdG9cclxuICAgICAgICAgICAgICAgICAgICBjb21wZW5zYXRlLCBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBoYXJtbGVzcyB0aGUgb3RoZXIsIGl0cyBhZmZpbGlhdGVzLCBkaXJlY3RvcnMsIHNoYXJlaG9sZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBvZmZpY2VycyBhbmQgZW1wbG95ZWVzIGFuZCBhZ2VudHMsIGZyb20gYW5kIGFnYWluc3QgYW55IGFuZCBhbGwgbG9zc2VzLCBsaWFiaWxpdGllcywgZGFtYWdlcyxcclxuICAgICAgICAgICAgICAgICAgICBkZWZpY2llbmNpZXMsIGRlbWFuZHMsIGNsYWltcyAoaW5jbHVkaW5nIHRoaXJkIHBhcnR5IGNsYWltcyksIGFjdGlvbnMsIGp1ZGdtZW50cyBvciBjYXVzZXMgb2ZcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGFzc2Vzc21lbnRzLCBpbnRlcmVzdCwgcGVuYWx0aWVzIGFuZCBvdGhlciBjb3N0cyBvciBleHBlbnNlcyAoaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGV4cGVuc2VzKSBiYXNlZCB1cG9uLCBhcmlzaW5nIG91dCBvZiwgb3IgaW4gcmVsYXRpb24gdG8gb3Igb3RoZXJ3aXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaW4gcmVzcGVjdCBvZiAoaSkgYW55IGJyZWFjaCBvZiBpdHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyA7IG9yIChpaSkgYW55IHdpbGxmdWxcclxuICAgICAgICAgICAgICAgICAgICBtaXNjb25kdWN0LCBmcmF1ZCwgb3Igd3JvbmdmdWwgb3IgbmVnbGlnZW50IGFjdCBvciBvbWlzc2lvbiBvZiBhIFBhcnR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSW4gbm8gZXZlbnQgc2hhbGwgZWl0aGVyIFBhcnR5IGJlIGxpYWJsZSB0byB0aGUgb3RoZXIgZm9yIGFueSBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgcHVuaXRpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhlbXBsYXJ5LCBzcGVjaWFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgb3IgZGFtYWdlcyBmb3IgbG9zcyBvZiBwcm9maXRzLCByZXZlbnVlLCB3aGV0aGVyIGluIGFuXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uIGluIGNvbnRyYWN0IG9yIHRvcnQsIG9yIG90aGVyd2lzZSAoY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvIGFzIOKAnEluZGlyZWN0IExvc3Nlc+KAnSkgZXZlbiBpZlxyXG4gICAgICAgICAgICAgICAgICAgIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVhY2ggUGFydHnigJlzIGxpYWJpbGl0eSBhcmlzaW5nIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGJyZWFjaCBvZiBhbnkgZGlyZWN0IGFuZCBhY3R1YWxcclxuICAgICAgICAgICAgICAgICAgICBsaWFiaWxpdGllcywgY29zdHMsIGxvc3NlcywgZGFtYWdlcywgc3VpdHMsIHByb2NlZWRpbmdzLCBjb3N0cywgZXhwZW5zZXMgb3IgbGlhYmlsaXRpZXMgc3VmZmVyZWQgb3JcclxuICAgICAgICAgICAgICAgICAgICBpbmN1cnJlZCBkdWUgdG8gcmVzdWx0aW5nIGR1ZSB0byBjbGFpbXMgZm9yIGJyZWFjaCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYSBQYXJ0eSBvciB0aGlyZFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnR5LCBicmVhY2ggb2YgY29uZmlkZW50aWFsaXR5IG9ibGlnYXRpb24sIGRhdGEgYnJlYWNoLCBicmVhY2ggb2YgZGF0YSBwcml2YWN5LCBmcmF1ZCwgd2lsbGZ1bFxyXG4gICAgICAgICAgICAgICAgICAgIG5lZ2xpZ2VuY2UsIGdyb3NzIG1pc2NvbmR1Y3Qgb3IgYnJlYWNoIG9mIGFwcGxpY2FibGUgbGF3cyBzaGFsbCBpbiBubyBldmVudCBleGNlZWQgdGhlIGFubnVhbCB0b3RhbFxyXG4gICAgICAgICAgICAgICAgICAgIHB1cmNoYXNlIHByaWNlIHBhaWQgcHVyc3VhbnQgdG8gZ3JhbnQgb2YgYWNjZXNzIGFuZCB1c2FnZSBvZiB0aGUgU2VydmljZXMvU29mdHdhcmUgYnkgdGhlIEN1c3RvbWVyLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTcuIEZvcmNlIE1hamV1cmUgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGUgUGFydGllcyBpcyBub3QgcmVzcG9uc2libGUgbm9yIGxpYWJsZSBmb3IgYW55IGRlbGF5cyBvciBmYWlsdXJlcyBpbiBwZXJmb3JtYW5jZSBmcm9tIGFueVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdXNlIGJleW9uZCBpdHMgY29udHJvbCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gYWN0cyBvZiBHb2QsIGNoYW5nZXMgdG8gbGF3IG9yIHJlZ3VsYXRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgIGVtYmFyZ29lcywgd2FyLCB0ZXJyb3Jpc3QgYWN0cywgYWN0cyBvciBvbWlzc2lvbnMgb2YgdGhpcmQgcGFydHkgdGVjaG5vbG9neSBwcm92aWRlcnMsIHJpb3RzLCBmaXJlcyxcclxuICAgICAgICAgICAgICAgICAgICBlYXJ0aHF1YWtlcywgZmxvb2RzLCBwb3dlciBibGFja291dHMsIHN0cmlrZXMsIHdlYXRoZXIgY29uZGl0aW9ucywgcGFuZGVtaWMsIGVwaWRlbWljLCBnb3Zlcm5tZW50XHJcbiAgICAgICAgICAgICAgICAgICAgbG9ja2Rvd25zIG9yIGFueSBvdGhlciB1bmZvcmVzZWVhYmxlIGV2ZW50IGJleW9uZCBpdHMgY29udHJvbCAoaGVyZWluYWZ0ZXIgY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgYXMgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxGb3JjZSBNYWpldXJlIEV2ZW504oCdKTwvc3Bhbj4uIFVwb24gb2NjdXJyZW5jZSBvZiBhbnkgRm9yY2UgTWFqZXVyZSBFdmVudCwgZWl0aGVyIFBhcnR5IHNoYWxsIGdpdmVcclxuICAgICAgICAgICAgICAgICAgICBub3RpY2UgdG8gdGhlIG90aGVyIHBhcnR5IG9mIGl0cyBpbmFiaWxpdHkgdG8gcGVyZm9ybSBvciBvZiBkZWxheSBpbiBjb21wbGV0aW5nIGl0cyBvYmxpZ2F0aW9ucyBhbmRcclxuICAgICAgICAgICAgICAgICAgICBtdXN0IGFjdCBkaWxpZ2VudGx5IHRvIHJlbWVkeSB0aGUgY2F1c2UgYW5kIHJlc3RvcmUgcGVyZm9ybWFuY2UsIHRvIHRoZSBleHRlbnQgcG9zc2libGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBXaGVyZSBGb3JjZS1NYWpldXJlIEV2ZW50IGNvbnRpbnVlcyBmb3IgYSBwZXJpb2QgbW9yZSB0aGFuIFNpeHR5ICg2MCkgY29udGludW91cyBkYXlzLCB0aGVuIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIGVmZmVjdGVkIFBhcnR5IHNoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSB0aGVzZSBTYWFTIFRlcm1zIEFncmVlbWVudCBieSBwcm92aWRpbmdcclxuICAgICAgICAgICAgICAgICAgICBhIHdyaXR0ZW4gbm90aWNlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xOC4gTWlzY2VsbGFuZW91czwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRoZXNlIFNhYVMgVGVybXMgaXMgZHJhd24gdXAgaW4gRW5nbGlzaCwgd2hpY2ggbGFuZ3VhZ2Ugc2hhbGwgZ292ZXJuIGFsbCBkb2N1bWVudHMsIG5vdGljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVldGluZ3MsIHByb2NlZWRpbmdzIGFuZCBwcm9jZXNzZXMgcmVsYXRpdmUgdGhlcmV0by5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgTm90aGluZyBpbiB0aGVzZSBTYWFTIFRlcm1zIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGEgam9pbnQgdmVudHVyZSwgYWdlbmN5LCBwYXJ0bmVyc2hpcCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdCBncm91cGluZyBvciBhbnkgb3RoZXIga2luZCBvZiBmb3JtYWwgYnVzaW5lc3MgZ3JvdXBpbmcgb3IgZW50aXR5IGJldHdlZW4gdGhlIFBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vIHJpZ2h0cyBvciBvYmxpZ2F0aW9ucyBvZiB0aGUgUGFydGllcyBhcmlzaW5nIGZyb20gdGhlc2UgU2FhUyBUZXJtcyBtYXkgYmUgYXNzaWduZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViLWNvbnRyYWN0ZWQsIG9yIHRyYW5zZmVycmVkLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCB0aGUgb3RoZXIgcGFydHnigJlzXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpb3Igd3JpdHRlbiBhcHByb3ZhbC5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IEluIGNhc2Ugb2YgY29uZmxpY3QgdGVybXMgYmV0d2VlbiB0aGVzZSBTYWFTIFRlcm1zIGFuZCBPcmRlciBGb3JtLCB0aGUgT3JkZXIgRm9ybSB3aWxsIHByZXZhaWwuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24uIFRoZXNlIFNhYVMgVGVybXMgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgSW5kaWEsIGFuZCB0aGVcclxuICAgICAgICAgICAgICAgICAgICBQYXJ0aWVzIGhlcmVieSBhZ3JlZSB0byBpcnJldm9jYWJseSBzdWJtaXQgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBvZiBOZXcgRGVsaGlcclxuICAgICAgICAgICAgICAgICAgICBpbiByZXNwZWN0IG9mIGFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJyb3cgZy0wIG1iLTAgYmctdGVybXNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2stY3VzdG9tIGZvcm0tY2hlY2stc29saWQgZm9ybS1jaGVjay1pbmxpbmUgXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwiIWVuYWJsZUFncmVlXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcmVxdWlyZWQgbmFtZT1cInRvY1wiIHZhbHVlPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRldGVybXMoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1ib2xkIHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHRzaXplIG10LTNcIj5JIGFncmVlIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy48L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiF0ZXJtc1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGcgYnRuLXByaW1hcnkgbXMtMTUgbWUtNSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJlbnRlcnByaXNlYWN0aXZhdGUoKVwiPlxyXG4gICAgICAgICAgICBTaWduIFVwXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBtdC0xMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGcgdGV4dC1ub3dyYXAgYnRuLXNldCBtZS01XCIgKGNsaWNrKT1cInByZXZTdGVwKClcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMTVMOCAxMEwxMyA1XCIgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+IFByZXZpb3VzXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJvdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiICpuZ0lmPVwic2hvd3ZhbHVlXCI+XHJcblx0PGRpdiBjbGFzcz1cInBvcHVwXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG5cdFx0PGgxIGNsYXNzPVwiYS1vLWlcIj5WZXJpZmljYXRpb24gQ29kZTwvaDE+XHJcbiAgICAgICAgPGg1IGNsYXNzPVwic3ViLWFvaVwiPkFuIE9UUCBoYXMgYmVlbiBzZW50IHRvIHlvdXIgbWFpbC4gUGxlYXNlIGNoZWNrICYgc3VibWl0LjwvaDU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm90cC1jb250YWluZXIgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdHAtaW5wdXQgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctb3RwLWlucHV0ICNuZ090cElucHV0IChvbklucHV0Q2hhbmdlKT1cIm9uT3RwQ2hhbmdlKCRldmVudClcIiBpbnB1dG1vZGU9XCJudW1lcmljXCIgY2xhc3M9XCJ2ZXJpZmljYXRpb24tY29kZVwiIHBsYWNlaG9sZGVyPVwiMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsZW5ndGg6IDQgLGFsbG93TnVtYmVyc09ubHk6dHJ1ZX1cIj48L25nLW90cC1pbnB1dD5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImludmFsaWRPdHBcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHRleHQtZGFuZ2VyXCIgPlxyXG4gICAgICAgICAgICBJbnZhbGlkIE9UUCAhXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cInJlc2VuZFwiIGNsYXNzPVwic21hbGxfbGcgY3Vyc29yLXBvaW50ZXJcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZW5kT1RQKClcIj48Yj5SZXNlbmQgT1RQPC9iPjwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhcmVzZW5kXCIgY2xhc3M9XCJzbWFsbF9sYmwgXCIgPlJlc2VuZCBPVFAgKCB7e2NvdW50ZXJcclxuICAgICAgICAgICAgIH19ICk8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxnIGJ0bi1wcmltYXJ5IG1lLTUgdy0xMDAgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib3Rwc3VibWl0KClcIj5cclxuICAgICAgICAgICAgICAgIFN1Ym1pdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=
@@ -267,7 +267,7 @@ class TangoAuthLoginComponent {
267
267
  }
268
268
  onCaptchaResolved(token) {
269
269
  this.captchaToken = token;
270
- console.log('Captcha token:', token);
270
+ // console.log('Captcha token:', token);
271
271
  this.cd.detectChanges();
272
272
  }
273
273
  ngOnDestroy() {
@@ -375,7 +375,8 @@ class TangoAuthLoginComponent {
375
375
  this.credentials.password = originalPassword;
376
376
  this.hasError = true;
377
377
  if (this.pageSection === 'otp') {
378
- this.toastService.getErrorToast('Invalid OTP');
378
+ const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid OTP';
379
+ this.toastService.getErrorToast(errorMessage);
379
380
  }
380
381
  else {
381
382
  this.handleLoginError(err);
@@ -1364,7 +1365,8 @@ class Step3Component {
1364
1365
  },
1365
1366
  error: (err) => {
1366
1367
  if (err) {
1367
- this.toastService.getErrorToast(err.error.error);
1368
+ const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Enter Valid OTP';
1369
+ this.toastService.getErrorToast(errorMessage);
1368
1370
  }
1369
1371
  },
1370
1372
  }));
@@ -1413,6 +1415,8 @@ class Step3Component {
1413
1415
  },
1414
1416
  error: (res) => {
1415
1417
  if (res) {
1418
+ const errorMessage = res?.error?.message || res?.error?.error || res?.message || 'Enter Valid OTP';
1419
+ this.toastService.getErrorToast(errorMessage);
1416
1420
  this.invalidOtp = true;
1417
1421
  this.cd.detectChanges();
1418
1422
  }