ng-easycommerce-v18 0.1.5 → 0.2.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.
Files changed (24) hide show
  1. package/assets/ec-i18n/es.json +6 -1
  2. package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +5 -9
  3. package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +3 -3
  4. package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +3 -3
  5. package/esm2022/lib/ec-components/auth-ec/index.mjs +2 -1
  6. package/esm2022/lib/ec-components/auth-ec/password-reset-ec/password-reset-ec.component.mjs +105 -0
  7. package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +3 -3
  8. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +7 -2
  9. package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +27 -16
  10. package/esm2022/lib/ec-components/sidebar-ec/sidebar-ec.component.mjs +5 -1
  11. package/esm2022/lib/ec-services/auth.service.mjs +7 -1
  12. package/esm2022/lib/ec-services/cart.service.mjs +51 -32
  13. package/esm2022/lib/ec-services/checkout.service.mjs +2 -1
  14. package/fesm2022/ng-easycommerce-v18.mjs +210 -74
  15. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  16. package/lib/ec-components/account-ec/order-ec/order-ec.component.d.ts +1 -2
  17. package/lib/ec-components/auth-ec/index.d.ts +1 -0
  18. package/lib/ec-components/auth-ec/password-reset-ec/password-reset-ec.component.d.ts +29 -0
  19. package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +2 -0
  20. package/lib/ec-components/related-products-ec/related-products-ec.component.d.ts +4 -2
  21. package/lib/ec-components/sidebar-ec/sidebar-ec.component.d.ts +1 -0
  22. package/lib/ec-services/auth.service.d.ts +2 -0
  23. package/lib/ec-services/cart.service.d.ts +8 -7
  24. package/package.json +1 -1
@@ -69,6 +69,7 @@ export class AuthService {
69
69
  channelApi = this._apiConsts.CHANNEL;
70
70
  tokenApi() { return this.shopApi + 'login_check'; }
71
71
  recoverPasswordApi() { return `${this.shopApi}${this.channelApi}/request-password-reset`; }
72
+ resetPasswordApi = (token) => `${this.shopApi}${this.channelApi}/password-reset/${token}`;
72
73
  confirmAccountApi(token) { return `${this.shopApi}${this.channelApi}/verify-account?token=${token}`; }
73
74
  registerApi() { return `${this.shopApi}${this.channelApi}/register`; }
74
75
  registerWholesalerApi() { return `${this.shopApi}${this.channelApi}/register-wholesaler`; }
@@ -302,6 +303,11 @@ export class AuthService {
302
303
  }
303
304
  return false;
304
305
  }
306
+ passwordReset = (new_password, token) => {
307
+ const data = { password: { first: new_password, second: new_password } };
308
+ console.log(this.resetPasswordApi(token), data);
309
+ return this._connection.put(this.resetPasswordApi(token), data);
310
+ };
305
311
  /**
306
312
  * Envia la solicitud para cambiar la contraseña.
307
313
  * @param email email del solicitante.
@@ -449,4 +455,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
449
455
  providedIn: 'root'
450
456
  }]
451
457
  }], ctorParameters: () => [] });
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUNwRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ2YsYUFBYSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNoRSxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsR0FBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEUsVUFBVSxHQUF3QixNQUFNLENB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Q0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQzt3R0F2YlEsV0FBVzs0R0FBWCxXQUFXLGNBRlgsTUFBTTs7NEZBRU4sV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVXNlclJvbGVUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2F1dGguc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuLyoqXHJcbiAqIFNlcnZpY2lvIGRlIGF1dGVudGlmaWNhY2nDs24gZGVsIHVzdWFyaW8gZW4gbGEgcGxhdGFmb3JtYS5cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuXHRwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSlcclxuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25zdGFudHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9hcGlDb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYXV0aFN0b3JhZ2U6IEF1dGhTdG9yYWdlU2VydmljZSA9IGluamVjdChBdXRoU3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuXHQvLyBDb250YW50ZXMgcGFyYSBlbCBzdG9yYWdlLlxyXG5cdHByaXZhdGUgcmVhZG9ubHkgSldUX1RPS0VOID0gJ0pXVF9UT0tFTidcclxuXHRwcml2YXRlIHJlYWRvbmx5IFJFRlJFU0hfVE9LRU4gPSAnUkVGUkVTSF9UT0tFTidcclxuXHRwcml2YXRlIHJlYWRvbmx5IEVYUElSQVRFU19JTiA9ICdFWFBJUkFURVNfSU4nXHJcblx0cHJpdmF0ZSByZWFkb25seSBVU0VSID0gJ1VTRVInXHJcblx0cHJpdmF0ZSByZWFkb25seSBNQUlMID0gJ21haWwnXHJcblx0cHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTCA9ICdDSEFOTkVMJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NRVIgPSAnQ1VTVE9NRVInXHJcblx0cHJpdmF0ZSByZWFkb25seSBDSEFOTkVMU0VMTEVSID0gJ0NIQU5ORUxTRUxMRVInXHJcblxyXG5cdHByaXZhdGUgY2hhbm5lbHNVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxyXG5cdHB1YmxpYyBjaGFubmVscyQgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuXHRwcml2YXRlIF9jaGFubmVsJCA9IHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmdldENoYW5uZWwoKVxyXG5cdHByaXZhdGUgX3VzZXJJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXIgfCBudWxsPihudWxsKVxyXG5cdHByaXZhdGUgX2xvZ2dlZEluU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblx0cHVibGljIGxvZ2dlZEluJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvZ2dlZEluU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIF9sb2dnaW5nSW5TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRwdWJsaWMgbG9nZ2luZ0luJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvZ2dpbmdJblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgaW5kaWNhciBzaSB1biBjYW5hbCBjYW1iaW8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfYWN0aXZlQ2hhbm5lbENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKlxyXG5cdCAqIEd1YXJkYSBsb3MgZGF0b3MgZGVsIHVzdWFyaW9cclxuXHQgKi9cclxuXHRwcml2YXRlIF91c2VyOiBVc2VyIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBfY3VzdG9tZXIgPSBudWxsO1xyXG5cdC8qKlxyXG5cdCAqIEd1YXJkYSBsb3MgZGF0b3MgZGVsIGNhbmFsXHJcblx0ICovXHJcblx0cHVibGljIGNoYW5uZWw6IGFueSA9IFtdXHJcblx0cHVibGljIGNoYW5uZWxzOiBhbnlbXSA9IFtdXHJcblx0LyoqXHJcblx0ICogVXRpbGl6YWRvIHBhcmEgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgdGllbmUgcXVlIHJlZGlyZWNjaW9uYXJcclxuXHQgKiBsYSBwYWdpbmEgdHJhcyB1biBldmVudG8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfaG9tZVJlc29sdmVyOiBhbnk7XHJcblx0LyoqXHJcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB0b2tlbiBkZSB1c3VhcmlvIHVuYSB2ZXogbG9ndWVhZG9cclxuXHQgKi9cclxuXHRwcml2YXRlIF90b2tlblNpZ25hbCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuXHQvKipcclxuXHQgKiBTaWduYWwgcGFyYSBndWFyZGFyIGVsIHVzdWFyaW9cclxuXHQgKi9cclxuXHRwcml2YXRlIF91c2VyU2lnbmFsID0gc2lnbmFsPFVzZXIgfCBudWxsPihudWxsKTtcclxuXHQvL0FQSXNcclxuXHRwcml2YXRlIHNob3BBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5TSE9QX0FQSV9VUkxcclxuXHRwcml2YXRlIGNoYW5uZWxBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMXHJcblx0cHJpdmF0ZSB0b2tlbkFwaSgpIHsgcmV0dXJuIHRoaXMuc2hvcEFwaSArICdsb2dpbl9jaGVjaycgfVxyXG5cdHByaXZhdGUgcmVjb3ZlclBhc3N3b3JkQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5zaG9wQXBpfSR7dGhpcy5jaGFubmVsQXBpfS9yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0YCB9XHJcblx0cHJpdmF0ZSBjb25maXJtQWNjb3VudEFwaSh0b2tlbjogc3RyaW5nKSB7IHJldHVybiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3ZlcmlmeS1hY2NvdW50P3Rva2VuPSR7dG9rZW59YCB9XHJcblx0cHJpdmF0ZSByZWdpc3RlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXJgIH1cclxuXHRwcml2YXRlIHJlZ2lzdGVyV2hvbGVzYWxlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXItd2hvbGVzYWxlcmB9XHJcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXHJcblx0XHJcblx0cHVibGljIHdpbmRvdz86V2luZG93O1xyXG5cdHB1YmxpYyBsb2NhbFN0b3JhZ2U/OlN0b3JhZ2U7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHR0aGlzLndpbmRvdyA9IHdpbmRvd1xyXG5cdFx0XHR0aGlzLmxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9hZFRva2VuRnJvbVN0b3JhZ2UoKTtcclxuXHRcdHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5fbG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIExvZ3VlYSBhbCB1c3VhcmlvIGVuIGxhIGFwbGljYWNpw7NuLlxyXG5cdCAqIEBwYXJhbSB1c2VyIGRhdG9zIGRlbCB1c3VhcmlvXHJcblx0ICogQHBhcmFtIHdpdGhSb2xlcyByb2xlcyBkZWwgdXN1YXJpb1xyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGxvZ2luKHVzZXI6IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9LCB3aXRoUm9sZXM6IFVzZXJSb2xlVHlwZVtdID0gW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0dGhpcy5fY2hhbm5lbCQuc3Vic2NyaWJlKGNoID0+IHRoaXMuY2hhbm5lbCA9IGNoKTtcclxuXHRcdHRoaXMuY2hhbm5lbHMkLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dXNlciA9IHsuLi51c2VyLCAuLi50aGlzLmxvZ2luRXh0cmFEYXRhKCkgfVxyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLnRva2VuQXBpKCksIHVzZXIpLnBpcGUoXHJcblx0XHRcdG1hcCgocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5jaGFubmVsQWNjZXNzUGVybWlzc2lvbih7IC4uLnVzZXIsIC4uLnJlcyB9KSAmJiB0aGlzLmlzQWxsb3dlZFJvbGUod2l0aFJvbGVzLCByZXMudHlwZSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuZG9Mb2dpblVzZXIoeyAuLi51c2VyLCAuLi5yZXMgfSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gJ29rJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuICdlcnJvcic7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7IC8vIDwtLSBQcm9wYWdhIGVsIGVycm9yIHJlYWxcclxuXHRcdFx0fSlcclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29udHJvbGEgcXVlIGVsIHVzdWFyaW8gbG9ndWVhZG8gdGVuZ2EgcGVybWlzb3MgXHJcblx0ICogcGFyYSBlbCBjYW5hbCBhY3R1YWwgZGUgbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHBhcmFtIHJlcyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIGNoYW5uZWxBY2Nlc3NQZXJtaXNzaW9uKHJlczogYW55KSB7XHJcblx0XHQvL2NvbnNvbGUubG9nKCdjaGFubmVsQWNjZXNzJywgcmVzKTtcclxuXHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KFtdKTtcclxuXHJcblx0XHQvKiBObyBhdXRob3JpemVkIGNoYW5uZWxzICovXHJcblx0XHRpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdH1cclxuXHRcdC8qIFNvbWUgYXV0aG9yaXplZCBjaGFubmVsKHMpIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdGlmIChyZXMuY2hhbm5lbHMuZmluZCgodXNlcmNoYW5uZWw6IGFueSkgPT4gdXNlcmNoYW5uZWwuY29kZSA9PT0gdGhpcy5jaGFubmVsLmNvZGUpKSB7XHJcblx0XHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xyXG5cdFx0XHRpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPiAxICYmIHRoaXMuX2FjdGl2ZUNoYW5uZWxDaGFuZ2UpXHJcblx0XHRcdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZVxyXG5cdFx0fVxyXG5cdFx0LyogT25lIGF1dGhvcml6ZWQgY2hhbm5lbCBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xyXG5cdFx0aWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID09IDEgJiYgdGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSkge1xyXG5cdFx0XHRkZWxldGUgcmVzLnBhc3N3b3JkXHJcblx0XHRcdHRoaXMuY2hhbm5lbEFjY2VzcyhyZXMuY2hhbm5lbHNbMF0sIHJlcylcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH1cclxuXHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdGlmICh0aGlzLl9hY3RpdmVDaGFubmVsQ2hhbmdlKSB7XHJcblx0XHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KHJlcy5jaGFubmVscylcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb250cm9sYSBlbCBhY2Nlc28gYWwgY2FuYWwsIGRlIHNlciBvdHJvIG51ZXZvIGNhbWJpYSBsb3MgdmFsb3Jlcy5cclxuXHQgKiBAcGFyYW0gY2hhbm5lbCBcclxuXHQgKiBAcGFyYW0gdXNlciBcclxuXHQgKi9cclxuXHRjaGFubmVsQWNjZXNzKGNoYW5uZWw6IGFueSwgdXNlciA9IG51bGwpIHtcclxuXHRcdGlmICh0aGlzLndpbmRvdz8ubG9jYXRpb24uaG9zdG5hbWUgIT0gY2hhbm5lbC5ob3N0bmFtZSkge1xyXG5cdFx0XHRsZXQgZW5jb2RlZCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodXNlciAhPSBudWxsID8gdXNlciA6IHRoaXMuX3VzZXIpKVxyXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVwbGFjZShgJHt0aGlzLndpbmRvdz8ubG9jYXRpb24ucHJvdG9jb2x9Ly8ke2NoYW5uZWwuaG9zdG5hbWV9L2F1dGgvcmVkaXJlY3QvJHtlbmNvZGVkfWApXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLl9jb25zdGFudHMubW9kaWZ5Q2hhbm5lbENvbmZpZyhjaGFubmVsKVxyXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVsb2FkKClcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29udHJvbGEgcXVlIGVsIHJvbCBkZWwgdXN1YXJpbyBzZWEgdW4gcm9sIHBlcm1pdGlkbyBwb3IgbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHBhcmFtIGFsbG93ZWRSb2xlcyByb2xlcyBxdWUgcGVybWl0ZSBsYSBhcGxpY2FjacOzbi5cclxuXHQgKiBAcGFyYW0gcm9sZSByb2wgZGVsIHVzdWFyaW9zXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc0FsbG93ZWRSb2xlKGFsbG93ZWRSb2xlczogVXNlclJvbGVUeXBlW10sIHJvbGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGFsbG93ZWRSb2xlcy5sZW5ndGhcclxuXHRcdFx0PyBhbGxvd2VkUm9sZXMuaW5jbHVkZXMocm9sZSBhcyBVc2VyUm9sZVR5cGUpXHJcblx0XHRcdDogdHJ1ZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBUcmFzIHVuIGxvZ3VlbyBleGl0b3NvLCBndWFyZGEgbG9zIGRhdG9zIG5lY2VzYXJpb3MgZW4gZWwgc3RvcmFnZSB5IGRlbcOhc1xyXG5cdCAqIGNvbmZpZ3VyYWNpb25lcyBuZWNlc2FyaWFzLlxyXG5cdCAqIEBwYXJhbSB0b2tlbnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBkb0xvZ2luVXNlcih0b2tlbnM6IGFueSkge1xyXG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKClcclxuXHRcdHRoaXMuX3VzZXIuaW5pdGlsaXplZCh0b2tlbnMpXHJcblx0XHRcclxuXHRcdHRoaXMuZm9yY2VDaGFubmVsc0ZvclNlbGxlcih0b2tlbnMpXHJcblx0XHQvL0NoYW5uZWxcclxuXHRcdGNvbnN0IHVzZXJKc29uaWZ5ID0gdGhpcy5fdXNlci5qc29uaWZ5KClcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUiwgSlNPTi5zdHJpbmdpZnkodXNlckpzb25pZnkpKVxyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkpXVF9UT0tFTiwgdG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2F1dGhTdG9yYWdlLnNldEF1dGhUb2tlbih0b2tlbnMudG9rZW4pXHJcblx0XHR0aGlzLl90b2tlblNpZ25hbC5zZXQodG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTUFJTCwgdG9rZW5zLnVzZXJuYW1lKTtcclxuXHRcdC8vT2JzZXJ2YWJsZXNcclxuXHRcdHRoaXMuX3VzZXJJblN1YmplY3QubmV4dCh0aGlzLl91c2VyKTtcclxuXHRcdHRoaXMuX2xvZ2dlZEluU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2FtYmlhIGxhIGZ1bmNpb24gcXVlIHNlIGVuY2FyZ2EgZGUgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgcmVkaXJpZ2UgZWwgZnJvbnRlbmRcclxuXHQgKiB0cmFzIHVuYSBhY2Npw7NuXHJcblx0ICogQHBhcmFtIHJlc29sdmVyRnVuY3Rpb24gXHJcblx0ICovXHJcblx0cHVibGljIHNldEhvbWVSZXNvbHZlcihyZXNvbHZlckZ1bmN0aW9uOiBhbnkpIHsgdGhpcy5faG9tZVJlc29sdmVyID0gcmVzb2x2ZXJGdW5jdGlvbiB9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBsYSBmdW5jaW9uIHF1ZSBzZSBlbmNhcmdhIGRlIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHJlZGlyaWdlIGVsIGZyb250ZW5kLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRIb21lUmVzb2x2ZXIoKSB7IHJldHVybiB0aGlzLl9ob21lUmVzb2x2ZXIgfVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdG9rZW4gZGVsIHN0b3JhZ2UgeSBsbyBndWFyZGEgZW4gbGEgc2lnbmFsLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkVG9rZW5Gcm9tU3RvcmFnZSgpIHtcclxuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5KV1RfVE9LRU4pO1xyXG5cdFx0aWYgKHRva2VuKSB7XHJcblx0XHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldCh0b2tlbik7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERlc2xvZ3VlYSBhbCB1c3VhcmlvLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2dvdXQoKSB7XHJcblx0XHR0aGlzLmRvTG9nb3V0VXNlcigpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHNpIGhheSB1biB1c3VhcmlvIGxvZ3VlYWRvIG8gbm8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuXHRcdC8vY29uc29sZS5sb2coXCJpc0F1dGhlbnRpY2F0ZWRcIix0aGlzLmlzVG9rZW5FeHBpcmVkKCksIHRoaXMuX3Rva2VuU2lnbmFsKCkgKTtcclxuXHRcdGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcclxuXHRcdFx0dGhpcy5kb0xvZ291dFVzZXIoKVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpXHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHQvL2NvbnNvbGUubG9nKHRoaXMuZ2V0VG9rZW4oKSwgIXRoaXMuaXNUb2tlbkV4cGlyZWQoKSAsIHRoaXMuX3VzZXIgIT0gbnVsbCk7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRUb2tlbigpICYmICF0aGlzLmlzVG9rZW5FeHBpcmVkKCkgJiYgdGhpcy5fdXNlciAhPSBudWxsO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIGVsIHRva2VuIGRlIHVzdWFyaW9cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0VG9rZW4oKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzLl90b2tlblNpZ25hbCgpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBMaW1waWEgZWwgc3RvcmFnZSB5IGxhcyBjb25maWd1cmFjaW9uZXMgaW50ZXJuYXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZG9Mb2dvdXRVc2VyKCkge1xyXG5cdFx0dGhpcy5fdXNlciA9IG51bGxcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVVNFUik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkVYUElSQVRFU19JTik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XHJcblx0XHR0aGlzLl9hdXRoU3RvcmFnZS5zZXRBdXRoVG9rZW4obnVsbCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4pO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTUFJTCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUwpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ1VTVE9NRVIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ01BU1RFUl9DSEFOTkVMJyk7XHJcblx0XHR0aGlzLl9sb2dnZWRJblN1YmplY3QubmV4dChmYWxzZSk7XHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHR0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSlcclxuXHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldChudWxsKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBgdHJ1ZWBzaSBlbCB0b2tlbiBleHBpcm8sIGBmYWxzZWAgY2FzbyBjb250cmFyaW8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc1Rva2VuRXhwaXJlZCgpIHtcclxuXHRcdGNvbnN0IGZlY2hhX2V4cGlyYWNpb24gPSB0aGlzLmdldEV4cGlyYXRlc0F0KCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBtb21lbnQoKSA+PSBtb21lbnQoZmVjaGFfZXhwaXJhY2lvbik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGxhIGZlY2hhIGRlIGV4cGlyYWNpw7NuIGRlbCB0b2tlbi5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIGdldEV4cGlyYXRlc0F0KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuRVhQSVJBVEVTX0lOKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBhbCB1c3VhcmlvIGFjdHVhbCB5IGxvIGNvbnZpZXJ0ZSBlbiB1bmEgaW5zdGFuY2lhIGRlIGBVc2VyYFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTogVXNlciB8IG51bGwge1xyXG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKCk7XHJcblx0XHRpZiAoIXRoaXMubG9hZFVzZXJGcm9tU3RvcmFnZSgpKSB7XHJcblx0XHRcdHRoaXMuX3VzZXIgPSBudWxsXHJcblx0XHR9XHJcblx0XHRlbHNlIGlmICh0aGlzLl91c2VyPy5jaGFubmVscy5maW5kKCh1c2VyY2hhbm5lbDogYW55KSA9PiB1c2VyY2hhbm5lbD8uY29kZSA9PT0gdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwpKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl91c2VyO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sb2dvdXQoKVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuX3VzZXI7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdXN1YXJpbyBkZWwgc3RvcmFnZS5cclxuXHQgKiBAcGFyYW0ga2V5IFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbG9hZFVzZXJGcm9tU3RvcmFnZShrZXkgPSB0aGlzLlVTRVIpIHtcclxuICAgIGlmICh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgdXNlck9iaiA9IEpTT04ucGFyc2UodGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IE9iamVjdC5hc3NpZ24obmV3IFVzZXIoKSwgdXNlck9iaik7IC8vIDwtLSBBc8OtIHJlY3VwZXJhcyBsb3MgbcOpdG9kb3MgZGUgVXNlclxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblx0LyoqXHJcblx0ICogRW52aWEgbGEgc29saWNpdHVkIHBhcmEgY2FtYmlhciBsYSBjb250cmFzZcOxYS5cclxuXHQgKiBAcGFyYW0gZW1haWwgZW1haWwgZGVsIHNvbGljaXRhbnRlLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHJlY292ZXJQYXNzd29yZChlbWFpbDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy5yZWNvdmVyUGFzc3dvcmRBcGkoKSwgeyBlbWFpbCB9KTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUGFyYSBjb25maXJtYXIgZWwgcmVnaXN0cm8gZGUgdXN1YXJpby5cclxuXHQgKiBAcGFyYW0gdG9rZW4gXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Y29uZmlybUFjY291bnQodG9rZW46IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24uZ2V0KHRoaXMuY29uZmlybUFjY291bnRBcGkodG9rZW4pKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUGFyYSByZWdpc3RyYXIgYSB1biB1c3VhcmlvIGNvbcO6blxyXG5cdCAqIEBwYXJhbSBkYXRhIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHNpbmdVcChkYXRhOiBhbnkpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5yZWdpc3RlckFwaSgpLCBkYXRhKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUGFyYSByZWdpc3RyYXIgYSB1biB1c3VhcmlvIG1heW9yaXN0YS5cclxuXHQgKiBAcGFyYW0gZGF0YSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzaWduVXBXaG9sZXNhbGVyKGRhdGE6IGFueSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLnJlZ2lzdGVyV2hvbGVzYWxlckFwaSgpLGRhdGEpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDaGVxdWVhIHNpIHVuIHVzdWFyaW8gZXN0YSBoYWJpbGl0YWRvIGEgY29tcHJhciBvIG5vLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdC8vIGlzQWJsZVRvQnV5KCk6Ym9vbGVhbiB7XHJcblx0Ly8gXHRjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0VXNlclByb2ZpbGVBc1VzZXIoKSBhcyBVc2VyO1xyXG5cdC8vIFx0Y29uc3QgaXNTZWxsZXIgPSBjdXJyZW50VXNlci50eXBlVXNlciAmJiBjdXJyZW50VXNlci50eXBlVXNlciA9PSAnc2VsbGVyJyB8fCBmYWxzZVxyXG5cdC8vIFx0cmV0dXJuICFpc1NlbGxlciB8fCAhdGhpcy5nZXRDdXN0b21lcigpO1xyXG5cdC8vIH1cclxuXHRwdWJsaWMgaXNBYmxlVG9CdXkgPSAoKTogYm9vbGVhbiA9PiAhdGhpcy5nZXRVc2VyUHJvZmlsZUFzVXNlcigpPy5pc1NlbGxlcigpIHx8ICEhdGhpcy5nZXRDdXN0b21lcigpXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgdW4gdXN1YXJpbyBkZSB0aXBvIGNsaWVudGUuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0Q3VzdG9tZXIoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY3VzdG9tZXIgfHwgSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRGV2dWVsdmUgZWwgdXN1YXJpbyBhY3R1YWwgbG9ndWVhZG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0VXNlclByb2ZpbGVBc1VzZXIoKTogVXNlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXIhIGFzIFVzZXIgfHwgdGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpO1xyXG4gICAgfVxyXG5cdC8qKlxyXG5cdCAqIEFncmVnYSBkYXRhIGV4dHJhIGFsIG9iamVjdG8gZGUgVXN1YXJpby5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRsb2dpbkV4dHJhRGF0YSA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6ICdkZW1vX2NsaWVudCcsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6ICdzZWNyZXRfZGVtb19jbGllbnQnLFxyXG4gICAgICAgICAgICBncmFudF90eXBlOiAncGFzc3dvcmQnXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cdC8qIFBsZWFzZSByZW1vdmUgdGhpcyBBU0FQIC0gTmVlZHMgKmNoYW5uZWxzKiBhcnJheSBpbiB1c2VyIG9iamVjdCBBTFdBWVMgKi9cclxuICAgIHByaXZhdGUgZm9yY2VDaGFubmVsc0ZvclNlbGxlcih0b2tlbnM6YW55KXtcclxuICAgICAgICBpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSB0b2tlbnMudHlwZSBhcyBVc2VyUm9sZVR5cGUpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLl91c2VyIS5zZXRDaGFubmVscyguLi50aGlzLmNoYW5uZWxzKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLl91c2VyIS5zZXRDaGFubmVscyh0aGlzLmNoYW5uZWwpXHJcbiAgICB9XHJcblxyXG5cdCAvKipcclxuICAgICAqIENhcmdhIGVsIGNsaWVudGUgY29uIGVsIHF1ZSBzZSByZWFsaXphcmFuIHBlZGlkb3MuIFNpIHJlY2liZSBlbCB2YWxvciBudWxsXHJcbiAgICAgKiBzZSB2dWVsdmUgYSBjYXJnYXIgZWwgdmVuZGVkb3IgcGFyYSBzdSB1c28uICBcclxuICAgICAqIEBwYXJhbSBjdXN0b21lciBcclxuICAgICAqL1xyXG5cdCBwdWJsaWMgc2V0Q3VzdG9tZXIoY3VzdG9tZXI6YW55KXtcclxuICAgICAgICBsZXQgcmVmcmVzaFBhZ2UgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuX2N1c3RvbWVyID0gY3VzdG9tZXJcclxuICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNVU1RPTUVSLCBKU09OLnN0cmluZ2lmeShjdXN0b21lcikpXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHNhbWVDaGFubmVsID0gY3VzdG9tZXIgPyB0aGlzLnNhbWVDaGFubmVsKGN1c3RvbWVyLmNoYW5uZWxzWzBdLmNvZGUsIGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZSkgOiBudWxsXHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGN1c3RvbWVyKSB7XHJcbiAgICAgICAgICAgIGlmKCFzYW1lQ2hhbm5lbCl7XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw6IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2FwaUNvbnN0cy5MT0NBTEVcclxuICAgICAgICAgICAgICAgICAgICB9KSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGFubmVsKHtcclxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBjdXN0b21lci5jaGFubmVsc1swXS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZTogY3VzdG9tZXIuY2hhbm5lbHNbMF0ubG9jYWxlcy5jb2RlXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpKVxyXG4gICAgICAgICAgICBpZihyZXMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuc2FtZUNoYW5uZWwocmVzLmNoYW5uZWwsIHJlcy5sb2NhbGUpKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNoYW5uZWwocmVzKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2U/LnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMuX2NhcnRTZXJ2aWNlLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKVxyXG4gICAgICAgIHJlZnJlc2hQYWdlID8gbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYgOiBudWxsXHJcbiAgICB9XHJcblxyXG5cdC8qKlxyXG4gICAgICogQ29tcHJ1ZWJhIHNpIGxvcyB2YWxvcmVzIGRlbCBjYW5hbCBhY3R1YWwgc29uIGlndWFsZXMgYSBsb3MgaW5ncmVzYWRvIHBvciBwYXJhbWV0cm9zLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgTm9tYnJlIGRlbCBjYW5hbFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSAgTG9jYWxlIGRlbCBjYW5hbFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgc2kgZXMgZWwgbWlzbW8gY2FuYWwsIEZhbHNlIGNhc28gY29udHJhcmlvLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNhbWVDaGFubmVsID0gKGNoYW5uZWw6c3RyaW5nLCBsb2NhbGU6c3RyaW5nKTpib29sZWFuID0+IChjaGFubmVsID09IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMKSAmJiAobG9jYWxlID09IHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUpXHJcblxyXG5cdC8qKlxyXG4gICAgICogQ2FtYmlhIGRlIGNhbmFsXHJcbiAgICAgKiBAcGFyYW0gY2hhbm5lbENvbmZpZyBkZWJlIHNlciB1biBvYmpldG8gcXVlIGNvbnRlbmdhIGFsIG1lbm9zIGxhcyBrZXlzIGNoYW5uZWwgeSBsb2NhbGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2hhbmdlQ2hhbm5lbCA9IChjaGFubmVsQ29uZmlnOmFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKHtcclxuICAgICAgICAgICAgY2hhbm5lbDogY2hhbm5lbENvbmZpZy5jaGFubmVsLFxyXG4gICAgICAgICAgICBsb2NhbGU6IGNoYW5uZWxDb25maWcubG9jYWxlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHRnZXRVc2VyUHJvZmlsZSgpOiBPYnNlcnZhYmxlPFVzZXIgfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLl91c2VyICYmIG9mKHRoaXMuX3VzZXIpKSB8fCB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICB9XHJcblx0cHJpdmF0ZSBnZXRDdXJyZW50VXNlcigpOiBPYnNlcnZhYmxlPFVzZXIgfCBudWxsPiB7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IG5ldyBVc2VyKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRVc2VyRnJvbVN0b3JhZ2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YodGhpcy5fdXNlcik7XHJcbiAgICB9XHJcbn1cclxuIl19
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUNwRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ2YsYUFBYSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNoRSxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsR0FBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEUsVUFBVSxHQUF3QixNQUFNLENB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QyxNQUFNLENBQUMsQ0FBQTtJQUU5STs7O09BR0c7SUFDSyxhQUFhLEdBQUcsQ0FBQyxhQUFrQixFQUFFLEVBQUU7UUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztZQUNuQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDOUIsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNO1NBQzVCLENBQUMsQ0FBQTtJQUNILENBQUMsQ0FBQTtJQUNELGNBQWM7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFDTyxjQUFjO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtRQUNsQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7d0dBamNXLFdBQVc7NEdBQVgsV0FBVyxjQUZYLE1BQU07OzRGQUVOLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVzZXJSb2xlVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UsIENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbi8qKlxyXG4gKiBTZXJ2aWNpbyBkZSBhdXRlbnRpZmljYWNpw7NuIGRlbCB1c3VhcmlvIGVuIGxhIHBsYXRhZm9ybWEuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcblx0cHJpdmF0ZSBfbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpXHJcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY29uc3RhbnRzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYXBpQ29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2F1dGhTdG9yYWdlOiBBdXRoU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoQXV0aFN0b3JhZ2VTZXJ2aWNlKTtcclxuXHJcblx0Ly8gQ29udGFudGVzIHBhcmEgZWwgc3RvcmFnZS5cclxuXHRwcml2YXRlIHJlYWRvbmx5IEpXVF9UT0tFTiA9ICdKV1RfVE9LRU4nXHJcblx0cHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX1RPS0VOID0gJ1JFRlJFU0hfVE9LRU4nXHJcblx0cHJpdmF0ZSByZWFkb25seSBFWFBJUkFURVNfSU4gPSAnRVhQSVJBVEVTX0lOJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgVVNFUiA9ICdVU0VSJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgTUFJTCA9ICdtYWlsJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgTE9DQUxFID0gJ0xPQ0FMRSdcclxuXHRwcml2YXRlIHJlYWRvbmx5IENIQU5ORUwgPSAnQ0hBTk5FTCdcclxuXHRwcml2YXRlIHJlYWRvbmx5IENVU1RPTUVSID0gJ0NVU1RPTUVSJ1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTFNFTExFUiA9ICdDSEFOTkVMU0VMTEVSJ1xyXG5cclxuXHRwcml2YXRlIGNoYW5uZWxzVXNlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSlcclxuXHRwdWJsaWMgY2hhbm5lbHMkID0gdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXHJcblx0cHJpdmF0ZSBfY2hhbm5lbCQgPSB0aGlzLl9jaGFubmVsU2VydmljZS5nZXRDaGFubmVsKClcclxuXHRwcml2YXRlIF91c2VySW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyIHwgbnVsbD4obnVsbClcclxuXHRwcml2YXRlIF9sb2dnZWRJblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdHB1YmxpYyBsb2dnZWRJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9sb2dnZWRJblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHJpdmF0ZSBfbG9nZ2luZ0luU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblx0cHVibGljIGxvZ2dpbmdJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9sb2dnaW5nSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuXHQvKipcclxuXHQgKiBQYXJhIGluZGljYXIgc2kgdW4gY2FuYWwgY2FtYmlvLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgX2FjdGl2ZUNoYW5uZWxDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKipcclxuXHQgKiBHdWFyZGEgbG9zIGRhdG9zIGRlbCB1c3VhcmlvXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfdXNlcjogVXNlciB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgX2N1c3RvbWVyID0gbnVsbDtcclxuXHQvKipcclxuXHQgKiBHdWFyZGEgbG9zIGRhdG9zIGRlbCBjYW5hbFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjaGFubmVsOiBhbnkgPSBbXVxyXG5cdHB1YmxpYyBjaGFubmVsczogYW55W10gPSBbXVxyXG5cdC8qKlxyXG5cdCAqIFV0aWxpemFkbyBwYXJhIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHRpZW5lIHF1ZSByZWRpcmVjY2lvbmFyXHJcblx0ICogbGEgcGFnaW5hIHRyYXMgdW4gZXZlbnRvLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgX2hvbWVSZXNvbHZlcjogYW55O1xyXG5cdC8qKlxyXG5cdCAqIFNpZ25hbCBwYXJhIGd1YXJkYXIgZWwgdG9rZW4gZGUgdXN1YXJpbyB1bmEgdmV6IGxvZ3VlYWRvXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfdG9rZW5TaWduYWwgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcblx0LyoqXHJcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB1c3VhcmlvXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfdXNlclNpZ25hbCA9IHNpZ25hbDxVc2VyIHwgbnVsbD4obnVsbCk7XHJcblx0Ly9BUElzXHJcblx0cHJpdmF0ZSBzaG9wQXBpOiBzdHJpbmcgPSB0aGlzLl9hcGlDb25zdHMuU0hPUF9BUElfVVJMXHJcblx0cHJpdmF0ZSBjaGFubmVsQXBpOiBzdHJpbmcgPSB0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTFxyXG5cdHByaXZhdGUgdG9rZW5BcGkoKSB7IHJldHVybiB0aGlzLnNob3BBcGkgKyAnbG9naW5fY2hlY2snIH1cclxuXHRwcml2YXRlIHJlY292ZXJQYXNzd29yZEFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVxdWVzdC1wYXNzd29yZC1yZXNldGAgfVxyXG5cdHByaXZhdGUgcmVzZXRQYXNzd29yZEFwaSA9ICh0b2tlbjogc3RyaW5nKSA9PiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3Bhc3N3b3JkLXJlc2V0LyR7dG9rZW59YDtcclxuXHRwcml2YXRlIGNvbmZpcm1BY2NvdW50QXBpKHRva2VuOiBzdHJpbmcpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vdmVyaWZ5LWFjY291bnQ/dG9rZW49JHt0b2tlbn1gIH1cclxuXHRwcml2YXRlIHJlZ2lzdGVyQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5zaG9wQXBpfSR7dGhpcy5jaGFubmVsQXBpfS9yZWdpc3RlcmAgfVxyXG5cdHByaXZhdGUgcmVnaXN0ZXJXaG9sZXNhbGVyQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5zaG9wQXBpfSR7dGhpcy5jaGFubmVsQXBpfS9yZWdpc3Rlci13aG9sZXNhbGVyYCB9XHJcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXHJcblxyXG5cdHB1YmxpYyB3aW5kb3c/OiBXaW5kb3c7XHJcblx0cHVibGljIGxvY2FsU3RvcmFnZT86IFN0b3JhZ2U7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHR0aGlzLndpbmRvdyA9IHdpbmRvd1xyXG5cdFx0XHR0aGlzLmxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9hZFRva2VuRnJvbVN0b3JhZ2UoKTtcclxuXHRcdHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5fbG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIExvZ3VlYSBhbCB1c3VhcmlvIGVuIGxhIGFwbGljYWNpw7NuLlxyXG5cdCAqIEBwYXJhbSB1c2VyIGRhdG9zIGRlbCB1c3VhcmlvXHJcblx0ICogQHBhcmFtIHdpdGhSb2xlcyByb2xlcyBkZWwgdXN1YXJpb1xyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGxvZ2luKHVzZXI6IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9LCB3aXRoUm9sZXM6IFVzZXJSb2xlVHlwZVtdID0gW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0dGhpcy5fY2hhbm5lbCQuc3Vic2NyaWJlKGNoID0+IHRoaXMuY2hhbm5lbCA9IGNoKTtcclxuXHRcdHRoaXMuY2hhbm5lbHMkLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dXNlciA9IHsgLi4udXNlciwgLi4udGhpcy5sb2dpbkV4dHJhRGF0YSgpIH1cclxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy50b2tlbkFwaSgpLCB1c2VyKS5waXBlKFxyXG5cdFx0XHRtYXAoKHJlczogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2hhbm5lbEFjY2Vzc1Blcm1pc3Npb24oeyAuLi51c2VyLCAuLi5yZXMgfSkgJiYgdGhpcy5pc0FsbG93ZWRSb2xlKHdpdGhSb2xlcywgcmVzLnR5cGUpKSB7XHJcblx0XHRcdFx0XHR0aGlzLmRvTG9naW5Vc2VyKHsgLi4udXNlciwgLi4ucmVzIH0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuICdvayc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiAnZXJyb3InO1xyXG5cdFx0XHR9KSxcclxuXHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuX2xvZ2dpbmdJblN1YmplY3QubmV4dChmYWxzZSk7XHJcblx0XHRcdFx0cmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpOyAvLyA8LS0gUHJvcGFnYSBlbCBlcnJvciByZWFsXHJcblx0XHRcdH0pXHJcblx0XHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbnRyb2xhIHF1ZSBlbCB1c3VhcmlvIGxvZ3VlYWRvIHRlbmdhIHBlcm1pc29zIFxyXG5cdCAqIHBhcmEgZWwgY2FuYWwgYWN0dWFsIGRlIGxhIGFwbGljYWNpw7NuLlxyXG5cdCAqIEBwYXJhbSByZXMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBjaGFubmVsQWNjZXNzUGVybWlzc2lvbihyZXM6IGFueSkge1xyXG5cdFx0Ly9jb25zb2xlLmxvZygnY2hhbm5lbEFjY2VzcycsIHJlcyk7XHJcblx0XHR0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSk7XHJcblxyXG5cdFx0LyogTm8gYXV0aG9yaXplZCBjaGFubmVscyAqL1xyXG5cdFx0aWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID09IDApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHR9XHJcblx0XHQvKiBTb21lIGF1dGhvcml6ZWQgY2hhbm5lbChzKSBpbmNsdWRpbmcgY3VycmVudCBjaGFubmVsICovXHJcblx0XHRpZiAocmVzLmNoYW5uZWxzLmZpbmQoKHVzZXJjaGFubmVsOiBhbnkpID0+IHVzZXJjaGFubmVsLmNvZGUgPT09IHRoaXMuY2hhbm5lbC5jb2RlKSkge1xyXG5cdFx0XHQvKiBNdWx0aXBsZSBhdXRob3JpemVkIGNoYW5uZWxzIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdFx0aWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID4gMSAmJiB0aGlzLl9hY3RpdmVDaGFubmVsQ2hhbmdlKVxyXG5cdFx0XHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KHJlcy5jaGFubmVscylcclxuXHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdH1cclxuXHRcdC8qIE9uZSBhdXRob3JpemVkIGNoYW5uZWwgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cclxuXHRcdGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA9PSAxICYmIHRoaXMuX2FjdGl2ZUNoYW5uZWxDaGFuZ2UpIHtcclxuXHRcdFx0ZGVsZXRlIHJlcy5wYXNzd29yZFxyXG5cdFx0XHR0aGlzLmNoYW5uZWxBY2Nlc3MocmVzLmNoYW5uZWxzWzBdLCByZXMpXHJcblx0XHRcdHJldHVybiB0cnVlXHJcblx0XHR9XHJcblx0XHQvKiBNdWx0aXBsZSBhdXRob3JpemVkIGNoYW5uZWxzIG5vdCBpbmNsdWRpbmcgY3VycmVudCBjaGFubmVsICovXHJcblx0XHRpZiAodGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSkge1xyXG5cdFx0XHR0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChyZXMuY2hhbm5lbHMpXHJcblx0XHRcdHJldHVybiB0cnVlXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2VcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29udHJvbGEgZWwgYWNjZXNvIGFsIGNhbmFsLCBkZSBzZXIgb3RybyBudWV2byBjYW1iaWEgbG9zIHZhbG9yZXMuXHJcblx0ICogQHBhcmFtIGNoYW5uZWwgXHJcblx0ICogQHBhcmFtIHVzZXIgXHJcblx0ICovXHJcblx0Y2hhbm5lbEFjY2VzcyhjaGFubmVsOiBhbnksIHVzZXIgPSBudWxsKSB7XHJcblx0XHRpZiAodGhpcy53aW5kb3c/LmxvY2F0aW9uLmhvc3RuYW1lICE9IGNoYW5uZWwuaG9zdG5hbWUpIHtcclxuXHRcdFx0bGV0IGVuY29kZWQgPSBidG9hKEpTT04uc3RyaW5naWZ5KHVzZXIgIT0gbnVsbCA/IHVzZXIgOiB0aGlzLl91c2VyKSlcclxuXHRcdFx0dGhpcy53aW5kb3c/LmxvY2F0aW9uLnJlcGxhY2UoYCR7dGhpcy53aW5kb3c/LmxvY2F0aW9uLnByb3RvY29sfS8vJHtjaGFubmVsLmhvc3RuYW1lfS9hdXRoL3JlZGlyZWN0LyR7ZW5jb2RlZH1gKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5fY29uc3RhbnRzLm1vZGlmeUNoYW5uZWxDb25maWcoY2hhbm5lbClcclxuXHRcdFx0dGhpcy53aW5kb3c/LmxvY2F0aW9uLnJlbG9hZCgpXHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbnRyb2xhIHF1ZSBlbCByb2wgZGVsIHVzdWFyaW8gc2VhIHVuIHJvbCBwZXJtaXRpZG8gcG9yIGxhIGFwbGljYWNpw7NuLlxyXG5cdCAqIEBwYXJhbSBhbGxvd2VkUm9sZXMgcm9sZXMgcXVlIHBlcm1pdGUgbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHBhcmFtIHJvbGUgcm9sIGRlbCB1c3Vhcmlvc1xyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaXNBbGxvd2VkUm9sZShhbGxvd2VkUm9sZXM6IFVzZXJSb2xlVHlwZVtdLCByb2xlOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBhbGxvd2VkUm9sZXMubGVuZ3RoXHJcblx0XHRcdD8gYWxsb3dlZFJvbGVzLmluY2x1ZGVzKHJvbGUgYXMgVXNlclJvbGVUeXBlKVxyXG5cdFx0XHQ6IHRydWVcclxuXHR9XHJcblx0LyoqXHJcblx0ICogVHJhcyB1biBsb2d1ZW8gZXhpdG9zbywgZ3VhcmRhIGxvcyBkYXRvcyBuZWNlc2FyaW9zIGVuIGVsIHN0b3JhZ2UgeSBkZW3DoXNcclxuXHQgKiBjb25maWd1cmFjaW9uZXMgbmVjZXNhcmlhcy5cclxuXHQgKiBAcGFyYW0gdG9rZW5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZG9Mb2dpblVzZXIodG9rZW5zOiBhbnkpIHtcclxuXHRcdHRoaXMuX3VzZXIgPSBuZXcgVXNlcigpXHJcblx0XHR0aGlzLl91c2VyLmluaXRpbGl6ZWQodG9rZW5zKVxyXG5cclxuXHRcdHRoaXMuZm9yY2VDaGFubmVsc0ZvclNlbGxlcih0b2tlbnMpXHJcblx0XHQvL0NoYW5uZWxcclxuXHRcdGNvbnN0IHVzZXJKc29uaWZ5ID0gdGhpcy5fdXNlci5qc29uaWZ5KClcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUiwgSlNPTi5zdHJpbmdpZnkodXNlckpzb25pZnkpKVxyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkpXVF9UT0tFTiwgdG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2F1dGhTdG9yYWdlLnNldEF1dGhUb2tlbih0b2tlbnMudG9rZW4pXHJcblx0XHR0aGlzLl90b2tlblNpZ25hbC5zZXQodG9rZW5zLnRva2VuKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTUFJTCwgdG9rZW5zLnVzZXJuYW1lKTtcclxuXHRcdC8vT2JzZXJ2YWJsZXNcclxuXHRcdHRoaXMuX3VzZXJJblN1YmplY3QubmV4dCh0aGlzLl91c2VyKTtcclxuXHRcdHRoaXMuX2xvZ2dlZEluU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2FtYmlhIGxhIGZ1bmNpb24gcXVlIHNlIGVuY2FyZ2EgZGUgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgcmVkaXJpZ2UgZWwgZnJvbnRlbmRcclxuXHQgKiB0cmFzIHVuYSBhY2Npw7NuXHJcblx0ICogQHBhcmFtIHJlc29sdmVyRnVuY3Rpb24gXHJcblx0ICovXHJcblx0cHVibGljIHNldEhvbWVSZXNvbHZlcihyZXNvbHZlckZ1bmN0aW9uOiBhbnkpIHsgdGhpcy5faG9tZVJlc29sdmVyID0gcmVzb2x2ZXJGdW5jdGlvbiB9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBsYSBmdW5jaW9uIHF1ZSBzZSBlbmNhcmdhIGRlIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHJlZGlyaWdlIGVsIGZyb250ZW5kLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRIb21lUmVzb2x2ZXIoKSB7IHJldHVybiB0aGlzLl9ob21lUmVzb2x2ZXIgfVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdG9rZW4gZGVsIHN0b3JhZ2UgeSBsbyBndWFyZGEgZW4gbGEgc2lnbmFsLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkVG9rZW5Gcm9tU3RvcmFnZSgpIHtcclxuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5KV1RfVE9LRU4pO1xyXG5cdFx0aWYgKHRva2VuKSB7XHJcblx0XHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldCh0b2tlbik7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERlc2xvZ3VlYSBhbCB1c3VhcmlvLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2dvdXQoKSB7XHJcblx0XHR0aGlzLmRvTG9nb3V0VXNlcigpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHNpIGhheSB1biB1c3VhcmlvIGxvZ3VlYWRvIG8gbm8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuXHRcdC8vY29uc29sZS5sb2coXCJpc0F1dGhlbnRpY2F0ZWRcIix0aGlzLmlzVG9rZW5FeHBpcmVkKCksIHRoaXMuX3Rva2VuU2lnbmFsKCkgKTtcclxuXHRcdGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcclxuXHRcdFx0dGhpcy5kb0xvZ291dFVzZXIoKVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpXHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHQvL2NvbnNvbGUubG9nKHRoaXMuZ2V0VG9rZW4oKSwgIXRoaXMuaXNUb2tlbkV4cGlyZWQoKSAsIHRoaXMuX3VzZXIgIT0gbnVsbCk7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRUb2tlbigpICYmICF0aGlzLmlzVG9rZW5FeHBpcmVkKCkgJiYgdGhpcy5fdXNlciAhPSBudWxsO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIGVsIHRva2VuIGRlIHVzdWFyaW9cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0VG9rZW4oKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzLl90b2tlblNpZ25hbCgpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBMaW1waWEgZWwgc3RvcmFnZSB5IGxhcyBjb25maWd1cmFjaW9uZXMgaW50ZXJuYXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZG9Mb2dvdXRVc2VyKCkge1xyXG5cdFx0dGhpcy5fdXNlciA9IG51bGxcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVVNFUik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkVYUElSQVRFU19JTik7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XHJcblx0XHR0aGlzLl9hdXRoU3RvcmFnZS5zZXRBdXRoVG9rZW4obnVsbCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4pO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTUFJTCk7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUwpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ1VTVE9NRVIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ01BU1RFUl9DSEFOTkVMJyk7XHJcblx0XHR0aGlzLl9sb2dnZWRJblN1YmplY3QubmV4dChmYWxzZSk7XHJcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XHJcblx0XHR0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSlcclxuXHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldChudWxsKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBgdHJ1ZWBzaSBlbCB0b2tlbiBleHBpcm8sIGBmYWxzZWAgY2FzbyBjb250cmFyaW8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc1Rva2VuRXhwaXJlZCgpIHtcclxuXHRcdGNvbnN0IGZlY2hhX2V4cGlyYWNpb24gPSB0aGlzLmdldEV4cGlyYXRlc0F0KCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBtb21lbnQoKSA+PSBtb21lbnQoZmVjaGFfZXhwaXJhY2lvbik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGxhIGZlY2hhIGRlIGV4cGlyYWNpw7NuIGRlbCB0b2tlbi5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIGdldEV4cGlyYXRlc0F0KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuRVhQSVJBVEVTX0lOKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBhbCB1c3VhcmlvIGFjdHVhbCB5IGxvIGNvbnZpZXJ0ZSBlbiB1bmEgaW5zdGFuY2lhIGRlIGBVc2VyYFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTogVXNlciB8IG51bGwge1xyXG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKCk7XHJcblx0XHRpZiAoIXRoaXMubG9hZFVzZXJGcm9tU3RvcmFnZSgpKSB7XHJcblx0XHRcdHRoaXMuX3VzZXIgPSBudWxsXHJcblx0XHR9XHJcblx0XHRlbHNlIGlmICh0aGlzLl91c2VyPy5jaGFubmVscy5maW5kKCh1c2VyY2hhbm5lbDogYW55KSA9PiB1c2VyY2hhbm5lbD8uY29kZSA9PT0gdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwpKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl91c2VyO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sb2dvdXQoKVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuX3VzZXI7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgdXN1YXJpbyBkZWwgc3RvcmFnZS5cclxuXHQgKiBAcGFyYW0ga2V5IFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbG9hZFVzZXJGcm9tU3RvcmFnZShrZXkgPSB0aGlzLlVTRVIpIHtcclxuXHRcdGlmICh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKSB7XHJcblx0XHRcdGNvbnN0IHVzZXJPYmogPSBKU09OLnBhcnNlKHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpO1xyXG5cdFx0XHR0aGlzLl91c2VyID0gT2JqZWN0LmFzc2lnbihuZXcgVXNlcigpLCB1c2VyT2JqKTsgLy8gPC0tIEFzw60gcmVjdXBlcmFzIGxvcyBtw6l0b2RvcyBkZSBVc2VyXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHJcblx0fVxyXG5cclxuXHRwYXNzd29yZFJlc2V0ID0gKG5ld19wYXNzd29yZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB7XHJcblx0XHRcclxuXHRcdGNvbnN0IGRhdGEgPSB7IHBhc3N3b3JkOiB7IGZpcnN0OiBuZXdfcGFzc3dvcmQsIHNlY29uZDogbmV3X3Bhc3N3b3JkIH0gfTtcclxuXHRcdGNvbnNvbGUubG9nKHRoaXMucmVzZXRQYXNzd29yZEFwaSh0b2tlbiksIGRhdGEpXHJcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy5yZXNldFBhc3N3b3JkQXBpKHRva2VuKSwgZGF0YSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEVudmlhIGxhIHNvbGljaXR1ZCBwYXJhIGNhbWJpYXIgbGEgY29udHJhc2XDsWEuXHJcblx0ICogQHBhcmFtIGVtYWlsIGVtYWlsIGRlbCBzb2xpY2l0YW50ZS5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRyZWNvdmVyUGFzc3dvcmQoZW1haWw6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucHV0KHRoaXMucmVjb3ZlclBhc3N3b3JkQXBpKCksIHsgZW1haWwgfSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgY29uZmlybWFyIGVsIHJlZ2lzdHJvIGRlIHVzdWFyaW8uXHJcblx0ICogQHBhcmFtIHRva2VuIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGNvbmZpcm1BY2NvdW50KHRva2VuOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLmdldCh0aGlzLmNvbmZpcm1BY2NvdW50QXBpKHRva2VuKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgcmVnaXN0cmFyIGEgdW4gdXN1YXJpbyBjb23Dum5cclxuXHQgKiBAcGFyYW0gZGF0YSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzaW5nVXAoZGF0YTogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMucmVnaXN0ZXJBcGkoKSwgZGF0YSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFBhcmEgcmVnaXN0cmFyIGEgdW4gdXN1YXJpbyBtYXlvcmlzdGEuXHJcblx0ICogQHBhcmFtIGRhdGEgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0c2lnblVwV2hvbGVzYWxlcihkYXRhOiBhbnkpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5yZWdpc3Rlcldob2xlc2FsZXJBcGkoKSwgZGF0YSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENoZXF1ZWEgc2kgdW4gdXN1YXJpbyBlc3RhIGhhYmlsaXRhZG8gYSBjb21wcmFyIG8gbm8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Ly8gaXNBYmxlVG9CdXkoKTpib29sZWFuIHtcclxuXHQvLyBcdGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRVc2VyUHJvZmlsZUFzVXNlcigpIGFzIFVzZXI7XHJcblx0Ly8gXHRjb25zdCBpc1NlbGxlciA9IGN1cnJlbnRVc2VyLnR5cGVVc2VyICYmIGN1cnJlbnRVc2VyLnR5cGVVc2VyID09ICdzZWxsZXInIHx8IGZhbHNlXHJcblx0Ly8gXHRyZXR1cm4gIWlzU2VsbGVyIHx8ICF0aGlzLmdldEN1c3RvbWVyKCk7XHJcblx0Ly8gfVxyXG5cdHB1YmxpYyBpc0FibGVUb0J1eSA9ICgpOiBib29sZWFuID0+ICF0aGlzLmdldFVzZXJQcm9maWxlQXNVc2VyKCk/LmlzU2VsbGVyKCkgfHwgISF0aGlzLmdldEN1c3RvbWVyKClcclxuXHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biB1c3VhcmlvIGRlIHRpcG8gY2xpZW50ZS5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRDdXN0b21lcigpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jdXN0b21lciB8fCBKU09OLnBhcnNlKHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ1VTVE9NRVIpKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBlbCB1c3VhcmlvIGFjdHVhbCBsb2d1ZWFkby5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRVc2VyUHJvZmlsZUFzVXNlcigpOiBVc2VyIHtcclxuXHRcdHJldHVybiB0aGlzLl91c2VyISBhcyBVc2VyIHx8IHRoaXMuZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWdyZWdhIGRhdGEgZXh0cmEgYWwgb2JqZWN0byBkZSBVc3VhcmlvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGxvZ2luRXh0cmFEYXRhID0gKCkgPT4ge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0Y2xpZW50X2lkOiAnZGVtb19jbGllbnQnLFxyXG5cdFx0XHRjbGllbnRfc2VjcmV0OiAnc2VjcmV0X2RlbW9fY2xpZW50JyxcclxuXHRcdFx0Z3JhbnRfdHlwZTogJ3Bhc3N3b3JkJ1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvKiBQbGVhc2UgcmVtb3ZlIHRoaXMgQVNBUCAtIE5lZWRzICpjaGFubmVscyogYXJyYXkgaW4gdXNlciBvYmplY3QgQUxXQVlTICovXHJcblx0cHJpdmF0ZSBmb3JjZUNoYW5uZWxzRm9yU2VsbGVyKHRva2VuczogYW55KSB7XHJcblx0XHRpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSB0b2tlbnMudHlwZSBhcyBVc2VyUm9sZVR5cGUpXHJcblx0XHRcdHRoaXMuY2hhbm5lbHM/Lmxlbmd0aFxyXG5cdFx0XHRcdD8gdGhpcy5fdXNlciEuc2V0Q2hhbm5lbHMoLi4udGhpcy5jaGFubmVscylcclxuXHRcdFx0XHQ6IHRoaXMuX3VzZXIhLnNldENoYW5uZWxzKHRoaXMuY2hhbm5lbClcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCogQ2FyZ2EgZWwgY2xpZW50ZSBjb24gZWwgcXVlIHNlIHJlYWxpemFyYW4gcGVkaWRvcy4gU2kgcmVjaWJlIGVsIHZhbG9yIG51bGxcclxuXHQqIHNlIHZ1ZWx2ZSBhIGNhcmdhciBlbCB2ZW5kZWRvciBwYXJhIHN1IHVzby4gIFxyXG5cdCogQHBhcmFtIGN1c3RvbWVyIFxyXG5cdCovXHJcblx0cHVibGljIHNldEN1c3RvbWVyKGN1c3RvbWVyOiBhbnkpIHtcclxuXHRcdGxldCByZWZyZXNoUGFnZSA9IGZhbHNlXHJcblx0XHR0aGlzLl9jdXN0b21lciA9IGN1c3RvbWVyXHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNVU1RPTUVSLCBKU09OLnN0cmluZ2lmeShjdXN0b21lcikpXHJcblxyXG5cdFx0bGV0IHNhbWVDaGFubmVsID0gY3VzdG9tZXIgPyB0aGlzLnNhbWVDaGFubmVsKGN1c3RvbWVyLmNoYW5uZWxzWzBdLmNvZGUsIGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZSkgOiBudWxsXHJcblxyXG5cdFx0aWYgKGN1c3RvbWVyKSB7XHJcblx0XHRcdGlmICghc2FtZUNoYW5uZWwpIHtcclxuXHRcdFx0XHQhdGhpcy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKSA/XHJcblx0XHRcdFx0XHR0aGlzLmxvY2FsU3RvcmFnZT8uc2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIsIEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwsXHJcblx0XHRcdFx0XHRcdGxvY2FsZTogdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRVxyXG5cdFx0XHRcdFx0fSkpIDogbnVsbDtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZUNoYW5uZWwoe1xyXG5cdFx0XHRcdFx0Y2hhbm5lbDogY3VzdG9tZXIuY2hhbm5lbHNbMF0uY29kZSxcclxuXHRcdFx0XHRcdGxvY2FsZTogY3VzdG9tZXIuY2hhbm5lbHNbMF0ubG9jYWxlcy5jb2RlXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHRyZWZyZXNoUGFnZSA9IHRydWVcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGV0IHJlcyA9IEpTT04ucGFyc2UodGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKSlcclxuXHRcdFx0aWYgKHJlcykge1xyXG5cdFx0XHRcdGlmICghdGhpcy5zYW1lQ2hhbm5lbChyZXMuY2hhbm5lbCwgcmVzLmxvY2FsZSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlQ2hhbm5lbChyZXMpXHJcblx0XHRcdFx0XHRyZWZyZXNoUGFnZSA9IHRydWVcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5sb2NhbFN0b3JhZ2U/LnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly90aGlzLl9jYXJ0U2VydmljZS5jbGVhckFuZFJlc2V0Q3VzdG9tZXJDYXJ0KClcclxuXHRcdHJlZnJlc2hQYWdlID8gbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYgOiBudWxsXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb21wcnVlYmEgc2kgbG9zIHZhbG9yZXMgZGVsIGNhbmFsIGFjdHVhbCBzb24gaWd1YWxlcyBhIGxvcyBpbmdyZXNhZG8gcG9yIHBhcmFtZXRyb3MuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgTm9tYnJlIGRlbCBjYW5hbFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgIExvY2FsZSBkZWwgY2FuYWxcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBzaSBlcyBlbCBtaXNtbyBjYW5hbCwgRmFsc2UgY2FzbyBjb250cmFyaW8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzYW1lQ2hhbm5lbCA9IChjaGFubmVsOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nKTogYm9vbGVhbiA9PiAoY2hhbm5lbCA9PSB0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTCkgJiYgKGxvY2FsZSA9PSB0aGlzLl9hcGlDb25zdHMuTE9DQUxFKVxyXG5cclxuXHQvKipcclxuXHQgKiBDYW1iaWEgZGUgY2FuYWxcclxuXHQgKiBAcGFyYW0gY2hhbm5lbENvbmZpZyBkZWJlIHNlciB1biBvYmpldG8gcXVlIGNvbnRlbmdhIGFsIG1lbm9zIGxhcyBrZXlzIGNoYW5uZWwgeSBsb2NhbGUuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBjaGFuZ2VDaGFubmVsID0gKGNoYW5uZWxDb25maWc6IGFueSkgPT4ge1xyXG5cdFx0dGhpcy5fY29uc3RhbnRzLm1vZGlmeUNoYW5uZWxDb25maWcoe1xyXG5cdFx0XHRjaGFubmVsOiBjaGFubmVsQ29uZmlnLmNoYW5uZWwsXHJcblx0XHRcdGxvY2FsZTogY2hhbm5lbENvbmZpZy5sb2NhbGVcclxuXHRcdH0pXHJcblx0fVxyXG5cdGdldFVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8VXNlciB8IG51bGw+IHtcclxuXHRcdHJldHVybiAodGhpcy5fdXNlciAmJiBvZih0aGlzLl91c2VyKSkgfHwgdGhpcy5nZXRDdXJyZW50VXNlcigpO1xyXG5cdH1cclxuXHRwcml2YXRlIGdldEN1cnJlbnRVc2VyKCk6IE9ic2VydmFibGU8VXNlciB8IG51bGw+IHtcclxuXHRcdHRoaXMuX3VzZXIgPSBuZXcgVXNlcigpO1xyXG5cdFx0aWYgKCF0aGlzLmxvYWRVc2VyRnJvbVN0b3JhZ2UoKSkge1xyXG5cdFx0XHR0aGlzLl91c2VyID0gbnVsbFxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG9mKHRoaXMuX3VzZXIpO1xyXG5cdH1cclxufVxyXG4iXX0=
@@ -24,16 +24,7 @@ export class CartService {
24
24
  _couponSubject = new BehaviorSubject(null);
25
25
  _cartItemsSubject = new BehaviorSubject([]);
26
26
  _requestInProcess = new BehaviorSubject(false);
27
- _balanceCustomerSubject = new BehaviorSubject({
28
- allowAnyPaymentMethod: false,
29
- allowExceedBalance: false,
30
- creditAmount: 0,
31
- showMax: false,
32
- showPrice: false,
33
- remainingCredits: 0,
34
- applyMaxOrders: false,
35
- maxOrders: Infinity
36
- });
27
+ _balanceCustomerSubject = new BehaviorSubject(null);
37
28
  CART_KEY = 'cart';
38
29
  CART_TOKEN_KEY = 'cart_token';
39
30
  _items = [];
@@ -47,11 +38,11 @@ export class CartService {
47
38
  loading$ = this._requestInProcess.asObservable();
48
39
  _haveToUpdate = true;
49
40
  balanceCustomer$ = this._balanceCustomerSubject.asObservable();
50
- allowAnyPaymentMethod$ = this.balanceCustomer$.pipe(map(data => data.allowAnyPaymentMethod));
51
- allowExceedBalance$ = this.balanceCustomer$.pipe(map(data => data.allowExceedBalance));
52
- creditAmount$ = this.balanceCustomer$.pipe(map(data => data.creditAmount));
53
- showMax$ = this.balanceCustomer$.pipe(map(data => data.showMax));
54
- showPrice$ = this.balanceCustomer$.pipe(map(data => data.showPrice));
41
+ allowAnyPaymentMethod$ = this.balanceCustomer$.pipe(map(data => data?.allowAnyPaymentMethod ?? null));
42
+ allowExceedBalance$ = this.balanceCustomer$.pipe(map(data => data?.allowExceedBalance ?? null));
43
+ creditAmount$ = this.balanceCustomer$.pipe(map(data => data?.creditAmount ?? null));
44
+ showMax$ = this.balanceCustomer$.pipe(map(data => data?.showMax ?? null));
45
+ showPrice$ = this.balanceCustomer$.pipe(map(data => data?.showPrice ?? null));
55
46
  promotions$ = this._promotionsSubject.asObservable();
56
47
  //API URL
57
48
  _cartBaseUrl = `${this._apiConsts.SHOP_API_URL}${this._apiConsts.CHANNEL}/carts`;
@@ -124,7 +115,9 @@ export class CartService {
124
115
  */
125
116
  addToCart(product, quantity, variantId) {
126
117
  const balance = this._balanceCustomerSubject.value;
127
- if (balance.applyMaxOrders && (balance.maxOrders && (balance.maxOrders <= 0 || balance.maxOrders === null))) {
118
+ const applyMaxOrders = balance?.applyMaxOrders ?? false;
119
+ const maxOrders = balance?.maxOrders ?? Infinity;
120
+ if (applyMaxOrders && (maxOrders <= 0 || maxOrders === null)) {
128
121
  this._toastService.show('max-orders-reached');
129
122
  return;
130
123
  }
@@ -233,7 +226,7 @@ export class CartService {
233
226
  * @param quantity la cantidad nueva.
234
227
  */
235
228
  updateItemQuantity(item, quantity) {
236
- if (this.validateQuantity(item, quantity)) {
229
+ if (this.validateQuantity(item, quantity) && (this.validatePriceAndCredits(item, quantity))) {
237
230
  firstValueFrom(this._connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) })).then(res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)), err => this.handleError(err));
238
231
  }
239
232
  }
@@ -273,6 +266,7 @@ export class CartService {
273
266
  */
274
267
  updateCartObj(cart, emitEvent = true) {
275
268
  this._cartSubject.next(cart);
269
+ this.updateBalanceAttributes(cart?.balanceCustomer, cart?.totals?.total);
276
270
  emitEvent && this._analyticsService.callEvent('add_to_cart', cart);
277
271
  //this._promotionsSubject.next(this.orderUtils.getPromotions(cart, true));
278
272
  cart.couponCode
@@ -443,21 +437,25 @@ export class CartService {
443
437
  clearAndResetCart() {
444
438
  this.resetCart(() => this.getCart);
445
439
  }
446
- updateBalanceAttributes(cartData) {
440
+ updateBalanceAttributes(balance, total = null) {
441
+ if (!balance) {
442
+ this._balanceCustomerSubject.next(null);
443
+ return;
444
+ }
445
+ const totalAmount = total ?? 0;
447
446
  const balanceData = {
448
- allowAnyPaymentMethod: cartData?.allowAnyPaymentMethod ?? false,
449
- allowExceedBalance: cartData?.allowExceedBalance ?? false,
450
- creditAmount: cartData?.creditAmount ?? null,
451
- showMax: cartData?.showMax ?? false,
452
- showPrice: cartData?.showPrice ?? false,
453
- remainingCredits: cartData?.creditAmount && cartData?.creditAmount >= cartData?.totals.total
454
- ? cartData?.creditAmount - cartData?.totals.total
447
+ allowAnyPaymentMethod: balance.allowAnyPaymentMethod,
448
+ allowExceedBalance: balance.allowExceedBalance,
449
+ creditAmount: balance.creditAmount,
450
+ showMax: balance.showMax,
451
+ showPrice: balance.showPrice,
452
+ remainingCredits: balance.creditAmount != null && totalAmount != null && balance.creditAmount >= totalAmount
453
+ ? balance.creditAmount - totalAmount
455
454
  : 0,
456
- applyMaxOrders: cartData?.applyMaxOrders ?? false,
457
- maxOrders: cartData?.maxOrders ?? Infinity
455
+ applyMaxOrders: balance.applyMaxOrders,
456
+ maxOrders: balance.maxOrders
458
457
  };
459
458
  this._balanceCustomerSubject.next(balanceData);
460
- console.log(balanceData);
461
459
  }
462
460
  addToLot(product, quantity, variant_id, id, order_item_id, lot_quantity, unit_price, unit_total, ajustement_total, total_lot, lot_status, date_request, notes, shipping_address_id, shipping_address_name, action) {
463
461
  if (!this._authService.isAbleToBuy()) {
@@ -474,13 +472,34 @@ export class CartService {
474
472
  getCreditAmount = () => this._balanceCustomerSubject.pipe(map((balanceCustomer) => balanceCustomer?.creditAmount ?? null));
475
473
  getRemainingCredits = () => this._balanceCustomerSubject.pipe(map((balanceCustomer) => balanceCustomer?.remainingCredits));
476
474
  hasSufficientCreditsForCartTotal = () => {
477
- if (this._balanceCustomerSubject.value.creditAmount === null) {
475
+ const balance = this._balanceCustomerSubject.value;
476
+ if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
478
477
  return true;
479
478
  }
480
- if (this._balanceCustomerSubject.value.remainingCredits === undefined) {
479
+ if (balance.remainingCredits === undefined) {
480
+ return false;
481
+ }
482
+ if ((this._cartSubject.value?.totals?.total ?? 0) > balance.creditAmount) {
483
+ this._toastService.show('not-enough-credits');
481
484
  return false;
482
485
  }
483
- if ((this._cartSubject.value?.totals?.total ?? 0) > (this._balanceCustomerSubject.value?.creditAmount ?? 0)) {
486
+ return true;
487
+ };
488
+ validatePriceAndCredits = (item, quantity) => {
489
+ const balance = this._balanceCustomerSubject.value;
490
+ if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
491
+ return true;
492
+ }
493
+ if (balance.remainingCredits === undefined) {
494
+ return false;
495
+ }
496
+ const unitPrice = item.total / item.quantity;
497
+ const additionalQuantity = quantity - item.quantity;
498
+ if (additionalQuantity <= 0) {
499
+ return true;
500
+ }
501
+ const additionalCost = unitPrice * additionalQuantity;
502
+ if (additionalCost > balance.remainingCredits) {
484
503
  this._toastService.show('not-enough-credits');
485
504
  return false;
486
505
  }
@@ -495,4 +514,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
495
514
  providedIn: 'root'
496
515
  }]
497
516
  }], ctorParameters: () => [] });
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUlyRSxNQUFNLE9BQU8sV0FBVztJQUNmLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELGFBQWEsR0FBaUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25ELFdBQVcsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsVUFBVSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM5RCxpQkFBaUIsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsYUFB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QkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2RSxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0csSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5QyxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFSyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDLENBQUM7d0dBN2dCTyxXQUFXOzRHQUFYLFdBQVcsY0FGWCxNQUFNOzs0RkFFTixXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYWxhbmNlQ3VzdG9tZXIsIENhcnRJdGVtLCBJQ291cG9uLCBQcm9kdWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UsIENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuL2FuYWx5dGljcyc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xyXG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYXBpQ29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2FuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfc3RvcmFnZTogTmd4TG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcclxuXHJcblx0cHJpdmF0ZSBfY2FydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHRwcml2YXRlIF9wcm9tb3Rpb25zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHRwcml2YXRlIF9jb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblx0cHJpdmF0ZSBfY2FydEl0ZW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPihbXSlcclxuXHRwcml2YXRlIF9yZXF1ZXN0SW5Qcm9jZXNzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHRwcml2YXRlIF9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFsYW5jZUN1c3RvbWVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFsYW5jZUN1c3RvbWVyPih7XHJcbiAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBmYWxzZSxcclxuICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U6IGZhbHNlLFxyXG4gICAgICAgIGNyZWRpdEFtb3VudDogMCxcclxuICAgICAgICBzaG93TWF4OiBmYWxzZSxcclxuICAgICAgICBzaG93UHJpY2U6IGZhbHNlLFxyXG4gICAgICAgIHJlbWFpbmluZ0NyZWRpdHM6IDAsXHJcblx0XHRhcHBseU1heE9yZGVyczogZmFsc2UsXHJcbiAgICAgICAgbWF4T3JkZXJzOiBJbmZpbml0eVxyXG4gICAgfSk7XHJcblxyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0FSVF9LRVk6IHN0cmluZyA9ICdjYXJ0JztcclxuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfVE9LRU5fS0VZOiBzdHJpbmcgPSAnY2FydF90b2tlbic7XHJcblxyXG5cdHByaXZhdGUgX2l0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdHByaXZhdGUgX2NvdW50OiBudW1iZXIgPSAwO1xyXG5cdHB1YmxpYyBjYXJ0VG9rZW46IHN0cmluZyB8IG51bGwgPSAnJztcclxuXHRwdWJsaWMgY2hhbm5lbENvbmZpZzogYW55ID0ge307XHJcblx0cHJpdmF0ZSBfbG9jYWxlID0gXCJcIjtcclxuXHRwdWJsaWMgY2FydEl0ZW1zJCA9IHRoaXMuX2NhcnRJdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoaXRlbXMgPT4gdGhpcy5zd2l0Y2hQcmljZUluQ2FydEl0ZW0oaXRlbXMpKSlcclxuXHRwdWJsaWMgY291cG9uJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fY291cG9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgY2FydCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX3JlcXVlc3RJblByb2Nlc3MuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHJpdmF0ZSBfaGF2ZVRvVXBkYXRlID0gdHJ1ZTtcclxuXHRwdWJsaWMgYmFsYW5jZUN1c3RvbWVyJCA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgYWxsb3dBbnlQYXltZW50TWV0aG9kJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGEuYWxsb3dBbnlQYXltZW50TWV0aG9kKSk7XHJcbiAgICBwdWJsaWMgYWxsb3dFeGNlZWRCYWxhbmNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGEuYWxsb3dFeGNlZWRCYWxhbmNlKSk7XHJcbiAgICBwdWJsaWMgY3JlZGl0QW1vdW50JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGEuY3JlZGl0QW1vdW50KSk7XHJcbiAgICBwdWJsaWMgc2hvd01heCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnNob3dNYXgpKTtcclxuICAgIHB1YmxpYyBzaG93UHJpY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YS5zaG93UHJpY2UpKTtcclxuXHRwdWJsaWMgcHJvbW90aW9ucyQgPSB0aGlzLl9wcm9tb3Rpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHQvL0FQSSBVUkxcclxuXHRwcml2YXRlIF9jYXJ0QmFzZVVybDogc3RyaW5nID0gYCR7dGhpcy5fYXBpQ29uc3RzLlNIT1BfQVBJX1VSTH0ke3RoaXMuX2FwaUNvbnN0cy5DSEFOTkVMfS9jYXJ0c2A7XHJcblxyXG5cdHB1YmxpYyB1cGRhdGVJdGVtUXVhbnRpdHlBcGkoaXRlbV9pZDogYW55KSB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFOyB9XHJcblx0cHVibGljIGFkZEl0ZW1BcGkoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRSB9XHJcblx0cHVibGljIGNhcnRJdGVtc0FwaSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRSB9XHJcblx0cHVibGljIGRlbGV0ZUl0ZW1BcGkoaXRlbV9pZDogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFOyB9XHJcblx0cHVibGljIGNvdXBvbkFwaSgpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2NvdXBvbicgfTtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblx0XHR0aGlzLmNhcnRUb2tlbiA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVkpIHx8IG51bGw7XHJcblx0XHR0aGlzLmluaXRpYWxpemVEYXRhQ2FydCgpO1xyXG5cdFx0dGhpcy5fY2hhbm5lbFNlcnZpY2UuY2hhbm5lbCQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmNoYW5uZWxDb25maWcgPSByZXMpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEluaWNpYWxpemEgZWwgY2Fycml0byBjb24gbG9zIGRhdG9zIGRlbCBsb2NhbCBzdG9yYWdlIGVuIGNhc28gZGUgcXVlIGV4aXN0YW4gbyBuby5cclxuXHQgKi9cclxuXHRwcml2YXRlIGluaXRpYWxpemVEYXRhQ2FydCgpIHtcclxuXHRcdGNvbWJpbmVMYXRlc3QoW3RoaXMuX2F1dGhTZXJ2aWNlLmxvZ2dlZEluJCwgdGhpcy5fc3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0FSVF9LRVkpXSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKFtsb2dnZWRJbiwgdG9rZW5dKSA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhsb2dnZWRJbiwgdG9rZW4pO1xyXG5cdFx0XHRcdHRoaXMuX2l0ZW1zID0gdG9rZW4gfHwgW107XHJcblx0XHRcdFx0dGhpcy5nZXRDYXJ0KClcclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBlbCBjYXJyaXRvIGRlc2RlIGVsIGJhY2tlbmQgeSBsbyBpbmljaWFsaXphLiBcclxuXHQgKiBTaSBleGlzdGUgZWwgY2FydFRva2VuIHkgaGF5IGl0ZW1zIGVuIGVsIGNhcnJpdG8sIGVudsOtYSBlbCB0b2tlbiBjb21vIHBhcsOhbWV0cm8uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRDYXJ0KCkge1xyXG5cdFx0Ly9jb25zb2xlLndhcm4odGhpcy5faXRlbXMsIHRoaXMuX2l0ZW1zLmxlbmd0aCwgdGhpcy5jYXJ0VG9rZW4pXHJcblx0XHRmaXJzdFZhbHVlRnJvbShcclxuXHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0VG9rZW4gJiYgdGhpcy5faXRlbXMubGVuZ3RoID49IDEpICYmIHsgdG9rZW46IHRoaXMuY2FydFRva2VuIH0pKVxyXG5cdFx0KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKHJlcylcdFxyXG5cdFx0XHR0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuXHRcdH0pXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbmZpZ3VyYSBlbCBjYXJyaXRvIGNvbiBsb3MgcGFyYW1ldHJvcyBpbmljaWFsZXMuXHJcblx0ICogQHBhcmFtIHJlc3BvbnNlIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGluaXRpYWxpemVDYXJ0KHJlc3BvbnNlOiBhbnkpOiBhbnkge1xyXG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSwgdGhpcy5jYXJ0VG9rZW4pO1xyXG5cdFx0dGhpcy5fbG9jYWxlID0gcmVzcG9uc2UubG9jYWxlO1xyXG5cclxuXHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXNwb25zZSwgZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXNwb25zZS5pdGVtcykpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbG9zIGl0ZW1zIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBpdGVtcyBcclxuXHQgKi9cclxuXHR1cGRhdGVDYXJ0SXRlbXMoaXRlbXM6IGFueVtdKSB7XHJcblx0XHR0aGlzLl9pdGVtcyA9IGl0ZW1zO1xyXG5cdFx0dGhpcy5fY291bnQgPSBpdGVtcy5sZW5ndGg7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFncmVnYSB1biBwcm9kdWN0byBhbCBjYXJyaXRvIGNvbiBsYSBjYW50aWRhZCBkZXNlYWRhLiBcclxuXHQgKiBAcGFyYW0gcHJvZHVjdCBQcm9kdWN0byBhIGFncmVnYXJcclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgQ2FudGlkYWQgXHJcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBJZCBkZSBsYSB2YXJpYW50ZVxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGFkZFRvQ2FydChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50SWQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgYmFsYW5jZTpCYWxhbmNlQ3VzdG9tZXIgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5hcHBseU1heE9yZGVycyAmJiAoIGJhbGFuY2UubWF4T3JkZXJzICYmIChiYWxhbmNlLm1heE9yZGVycyA8PSAwIHx8IGJhbGFuY2UubWF4T3JkZXJzID09PSBudWxsKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21heC1vcmRlcnMtcmVhY2hlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcblx0XHRcdHJldHVyblxyXG5cdFx0IH1cclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHRcdGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50SWQsIHF1YW50aXR5KTtcclxuXHJcblx0XHRpZiAoIWFkZGVkKSB7XHJcblx0XHRcdGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudElkIH0pKVxyXG5cdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gTWFuZWphciBsYSByZXNwdWVzdGEgSFRUUCBleGl0b3NhIChjw7NkaWdvIDIwMClcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBNYW5lamFyIGVsIGVycm9yIGRlIGxhIGxsYW1hZGEgSFRUUCAoY8OzZGlnbyA1MDAgdSBvdHJvIGVycm9yKVxyXG5cdFx0XHRcdFx0XHRpZiAoZXJyLnN0YXR1cyA9PT0gNTAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdjYXJ0LWVycm9yJyk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gT3RybyBjw7NkaWdvIGRlIGVycm9yXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdlcnJvci1zZXJ2ZXInKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBlbCBjYXJyaXRvIGFncmVnYW5kbyBsb3MgbnVldm9zIGl0ZW1zLlxyXG5cdCAqIEBwYXJhbSBjYXJ0IFxyXG5cdCAqL1xyXG5cdGFwcGVuZFRvQ2FydChjYXJ0OiBhbnkpIHtcclxuXHRcdHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0KTtcclxuXHRcdHRoaXMuX2l0ZW1zID0gdGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0Lml0ZW1zKTtcclxuXHRcdHRoaXMuX2NvdW50ID0gdGhpcy5faXRlbXMubGVuZ3RoO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBNYXBlYSBsb3MgaXRlbXMgZGVsIGNhcnJpdG8gcGFyYSBkYXJsZSB1biBtZWpvciBmb3JtYXRvIHNpbWlsYXIgYSBsYSBpbnRlcmZheiBgQ2FydEl0ZW1gLlxyXG5cdCAqIEBwYXJhbSBpdGVtcyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHR0cmFuc2Zvcm1JdGVtcyhpdGVtczogYW55KTogYW55W10ge1xyXG5cdFx0cmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0cHJvZHVjdDogaXRlbS5wcm9kdWN0LFxyXG5cdFx0XHRcdHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxyXG5cdFx0XHRcdGxvdDogaXRlbS5vcmRlckl0ZW1Mb3QsXHJcblx0XHRcdFx0cXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcblx0XHRcdFx0aXRlbV9pZDogaXRlbS5pZCxcclxuXHRcdFx0XHR0b3RhbDogaXRlbS50b3RhbFxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2hlcXVlYSBzaSBlbCBwcm9kdWN0byB5YSBleGlzdGUgZW4gZWwgY2Fycml0byBkZSBjb21wcmFzLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0IFxyXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgXHJcblx0ICogQHBhcmFtIHF1YW50aXR5QWRkIENhbnRpZGFkIGEgYWdyZWdhci4gUG9yIGRlZmVjdG8gZXMgMS5cclxuXHQgKi9cclxuXHRhZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmlhbnRJZDogc3RyaW5nLCBxdWFudGl0eUFkZDogbnVtYmVyID0gMSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcclxuXHRcdFx0aWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50SWQpIHtcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCB0aGlzLmZpbmRJdGVtKHByb2R1Y3QuaWQpLnF1YW50aXR5ICsgcXVhbnRpdHlBZGQpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH0pXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgbGEgY2FudGlkYWQgZGUgdW4gcHJvZHVjdG8gZGVsIGl0ZW0gZGVsIGNhcnJpdG8gXHJcblx0ICogQHBhcmFtIGNvZGVWYXJpYW50IGNvZGlnbyBkZSBsYSB2YXJpYW50ZS5cclxuXHQgKiBAcmV0dXJucyBsYSBjYW50aWRhZCBvIGAwYCBlbiBzdSBkZWZlY3RvLlxyXG5cdCAqL1xyXG5cdGdldENvdW50RnJvbUl0ZW1JbkNhcnQoY29kZVZhcmlhbnQ6IGFueSk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSBjb2RlVmFyaWFudCk/LnF1YW50aXR5IHx8IDA7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgdW4gb2JzZXJ2YWJsZSBjb24gbGEgY2FudGlkYWQgZGUgaXRlbXMgZW4gZWwgY2Fycml0by5cclxuXHQgKi9cclxuXHRnZXRDb3VudENhcnRJdGVtcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydEl0ZW1zJC5waXBlKG1hcCgoY2FydEl0ZW1zKSA9PiBjYXJ0SXRlbXM/Lmxlbmd0aCkpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBNYXBlYSBsb3MgcHJvZHVjdG9zIGVuIGVsIGNhcnJpdG8gcGFyYSBjYW1iaWFyIGVsIHByZWNpbyBvYnRlbmllbmRvIGRlIGxhIHZhcmlhbnRlIHkgc2VsZWNjaW9uYW5kbyBzaSBlc1xyXG5cdCAqIHByZWNpbyBkZSBvZmVydGEgbyBlbCBwcmVjaW8gbm9ybWFsLlxyXG5cdCAqIEBwYXJhbSBpdGVtcyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIHN3aXRjaFByaWNlSW5DYXJ0SXRlbSA9IChpdGVtczogYW55W10pID0+IHtcclxuXHRcdHJldHVybiBpdGVtcy5tYXAoXHJcblx0XHRcdGl0ZW0gPT4ge1xyXG5cdFx0XHRcdGlmIChpdGVtLnByb2R1Y3QpIHtcclxuXHRcdFx0XHRcdGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gaXRlbVxyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZSB1biBwcm9kdWN0byBleGlzdGVudGUgZW4gZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gaXRlbSBlbCBpdGVtIGEgYWN0dWFsaXphci5cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgbGEgY2FudGlkYWQgbnVldmEuXHJcblx0ICovXHJcblx0dXBkYXRlSXRlbVF1YW50aXR5KGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eTogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSkge1xyXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcclxuXHRcdFx0XHR0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eUFwaSh0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKSksIHsgJ3F1YW50aXR5JzogTnVtYmVyKHF1YW50aXR5KSB9KSkudGhlbihcclxuXHRcdFx0XHRcdHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcclxuXHRcdFx0XHRcdGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuXHRcdFx0XHQpXHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE1hbmVqYSBlbCBlcnJvciBlbiBjYXNvIGRlIHF1ZSBubyBzZSBwdWVkYSBhZ3JlZ2FyIGFsIGNhcnJpdG8gZWwgcHJvZHVjdG8uXHJcblx0ICogQHBhcmFtIGVyciBcclxuXHQgKi9cclxuXHRoYW5kbGVFcnJvcihlcnI6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxhIGNhbnRpZGFkIGRlbCBpdGVtIGRlbCBwcm9kdWN0byBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gdmFyaWFudElkIElEIGRlIGxhIHZhcmlhbnRlIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IE51ZXZhIGNhbnRpZGFkLiBcclxuXHQgKi9cclxuXHR1cGRhdGVDYXJ0SXRlbVF1YW50aXR5KHZhcmlhbnRJZDogYW55LCBxdWFudGl0eTogbnVtYmVyKTogdm9pZCB7XHJcblx0XHQvL2NvbnNvbGUubG9nKFwidXBkYXRlQ2FydEl0ZW1RdWFudGl0eVwiLCB0aGlzLl9pdGVtcywgdmFyaWFudElkKVxyXG5cdFx0bGV0IG5ld1F1YW50aXR5ID0gdGhpcy5faXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50SWQpLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdC11cGRhdGVkJywgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsb3MgZGF0b3MgZGVsIGNhcnJpdG8gZW4gZWwgbG9jYWxTdG9yYWdlLiBcclxuXHQgKi9cclxuXHR1cGRhdGVMb2NhbENhcnQoKSB7XHJcblx0XHR0aGlzLl9zdG9yYWdlLnNldEl0ZW0odGhpcy5DQVJUX0tFWSwgdGhpcy5faXRlbXMpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBlbCBjYXJyaXRvLiBFbWl0ZSBldmVudG8gZGUgYW5hbGl0aWNzLiBcclxuXHQgKiBBY3R1YWxpemEgdG9kbyBsbyByZWxhY2lvbmFkbyBhbCBjdXDDs24uXHJcblx0ICogQHBhcmFtIGNhcnQgUmVzcHVlc3RhIHByb2R1Y2lkYSBwb3IgZWwgZW5wb2ludCBjb24gaW5mb3JtYWNpw7NuIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBlbWl0RXZlbnQgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dXBkYXRlQ2FydE9iaihjYXJ0OiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiBib29sZWFuIHtcclxuXHRcdHRoaXMuX2NhcnRTdWJqZWN0Lm5leHQoY2FydCk7XHJcblx0XHRlbWl0RXZlbnQgJiYgdGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2FkZF90b19jYXJ0JywgY2FydCk7XHJcblx0XHQvL3RoaXMuX3Byb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuXHRcdGNhcnQuY291cG9uQ29kZVxyXG5cdFx0XHQ/IHRoaXMuZm9ybWF0Q291cG9uKGNhcnQpXHJcblx0XHRcdDogdGhpcy5fY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFwbGljYXIgdW4gbWVqb3IgZm9ybWF0byBhIGxvcyBkYXRvcyBkZSBsb3MgY3Vwb25lcyBhcGxpY2Fkb3MuXHJcblx0ICogQHBhcmFtIGNhcnQgXHJcblx0ICovXHJcblx0Zm9ybWF0Q291cG9uKGNhcnQ6IGFueSkge1xyXG5cdFx0bGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5fY291cG9uU3ViamVjdC52YWx1ZTtcclxuXHRcdGxldCBjb3Vwb246IElDb3Vwb24gPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcclxuXHRcdFx0Y291cG9uID0ge1xyXG5cdFx0XHRcdC4uLmNvdXBvbixcclxuXHRcdFx0XHRhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXHJcblx0XHRcdFx0bmFtZTogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5uYW1lKSB8fCAnbm8tbmFtZSdcclxuXHRcdFx0fTtcclxuXHRcdH0gY2F0Y2ggKGUpIHsgfVxyXG5cdFx0KGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5fY291cG9uU3ViamVjdC5uZXh0KGNvdXBvbik7XHJcblx0XHQvL2NvbnNvbGUubG9nKGNvdXBvbik7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgSUQgZGVsIGl0ZW0gZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHZhcmlhbnRfaWQgSWQgZGUgbGEgdmFyaWFudGUgdXRpbGl6YWRhIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0ZmluZEl0ZW1CeUlkVmFyaWFudCh2YXJpYW50X2lkOiBhbnkpOiBhbnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkhLml0ZW1faWRcclxuXHR9XHJcblx0LyoqXHJcblx0ICogVmFsaWRhIGxhIGNhbnRpZGFkIHBhcmEgc2FiZXIgc2kgc2UgcHVlZGUgYWN0dWFsaXphciBvIG5vLlxyXG5cdCAqIEBwYXJhbSBpdGVtIGl0ZW0gZGVsIGNhcnJpdG9cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0dmFsaWRhdGVRdWFudGl0eShpdGVtOiBhbnksIHF1YW50aXR5OiBhbnkpIHtcclxuXHRcdGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcblx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0fVxyXG5cdFx0aWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBCdXNjYSB1biBwcm9kdWN0byBhIHRyYXbDqXMgZGUgc3UgSUQgZW4gbG9zIGl0ZW1zIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0X2lkIFxyXG5cdCAqIEByZXR1cm5zXHJcblx0ICovXHJcblx0ZmluZEl0ZW0ocHJvZHVjdF9pZDogYW55KTogYW55IHsgcmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3RfaWQpIH1cclxuXHQvKipcclxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZGVsIGNhcnJpdG8gZW4gZWwgYmFja2VuZC5cclxuXHQgKiBAcGFyYW0gaXRlbSBpdGVtIGEgZWxpbWluYXJcclxuXHQgKiBAcGFyYW0gdG9hc3QgaW5kaWNhIHNpIHNlIGRpc3BhcmEgdW4gdG9hc3QgIG8gbm8uIFBvciBkZWZlY3RvIGVuIGB0cnVlYC5cclxuXHQgKi9cclxuXHRkZWxldGVDYXJ0SXRlbShpdGVtOiBhbnksIHRvYXN0OiBib29sZWFuID0gdHJ1ZSkge1xyXG5cdFx0bGV0IGlkSXRlbVNlYXJjaGVkID0gdGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZClcclxuXHRcdC8vY29uc29sZS5sb2coaWRJdGVtU2VhcmNoZWQpXHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmRlbGV0ZUl0ZW1BcGkoaWRJdGVtU2VhcmNoZWQpKSkudGhlbihcclxuXHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpO1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVyciA9PiB7XHJcblx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBpdGVtIGVuIGNhcnJpdG8gZGUgZm9ybWEgbG9jYWwuIFxyXG5cdCAqIEBwYXJhbSBjYXJ0IENhcnJpdG8sIGVzIGRlY2lyLCByZXNwdWVzdGEgZGVsIGJhY2tlbmQuXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgcHJvZHVjdG8gYSBlbGltaW5hclxyXG5cdCAqIEBwYXJhbSB0b2FzdCB7Ym9vbGVhbn0gcGFyYSBpbmRpY2FyIHNpIHNlIGRpc3BhcmEgdW4gdG9hc3QgbyBuby4gXHJcblx0ICovXHJcblx0cmVtb3ZlQ2FydEl0ZW0oY2FydDogYW55LCBwcm9kdWN0OiBhbnksIHRvYXN0OiBib29sZWFuKSB7XHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xyXG5cdFx0dGhpcy5faXRlbXMuc3BsaWNlKHRoaXMuX2l0ZW1zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pdGVtX2lkID09PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0XHR0b2FzdCAmJiB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0dG9hc3QgJiYgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdyZW1vdmVfZnJvbV9jYXJ0JywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5fY29uc3RzLmN1cnJlbmN5LmNvZGUgfSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWdyZWdhIHVuIGN1cG9uIGFsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHZhbHVlIENvZGlnbyBkZWwgY3Vww7NuLlxyXG5cdCAqL1xyXG5cdGFkZENvdXBvbih2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogdmFsdWUgfSkpLnRoZW4oXHJcblx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhyZXMpXHJcblx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcylcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnQ3Vwb24gYXBsaWNhZG8nKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5lcnJvcihlcnIpIFxyXG5cdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdpbnZhbGlkLWNvdXBvbicpXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBjdXDDs24gZGVsIGNhcnJpdG8uIFxyXG5cdCAqL1xyXG5cdHJlbW92ZUNvdXBvbigpIHtcclxuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZGVsZXRlKHRoaXMuY291cG9uQXBpKCkpKS50aGVuKFxyXG5cdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXMpXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblxyXG5cdGdldENvdXBvbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8uY291cG9uQ29kZSkpO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHN1YnRvdGFsIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFN1YlRvdGFsQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5pdGVtcykpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHRvdGFsIGRlbCBtb250byBkZSBsYXMgcHJvbW9jaW9uZXMgYXBsaWNhZGFzLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFRvdGFsUHJvbW90aW9uQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5wcm9tb3Rpb24pKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byBkZSBsb3MgaW1wdWVzdG9zIGFwbGljYWRvcy5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUYXhlc0Ftb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byB0b3RhbCBkZWwgY2Fycml0by5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUb3RhbEFtb3VudCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0Q2FydFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydFRva2VuO1xyXG5cdH1cclxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XHJcblx0Y2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgYW5kIHJlc2V0aW5nLi4uXCIpXHJcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG5cdFx0XHRyZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcblx0XHQpXHJcblx0cHJpdmF0ZSByZXNldENhcnQgPSAoZm4/OiBhbnkpID0+IHtcclxuXHRcdHRoaXMuX2l0ZW1zID0gW107XHJcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gbnVsbDtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XHJcblx0XHR0aGlzLl9jb3VudCA9IDA7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCBcIltdXCIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XHJcblx0XHRmbiAmJiBmbigpO1xyXG5cdH1cclxuXHRjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCgoKSA9PiB0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuXHRwdWJsaWMgdXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydERhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2VEYXRhID0ge1xyXG4gICAgICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGNhcnREYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93RXhjZWVkQmFsYW5jZTogY2FydERhdGE/LmFsbG93RXhjZWVkQmFsYW5jZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBjYXJ0RGF0YT8uY3JlZGl0QW1vdW50ID8/IG51bGwsXHJcbiAgICAgICAgICAgIHNob3dNYXg6IGNhcnREYXRhPy5zaG93TWF4ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93UHJpY2U6IGNhcnREYXRhPy5zaG93UHJpY2UgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbWFpbmluZ0NyZWRpdHM6IGNhcnREYXRhPy5jcmVkaXRBbW91bnQgJiYgY2FydERhdGE/LmNyZWRpdEFtb3VudCA+PSBjYXJ0RGF0YT8udG90YWxzLnRvdGFsXHJcbiAgICAgICAgICAgICAgICA/IGNhcnREYXRhPy5jcmVkaXRBbW91bnQgLSBjYXJ0RGF0YT8udG90YWxzLnRvdGFsXHJcbiAgICAgICAgICAgICAgICA6IDAsXHJcblx0XHRcdFx0YXBwbHlNYXhPcmRlcnM6IGNhcnREYXRhPy5hcHBseU1heE9yZGVycyA/PyBmYWxzZSxcclxuXHRcdFx0XHRtYXhPcmRlcnM6IGNhcnREYXRhPy5tYXhPcmRlcnMgPz8gSW5maW5pdHlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xyXG5cdFx0Y29uc29sZS5sb2coYmFsYW5jZURhdGEpXHJcbiAgICB9XHJcblx0YWRkVG9Mb3QocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudF9pZDogYW55LCBpZD86IG51bWJlciwgb3JkZXJfaXRlbV9pZD86IGFueSwgbG90X3F1YW50aXR5PzogYW55LCB1bml0X3ByaWNlPzogYW55LCB1bml0X3RvdGFsPzogYW55LCBhanVzdGVtZW50X3RvdGFsPzogYW55LCB0b3RhbF9sb3Q/OiBudW1iZXIsIGxvdF9zdGF0dXM/OiBzdHJpbmcsIGRhdGVfcmVxdWVzdD86IHN0cmluZywgbm90ZXM/OiBzdHJpbmcsIHNoaXBwaW5nX2FkZHJlc3NfaWQ/OiBudW1iZXIsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZT86IHN0cmluZywgYWN0aW9uPzogc3RyaW5nKXtcclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYWRkZWQgPSAnJztcclxuICAgICAgICAhYWRkZWQgJiYgdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXMpID0+IHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyksXHJcblx0XHRcdFx0ZXJyb3I6IChlcnIpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG5cdFx0XHR9KTtcclxuICAgIH1cclxuXHJcblx0XHJcbiAgICBnZXRDcmVkaXRBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPiA9PlxyXG4gICAgICAgIHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShcclxuICAgICAgICAgICAgbWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXHJcbiAgICAgICAgKTtcclxuXHJcblxyXG4gICAgZ2V0UmVtYWluaW5nQ3JlZGl0cyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD4gPT5cclxuICAgICAgICB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUobWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8ucmVtYWluaW5nQ3JlZGl0cykpO1xyXG5cclxuXHRcclxuXHRwdWJsaWMgaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwgPSAoKTogYm9vbGVhbiA9PiB7XHJcblx0XHRpZiAodGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZS5jcmVkaXRBbW91bnQgPT09IG51bGwpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWUucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoKHRoaXMuX2NhcnRTdWJqZWN0LnZhbHVlPy50b3RhbHM/LnRvdGFsID8/IDApID4gKHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU/LmNyZWRpdEFtb3VudCA/PyAwKSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxufVxyXG4iXX0=
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUlyRSxNQUFNLE9BQU8sV0FBVztJQUNmLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELGFBQWEsR0FBaUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25ELFdBQVcsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsVUFBVSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM5RCxpQkFBaUIsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsYUFB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QU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7UUFFdEQsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5QyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDO3dHQTdpQk8sV0FBVzs0R0FBWCxXQUFXLGNBRlgsTUFBTTs7NEZBRU4sV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFsYW5jZUN1c3RvbWVyLCBDYXJ0SXRlbSwgSUNvdXBvbiwgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlLCBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi9hbmFseXRpY3MnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmd4TG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbmd4LWxvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRTZXJ2aWNlIHtcclxuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2FwaUNvbnN0czogQXBpQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChBcGlDb25zdGFudHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2xvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2NvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3N0b3JhZ2U6IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTmd4TG9jYWxTdG9yYWdlU2VydmljZSk7XHJcblxyXG5cdHByaXZhdGUgX2NhcnRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblx0cHJpdmF0ZSBfcHJvbW90aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcblx0cHJpdmF0ZSBfY291cG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cdHByaXZhdGUgX2NhcnRJdGVtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4oW10pXHJcblx0cHJpdmF0ZSBfcmVxdWVzdEluUHJvY2VzczogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblx0cHJpdmF0ZSBfYmFsYW5jZUN1c3RvbWVyU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEJhbGFuY2VDdXN0b21lciB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYWxhbmNlQ3VzdG9tZXIgfCBudWxsPihudWxsKTtcclxuXHJcblx0cHJpdmF0ZSByZWFkb25seSBDQVJUX0tFWTogc3RyaW5nID0gJ2NhcnQnO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0FSVF9UT0tFTl9LRVk6IHN0cmluZyA9ICdjYXJ0X3Rva2VuJztcclxuXHJcblx0cHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XHJcblx0cHJpdmF0ZSBfY291bnQ6IG51bWJlciA9IDA7XHJcblx0cHVibGljIGNhcnRUb2tlbjogc3RyaW5nIHwgbnVsbCA9ICcnO1xyXG5cdHB1YmxpYyBjaGFubmVsQ29uZmlnOiBhbnkgPSB7fTtcclxuXHRwcml2YXRlIF9sb2NhbGUgPSBcIlwiO1xyXG5cdHB1YmxpYyBjYXJ0SXRlbXMkID0gdGhpcy5fY2FydEl0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKG1hcChpdGVtcyA9PiB0aGlzLnN3aXRjaFByaWNlSW5DYXJ0SXRlbShpdGVtcykpKVxyXG5cdHB1YmxpYyBjb3Vwb24kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHB1YmxpYyBjYXJ0JDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fY2FydFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5hc09ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIF9oYXZlVG9VcGRhdGUgPSB0cnVlO1xyXG5cdHB1YmxpYyBiYWxhbmNlQ3VzdG9tZXIkID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2QkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dBbnlQYXltZW50TWV0aG9kID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBhbGxvd0V4Y2VlZEJhbGFuY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dFeGNlZWRCYWxhbmNlID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBjcmVkaXRBbW91bnQkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uY3JlZGl0QW1vdW50ID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBzaG93TWF4JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dNYXggPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dQcmljZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93UHJpY2UgPz8gbnVsbCkpO1xyXG5cdHB1YmxpYyBwcm9tb3Rpb25zJCA9IHRoaXMuX3Byb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdC8vQVBJIFVSTFxyXG5cdHByaXZhdGUgX2NhcnRCYXNlVXJsOiBzdHJpbmcgPSBgJHt0aGlzLl9hcGlDb25zdHMuU0hPUF9BUElfVVJMfSR7dGhpcy5fYXBpQ29uc3RzLkNIQU5ORUx9L2NhcnRzYDtcclxuXHJcblx0cHVibGljIHVwZGF0ZUl0ZW1RdWFudGl0eUFwaShpdGVtX2lkOiBhbnkpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7IH1cclxuXHRwdWJsaWMgYWRkSXRlbUFwaSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXM/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFIH1cclxuXHRwdWJsaWMgY2FydEl0ZW1zQXBpKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFIH1cclxuXHRwdWJsaWMgZGVsZXRlSXRlbUFwaShpdGVtX2lkOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7IH1cclxuXHRwdWJsaWMgY291cG9uQXBpKCkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvY291cG9uJyB9O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSkgfHwgbnVsbDtcclxuXHRcdHRoaXMuaW5pdGlhbGl6ZURhdGFDYXJ0KCk7XHJcblx0XHR0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcylcclxuXHR9XHJcblx0LyoqXHJcblx0ICogSW5pY2lhbGl6YSBlbCBjYXJyaXRvIGNvbiBsb3MgZGF0b3MgZGVsIGxvY2FsIHN0b3JhZ2UgZW4gY2FzbyBkZSBxdWUgZXhpc3RhbiBvIG5vLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaW5pdGlhbGl6ZURhdGFDYXJ0KCkge1xyXG5cdFx0Y29tYmluZUxhdGVzdChbdGhpcy5fYXV0aFNlcnZpY2UubG9nZ2VkSW4kLCB0aGlzLl9zdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX0tFWSldKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAoW2xvZ2dlZEluLCB0b2tlbl0pID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGxvZ2dlZEluLCB0b2tlbik7XHJcblx0XHRcdFx0dGhpcy5faXRlbXMgPSB0b2tlbiB8fCBbXTtcclxuXHRcdFx0XHR0aGlzLmdldENhcnQoKVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBPYnRpZW5lIGVsIGNhcnJpdG8gZGVzZGUgZWwgYmFja2VuZCB5IGxvIGluaWNpYWxpemEuIFxyXG5cdCAqIFNpIGV4aXN0ZSBlbCBjYXJ0VG9rZW4geSBoYXkgaXRlbXMgZW4gZWwgY2Fycml0bywgZW52w61hIGVsIHRva2VuIGNvbW8gcGFyw6FtZXRyby5cclxuXHQgKi9cclxuXHRwcml2YXRlIGdldENhcnQoKSB7XHJcblx0XHQvL2NvbnNvbGUud2Fybih0aGlzLl9pdGVtcywgdGhpcy5faXRlbXMubGVuZ3RoLCB0aGlzLmNhcnRUb2tlbilcclxuXHRcdGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSwgKCh0aGlzLmNhcnRUb2tlbiAmJiB0aGlzLl9pdGVtcy5sZW5ndGggPj0gMSkgJiYgeyB0b2tlbjogdGhpcy5jYXJ0VG9rZW4gfSkpXHJcblx0XHQpLnRoZW4oKHJlczogYW55KSA9PiB7XHJcblx0XHRcdC8vY29uc29sZS5sb2cocmVzKVx0XHJcblx0XHRcdHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG5cdFx0fSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ29uZmlndXJhIGVsIGNhcnJpdG8gY29uIGxvcyBwYXJhbWV0cm9zIGluaWNpYWxlcy5cclxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0aW5pdGlhbGl6ZUNhcnQocmVzcG9uc2U6IGFueSk6IGFueSB7XHJcblx0XHR0aGlzLmNhcnRUb2tlbiA9IHJlc3BvbnNlLnRva2VuVmFsdWU7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfVE9LRU5fS0VZLCB0aGlzLmNhcnRUb2tlbik7XHJcblx0XHR0aGlzLl9sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XHJcblxyXG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlc3BvbnNlLCBmYWxzZSk7XHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsb3MgaXRlbXMgZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIGl0ZW1zIFxyXG5cdCAqL1xyXG5cdHVwZGF0ZUNhcnRJdGVtcyhpdGVtczogYW55W10pIHtcclxuXHRcdHRoaXMuX2l0ZW1zID0gaXRlbXM7XHJcblx0XHR0aGlzLl9jb3VudCA9IGl0ZW1zLmxlbmd0aDtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWdyZWdhIHVuIHByb2R1Y3RvIGFsIGNhcnJpdG8gY29uIGxhIGNhbnRpZGFkIGRlc2VhZGEuIFxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0IFByb2R1Y3RvIGEgYWdyZWdhclxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBDYW50aWRhZCBcclxuXHQgKiBAcGFyYW0gdmFyaWFudElkIElkIGRlIGxhIHZhcmlhbnRlXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0YWRkVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRJZDogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBiYWxhbmNlOkJhbGFuY2VDdXN0b21lciB8IG51bGwgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cdFx0Y29uc3QgYXBwbHlNYXhPcmRlcnM6Ym9vbGVhbiA9IGJhbGFuY2U/LmFwcGx5TWF4T3JkZXJzID8/IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1heE9yZGVyczpudW1iZXIgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XHJcblxyXG4gICAgICAgIGlmIChhcHBseU1heE9yZGVycyAmJiAobWF4T3JkZXJzIDw9IDAgfHwgbWF4T3JkZXJzID09PSBudWxsKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbWF4LW9yZGVycy1yZWFjaGVkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblx0XHRpZiAoIXRoaXMuX2F1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuXHRcdFx0cmV0dXJuXHJcblx0XHQgfVxyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cdFx0bGV0IGFkZGVkID0gdGhpcy5hZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3QsIHZhcmlhbnRJZCwgcXVhbnRpdHkpO1xyXG5cclxuXHRcdGlmICghYWRkZWQpIHtcclxuXHRcdFx0Zmlyc3RWYWx1ZUZyb20oXHJcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50SWQgfSkpXHJcblx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmFwcGVuZFRvQ2FydChyZXMpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVyciA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIE1hbmVqYXIgZWwgZXJyb3IgZGUgbGEgbGxhbWFkYSBIVFRQIChjw7NkaWdvIDUwMCB1IG90cm8gZXJyb3IpXHJcblx0XHRcdFx0XHRcdGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBDw7NkaWdvIGRlIGVycm9yIDUwMCAodGltZW91dClcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhcnQtZXJyb3InKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBPdHJvIGPDs2RpZ28gZGUgZXJyb3JcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2Vycm9yLXNlcnZlcicpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGVsIGNhcnJpdG8gYWdyZWdhbmRvIGxvcyBudWV2b3MgaXRlbXMuXHJcblx0ICogQHBhcmFtIGNhcnQgXHJcblx0ICovXHJcblx0YXBwZW5kVG9DYXJ0KGNhcnQ6IGFueSkge1xyXG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xyXG5cdFx0dGhpcy5faXRlbXMgPSB0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnQuaXRlbXMpO1xyXG5cdFx0dGhpcy5fY291bnQgPSB0aGlzLl9pdGVtcy5sZW5ndGg7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE1hcGVhIGxvcyBpdGVtcyBkZWwgY2Fycml0byBwYXJhIGRhcmxlIHVuIG1lam9yIGZvcm1hdG8gc2ltaWxhciBhIGxhIGludGVyZmF6IGBDYXJ0SXRlbWAuXHJcblx0ICogQHBhcmFtIGl0ZW1zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHRyYW5zZm9ybUl0ZW1zKGl0ZW1zOiBhbnkpOiBhbnlbXSB7XHJcblx0XHRyZXR1cm4gaXRlbXMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRwcm9kdWN0OiBpdGVtLnByb2R1Y3QsXHJcblx0XHRcdFx0dmFyaWFudF9pZDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGUsXHJcblx0XHRcdFx0bG90OiBpdGVtLm9yZGVySXRlbUxvdCxcclxuXHRcdFx0XHRxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuXHRcdFx0XHRpdGVtX2lkOiBpdGVtLmlkLFxyXG5cdFx0XHRcdHRvdGFsOiBpdGVtLnRvdGFsXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDaGVxdWVhIHNpIGVsIHByb2R1Y3RvIHlhIGV4aXN0ZSBlbiBlbCBjYXJyaXRvIGRlIGNvbXByYXMuXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgXHJcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBcclxuXHQgKiBAcGFyYW0gcXVhbnRpdHlBZGQgQ2FudGlkYWQgYSBhZ3JlZ2FyLiBQb3IgZGVmZWN0byBlcyAxLlxyXG5cdCAqL1xyXG5cdGFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdDogUHJvZHVjdCwgdmFyaWFudElkOiBzdHJpbmcsIHF1YW50aXR5QWRkOiBudW1iZXIgPSAxKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXRlbXMuZmluZCgoaXRlbTogYW55LCBpbmRleCkgPT4ge1xyXG5cdFx0XHRpZiAoaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3QuaWQgJiYgaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRJZCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBsYSBjYW50aWRhZCBkZSB1biBwcm9kdWN0byBkZWwgaXRlbSBkZWwgY2Fycml0byBcclxuXHQgKiBAcGFyYW0gY29kZVZhcmlhbnQgY29kaWdvIGRlIGxhIHZhcmlhbnRlLlxyXG5cdCAqIEByZXR1cm5zIGxhIGNhbnRpZGFkIG8gYDBgIGVuIHN1IGRlZmVjdG8uXHJcblx0ICovXHJcblx0Z2V0Q291bnRGcm9tSXRlbUluQ2FydChjb2RlVmFyaWFudDogYW55KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IGNvZGVWYXJpYW50KT8ucXVhbnRpdHkgfHwgMDtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSB1biBvYnNlcnZhYmxlIGNvbiBsYSBjYW50aWRhZCBkZSBpdGVtcyBlbiBlbCBjYXJyaXRvLlxyXG5cdCAqL1xyXG5cdGdldENvdW50Q2FydEl0ZW1zKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0SXRlbXMkLnBpcGUobWFwKChjYXJ0SXRlbXMpID0+IGNhcnRJdGVtcz8ubGVuZ3RoKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE1hcGVhIGxvcyBwcm9kdWN0b3MgZW4gZWwgY2Fycml0byBwYXJhIGNhbWJpYXIgZWwgcHJlY2lvIG9idGVuaWVuZG8gZGUgbGEgdmFyaWFudGUgeSBzZWxlY2Npb25hbmRvIHNpIGVzXHJcblx0ICogcHJlY2lvIGRlIG9mZXJ0YSBvIGVsIHByZWNpbyBub3JtYWwuXHJcblx0ICogQHBhcmFtIGl0ZW1zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3dpdGNoUHJpY2VJbkNhcnRJdGVtID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG5cdFx0cmV0dXJuIGl0ZW1zLm1hcChcclxuXHRcdFx0aXRlbSA9PiB7XHJcblx0XHRcdFx0aWYgKGl0ZW0ucHJvZHVjdCkge1xyXG5cdFx0XHRcdFx0aXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBpdGVtXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxhIGNhbnRpZGFkIGRlIHVuIHByb2R1Y3RvIGV4aXN0ZW50ZSBlbiBlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBpdGVtIGVsIGl0ZW0gYSBhY3R1YWxpemFyLlxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBsYSBjYW50aWRhZCBudWV2YS5cclxuXHQgKi9cclxuXHR1cGRhdGVJdGVtUXVhbnRpdHkoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLnZhbGlkYXRlUXVhbnRpdHkoaXRlbSwgcXVhbnRpdHkpICYmICh0aGlzLnZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzKGl0ZW0sIHF1YW50aXR5KSkpIHtcclxuXHRcdFx0Zmlyc3RWYWx1ZUZyb20oXHJcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLCB7ICdxdWFudGl0eSc6IE51bWJlcihxdWFudGl0eSkgfSkpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcykgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbVF1YW50aXR5KGl0ZW0udmFyaWFudF9pZCwgTnVtYmVyKHF1YW50aXR5KSksXHJcblx0XHRcdFx0XHRlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcblx0XHRcdFx0KVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBNYW5lamEgZWwgZXJyb3IgZW4gY2FzbyBkZSBxdWUgbm8gc2UgcHVlZGEgYWdyZWdhciBhbCBjYXJyaXRvIGVsIHByb2R1Y3RvLlxyXG5cdCAqIEBwYXJhbSBlcnIgXHJcblx0ICovXHJcblx0aGFuZGxlRXJyb3IoZXJyOiBhbnkpOiB2b2lkIHtcclxuXHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3ItcGFyYW0nKTtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZWwgaXRlbSBkZWwgcHJvZHVjdG8gZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBJRCBkZSBsYSB2YXJpYW50ZSBwYXJhIGJ1c2NhciBlbCBpdGVtLlxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBOdWV2YSBjYW50aWRhZC4gXHJcblx0ICovXHJcblx0dXBkYXRlQ2FydEl0ZW1RdWFudGl0eSh2YXJpYW50SWQ6IGFueSwgcXVhbnRpdHk6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhcInVwZGF0ZUNhcnRJdGVtUXVhbnRpdHlcIiwgdGhpcy5faXRlbXMsIHZhcmlhbnRJZClcclxuXHRcdGxldCBuZXdRdWFudGl0eSA9IHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKS5xdWFudGl0eSA9IHF1YW50aXR5O1xyXG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG5cdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtdXBkYXRlZCcsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbG9zIGRhdG9zIGRlbCBjYXJyaXRvIGVuIGVsIGxvY2FsU3RvcmFnZS4gXHJcblx0ICovXHJcblx0dXBkYXRlTG9jYWxDYXJ0KCkge1xyXG5cdFx0dGhpcy5fc3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9LRVksIHRoaXMuX2l0ZW1zKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgZWwgY2Fycml0by4gRW1pdGUgZXZlbnRvIGRlIGFuYWxpdGljcy4gXHJcblx0ICogQWN0dWFsaXphIHRvZG8gbG8gcmVsYWNpb25hZG8gYWwgY3Vww7NuLlxyXG5cdCAqIEBwYXJhbSBjYXJ0IFJlc3B1ZXN0YSBwcm9kdWNpZGEgcG9yIGVsIGVucG9pbnQgY29uIGluZm9ybWFjacOzbiBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gZW1pdEV2ZW50IFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHVwZGF0ZUNhcnRPYmooY2FydDogYW55LCBlbWl0RXZlbnQgPSB0cnVlKTogYm9vbGVhbiB7XHJcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KGNhcnQpO1xyXG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0Py5iYWxhbmNlQ3VzdG9tZXIsIGNhcnQ/LnRvdGFscz8udG90YWwpO1xyXG5cdFx0ZW1pdEV2ZW50ICYmIHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdhZGRfdG9fY2FydCcsIGNhcnQpO1xyXG5cdFx0Ly90aGlzLl9wcm9tb3Rpb25zU3ViamVjdC5uZXh0KHRoaXMub3JkZXJVdGlscy5nZXRQcm9tb3Rpb25zKGNhcnQsIHRydWUpKTtcclxuXHJcblx0XHRjYXJ0LmNvdXBvbkNvZGVcclxuXHRcdFx0PyB0aGlzLmZvcm1hdENvdXBvbihjYXJ0KVxyXG5cdFx0XHQ6IHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChudWxsKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBcGxpY2FyIHVuIG1lam9yIGZvcm1hdG8gYSBsb3MgZGF0b3MgZGUgbG9zIGN1cG9uZXMgYXBsaWNhZG9zLlxyXG5cdCAqIEBwYXJhbSBjYXJ0IFxyXG5cdCAqL1xyXG5cdGZvcm1hdENvdXBvbihjYXJ0OiBhbnkpIHtcclxuXHRcdGxldCBjdXJyZW50X2NvdXBvbiA9IHRoaXMuX2NvdXBvblN1YmplY3QudmFsdWU7XHJcblx0XHRsZXQgY291cG9uOiBJQ291cG9uID0geyBjb2RlOiBjYXJ0LmNvdXBvbkNvZGUgfTtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGNhcnQuY2FydERpc2NvdW50cylbMF07XHJcblx0XHRcdGNvdXBvbiA9IHtcclxuXHRcdFx0XHQuLi5jb3Vwb24sXHJcblx0XHRcdFx0YW1vdW50OiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLmFtb3VudC5jdXJyZW50KSB8fCAwLFxyXG5cdFx0XHRcdG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXHJcblx0XHRcdH07XHJcblx0XHR9IGNhdGNoIChlKSB7IH1cclxuXHRcdChjb3Vwb24gIT0gY3VycmVudF9jb3Vwb24pICYmIHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhjb3Vwb24pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIGVsIElEIGRlbCBpdGVtIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSB2YXJpYW50X2lkIElkIGRlIGxhIHZhcmlhbnRlIHV0aWxpemFkYSBwYXJhIGJ1c2NhciBlbCBpdGVtLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGZpbmRJdGVtQnlJZFZhcmlhbnQodmFyaWFudF9pZDogYW55KTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpIS5pdGVtX2lkXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYSBsYSBjYW50aWRhZCBwYXJhIHNhYmVyIHNpIHNlIHB1ZWRlIGFjdHVhbGl6YXIgbyBuby5cclxuXHQgKiBAcGFyYW0gaXRlbSBpdGVtIGRlbCBjYXJyaXRvXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IGNhbnRpZGFkIGEgYWdyZWdhclxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHZhbGlkYXRlUXVhbnRpdHkoaXRlbTogYW55LCBxdWFudGl0eTogYW55KSB7XHJcblx0XHRpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA+IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tYXhpbXVtSXRlbXNRdWFudGl0eSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbWF4aW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tYXhpbXVtSXRlbXNRdWFudGl0eSB9KVxyXG5cdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdH1cclxuXHRcdGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpIDwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtaW5pbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5IH0pXHJcblx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWVcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQnVzY2EgdW4gcHJvZHVjdG8gYSB0cmF2w6lzIGRlIHN1IElEIGVuIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gcHJvZHVjdF9pZCBcclxuXHQgKiBAcmV0dXJuc1xyXG5cdCAqL1xyXG5cdGZpbmRJdGVtKHByb2R1Y3RfaWQ6IGFueSk6IGFueSB7IHJldHVybiB0aGlzLl9pdGVtcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKSB9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBpdGVtIGRlbCBjYXJyaXRvIGVuIGVsIGJhY2tlbmQuXHJcblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBhIGVsaW1pbmFyXHJcblx0ICogQHBhcmFtIHRvYXN0IGluZGljYSBzaSBzZSBkaXNwYXJhIHVuIHRvYXN0ICBvIG5vLiBQb3IgZGVmZWN0byBlbiBgdHJ1ZWAuXHJcblx0ICovXHJcblx0ZGVsZXRlQ2FydEl0ZW0oaXRlbTogYW55LCB0b2FzdDogYm9vbGVhbiA9IHRydWUpIHtcclxuXHRcdGxldCBpZEl0ZW1TZWFyY2hlZCA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGlkSXRlbVNlYXJjaGVkKVxyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fY29ubmVjdGlvbi5kZWxldGUodGhpcy5kZWxldGVJdGVtQXBpKGlkSXRlbVNlYXJjaGVkKSkpLnRoZW4oXHJcblx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTtcclxuXHRcdFx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuXHRcdFx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEVsaW1pbmEgdW4gaXRlbSBlbiBjYXJyaXRvIGRlIGZvcm1hIGxvY2FsLiBcclxuXHQgKiBAcGFyYW0gY2FydCBDYXJyaXRvLCBlcyBkZWNpciwgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0IHByb2R1Y3RvIGEgZWxpbWluYXJcclxuXHQgKiBAcGFyYW0gdG9hc3Qge2Jvb2xlYW59IHBhcmEgaW5kaWNhciBzaSBzZSBkaXNwYXJhIHVuIHRvYXN0IG8gbm8uIFxyXG5cdCAqL1xyXG5cdHJlbW92ZUNhcnRJdGVtKGNhcnQ6IGFueSwgcHJvZHVjdDogYW55LCB0b2FzdDogYm9vbGVhbikge1xyXG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQsIGZhbHNlKTtcclxuXHRcdHRoaXMuX2l0ZW1zLnNwbGljZSh0aGlzLl9pdGVtcy5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUuaXRlbV9pZCA9PT0gcHJvZHVjdC5pdGVtX2lkKSwgMSk7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdFx0dG9hc3QgJiYgdGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHRvYXN0ICYmIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LXJlbW92ZWQnKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncmVtb3ZlX2Zyb21fY2FydCcsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuX2NvbnN0cy5jdXJyZW5jeS5jb2RlIH0pXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFncmVnYSB1biBjdXBvbiBhbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBDb2RpZ28gZGVsIGN1cMOzbi5cclxuXHQgKi9cclxuXHRhZGRDb3Vwb24odmFsdWU6IHN0cmluZykge1xyXG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy5jb3Vwb25BcGkoKSwgeyBjb3Vwb246IHZhbHVlIH0pKS50aGVuKFxyXG5cdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXMpXHJcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0N1cG9uIGFwbGljYWRvJylcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUuZXJyb3IoZXJyKSBcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnaW52YWxpZC1jb3Vwb24nKVxyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEVsaW1pbmEgdW4gY3Vww7NuIGRlbCBjYXJyaXRvLiBcclxuXHQgKi9cclxuXHRyZW1vdmVDb3Vwb24oKSB7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKSkudGhlbihcclxuXHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlcylcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKVxyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cclxuXHRnZXRDb3Vwb25Db2RlKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LmNvdXBvbkNvZGUpKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBzdWJ0b3RhbCBkZWwgY2Fycml0by5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRTdWJUb3RhbEFtb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uaXRlbXMpKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCB0b3RhbCBkZWwgbW9udG8gZGUgbGFzIHByb21vY2lvbmVzIGFwbGljYWRhcy5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUb3RhbFByb21vdGlvbkFtb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8ucHJvbW90aW9uKSk7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgdW4gb2JzZXJ2YWJsZSBjb24gZWwgbW9udG8gZGUgbG9zIGltcHVlc3RvcyBhcGxpY2Fkb3MuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0VGF4ZXNBbW91bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8udGF4ZXMgOiAwKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgdW4gb2JzZXJ2YWJsZSBjb24gZWwgbW9udG8gdG90YWwgZGVsIGNhcnJpdG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0VG90YWxBbW91bnQoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50b3RhbCkpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBSZXRvcm5hIGVsIHRva2VuIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldENhcnRUb2tlbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnRUb2tlbjtcclxuXHR9XHJcblx0Y2hhbmdlSGF2ZVRvVXBkYXRlID0gKHZhbHVlOiBhbnkpID0+IHRoaXMuX2hhdmVUb1VwZGF0ZSA9IHZhbHVlO1xyXG5cdGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XHJcblx0XHRjb25zb2xlLmxvZyhcIkNsZWFyaW5nIGFuZCByZXNldGluZy4uLlwiKVxyXG5cdFx0dGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0QnlDdXN0b21lcilcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2FydEJ5Q3VzdG9tZXIgPSBhc3luYyAoKSA9PlxyXG5cdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCkpLnN1YnNjcmliZShcclxuXHRcdFx0cmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG5cdFx0KVxyXG5cdHByaXZhdGUgcmVzZXRDYXJ0ID0gKGZuPzogYW55KSA9PiB7XHJcblx0XHR0aGlzLl9pdGVtcyA9IFtdO1xyXG5cdFx0dGhpcy5fY2FydFN1YmplY3QubmV4dChudWxsKTtcclxuXHRcdHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMobnVsbCk7XHJcblx0XHR0aGlzLmNhcnRUb2tlbiA9IG51bGw7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQoW10pO1xyXG5cdFx0dGhpcy5fY291bnQgPSAwO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DQVJUX0tFWSwgXCJbXVwiKTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVkpO1xyXG5cdFx0Zm4gJiYgZm4oKTtcclxuXHR9XHJcblx0Y2xlYXJBbmRSZXNldENhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENhcnQoKCkgPT4gdGhpcy5nZXRDYXJ0KTtcclxuICAgIH1cclxuXHJcblx0cHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcblxyXG5cdFx0aWYgKCFiYWxhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcblx0XHRjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGJhbGFuY2VEYXRhID0ge1xyXG4gICAgICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kLFxyXG4gICAgICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxyXG4gICAgICAgICAgICBjcmVkaXRBbW91bnQ6IGJhbGFuY2UuY3JlZGl0QW1vdW50LFxyXG4gICAgICAgICAgICBzaG93TWF4OiBiYWxhbmNlLnNob3dNYXgsXHJcbiAgICAgICAgICAgIHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXHJcbiAgICAgICAgICAgIHJlbWFpbmluZ0NyZWRpdHM6IFxyXG5cdFx0XHRcdGJhbGFuY2UuY3JlZGl0QW1vdW50ICE9IG51bGwgJiYgdG90YWxBbW91bnQgIT0gbnVsbCAmJiBiYWxhbmNlLmNyZWRpdEFtb3VudCA+PSB0b3RhbEFtb3VudFxyXG4gICAgICAgICAgICAgICAgXHQ/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgIFx0OiAwLFxyXG5cdFx0XHRcdGFwcGx5TWF4T3JkZXJzOiBiYWxhbmNlLmFwcGx5TWF4T3JkZXJzLFxyXG5cdFx0XHRcdG1heE9yZGVyczogYmFsYW5jZS5tYXhPcmRlcnNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xyXG4gICAgfVxyXG5cdGFkZFRvTG90KHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQ6IGFueSwgaWQ/OiBudW1iZXIsIG9yZGVyX2l0ZW1faWQ/OiBhbnksIGxvdF9xdWFudGl0eT86IGFueSwgdW5pdF9wcmljZT86IGFueSwgdW5pdF90b3RhbD86IGFueSwgYWp1c3RlbWVudF90b3RhbD86IGFueSwgdG90YWxfbG90PzogbnVtYmVyLCBsb3Rfc3RhdHVzPzogc3RyaW5nLCBkYXRlX3JlcXVlc3Q/OiBzdHJpbmcsIG5vdGVzPzogc3RyaW5nLCBzaGlwcGluZ19hZGRyZXNzX2lkPzogbnVtYmVyLCBzaGlwcGluZ19hZGRyZXNzX25hbWU/OiBzdHJpbmcsIGFjdGlvbj86IHN0cmluZyl7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFkZGVkID0gJyc7XHJcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCwgaWQ6IGlkIHx8ICcnLCBvcmRlcl9pdGVtX2lkOiBvcmRlcl9pdGVtX2lkIHx8ICcnLCBsb3RfcXVhbnRpdHk6IGxvdF9xdWFudGl0eSB8fCAnJywgdW5pdF9wcmljZTogdW5pdF9wcmljZSB8fCAnJywgdW5pdF90b3RhbDogdW5pdF90b3RhbCB8fCAnJywgYWp1c3RlbWVudF90b3RhbDogYWp1c3RlbWVudF90b3RhbCB8fCAnJywgdG90YWxfbG90OiB0b3RhbF9sb3QgfHwgJycsIGxvdF9zdGF0dXM6IGxvdF9zdGF0dXMgfHwgJycsIGRhdGVfcmVxdWVzdDogZGF0ZV9yZXF1ZXN0IHx8ICcnLCBub3Rlczogbm90ZXMgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfaWQ6IHNoaXBwaW5nX2FkZHJlc3NfaWQgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogc2hpcHBpbmdfYWRkcmVzc19uYW1lIHx8ICcnLCBhY3Rpb246IGFjdGlvbiB8fCAnbmV3bG90JyB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzKSA9PiB0aGlzLmFwcGVuZFRvQ2FydChyZXMpLFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuXHRcdFx0fSk7XHJcbiAgICB9XHJcblxyXG5cdFxyXG4gICAgZ2V0Q3JlZGl0QW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD4gPT5cclxuICAgICAgICB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LmNyZWRpdEFtb3VudCA/PyBudWxsKVxyXG4gICAgICAgICk7XHJcblxyXG5cclxuICAgIGdldFJlbWFpbmluZ0NyZWRpdHMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+ID0+XHJcbiAgICAgICAgdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LnJlbWFpbmluZ0NyZWRpdHMpKTtcclxuXHJcblx0XHJcblx0cHVibGljIGhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0Y29uc3QgYmFsYW5jZSA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG5cdFx0aWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoKHRoaXMuX2NhcnRTdWJqZWN0LnZhbHVlPy50b3RhbHM/LnRvdGFsID8/IDApID4gYmFsYW5jZS5jcmVkaXRBbW91bnQpIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcblx0cHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsUXVhbnRpdHkgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvc3QgPiBiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG59XHJcbiJdfQ==