tango-app-ui-auth 3.3.0-alpha.0 → 3.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -173,6 +173,7 @@ export class Step3Component {
173
173
  otpsubmit() {
174
174
  let data = {
175
175
  clientName: this.aboutFormData?.clientName,
176
+ websiteUrl: this.aboutFormData?.websiteUrl,
176
177
  firstName: this.aboutFormData?.firstName,
177
178
  lastName: this.aboutFormData?.lastName,
178
179
  corporateEmail: this.aboutFormData?.corporateEmail,
@@ -184,9 +185,17 @@ export class Step3Component {
184
185
  totalCamera: this.pricingFormData?.storeSize?.cameras,
185
186
  subscriptionPeriod: this.pricingFormData?.subscriptionPeriod,
186
187
  subscriptionType: this.pricingFormData?.subscriptionType,
187
- product: this.getTrueKeys(this.pricingFormData?.product),
188
188
  otp: this.otp
189
189
  };
190
+ if (data.subscriptionType === 'free') {
191
+ data['product'] = ['tangoTraffic'];
192
+ }
193
+ else if (data.subscriptionType === 'premium') {
194
+ data['product'] = this.getTrueKeys(this.pricingFormData?.product);
195
+ }
196
+ else if (data.subscriptionType === 'enterprise') {
197
+ data['product'] = ['tangoTraffic', 'tangoZone', 'tangoTrax'];
198
+ }
190
199
  this.subscriptions.push(this.authService.signup(data).subscribe({
191
200
  next: (res) => {
192
201
  if (res) {
@@ -260,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
260
269
  type: ViewChild,
261
270
  args: ['ngOtpInput']
262
271
  }] } });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcDMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1zaWdudXAvc3RlcC9zdGVwMy9zdGVwMy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hdXRoL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hdXRoLXNpZ251cC9zdGVwL3N0ZXAzL3N0ZXAzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFnQjNDLE1BQU0sT0FBTyxjQUFjO0lBd0RoQjtJQUFnQztJQUFpQztJQUF1QjtJQUE4QjtJQUNySDtJQUFnQztJQUFtQztJQXhEN0UsVUFBVSxHQUFXLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtJQUMvQyxRQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsd0JBQXdCO0lBQ25ELFNBQVMsR0FBWSxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7SUFDbkQsVUFBVSxHQUFZLEtBQUssQ0FBQyxDQUFDLDBCQUEwQjtJQUN2RCxxQkFBcUIsQ0FBUztJQUM5QixXQUFXLEdBQVcsS0FBSyxDQUFBO0lBQzNCLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0Msd0NBQXdDO0lBQ3hDLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFF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LGFBQWE7c0JBQXJDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb252ZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbnZlcnNpb24uc2VydmljZSc7XHJcblxyXG5cclxuaW50ZXJmYWNlIElucHV0U3R5bGVzIHtcclxuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7IC8vIERlZmluZSBrZXktdmFsdWUgcGFpcnMgd2hlcmUga2V5cyBhcmUgc3RyaW5ncyBhbmQgdmFsdWVzIGFyZSBzdHJpbmdzXHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3RlcDMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwMy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3N0ZXAzLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RlcDNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7IC8vIEluaXRpYWwgaW5wdXQgdmFsdWVcclxuICBpc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIGZvciBhY3RpdmUgc3RhdGVcclxuICBpc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyBmb3IgaG92ZXIgc3RhdGVcclxuICBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgZm9yIGRpc2FibGVkIHN0YXRlXHJcbiAgYXV0aGxvY2FsU3RvcmFnZVRva2VuOiBzdHJpbmc7XHJcbiAgZW5hYmxlQWdyZWU6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgb25Nb3VzZUVudGVyKCkge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIG1vdXNlIGxlYXZlIGV2ZW50XHJcbiAgb25Nb3VzZUxlYXZlKCkge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcclxuICB9XHJcbiAgICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgaW5wdXQgY2hhbmdlIGV2ZW50XHJcbiAgICBvbklucHV0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGdldCBpbnB1dCBzdHlsZXMgZHluYW1pY2FsbHlcclxuICBnZXRJbnB1dFN0eWxlcygpOiBJbnB1dFN0eWxlcyB7XHJcbiAgICBsZXQgc3R5bGVzOiBJbnB1dFN0eWxlcyA9IHt9OyAvLyBEZWZpbmUgc3R5bGVzIG9iamVjdCB3aXRoIHR5cGUgSW5wdXRTdHlsZXNcclxuICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSAnYmx1ZSc7IC8vIEJvcmRlciBjb2xvciB3aGVuIGlucHV0IGlzIGFjdGl2ZVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzSG92ZXJlZCkge1xyXG4gICAgICBzdHlsZXNbJ2JvcmRlci1jb2xvciddID0gJ2dyZWVuJzsgLy8gQm9yZGVyIGNvbG9yIHdoZW4gaW5wdXQgaXMgaG92ZXJlZFxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgc3R5bGVzWydib3JkZXItY29sb3InXSA9ICcjY2NjJzsgLy8gQm9yZGVyIGNvbG9yIHdoZW4gaW5wdXQgaXMgZGlzYWJsZWRcclxuICAgICAgc3R5bGVzWydjb2xvciddID0gJyM5OTknOyAvLyBUZXh0IGNvbG9yIHdoZW4gaW5wdXQgaXMgZGlzYWJsZWRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSAnI2NjYyc7IC8vIERlZmF1bHQgYm9yZGVyIGNvbG9yXHJcbiAgICAgIHN0eWxlc1snY29sb3InXSA9ICcjMzMzJzsgLy8gRGVmYXVsdCB0ZXh0IGNvbG9yXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG4gIH1cclxuICBwYW5lbE9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIHRlcm1zYW5kY29uZGl0aW9uOiBhbnk7XHJcbiAgdHlwZTogYW55O1xyXG4gIGFjY291bnREYXRhOiBhbnk7XHJcbiAgdGVybXM6IGFueTtcclxuICBpZHZhbHVlOiBhbnk7XHJcbiAgZW1haWw6IGFueTtcclxuICBzaG93dmFsdWU6IGJvb2xlYW4gPWZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ25nT3RwSW5wdXQnKSBuZ090cElucHV0UmVmOiBhbnk7XHJcbiAgY291bnRlcjogbnVtYmVyO1xyXG4gIHRpY2s6IG51bWJlcjtcclxuICByZXNlbmQ6IGJvb2xlYW4gPXRydWU7XHJcbiAgY291bnREb3duOiBhbnk7XHJcbiAgb3RwOiBhbnk7XHJcbiAgYWJvdXRGb3JtRGF0YTogYW55O1xyXG4gIHByaWNpbmdGb3JtRGF0YTogYW55O1xyXG4gIHJldHVyblVybDogYW55O1xyXG4gIGludmFsaWRPdHA6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgc3Vic2NyaXB0aW9uczpTdWJzY3JpcHRpb25bXSA9IFtdXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBhdXRoU2VydmljZTpBdXRoU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6Um91dGVyLCBwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGNkOkNoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIHRvYXN0U2VydmljZTpUb2FzdFNlcnZpY2UsIHByaXZhdGUgc2V0dGVyc2VydmljZTogQ29udmVyc2lvblNlcnZpY2UsXHJcbil7XHJcbiAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgdGhpcy5ncy5lbnZpcm9ubWVudC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgaWYgKGVudikge1xyXG4gICAgICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbiA9IGAke2Vudi5hcHBWZXJzaW9ufS0ke2Vudi5VU0VSREFUQV9LRVl9YDtcclxuICAgIH1cclxuICB9KVxyXG4gIClcclxuXHJcbiAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hdXRoU2VydmljZS5hYm91dEZvcm1EYXRhLnN1YnNjcmliZSgoZGF0YSk9PntpZihkYXRhKXt0aGlzLmFib3V0Rm9ybURhdGEgPSBkYXRhfX0pKVxyXG4gIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYXV0aFNlcnZpY2UucHJpY2luZ0Zvcm1EYXRhLnN1YnNjcmliZSgoZGF0YSk9PntpZihkYXRhKXt0aGlzLnByaWNpbmdGb3JtRGF0YSA9IGRhdGF9fSkpXHJcbn1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pPT57XHJcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vIGdldCByZXR1cm4gdXJsIGZyb20gcm91dGUgcGFyYW1ldGVycyBvciBkZWZhdWx0IHRvICcvJ1xyXG4gIHRoaXMucmV0dXJuVXJsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sncmV0dXJuVXJsJy50b1N0cmluZygpXSB8fCAnLyc7ICAgICAgXHJcbn1cclxuICB1cGRhdGV0ZXJtcyhldnQ6IGFueSkge1xyXG4gICAgdGhpcy50ZXJtcyA9IGV2dC50YXJnZXQuY2hlY2tlZFxyXG4gIH1cclxuXHJcbiAgZW50ZXJwcmlzZWFjdGl2YXRlKCl7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgbmFtZTp0aGlzLmFib3V0Rm9ybURhdGE/LmZpcnN0TmFtZSxcclxuICAgICAgZW1haWw6dGhpcy5hYm91dEZvcm1EYXRhPy5jb3Jwb3JhdGVFbWFpbFxyXG4gICAgfVxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5zZW5kU2lnbnVwT3RwKGRhdGEpLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6KHJlcyk9PntcclxuICAgICAgICAgIGlmKHJlcyl7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRlciA9IDYwO1xyXG4gICAgICAgICAgICB0aGlzLnRpY2sgPSAxMDAwO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMucmVzZW5kID0gZmFsc2U7XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5jb3VudERvd24gPSB0aW1lcigwLCB0aGlzLnRpY2spLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudGVyID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudERvd24udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLmNvdW50ZXIgLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnb3ZlcmxheS1vcGVuJyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd3ZhbHVlID10cnVlIFxyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgICAgIGlmKGVycil7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoZXJyLmVycm9yLmVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICAgICkgIFxyXG4gICAgKVxyXG5cclxuICB9XHJcblxyXG4gIHJlc2VuZE9UUCgpIHtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBuYW1lOnRoaXMuYWJvdXRGb3JtRGF0YT8uZmlyc3ROYW1lLFxyXG4gICAgICBlbWFpbDp0aGlzLmFib3V0Rm9ybURhdGE/LmNvcnBvcmF0ZUVtYWlsXHJcbiAgICB9XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5zZW5kU2lnbnVwT3RwKGRhdGEpLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6KHJlcyk9PntcclxuICAgICAgICAgIGlmKHJlcyl7XHJcbiAgICAgICAgICAgIHRoaXMubmdPdHBJbnB1dFJlZi5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRlciA9IDYwO1xyXG4gICAgICAgICAgICB0aGlzLnRpY2sgPSAxMDAwO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMucmVzZW5kID0gZmFsc2U7XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5jb3VudERvd24gPSB0aW1lcigwLCB0aGlzLnRpY2spLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudGVyID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudERvd24udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLmNvdW50ZXIgLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjooZXJyKT0+e1xyXG4gICAgICAgICAgaWYoZXJyKXtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnIuZXJyb3IuZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgICAgKSBcclxuICAgIClcclxuXHJcbiAgfVxyXG4gIG90cHN1Ym1pdCgpe1xyXG4gICBsZXQgZGF0YSA9IHtcclxuICAgICAgY2xpZW50TmFtZTogdGhpcy5hYm91dEZvcm1EYXRhPy5jbGllbnROYW1lLFxyXG4gICAgICAgZmlyc3ROYW1lOiB0aGlzLmFib3V0Rm9ybURhdGE/LmZpcnN0TmFtZSxcclxuICAgICAgIGxhc3ROYW1lOiB0aGlzLmFib3V0Rm9ybURhdGE/Lmxhc3ROYW1lLFxyXG4gICAgICAgY29ycG9yYXRlRW1haWw6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY29ycG9yYXRlRW1haWwsXHJcbiAgICAgICBtb2JpbGVOdW1iZXI6IHRoaXMuYWJvdXRGb3JtRGF0YT8ubW9iaWxlTnVtYmVyLFxyXG4gICAgICAgY291bnRyeUNvZGU6IHRoaXMuYWJvdXRGb3JtRGF0YT8uY291bnRyeUNvZGUsXHJcbiAgICAgICBwYXNzd29yZDogdGhpcy5hYm91dEZvcm1EYXRhPy5wYXNzd29yZCxcclxuICAgICAgIHRvdGFsU3RvcmVzOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8udG90YWxTdG9yZXMudmFsdWUsXHJcbiAgICAgICBzdG9yZVNpemU6dGhpcy5wcmljaW5nRm9ybURhdGE/LnN0b3JlU2l6ZS52YWx1ZSxcclxuICAgICAgIHRvdGFsQ2FtZXJhOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8uc3RvcmVTaXplPy5jYW1lcmFzLFxyXG4gICAgICAgc3Vic2NyaXB0aW9uUGVyaW9kOiB0aGlzLnByaWNpbmdGb3JtRGF0YT8uc3Vic2NyaXB0aW9uUGVyaW9kLFxyXG4gICAgICAgc3Vic2NyaXB0aW9uVHlwZTogdGhpcy5wcmljaW5nRm9ybURhdGE/LnN1YnNjcmlwdGlvblR5cGUsXHJcbiAgICAgICBwcm9kdWN0OiB0aGlzLmdldFRydWVLZXlzKHRoaXMucHJpY2luZ0Zvcm1EYXRhPy5wcm9kdWN0KSxcclxuICAgICAgICBvdHA6dGhpcy5vdHBcclxuICAgfVxyXG4gICBcclxuICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbnVwKGRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OihyZXMpPT57XHJcbiAgICAgIGlmKHJlcyl7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5hYm91dEZvcm1EYXRhLm5leHQobnVsbClcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnByaWNpbmdGb3JtRGF0YS5uZXh0KG51bGwpXHJcbiAgICAgIFxyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ292ZXJsYXktb3BlbicpO1xyXG4gICAgICB0aGlzLnNob3d2YWx1ZSA9ZmFsc2UgXHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIGxldCBsb2dpblRva2VuOiBhbnkgPVxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbik7XHJcbiAgICBpZiAobG9naW5Ub2tlbikge1xyXG4gICAgICBsb2dpblRva2VuID0gSlNPTi5wYXJzZShsb2dpblRva2VuKTtcclxuICAgIH1cclxuICAgXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIHRoaXMuYXV0aGxvY2FsU3RvcmFnZVRva2VuLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJlcz8uZGF0YT8ucmVzdWx0KVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgdGhpcy51c2VyUHJvZmlsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgfSxcclxuICAgICBlcnJvcjoocmVzKT0+e1xyXG4gICAgICBpZihyZXMpe1xyXG4gICAgICB0aGlzLmludmFsaWRPdHAgPSB0cnVlXHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIH1cclxuICAgICB9LFxyXG4gICB9KSBcclxuICAgKVxyXG5cclxuICAgXHJcblxyXG4gIH1cclxuXHJcbiAgb25PdHBDaGFuZ2UoZXZlbnQ6YW55KXtcclxuICAgIHRoaXMuaW52YWxpZE90cCA9IGZhbHNlXHJcbiAgICB0aGlzLm90cCA9IGV2ZW50XHJcbiAgfVxyXG5cclxuICBnZXRUcnVlS2V5cyhvYmo6IGFueSkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGtleSA9PiBvYmpba2V5XSA9PT0gdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICB1c2VyUHJvZmlsZSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgIHRoaXMuYXV0aFNlcnZpY2UudXNlclByb2ZpbGVEZXQoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyYmIHJlcy5jb2RlID09MjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmdzLnVzZXJBY2Nlc3MubmV4dChyZXMuZGF0YT8ucGVybWlzc2lvbilcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvYnJhbmRzJ10pO1xyXG4gICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJldHVyblVybCk7XHJcbiAgICAgICAgfSBcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVyci5lcnJvci5lcnJvcik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gICAgKVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBwcmV2U3RlcCgpIHtcclxuICAgIHRoaXMuc2V0dGVyc2VydmljZS5jb21wbGV0ZVN0ZXBwZXIoeyBzdGVwOiAyLCBwcmV2OiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgIGNvbnN0IGF0Qm90dG9tID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LnNjcm9sbFRvcCA8PSBlbGVtZW50LmNsaWVudEhlaWdodCArIDE7XHJcbiAgICBcclxuICAgIGlmIChhdEJvdHRvbSkge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlQWdyZWUgID0gdHJ1ZVxyXG4gICAgfVxyXG59XHJcblxyXG5jbG9zZU1vZGFsKCl7XHJcbiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdvdmVybGF5LW9wZW4nKTtcclxuICB0aGlzLnNob3d2YWx1ZSA9ICF0aGlzLnNob3d2YWx1ZVxyXG4gIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcblxyXG4gIHRoaXMuY291bnREb3duLnVuc3Vic2NyaWJlKClcclxufVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIG10LTEwIG14LTE1XCI+XHJcbiAgICA8ZGl2IGlkPVwia3RfY29udGVudF9jb250YWluZXJcIiBjbGFzcz1cImNvbnRhaW5lci14eGwgZm9udCBoLTEwMCAgbXgtMTAgcGUtMTUgbXktN1wiPlxyXG4gICAgICAgIDxkaXYgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCIgY2xhc3M9XCJoLTU1MHB4IHN0aWNreVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIGNvbC1tZC0xMiBjb2wtc20tMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYWxpZ24taXRlbXMtY2VudGVyIGJvcmRlci0wIG10LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4gZnMtbGctMSBtYi00IHRleHQtZ3JheS04MDBcIj5HZW5lcmFsIFRlcm1zIGFuZCBDb25kaXRpb25zLVNBQVNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ3JlZW1lbnQ8L3NwYW4+PHNwYW4gY2xhc3M9XCIgdGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBtZS0xIHN1YlwiPlRoZXNlIHRlcm1zIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMgKGhlcmVpbmFmdGVyIGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFNBQVNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVybXPigJ0pPC9zcGFuPiBzaGFsbCBnb3Zlcm4geW91ciA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPijigJxVc2Vy4oCdPC9zcGFuPiBvciA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFlvdeKAnTwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxZb3Vy4oCdPC9zcGFuPm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxDdXN0b21lcuKAnSk8L3NwYW4+IHVzZSBvZiBTZXJ2aWNlcyAoYXMgZGVmaW5lZCBiZWxvdykgdGhyb3VnaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd2Vic2l0ZSBodHRwczovL3RhbmdvZXllLmFpLyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPihXZWJzaXRlKS48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIgdGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBtZS0xIG15LTEgc3ViXCI+QnkgYWNjZXNzaW5nIG9yIHVzaW5nIHRoZSBTZXJ2aWNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIFdlYnNpdGUgb3IgYnkgZXhlY3V0aW5nIGFuIE9yZGVyIEZvcm0sIHRoYXQgcmVmZXJlbmNlcyB0aGVzZSBTQUFTIFRlcm1zLCBZb3VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGVzZSBTYWFTIFRlcm1zLiBJZiBZb3UgYXJlIGFjY2Vzc2luZyBvciB1c2luZyB0aGUgU29mdHdhcmUgb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWhhbGYgb2YgYSBDb21wYW55IG9yIG90aGVyIGxlZ2FsIGVudGl0eSwgWW91IHJlcHJlc2VudCB0aGF0IFlvdSBoYXZlIHRoZSBhdXRob3JpdHkgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kIHN1Y2ggZW50aXR5IGFuZCBpdHMgYWZmaWxpYXRlcyB0byB0aGVzZSBTQUFTIFRlcm1zIGluIHdoaWNoIGNhc2UgdGhlIHRlcm1zIOKAnFVzZXLigJ1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciDigJxZb3XigJ0gb3Ig4oCcWW91cuKAnSBvciDigJxDdXN0b21lcuKAnSBzaGFsbCByZWZlciB0byBzdWNoIGVudGl0eSBhbmQgaXRzIGFmZmlsaWF0ZXMuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LWxnLTJcIj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWFsaWduLWp1c3RpZnlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MS4gRGVmaW5pdGlvbiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4g4oCcT3JkZXIgRm9ybeKAnSBtZWFucyB0aGUgZWFjaCBvcmRlciBmb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bvc2FsIG9yIHN0YXRlbWVudCBvZiB3b3JrIHJlZmVyZW5jaW5nIHRoaXMgQWdyZWVtZW50IHdoZXJldmVyIGFwcGxpY2FibGUuIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFNvZnR3YXJl4oCdPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5zIHRoZSBkYXRhIGFuYWx5dGljcyBhbmQgYnVzaW5lc3MgaW50ZWxsaWdlbmNlIHNvZnR3YXJlIGFuZCBpdHMgb2JqZWN0IGNvZGUgdmVyc2lvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGVuYWJsZXMgdGhlIEN1c3RvbWVyIHRvIGlkZW50aWZ5LCBhbW9uZ3N0IG90aGVycywgY3VzdG9tZXIgZm9vdGZhbGxzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbW9ncmFwaGljcywgaWRlbnRpZnkgbWlzc2VkIG9wcG9ydHVuaXRpZXMsIGluY2x1ZGluZyBhbnkgdXBkYXRlcyBvciBuZXcgdmVyc2lvbnMuPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcU2VydmljZXPigJ08L3NwYW4+cmVmZXIgdG8gdGhlIGluLXN0b3JlIEFJIGRyaXZlbiBhbmFseXRpY3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCB0aHJvdWdoIHRoZSBTb2Z0d2FyZSB0byB0aGUgQ3VzdG9tZXIgdGhhdCBpcyBob3N0ZWQgYnkgVGFuZ28gRXllIGFuZCBtYWRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHRvIEN1c3RvbWVyIG92ZXIgYSBuZXR3b3JrIHdoZXRoZXIgb24gYSB0cmlhbCBvciBwYWlkIGJhc2lzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4g4oCcVGVybeKAnSBzaGFsbCBtZWFuIHRoYXQgcGVyaW9kIHNwZWNpZmllZCBpbiBhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlZHVsZSB0byBiZSBleGVjdXRlZCBzZXBhcmF0ZWx5IHdpdGggdGhlIEN1c3RvbWVyIGR1cmluZyB3aGljaCBDdXN0b21lciB3aWxsIGhhdmUgb24tbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIGFuZCB1c2Ugb2YgdGhlIFNlcnZpY2VzIHRocm91Z2ggdGhlIFdlYnNpdGUuIDwvbGk+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjIuIEVsaWdpYmlsaXR5IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YiBteS03XCI+SW4gb3JkZXIgdG8gdXNlIHRoZSBTZXJ2aWNlcywgWW91IG11c3Q6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj4gQmUgYWJvdmUgMTggeWVhcnMgb2YgYWdlOyA8L2xpPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5Db21wbGV0ZSB0aGUgYWNjb3VudCByZWdpc3RyYXRpb24gcHJvY2VzcyB0byBhY2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTZXJ2aWNlcyB0aHJvdWdoIHRoZSBXZWJzaXRlOzwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IHdpbGwgcHJvdmlkZSBjb3JyZWN0LCB1cHRvIGRhdGUgaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MsIGluY2x1ZGluZyBiaWxsaW5nIGFkZHJlc3M7PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiBZb3Ugd2lsbCBrZWVwIGFsbCB5b3VyIGNyZWRlbnRpYWxzIGFuZCBwYXNzd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlkZW50aWFsIGFuZCBhbHNvIHJlc3BvbnNpYmxlIHRvIG1haW50YWluaW5nIHRoZSBzYWZldHkgYW5kIHNlY3VyaXR5IG9mIHlvdXIgcGVyc29uYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uOyA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IHdpbGwgcHJvdmlkZSBhbGwgcmVsZXZhbnQgYW5kIHJlcXVpcmVkIGhhcmR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc29mdHdhcmUgYXMgc3VnZ2VzdGVkIGJ5IFRhbmdvIEV5ZSBhdCB5b3VyIGRlc2lnbmF0ZWQgbG9jYXRpb24gaW4gb3JkZXIgdG8gZW5hYmxlIFRhbmdvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeWUgdG8gaW5zdGFsbCB0aGUgU29mdHdhcmUgaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgU2VydmljZXMuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4zLiBTZXJ2aWNlcyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPiBJbiBjb25zaWRlcmF0aW9uIGZvciBwYXltZW50IG9mIHRoZSBmZWVzLCBUYW5nbyBFeWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW50cyB0aGUgQ3VzdG9tZXIgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBwZXJzb25hbCwgcmV2b2NhYmxlLCBsaWNlbmNlIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgYW5kIHVzZSB0aGUgU2VydmljZXMgaW4gYWNjb3JkYW5jZSB3aXRoIFRhbmdvIEV5ZeKAmXMgaW50ZW5kZWQgcHVycG9zZSBmb3IgdGhlIFNlcnZpY2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPihMaWNlbmNlKS48L3NwYW4+PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgU2VydmljZXMgYXJlIG5vdCBjb250aW5nZW50IG9uIHRoZSBkZWxpdmVyeSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IGZ1dHVyZSBmdW5jdGlvbmFsaXR5IG9yIGZlYXR1cmVzPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNoYW5nZSBvciByZW1vdmUgZmVhdHVyZXMgb2YgdGhlIFNlcnZpY2VzIGFuZCBvciB0aGUgU29mdHdhcmUgZnJvbSB0aW1lIHRvIHRpbWUuIFdoZXJlIHRoZXJlIGlzIGFueSBtYXRlcmlhbCBhbHRlcmF0aW9uIHRvIHRoZSBTZXJ2aWNlcyBhbmQgb3IgdGhlIFNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIGNsYXVzZSwgVGFuZ28gRXllIHdpbGwgcHJvdmlkZSB0aGUgQ3VzdG9tZXIgd2l0aCAzMCBidXNpbmVzcyBkYXlz4oCZIG5vdGljZSBhbmQgdGhlIEN1c3RvbWVyIGFncmVlcyB0aGF0IGFueSBtYXRlcmlhbCBhbHRlcmF0aW9uIGlzIGF0IFRhbmdvIEV5ZeKAmXMgZGlzY3JldGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QWNjZXNzIHRvIHRoZSBTZXJ2aWNlcyBzaGFsbCBiZSBsaW1pdGVkIHRvIGF1dGhvcml6ZWQgcGVyc29ucyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzIHdoaWNoIGlzIHRvIGJlIGFncmVlZCBhdCB0aGUgdGltZSBvZiBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBTZXJ2aWNlcyBhbmQgdGhlIFdlYnNpdGUuIElmIGl0IGlzIGEgc2luZ2xlIGFjY291bnQgYWNjZXNzLCBzdWNoIGFjY291bnQgc2hhbGwgbm90IGJlIHVzZWQgYnkgbXVsdGlwbGUgdXNlcnMgYXQgdGhlIHNhbWUgdGltZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2UsIG1vZGlmeSwgYW1lbmQsIHVwZGF0ZSwgc3VzcGVuZCBvciBkaXNjb250aW51ZSB0aGUgd2hvbGUgb3IgYW55IHBvcnRpb24gb2YgdGhlIFNlcnZpY2VzLCBXZWJzaXRlIG9yIHRoZSBTYWFTIFRlcm1zIGF0IGFueSB0aW1lLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTNcIj5Zb3UgYWdyZWUgdGhhdMKgVGFuZ28gRXllOjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj5hLiB3aWxsIHN1cHBseSB0aGUgU2VydmljZXMgb24gYSBub24tZXhjbHVzaXZlIGJhc2lzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPmIuIGRvZXMgbm90IG1ha2UgYW55IHdhcnJhbnR5IG9yIHJlcHJlc2VudGF0aW9uIGFzIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWJpbGl0eSBvZiB0aGUgZmFjaWxpdGllcyBvciBzZXJ2aWNlcyBvZiBhbnkgdGhpcmQtcGFydHkgc3VwcGxpZXJzOyBhbmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPmMuIGlzIG5vdCBsaWFibGUgZm9yIGFueSBmYWlsdXJlIGluLCBmYXVsdCB3aXRoIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyYWRhdGlvbiBvZiB0aGUgU2VydmljZXMvU29mdHdhcmUgaWYgdGhhdCBmYWlsdXJlLCBmYXVsdCBvciBkZWdyYWRhdGlvbiBpcyBhdHRyaWJ1dGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG9yIGNhdXNlZCBieSBhbnkgZmFpbHVyZSBvZiB0aGUgQ3VzdG9tZXIgZW52aXJvbm1lbnQgb3IgdGhlIGZhY2lsaXRpZXMgb3Igc2VydmljZXMgb2YgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlyZCBwYXJ0eS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj40LiBMaWNlbnNlIFJlc3RyaWN0aW9ucyA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0zXCI+IFlvdSBtdXN0IG5vdCBhY2Nlc3Mgb3IgdXNlIHRoZSBTZXJ2aWNlcyBhbmQgb3IgdGhlIFNvZnR3YXJlIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgdGhlIExpY2Vuc2UgYW5kIG1heSBub3QgZG8gb3IgYXV0aG9yaXplIHRoZSBjb21taXNzaW9uIG9mIGFueSBhY3QgdGhhdCB3b3VsZCBvciBtaWdodCBpbnZhbGlkYXRlIG9yIGJlIGluY29uc2lzdGVudCB3aXRoIHRoZSBUYW5nbyBFeWXigJlzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIFNlcnZpY2VzIG9yIFNvZnR3YXJlLiBXaXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcgcHJvdmlzaW9ucywgdGhlIEN1c3RvbWVyIGFncmVlcyBhbmQgYWNrbm93bGVkZ2VzIHRoYXQgaXQgbXVzdCBub3QgYW5kIHdpbGwgbm90IHBlcm1pdCBhbnkgcGVyc29uIHRvOjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5hLiByZXNlbGwsIGFzc2lnbiwgdHJhbnNmZXIsIGRpc3RyaWJ1dGUgb3IgcHJvdmlkZSBvdGhlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhY2Nlc3MgdG8gdGhlIFNlcnZpY2VzOzwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+Yi4g4oCcZnJhbWXigJ0sIOKAnG1pcnJvcuKAnSBvciBzZXJ2ZSBhbnkgb2YgdGhlIFNlcnZpY2VzL1NvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uIGFueSB3ZWIgc2VydmVyIG9yIG90aGVyIGNvbXB1dGVyIHNlcnZlciBvdmVyIHRoZSBpbnRlcm5ldCBvciBhbnkgb3RoZXIgbmV0d29yazs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+Yy4gY29weSwgYWx0ZXIsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgZnJvbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWNlLCByZXNlbGwsIHRyYW5zZmVyIHRvIGEgdGhpcmQgcGFydHksIHJldmVyc2UgYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIHJldmVyc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSBvciBlbmhhbmNlIHRoZSBTZXJ2aWNlcyBvciBTb2Z0d2FyZTsgb3IgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmQgLmFsdGVyLCByZW1vdmUgb3IgdGFtcGVyIHdpdGggYW55IHRyYWRlbWFya3MsIGFueSBwYXRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgY29weXJpZ2h0IG5vdGljZXMsIG9yIGFueSBjb25maWRlbnRpYWxpdHkgbGVnZW5kIG9yIG5vdGljZSwgb3IgYW55IG51bWJlcnMsIG9yIG90aGVyIG1lYW5zIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9uIHVzZWQgb24gb3IgaW4gcmVsYXRpb24gdG8gdGhlIFNlcnZpY2VzIG9yIFNvZnR3YXJlLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgbXVzdCBub3QgdXNlIHRoZSBTZXJ2aWNlcyBpbiBhbnkgd2F5IHdoaWNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIGJyZWFjaCBvZiBhbnkgc3RhdHV0ZSwgcmVndWxhdGlvbiwgbGF3IG9yIGxlZ2FsIHJpZ2h0IG9mIGFueSBwZXJzb24gd2l0aGluIHRoZSBSZXB1YmxpYyBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbmRpYSBvciB0aGUganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBDdXN0b21lciBvciBpdHMgcGVyc29ubmVsIGFyZSBsb2NhdGVkLsKgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj41LiBQcm9oaWJpdGVkIFVzZSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBtdC03XCI+WW91IGFncmVlIHRvIHVzZSB0aGUgV2Vic2l0ZSBhbmQgdGhlIFNlcnZpY2VzL1NvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2VkIHRocm91Z2ggaXQgZm9yIHRoZSBwdXJwb3NlIGVudW1lcmF0ZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBhbmQgYWdyZWUgbm90IHRvIHVuZGVydGFrZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj4gYS4gVXNlIG9mIHRoZSBXZWJzaXRlIGFuZCB0aGUgU2VydmljZXMgdG8gdmlvbGF0ZSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSBsYXdzIG9mIGFueSBqdXJpc2RpY3Rpb24gZnJvbSB3aGljaCBZb3UgYWNjZXNzIHRoZSBTZXJ2aWNlcy48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+IGIuIFVzZSB0aGUgU2VydmljZXMgZm9yIGNvbXBldGl0aXZlIGJlbmNobWFya2luZyBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGV2ZWxvcGluZyBhIGNvbXBldGl0aXZlIHByb2R1Y3Qgb3Igc2VydmljZXMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPiBjLiBUbyB1cGxvYWQgb3Igb3RoZXJ3aXNlIGRpc3NlbWluYXRlIGFueSBjb21wdXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXJ1c2VzIG9yIG90aGVyIHNvZnR3YXJlIHRoYXQgbWF5IHRoZSBTb2Z0d2FyZSBvZiBUYW5nbyBFeWU7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPiBkLiBUbyB1bmxhd2Z1bGx5IGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBvdGhlcnMgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBpbiBpbiBhbiB1bmxhd2Z1bCBtYW5uZXI7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG1iLTUgbXMtNVwiPiBlLiBUbyBzb2xpY2l0IG90aGVycyB0byBwZXJmb3JtIG9yIHBhcnRpY2lwYXRlIGluIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmxhd2Z1bCBhY3RzLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiByZXNlbGwsIGFzc2lnbiwgdHJhbnNmZXIsIGRpc3RyaWJ1dGUgb3IgcHJvdmlkZSBvdGhlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhY2Nlc3MgdG8gdGhlIFNlcnZpY2VzOzwvbGk+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IGFja25vd2xlZGdlIHRoYXQgVGFuZ28gRXllIHdpbGwgbm90IGJlIGxpYWJsZSBmb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW55IGluZm9ybWF0aW9uIHRoYXQgaXMgcmVsYXllZCBhbmQgc3RvcmVkIGluIGl0cyBjbG91ZCBzZXJ2ZXJzIHdoaWNoIGlzIGFjY2Vzc2VkIHRocm91Z2ggeW91clxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLiBZb3Ugc2hhbGwgYWx3YXlzIGJlIHJlc3BvbnNpYmxlIGZvciB0aGUgc2FtZSBhdCBhbGwgdGltZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3Mgc3RhdHV0ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZSBjb3VudHJ5IHlvdSBhcmUgYWNjZXNzaW5nIHRoZSBXZWJzaXRlL1NvZnR3YXJlIGFuZCB0aGUgU2VydmljZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbi92aWRlbyBmb290YWdlIHdoaWNoIGlzIHJlbGF5ZWQgdGhyb3VnaCB5b3VyIGNjdHYgY2FtZXJhIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjbG91ZCBzdG9yYWdlIG9mIFRhbmdvIEV5ZS4gPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IGFja25vd2xlZGdlIHRoYXQgdGhlIFNlcnZpY2VzIGhhcyBub3QgYmVlbiBkZXNpZ25lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0byBjb2xsZWN0IG9yIHByb2Nlc3MgYW55IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBhbmQgYWNjb3JkaW5nbHkgeW91IGFncmVlIG5vdCB0byB1c2UgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzIHRvIGNvbGxlY3QsIHByb2Nlc3Mgb3Igc3RvcmUgYW55IHNlbnNpdGl2ZSBwZXJzb25hbCBkYXRhIG9uY2UgeW91IGFjY2VzcyB0aGUgcmVwb3J0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgYnkgVGFuZ28gRXllIGluIHB1cnN1YW5jZSB0byB0aGUgU2VydmljZXMuIFRhbmdvIEV5ZSBzcGVjaWZpY2FsbHkgZGlzY2xhaW0gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYWJpbGl0eSB0aGF0IG1heSByZXN1bHQgZnJvbSB5b3VyIHVzZSBvZiB0aGUgU2VydmljZXMgdG8gY29sbGVjdCwgcHJvY2VzcyBhbmQgc3RvcmUgc2Vuc2l0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFsIGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gbW9uaXRvciB0aGUgdXNlIG9mIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXZWJzaXRlL1NlcnZpY2VzL1NvZnR3YXJlIGJ5IFlvdSB0byBlbnN1cmUgY29tcGxpYW5jZSBvZiB0aGVzZSBTYWFTIFRlcm1zIGFuZCBhcHBsaWNhYmxlIGxhdy5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5JbiB0aGUgZXZlbnQgb2YgdmlvbGF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgbGF3cyBhbmQgcmVndWxhdGlvbnMsIFRhbmdvIEV5ZSBzaGFsbCBoYXZlIHRoZSByaWdodCB0byBpbnZlc3RpZ2F0ZSBzdWNoIGJyZWFjaGVzIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbnMgd2hpY2ggc2hhbGwgaW5jbHVkZSBidXQgbm90IGJlIGxpbWl0ZWQgdG8gcHJvdmlkaW5nIHdhcm5pbmcgdG8gZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBvZmZlbmRlcnMsIHN1c3BlbmRpbmcgYW5kIG9yIGV2ZW4gdGVybWluYXRpbmcgdGhlIFNlcnZpY2VzIGFuZCBhY2Nlc3MgdG8gdGhlIFdlYnNpdGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj42LiBJbnZvaWNpbmc6IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+SW52b2ljZXMgd2lsbCBiZSBpc3N1ZWQgb24gdGhlIGJhc2lzIG9mIHRoZSBudW1iZXIgb2YgZGVwbG95ZWQgc3RvcmVzIGluIGV4aXN0ZW5jZSBvbiB0aGUgaW52b2ljZSBkYXRlIGFuZCBzaGFsbCBiZSBpc3N1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBQYXltZW50IFRlcm1zIGluIHRoZSBjb21tZXJjaWFsIHRlcm1zIGFib3ZlLiBUYW5nbyBFeWUgc2hhbGwgYmlsbCBDdXN0b21lciBmb3IgYXBwbGljYWJsZSB0YXhlcyBhcyBhIHNlcGFyYXRlIGxpbmUgaXRlbSBvbiBlYWNoIGludm9pY2UuIEN1c3RvbWVyIHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYXltZW50IG9mIGFsbCBzYWxlcyBhbmQgdXNlIHRheGVzLCBHb29kcyBhbmQgU2VydmljZXMgdGF4LCBvciBzaW1pbGFyIGNoYXJnZXMgcmVsYXRpbmcgdG8gQ3VzdG9tZXLigJlzIHB1cmNoYXNlIGFuZCB1c2Ugb2YgdGhlIFNlcnZpY2VzLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjcuIFBheW1lbnQ6IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5QYXltZW50IHNoYWxsIGJlIG1hZGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBQYXltZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zIGluIHRoZSBjb21tZXJjaWFsIHRlcm1zIHdoaWNoIHNoYWxsIGJlIGFncmVlZCB0byBzZXBhcmF0ZWx5IGJldHdlZW4gVGFuZ28gRXllIGFuZCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgYW5kIHdoaWNoIHNoYWxsIGJlIHJlYWQgYW5kIGJlIGNvdGVybWlub3VzIHdpdGggdGhlc2UgU2FhUyBUZXJtcyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPihQYXltZW50IFRlcm1zKS48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgb3RoZXJ3aXNlLCBwYXltZW50cyBhcmUgbm9uLXJlZnVuZGFibGUuIEluIHRoZSBldmVudCB0aGUgQ3VzdG9tZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHMgdG8gbWFrZSB0aGUgcGF5bWVudCBhcyBwZXIgdGhlIHBheW1lbnQgdGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBzZW5kIGEgd3JpdHRlbiBub3RpY2UgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsaWVudCB0byBlbnN1cmUgdGhhdCB0aGUgcGF5bWVudCBpcyBtYWRlIHdpdGhpbiAzMCAodGhpcnR5KSBkYXlzICjigJxBZGRpdGlvbmFsIFBlcmlvZOKAnSkgZnJvbSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSBvZiByZWNlaXB0IHN1Y2ggd3JpdHRlbiBub3RpY2UuIElmIHRoZSBjdXN0b21lciBmYWlscyB0byBtYWtlIHRoZSBwYXltZW50IHdpdGhpbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBQZXJpb2QsIHRoZSBhY2Nlc3MgdG8gdGhlIHdlYiBwb3J0YWwgd2lsbCBiZSBibG9ja2VkIGFuZCB0aGUgU2VydmljZXMgc2hhbGwgYmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVuZGVkIDcgKHNldmVuKSBkYXlzIGFmdGVyIHNlbmRpbmcgYSByZW1pbmRlciBlbWFpbCB0byBDdXN0b21lciBmcm9tIHRoZSBleHBpcnkgb2YgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgUGVyaW9kLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlBhcnRpZXMgYWNrbm93bGVkZ2UgdGhhdCB0aW1lIGlzIG9mIHRoZSBlc3NlbmNlIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcGVjdCB0byBwYXltZW50cyByZXF1aXJlZCB1bmRlciB0aGlzIGNsYXVzZS4gSW4gdGhlIGV2ZW50IG9mIGFueSBkZWxheSBpbiBwYXltZW50IGJ5IHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciwgVGFuZ28gRXllIG1heSByZXF1aXJlIHRoZSBDdXN0b21lciB0byBwYXkgVGFuZ28gRXllIGEgbGF0ZSBwYXltZW50IHBlbmFsdHkgZXF1YWwgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHdlbHZlIHBlcmNlbnQgKDEyJSkgcGVyIGFubnVtIG9uIGFsbCBvdXRzdGFuZGluZyBwYXltZW50cy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+OC5JbnRlbGxlY3R1YWwgUHJvcGVydHk8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+QWxsIFRhbmdvIEV5ZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBXZWJzaXRlIGFuZCBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcyB0aGVyZXRvLCBhbmQgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjcmVhdGVkIGJ5IFRhbmdvIEV5ZSBpbiBmdXJ0aGVyYW5jZSB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgb3IgYW55IHdvcmtzLCBwcm9kdWN0cywgZG9jdW1lbnRzLCBtYXRlcmlhbHMgY3JlYXRlZCB1c2luZywgaW5jb3Jwb3JhdGluZywgY29tcHJpc2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbiwgb3IgcmVsYXRpbmcgdG8gc3VjaCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgKOKAnFRhbmdvIEV5ZSBJUOKAnSkgc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaXZlIHByb3BlcnR5IG9mIFRhbmdvIEV5ZSBhbmQvb3IgaXRzIG5vbWluZWVzIG9yIGFmZmlsaWF0ZXMsIGFzIHRoZSBjYXNlIG1heSBiZSwgYW5kIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBzaGFsbCBub3QgaGF2ZSBhbnkgcmlnaHQsIHRpdGxlLCBjbGFpbSBldGMuIHdoYXRzb2V2ZXIgb3ZlciB0aGUgc2FtZS4gTm90aGluZyBjb250YWluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVyZWluIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBhIHRyYW5zZmVyLCBhc3NpZ25tZW50IG9yIGNvbnZleWFuY2UgYnkgVGFuZ28gRXllIHRvIEN1c3RvbWVyIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvd25lcnNoaXAsIGludGVyZXN0IG9yIHRpdGxlIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb3IgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhdHRhY2hlZCB0byB0aGUgVGFuZ28gRXllIElQLiBUaGUgQ3VzdG9tZXIgaXMgb25seSBhdXRob3JpemVkIHRvIHJlY2VpdmUgYSByaWdodCB0byBhY2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFuZ28gRXllIElQIGZvciB0aGUgdGVybSBleHBsaWNpdGx5IGdyYW50ZWQgYnkgVGFuZ28gRXllIHRvIEN1c3RvbWVyIGFuZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3Zpc2lvbnMgb2YgdGhlc2UgU2FhUyBUZXJtcy4gVGhpcyBhdXRob3JpemF0aW9uIGlzIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1zdWItbGljZW5zYWJsZSwgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuIEN1c3RvbWVyIHNoYWxsIG5vdCBoYXZlIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodCB0byBtb2RpZnksIGFkYXB0LCBpbmNvcnBvcmF0ZSwgY3JlYXRlIGFueSBkZXJpdmF0aXZlIHVzaW5nIG9yIGluY29ycG9yYXRpbmcgVGFuZ28gRXllIElQXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluIGFueSBtYW5uZXIgdHJhbnNmZXIsIGVuY3VtYmVyLCBhbGllbmF0ZSwgc2VsbCwgc2hhcmUsIGFzc2lnbiwgbGljZW5zZSBvciBzdWItbGV0IGl0IHRvIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlyZCBwYXJ0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5BcyBiZXR3ZWVuIHRoZSBwYXJ0aWVzLCBDdXN0b21lciByZXRhaW5zIGFsbCByaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byDigJPCoDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmEuIGFsbCByYXcgZGF0YSBnZW5lcmF0ZWQgZnJvbSB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRleHQsIHNvdW5kLCB2aWRlbywgb3IgaW1hZ2UgZmlsZXMsIGJ1dCBleGNsdWRpbmcgYW55IEJ1c2luZXNzIERhdGEgKOKAnEdlbmVyYXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRh4oCdKTsgYW5kwqDCoDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5iLiByYXcgZGF0YSBvd25lZCBieSBhbmQgcmVsYXRpbmcgdG8gdGhlIEN1c3RvbWVyLCBzdWNoIGFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhbnkgaW5mb3JtYXRpb24sIHN0b3JlIGxvY2F0aW9uIGFuZCBkZXRhaWxzIG9mIHRoZSB6b25lcywgZW1wbG95ZWUgaW5mb3JtYXRpb24sIGJ1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRpbmcgYW55IEdlbmVyYXRlZCBEYXRhICjigJxCdXNpbmVzcyAsIHRoYXQgaXMgcHJvdmlkZWQgdG8gVGFuZ28gRXllIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciB0aHJvdWdoIHRoZSBDdXN0b21lcuKAmXMgdXNlIG9mIHRoZSBTb2Z0d2FyZSAodG9nZXRoZXIsIOKAnEN1c3RvbWVyIERhdGHigJ0pLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgaGVyZWJ5IGdyYW50cyB0byBUYW5nbyBFeWUgYSBub24tZXhjbHVzaXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQgdXAgYW5kIHJveWFsdHkgZnJlZSByaWdodCBhbmQgbGljZW5zZSB0byB1c2UgdGhlIEdlbmVyYXRlZCBEYXRhIGZvciAoaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3Zpc2lvbiBvZiBTZXJ2aWNlcyBhbmQgZnVsZmlsbG1lbnQgb2Ygb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBhbmQ7IChpaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92aW5nIHRoZSBTb2Z0d2FyZS7CoDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBDdXN0b21lciBoZXJlYnkgZ3JhbnRzIHRvIFRhbmdvIEV5ZSBhIG5vbi1leGNsdXNpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkd2lkZSwgZnVsbHkgcGFpZCB1cCBhbmQgcm95YWx0eSBmcmVlIHJpZ2h0IGFuZCBsaWNlbnNlIHRvIHVzZSB0aGUgQnVzaW5lc3MgRGF0YSBmb3IgKGkpIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aXNpb24gb2YgU2VydmljZXMgYW5kIGZ1bGZpbGxtZW50IG9mIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXM7IGFuZCAoaWkpIGltcHJvdmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgU29mdHdhcmUuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+Q3VzdG9tZXIgYWdyZWVzIHRvIHByb3ZpZGUgY29tbWVudHMgb3IgZmVlZGJhY2ssIGlmIGFueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG8gVGFuZ28gRXllIHJlZ2FyZGluZyB0aGUgU29mdHdhcmUgb3IgZnV0dXJlIHJlbGVhc2VzLyBkZXZlbG9wbWVudCB0byB0aGUgU29mdHdhcmUgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSBvZiB0aGUgd29yayBjYXJyaWVkIG91dCBkdXJpbmcgdGhpcyBlbmdhZ2VtZW50IHdpdGggdGhlIEN1c3RvbWVyIG9yIGFueSBhbmQgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtub3dsZWRnZSBhbmQgaW5mb3JtYXRpb24gb2YgZ2VuZXJpYyBuYXR1cmUsIGFyaXNpbmcgb3V0IG9mIHVzZSBvZiB0aGUgU29mdHdhcmUgYnkgdGhlIEN1c3RvbWVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGRpc2Nsb3NpbmcgYW55IEN1c3RvbWVyIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBvciBDdXN0b21lciBEYXRhLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBDdXN0b21lciB1bmRlcnRha2VzIHRvIHByb21wdGx5IGluZm9ybSBUYW5nbyBFeWUgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW55IGluZnJpbmdlbWVudCBvZiBUYW5nbyBFeWUgSVAgcmlnaHRzIGJ5IHRoaXJkIHBhcnRpZXMsIGFuZCBzaGFsbCBwZXJtaXQgVGFuZ28gRXllIHRvIGFzc3VtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb2xlIGF1dGhvcml0eSB0byB0YWtlIGFwcHJvcHJpYXRlIGxlZ2FsIGFjdGlvbi4gQ3VzdG9tZXIgc2hhbGwgbm90IG1ha2UgYW55IHN0YXRlbWVudCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24gaW4gcmVsYXRpb24gdG8gc3VjaCBjbGFpbSB3aGljaCBtYXkgcHJlanVkaWNpYWxseSBhZmZlY3QgdGhlIGNoYW5jZXMgb2Ygc2V0dGxlbWVudCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlbnNlIG9mIHN1Y2ggY2xhaW0sIGFuZCBzaGFsbCBwcm92aWRlIGluZm9ybWF0aW9uIGFuZCBhc3Npc3RhbmNlIHJlYXNvbmFibHkgcmVxdWVzdGVkIGluXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGNsYWltIG9yIHN1aXQuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIGhlcmVieSB1bmRlcnRha2VzLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGlyZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWVzIGFjdCBhZ2FpbnN0IHRoZSBDdXN0b21lciBmb3IgYW55IHJlYXNvbiB3aGF0c29ldmVyIGluIHJlbGF0aW9uIHRvIHRoZSBTb2Z0d2FyZSBvciBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFuZ28gRXllIElQLCB0byBwcm92aWRlIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZWlyIHBvc3Nlc3Npb24gYW5kIG90aGVyd2lzZSBkbyBhbmQgZXhlY3V0ZSBhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0cywgdGhpbmdzLCBtYXR0ZXJzIGFuZCBkZWVkcyBhcyBtYXkgYmUgcmVhc29uYWJseSByZXF1aXJlZCBieSB0aGUgQ3VzdG9tZXIsIGZyb20gdGltZSB0byB0aW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNob3cgb3duZXJzaGlwIG9mIHN1Y2ggVGFuZ28gRXllIElQLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5DdXN0b21lciBoZXJlYnkgY29uc2VudHMgYW5kIG9wdHMgaW4gdG8gcmVjZWl2ZSBjb21tdW5pY2F0aW9ucyB0aGF0IFRhbmdvIEV5ZSBtYXkgc2VuZCB2aWEgY2FsbCBvciBtZXNzYWdlIHNlcnZpY2UgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQsIHRvIEN1c3RvbWVyIGluY2x1ZGluZyBpdHMgZW1wbG95ZWVzLCBzdGFmZiBhbmQgb3RoZXIgcmVwcmVzZW50YXRpdmVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj45LiBEYXRhIFByb3RlY3Rpb24gYW5kIFByaXZhY3kgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkVhY2ggUGFydHkgc2hhbGwgYXQgYWxsIHRpbWVzIGNvbXBseSB3aXRoIGl0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmxpZ2F0aW9ucyB1bmRlciBhcHBsaWNhYmxlIHByaXZhY3kgcmVndWxhdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhlIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRhLCBhbmQgQ3VzdG9tZXIgRGF0YSB0aGF0IGlzIGNvbGxlY3RlZCwgc3RvcmVkIGFuZC9vciBwcm9jZXNzZWQgYnkgaXQgaW4gdGhlIGNvdXJzZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtaW5nIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLiBGdXJ0aGVyIGVhY2ggUGFydHkgc2hhbGwgcHJvY2VzcyBzdWNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzcyBEYXRhLCBhbmQgQ3VzdG9tZXIgRGF0YSBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IGZvciB0aGUgcHVycG9zZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgcGVyZm9ybWluZyB0aGVpciByZXNwZWN0aXZlIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+RWFjaCBwYXJ0eSBzaGFsbCB0YWtlIGFwcHJvcHJpYXRlIHRlY2huaWNhbCBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uYWwgbWVhc3VyZXMgYXMgcmVxdWlyZWQgdW5kZXIgYXBwbGljYWJsZSBsYXcgYWdhaW5zdCBhbnkgZGF0YSBicmVhY2gsIHVuYXV0aG9yaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciB1bmxhd2Z1bCBwcm9jZXNzaW5nIG9mIHRoZSBwZXJzb25hbCBkYXRhIG9yIGl0cyBhY2NpZGVudGFsIGxvc3MsIGRlc3RydWN0aW9uIG9yIGRhbWFnZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTAuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcnMgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkVhY2ggUGFydHkgcmVwcmVzZW50cywgd2FycmFudHMgYW5kIGNvdmVuYW50cyB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhdDogKGkpIGl0IGlzIGR1bHkgb3JnYW5pemVkIGFuZCB2YWxpZGx5IGV4aXN0aW5nIGFuZCBpbiBnb29kIHN0YW5kaW5nIHVuZGVyIHRoZSBsYXdzIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGF0ZSBvZiBpdHMgaW5jb3Jwb3JhdGlvbiBvciBmb3JtYXRpb247IChpaSkgaXQgaGFzIHRoZSBmdWxsIHJpZ2h0IGFuZCBhdXRob3JpdHkgdG8gZW50ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGVzZSBTYWFTIFRlcm1zIGFuZCB0aGF0IHRoZXNlIFNhYVMgVGVybXMgY29uc3RpdHV0ZXMgYSBsZWdhbCwgdmFsaWQgYW5kIGJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JsaWdhdGlvbjsgKGlpaSkgdGhlIGV4ZWN1dGlvbiwgZGVsaXZlcnkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZXNlIFNhYVMgVGVybXMgZG9lcyBub3QgYW5kIHdpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbmZsaWN0IHdpdGgsIG9yIGNvbnN0aXR1dGUgYSBicmVhY2ggb3IgZGVmYXVsdCB1bmRlciwgaXRzIGNoYXJ0ZXIgb2Ygb3JnYW5pemF0aW9uLCBvciBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhY3Qgb3Igb3RoZXIgaW5zdHJ1bWVudCB0byB3aGljaCBpdCBpcyBhIHBhcnR5OyAoaXYpIGl0IHdpbGwgY29tcGx5IHdpdGgsIGFuZCB3aWxsIGVuc3VyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGwgb2YgaXRzIHBlcnNvbm5lbCwgdGhpcmQgcGFydHkgYWdlbnRzLCBjb25zdWx0YW50cyBldGMuLCBjb21wbHkgd2l0aCBhbGwgbGF3cyBhbmQgcmVndWxhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSB0byAoaSkgdGhlIHByb3Zpc2lvbiwgb3IgYWNjZXNzIGFuZCB1c2Ugb2YgdGhlIFNvZnR3YXJlOyBhbmQgKGlpKSBwZXJmb3JtYW5jZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGxhd3MgYW5kIHJlZ3VsYXRpb25zIHJlbGF0ZWQgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmFjeSwgZGF0YSBwcm90ZWN0aW9uLCBlbGVjdHJvbmljIGNvbW11bmljYXRpb25zLCBleHBvcnQgYW5kIGNvbmZpZGVudGlhbGl0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgcmVwcmVzZW50cywgd2FycmFudHMgYW5kIGNvdmVuYW50cyB0aGF0IChpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYW5nbyBFeWUgcGVyc29ubmVsIHNoYWxsIHByb3ZpZGUgdGhlIFNlcnZpY2VzIGluIGEgZGlsaWdlbnQgYW5kIHByb2Zlc3Npb25hbCBtYW5uZXIgd2l0aCBkdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZSAoaWkpIFRhbmdvIEV5ZSBJUCBkb2VzIG5vdCBhbmQgd2lsbCBub3QgaW5mcmluZ2UsIG1pc2FwcHJvcHJpYXRlIG9yIG90aGVyd2lzZSB2aW9sYXRlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBwYXJ0eSB3aXRoaW4gdGhlIHRlcnJpdG9yeSBvZiBJbmRpYSBhbmQgb3IgYW55IG90aGVyIGNvdW50cnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaXRzIHJpZ2hzdCBhcmUgcmVnaXN0ZXJlZDsgYW5kIChpaWkpIGFsbCBTZXJ2aWNlcyB0aGF0IGFyZSBwcm92aWRlZCB3aWxsIGJlIGZyZWUgZnJvbSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAga25vd24gbWFsaWNpb3VzIGNvZGUgb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IGludGVudGlvbmFsbHkgZGlzcnVwdCwgZGFtYWdlIG9yIGludGVyZmVyZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSB1c2UgYnkgQ3VzdG9tZXIuIFRhbmdvIEV5ZSBmdXJ0aGVyIHdhcnJhbnRzIGFuZCByZXByZXNlbnRzIHRvIHRoZSBDdXN0b21lciB0aGF0IGl0IGhvbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2lsbCBjb250aW51ZSB0byBob2xkLCBhbnkgYW5kIGFsbCBsaWNlbnNlcywgcGVybWl0cyBvciBvdGhlciBhdXRob3JpemF0aW9ucyByZXF1aXJlZCBieSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSBsYXcgdG8gcGVyZm9ybSB0aGUgU2VydmljZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZXNlIFNhYVMgVGVybXMuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPjxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcQXBwbGljYWJsZSBsYXfigJ08L3NwYW4+IG1lYW5zIGFueSBhcHBsaWNhYmxlIGxhdywgc3RhdHV0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZSwgcmVndWxhdGlvbiwgb3JkaW5hbmNlLCByZXF1aXJlbWVudCwgZGlyZWN0aW9ucywgZ3VpZGVsaW5lcywgYW5ub3VuY2VtZW50IG9yIG90aGVyIGJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uIG9yIHJlcXVpcmVtZW50IG9mIGFueSBnb3Zlcm5tZW50IG9yIHF1YXNpIGdvdmVybm1lbnQ7IGRlcGFydG1lbnQsIGFnZW5jeSBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YWxpdHkgb2YgYW55IGdvdmVybm1lbnQgdGhlcmVvZiwgYW55IGNvdXJ0IG9yIGFyYml0cmFsIHRyaWJ1bmFsIGFwcGxpY2FibGUgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIHVuZGVyIHRoZSByZXB1YmxpYyBvZiBJbmRpYS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VEhFIFNPRlRXQVJFIEFORCBBTllUSElORyBQUk9WSURFRCBJTiBDT05ORUNUSU9OIFdJVEhcclxuICAgICAgICAgICAgICAgICAgICAgICAgVEhFU0UgU2FhUyBURVJNUyBBUkUgUFJPVklERUQg4oCcQVMtSVPigJ0uIEVYQ0VQVCBGT1IgVEhFIEVYUFJFU1MgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTIElOXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRISVMgU0VDVElPTiA2LCBUQU5HTyBFWUUgRE9FUyBOT1QgTUFLRSBBTlkgUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MsIElNUExJRUQgT1JcclxuICAgICAgICAgICAgICAgICAgICAgICAgU1RBVFVUT1JZIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIFFVQUxJVFksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBTWVNURU0gSU5URUdSQVRJT04sIEVSUk9SLUZSRUUsIFVOLUlOVEVSUlVQVElPTiwgU1VQUE9SVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDT1JSRUNUSU9OIE9SIFJFUEFJUiAoVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQpIE9SIE9USEVSV0lTRSBUSEFUIFRBTkdPIEVZRSBTT0ZUV0FSRSBIRVJFVU5ERVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgV0lMTCBPUEVSQVRFIElOIEVWRVJZIENPTUJJTkFUSU9OIE9SIEVOVklST05NRU5UIERFU0lSRUQgQlkgQ1VTVE9NRVIgV0lUSCBBTlkgREFUQSwgREVWSUNFUyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFVURVIgU1lTVEVNUyBBTkQgUFJPR1JBTVMgT0YgSVRTIENIT0lDRSBPUiBUSEFUIFRIRSBSRU1FRFlJTkcgT0YgT05FIFBST0dSQU0gRVJST1IgRE9FUyBOT1RcclxuICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUIElOIFRIRSBPQ0NVUlJFTkNFIE9GIE9USEVSIFBST0dSQU0gRVJST1JTLiBBTEwgU1VDSCBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMgQVJFXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhFUkVCWSBESVNDTEFJTUVELjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGUgQ3VzdG9tZXIgd2FycmFudHMgdGhhdDogPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+IGEuIEN1c3RvbWVyIERhdGEgZG9lcyBub3QgYW5kIHdpbGwgbm90IGluZnJpbmdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaXNhcHByb3ByaWF0ZSBvciBvdGhlcndpc2UgdmlvbGF0ZSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQgcGFydHk7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPmIuIGl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGFueSBzZWN1cml0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2dWxuZXJhYmlsaXRpZXMgYW5kIHRoZSBjb25zZXF1ZW5jZXMgb2Ygc3VjaCB2dWxuZXJhYmlsaXRpZXMgYXJpc2luZyBzb2xlbHkgZnJvbSB0aGUgbmF0dXJlIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIERhdGE7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPiBjLiBpdCBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBFbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcnMgY29tcGx5IHdpdGggYWxsIHJlcXVpcmVtZW50cyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGluIHJlbGF0aW9uIHRvIHRoZSB1c2Ugb2YgdGhlIFNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUpOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj4gZC4gaXQgc2hhbGwgaW1tZWRpYXRlbHkgbm90aWZ5IFRhbmdvIEV5ZSBvZiAoYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW55IGFjY291bnQtcmVsYXRlZCBhYnVzZTsgKGIpIHRoZSB1bmF1dGhvcml6ZWQgZGlzY2xvc3VyZSwgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlaXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCBjcmVkZW50aWFscyBieSBvciB0byBhbnkgdGhpcmQgcGFydHk7IGFuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj4gZS4gaXQgc2hhbGwgbm90LCBhbmQgc2hhbGwgbm90IHBlcm1pdCBhbnkgcGFydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgcGVyc29uIHRvLCBhY2Nlc3Mgb3IgdXNlIHRoZSBTb2Z0d2FyZSBleGNlcHQgYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSB0aGVzZSBTYWFTIFRFUk1TLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXaXRob3V0IGxpbWl0aW5nIHRoZSBnZW5lcmFsaXR5IG9mIHRoZSBmb3JlZ29pbmcsIEN1c3RvbWVyIHNoYWxsIG5vdCwgYW5kIHNoYWxsIG5vdCBwZXJtaXQgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnR5IG9yIHBlcnNvbiB0bzo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy0xMFwiPiAxLiBpbnRlcmZlcmUgd2l0aCBvciBkaXNydXB0IHRoZSBpbnRlZ3JpdHkgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2Ugb2YgdGhlIFNvZnR3YXJlLCBvciBjaXJjdW12ZW50LCBieXBhc3MsIGRlbGV0ZSBvciByZW1vdmUgYW55IGZvcm0gb2YgcHJvdGVjdGlvbiwgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UsIGZ1bmN0aW9uYWxpdHkgb3IgdGVjaG5pY2FsIHJlc3RyaWN0aW9ucyBvciBsaW1pdGF0aW9ucywgb3IgdG8gZW5hYmxlIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgYnkgVGFuZ28gRXllLCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNvZnR3YXJlOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTEwXCI+IDIuIGFjY2VzcyBvciB1c2UgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIFNhYVMgVGVybXMsIGluIGFueSBtYW5uZXIgb3IgZm9yIGFueSBwdXJwb3NlIHRoYXQgdmlvbGF0ZXMgYW55IGFwcGxpY2FibGUgbGF3LCB0aGUgcmlnaHRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIG90aGVycywgaW4gYSB3YXkgdGhhdCBjb3VsZCBoYXJtIHRoZSBzZXJ2aWNlLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTEwXCI+My4gcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUsIGRlLWNvbXBpbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3JlYXRlLCBjb3B5IG9yIHJlcHJvZHVjZSB0aGUgc291cmNlIGNvZGUgb3Igb2JqZWN0IGNvZGUgb2YgdGhlIFNvZnR3YXJlIG9yIHBlcmZvcm0gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb25zICh3aXRob3V0IFRhbmdvIEV5ZeKAmXMgcHJpb3Igd3JpdHRlbiBjb25zZW50KTsgYW5kPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTEuIEN1c3RvbWVy4oCZcyBBY2NvdW50IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVycyBhcmUgZnVsbHkgcmVzcG9uc2libGUgdG8gc2FmZWd1YXJkIHRoZWlyIGFjY2VzcyBjcmVkZW50aWFscyAtIGluY2x1ZGluZyBpbiB0aGUgc2Vuc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvbWJpbmF0aW9uIG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZC48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEyLiBEdXJhdGlvbiwgUmVuZXdhbCBhbmQgVGVybWluYXRpb24gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgaW4gdGhlIHByb3Bvc2FsLCB0aGVzZSBTYWFTIFRlcm1zIHNoYWxsIGNvbnRpbnVlIHRvIGJlIGVmZmVjdGl2ZSBkdXJpbmdcclxuICAgICAgICAgICAgICAgICAgICB0aGVcclxuICAgICAgICAgICAgICAgICAgICBwZXJpb2RcclxuICAgICAgICAgICAgICAgICAgICB0aGUgQ3VzdG9tZXIgdXNlcyBhbmQgb3IgY29udGludWVzIHRvIHVzZSB0aGUgU29mdHdhcmUsIHVubGVzcyB0ZXJtaW5hdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtcyBzZXRcclxuICAgICAgICAgICAgICAgICAgICBvdXRcclxuICAgICAgICAgICAgICAgICAgICBoZXJlaW4uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgT3JkZXIgRm9ybSwgZmVlcyBzaGFsbCBiZSBzdWJqZWN0IHRvIGF1dG9tYXRpYyBpbmNyZW1lbnQgYXQgdGhlIHJhdGUgb2YgNyUgcGVyIGFubnVtIGFmdGVyIGV2ZXJ5IDEyIG1vbnRocy5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVpdGhlciBwYXJ0eSBtYXkgdGVybWluYXRlIHRoZWlyIGJ1c2luZXNzIHJlbGF0aW9uc2hpcCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGltbWVkaWF0ZWx5IHVwb24gYVxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWNoIGJ5IHRoZSBvdGhlciBwYXJ0eSB0aGF0IGhhcyBub3QgYmVlbiBjdXJlZCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2hcclxuICAgICAgICAgICAgICAgICAgICBicmVhY2guXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVpdGhlciBwYXJ0eSBtYXkgYWxzbyB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgdXBvbiB0aGlydHkgKDMwKSBkYXlzIHdyaXR0ZW4gbm90aWNlIHdpdGhvdXRcclxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25pbmcgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uLiBDdXN0b21lciB3aWxsIHBheSBpbiBmdWxsIGZvciB0aGUgU29mdHdhcmUgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbGFzdCBkYXkgb24gd2hpY2ggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgU29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICB3YXMgdXNlZC5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGEpIFVwb24gdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcywgVGFuZ28gRXllIHNoYWxsIGltbWVkaWF0ZWx5IGNlYXNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGIpIFVwb24gdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcywgVGFuZ28gRXllIG1heSBkZWxldGUgdGhlIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzcyBEYXRhIGFuZCBDdXN0b21lciBEYXRhIGNvbGxlY3RlZCwgc3RvcmVkIGFuZC9vciBwcm9jZXNzZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJvdmlkaW5nIHRoZSBTb2Z0d2FyZSB3aXRoaW4gMTUgKGZpZnRlZW4pIGRheXMgb2YgcmVjZWlwdCBvZiBub3RpY2Ugb2YgdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSBJZiBUYW5nbyBFeWUgdGVybWluYXRlcyB0aGVzZSBTYWFTIFRlcm1zIGR1ZSB0byBhIGJyZWFjaCBieSBDdXN0b21lciBvZiBhbnkgb2YgdGhlIHByb3Zpc2lvbnMgY29udGFpbmVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsIHRoZW4gQ3VzdG9tZXIgc2hhbGwgaW1tZWRpYXRlbHkgcGF5IHRvIFRhbmdvIEV5ZSBhbGwgYW1vdW50cyB0aGVuIGR1ZSB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLiBJZiBDdXN0b21lciB0ZXJtaW5hdGVzIHRoZXNlIFNhYVMgVGVybXMgZHVlIHRvIGEgYnJlYWNoIGJ5IFRhbmdvIEV5ZSwgdGhlbiBUYW5nbyBFeWUgc2hhbGwgaW1tZWRpYXRlbHkgcmVwYXkgdG8gQ3VzdG9tZXIgYWxsIHByZS1wYWlkIGFtb3VudHMgZm9yIGFueSB1bnBlcmZvcm1lZCBTZXJ2aWNlcyBzY2hlZHVsZWQgdG8gYmUgZGVsaXZlcmVkIGFmdGVyIHRoZSB0ZXJtaW5hdGlvbiBkYXRlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGQpIFN1YmplY3QgdG8gdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsIHVwb24gaXRzIHRlcm1pbmF0aW9uIGFuZCB1cG9uIHN1YnNlcXVlbnQgd3JpdHRlbiByZXF1ZXN0IGJ5IHRoZSBEaXNjbG9zaW5nIFBhcnR5LCB0aGUgUmVjZWl2aW5nIFBhcnR5IG9mIHRhbmdpYmxlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBzaGFsbCBpbW1lZGlhdGVseSByZXR1cm4gc3VjaCBpbmZvcm1hdGlvbiBvciBkZXN0cm95IHN1Y2ggaW5mb3JtYXRpb24gYW5kIHByb3ZpZGUgd3JpdHRlbiBjZXJ0aWZpY2F0aW9uIG9mIHN1Y2ggZGVzdHJ1Y3Rpb24sIHByb3ZpZGVkIHRoYXQgdGhlIHJlY2VpdmluZyBwYXJ0eSBtYXkgcGVybWl0IGl0cyBsZWdhbCBjb3Vuc2VsIHRvIHJldGFpbiBvbmUgYXJjaGl2YWwgY29weSBvZiBzdWNoIGluZm9ybWF0aW9uIGluIHRoZSBldmVudCBvZiBhIHN1YnNlcXVlbnQgZGlzcHV0ZSBiZXR3ZWVuIHRoZSBwYXJ0aWVzLlxyXG5UaGUgcHJvdmlzaW9ucyByZWxhdGluZyB0byBjb25maWRlbnRpYWxpdHksIGFzIHdlbGwgYXMgZm9yIGxpYWJpbGl0eSwgYXBwbGljYWJsZSBsYXcgYW5kIHNldHRsZW1lbnQgb2YgZGlzcHV0ZXMgc2hhbGwgc3Vydml2ZSB0aGUgZXhwaXJhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBUZXJtaW5hdGlvbiBzaGFsbCBub3QgYWZmZWN0IGFueSByaWdodHMgb3Igb2JsaWdhdGlvbnMgb2YgdGhlIHBhcnRpZXMgaW5jdXJyZWQgcHJpb3IgdG8gdGhlIGRhdGUgb2YgdGVybWluYXRpb24sIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGJldHdlZW4gdGhlIHBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xMy4gRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBpbW1lZGlhdGVseSBjZWFzZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBkZWxldGUgdGhlIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzcyBEYXRhIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIERhdGFcclxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0ZWQsIHN0b3JlZCBhbmQvb3IgcHJvY2Vzc2VkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb3ZpZGluZyB0aGUgU29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICB3aXRoaW4gMTVcclxuICAgICAgICAgICAgICAgICAgICAoZmlmdGVlbikgZGF5cyBvZiByZWNlaXB0IG9mIG5vdGljZSBvZiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBJZiBUYW5nbyBFeWUgdGVybWluYXRlcyB0aGVzZSBTYWFTIFRlcm1zIGR1ZSB0byBhIGJyZWFjaCBieSBDdXN0b21lciBvZiBhbnkgb2YgdGhlIHByb3Zpc2lvbnNcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZWQgdW5kZXIgdGhlc2VcclxuICAgICAgICAgICAgICAgICAgICBTYWFTIFRlcm1zLCB0aGVuIEN1c3RvbWVyIHNoYWxsIGltbWVkaWF0ZWx5IHBheSB0byBUYW5nbyBFeWUgYWxsIGFtb3VudHMgdGhlbiBkdWUgdW5kZXIgdGhlc2UgU2FhU1xyXG4gICAgICAgICAgICAgICAgICAgIFRlcm1zLiBJZlxyXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIHRlcm1pbmF0ZXMgdGhlc2UgU2FhUyBUZXJtcyBkdWUgdG8gYSBicmVhY2ggYnkgVGFuZ28gRXllLCB0aGVuIFRhbmdvIEV5ZSBzaGFsbCBpbW1lZGlhdGVseVxyXG4gICAgICAgICAgICAgICAgICAgIHJlcGF5IHRvXHJcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgYWxsIHByZS1wYWlkIGFtb3VudHMgZm9yIGFueSB1bnBlcmZvcm1lZCBTZXJ2aWNlcyBzY2hlZHVsZWQgdG8gYmUgZGVsaXZlcmVkIGFmdGVyIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uIGRhdGUuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFN1YmplY3QgdG8gdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsIHVwb24gaXRzIHRlcm1pbmF0aW9uIGFuZCB1cG9uIHN1YnNlcXVlbnRcclxuICAgICAgICAgICAgICAgICAgICB3cml0dGVuIHJlcXVlc3QgYnlcclxuICAgICAgICAgICAgICAgICAgICB0aGUgRGlzY2xvc2luZyBQYXJ0eSwgdGhlIFJlY2VpdmluZyBQYXJ0eSBvZiB0YW5naWJsZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gc2hhbGwgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjaFxyXG4gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9yIGRlc3Ryb3kgc3VjaCBpbmZvcm1hdGlvbiBhbmQgcHJvdmlkZSB3cml0dGVuIGNlcnRpZmljYXRpb24gb2Ygc3VjaCBkZXN0cnVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCB0aGF0IHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY2VpdmluZyBwYXJ0eSBtYXkgcGVybWl0IGl0cyBsZWdhbCBjb3Vuc2VsIHRvIHJldGFpbiBvbmUgYXJjaGl2YWwgY29weSBvZiBzdWNoIGluZm9ybWF0aW9uIGluIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50IG9mIGFcclxuICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGRpc3B1dGUgYmV0d2VlbiB0aGUgcGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlIHByb3Zpc2lvbnMgcmVsYXRpbmcgdG8gY29uZmlkZW50aWFsaXR5LCBhcyB3ZWxsIGFzIGZvciBsaWFiaWxpdHksIGFwcGxpY2FibGUgbGF3IGFuZCBzZXR0bGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgb2YgZGlzcHV0ZXNcclxuICAgICAgICAgICAgICAgICAgICBzaGFsbCBzdXJ2aXZlIHRoZSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRlcm1pbmF0aW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvciBvYmxpZ2F0aW9ucyBvZiB0aGUgcGFydGllcyBpbmN1cnJlZCBwcmlvciB0byB0aGUgZGF0ZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGJldHdlZW4gdGhlIHBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTMuIEFjY2VzcyB0byBBbmFseXRpY3MgdmlhIFdlYiBQb3J0YWwgJiBFeGNlbCBSZXBvcnRzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBhbmFseXRpY3MgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGEpIHdlYi1iYXNlZFxyXG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLCBiKSBleGNlbCByZXBvcnRzIHNlbnQgdmlhIGVtYWlsIG9yIEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRyYWluaW5nOiBBbGwg4oCcU29mdHdhcmXigJ0gdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgU2VydmljZXMuIEZvciBhdm9pZGFuY2Ugb2YgZG91YnQsIGl0IGlzIGNsYXJpZmllZCB0aGF0IFRhbmdvIEV5ZSBhZ3JlZXMgdG8gcHJvdmlkZSBzYW1wbGUgZGFzaGJvYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgYW5kIGFycmFuZ2UgZm9yIHRyYWluaW5nIHNlc3Npb25zIHRvIHRoZSBDdXN0b21lciBhcyBtdXR1YWxseSBhZ3JlZWQgYnkgdGhlIFBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPiAtLT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTQuIFRyYWluaW5nIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5BbGwg4oCcU29mdHdhcmXigJ0gdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNlcnZpY2VzLiBGb3IgYXZvaWRhbmNlIG9mIGRvdWJ0LCBpdCBpcyBjbGFyaWZpZWQgdGhhdCBUYW5nbyBFeWUgYWdyZWVzIHRvIHByb3ZpZGUgYSBzYW1wbGUgZGFzaGJvYXJkIGFuZCBhcnJhbmdlIGZvciB0cmFpbmluZyBzZXNzaW9ucyB0byB0aGUgQ3VzdG9tZXIgYXMgbXV0dWFsbHkgYWdyZWVkIGJ5IHRoZSBQYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE1LiBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QWxsIHByb3ByaWV0YXJ5IG9yIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiwgdGVjaG5pY2FsIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgb3Iga25vdy1ob3cgYW5kIGFsbCBvdGhlciBub24tcHVibGljIGluZm9ybWF0aW9uLCBtYXRlcmlhbCBvciBkYXRhIGluIHdoYXRldmVyIGZvcm0gb3IgbW9kZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW11bmljYXRpb24sIHdoaWNoIGlzIGRpc2Nsb3NlZCBieSBhIHBhcnR5ICjigJxEaXNjbG9zaW5nIFBhcnR54oCdKSB0byB0aGUgb3RoZXIgcGFydHkgKOKAnFJlY2VpdmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcnR54oCdKSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNvZnR3YXJlIGFjY2VzcyBhbmQgdXNhZ2Ugd2hldGhlciBtYXJrZWQgYXMg4oCcY29uZmlkZW50aWFs4oCdIG9yIG5vdCBhdFxyXG4gICAgICAgICAgICAgICAgICAgIHRoZSB0aW1lIG9mIGRpc2Nsb3N1cmUsIHNoYWxsIGJlIHRyZWF0ZWQgYXMg4oCcQ29uZmlkZW50aWFsIEluZm9ybWF0aW9u4oCdLiBDb25maWRlbnRpYWwgSW5mb3JtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBzaGFsbCBpbmNsdWRlLCBidXQgbm90IGJlIGxpbWl0ZWQgdG8sIHRoZSB0ZXJtcyBhbmQgcHJpY2luZy9jb21tZXJjaWFsIHRlcm1zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhlIHRlY2huaWNhbCBhbmQgb3RoZXIgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIFNvZnR3YXJlLCBhbnkgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gdGhlIHNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBjb2RlcyBhbmQgY29udGVudCBhcyB3ZWxsIGFzIHRoZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlIGFuZCBjb21wb25lbnRzLCBhbmQgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgb3RoZXIgbm9uLXB1YmxpYyBpbmZvcm1hdGlvbi5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIFJlY2VpdmluZyBQYXJ0eSB1bmRlcnRha2VzOiAoaSkgbm90IHRvIHVzZSBDb25maWRlbnRpYWxcclxuICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBvdGhlcndpc2UgdGhhbiBmb3IgdGhlIHB1cnBvc2UgZm9yIHdoaWNoIGl0IHdhcyBkaXNjbG9zZWQgb3IgdG8gcGVybWl0IHRoZSBSZWNlaXZpbmdcclxuICAgICAgICAgICAgICAgICAgICBQYXJ0eSB0byBleGVyY2lzZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyA7IChpaSkgbm90IHRvIGRpc2Nsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgRGlzY2xvc2luZyBQYXJ0eSwgb3RoZXIgdGhhbiB0b1xyXG4gICAgICAgICAgICAgICAgICAgIHRob3NlIGVtcGxveWVlcywgYWdlbnRzLCBjb250cmFjdG9ycywgc3ViY29udHJhY3RvcnMsIGxpY2Vuc2VlcyBvZiB0aGUgUmVjZWl2aW5nIFBhcnR5LCBpdHNcclxuICAgICAgICAgICAgICAgICAgICBBZmZpbGlhdGVzIG9yIGFueSBvdGhlciBwYXJ0aWVzIHdobyBoYXZlIGEgbmVlZCB0byBrbm93IGl0IGluIG9yZGVyIHRvIGFzc2lzdCB0aGUgUmVjZWl2aW5nIFBhcnR5IGluXHJcbiAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWluZyBpdHMgb2JsaWdhdGlvbnMsIG9yIHRvIHBlcm1pdCB0aGUgUmVjZWl2aW5nIFBhcnR5IHRvIGV4ZXJjaXNlIGl0cyByaWdodHPCoCBhbmQgbGljZW5zZXNcclxuICAgICAgICAgICAgICAgICAgICB1bmRlciB0aGlzIEFncmVlbWVudDsgKGlpaSkgdG8gdGFrZSBhbGwgc3VjaCBzdGVwcyB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8gdGhlIERpc2Nsb3NpbmdcclxuICAgICAgICAgICAgICAgICAgICBQYXJ0eeKAmXMgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLCBhcyBpdCB0YWtlcyB0byBwcm90ZWN0IGl0cyBvd24gY29uZmlkZW50aWFsIG9yIHByb3ByaWV0YXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb2YgYSBzaW1pbGFyIG5hdHVyZSwgd2hpY2ggc3RlcHMgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGVzcyB0aGFuIGEgcmVhc29uYWJsZSBzdGFuZGFyZCBvZlxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmU7IGFuZCBpdikgdG8gcmV0dXJuIHRvIHRoZSBDdXN0b21lciwgb3IgZGVzdHJveSwgb24gcmVxdWVzdCBhbGwgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHRoYXRcclxuICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBkaXNjbG9zZWQgdG8gdGhlbSwgaW5jbHVkaW5nIGFsbCBjb3BpZXMgdGhlcmVvZiBhbmQgdG8gZGVsZXRlIGFsbCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gYVxyXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtcmVhZGFibGUgZm9ybSB0byB0aGUgZXh0ZW50IHByYWN0aWNhbGx5IHBvc3NpYmxlLCBzdWJqZWN0IHRvIGFueSByaWdodHMgb3IgbGljZW5zZXMgZ3JhbnRlZFxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgb2JsaWdhdGlvbnMgaW4gcmVsYXRpb24gdG8gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhlc2UgU2FhUyBUZXJtc8KgIHNoYWxsIG5vdCBhcHBseSB0byBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24sIHdoaWNoIChpKSBoYXMgYmVjb21lIG9yIGJlY29tZXNcclxuICAgICAgICAgICAgICAgICAgICBwdWJsaWNseSBhdmFpbGFibGUgYnkgbWVhbnMgb3RoZXIgdGhhbiBhIGJyZWFjaCBvZiBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbnM7IChpaSkgd2FzIGFscmVhZHlcclxuICAgICAgICAgICAgICAgICAgICBrbm93biB0byB0aGUgUmVjZWl2aW5nIFBhcnR5IHByaW9yIHRvIGRpc2Nsb3N1cmU7IChpaWkpIHRoZSBSZWNlaXZpbmcgUGFydHkgaXMgcmVxdWlyZWQgdG8gZGlzY2xvc2VcclxuICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBjb21wbHkgd2l0aCBhcHBsaWNhYmxlIGxhd3Mgb3IgcmVndWxhdGlvbnMgb3Igd2l0aCBhIGNvdXJ0IG9yIGFkbWluaXN0cmF0aXZlIG9yZGVyOyBvclxyXG4gICAgICAgICAgICAgICAgICAgIChpdikgaXMgaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgYnkgdGhlIFJlY2VpdmluZyBQYXJ0eSB3aXRob3V0IHJlZmVyZW5jZSB0byBvciB1c2Ugb2YgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIG9mIHRoZSBEaXNjbG9zaW5nIFBhcnR5LlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgUmVjZWl2aW5nIFBhcnR5IHNoYWxsIHByb21wdGx5LCBhbmQgaW4gYW55IGNhc2Ugd2l0aGluXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyZWUgKDMpIGRheXMgYWR2aXNlIHRoZSBEaXNjbG9zaW5nIFBhcnR5IGluIHdyaXRpbmcgb2YgYW55IHVuYXV0aG9yaXplZCBkaXNjbG9zdXJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pc2FwcHJvcHJpYXRpb24gb3IgbWlzdXNlIG9mIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBhZnRlciBpdCBiZWNvbWVzIGF3YXJlIG9mIGl0IGFuZCB2aWNlIHZlcnNhLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5JZiBlaXRoZXIgcGFydHkgYmVjb21lcyBhd2FyZSB0aGF0IGl0IHdpbGwgYmUgcmVxdWlyZWQsIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgaXMgbGlrZWx5IHRvIGJlIHJlcXVpcmVkLCB0byBkaXNjbG9zZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gY29tcGx5IHdpdGggYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIGxhd3Mgb3IgcmVndWxhdGlvbnMgb3Igd2l0aCBhIGNvdXJ0IG9yIGFkbWluaXN0cmF0aXZlIG9yZGVyLCBpdCBzaGFsbCwgdG8gdGhlIGV4dGVudCBpdCBpcyBsYXdmdWxseVxyXG4gICAgICAgICAgICAgICAgICAgIGFibGUgdG8gZG8gc28sIHByaW9yIHRvIGFueSBzdWNoIGRpc2Nsb3N1cmUgbm90aWZ5IHRoZSBvdGhlciBwYXJ0eSwgYW5kIGNvbXBseSB3aXRoIHRoZSBvdGhlclxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnR54oCZcyBpbnN0cnVjdGlvbnMgdG8gcHJvdGVjdCB0aGUgY29uZmlkZW50aWFsaXR5IG9mIHRoZSBpbmZvcm1hdGlvbi5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE2LiBJbmRlbW5pdHkgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBhdmFpbGFibGUgaW4gbGF3IG9yIHVuZGVyIGVxdWl0eSwgZWFjaCBwYXJ0eSBoZXJlYnkgYWdyZWVzIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGVuc2F0ZSwgaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgaGFybWxlc3MgdGhlIG90aGVyLCBpdHMgYWZmaWxpYXRlcywgZGlyZWN0b3JzLCBzaGFyZWhvbGRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgb2ZmaWNlcnMgYW5kIGVtcGxveWVlcyBhbmQgYWdlbnRzLCBmcm9tIGFuZCBhZ2FpbnN0IGFueSBhbmQgYWxsIGxvc3NlcywgbGlhYmlsaXRpZXMsIGRhbWFnZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaWNpZW5jaWVzLCBkZW1hbmRzLCBjbGFpbXMgKGluY2x1ZGluZyB0aGlyZCBwYXJ0eSBjbGFpbXMpLCBhY3Rpb25zLCBqdWRnbWVudHMgb3IgY2F1c2VzIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBhc3Nlc3NtZW50cywgaW50ZXJlc3QsIHBlbmFsdGllcyBhbmQgb3RoZXIgY29zdHMgb3IgZXhwZW5zZXMgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcykgYmFzZWQgdXBvbiwgYXJpc2luZyBvdXQgb2YsIG9yIGluIHJlbGF0aW9uIHRvIG9yIG90aGVyd2lzZVxyXG4gICAgICAgICAgICAgICAgICAgIGluIHJlc3BlY3Qgb2YgKGkpIGFueSBicmVhY2ggb2YgaXRzIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgOyBvciAoaWkpIGFueSB3aWxsZnVsXHJcbiAgICAgICAgICAgICAgICAgICAgbWlzY29uZHVjdCwgZnJhdWQsIG9yIHdyb25nZnVsIG9yIG5lZ2xpZ2VudCBhY3Qgb3Igb21pc3Npb24gb2YgYSBQYXJ0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEluIG5vIGV2ZW50IHNoYWxsIGVpdGhlciBQYXJ0eSBiZSBsaWFibGUgdG8gdGhlIG90aGVyIGZvciBhbnkgaW5kaXJlY3QsIGluY2lkZW50YWwsIHB1bml0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4ZW1wbGFyeSwgc3BlY2lhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIG9yIGRhbWFnZXMgZm9yIGxvc3Mgb2YgcHJvZml0cywgcmV2ZW51ZSwgd2hldGhlciBpbiBhblxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbiBpbiBjb250cmFjdCBvciB0b3J0LCBvciBvdGhlcndpc2UgKGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyDigJxJbmRpcmVjdCBMb3NzZXPigJ0pIGV2ZW4gaWZcclxuICAgICAgICAgICAgICAgICAgICBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFYWNoIFBhcnR54oCZcyBsaWFiaWxpdHkgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBicmVhY2ggb2YgYW55IGRpcmVjdCBhbmQgYWN0dWFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlhYmlsaXRpZXMsIGNvc3RzLCBsb3NzZXMsIGRhbWFnZXMsIHN1aXRzLCBwcm9jZWVkaW5ncywgY29zdHMsIGV4cGVuc2VzIG9yIGxpYWJpbGl0aWVzIHN1ZmZlcmVkIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jdXJyZWQgZHVlIHRvIHJlc3VsdGluZyBkdWUgdG8gY2xhaW1zIGZvciBicmVhY2ggb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGEgUGFydHkgb3IgdGhpcmRcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0eSwgYnJlYWNoIG9mIGNvbmZpZGVudGlhbGl0eSBvYmxpZ2F0aW9uLCBkYXRhIGJyZWFjaCwgYnJlYWNoIG9mIGRhdGEgcHJpdmFjeSwgZnJhdWQsIHdpbGxmdWxcclxuICAgICAgICAgICAgICAgICAgICBuZWdsaWdlbmNlLCBncm9zcyBtaXNjb25kdWN0IG9yIGJyZWFjaCBvZiBhcHBsaWNhYmxlIGxhd3Mgc2hhbGwgaW4gbm8gZXZlbnQgZXhjZWVkIHRoZSBhbm51YWwgdG90YWxcclxuICAgICAgICAgICAgICAgICAgICBwdXJjaGFzZSBwcmljZSBwYWlkIHB1cnN1YW50IHRvIGdyYW50IG9mIGFjY2VzcyBhbmQgdXNhZ2Ugb2YgdGhlIFNlcnZpY2VzL1NvZnR3YXJlIGJ5IHRoZSBDdXN0b21lci5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE3LiBGb3JjZSBNYWpldXJlIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlIFBhcnRpZXMgaXMgbm90IHJlc3BvbnNpYmxlIG5vciBsaWFibGUgZm9yIGFueSBkZWxheXMgb3IgZmFpbHVyZXMgaW4gcGVyZm9ybWFuY2UgZnJvbSBhbnlcclxuICAgICAgICAgICAgICAgICAgICBjYXVzZSBiZXlvbmQgaXRzIGNvbnRyb2wsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIGFjdHMgb2YgR29kLCBjaGFuZ2VzIHRvIGxhdyBvciByZWd1bGF0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICBlbWJhcmdvZXMsIHdhciwgdGVycm9yaXN0IGFjdHMsIGFjdHMgb3Igb21pc3Npb25zIG9mIHRoaXJkIHBhcnR5IHRlY2hub2xvZ3kgcHJvdmlkZXJzLCByaW90cywgZmlyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZWFydGhxdWFrZXMsIGZsb29kcywgcG93ZXIgYmxhY2tvdXRzLCBzdHJpa2VzLCB3ZWF0aGVyIGNvbmRpdGlvbnMsIHBhbmRlbWljLCBlcGlkZW1pYywgZ292ZXJubWVudFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2tkb3ducyBvciBhbnkgb3RoZXIgdW5mb3Jlc2VlYWJsZSBldmVudCBiZXlvbmQgaXRzIGNvbnRyb2wgKGhlcmVpbmFmdGVyIGNvbGxlY3RpdmVseSByZWZlcnJlZCB0b1xyXG4gICAgICAgICAgICAgICAgICAgIGFzIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcRm9yY2UgTWFqZXVyZSBFdmVudOKAnSk8L3NwYW4+LiBVcG9uIG9jY3VycmVuY2Ugb2YgYW55IEZvcmNlIE1hamV1cmUgRXZlbnQsIGVpdGhlciBQYXJ0eSBzaGFsbCBnaXZlXHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWNlIHRvIHRoZSBvdGhlciBwYXJ0eSBvZiBpdHMgaW5hYmlsaXR5IHRvIHBlcmZvcm0gb3Igb2YgZGVsYXkgaW4gY29tcGxldGluZyBpdHMgb2JsaWdhdGlvbnMgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgbXVzdCBhY3QgZGlsaWdlbnRseSB0byByZW1lZHkgdGhlIGNhdXNlIGFuZCByZXN0b3JlIHBlcmZvcm1hbmNlLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgV2hlcmUgRm9yY2UtTWFqZXVyZSBFdmVudCBjb250aW51ZXMgZm9yIGEgcGVyaW9kIG1vcmUgdGhhbiBTaXh0eSAoNjApIGNvbnRpbnVvdXMgZGF5cywgdGhlbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICBlZmZlY3RlZCBQYXJ0eSBzaGFsbCBoYXZlIHRoZSByaWdodCB0byBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgdGhlc2UgU2FhUyBUZXJtcyBBZ3JlZW1lbnQgYnkgcHJvdmlkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgYSB3cml0dGVuIG5vdGljZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTguIE1pc2NlbGxhbmVvdXM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBUaGVzZSBTYWFTIFRlcm1zIGlzIGRyYXduIHVwIGluIEVuZ2xpc2gsIHdoaWNoIGxhbmd1YWdlIHNoYWxsIGdvdmVybiBhbGwgZG9jdW1lbnRzLCBub3RpY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZXRpbmdzLCBwcm9jZWVkaW5ncyBhbmQgcHJvY2Vzc2VzIHJlbGF0aXZlIHRoZXJldG8uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vdGhpbmcgaW4gdGhlc2UgU2FhUyBUZXJtcyBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhIGpvaW50IHZlbnR1cmUsIGFnZW5jeSwgcGFydG5lcnNoaXAsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3QgZ3JvdXBpbmcgb3IgYW55IG90aGVyIGtpbmQgb2YgZm9ybWFsIGJ1c2luZXNzIGdyb3VwaW5nIG9yIGVudGl0eSBiZXR3ZWVuIHRoZSBQYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBObyByaWdodHMgb3Igb2JsaWdhdGlvbnMgb2YgdGhlIFBhcnRpZXMgYXJpc2luZyBmcm9tIHRoZXNlIFNhYVMgVGVybXMgbWF5IGJlIGFzc2lnbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Yi1jb250cmFjdGVkLCBvciB0cmFuc2ZlcnJlZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgdGhlIG90aGVyIHBhcnR54oCZc1xyXG4gICAgICAgICAgICAgICAgICAgIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiBJbiBjYXNlIG9mIGNvbmZsaWN0IHRlcm1zIGJldHdlZW4gdGhlc2UgU2FhUyBUZXJtcyBhbmQgT3JkZXIgRm9ybSwgdGhlIE9yZGVyIEZvcm0gd2lsbCBwcmV2YWlsLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLiBUaGVzZSBTYWFTIFRlcm1zIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIEluZGlhLCBhbmQgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgUGFydGllcyBoZXJlYnkgYWdyZWUgdG8gaXJyZXZvY2FibHkgc3VibWl0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgb2YgTmV3IERlbGhpXHJcbiAgICAgICAgICAgICAgICAgICAgaW4gcmVzcGVjdCBvZiBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicm93IGctMCBtYi0wIGJnLXRlcm1zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkIGZvcm0tY2hlY2staW5saW5lIFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cIiFlbmFibGVBZ3JlZVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHJlcXVpcmVkIG5hbWU9XCJ0b2NcIiB2YWx1ZT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZXRlcm1zKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctYm9sZCB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0c2l6ZSBtdC0zXCI+SSBhZ3JlZSB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMuPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhdGVybXNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxnIGJ0bi1wcmltYXJ5IG1zLTE1IG1lLTUgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwiZW50ZXJwcmlzZWFjdGl2YXRlKClcIj5cclxuICAgICAgICAgICAgU2lnbiBVcFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgbXQtMTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxnIHRleHQtbm93cmFwIGJ0bi1zZXQgbWUtNVwiIChjbGljayk9XCJwcmV2U3RlcCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDE1TDggMTBMMTMgNVwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPiBQcmV2aW91c1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwib3ZlcmxheVwiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIiAqbmdJZj1cInNob3d2YWx1ZVwiPlxyXG5cdDxkaXYgY2xhc3M9XCJwb3B1cFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuXHRcdDxoMSBjbGFzcz1cImEtby1pXCI+VmVyaWZpY2F0aW9uIENvZGU8L2gxPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cInN1Yi1hb2lcIj5BbiBPVFAgaGFzIGJlZW4gc2VudCB0byB5b3VyIG1haWwuIFBsZWFzZSBjaGVjayAmIHN1Ym1pdC48L2g1PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdHAtY29udGFpbmVyIGQtZmxleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3RwLWlucHV0IGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLW90cC1pbnB1dCAjbmdPdHBJbnB1dCAob25JbnB1dENoYW5nZSk9XCJvbk90cENoYW5nZSgkZXZlbnQpXCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiIGNsYXNzPVwidmVyaWZpY2F0aW9uLWNvZGVcIiBwbGFjZWhvbGRlcj1cIjBcIiBcclxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInsgbGVuZ3RoOiA0ICxhbGxvd051bWJlcnNPbmx5OnRydWV9XCI+PC9uZy1vdHAtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpbnZhbGlkT3RwXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciB0ZXh0LWRhbmdlclwiID5cclxuICAgICAgICAgICAgSW52YWxpZCBPVFAgIVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJyZXNlbmRcIiBjbGFzcz1cInNtYWxsX2xnIGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2VuZE9UUCgpXCI+PGI+UmVzZW5kIE9UUDwvYj48L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIXJlc2VuZFwiIGNsYXNzPVwic21hbGxfbGJsIFwiID5SZXNlbmQgT1RQICgge3tjb3VudGVyXHJcbiAgICAgICAgICAgICB9fSApPC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tcHJpbWFyeSBtZS01IHctMTAwIHRleHQtbm93cmFwXCIgKGNsaWNrKT1cIm90cHN1Ym1pdCgpXCI+XHJcbiAgICAgICAgICAgICAgICBTdWJtaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuIl19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcDMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1zaWdudXAvc3RlcC9zdGVwMy9zdGVwMy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hdXRoL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hdXRoLXNpZ251cC9zdGVwL3N0ZXAzL3N0ZXAzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFnQjNDLE1BQU0sT0FBTyxjQUFjO0lBd0RoQjtJQUFnQztJQUFpQztJQUF1QjtJQUE4QjtJQUNySDtJQUFnQztJQUFtQztJQXhEN0UsVUFBVSxHQUFXLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtJQUMvQyxRQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsd0JBQXdCO0lBQ25ELFNBQVMsR0FBWSxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7SUFDbkQsVUFBVSxHQUFZLEtBQUssQ0FBQyxDQUFDLDBCQUEwQjtJQUN2RCxxQkFBcUIsQ0FBUztJQUM5QixXQUFXLEdBQVcsS0FBSyxDQUFBO0lBQzNCLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0Msd0NBQXdDO0lBQ3hDLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFF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QUksSUFBSSxDQUFBO1NBQzNCO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUE7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzlCLENBQUM7dUdBaFJZLGNBQWM7MkZBQWQsY0FBYyw4SkNsQjNCLG9pdkRBOHFCQTs7MkZENXBCYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7cVJBZ0RJLGFBQWE7c0JBQXJDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb252ZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbnZlcnNpb24uc2VydmljZSc7XHJcblxyXG5cclxuaW50ZXJmYWNlIElucHV0U3R5bGVzIHtcclxuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7IC8vIERlZmluZSBrZXktdmFsdWUgcGFpcnMgd2hlcmUga2V5cyBhcmUgc3RyaW5ncyBhbmQgdmFsdWVzIGFyZSBzdHJpbmdzXHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3RlcDMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwMy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3N0ZXAzLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RlcDNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7IC8vIEluaXRpYWwgaW5wdXQgdmFsdWVcclxuICBpc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIGZvciBhY3RpdmUgc3RhdGVcclxuICBpc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyBmb3IgaG92ZXIgc3RhdGVcclxuICBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgZm9yIGRpc2FibGVkIHN0YXRlXHJcbiAgYXV0aGxvY2FsU3RvcmFnZVRva2VuOiBzdHJpbmc7XHJcbiAgZW5hYmxlQWdyZWU6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgb25Nb3VzZUVudGVyKCkge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIG1vdXNlIGxlYXZlIGV2ZW50XHJcbiAgb25Nb3VzZUxlYXZlKCkge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcclxuICB9XHJcbiAgICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgaW5wdXQgY2hhbmdlIGV2ZW50XHJcbiAgICBvbklucHV0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGdldCBpbnB1dCBzdHlsZXMgZHluYW1pY2FsbHlcclxuICBnZXRJbnB1dFN0eWxlcygpOiBJbnB1dFN0eWxlcyB7XHJcbiAgICBsZXQgc3R5bGVzOiBJbnB1dFN0eWxlcyA9IHt9OyAvLyBEZWZpbmUgc3R5bGVzIG9iamVjdCB3aXRoIHR5cGUgSW5wdXRTdHlsZXNcclxuICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSAnYmx1ZSc7IC8vIEJvcmRlciBjb2xvciB3aGVuIGlucHV0IGlzIGFjdGl2ZVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzSG92ZXJlZCkge1xyXG4gICAgICBzdHlsZXNbJ2JvcmRlci1jb2xvciddID0gJ2dyZWVuJzsgLy8gQm9yZGVyIGNvbG9yIHdoZW4gaW5wdXQgaXMgaG92ZXJlZFxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgc3R5bGVzWydib3JkZXItY29sb3InXSA9ICcjY2NjJzsgLy8gQm9yZGVyIGNvbG9yIHdoZW4gaW5wdXQgaXMgZGlzYWJsZWRcclxuICAgICAgc3R5bGVzWydjb2xvciddID0gJyM5OTknOyAvLyBUZXh0IGNvbG9yIHdoZW4gaW5wdXQgaXMgZGlzYWJsZWRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSAnI2NjYyc7IC8vIERlZmF1bHQgYm9yZGVyIGNvbG9yXHJcbiAgICAgIHN0eWxlc1snY29sb3InXSA9ICcjMzMzJzsgLy8gRGVmYXVsdCB0ZXh0IGNvbG9yXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG4gIH1cclxuICBwYW5lbE9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIHRlcm1zYW5kY29uZGl0aW9uOiBhbnk7XHJcbiAgdHlwZTogYW55O1xyXG4gIGFjY291bnREYXRhOiBhbnk7XHJcbiAgdGVybXM6IGFueTtcclxuICBpZHZhbHVlOiBhbnk7XHJcbiAgZW1haWw6IGFueTtcclxuICBzaG93dmFsdWU6IGJvb2xlYW4gPWZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ25nT3RwSW5wdXQnKSBuZ090cElucHV0UmVmOiBhbnk7XHJcbiAgY291bnRlcjogbnVtYmVyO1xyXG4gIHRpY2s6IG51bWJlcjtcclxuICByZXNlbmQ6IGJvb2xlYW4gPXRydWU7XHJcbiAgY291bnREb3duOiBhbnk7XHJcbiAgb3RwOiBhbnk7XHJcbiAgYWJvdXRGb3JtRGF0YTogYW55O1xyXG4gIHByaWNpbmdGb3JtRGF0YTogYW55O1xyXG4gIHJldHVyblVybDogYW55O1xyXG4gIGludmFsaWRPdHA6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgc3Vic2NyaXB0aW9uczpTdWJzY3JpcHRpb25bXSA9IFtdXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBhdXRoU2VydmljZTpBdXRoU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6Um91dGVyLCBwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGNkOkNoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIHRvYXN0U2VydmljZTpUb2FzdFNlcnZpY2UsIHByaXZhdGUgc2V0dGVyc2VydmljZTogQ29udmVyc2lvblNlcnZpY2UsXHJcbil7XHJcbiAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgdGhpcy5ncy5lbnZpcm9ubWVudC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgaWYgKGVudikge1xyXG4gICAgICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbiA9IGAke2Vudi5hcHBWZXJzaW9ufS0ke2Vudi5VU0VSREFUQV9LRVl9YDtcclxuICAgIH1cclxuICB9KVxyXG4gIClcclxuXHJcbiAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hdXRoU2VydmljZS5hYm91dEZvcm1EYXRhLnN1YnNjcmliZSgoZGF0YSk9PntpZihkYXRhKXt0aGlzLmFib3V0Rm9ybURhdGEgPSBkYXRhfX0pKVxyXG4gIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYXV0aFNlcnZpY2UucHJpY2luZ0Zvcm1EYXRhLnN1YnNjcmliZSgoZGF0YSk9PntpZihkYXRhKXt0aGlzLnByaWNpbmdGb3JtRGF0YSA9IGRhdGF9fSkpXHJcbn1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pPT57XHJcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vIGdldCByZXR1cm4gdXJsIGZyb20gcm91dGUgcGFyYW1ldGVycyBvciBkZWZhdWx0IHRvICcvJ1xyXG4gIHRoaXMucmV0dXJuVXJsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sncmV0dXJuVXJsJy50b1N0cmluZygpXSB8fCAnLyc7ICAgICAgXHJcbn1cclxuICB1cGRhdGV0ZXJtcyhldnQ6IGFueSkge1xyXG4gICAgdGhpcy50ZXJtcyA9IGV2dC50YXJnZXQuY2hlY2tlZFxyXG4gIH1cclxuXHJcbiAgZW50ZXJwcmlzZWFjdGl2YXRlKCl7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgbmFtZTp0aGlzLmFib3V0Rm9ybURhdGE/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==