@sumaris-net/ngx-components 18.6.53 → 18.6.55
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.
- package/doc/changelog.md +3 -0
- package/esm2022/src/app/core/menu/menu.component.mjs +19 -24
- package/esm2022/src/app/core/menu/menu.service.mjs +3 -2
- package/fesm2022/sumaris-net.ngx-components.mjs +17 -20
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/menu/menu.component.d.ts +3 -6
- package/src/assets/manifest.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventEmitter, Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
2
|
import { NavigationEnd } from '@angular/router';
|
|
3
|
-
import { BehaviorSubject,
|
|
3
|
+
import { BehaviorSubject, combineLatest, from, merge, Subject } from 'rxjs';
|
|
4
4
|
import { distinctUntilChanged, filter, map, switchMap, throttleTime } from 'rxjs/operators';
|
|
5
5
|
import { ENVIRONMENT } from '../../../environments/environment.class';
|
|
6
6
|
import { DateUtils } from '../../shared/dates';
|
|
@@ -326,6 +326,7 @@ export class MenuService extends StartableObservableService {
|
|
|
326
326
|
combineLatest([this.configService.config, accountEvent$]).subscribe(([config, account]) => {
|
|
327
327
|
if (this._debug)
|
|
328
328
|
console.debug(`${this._logPrefix}Received config or account event. Refreshing items...`, account);
|
|
329
|
+
account = this.accountService.isLogin() ? account : null;
|
|
329
330
|
// Load all items
|
|
330
331
|
const items = this._loadMenuItems(config, account);
|
|
331
332
|
// Emit new root items
|
|
@@ -658,4 +659,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
658
659
|
type: Inject,
|
|
659
660
|
args: [APP_MENU_ITEMS]
|
|
660
661
|
}] }] });
|
|
661
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQWUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7QUFHM0Us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LGNBSFYsTUFBTTs7NEZBR1AsV0FBVztrQkFKdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtvQkFDbEIsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUNwQjs7MEJBd0JJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDbkMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVOVklST05NRU5ULCBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBEYXRlVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEljb25SZWYgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgQWJvdXRNb2RhbCB9IGZyb20gJy4uL2Fib3V0L2Fib3V0Lm1vZGFsJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IFRyZWVJdGVtRW50aXR5VXRpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC90cmVlLWl0ZW0tZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IElNZW51SXRlbSwgTWVudUl0ZW0sIE1lbnVJdGVtcywgTWVudU9wdGlvbnMgfSBmcm9tICcuL21lbnUubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBTcGxpdFBhbmVTaG93V2hlbiA9IGJvb2xlYW4gfCAnbGcnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUVOVV9TSE9XX1dIRU46IFNwbGl0UGFuZVNob3dXaGVuID0gJ2xnJztcbmV4cG9ydCBjb25zdCBBUFBfTUVOVV9JVEVNUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJTWVudUl0ZW1bXT4oJ21lbnVJdGVtcycpO1xuZXhwb3J0IGNvbnN0IEFQUF9NRU5VX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudU9wdGlvbnM+KCdtZW51T3B0aW9ucycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVQYXRoUGFyYW0ge1xuICBwYXRoOiBzdHJpbmc7XG4gIHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGRlcHM6IFtFTlZJUk9OTUVOVF0sXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2U8TWVudUl0ZW1bXT4ge1xuICByZWFkb25seSBhY2NvdW50Q2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWNjb3VudD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgb25QaW5uZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtPih0cnVlKTtcblxuICBwcml2YXRlIF9zdGF0aWNJdGVtczogTWVudUl0ZW1bXTtcbiAgcHJpdmF0ZSBfZGV0YWNoZWRTdWJJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtQ291bnRlciA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IE1lbnVPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dQcmVmaXggPSAnW21lbnUtc2VydmljZV0gJztcbiAgcHJpdmF0ZSByZWFkb25seSBfJG9wZW5lZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRzcGxpdFBhbmVXaGVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTcGxpdFBhbmVTaG93V2hlbj4oREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRlbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJGVuYWJsZVN1Yk1lbnU6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfT1BUSU9OUykgb3B0aW9ucz86IE1lbnVPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfSVRFTVMpIHN0YXRpY0l0ZW1zPzogSU1lbnVJdGVtW11cbiAgKSB7XG4gICAgc3VwZXIoc2V0dGluZ3MpO1xuICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc3ViTWVudToge1xuICAgICAgICBkaXNhYmxlSWNvbjogZmFsc2UsXG4gICAgICAgIHNhdmVQaW5uZWQ6IHRydWUsXG4gICAgICAgIC4uLihvcHRpb25zPy5zdWJNZW51IHx8IHt9KSxcbiAgICAgICAgLy8gRm9yY2UgZGlzYWJsZSBvbiBtb2JpbGVcbiAgICAgICAgZW5hYmxlOiBvcHRpb25zPy5zdWJNZW51Py5lbmFibGUgIT09IGZhbHNlICYmICF0aGlzLnNldHRpbmdzLm1vYmlsZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLl8kZW5hYmxlU3ViTWVudSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fb3B0aW9ucy5zdWJNZW51LmVuYWJsZSk7XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcblxuICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbXTtcbiAgICB0aGlzLl9zdGF0aWNJdGVtcyA9IChzdGF0aWNJdGVtcyB8fCBbXSkubWFwKChzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdCh7IHN0YXRpYzogdHJ1ZSwgLi4uc291cmNlIH0sIHsgY29tcHV0ZUlkOiB0cnVlLCBmaWxsUGFyZW50OiB0cnVlLCBmaWxsRGVmYXVsdEZyb21QYXJlbnQ6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSBUcmVlSXRlbUVudGl0eVV0aWxzLmRlbGV0ZVJlY3Vyc2l2ZWx5KHRhcmdldCwgKGl0ZW0pID0+IGl0ZW0uc3RhdGljICE9PSB0cnVlKTtcbiAgICAgIGlmIChkZXRhY2hlZFN1Ykl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgZGV0YWNoZWRTdWJJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKSk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0luaXRpYWwgZGV0YWNoZWQgc3ViIGl0ZW1zJywgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgb3BlbmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kb3BlbmVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNwbGl0UGFuZVdoZW4oKTogT2JzZXJ2YWJsZTxTcGxpdFBhbmVTaG93V2hlbj4ge1xuICAgIHJldHVybiB0aGlzLl8kc3BsaXRQYW5lV2hlbi5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kZW5hYmxlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzdWJNZW51RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fJGVuYWJsZVN1Yk1lbnUudmFsdWU7XG4gIH1cblxuICBnZXQgc3ViSXRlbXMoKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgfHwgW10pLnJlZHVjZSgocmVzLCByb290RWxlbWVudCkgPT4gcmVzLmNvbmNhdChyb290RWxlbWVudC5jaGlsZHJlbiksIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9zdGF0aWNTdWJJdGVtcygpOiBNZW51SXRlbVtdIHtcbiAgICByZXR1cm4gKHRoaXMuX3N0YXRpY0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlcywgcm9vdEVsZW1lbnQpID0+IHJlcy5jb25jYXQocm9vdEVsZW1lbnQuY2hpbGRyZW4pLCBbXSk7XG4gIH1cblxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGVuYWJsZVN1Yk1lbnUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlU3ViTWVudS5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVdoZW4oKSB7XG4gICAgaWYgKHRoaXMuXyRzcGxpdFBhbmVXaGVuLnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fJHNwbGl0UGFuZVdoZW4ubmV4dChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfVxuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IHsgd2l0aENoaWxkcmVuPzogYm9vbGVhbjsgY29tcHV0ZUlkPzogYm9vbGVhbjsgZmlsbFBhcmVudD86IGJvb2xlYW47IGZpbGxEZWZhdWx0RnJvbVBhcmVudD86IGJvb2xlYW4gfSk6IE1lbnVJdGVtIHtcbiAgICBjb25zdCB0YXJnZXQgPSBNZW51SXRlbS5mcm9tT2JqZWN0KHNvdXJjZSwgeyB3aXRoQ2hpbGRyZW46IGZhbHNlIH0pO1xuICAgIC8vIENvbXB1dGUgaWQgaWYgbmVlZFxuICAgIGlmIChvcHRzPy5jb21wdXRlSWQgJiYgaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICAvLyBSZW1vdmUgaWNvbiBpZiBkaXNhYmxlZFxuICAgIGlmICh0aGlzLl9vcHRpb25zLnN1Yk1lbnUuZGlzYWJsZUljb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCA8SWNvblJlZj57IGljb246IHVuZGVmaW5lZCwgbWF0SWNvbjogdW5kZWZpbmVkLCBtYXRTdmdJY29uOiB1bmRlZmluZWQgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlXG4gICAgdGFyZ2V0LmNoaWxkcmVuID0gKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkubWFwKChqc29uOiBhbnkpID0+IHRoaXMuZnJvbU9iamVjdChqc29uLCB7IC4uLm9wdHMsIGZpbGxQYXJlbnQ6IGZhbHNlIH0pKTtcblxuICAgIC8vIEZpbGwgcGFyZW50IChvbmNlLCB3aGVuIHRoZSBmdWxsIHRyZWUgaXMgcmVhZHkpXG4gICAgaWYgKG9wdHM/LmZpbGxQYXJlbnQpIHtcbiAgICAgIFRyZWVJdGVtRW50aXR5VXRpbHMudHJlZUZpbGxQYXJlbnQodGFyZ2V0KTtcblxuICAgICAgLy8gRmlsbCBkZWZhdWx0cyBmcm9tIHRoZSBwYXJlbnQgKG9uY2UgZmlsbGVkKVxuICAgICAgaWYgKG9wdHM/LmZpbGxEZWZhdWx0RnJvbVBhcmVudCkge1xuICAgICAgICBUcmVlSXRlbUVudGl0eVV0aWxzLnZpc2l0KHRhcmdldCwgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIWl0ZW0ucGFyZW50KSByZXR1cm47IC8vIFNraXAgaWYgbm8gcGFyZW50XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoID0gaXRlbS5wYXJlbnRQYXRoIHx8IGl0ZW0ucGFyZW50LnBhdGg7XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoUGFyYW1zID0gaXRlbS5wYXJlbnRQYXRoUGFyYW1zIHx8IGl0ZW0ucGFyZW50LnBhdGhQYXJhbXM7XG4gICAgICAgICAgaXRlbS5zdGF0aWMgPSB0b0Jvb2xlYW4oaXRlbS5zdGF0aWMsIGl0ZW0ucGFyZW50LnN0YXRpYyk7XG4gICAgICAgICAgLy8gQ29tcHV0ZSBwYXRoLCBmcm9tIHBhcmVudCBwYXRoICsgYWN0aW9uXG4gICAgICAgICAgaWYgKCFpdGVtLnBhdGggJiYgISFpdGVtLmFjdGlvbikge1xuICAgICAgICAgICAgaXRlbS5wYXRoID0gaXRlbS5wYXJlbnQucGF0aDtcbiAgICAgICAgICAgIGl0ZW0ucGF0aFBhcmFtcyA9IHR5cGVvZiBpdGVtLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB7IGFjdGlvbjogaXRlbS5hY3Rpb24gfSA6IHsgYWN0aW9uSWQ6IGl0ZW0uaWQudG9TdHJpbmcoKSwgYWN0aW9uVGl0bGU6IGl0ZW0udGl0bGUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBjcmVhdGVTdWJNZW51KHNvdXJjZTogUGFydGlhbDxJTWVudUl0ZW0+KTogTWVudUl0ZW0ge1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuIG51bGw7IC8vIFNraXAgaWYgZGlzYWJsZWRcblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdChzb3VyY2UpO1xuXG4gICAgLy8gQ2hlY2sgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0YXJnZXQpO1xuICAgICAgaWYgKGV4aXN0aW5nSXRlbSkgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVcbiAgICBpZiAoaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXN5bmMgYWRkU3ViTWVudUl0ZW1zKHNvdXJjZXM6IElNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHRoaXMuZnJvbU9iamVjdChzb3VyY2UpLCBvcHRzKSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgaWYgKCF0aGlzLnN1Yk1lbnVFbmFibGVkKSByZXR1cm47IC8vIFNraXBcbiAgICByZXR1cm4gdGhpcy5fYWRkU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pLCBvcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVN1Yk1lbnVJdGVtcyhpdGVtczogSU1lbnVJdGVtW10pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiAoaXRlbXMgfHwgW10pLm1hcCgoaXRlbSkgPT4gdGhpcy5fcmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pKSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiB0aGlzLl9yZW1vdmVTdWJNZW51SXRlbSh0aGlzLmZyb21PYmplY3QoaXRlbSkpO1xuICB9XG5cbiAgdG9nZ2xlUGlubmVkKHNvdXJjZTogSU1lbnVJdGVtKSB7XG4gICAgY29uc3QgaXRlbSA9IHNvdXJjZSBpbnN0YW5jZW9mIE1lbnVJdGVtID8gc291cmNlIDogdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0aGlzLmZyb21PYmplY3Qoc291cmNlKSk7XG5cbiAgICAvLyBTa2lwIGlmIG5vdCBmb3VuZFxuICAgIGlmICghaXRlbSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFN1YiBtZW51IHske3NvdXJjZS5wYXRofX0gY2Fubm90IGJlIGZvdW5kIC0gdW5hYmxlIHRvIHRvZ2dsZSBwaW5uZWQhYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBpZiBzdGF0aWNcbiAgICBpZiAoaXRlbS5zdGF0aWMpIHJldHVybjtcblxuICAgIC8vIFVucGlubmVkXG4gICAgaWYgKGl0ZW0ucGlubmVkKSB7XG4gICAgICBpdGVtLnBpbm5lZCA9IGZhbHNlO1xuICAgICAgaWYgKCFpdGVtLmRldGFjaGVkKSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5fZGV0YWNoU3ViTWVudUl0ZW1zKCldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBpbm5lZFxuICAgIGVsc2Uge1xuICAgICAgaXRlbS5waW5uZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub25QaW5uZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb24oZXZlbnQ6IEV2ZW50LCBpdGVtOiBNZW51SXRlbSkge1xuICAgIGNvbnN0IGFjdGlvbiA9IGl0ZW0/LmFjdGlvbjtcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuOyAvLyBza2lwXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBzd2l0Y2ggKGFjdGlvbiBhcyBzdHJpbmcpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhYm91dCc6XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVuQWJvdXRNb2RhbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRXhwYW5kYWJsZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdChpdGVtLnBhdGgsIHtcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IGl0ZW0ucGF0aFBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGlmIChpdGVtLnBhdGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoaXRlbS5wYXRoLCB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnBhdGhQYXJhbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGFjdGlvbjogJyArIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAoYWN0aW9uIGFzIHVua25vd24gYXMgYW55KShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9nb3V0KCkge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoW1xuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnLFxuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fTUVTU0FHRScsXG4gICAgICAnQ09NTU9OLkJUTl9DQU5DRUwnLFxuICAgICAgJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJyxcbiAgICBdKTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9USVRMRSddLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5DT05GSVJNX01FU1NBR0UnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DQU5DRUwnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJ10sXG4gICAgICAgICAgY3NzQ2xhc3M6ICdpb24tY29sb3ItcHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQmFjayB0byBob21lXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIFdBUk5JTkc6IGxvZ291dCBzaG91bGQgYmUgZG9uZSBBRlRFUiBob21lIHJlZGlyZWN0aW9uLCBiZWNhdXNlIG9mIGNhY2hlIGNsZWFyaW5nIC0gc2VlIGlzc3VlICM1XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgYXN5bmMgb3BlbkFib3V0TW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoeyBjb21wb25lbnQ6IEFib3V0TW9kYWwgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUV4cGFuZGFibGVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtLmV4cGFuZGVkKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0V4cGFuZCBpdGVtJywgaXRlbSk7XG5cbiAgICAgIGl0ZW0ubWF0SWNvbiA9ICdleHBhbmRfbGVzcyc7XG5cbiAgICAgIC8vIFRyeSB0byBhdHRhY2ggc29tZSBpdGVtXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zXG4gICAgICAgIC5maWx0ZXIoKGNoaWxkSXRlbSkgPT4gISF0aGlzLl9maW5kUGFyZW50KGNoaWxkSXRlbSwgW2l0ZW1dKSlcbiAgICAgICAgLmZvckVhY2goKGNoaWxkSXRlbSkgPT4gdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KGl0ZW0sIGNoaWxkSXRlbSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLnRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyh7IHBhdGg6ICcvJywgcGFyYW1zOiB7fSB9LCBpdGVtLmNoaWxkcmVuKV07XG4gICAgfVxuICB9XG5cbiAgX21hcmtBc09wZW5lZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBfbWFya0FzQ2xvc2VkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHt0aGlzLl9sb2dQcmVmaXh9U3RhcnRpbmcuLi5gKTtcblxuICAgIC8vIFJlc3RvcmUgc3ViIGl0ZW1zIGZyb20gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgY29uc3Qgc2V0dGluZ3NTdWJJdGVtczogSU1lbnVJdGVtW10gPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncygnbWVudScsICdzdWItaXRlbXMnKTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHNldHRpbmdzU3ViSXRlbXMpKSB7XG4gICAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gc2V0dGluZ3NTdWJJdGVtcy5tYXAoKHNvdXJjZSkgPT4gdGhpcy5mcm9tT2JqZWN0KHNvdXJjZSwgeyBjb21wdXRlSWQ6IHRydWUsIGZpbGxQYXJlbnQ6IHRydWUgfSkpO1xuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyAnUmVzdG9yaW5nIHBpbm5lZCBzdWIgaXRlbXMgZnJvbSBzZXR0aW5ncycsIGRldGFjaGVkU3ViSXRlbXMpO1xuXG4gICAgICAvLyBUT0RPIGNoZWNrIGlmIHByZXZpb3VzIHN1YiBtZW51IChmcm9tIG1lbnUgdG9rZW4pIGFyZSBrZXB0XG4gICAgICAvL3RoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBkZXRhY2hlZFN1Ykl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRFdmVudCQgPSBtZXJnZShcbiAgICAgIGZyb20odGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpKSxcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbixcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQucGlwZShtYXAoKF8pID0+IG51bGwpKVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoYWNjb3VudCkgPT4gKGlzTm90TmlsKGFjY291bnQ/LmlkKSA/IGFjY291bnQgOiBudWxsKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYTEsIGEyKSA9PiBEYXRlVXRpbHMuaXNTYW1lKGExPy51cGRhdGVEYXRlLCBhMj8udXBkYXRlRGF0ZSkpXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAvLyBDb21iaW5lIGNvbmZpZyBhbmQgYWNjb3VudCBldmVudHNcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnU2VydmljZS5jb25maWcsIGFjY291bnRFdmVudCRdKS5zdWJzY3JpYmUoKFtjb25maWcsIGFjY291bnRdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9UmVjZWl2ZWQgY29uZmlnIG9yIGFjY291bnQgZXZlbnQuIFJlZnJlc2hpbmcgaXRlbXMuLi5gLCBhY2NvdW50KTtcblxuICAgICAgICAvLyBMb2FkIGFsbCBpdGVtc1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2xvYWRNZW51SXRlbXMoY29uZmlnLCBhY2NvdW50KTtcblxuICAgICAgICAvLyBFbWl0IG5ldyByb290IGl0ZW1zXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dChpdGVtcyk7XG5cbiAgICAgICAgLy8gRW1pdCBhY2NvdW50IGNoYW5nZXMgZXZlbnRcbiAgICAgICAgdGhpcy5hY2NvdW50Q2hhbmdlcy5uZXh0KGFjY291bnQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBGb3JjZSByZWZyZXNoIHdoZW4gbG9naW4vbG9nb3V0XG4gICAgICAgIHRoaXMuYWNjb3VudENoYW5nZXMucGlwZShtYXAoKCkgPT4gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpKSksXG4gICAgICAgIC8vIFN0YXJ0IGxpc3RlbmluZyByb3V0ZVxuICAgICAgICB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoXykgPT4gdGhpcy5yb3V0ZXIuZXZlbnRzKSxcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkoZXZlbnQudXJsKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMjUwKSlcbiAgICAgICAgLnN1YnNjcmliZSgocGF0aFBhcmFtKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGV0YWNoZWRTdWJJdGVtcyA9IHRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyhwYXRoUGFyYW0pO1xuICAgICAgICAgIGlmIChkZXRhY2hlZFN1Ykl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4uZGV0YWNoZWRTdWJJdGVtc107XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fU5ld2x5IGRldGFjaGVkIGl0ZW1zOiBgLCBkZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFNhdmUgcGlubmVkIGl0ZW1zXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25QaW5uZWQuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIENvbGxlY3QgcGlubmVkIGVsZW1lbnRzLCB0aGVuIHNlcmlhbGl6ZSBpdCAod2l0aG91dCBpZClcbiAgICAgICAgY29uc3QgcGlubmVkU3ViSXRlbXMgPSB0aGlzLnN1Ykl0ZW1zLmZpbHRlcigoaSkgPT4gaS5pc1Bpbm5lZCgpKS5tYXAoKGl0ZW0pID0+IGl0ZW0uYXNPYmplY3QoeyB3aXRoQ2hpbGRyZW46IHRydWUsIGtlZXBMb2NhbElkOiBmYWxzZSB9KSk7XG5cbiAgICAgICAgaWYgKHBpbm5lZFN1Ykl0ZW1zLmxlbmd0aCAmJiB0aGlzLl9kZWJ1ZylcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBTYXZpbmcgJHtwaW5uZWRTdWJJdGVtcy5sZW5ndGh9IHBpbm5lZCBpdGVtcywgaW4gbG9jYWwgc2V0dGluZ3NgLCBwaW5uZWRTdWJJdGVtcyk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKCdtZW51JywgcGlubmVkU3ViSXRlbXMsICdzdWItaXRlbXMnKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5kYXRhU3ViamVjdCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkTWVudUl0ZW1zKGNvbmZpZzogQ29uZmlndXJhdGlvbiB8IG51bGwsIGFjY291bnQ6IEFjY291bnQgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Mb2FkaW5nIG1lbnUgaXRlbXMuLi5gKTtcblxuICAgIC8vIFNhdmUgcHJldmlvdXMgY2hpbGRyZW4gb2Ygcm9vdCBpdGVtc1xuICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSAodGhpcy5zdWJJdGVtcyB8fCBbXSkuY29uY2F0KHRoaXMuX3N0YXRpY1N1Ykl0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlcywgcm9vdEl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gcm9vdEl0ZW0uY2hpbGRyZW47XG4gICAgICBpZiAoaXNFbXB0eUFycmF5KGNoaWxkcmVuKSkgcmV0dXJuIHJlcztcbiAgICAgIC8vIERldGFjaCBhbGwgcm9vdCBjaGlsZHJlblxuICAgICAgcm9vdEl0ZW0uY2hpbGRyZW4gPSBbXTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiAoY2hpbGQucGFyZW50ID0gbnVsbCkpO1xuICAgICAgLy8gUmV0dXJuIHJvb3QgY2hpbGRyZW5cbiAgICAgIHJldHVybiByZXMuY29uY2F0KGNoaWxkcmVuKTtcbiAgICB9LCB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zIHx8IFtdKTtcblxuICAgIC8vIFJlc2V0IGJhc2Ugcm9vdCBpdGVtcyAoY2xlYW4gaXRlbXMgYWRkZWQgYnkgY29uZmlnKVxuICAgIGxldCBpdGVtczogTWVudUl0ZW1bXSA9IHRoaXMuX3N0YXRpY0l0ZW1zLnNsaWNlKCk7XG5cbiAgICAvLyBDb25jYXQgY29uZmlnJ3MgaXRlbXNcbiAgICBjb25zdCBjb25maWdWYWx1ZTogc3RyaW5nID0gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsoY29uZmlnVmFsdWUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWdJdGVtcyA9IEpTT04ucGFyc2UoY29uZmlnVmFsdWUpIGFzIElNZW51SXRlbVtdO1xuICAgICAgICBpdGVtcyA9IChjb25maWdJdGVtcyB8fCBbXSkucmVkdWNlKChyZXM6IE1lbnVJdGVtW10sIHNvdXJjZSkgPT4ge1xuICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXRlbVxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZyb21PYmplY3QoeyBzdGF0aWM6IHRydWUsIC4uLnNvdXJjZSB9LCB7IGNvbXB1dGVJZDogdHJ1ZSB9KTtcblxuICAgICAgICAgIC8vIFNraXAgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgICBpZiAocmVzLmZpbmQoKGkpID0+IE1lbnVJdGVtcy5pc1NhbWUoaSwgaXRlbSkpKSByZXR1cm4gcmVzO1xuXG4gICAgICAgICAgLy8gUmV1c2UgZXhpc3RpbmcgaWQsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5kYXRhPy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmlkID0gZXhpc3RpbmdJdGVtLmlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpdGVtLmFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5maW5kSW5kZXgoKGkpID0+IGkudGl0bGUgPT09IGl0ZW0uYWZ0ZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIGluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KGl0ZW0pXG4gICAgICAgICAgICAgICAgLmNvbmNhdChyZXMuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KChpKSA9PiBpLnRpdGxlID09PSBpdGVtLmJlZm9yZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMuc2xpY2UoMCwgaW5kZXgpLmNvbmNhdChpdGVtKS5jb25jYXQocmVzLnNsaWNlKGluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICAgICAgICB9LCBpdGVtcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgJHt0aGlzLl9sb2dQcmVmaXh9SW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uICcke0NPUkVfQ09ORklHX09QVElPTlMuTUVOVV9JVEVNUy5rZXl9Jy4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgbWVudSBpdGVtYCwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgaXRlbSB1c2luZyBhY2NvdW50IHJpZ2h0c1xuICAgIGNvbnN0IG9wdHMgPSB7IGRlYnVnOiB0aGlzLl9kZWJ1ZyB9O1xuICAgIGl0ZW1zID0gaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IE1lbnVJdGVtcy5jaGVja0lmVmlzaWJsZShpdGVtLCBhY2NvdW50LCBjb25maWcsIG9wdHMpKVxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAvLyBSZXBsYWNlIHRpdGxlIHVzaW5nIGEgY29uZmlnIHByb3BlcnR5XG4gICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoaXRlbS50aXRsZVByb3BlcnR5KSAmJiBjb25maWcpIHtcbiAgICAgICAgICBpdGVtLnRpdGxlID0gY29uZmlnLnByb3BlcnRpZXNbaXRlbS50aXRsZVByb3BlcnR5XSB8fCBpdGVtLnRpdGxlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9Rm91bmQgJHtpdGVtcy5sZW5ndGh9IHZpc2libGUgcm9vdCBpdGVtcy4uLmApO1xuXG4gICAgLy8gUmUtYXR0YWNoIHN1YiBtZW51IGl0ZW1zXG4gICAgaWYgKHRoaXMuc3ViTWVudUVuYWJsZWQgJiYgZGV0YWNoZWRTdWJJdGVtcy5sZW5ndGgpIHtcbiAgICAgIGlmIChhY2NvdW50KSB7XG4gICAgICAgIHRoaXMuX2FkZFN1Yk1lbnVJdGVtcyhkZXRhY2hlZFN1Ykl0ZW1zLCB7IHNraXBJZkV4aXN0czogZmFsc2UsIGF2YWlsYWJsZVBhcmVudHM6IGRldGFjaGVkU3ViSXRlbXMuY29uY2F0KGl0ZW1zKSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBkZXRhY2hlZFN1Ykl0ZW1zO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkU3ViTWVudUl0ZW1zKHNvdXJjZXM6IE1lbnVJdGVtW10sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW47IGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdIH0pIHtcbiAgICByZXR1cm4gc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gdGhpcy5fYWRkU3ViTWVudUl0ZW0oc291cmNlLCBvcHRzKSk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRTdWJNZW51SXRlbShuZXdJdGVtOiBNZW51SXRlbSwgb3B0cz86IHsgc2tpcElmRXhpc3RzPzogYm9vbGVhbjsgYXZhaWxhYmxlUGFyZW50cz86IE1lbnVJdGVtW10gfSkge1xuICAgIG9wdHMgPSB7XG4gICAgICBza2lwSWZFeGlzdHM6IHRydWUsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXRoUGFyYW0gPSBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCk7XG5cbiAgICAvLyBGaW5kIGlmIGl0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBleGlzdGluZ0l0ZW0gPSB0aGlzLl9maW5kRXhpc3RpbmdJdGVtKG5ld0l0ZW0sIG9wdHM/LmF2YWlsYWJsZVBhcmVudHMpO1xuICAgIGlmIChleGlzdGluZ0l0ZW0pIHtcbiAgICAgIC8vIE5vIGNoYW5nZXNcbiAgICAgIGlmIChvcHRzLnNraXBJZkV4aXN0cyAmJiBNZW51SXRlbXMuaXNTYW1lKGV4aXN0aW5nSXRlbSwgbmV3SXRlbSkgJiYgZXhpc3RpbmdJdGVtLnZpc2libGUpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Ta2lwcGluZyBzdWIgaXRlbSAoc2FtZSB2aXNpYmxlIGl0ZW0gYWxyZWFkeSBleGlzdClgLCBuZXdJdGVtKTtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1VcGRhdGluZyBleGlzdGluZyBzdWIgaXRlbSAjYCwgZXhpc3RpbmdJdGVtLmlkKTtcblxuICAgICAgLy8gUmVwbGFjZSBleGlzdGluZyBpdGVtLCBidXQga2VlcCB0aGUgZXhpc3RpbmcgaWRcbiAgICAgIGlmIChuZXdJdGVtICE9PSBleGlzdGluZ0l0ZW0pIHtcbiAgICAgICAgbmV3SXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgICAgbmV3SXRlbS4kY2hpbGRyZW4gPSBleGlzdGluZ0l0ZW0uJGNoaWxkcmVuO1xuICAgICAgICBuZXdJdGVtLnBpbm5lZCA9IGV4aXN0aW5nSXRlbS5waW5uZWQ7XG4gICAgICAgIG5ld0l0ZW0uc3RhdGljID0gZXhpc3RpbmdJdGVtLnN0YXRpYztcbiAgICAgICAgaWYgKG5ld0l0ZW0ucGlubmVkIHx8IG5ld0l0ZW0uc3RhdGljIHx8IGV4aXN0aW5nSXRlbS5leHBhbmRlZCkge1xuICAgICAgICAgIC8vIElmIGxvYWRpbmcsIGtlZXAgZXhpc3RpbmcgdGl0bGUgaWYgcGlubmVkIChhdm9pZCB0byBzaG93IHNrZWxldG9uKVxuICAgICAgICAgIG5ld0l0ZW0udGl0bGUgPSBuZXdJdGVtLnRpdGxlIHx8IGV4aXN0aW5nSXRlbS50aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdJdGVtLnRpdGxlID0gaXNOb3ROaWwobmV3SXRlbS50aXRsZSkgPyBuZXdJdGVtLnRpdGxlIDogZXhpc3RpbmdJdGVtLnRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF1dG8gc2V0IGljb24sIGZvciBleHBhbmQgYWN0aW9uXG4gICAgICAgIGlmIChleGlzdGluZ0l0ZW0uYWN0aW9uID09PSAnZXhwYW5kJykge1xuICAgICAgICAgIG5ld0l0ZW0uaWNvbiA9IG51bGw7XG4gICAgICAgICAgbmV3SXRlbS5tYXRJY29uID0gZXhpc3RpbmdJdGVtLmV4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBpdGVtJ3MgaWQgKGlmIG5lZWQpXG4gICAgZWxzZSBpZiAoaXNOaWwobmV3SXRlbS5pZCkpIHtcbiAgICAgIG5ld0l0ZW0uaWQgPSB0aGlzLl9jb21wdXRlTmV3SWQoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IGljb24gZm9yIGV4cGFuZCBhY3Rpb25cbiAgICBpZiAobmV3SXRlbS5hY3Rpb24gPT09ICdleHBhbmQnICYmICFuZXdJdGVtLm1hdEljb24pIHtcbiAgICAgIG5ld0l0ZW0ubWF0SWNvbiA9ICdleHBhbmRfbW9yZSc7XG4gICAgfVxuXG4gICAgLy8gSWYgdmlzaWJsZSwgZ2V0IHRoZSBwYXJlbnQgd2hlcmUgdG8gYXR0YWNoIHRoZSBpdGVtXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZmluZFBhcmVudChuZXdJdGVtLCBvcHRzPy5hdmFpbGFibGVQYXJlbnRzKTtcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5leHBhbmRlZCkge1xuICAgICAgLy8gQXR0YWNoIGl0ZW0gdG8gcGFyZW50XG4gICAgICB0aGlzLl9hdHRhY2hNZW51VG9QYXJlbnQocGFyZW50LCBuZXdJdGVtKTtcblxuICAgICAgLy8gVXBkYXRlIGRldGFjaGVkIGl0ZW1zIDpcbiAgICAgIC8vIC0gZXhjbHVkZWQgbmV3IGl0ZW1cbiAgICAgIC8vIC0gYXR0YWNoIGFuZCBleGNsdWRlIHRob3NlIHRoYW4gY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBuZXcgaXRlbVxuICAgICAgLy8gU2VhcmNoIGluIGRldGFjaGVkIGl0ZW1zIG9uZSBoYXZlIG5ld0l0ZW0gYXMgcGFyZW50XG4gICAgICBpZiAobmV3SXRlbS5leHBhbmRlZCkge1xuICAgICAgICBjb25zdCBhbmNlc3RvciA9IG5ld0l0ZW0uYW5jZXN0b3I7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLmNvbmNhdCguLi5uZXdJdGVtLmNoaWxkcmVuKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgICAgIC8vIEV4Y2x1ZGVkIG5ld2x5IGFkZCBpdGVtXG4gICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IG5ld0l0ZW0uaWQpIHJldHVybiByZXM7XG5cbiAgICAgICAgICAvLyBJZiBzb21lIGRldGFjaGVkIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgbmV3IGl0ZW06IGRvIGl0XG4gICAgICAgICAgaWYgKE1lbnVJdGVtcy5jaGVja0lmU3ViTWVudVZpc2libGUoaXRlbSwgcGF0aFBhcmFtKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZmluZFBhcmVudChpdGVtLCBbYW5jZXN0b3JdKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIGl0ZW0ncyBjaGlsZHJlblxuICAgICAgICAgICAgICBjb25zdCBkZXRhY2hlZENoaWxkcmVuID0gdGhpcy5fZGV0YWNoU3ViTWVudUl0ZW1zKHBhdGhQYXJhbSwgaXRlbS5jaGlsZHJlbiB8fCBbXSk7XG5cbiAgICAgICAgICAgICAgLy8gQXR0YWNoIGl0ZW1cbiAgICAgICAgICAgICAgdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KHBhcmVudCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZGV0YWNoZWQgY2hpbGRyZW5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoLi4uZGV0YWNoZWRDaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGV0YWNoIChpZiBuZWVkKVxuICAgICAgICAgIHRoaXMuX2RldGFjaFRvUGFyZW50KGl0ZW0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRvIGRldGFjaGVkIGl0ZW1zXG4gICAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoaXRlbSk7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGRldGFjaGVkIGVsZW1lbnRzXG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCAhPT0gbmV3SXRlbS5pZCk7XG5cbiAgICAgICAgLy8gRGV0YWNoIGNoaWxkcmVuXG4gICAgICAgIG5ld0l0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoaXRlbSkgPT4gdGhpcy5fZGV0YWNoVG9QYXJlbnQoaXRlbSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgb3IgdXBkYXRlIGRldGFjaGVkIGl0ZW1cbiAgICAgIGNvbnN0IGRldGFjaGVkSW5kZXggPSBpc05vdE5pbChuZXdJdGVtLmlkKSA/IHRoaXMuX2RldGFjaGVkU3ViSXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBuZXdJdGVtLmlkKSA6IC0xO1xuICAgICAgaWYgKGRldGFjaGVkSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXNbZGV0YWNoZWRJbmRleF0gPSBuZXdJdGVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5wdXNoKG5ld0l0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdJdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tcHV0ZU5ld0lkKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtQ291bnRlcisrO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlU3ViTWVudUl0ZW0oaXRlbTogTWVudUl0ZW0pIHtcbiAgICBjb25zdCBleGlzdGluZ0l0ZW0gPSB0aGlzLl9maW5kRXhpc3RpbmdJdGVtKGl0ZW0pO1xuICAgIGlmIChleGlzdGluZ0l0ZW0pIHtcbiAgICAgIHRoaXMuX2RldGFjaFRvUGFyZW50KGV4aXN0aW5nSXRlbSk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdJdGVtO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2RldGFjaFN1Yk1lbnVJdGVtcyhjdXJyZW50UGF0aFBhcmFtPzogTWVudVBhdGhQYXJhbSwgc3ViSXRlbXM/OiBNZW51SXRlbVtdKSB7XG4gICAgY3VycmVudFBhdGhQYXJhbSA9IGN1cnJlbnRQYXRoUGFyYW0gPyBjdXJyZW50UGF0aFBhcmFtIDogTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuIChzdWJJdGVtcyB8fCB0aGlzLnN1Ykl0ZW1zKS5yZWR1Y2UoKHJlcywgc3ViSXRlbSkgPT4ge1xuICAgICAgLy8gTm90IHZpc2libGUgPT4gc2hvdWxkIGJlIGRldGFjaFxuICAgICAgaWYgKCFNZW51SXRlbXMuY2hlY2tJZlN1Yk1lbnVWaXNpYmxlKHN1Ykl0ZW0sIGN1cnJlbnRQYXRoUGFyYW0pKSB7XG4gICAgICAgIHRoaXMuX2RldGFjaFRvUGFyZW50KHN1Ykl0ZW0pO1xuXG4gICAgICAgIHJldHVybiByZXMuY29uY2F0KHN1Ykl0ZW0pO1xuICAgICAgfVxuICAgICAgLy8gVmlzaWJsZTogY2hlY2sgY2hpbGRyZW5cbiAgICAgIHJldHVybiByZXMuY29uY2F0KHRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyhjdXJyZW50UGF0aFBhcmFtLCBzdWJJdGVtLmNoaWxkcmVuKSk7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGV0YWNoVG9QYXJlbnQoaXRlbTogTWVudUl0ZW0pIHtcbiAgICBpZiAoIWl0ZW0/LnBhcmVudCkgcmV0dXJuOyAvLyBTa2lwIGlmIGFscmVhZHkgZGV0YWNoZWRcbiAgICBsZXQgY2hpbGRyZW4gPSBpdGVtLnBhcmVudC5jaGlsZHJlbiB8fCBbXTtcblxuICAgIC8vIFJlbW92ZSBmcm9tIHBhcmVudCBjaGlsZHJlblxuICAgIGNvbnN0IGluZGV4SW5QYXJlbnQgPSBjaGlsZHJlbi5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleEluUGFyZW50ICE9PSAtMSkge1xuICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5zbGljZSgpOyAvLyBDb3B5IG9yaWdpbmFsIGFycmF5LCBiZWNhdXNlIGl0IGNhbiBiZSB1c2VkIGluIGEgbG9vcFxuICAgICAgY2hpbGRyZW4uc3BsaWNlKGluZGV4SW5QYXJlbnQsIDEpO1xuICAgICAgaXRlbS5wYXJlbnQuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBpdGVtLnBhcmVudCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9maW5kRXhpc3RpbmdJdGVtKHNlYXJjaEl0ZW06IElNZW51SXRlbSwgaXRlbXM/OiBNZW51SXRlbVtdLCByZWN1cnNpdmUgPSB0cnVlKTogTWVudUl0ZW0ge1xuICAgIGl0ZW1zID0gaXRlbXMgfHwgWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLnRoaXMuZGF0YV07XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vdCBmb3VuZFxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKE1lbnVJdGVtcy5pc1NhbWVJZE9yUGF0aEFuZFBhcmFtcyhzZWFyY2hJdGVtLCBpdGVtKSkgcmV0dXJuIGl0ZW07XG4gICAgICBpZiAocmVjdXJzaXZlICYmIGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl9maW5kRXhpc3RpbmdJdGVtKHNlYXJjaEl0ZW0sIGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICBpZiAoY2hpbGQpIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9maW5kUGFyZW50KGNoaWxkSXRlbTogTWVudUl0ZW0sIGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdKTogTWVudUl0ZW0ge1xuICAgIGlmICghY2hpbGRJdGVtPy5wYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChjaGlsZEl0ZW0ucGFyZW50KSByZXR1cm4gY2hpbGRJdGVtLnBhcmVudDtcblxuICAgIGF2YWlsYWJsZVBhcmVudHMgPSBhdmFpbGFibGVQYXJlbnRzIHx8IFsuLi50aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLCAuLi50aGlzLmRhdGFdO1xuXG4gICAgcmV0dXJuIGF2YWlsYWJsZVBhcmVudHMucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghaXRlbT8ucGF0aCkgcmV0dXJuIHJlcztcblxuICAgICAgLy8gQSBmb3VuZCBpdGVtIGFscmVhZHkgbWF0Y2ggd2l0aCB0aGUgbWVudUl0ZW0ucGFyZW50UGF0aCA6IGtlZXAgaXQgYXMgaXRcbiAgICAgIC8vIFRoZXJlIGlzIGEgZm91bmQgY2FuZGlkYXRlIHRoYXQgYWxyZWFkeSBtYXRjaCB0aGUgY3VycmVudCBjYW5kaWRhdGUgOiBrZWVwIGl0XG4gICAgICBpZiAoTWVudUl0ZW1zLmlzUGFyZW50KGNoaWxkSXRlbSwgcmVzKSkgcmV0dXJuIHJlcztcblxuICAgICAgLy8gSWYgdGhlIG1lbnUgaXRlbSBoYXMgZXhwbGljaXQgcGFyZW50UGF0aCBhbmQgaXRzIHBhdGggYW5kIHBhdGggcGFyYW0gYXJlIHRoZSBzYW1lIGFzIHRoZSBjYW5kaWRhdGUgIDogdXNlIGl0IGFzIHBhcmVudFxuICAgICAgaWYgKE1lbnVJdGVtcy5pc1BhcmVudChjaGlsZEl0ZW0sIGl0ZW0pKSByZXR1cm4gaXRlbTtcblxuICAgICAgaWYgKCFyZXMgJiYgaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kUGFyZW50KGNoaWxkSXRlbSwgaXRlbS5jaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE1lbnVUb1BhcmVudChwYXJlbnQ6IE1lbnVJdGVtLCBjaGlsZDogTWVudUl0ZW0pIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUF0dGFjaCBzdWItbWVudSB7JHtNZW51SXRlbXMuZ2V0VXJsKGNoaWxkKX19IHRvIHBhcmVudCB7JHtNZW51SXRlbXMuZ2V0VXJsKHBhcmVudCl9fWApO1xuXG4gICAgLy8gQXZvaWQgdG8ga2VlcCBpZGVudGljYWwgbWVudSBpdGVtICh3ZSByZXBsYWNlIGl0IHdpdGggdGhlIG5ldyBjaGlsZCBtZW51IGl0ZW0pXG4gICAgLy9pZiAoIXBhcmVudD8uJGNoaWxkcmVuKSBwYXJlbnQuJGNoaWxkcmVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPihbXSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW4gfHwgW107XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IGNoaWxkcmVuLmZpbmRJbmRleCgoaXRlbSkgPT4gTWVudUl0ZW1zLmlzU2FtZUlkT3JQYXRoQW5kUGFyYW1zKGl0ZW0sIGNoaWxkKSk7XG5cbiAgICAvLyBVcGRhdGUgZXhpc3RpbmcgZWxlbWVudFxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGNoaWxkcmVuW2V4aXN0aW5nSW5kZXhdICE9PSBjaGlsZCkge1xuICAgICAgICBjaGlsZHJlbltleGlzdGluZ0luZGV4XSA9IGNoaWxkO1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gcGFyZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgLy8gU29ydCBieSB0YWIgKG9yIGlkKVxuICAgICAgcGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW4uc29ydChNZW51SXRlbXMuc29ydEJ5VGFiT3JJZCk7XG4gICAgICBjaGlsZC5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
662
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQWUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7QUFHM0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXNCLElBQUksQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQWMsV0FBVyxDQUFDLENBQUM7QUFDM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxDQUFDLENBQUM7QUFXL0UsTUFBTSxPQUFPLFdBQVksU0FBUSwwQkFBc0M7SUFlekQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNxQjtJQXRCeEIsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFVLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBVyxJQUFJLENBQUMsQ0FBQztJQUU3QyxZQUFZLENBQWE7SUFDekIsaUJBQWlCLEdBQWUsRUFBRSxDQUFDO0lBQ25DLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDUixRQUFRLENBQWM7SUFDdEIsVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQy9CLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBQ2xDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBb0Isc0JBQXNCLENBQUMsQ0FBQztJQUNqRixTQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDL0MsZUFBZSxDQUEyQjtJQUUzRCxZQUNZLFFBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLE1BQWMsRUFDZCxTQUEwQixFQUMxQixlQUFnQyxFQUNoQyxhQUE0QixFQUM1QixTQUEyQixFQUNOLFdBQXdCLEVBQ2pCLE9BQXFCLEVBQ3ZCLFdBQXlCO1FBRTdELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVpOLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ04sZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFLdkQsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEdBQUcsT0FBTztZQUNWLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsS0FBSztnQkFDbEIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsMEJBQTBCO2dCQUMxQixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2FBQ3BFO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFFdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVoSSxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN2RyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLDRCQUE0QixFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELElBQVksZUFBZTtRQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUF3QjtRQUMzQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVcsRUFBRSxJQUE2RztRQUNuSSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLHFCQUFxQjtRQUNyQixJQUFJLElBQUksRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUUxRSwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBRUQsWUFBWTtRQUNaLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXBILGtEQUFrRDtRQUNsRCxJQUFJLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUNyQixtQkFBbUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFM0MsOENBQThDO1lBQzlDLElBQUksSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUM7Z0JBQ2hDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO3dCQUFFLE9BQU8sQ0FBQyxvQkFBb0I7b0JBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6RCwwQ0FBMEM7b0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzFJLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBMEI7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxtQkFBbUI7UUFFMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2QyxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksWUFBWTtnQkFBRSxPQUFPLFlBQVksQ0FBQztRQUN4QyxDQUFDO1FBRUQsU0FBUztRQUNULElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV2RCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFvQixFQUFFLElBQWlDO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBZSxFQUFFLElBQWlDO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBa0I7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQWU7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxZQUFZLENBQUMsTUFBaUI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRW5HLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLE1BQU0sQ0FBQyxJQUFJLDhDQUE4QyxDQUFDLENBQUM7WUFDeEgsT0FBTztRQUNULENBQUM7UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFeEIsV0FBVztRQUNYLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztZQUN0RixDQUFDO1FBQ0gsQ0FBQztRQUVELFNBQVM7YUFDSixDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQVksRUFBRSxJQUFjO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsT0FBTztRQUM1QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLFFBQVEsTUFBZ0IsRUFBRSxDQUFDO2dCQUN6QixLQUFLLFFBQVE7b0JBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3BCLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUM1QixNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ2QsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUMvQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVU7eUJBQzdCLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELE1BQU07Z0JBQ1IsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDZCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7NEJBQy9DLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVTt5QkFDN0IsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUMvQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNoRCwyQkFBMkI7WUFDM0IsNkJBQTZCO1lBQzdCLG1CQUFtQjtZQUNuQix5QkFBeUI7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxNQUFNLEVBQUUsWUFBWSxDQUFDLDJCQUEyQixDQUFDO1lBQ2pELE9BQU8sRUFBRSxZQUFZLENBQUMsNkJBQTZCLENBQUM7WUFDcEQsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3ZDLElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxXQUFXO2lCQUN0QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWSxDQUFDLHlCQUF5QixDQUFDO29CQUM3QyxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7d0JBQ2xCLGVBQWU7d0JBQ2YsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFFM0Msa0dBQWtHO3dCQUNsRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMvQixDQUFDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBYztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV0RSxJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztZQUU3QiwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQjtpQkFDbkIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUM1RCxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1lBRTdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDOUgsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVM7UUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLGtDQUFrQztRQUNsQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pGLElBQUksZUFBZSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLDBDQUEwQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFOUYsNkRBQTZEO1lBQzdELG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsRUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3BELENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzFELG9CQUFvQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUNuRixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQjtRQUN2QixvQ0FBb0M7UUFDcEMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3hGLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHVEQUF1RCxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRW5ILE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUV6RCxpQkFBaUI7WUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFbkQsc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdCLDZCQUE2QjtZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixLQUFLO1FBQ0gsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkcsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3BDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxLQUFLLFlBQVksYUFBYSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDdkUsQ0FDRjthQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkIsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0QsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9GLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMvQiwwREFBMEQ7WUFDMUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUxSSxJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLGNBQWMsQ0FBQyxNQUFNLGtDQUFrQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3JILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBNEIsRUFBRSxPQUF1QjtRQUMxRSxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHVCQUF1QixDQUFDLENBQUM7UUFFMUUsdUNBQXVDO1FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUN6RyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ25DLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUN2QywyQkFBMkI7WUFDM0IsUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkQsdUJBQXVCO1lBQ3ZCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLHNEQUFzRDtRQUN0RCxJQUFJLEtBQUssR0FBZSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWxELHdCQUF3QjtRQUN4QixNQUFNLFdBQVcsR0FBVyxNQUFNLEVBQUUsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDO2dCQUNILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFnQixDQUFDO2dCQUMzRCxLQUFLLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBZSxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUM3RCxxQkFBcUI7b0JBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFFL0UseUJBQXlCO29CQUN6QixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUFFLE9BQU8sR0FBRyxDQUFDO29CQUUzRCxpQ0FBaUM7b0JBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUN2RSxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQzVCLENBQUM7b0JBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2YsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzNELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2pCLE9BQU8sR0FBRztpQ0FDUCxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7aUNBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUNBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzVELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2pCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ25FLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNaLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSw2QkFBNkIsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsbUNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDM0ksQ0FBQztRQUNILENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLEtBQUssR0FBRyxLQUFLO2FBQ1YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3ZFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1osd0NBQXdDO1lBQ3hDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ25FLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxTQUFTLEtBQUssQ0FBQyxNQUFNLHdCQUF3QixDQUFDLENBQUM7UUFFaEcsMkJBQTJCO1FBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRCxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNySCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQW1CLEVBQUUsSUFBZ0U7UUFDNUcsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBaUIsRUFBRSxJQUFnRTtRQUN6RyxJQUFJLEdBQUc7WUFDTCxZQUFZLEVBQUUsSUFBSTtZQUNsQixHQUFHLElBQUk7U0FDUixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyRiw4QkFBOEI7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLGFBQWE7WUFDYixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6RixRQUFRO2dCQUNSLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHFEQUFxRCxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqSCxPQUFPLFlBQVksQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsOEJBQThCLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWxHLGtEQUFrRDtZQUNsRCxJQUFJLE9BQU8sS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztnQkFDckMsT0FBTyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzlELHFFQUFxRTtvQkFDckUsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQy9FLENBQUM7Z0JBQ0QsbUNBQW1DO2dCQUNuQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3JDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNwQixPQUFPLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUMxRSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCwrQkFBK0I7YUFDMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDakUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTFDLDBCQUEwQjtZQUMxQixzQkFBc0I7WUFDdEIsa0VBQWtFO1lBQ2xFLHNEQUFzRDtZQUN0RCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMvRiwwQkFBMEI7b0JBQzFCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRTt3QkFBRSxPQUFPLEdBQUcsQ0FBQztvQkFFdkMsMERBQTBEO29CQUMxRCxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNsRCxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUNYLHlCQUF5Qjs0QkFDekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7NEJBRWxGLGNBQWM7NEJBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFFdkMsNkJBQTZCOzRCQUM3QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUN6QyxDQUFDO29CQUNILENBQUM7b0JBRUQsbUJBQW1CO29CQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUUzQix3QkFBd0I7b0JBQ3hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdDQUFnQztnQkFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUV6RixrQkFBa0I7Z0JBQ2xCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sOEJBQThCO1lBQzlCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNySCxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2xELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQWM7UUFDdkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuQyxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGdCQUFnQyxFQUFFLFFBQXFCO1FBQ2pGLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2SSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDekQsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFOUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCwwQkFBMEI7WUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQWM7UUFDcEMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNO1lBQUUsT0FBTyxDQUFDLDJCQUEyQjtRQUN0RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFFMUMsOEJBQThCO1FBQzlCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsd0RBQXdEO1lBQ3JGLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQXFCLEVBQUUsS0FBa0IsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUNuRixLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxZQUFZO1FBQ2pELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxTQUFTLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNyRSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLEtBQUs7b0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxXQUFXLENBQUMsU0FBbUIsRUFBRSxnQkFBNkI7UUFDcEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDdkMsSUFBSSxTQUFTLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUU5QyxnQkFBZ0IsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpGLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSTtnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUU1QiwwRUFBMEU7WUFDMUUsZ0ZBQWdGO1lBQ2hGLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBRW5ELHlIQUF5SDtZQUN6SCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUVyRCxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBZ0IsRUFBRSxLQUFlO1FBQzNELElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsb0JBQW9CLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6SSxpRkFBaUY7UUFDakYsaUZBQWlGO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVuRywwQkFBMEI7UUFDMUIsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdEMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDaEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckIsc0JBQXNCO1lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7d0dBN3FCVSxXQUFXLGtRQXVCWixXQUFXLGFBQ0MsZ0JBQWdCLDZCQUNoQixjQUFjOzRHQXpCekIsV0FBVyxjQUhWLE1BQU07OzRGQUdQLFdBQVc7a0JBSnZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDcEI7OzBCQXdCSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ25DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IEFib3V0TW9kYWwgfSBmcm9tICcuLi9hYm91dC9hYm91dC5tb2RhbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlSXRlbUVudGl0eVV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvdHJlZS1pdGVtLWVudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBJTWVudUl0ZW0sIE1lbnVJdGVtLCBNZW51SXRlbXMsIE1lbnVPcHRpb25zIH0gZnJvbSAnLi9tZW51Lm1vZGVsJztcblxuZXhwb3J0IHR5cGUgU3BsaXRQYW5lU2hvd1doZW4gPSBib29sZWFuIHwgJ2xnJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfU0hPV19XSEVOOiBTcGxpdFBhbmVTaG93V2hlbiA9ICdsZyc7XG5leHBvcnQgY29uc3QgQVBQX01FTlVfSVRFTVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48SU1lbnVJdGVtW10+KCdtZW51SXRlbXMnKTtcbmV4cG9ydCBjb25zdCBBUFBfTUVOVV9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE1lbnVPcHRpb25zPignbWVudU9wdGlvbnMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNZW51UGF0aFBhcmFtIHtcbiAgcGF0aDogc3RyaW5nO1xuICBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBkZXBzOiBbRU5WSVJPTk1FTlRdLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPE1lbnVJdGVtW10+IHtcbiAgcmVhZG9ubHkgYWNjb3VudENoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjY291bnQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IG9uUGlubmVkID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSBfc3RhdGljSXRlbXM6IE1lbnVJdGVtW107XG4gIHByaXZhdGUgX2RldGFjaGVkU3ViSXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBNZW51T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nUHJlZml4ID0gJ1ttZW51LXNlcnZpY2VdICc7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRvcGVuZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kc3BsaXRQYW5lV2hlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3BsaXRQYW5lU2hvd1doZW4+KERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kZW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRlbmFibGVTdWJNZW51OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIGFsZXJ0Q29udHJvbGxlcjogQWxlcnRDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBuYXZDb250cm9sbGVyOiBOYXZDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9NRU5VX09QVElPTlMpIG9wdGlvbnM/OiBNZW51T3B0aW9ucyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9NRU5VX0lURU1TKSBzdGF0aWNJdGVtcz86IElNZW51SXRlbVtdXG4gICkge1xuICAgIHN1cGVyKHNldHRpbmdzKTtcbiAgICB0aGlzLl9vcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHN1Yk1lbnU6IHtcbiAgICAgICAgZGlzYWJsZUljb246IGZhbHNlLFxuICAgICAgICBzYXZlUGlubmVkOiB0cnVlLFxuICAgICAgICAuLi4ob3B0aW9ucz8uc3ViTWVudSB8fCB7fSksXG4gICAgICAgIC8vIEZvcmNlIGRpc2FibGUgb24gbW9iaWxlXG4gICAgICAgIGVuYWJsZTogb3B0aW9ucz8uc3ViTWVudT8uZW5hYmxlICE9PSBmYWxzZSAmJiAhdGhpcy5zZXR0aW5ncy5tb2JpbGUsXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5fJGVuYWJsZVN1Yk1lbnUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX29wdGlvbnMuc3ViTWVudS5lbmFibGUpO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG5cbiAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gW107XG4gICAgdGhpcy5fc3RhdGljSXRlbXMgPSAoc3RhdGljSXRlbXMgfHwgW10pLm1hcCgoc291cmNlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmZyb21PYmplY3QoeyBzdGF0aWM6IHRydWUsIC4uLnNvdXJjZSB9LCB7IGNvbXB1dGVJZDogdHJ1ZSwgZmlsbFBhcmVudDogdHJ1ZSwgZmlsbERlZmF1bHRGcm9tUGFyZW50OiB0cnVlIH0pO1xuXG4gICAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gVHJlZUl0ZW1FbnRpdHlVdGlscy5kZWxldGVSZWN1cnNpdmVseSh0YXJnZXQsIChpdGVtKSA9PiBpdGVtLnN0YXRpYyAhPT0gdHJ1ZSk7XG4gICAgICBpZiAoZGV0YWNoZWRTdWJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGRldGFjaGVkU3ViSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gdGhpcy5fZGV0YWNoVG9QYXJlbnQoaXRlbSkpO1xuICAgICAgICBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArICdJbml0aWFsIGRldGFjaGVkIHN1YiBpdGVtcycsIGRldGFjaGVkU3ViSXRlbXMpO1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLnB1c2goLi4uZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IG9wZW5lZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fJG9wZW5lZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzcGxpdFBhbmVXaGVuKCk6IE9ic2VydmFibGU8U3BsaXRQYW5lU2hvd1doZW4+IHtcbiAgICByZXR1cm4gdGhpcy5fJHNwbGl0UGFuZVdoZW4uYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fJGVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3ViTWVudUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuXyRlbmFibGVTdWJNZW51LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHN1Ykl0ZW1zKCk6IE1lbnVJdGVtW10ge1xuICAgIHJldHVybiAodGhpcy5kYXRhIHx8IFtdKS5yZWR1Y2UoKHJlcywgcm9vdEVsZW1lbnQpID0+IHJlcy5jb25jYXQocm9vdEVsZW1lbnQuY2hpbGRyZW4pLCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfc3RhdGljU3ViSXRlbXMoKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuICh0aGlzLl9zdGF0aWNJdGVtcyB8fCBbXSkucmVkdWNlKChyZXMsIHJvb3RFbGVtZW50KSA9PiByZXMuY29uY2F0KHJvb3RFbGVtZW50LmNoaWxkcmVuKSwgW10pO1xuICB9XG5cbiAgZW5hYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fJGVuYWJsZWQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBlbmFibGVTdWJNZW51KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fJGVuYWJsZVN1Yk1lbnUubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBzZXRTcGxpdFBhbmVTaG93V2hlbih2YWx1ZTogU3BsaXRQYW5lU2hvd1doZW4pIHtcbiAgICBpZiAodGhpcy5fJHNwbGl0UGFuZVdoZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl8kc3BsaXRQYW5lV2hlbi5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTcGxpdFBhbmVXaGVuKCkge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl8kc3BsaXRQYW5lV2hlbi5uZXh0KERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICAgIH1cbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiB7IHdpdGhDaGlsZHJlbj86IGJvb2xlYW47IGNvbXB1dGVJZD86IGJvb2xlYW47IGZpbGxQYXJlbnQ/OiBib29sZWFuOyBmaWxsRGVmYXVsdEZyb21QYXJlbnQ/OiBib29sZWFuIH0pOiBNZW51SXRlbSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gTWVudUl0ZW0uZnJvbU9iamVjdChzb3VyY2UsIHsgd2l0aENoaWxkcmVuOiBmYWxzZSB9KTtcbiAgICAvLyBDb21wdXRlIGlkIGlmIG5lZWRcbiAgICBpZiAob3B0cz8uY29tcHV0ZUlkICYmIGlzTmlsKHRhcmdldC5pZCkpIHRhcmdldC5pZCA9IHRoaXMuX2NvbXB1dGVOZXdJZCgpO1xuXG4gICAgLy8gUmVtb3ZlIGljb24gaWYgZGlzYWJsZWRcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5zdWJNZW51LmRpc2FibGVJY29uKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgPEljb25SZWY+eyBpY29uOiB1bmRlZmluZWQsIG1hdEljb246IHVuZGVmaW5lZCwgbWF0U3ZnSWNvbjogdW5kZWZpbmVkIH0pO1xuICAgIH1cblxuICAgIC8vIFJlY3Vyc2l2ZVxuICAgIHRhcmdldC5jaGlsZHJlbiA9IChzb3VyY2UuY2hpbGRyZW4gfHwgW10pLm1hcCgoanNvbjogYW55KSA9PiB0aGlzLmZyb21PYmplY3QoanNvbiwgeyAuLi5vcHRzLCBmaWxsUGFyZW50OiBmYWxzZSB9KSk7XG5cbiAgICAvLyBGaWxsIHBhcmVudCAob25jZSwgd2hlbiB0aGUgZnVsbCB0cmVlIGlzIHJlYWR5KVxuICAgIGlmIChvcHRzPy5maWxsUGFyZW50KSB7XG4gICAgICBUcmVlSXRlbUVudGl0eVV0aWxzLnRyZWVGaWxsUGFyZW50KHRhcmdldCk7XG5cbiAgICAgIC8vIEZpbGwgZGVmYXVsdHMgZnJvbSB0aGUgcGFyZW50IChvbmNlIGZpbGxlZClcbiAgICAgIGlmIChvcHRzPy5maWxsRGVmYXVsdEZyb21QYXJlbnQpIHtcbiAgICAgICAgVHJlZUl0ZW1FbnRpdHlVdGlscy52aXNpdCh0YXJnZXQsIChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFpdGVtLnBhcmVudCkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vIHBhcmVudFxuICAgICAgICAgIGl0ZW0ucGFyZW50UGF0aCA9IGl0ZW0ucGFyZW50UGF0aCB8fCBpdGVtLnBhcmVudC5wYXRoO1xuICAgICAgICAgIGl0ZW0ucGFyZW50UGF0aFBhcmFtcyA9IGl0ZW0ucGFyZW50UGF0aFBhcmFtcyB8fCBpdGVtLnBhcmVudC5wYXRoUGFyYW1zO1xuICAgICAgICAgIGl0ZW0uc3RhdGljID0gdG9Cb29sZWFuKGl0ZW0uc3RhdGljLCBpdGVtLnBhcmVudC5zdGF0aWMpO1xuICAgICAgICAgIC8vIENvbXB1dGUgcGF0aCwgZnJvbSBwYXJlbnQgcGF0aCArIGFjdGlvblxuICAgICAgICAgIGlmICghaXRlbS5wYXRoICYmICEhaXRlbS5hY3Rpb24pIHtcbiAgICAgICAgICAgIGl0ZW0ucGF0aCA9IGl0ZW0ucGFyZW50LnBhdGg7XG4gICAgICAgICAgICBpdGVtLnBhdGhQYXJhbXMgPSB0eXBlb2YgaXRlbS5hY3Rpb24gPT09ICdzdHJpbmcnID8geyBhY3Rpb246IGl0ZW0uYWN0aW9uIH0gOiB7IGFjdGlvbklkOiBpdGVtLmlkLnRvU3RyaW5nKCksIGFjdGlvblRpdGxlOiBpdGVtLnRpdGxlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgY3JlYXRlU3ViTWVudShzb3VyY2U6IFBhcnRpYWw8SU1lbnVJdGVtPik6IE1lbnVJdGVtIHtcbiAgICBpZiAoIXRoaXMuc3ViTWVudUVuYWJsZWQpIHJldHVybiBudWxsOyAvLyBTa2lwIGlmIGRpc2FibGVkXG5cbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmZyb21PYmplY3Qoc291cmNlKTtcblxuICAgIC8vIENoZWNrIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuX2ZpbmRFeGlzdGluZ0l0ZW0odGFyZ2V0KTtcbiAgICAgIGlmIChleGlzdGluZ0l0ZW0pIHJldHVybiBleGlzdGluZ0l0ZW07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlXG4gICAgaWYgKGlzTmlsKHRhcmdldC5pZCkpIHRhcmdldC5pZCA9IHRoaXMuX2NvbXB1dGVOZXdJZCgpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGFzeW5jIGFkZFN1Yk1lbnVJdGVtcyhzb3VyY2VzOiBJTWVudUl0ZW1bXSwgb3B0cz86IHsgc2tpcElmRXhpc3RzPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICBpZiAoIXRoaXMuc3ViTWVudUVuYWJsZWQpIHJldHVybjsgLy8gU2tpcFxuICAgIHJldHVybiBzb3VyY2VzLm1hcCgoc291cmNlKSA9PiB0aGlzLl9hZGRTdWJNZW51SXRlbSh0aGlzLmZyb21PYmplY3Qoc291cmNlKSwgb3B0cykpO1xuICB9XG5cbiAgYXN5bmMgYWRkU3ViTWVudUl0ZW0oaXRlbTogSU1lbnVJdGVtLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgcmV0dXJuIHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHRoaXMuZnJvbU9iamVjdChpdGVtKSwgb3B0cyk7XG4gIH1cblxuICBhc3luYyByZW1vdmVTdWJNZW51SXRlbXMoaXRlbXM6IElNZW51SXRlbVtdKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICByZXR1cm4gKGl0ZW1zIHx8IFtdKS5tYXAoKGl0ZW0pID0+IHRoaXMuX3JlbW92ZVN1Yk1lbnVJdGVtKHRoaXMuZnJvbU9iamVjdChpdGVtKSkpO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlU3ViTWVudUl0ZW0oaXRlbTogSU1lbnVJdGVtKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICByZXR1cm4gdGhpcy5fcmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pKTtcbiAgfVxuXG4gIHRvZ2dsZVBpbm5lZChzb3VyY2U6IElNZW51SXRlbSkge1xuICAgIGNvbnN0IGl0ZW0gPSBzb3VyY2UgaW5zdGFuY2VvZiBNZW51SXRlbSA/IHNvdXJjZSA6IHRoaXMuX2ZpbmRFeGlzdGluZ0l0ZW0odGhpcy5mcm9tT2JqZWN0KHNvdXJjZSkpO1xuXG4gICAgLy8gU2tpcCBpZiBub3QgZm91bmRcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKHRoaXMuX2xvZ1ByZWZpeCArIGBTdWIgbWVudSB7JHtzb3VyY2UucGF0aH19IGNhbm5vdCBiZSBmb3VuZCAtIHVuYWJsZSB0byB0b2dnbGUgcGlubmVkIWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgaWYgc3RhdGljXG4gICAgaWYgKGl0ZW0uc3RhdGljKSByZXR1cm47XG5cbiAgICAvLyBVbnBpbm5lZFxuICAgIGlmIChpdGVtLnBpbm5lZCkge1xuICAgICAgaXRlbS5waW5uZWQgPSBmYWxzZTtcbiAgICAgIGlmICghaXRlbS5kZXRhY2hlZCkge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLnRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcygpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQaW5uZWRcbiAgICBlbHNlIHtcbiAgICAgIGl0ZW0ucGlubmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm9uUGlubmVkLmVtaXQoaXRlbSk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQWN0aW9uKGV2ZW50OiBFdmVudCwgaXRlbTogTWVudUl0ZW0pIHtcbiAgICBjb25zdCBhY3Rpb24gPSBpdGVtPy5hY3Rpb247XG4gICAgaWYgKCFhY3Rpb24pIHJldHVybjsgLy8gc2tpcFxuICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgc3dpdGNoIChhY3Rpb24gYXMgc3RyaW5nKSB7XG4gICAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYWJvdXQnOlxuICAgICAgICAgIGF3YWl0IHRoaXMub3BlbkFib3V0TW9kYWwoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZXhwYW5kJzpcbiAgICAgICAgICBhd2FpdCB0aGlzLnRvZ2dsZUV4cGFuZGFibGVJdGVtKGl0ZW0pO1xuICAgICAgICAgIGlmIChpdGVtLnBhdGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoaXRlbS5wYXRoLCB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnBhdGhQYXJhbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBpZiAoaXRlbS5wYXRoKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KGl0ZW0ucGF0aCwge1xuICAgICAgICAgICAgICBxdWVyeVBhcmFtczogaXRlbS5wYXRoUGFyYW1zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBhY3Rpb246ICcgKyBhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKGFjdGlvbiBhcyB1bmtub3duIGFzIGFueSkoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvZ291dCgpIHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFtcbiAgICAgICdBVVRILkxPR09VVC5DT05GSVJNX1RJVExFJyxcbiAgICAgICdBVVRILkxPR09VVC5DT05GSVJNX01FU1NBR0UnLFxuICAgICAgJ0NPTU1PTi5CVE5fQ0FOQ0VMJyxcbiAgICAgICdBVVRILkxPR09VVC5CVE5fQ09ORklSTScsXG4gICAgXSk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnXSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9NRVNTQUdFJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0FOQ0VMJ10sXG4gICAgICAgICAgcm9sZTogJ2NhbmNlbCcsXG4gICAgICAgICAgY3NzQ2xhc3M6ICdzZWNvbmRhcnknLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5CVE5fQ09ORklSTSddLFxuICAgICAgICAgIGNzc0NsYXNzOiAnaW9uLWNvbG9yLXByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdCgnLycpO1xuXG4gICAgICAgICAgICAvLyBXQVJOSU5HOiBsb2dvdXQgc2hvdWxkIGJlIGRvbmUgQUZURVIgaG9tZSByZWRpcmVjdGlvbiwgYmVjYXVzZSBvZiBjYWNoZSBjbGVhcmluZyAtIHNlZSBpc3N1ZSAjNVxuICAgICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFsZXJ0LnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5BYm91dE1vZGFsKCkge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHsgY29tcG9uZW50OiBBYm91dE1vZGFsIH0pO1xuICAgIHJldHVybiBtb2RhbC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyB0b2dnbGVFeHBhbmRhYmxlSXRlbShpdGVtOiBNZW51SXRlbSkge1xuICAgIGlmICghaXRlbS5leHBhbmRlZCkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArICdFeHBhbmQgaXRlbScsIGl0ZW0pO1xuXG4gICAgICBpdGVtLm1hdEljb24gPSAnZXhwYW5kX2xlc3MnO1xuXG4gICAgICAvLyBUcnkgdG8gYXR0YWNoIHNvbWUgaXRlbVxuICAgICAgdGhpcy5fZGV0YWNoZWRTdWJJdGVtc1xuICAgICAgICAuZmlsdGVyKChjaGlsZEl0ZW0pID0+ICEhdGhpcy5fZmluZFBhcmVudChjaGlsZEl0ZW0sIFtpdGVtXSkpXG4gICAgICAgIC5mb3JFYWNoKChjaGlsZEl0ZW0pID0+IHRoaXMuX2F0dGFjaE1lbnVUb1BhcmVudChpdGVtLCBjaGlsZEl0ZW0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbS5tYXRJY29uID0gJ2V4cGFuZF9tb3JlJztcblxuICAgICAgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyA9IFsuLi50aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLCAuLi50aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMoeyBwYXRoOiAnLycsIHBhcmFtczoge30gfSwgaXRlbS5jaGlsZHJlbildO1xuICAgIH1cbiAgfVxuXG4gIF9tYXJrQXNPcGVuZWQoKSB7XG4gICAgdGhpcy5fJG9wZW5lZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgX21hcmtBc0Nsb3NlZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKSB7XG4gICAgdGhpcy5fJG9wZW5lZC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKSB7XG4gICAgdGhpcy5fJG9wZW5lZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpIHtcbiAgICBjb25zb2xlLmluZm8oYCR7dGhpcy5fbG9nUHJlZml4fVN0YXJ0aW5nLi4uYCk7XG5cbiAgICAvLyBSZXN0b3JlIHN1YiBpdGVtcyBmcm9tIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgIGNvbnN0IHNldHRpbmdzU3ViSXRlbXM6IElNZW51SXRlbVtdID0gdGhpcy5zZXR0aW5ncy5nZXRQYWdlU2V0dGluZ3MoJ21lbnUnLCAnc3ViLWl0ZW1zJyk7XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShzZXR0aW5nc1N1Ykl0ZW1zKSkge1xuICAgICAgY29uc3QgZGV0YWNoZWRTdWJJdGVtcyA9IHNldHRpbmdzU3ViSXRlbXMubWFwKChzb3VyY2UpID0+IHRoaXMuZnJvbU9iamVjdChzb3VyY2UsIHsgY29tcHV0ZUlkOiB0cnVlLCBmaWxsUGFyZW50OiB0cnVlIH0pKTtcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ1Jlc3RvcmluZyBwaW5uZWQgc3ViIGl0ZW1zIGZyb20gc2V0dGluZ3MnLCBkZXRhY2hlZFN1Ykl0ZW1zKTtcblxuICAgICAgLy8gVE9ETyBjaGVjayBpZiBwcmV2aW91cyBzdWIgbWVudSAoZnJvbSBtZW51IHRva2VuKSBhcmUga2VwdFxuICAgICAgLy90aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLnB1c2goLi4uZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gZGV0YWNoZWRTdWJJdGVtcztcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50RXZlbnQkID0gbWVyZ2UoXG4gICAgICBmcm9tKHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKSksXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnBpcGUobWFwKChfKSA9PiBudWxsKSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKGFjY291bnQpID0+IChpc05vdE5pbChhY2NvdW50Py5pZCkgPyBhY2NvdW50IDogbnVsbCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGExLCBhMikgPT4gRGF0ZVV0aWxzLmlzU2FtZShhMT8udXBkYXRlRGF0ZSwgYTI/LnVwZGF0ZURhdGUpKVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgLy8gQ29tYmluZSBjb25maWcgYW5kIGFjY291bnQgZXZlbnRzXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLCBhY2NvdW50RXZlbnQkXSkuc3Vic2NyaWJlKChbY29uZmlnLCBhY2NvdW50XSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVJlY2VpdmVkIGNvbmZpZyBvciBhY2NvdW50IGV2ZW50LiBSZWZyZXNoaW5nIGl0ZW1zLi4uYCwgYWNjb3VudCk7XG5cbiAgICAgICAgYWNjb3VudCA9IHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpID8gYWNjb3VudCA6IG51bGw7XG5cbiAgICAgICAgLy8gTG9hZCBhbGwgaXRlbXNcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gRW1pdCBuZXcgcm9vdCBpdGVtc1xuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoaXRlbXMpO1xuXG4gICAgICAgIC8vIEVtaXQgYWNjb3VudCBjaGFuZ2VzIGV2ZW50XG4gICAgICAgIHRoaXMuYWNjb3VudENoYW5nZXMubmV4dChhY2NvdW50KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gRm9yY2UgcmVmcmVzaCB3aGVuIGxvZ2luL2xvZ291dFxuICAgICAgICB0aGlzLmFjY291bnRDaGFuZ2VzLnBpcGUobWFwKCgpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKSkpLFxuICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgcm91dGVcbiAgICAgICAgdGhpcy5zdGFydFN1YmplY3QucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMucm91dGVyLmV2ZW50cyksXG4gICAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGV2ZW50LnVybCkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDI1MCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHBhdGhQYXJhbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSB0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMocGF0aFBhcmFtKTtcbiAgICAgICAgICBpZiAoZGV0YWNoZWRTdWJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLmRldGFjaGVkU3ViSXRlbXNdO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1OZXdseSBkZXRhY2hlZCBpdGVtczogYCwgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTYXZlIHBpbm5lZCBpdGVtc1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUGlubmVkLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IHBpbm5lZCBlbGVtZW50cywgdGhlbiBzZXJpYWxpemUgaXQgKHdpdGhvdXQgaWQpXG4gICAgICAgIGNvbnN0IHBpbm5lZFN1Ykl0ZW1zID0gdGhpcy5zdWJJdGVtcy5maWx0ZXIoKGkpID0+IGkuaXNQaW5uZWQoKSkubWFwKChpdGVtKSA9PiBpdGVtLmFzT2JqZWN0KHsgd2l0aENoaWxkcmVuOiB0cnVlLCBrZWVwTG9jYWxJZDogZmFsc2UgfSkpO1xuXG4gICAgICAgIGlmIChwaW5uZWRTdWJJdGVtcy5sZW5ndGggJiYgdGhpcy5fZGVidWcpXG4gICAgICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgU2F2aW5nICR7cGlubmVkU3ViSXRlbXMubGVuZ3RofSBwaW5uZWQgaXRlbXMsIGluIGxvY2FsIHNldHRpbmdzYCwgcGlubmVkU3ViSXRlbXMpO1xuICAgICAgICB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZygnbWVudScsIHBpbm5lZFN1Ykl0ZW1zLCAnc3ViLWl0ZW1zJyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuZGF0YVN1YmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZE1lbnVJdGVtcyhjb25maWc6IENvbmZpZ3VyYXRpb24gfCBudWxsLCBhY2NvdW50OiBBY2NvdW50IHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TG9hZGluZyBtZW51IGl0ZW1zLi4uYCk7XG5cbiAgICAvLyBTYXZlIHByZXZpb3VzIGNoaWxkcmVuIG9mIHJvb3QgaXRlbXNcbiAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gKHRoaXMuc3ViSXRlbXMgfHwgW10pLmNvbmNhdCh0aGlzLl9zdGF0aWNTdWJJdGVtcyB8fCBbXSkucmVkdWNlKChyZXMsIHJvb3RJdGVtKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJvb3RJdGVtLmNoaWxkcmVuO1xuICAgICAgaWYgKGlzRW1wdHlBcnJheShjaGlsZHJlbikpIHJldHVybiByZXM7XG4gICAgICAvLyBEZXRhY2ggYWxsIHJvb3QgY2hpbGRyZW5cbiAgICAgIHJvb3RJdGVtLmNoaWxkcmVuID0gW107XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkLnBhcmVudCA9IG51bGwpKTtcbiAgICAgIC8vIFJldHVybiByb290IGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdChjaGlsZHJlbik7XG4gICAgfSwgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyB8fCBbXSk7XG5cbiAgICAvLyBSZXNldCBiYXNlIHJvb3QgaXRlbXMgKGNsZWFuIGl0ZW1zIGFkZGVkIGJ5IGNvbmZpZylcbiAgICBsZXQgaXRlbXM6IE1lbnVJdGVtW10gPSB0aGlzLl9zdGF0aWNJdGVtcy5zbGljZSgpO1xuXG4gICAgLy8gQ29uY2F0IGNvbmZpZydzIGl0ZW1zXG4gICAgY29uc3QgY29uZmlnVmFsdWU6IHN0cmluZyA9IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbmZpZ1ZhbHVlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnSXRlbXMgPSBKU09OLnBhcnNlKGNvbmZpZ1ZhbHVlKSBhcyBJTWVudUl0ZW1bXTtcbiAgICAgICAgaXRlbXMgPSAoY29uZmlnSXRlbXMgfHwgW10pLnJlZHVjZSgocmVzOiBNZW51SXRlbVtdLCBzb3VyY2UpID0+IHtcbiAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZW1cbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5mcm9tT2JqZWN0KHsgc3RhdGljOiB0cnVlLCAuLi5zb3VyY2UgfSwgeyBjb21wdXRlSWQ6IHRydWUgfSk7XG5cbiAgICAgICAgICAvLyBTa2lwIGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgICAgaWYgKHJlcy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKSkgcmV0dXJuIHJlcztcblxuICAgICAgICAgIC8vIFJldXNlIGV4aXN0aW5nIGlkLCBpZiBwb3NzaWJsZVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuZGF0YT8uZmluZCgoaSkgPT4gTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbS5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KChpKSA9PiBpLnRpdGxlID09PSBpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtKVxuICAgICAgICAgICAgICAgIC5jb25jYXQocmVzLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVzLmZpbmRJbmRleCgoaSkgPT4gaS50aXRsZSA9PT0gaXRlbS5iZWZvcmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoaXRlbSkuY29uY2F0KHJlcy5zbGljZShpbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgICAgICAgfSwgaXRlbXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fUludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiAnJHtDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMua2V5fScuIEV4cGVjdGVkIGFuIGFycmF5IG9mIG1lbnUgaXRlbWAsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGl0ZW0gdXNpbmcgYWNjb3VudCByaWdodHNcbiAgICBjb25zdCBvcHRzID0geyBkZWJ1ZzogdGhpcy5fZGVidWcgfTtcbiAgICBpdGVtcyA9IGl0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgY29uZmlnLCBvcHRzKSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgLy8gUmVwbGFjZSB0aXRsZSB1c2luZyBhIGNvbmZpZyBwcm9wZXJ0eVxuICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGl0ZW0udGl0bGVQcm9wZXJ0eSkgJiYgY29uZmlnKSB7XG4gICAgICAgICAgaXRlbS50aXRsZSA9IGNvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0udGl0bGVQcm9wZXJ0eV0gfHwgaXRlbS50aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUZvdW5kICR7aXRlbXMubGVuZ3RofSB2aXNpYmxlIHJvb3QgaXRlbXMuLi5gKTtcblxuICAgIC8vIFJlLWF0dGFjaCBzdWIgbWVudSBpdGVtc1xuICAgIGlmICh0aGlzLnN1Yk1lbnVFbmFibGVkICYmIGRldGFjaGVkU3ViSXRlbXMubGVuZ3RoKSB7XG4gICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICB0aGlzLl9hZGRTdWJNZW51SXRlbXMoZGV0YWNoZWRTdWJJdGVtcywgeyBza2lwSWZFeGlzdHM6IGZhbHNlLCBhdmFpbGFibGVQYXJlbnRzOiBkZXRhY2hlZFN1Ykl0ZW1zLmNvbmNhdChpdGVtcykgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gZGV0YWNoZWRTdWJJdGVtcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFN1Yk1lbnVJdGVtcyhzb3VyY2VzOiBNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuOyBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSB9KSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHNvdXJjZSwgb3B0cykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkU3ViTWVudUl0ZW0obmV3SXRlbTogTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW47IGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdIH0pIHtcbiAgICBvcHRzID0ge1xuICAgICAgc2tpcElmRXhpc3RzOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0aFBhcmFtID0gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpO1xuXG4gICAgLy8gRmluZCBpZiBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShuZXdJdGVtLCBvcHRzPy5hdmFpbGFibGVQYXJlbnRzKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICAvLyBObyBjaGFuZ2VzXG4gICAgICBpZiAob3B0cy5za2lwSWZFeGlzdHMgJiYgTWVudUl0ZW1zLmlzU2FtZShleGlzdGluZ0l0ZW0sIG5ld0l0ZW0pICYmIGV4aXN0aW5nSXRlbS52aXNpYmxlKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2tpcHBpbmcgc3ViIGl0ZW0gKHNhbWUgdmlzaWJsZSBpdGVtIGFscmVhZHkgZXhpc3QpYCwgbmV3SXRlbSk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0l0ZW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgZXhpc3Rpbmcgc3ViIGl0ZW0gI2AsIGV4aXN0aW5nSXRlbS5pZCk7XG5cbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgaXRlbSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGlkXG4gICAgICBpZiAobmV3SXRlbSAhPT0gZXhpc3RpbmdJdGVtKSB7XG4gICAgICAgIG5ld0l0ZW0uaWQgPSBleGlzdGluZ0l0ZW0uaWQ7XG4gICAgICAgIG5ld0l0ZW0uJGNoaWxkcmVuID0gZXhpc3RpbmdJdGVtLiRjaGlsZHJlbjtcbiAgICAgICAgbmV3SXRlbS5waW5uZWQgPSBleGlzdGluZ0l0ZW0ucGlubmVkO1xuICAgICAgICBuZXdJdGVtLnN0YXRpYyA9IGV4aXN0aW5nSXRlbS5zdGF0aWM7XG4gICAgICAgIGlmIChuZXdJdGVtLnBpbm5lZCB8fCBuZXdJdGVtLnN0YXRpYyB8fCBleGlzdGluZ0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAvLyBJZiBsb2FkaW5nLCBrZWVwIGV4aXN0aW5nIHRpdGxlIGlmIHBpbm5lZCAoYXZvaWQgdG8gc2hvdyBza2VsZXRvbilcbiAgICAgICAgICBuZXdJdGVtLnRpdGxlID0gbmV3SXRlbS50aXRsZSB8fCBleGlzdGluZ0l0ZW0udGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3SXRlbS50aXRsZSA9IGlzTm90TmlsKG5ld0l0ZW0udGl0bGUpID8gbmV3SXRlbS50aXRsZSA6IGV4aXN0aW5nSXRlbS50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdXRvIHNldCBpY29uLCBmb3IgZXhwYW5kIGFjdGlvblxuICAgICAgICBpZiAoZXhpc3RpbmdJdGVtLmFjdGlvbiA9PT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgICBuZXdJdGVtLmljb24gPSBudWxsO1xuICAgICAgICAgIG5ld0l0ZW0ubWF0SWNvbiA9IGV4aXN0aW5nSXRlbS5leHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaXRlbSdzIGlkIChpZiBuZWVkKVxuICAgIGVsc2UgaWYgKGlzTmlsKG5ld0l0ZW0uaWQpKSB7XG4gICAgICBuZXdJdGVtLmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBpY29uIGZvciBleHBhbmQgYWN0aW9uXG4gICAgaWYgKG5ld0l0ZW0uYWN0aW9uID09PSAnZXhwYW5kJyAmJiAhbmV3SXRlbS5tYXRJY29uKSB7XG4gICAgICBuZXdJdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuICAgIH1cblxuICAgIC8vIElmIHZpc2libGUsIGdldCB0aGUgcGFyZW50IHdoZXJlIHRvIGF0dGFjaCB0aGUgaXRlbVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQobmV3SXRlbSwgb3B0cz8uYXZhaWxhYmxlUGFyZW50cyk7XG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuZXhwYW5kZWQpIHtcbiAgICAgIC8vIEF0dGFjaCBpdGVtIHRvIHBhcmVudFxuICAgICAgdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KHBhcmVudCwgbmV3SXRlbSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBkZXRhY2hlZCBpdGVtcyA6XG4gICAgICAvLyAtIGV4Y2x1ZGVkIG5ldyBpdGVtXG4gICAgICAvLyAtIGF0dGFjaCBhbmQgZXhjbHVkZSB0aG9zZSB0aGFuIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgbmV3IGl0ZW1cbiAgICAgIC8vIFNlYXJjaCBpbiBkZXRhY2hlZCBpdGVtcyBvbmUgaGF2ZSBuZXdJdGVtIGFzIHBhcmVudFxuICAgICAgaWYgKG5ld0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgY29uc3QgYW5jZXN0b3IgPSBuZXdJdGVtLmFuY2VzdG9yO1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5jb25jYXQoLi4ubmV3SXRlbS5jaGlsZHJlbikucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBFeGNsdWRlZCBuZXdseSBhZGQgaXRlbVxuICAgICAgICAgIGlmIChpdGVtLmlkID09PSBuZXdJdGVtLmlkKSByZXR1cm4gcmVzO1xuXG4gICAgICAgICAgLy8gSWYgc29tZSBkZXRhY2hlZCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIG5ldyBpdGVtOiBkbyBpdFxuICAgICAgICAgIGlmIChNZW51SXRlbXMuY2hlY2tJZlN1Yk1lbnVWaXNpYmxlKGl0ZW0sIHBhdGhQYXJhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQoaXRlbSwgW2FuY2VzdG9yXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSBpdGVtJ3MgY2hpbGRyZW5cbiAgICAgICAgICAgICAgY29uc3QgZGV0YWNoZWRDaGlsZHJlbiA9IHRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyhwYXRoUGFyYW0sIGl0ZW0uY2hpbGRyZW4gfHwgW10pO1xuXG4gICAgICAgICAgICAgIC8vIEF0dGFjaCBpdGVtXG4gICAgICAgICAgICAgIHRoaXMuX2F0dGFjaE1lbnVUb1BhcmVudChwYXJlbnQsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGRldGFjaGVkIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KC4uLmRldGFjaGVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERldGFjaCAoaWYgbmVlZClcbiAgICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKTtcblxuICAgICAgICAgIC8vIEFkZCB0byBkZXRhY2hlZCBpdGVtc1xuICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBkZXRhY2hlZCBlbGVtZW50c1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IG5ld0l0ZW0uaWQpO1xuXG4gICAgICAgIC8vIERldGFjaCBjaGlsZHJlblxuICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHRoaXMuX2RldGFjaFRvUGFyZW50KGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIG9yIHVwZGF0ZSBkZXRhY2hlZCBpdGVtXG4gICAgICBjb25zdCBkZXRhY2hlZEluZGV4ID0gaXNOb3ROaWwobmV3SXRlbS5pZCkgPyB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbmV3SXRlbS5pZCkgOiAtMTtcbiAgICAgIGlmIChkZXRhY2hlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zW2RldGFjaGVkSW5kZXhdID0gbmV3SXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaChuZXdJdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVOZXdJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUNvdW50ZXIrKztcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZVN1Yk1lbnVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShpdGVtKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChleGlzdGluZ0l0ZW0pO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbT86IE1lbnVQYXRoUGFyYW0sIHN1Ykl0ZW1zPzogTWVudUl0ZW1bXSkge1xuICAgIGN1cnJlbnRQYXRoUGFyYW0gPSBjdXJyZW50UGF0aFBhcmFtID8gY3VycmVudFBhdGhQYXJhbSA6IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiAoc3ViSXRlbXMgfHwgdGhpcy5zdWJJdGVtcykucmVkdWNlKChyZXMsIHN1Ykl0ZW0pID0+IHtcbiAgICAgIC8vIE5vdCB2aXNpYmxlID0+IHNob3VsZCBiZSBkZXRhY2hcbiAgICAgIGlmICghTWVudUl0ZW1zLmNoZWNrSWZTdWJNZW51VmlzaWJsZShzdWJJdGVtLCBjdXJyZW50UGF0aFBhcmFtKSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChzdWJJdGVtKTtcblxuICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChzdWJJdGVtKTtcbiAgICAgIH1cbiAgICAgIC8vIFZpc2libGU6IGNoZWNrIGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdCh0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbSwgc3ViSXRlbS5jaGlsZHJlbikpO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGFjaFRvUGFyZW50KGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtPy5wYXJlbnQpIHJldHVybjsgLy8gU2tpcCBpZiBhbHJlYWR5IGRldGFjaGVkXG4gICAgbGV0IGNoaWxkcmVuID0gaXRlbS5wYXJlbnQuY2hpbGRyZW4gfHwgW107XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBwYXJlbnQgY2hpbGRyZW5cbiAgICBjb25zdCBpbmRleEluUGFyZW50ID0gY2hpbGRyZW4uaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXhJblBhcmVudCAhPT0gLTEpIHtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uc2xpY2UoKTsgLy8gQ29weSBvcmlnaW5hbCBhcnJheSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBpbiBhIGxvb3BcbiAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleEluUGFyZW50LCAxKTtcbiAgICAgIGl0ZW0ucGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgaXRlbS5wYXJlbnQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtOiBJTWVudUl0ZW0sIGl0ZW1zPzogTWVudUl0ZW1bXSwgcmVjdXJzaXZlID0gdHJ1ZSk6IE1lbnVJdGVtIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IFsuLi50aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLCAuLi50aGlzLmRhdGFdO1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBOb3QgZm91bmRcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChNZW51SXRlbXMuaXNTYW1lSWRPclBhdGhBbmRQYXJhbXMoc2VhcmNoSXRlbSwgaXRlbSkpIHJldHVybiBpdGVtO1xuICAgICAgaWYgKHJlY3Vyc2l2ZSAmJiBpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtLCBpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFBhcmVudChjaGlsZEl0ZW06IE1lbnVJdGVtLCBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpZiAoIWNoaWxkSXRlbT8ucGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoY2hpbGRJdGVtLnBhcmVudCkgcmV0dXJuIGNoaWxkSXRlbS5wYXJlbnQ7XG5cbiAgICBhdmFpbGFibGVQYXJlbnRzID0gYXZhaWxhYmxlUGFyZW50cyB8fCBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5kYXRhXTtcblxuICAgIHJldHVybiBhdmFpbGFibGVQYXJlbnRzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0/LnBhdGgpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIEEgZm91bmQgaXRlbSBhbHJlYWR5IG1hdGNoIHdpdGggdGhlIG1lbnVJdGVtLnBhcmVudFBhdGggOiBrZWVwIGl0IGFzIGl0XG4gICAgICAvLyBUaGVyZSBpcyBhIGZvdW5kIGNhbmRpZGF0ZSB0aGF0IGFscmVhZHkgbWF0Y2ggdGhlIGN1cnJlbnQgY2FuZGlkYXRlIDoga2VlcCBpdFxuICAgICAgaWYgKE1lbnVJdGVtcy5pc1BhcmVudChjaGlsZEl0ZW0sIHJlcykpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIElmIHRoZSBtZW51IGl0ZW0gaGFzIGV4cGxpY2l0IHBhcmVudFBhdGggYW5kIGl0cyBwYXRoIGFuZCBwYXRoIHBhcmFtIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FuZGlkYXRlICA6IHVzZSBpdCBhcyBwYXJlbnRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCBpdGVtKSkgcmV0dXJuIGl0ZW07XG5cbiAgICAgIGlmICghcmVzICYmIGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFBhcmVudChjaGlsZEl0ZW0sIGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hNZW51VG9QYXJlbnQocGFyZW50OiBNZW51SXRlbSwgY2hpbGQ6IE1lbnVJdGVtKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1BdHRhY2ggc3ViLW1lbnUgeyR7TWVudUl0ZW1zLmdldFVybChjaGlsZCl9fSB0byBwYXJlbnQgeyR7TWVudUl0ZW1zLmdldFVybChwYXJlbnQpfX1gKTtcblxuICAgIC8vIEF2b2lkIHRvIGtlZXAgaWRlbnRpY2FsIG1lbnUgaXRlbSAod2UgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgY2hpbGQgbWVudSBpdGVtKVxuICAgIC8vaWYgKCFwYXJlbnQ/LiRjaGlsZHJlbikgcGFyZW50LiRjaGlsZHJlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoKGl0ZW0pID0+IE1lbnVJdGVtcy5pc1NhbWVJZE9yUGF0aEFuZFBhcmFtcyhpdGVtLCBjaGlsZCkpO1xuXG4gICAgLy8gVXBkYXRlIGV4aXN0aW5nIGVsZW1lbnRcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChjaGlsZHJlbltleGlzdGluZ0luZGV4XSAhPT0gY2hpbGQpIHtcbiAgICAgICAgY2hpbGRyZW5bZXhpc3RpbmdJbmRleF0gPSBjaGlsZDtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgIC8vIFNvcnQgYnkgdGFiIChvciBpZClcbiAgICAgIHBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuLnNvcnQoTWVudUl0ZW1zLnNvcnRCeVRhYk9ySWQpO1xuICAgICAgY2hpbGQucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgfVxufVxuIl19
|