@decaf-ts/for-angular 0.0.19 → 0.0.20
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/README.md +2 -2
- package/components/crud-form/crud-form.component.d.ts +1 -1
- package/components/fieldset/fieldset.component.d.ts +1 -1
- package/components/filter/filter.component.d.ts +1 -1
- package/components/for-angular-components.module.d.ts +1 -2
- package/components/list/constants.d.ts +5 -9
- package/components/list-item/list-item.component.d.ts +1 -1
- package/engine/NgxBaseComponent.d.ts +1 -1
- package/esm2022/components/component-renderer/component-renderer.component.mjs +7 -7
- package/esm2022/components/crud-field/crud-field.component.mjs +13 -12
- package/esm2022/components/crud-form/crud-form.component.mjs +9 -9
- package/esm2022/components/empty-state/empty-state.component.mjs +8 -12
- package/esm2022/components/fieldset/fieldset.component.mjs +27 -19
- package/esm2022/components/filter/filter.component.mjs +14 -13
- package/esm2022/components/for-angular-components.module.mjs +17 -9
- package/esm2022/components/layout/layout.component.mjs +6 -7
- package/esm2022/components/list/constants.mjs +1 -1
- package/esm2022/components/list/list.component.mjs +6 -11
- package/esm2022/components/list-item/list-item.component.mjs +7 -12
- package/esm2022/components/model-renderer/model-renderer.component.mjs +5 -7
- package/esm2022/components/pagination/pagination.component.mjs +8 -9
- package/esm2022/components/searchbar/searchbar.component.mjs +5 -7
- package/esm2022/directives/collapsable.directive.mjs +3 -3
- package/esm2022/engine/NgxBaseComponent.mjs +11 -10
- package/esm2022/engine/NgxFormService.mjs +12 -3
- package/esm2022/engine/NgxRenderingEngine.mjs +3 -2
- package/esm2022/for-angular-common.module.mjs +82 -0
- package/esm2022/helpers/utils.mjs +2 -2
- package/esm2022/i18n/Loader.mjs +10 -6
- package/esm2022/i18n/data/en.json +80 -0
- package/esm2022/public-apis.mjs +3 -2
- package/fesm2022/decaf-ts-for-angular.mjs +254 -170
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
- package/for-angular-common.module.d.ts +44 -0
- package/package.json +6 -3
- package/public-apis.d.ts +2 -1
- package/esm2022/for-angular.module.mjs +0 -118
- package/for-angular.module.d.ts +0 -45
|
@@ -3,6 +3,7 @@ import { AngularEngineKeys } from './constants';
|
|
|
3
3
|
import { InternalError } from '@decaf-ts/db-decorators';
|
|
4
4
|
import { reflectComponentType, } from '@angular/core';
|
|
5
5
|
import { NgxFormService } from './NgxFormService';
|
|
6
|
+
import { isDevelopmentMode } from '../helpers';
|
|
6
7
|
/**
|
|
7
8
|
* @description Angular implementation of the RenderingEngine with enhanced features
|
|
8
9
|
* @summary This class extends the base RenderingEngine to provide Angular-specific rendering capabilities
|
|
@@ -113,7 +114,7 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
113
114
|
delete inputs[input];
|
|
114
115
|
return !isMapped;
|
|
115
116
|
});
|
|
116
|
-
if (unmappedKeys.length > 0)
|
|
117
|
+
if (unmappedKeys.length > 0 && isDevelopmentMode())
|
|
117
118
|
console.warn(`Unmapped input properties for component ${fieldDef.tag}: ${unmappedKeys.join(', ')}`);
|
|
118
119
|
const operation = NgxRenderingEngine._operation;
|
|
119
120
|
const hiddenOn = inputs?.hidden || [];
|
|
@@ -361,4 +362,4 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
361
362
|
});
|
|
362
363
|
}
|
|
363
364
|
}
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBS0wsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGVBQTZEO0lBNEJuRzs7Ozs7Ozs7Ozs7T0FXRzthQUNZLGVBQVUsR0FBdUIsU0FBUyxDQUFDO0lBZ0IxRDs7Ozs7Ozs7T0FRRztJQUNIO1FBQ0UsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtDRztJQUNLLG1CQUFtQixDQUN6QixRQUFpRCxFQUNqRCxHQUFxQixFQUNyQixRQUFrQixFQUNsQixHQUF5QixFQUN6QixpQkFBeUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFFOUQsTUFBTSxHQUFHLEdBQUksUUFBcUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakcsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFdBQXVDLENBQUM7UUFFOUQsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0Is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LEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUs7b0JBQ3RDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6RixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksR0FBRyxLQUFLLE9BQU87b0JBQ2pCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLGlDQUFpQztnQkFDakMseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGREZWZpbml0aW9uLCBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBbmd1bGFyRmllbGREZWZpbml0aW9uLCBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQW5ndWxhckR5bmFtaWNPdXRwdXQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWx9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50TWlycm9yLFxuICBDb21wb25lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEluamVjdG9yLFxuICByZWZsZWN0Q29tcG9uZW50VHlwZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4Rm9ybVNlcnZpY2UgfSBmcm9tICcuL05neEZvcm1TZXJ2aWNlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQW5ndWxhciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUmVuZGVyaW5nRW5naW5lIHdpdGggZW5oYW5jZWQgZmVhdHVyZXNcbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgZXh0ZW5kcyB0aGUgYmFzZSBSZW5kZXJpbmdFbmdpbmUgdG8gcHJvdmlkZSBBbmd1bGFyLXNwZWNpZmljIHJlbmRlcmluZyBjYXBhYmlsaXRpZXNcbiAqIHdpdGggYWRkaXRpb25hbCBmZWF0dXJlcyBjb21wYXJlZCB0byBOZ3hSZW5kZXJpbmdFbmdpbmUuIEl0IGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gb2YgZmllbGQgZGVmaW5pdGlvbnNcbiAqIHRvIEFuZ3VsYXIgY29tcG9uZW50cywgbWFuYWdlcyBjb21wb25lbnQgcmVnaXN0cmF0aW9uLCBhbmQgcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAqIGFuZCBpbnB1dCBoYW5kbGluZy4gVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIEFuZ3VsYXIncyBuZXdlciBjb21wb25lbnQgQVBJcy5cbiAqXG4gKiBAdGVtcGxhdGUgQW5ndWxhckZpZWxkRGVmaW5pdGlvbiAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgZmllbGQgZGVmaW5pdGlvbnNcbiAqIEB0ZW1wbGF0ZSBBbmd1bGFyRHluYW1pY091dHB1dCAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgY29tcG9uZW50IG91dHB1dFxuICpcbiAqIEBjbGFzcyBOZ3hSZW5kZXJpbmdFbmdpbmVcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBlbmdpbmUgPSBOZ3hSZW5kZXJpbmdFbmdpbmUuZ2V0KCk7XG4gKiBlbmdpbmUuaW5pdGlhbGl6ZSgpO1xuICogY29uc3Qgb3V0cHV0ID0gZW5naW5lLnJlbmRlcihteU1vZGVsLCB7fSwgdmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3IsIHRlbXBsYXRlUmVmKTtcbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEVuZ2luZSBhcyBOZ3hSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50cyBhcyBSZWdpc3RlcmVkQ29tcG9uZW50c1xuICpcbiAqICAgQ2xpZW50LT4+RW5naW5lOiBnZXQoKVxuICogICBDbGllbnQtPj5FbmdpbmU6IGluaXRpYWxpemUoKVxuICogICBDbGllbnQtPj5FbmdpbmU6IHJlbmRlcihtb2RlbCwgcHJvcHMsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAqICAgRW5naW5lLT4+RW5naW5lOiB0b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgcHJvcHMpXG4gKiAgIEVuZ2luZS0+PkVuZ2luZTogZnJvbUZpZWxkRGVmaW5pdGlvbihmaWVsZERlZiwgdmNyLCBpbmplY3RvciwgdHBsKVxuICogICBFbmdpbmUtPj5Db21wb25lbnRzOiBjb21wb25lbnRzKGZpZWxkRGVmLnRhZylcbiAqICAgQ29tcG9uZW50cy0tPj5FbmdpbmU6IGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICogICBFbmdpbmUtPj5FbmdpbmU6IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIGlucHV0cywgbWV0YWRhdGEsIHZjciwgaW5qZWN0b3IsIHRlbXBsYXRlKVxuICogICBFbmdpbmUtLT4+Q2xpZW50OiByZXR1cm4gQW5ndWxhckR5bmFtaWNPdXRwdXRcbiAqL1xuZXhwb3J0IGNsYXNzIE5neFJlbmRlcmluZ0VuZ2luZSBleHRlbmRzIFJlbmRlcmluZ0VuZ2luZTxBbmd1bGFyRmllbGREZWZpbml0aW9uLCBBbmd1bGFyRHluYW1pY091dHB1dD4ge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0cnkgb2YgY29tcG9uZW50cyBhdmFpbGFibGUgZm9yIHJlbmRlcmluZ1xuICAgKiBAc3VtbWFyeSBTdGF0aWMgcmVnaXN0cnkgdGhhdCBzdG9yZXMgYWxsIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbmRleGVkIGJ5IHRoZWlyIHNlbGVjdG9yIG5hbWUuXG4gICAqIEVhY2ggY29tcG9uZW50IGVudHJ5IGNvbnRhaW5zIGEgY29uc3RydWN0b3IgcmVmZXJlbmNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5zdGFudGlhdGVcbiAgICogdGhlIGNvbXBvbmVudCBkdXJpbmcgdGhlIHJlbmRlcmluZyBwcm9jZXNzLiBUaGlzIHJlZ2lzdHJ5IGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlc1xuICAgKiBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZSBhbmQgaXMgcG9wdWxhdGVkIHRocm91Z2ggdGhlIHJlZ2lzdGVyQ29tcG9uZW50IG1ldGhvZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfY29tcG9uZW50czogUmVjb3JkPHN0cmluZywgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50bHkgYWN0aXZlIG1vZGVsIGJlaW5nIHJlbmRlcmVkXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyBhIHJlZmVyZW5jZSB0byB0aGUgbW9kZWwgaW5zdGFuY2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkXG4gICAqIGJ5IHRoZSByZW5kZXJpbmcgZW5naW5lLiBUaGlzIHByb3BlcnR5IGlzIHNldCBkdXJpbmcgdGhlIHJlbmRlciBtZXRob2QgZXhlY3V0aW9uXG4gICAqIGFuZCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIHJlbmRlcmluZyBsaWZlY3ljbGUgdG8gYWNjZXNzIG1vZGVsIGRhdGEgYW5kIG1ldGFkYXRhLlxuICAgKiBUaGUgZGVmaW5pdGUgYXNzaWdubWVudCBhc3NlcnRpb24gKCEpIGlzIHVzZWQgYmVjYXVzZSB0aGlzIHByb3BlcnR5IGlzIGFsd2F5c1xuICAgKiBpbml0aWFsaXplZCBiZWZvcmUgdXNlIHdpdGhpbiB0aGUgcmVuZGVyIG1ldGhvZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge01vZGVsfVxuICAgKi9cbiAgcHJpdmF0ZSBfbW9kZWwhOiBNb2RlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgb3BlcmF0aW9uIGNvbnRleHQgZm9yIGNvbXBvbmVudCB2aXNpYmlsaXR5IGNvbnRyb2xcbiAgICogQHN1bW1hcnkgU3RhdGljIHByb3BlcnR5IHRoYXQgc3RvcmVzIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQsXG4gICAqIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGNvbXBvbmVudCB2aXNpYmlsaXR5IHRocm91Z2ggdGhlICdoaWRkZW4nIHByb3BlcnR5LlxuICAgKiBDb21wb25lbnRzIGNhbiBzcGVjaWZ5IG9wZXJhdGlvbnMgd2hlcmUgdGhleSBzaG91bGQgYmUgaGlkZGVuLCBhbmQgdGhpcyBwcm9wZXJ0eVxuICAgKiBwcm92aWRlcyB0aGUgY29udGV4dCBmb3IgdGhvc2UgdmlzaWJpbGl0eSBjaGVja3MuIFRoZSB2YWx1ZSBpcyB0eXBpY2FsbHkgZXh0cmFjdGVkXG4gICAqIGZyb20gdGhlIGdsb2JhbCBwcm9wZXJ0aWVzIGR1cmluZyB0aGUgcmVuZGVyaW5nIHByb2Nlc3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9vcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgU3RhdGljIHByb3BlcnR5IHRoYXQgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBtb3N0IHJlY2VudGx5IGNyZWF0ZWRcbiAgICogY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgY29tcG9uZW50IGxpZmVjeWNsZSBtYW5hZ2VtZW50XG4gICAqIGFuZCBjYW4gYmUgY2xlYXJlZCB0aHJvdWdoIHRoZSBkZXN0cm95IG1ldGhvZC4gVGhlIHJlZmVyZW5jZSBhbGxvd3MgYWNjZXNzIHRvXG4gICAqIHRoZSBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlIGZvciBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZVxuICAgKiBjdXJyZW50bHkgcmVuZGVyZWQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqIEB0eXBlIHtUeXBlPHVua25vd24+IHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBUeXBlPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0cyBhIG5ldyBOZ3hSZW5kZXJpbmdFbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFuZ3VsYXIgcmVuZGVyaW5nIGVuZ2luZSBieSBjYWxsaW5nIHRoZSBwYXJlbnRcbiAgICogY29uc3RydWN0b3Igd2l0aCB0aGUgJ2FuZ3VsYXInIGVuZ2luZSB0eXBlIGlkZW50aWZpZXIuIFRoaXMgY29uc3RydWN0b3Igc2V0cyB1cCB0aGUgYmFzZVxuICAgKiByZW5kZXJpbmcgZW5naW5lIGZ1bmN0aW9uYWxpdHkgd2l0aCBBbmd1bGFyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBwcmVwYXJlcyB0aGVcbiAgICogaW5zdGFuY2UgZm9yIGNvbXBvbmVudCByZWdpc3RyYXRpb24gYW5kIHJlbmRlcmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdhbmd1bGFyJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgZmllbGQgZGVmaW5pdGlvbiB0byBhbiBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXRcbiAgICogQHN1bW1hcnkgVGhpcyBwcml2YXRlIG1ldGhvZCB0YWtlcyBhIGZpZWxkIGRlZmluaXRpb24gYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgQW5ndWxhciBjb21wb25lbnQuXG4gICAqIEl0IGhhbmRsZXMgY29tcG9uZW50IGluc3RhbnRpYXRpb24sIGlucHV0IHByb3BlcnR5IG1hcHBpbmcsIGFuZCBjaGlsZCBjb21wb25lbnQgcmVuZGVyaW5nLlxuICAgKiBUaGUgbWV0aG9kIHZhbGlkYXRlcyBpbnB1dCBwcm9wZXJ0aWVzIGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIGFuZCBwcm9jZXNzZXNcbiAgICogY2hpbGQgY29tcG9uZW50cyByZWN1cnNpdmVseS5cbiAgICpcbiAgICogQHBhcmFtIHtGaWVsZERlZmluaXRpb248QW5ndWxhckZpZWxkRGVmaW5pdGlvbj59IGZpZWxkRGVmIC0gVGhlIGZpZWxkIGRlZmluaXRpb24gdG8gY29udmVydFxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge1RlbXBsYXRlUmVmPGFueT59IHRwbCAtIFRoZSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cnlGb3JtSWQgLSBGb3JtIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQgcmVuZGVyZXJcbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgTWV0aG9kIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBDb21wb25lbnRzIGFzIE5neFJlbmRlcmluZ0VuZ2luZS5jb21wb25lbnRzXG4gICAqICAgcGFydGljaXBhbnQgQW5ndWxhciBhcyBBbmd1bGFyIENvcmVcbiAgICogICBwYXJ0aWNpcGFudCBQcm9jZXNzIGFzIHByb2Nlc3NDaGlsZFxuICAgKlxuICAgKiAgIE1ldGhvZC0+PkNvbXBvbmVudHM6IGNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICAgKiAgIENvbXBvbmVudHMtLT4+TWV0aG9kOiBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICogICBNZXRob2QtPj5Bbmd1bGFyOiByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpXG4gICAqICAgQW5ndWxhci0tPj5NZXRob2Q6IGNvbXBvbmVudE1ldGFkYXRhXG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBWYWxpZGF0ZSBpbnB1dCBwcm9wZXJ0aWVzXG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBDcmVhdGUgcmVzdWx0IG9iamVjdFxuICAgKiAgIGFsdCBIYXMgY2hpbGRyZW5cbiAgICogICAgIE1ldGhvZC0+PlByb2Nlc3M6IFByb2Nlc3MgY2hpbGRyZW4gcmVjdXJzaXZlbHlcbiAgICogICAgIFByb2Nlc3MtPj5NZXRob2Q6IFJldHVybiBwcm9jZXNzZWQgY2hpbGRyZW5cbiAgICogICAgIE1ldGhvZC0+PkFuZ3VsYXI6IENyZWF0ZSBlbWJlZGRlZCB2aWV3XG4gICAqICAgICBNZXRob2QtPj5NZXRob2Q6IENyZWF0ZSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogICBlbmRcbiAgICogICBNZXRob2QtLT4+Q2FsbGVyOiByZXR1cm4gQW5ndWxhckR5bmFtaWNPdXRwdXRcbiAgICovXG4gIHByaXZhdGUgZnJvbUZpZWxkRGVmaW5pdGlvbihcbiAgICBmaWVsZERlZjogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgICByZWdpc3RyeUZvcm1JZDogc3RyaW5nID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKSxcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGNvbnN0IGNtcCA9IChmaWVsZERlZiBhcyBLZXlWYWx1ZSk/LlsnY29tcG9uZW50J10gfHwgTmd4UmVuZGVyaW5nRW5naW5lLmNvbXBvbmVudHMoZmllbGREZWYudGFnKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjbXAuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgY29uc3QgY29tcG9uZW50TWV0YWRhdGEgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpO1xuICAgIGlmICghY29tcG9uZW50TWV0YWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNZXRhZGF0YSBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfSBub3QgZm91bmQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBpbnB1dHM6IHBvc3NpYmxlSW5wdXRzIH0gPSBjb21wb25lbnRNZXRhZGF0YTtcbiAgICBjb25zdCBpbnB1dHMgPSB7IC4uLmZpZWxkRGVmLnByb3BzIH07XG5cbiAgICBjb25zdCB1bm1hcHBlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpLmZpbHRlcihpbnB1dCA9PiB7XG4gICAgICBjb25zdCBpc01hcHBlZCA9IHBvc3NpYmxlSW5wdXRzLmZpbmQoKHsgcHJvcE5hbWUgfSkgPT4gcHJvcE5hbWUgPT09IGlucHV0KTtcbiAgICAgIGlmICghaXNNYXBwZWQpIGRlbGV0ZSBpbnB1dHNbaW5wdXRdO1xuICAgICAgcmV0dXJuICFpc01hcHBlZDtcbiAgICB9KTtcblxuICAgIGlmICh1bm1hcHBlZEtleXMubGVuZ3RoID4gMClcbiAgICAgIGNvbnNvbGUud2FybihgVW5tYXBwZWQgaW5wdXQgcHJvcGVydGllcyBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfTogJHt1bm1hcHBlZEtleXMuam9pbignLCAnKX1gKTtcblxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IE5neFJlbmRlcmluZ0VuZ2luZS5fb3BlcmF0aW9uO1xuXG4gICAgY29uc3QgaGlkZGVuT24gPSBpbnB1dHM/LmhpZGRlbiB8fCBbXTtcbiAgICBpZigoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgcmV0dXJuIHtpbnB1dHMsIGluamVjdG9yfTtcbiAgICAvLyBjb25zdCBoaWRkZW5PbiA9IGlucHV0cz8uaGlkZGVuIHx8IFtdO1xuICAgIGNvbnN0IHJlc3VsdDogQW5ndWxhckR5bmFtaWNPdXRwdXQgPSB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBpbnB1dHMsXG4gICAgICBpbmplY3RvcixcbiAgICB9O1xuXG4gICAgaWYgKGZpZWxkRGVmLnJlbmRlcmVySWQpXG4gICAgICAocmVzdWx0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3JlbmRlcmVySWQnXSA9IGZpZWxkRGVmLnJlbmRlcmVySWQ7XG5cbiAgICAvLyBwcm9jZXNzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkRGVmLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IGZpZWxkRGVmLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYoY2hpbGQ/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk9uID0gYz8ucHJvcHM/LmhpZGRlbiB8fCBbXTtcbiAgICAgICAgICAgIGlmKCEoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgICAgICAgICByZXR1cm4gY1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGEgY2hpbGQgZm9ybSBhbmQgYWRkIGl0cyBjb250cm9scyBhcyBwcm9wZXJ0aWVzIG9mIGNoaWxkLnByb3BzXG4gICAgICAgIE5neEZvcm1TZXJ2aWNlLmFkZENvbnRyb2xGcm9tUHJvcHMocmVnaXN0cnlGb3JtSWQsIGNoaWxkLnByb3BzLCBpbnB1dHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmllbGREZWZpbml0aW9uKGNoaWxkLCB2Y3IsIGluamVjdG9yLCB0cGwsIHJlZ2lzdHJ5Rm9ybUlkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRpbmcgRE9NXG4gICAgdmNyLmNsZWFyKCk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB2Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRwbCwgaW5qZWN0b3IpLnJvb3ROb2RlcztcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5jcmVhdGVDb21wb25lbnQoXG4gICAgICBjb21wb25lbnQsXG4gICAgICB7IC4uLmlucHV0cywgbW9kZWw6IHRoaXMuX21vZGVsIH0sXG4gICAgICBjb21wb25lbnRNZXRhZGF0YSxcbiAgICAgIHZjcixcbiAgICAgIGluamVjdG9yLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcblxuICAgIHJlc3VsdC5pbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZSBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIHV0aWxpdHkgbWV0aG9kIGNyZWF0ZXMgYW4gQW5ndWxhciBjb21wb25lbnQgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkXG4gICAqIGlucHV0cyBhbmQgdGVtcGxhdGUuIEl0IHVzZXMgQW5ndWxhcidzIGNvbXBvbmVudCBjcmVhdGlvbiBBUEkgdG8gaW5zdGFudGlhdGUgdGhlIGNvbXBvbmVudFxuICAgKiBhbmQgdGhlbiBzZXRzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIHVzaW5nIHRoZSBwcm92aWRlZCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHR5cGUgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7S2V5VmFsdWV9IFtpbnB1dHM9e31dIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge05vZGVbXX0gW3RlbXBsYXRlPVtdXSAtIFRoZSB0ZW1wbGF0ZSBub2RlcyB0byBwcm9qZWN0IGludG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtDb21wb25lbnRSZWY8dW5rbm93bj59IFRoZSBjcmVhdGVkIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPHVua25vd24+LCBpbnB1dHM6IEtleVZhbHVlID0ge30sIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4sIHZjcjogVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3I6IEluamVjdG9yLCB0ZW1wbGF0ZTogTm9kZVtdID0gW10pOiBDb21wb25lbnRSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gdmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQgYXMgVHlwZTx1bmtub3duPiwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogaW5qZWN0b3IgYXMgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIHByb2plY3RhYmxlTm9kZXM6IFt0ZW1wbGF0ZV0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXRJbnB1dHMoY29tcG9uZW50SW5zdGFuY2UsIGlucHV0cywgbWV0YWRhdGEpO1xuICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgZGVjb3JhdG9yIG1ldGFkYXRhIGZyb20gYSBtb2RlbFxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gYSBtb2RlbCdzXG4gICAqIGRlY29yYXRvcnMuIEl0J3MgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kIHRoYXRcbiAgICogY29udmVydHMgYSBtb2RlbCB0byBhIGZpZWxkIGRlZmluaXRpb24gYmFzZWQgb24gaXRzIGRlY29yYXRvcnMgYW5kIHRoZSBwcm92aWRlZFxuICAgKiBnbG9iYWwgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gZXh0cmFjdCBkZWNvcmF0b3JzIGZyb21cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBpbmNsdWRlIGluIHRoZSBmaWVsZCBkZWZpbml0aW9uXG4gICAqIEByZXR1cm4ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gVGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gdGhlIG1vZGVsXG4gICAqL1xuICBnZXREZWNvcmF0b3JzKG1vZGVsOiBNb2RlbCwgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXN0cm95cyB0aGUgY3VycmVudCBlbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNsZWFycyB0aGUgY3VycmVudCBpbnN0YW5jZSByZWZlcmVuY2UsIGVmZmVjdGl2ZWx5XG4gICAqIGRlc3Ryb3lpbmcgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gVGhpcyBjYW4gYmUgdXNlZFxuICAgKiB0byByZXNldCB0aGUgZW5naW5lIHN0YXRlIG9yIHRvIHByZXBhcmUgZm9yIGEgbmV3IGluc3RhbmNlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIGludG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgbW9kZWwgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogSXQgZmlyc3Qgc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCwgdGhlbiBjb252ZXJ0cyBpdCB0byBhIGZpZWxkIGRlZmluaXRpb25cbiAgICogdXNpbmcgdGhlIGJhc2UgUmVuZGVyaW5nRW5naW5lJ3MgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kLCBhbmQgZmluYWxseSBjb252ZXJ0c1xuICAgKiB0aGF0IGZpZWxkIGRlZmluaXRpb24gdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHVzaW5nIGZyb21GaWVsZERlZmluaXRpb24uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byByZW5kZXJcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUaGUgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBjb250ZW50IHByb2plY3Rpb25cbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50IGFzIENsaWVudCBDb2RlXG4gICAqICAgcGFydGljaXBhbnQgUmVuZGVyIGFzIHJlbmRlciBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBUb0ZpZWxkIGFzIHRvRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgRnJvbUZpZWxkIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICpcbiAgICogICBDbGllbnQtPj5SZW5kZXI6IHJlbmRlcihtb2RlbCwgZ2xvYmFsUHJvcHMsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBSZW5kZXItPj5SZW5kZXI6IFN0b3JlIG1vZGVsIHJlZmVyZW5jZVxuICAgKiAgIFJlbmRlci0+PlRvRmllbGQ6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogICBUb0ZpZWxkLS0+PlJlbmRlcjogZmllbGREZWZcbiAgICogICBSZW5kZXItPj5Gcm9tRmllbGQ6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBGcm9tRmllbGQtLT4+UmVuZGVyOiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKiAgIFJlbmRlci0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgb3ZlcnJpZGUgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgY29uc3QgZm9ybUlkID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpZWxkRGVmID0gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICAgICAgY29uc3QgcHJvcHMgPSBmaWVsZERlZi5wcm9wcyBhcyBLZXlWYWx1ZTtcbiAgICAgIGlmKCFOZ3hSZW5kZXJpbmdFbmdpbmUuX29wZXJhdGlvbilcbiAgICAgICAgTmd4UmVuZGVyaW5nRW5naW5lLl9vcGVyYXRpb24gPSBwcm9wcz8uWydvcGVyYXRpb24nXSB8fCB1bmRlZmluZWQ7XG4gICAgICByZXN1bHQgPSB0aGlzLmZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbCwgZm9ybUlkKTtcblxuICAgICAgKHJlc3VsdCEuaW5zdGFuY2UhIGFzIEtleVZhbHVlKVsnZm9ybUdyb3VwJ10gPSBOZ3hGb3JtU2VydmljZS5nZXRDb250cm9sRnJvbUZvcm0oZm9ybUlkKTtcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnJlbW92ZVJlZ2lzdHJ5KGZvcm1JZCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmVuZGVyIE1vZGVsICR7bW9kZWwuY29uc3RydWN0b3IubmFtZX06ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gSXQgY2hlY2tzIGlmIHRoZSBlbmdpbmUgaXMgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgKiBhbmQgc2V0cyB0aGUgaW5pdGlhbGl6ZWQgZmxhZyB0byB0cnVlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlbmdpbmUgaXMgdXNlZFxuICAgKiB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBzZXQgdXAgZm9yIHJlbmRlcmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKVxuICAgICAgcmV0dXJuO1xuICAgIC8vIFZhbGlkYXRhYmxlQnlUeXBlW11cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgY29tcG9uZW50IHdpdGggdGhlIHJlbmRlcmluZyBlbmdpbmVcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIHJlZ2lzdGVycyBhIGNvbXBvbmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIHVuZGVyIGEgc3BlY2lmaWMgbmFtZS4gSXQgaW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudHMgcmVnaXN0cnkgaWYgbmVlZGVkIGFuZCB0aHJvd3NcbiAgICogYW4gZXJyb3IgaWYgYSBjb21wb25lbnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyIHRoZSBzYW1lIG5hbWUgdG8gcHJldmVudFxuICAgKiBhY2NpZGVudGFsIG92ZXJyaWRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IHVuZGVyXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8dW5rbm93bj59IGNvbnN0cnVjdG9yIC0gVGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQ29tcG9uZW50KG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRzKSB0aGlzLl9jb21wb25lbnRzID0ge307XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY29tcG9uZW50cylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb21wb25lbnQgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gKTtcbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0ge1xuICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyByZWdpc3RlcmVkIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgcmV0cmlldmVzIGVpdGhlciBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIG9yIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIGJ5IGl0cyBzZWxlY3Rvci4gV2hlbiBjYWxsZWQgd2l0aG91dCBhIHNlbGVjdG9yLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCByZWdpc3RlcmVkXG4gICAqIGNvbXBvbmVudHMuIFdoZW4gY2FsbGVkIHdpdGggYSBzZWxlY3RvciwgaXQgcmV0dXJucyB0aGUgc3BlY2lmaWMgY29tcG9uZW50IGlmIGZvdW5kLFxuICAgKiBvciB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciB0byByZXRyaWV2ZSBhIHNwZWNpZmljIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R8QXJyYXl9IEVpdGhlciBhIHNwZWNpZmljIGNvbXBvbmVudCBvciBhbiBhcnJheSBvZiBhbGwgY29tcG9uZW50c1xuICAgKi9cbiAgc3RhdGljIGNvbXBvbmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBvYmplY3QgfCBzdHJpbmdbXSB7XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29tcG9uZW50cyk7XG4gICAgaWYgKCEoc2VsZWN0b3IgaW4gdGhpcy5fY29tcG9uZW50cykpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQ29tcG9uZW50IHJlZ2lzdGVyZWQgdW5kZXIgJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50c1tzZWxlY3Rvcl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgZ2VuZXJhdGVzIGEga2V5IGZvciByZWZsZWN0aW9uIG1ldGFkYXRhIGJ5IHByZWZpeGluZyB0aGUgaW5wdXQga2V5XG4gICAqIHdpdGggdGhlIEFuZ3VsYXIgZW5naW5lJ3MgcmVmbGVjdGlvbiBwcmVmaXguIFRoaXMgaXMgdXNlZCBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZ1xuICAgKiBtZXRhZGF0YSBpbiBhIG5hbWVzcGFjZWQgd2F5IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGJhc2Uga2V5IHRvIHByZWZpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmVmaXhlZCBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBrZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtBbmd1bGFyRW5naW5lS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgaW5wdXQgcHJvcGVydGllcyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyB1dGlsaXR5IG1ldGhvZCBzZXRzIGlucHV0IHByb3BlcnRpZXMgb24gYSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0cyBvYmplY3QgYW5kIGNvbXBvbmVudCBtZXRhZGF0YS4gSXQgaGFuZGxlcyBib3RoIHNpbXBsZVxuICAgKiB2YWx1ZXMgYW5kIG5lc3RlZCBvYmplY3RzLCByZWN1cnNpdmVseSBwcm9jZXNzaW5nIG9iamVjdCBwcm9wZXJ0aWVzLiBUaGUgbWV0aG9kXG4gICAqIHZhbGlkYXRlcyBlYWNoIGlucHV0IGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIHRvIGVuc3VyZSBvbmx5IHZhbGlkIGlucHV0c1xuICAgKiBhcmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudFJlZjx1bmtub3duPn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gc2V0IGlucHV0cyBvblxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBpbnB1dHMgLSBUaGUgaW5wdXQgcHJvcGVydGllcyB0byBzZXRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBTZXRJbnB1dHMgYXMgc2V0SW5wdXRzXG4gICAqICAgcGFydGljaXBhbnQgUGFyc2UgYXMgcGFyc2VJbnB1dFZhbHVlXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50IGFzIENvbXBvbmVudFJlZlxuICAgKlxuICAgKiAgIENhbGxlci0+PlNldElucHV0czogc2V0SW5wdXRzKGNvbXBvbmVudCwgaW5wdXRzLCBtZXRhZGF0YSlcbiAgICogICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IEl0ZXJhdGUgdGhyb3VnaCBpbnB1dHNcbiAgICogICBsb29wIEZvciBlYWNoIGlucHV0XG4gICAqICAgICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IENoZWNrIGlmIGlucHV0IGV4aXN0cyBpbiBtZXRhZGF0YVxuICAgKiAgICAgYWx0IElucHV0IGlzICdwcm9wcydcbiAgICogICAgICAgU2V0SW5wdXRzLT4+UGFyc2U6IHBhcnNlSW5wdXRWYWx1ZShjb21wb25lbnQsIHZhbHVlKVxuICAgKiAgICAgICBQYXJzZS0+PlBhcnNlOiBSZWN1cnNpdmVseSBwcm9jZXNzIG5lc3RlZCBvYmplY3RzXG4gICAqICAgICAgIFBhcnNlLT4+Q29tcG9uZW50OiBzZXRJbnB1dChrZXksIHZhbHVlKVxuICAgKiAgICAgZWxzZSBJbnB1dCBpcyB2YWxpZFxuICAgKiAgICAgICBTZXRJbnB1dHMtPj5Db21wb25lbnQ6IHNldElucHV0KGtleSwgdmFsdWUpXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBzZXRJbnB1dHMoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0czogS2V5VmFsdWUsIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0OiBLZXlWYWx1ZSkge1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhIXZhbHVlKVxuICAgICAgICAgIHJldHVybiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbXBvbmVudC5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKGlucHV0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0gbWV0YWRhdGEuaW5wdXRzLmZpbmQoKGl0ZW06IHsgcHJvcE5hbWU6IHN0cmluZyB9KSA9PiBpdGVtLnByb3BOYW1lID09PSBrZXkpO1xuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Byb3BzJylcbiAgICAgICAgICBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIC8vIGlmKGtleSA9PT0gJ2xvY2FsZScgJiYgIXZhbHVlKVxuICAgICAgICAvLyAgIHZhbHVlID0gZ2V0TG9jYWxlRnJvbUNsYXNzTmFtZSh0aGlzLl9jb21wb25lbnROYW1lKTtcbiAgICAgICAgY29tcG9uZW50LnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBS0wsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxlQUE2RDtJQTRCbkc7Ozs7Ozs7Ozs7O09BV0c7YUFDWSxlQUFVLEdBQXVCLFNBQVMsQ0FBQztJQWdCMUQ7Ozs7Ozs7O09BUUc7SUFDSDtRQUNFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQ0c7SUFDSyxtQkFBbUIsQ0FDekIsUUFBaUQsRUFDakQsR0FBcUIsRUFDckIsUUFBa0IsRUFDbEIsR0FBeUIsRUFDekIsaUJBQXlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO1FBRTlELE1BQU0sR0FBRyxHQUFJLFFBQXFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FB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Qy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUs7b0JBQ3RDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6RixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksR0FBRyxLQUFLLE9BQU87b0JBQ2pCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLGlDQUFpQztnQkFDakMseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGREZWZpbml0aW9uLCBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBbmd1bGFyRmllbGREZWZpbml0aW9uLCBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQW5ndWxhckR5bmFtaWNPdXRwdXQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWx9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50TWlycm9yLFxuICBDb21wb25lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEluamVjdG9yLFxuICByZWZsZWN0Q29tcG9uZW50VHlwZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4Rm9ybVNlcnZpY2UgfSBmcm9tICcuL05neEZvcm1TZXJ2aWNlJztcbmltcG9ydCB7IGlzRGV2ZWxvcG1lbnRNb2RlIH0gZnJvbSAnLi4vaGVscGVycyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJlbmRlcmluZ0VuZ2luZSB3aXRoIGVuaGFuY2VkIGZlYXR1cmVzXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIGV4dGVuZHMgdGhlIGJhc2UgUmVuZGVyaW5nRW5naW5lIHRvIHByb3ZpZGUgQW5ndWxhci1zcGVjaWZpYyByZW5kZXJpbmcgY2FwYWJpbGl0aWVzXG4gKiB3aXRoIGFkZGl0aW9uYWwgZmVhdHVyZXMgY29tcGFyZWQgdG8gTmd4UmVuZGVyaW5nRW5naW5lLiBJdCBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIG9mIGZpZWxkIGRlZmluaXRpb25zXG4gKiB0byBBbmd1bGFyIGNvbXBvbmVudHMsIG1hbmFnZXMgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiwgYW5kIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgY29tcG9uZW50IGNyZWF0aW9uXG4gKiBhbmQgaW5wdXQgaGFuZGxpbmcuIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBBbmd1bGFyJ3MgbmV3ZXIgY29tcG9uZW50IEFQSXMuXG4gKlxuICogQHRlbXBsYXRlIEFuZ3VsYXJGaWVsZERlZmluaXRpb24gLSBUeXBlIGZvciBBbmd1bGFyLXNwZWNpZmljIGZpZWxkIGRlZmluaXRpb25zXG4gKiBAdGVtcGxhdGUgQW5ndWxhckR5bmFtaWNPdXRwdXQgLSBUeXBlIGZvciBBbmd1bGFyLXNwZWNpZmljIGNvbXBvbmVudCBvdXRwdXRcbiAqXG4gKiBAY2xhc3MgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZW5naW5lID0gTmd4UmVuZGVyaW5nRW5naW5lLmdldCgpO1xuICogZW5naW5lLmluaXRpYWxpemUoKTtcbiAqIGNvbnN0IG91dHB1dCA9IGVuZ2luZS5yZW5kZXIobXlNb2RlbCwge30sIHZpZXdDb250YWluZXJSZWYsIGluamVjdG9yLCB0ZW1wbGF0ZVJlZik7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBFbmdpbmUgYXMgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudHMgYXMgUmVnaXN0ZXJlZENvbXBvbmVudHNcbiAqXG4gKiAgIENsaWVudC0+PkVuZ2luZTogZ2V0KClcbiAqICAgQ2xpZW50LT4+RW5naW5lOiBpbml0aWFsaXplKClcbiAqICAgQ2xpZW50LT4+RW5naW5lOiByZW5kZXIobW9kZWwsIHByb3BzLCB2Y3IsIGluamVjdG9yLCB0cGwpXG4gKiAgIEVuZ2luZS0+PkVuZ2luZTogdG9GaWVsZERlZmluaXRpb24obW9kZWwsIHByb3BzKVxuICogICBFbmdpbmUtPj5FbmdpbmU6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAqICAgRW5naW5lLT4+Q29tcG9uZW50czogY29tcG9uZW50cyhmaWVsZERlZi50YWcpXG4gKiAgIENvbXBvbmVudHMtLT4+RW5naW5lOiBjb21wb25lbnQgY29uc3RydWN0b3JcbiAqICAgRW5naW5lLT4+RW5naW5lOiBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCBpbnB1dHMsIG1ldGFkYXRhLCB2Y3IsIGluamVjdG9yLCB0ZW1wbGF0ZSlcbiAqICAgRW5naW5lLS0+PkNsaWVudDogcmV0dXJuIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBOZ3hSZW5kZXJpbmdFbmdpbmUgZXh0ZW5kcyBSZW5kZXJpbmdFbmdpbmU8QW5ndWxhckZpZWxkRGVmaW5pdGlvbiwgQW5ndWxhckR5bmFtaWNPdXRwdXQ+IHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJ5IG9mIGNvbXBvbmVudHMgYXZhaWxhYmxlIGZvciByZW5kZXJpbmdcbiAgICogQHN1bW1hcnkgU3RhdGljIHJlZ2lzdHJ5IHRoYXQgc3RvcmVzIGFsbCByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5kZXhlZCBieSB0aGVpciBzZWxlY3RvciBuYW1lLlxuICAgKiBFYWNoIGNvbXBvbmVudCBlbnRyeSBjb250YWlucyBhIGNvbnN0cnVjdG9yIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGluc3RhbnRpYXRlXG4gICAqIHRoZSBjb21wb25lbnQgZHVyaW5nIHRoZSByZW5kZXJpbmcgcHJvY2Vzcy4gVGhpcyByZWdpc3RyeSBpcyBzaGFyZWQgYWNyb3NzIGFsbCBpbnN0YW5jZXNcbiAgICogb2YgdGhlIHJlbmRlcmluZyBlbmdpbmUgYW5kIGlzIHBvcHVsYXRlZCB0aHJvdWdoIHRoZSByZWdpc3RlckNvbXBvbmVudCBtZXRob2QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHsgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+IH0+fVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbXBvbmVudHM6IFJlY29yZDxzdHJpbmcsIHsgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+IH0+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudGx5IGFjdGl2ZSBtb2RlbCBiZWluZyByZW5kZXJlZFxuICAgKiBAc3VtbWFyeSBTdG9yZXMgYSByZWZlcmVuY2UgdG8gdGhlIG1vZGVsIGluc3RhbmNlIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZFxuICAgKiBieSB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gVGhpcyBwcm9wZXJ0eSBpcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgbWV0aG9kIGV4ZWN1dGlvblxuICAgKiBhbmQgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSByZW5kZXJpbmcgbGlmZWN5Y2xlIHRvIGFjY2VzcyBtb2RlbCBkYXRhIGFuZCBtZXRhZGF0YS5cbiAgICogVGhlIGRlZmluaXRlIGFzc2lnbm1lbnQgYXNzZXJ0aW9uICghKSBpcyB1c2VkIGJlY2F1c2UgdGhpcyBwcm9wZXJ0eSBpcyBhbHdheXNcbiAgICogaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSB3aXRoaW4gdGhlIHJlbmRlciBtZXRob2QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtNb2RlbH1cbiAgICovXG4gIHByaXZhdGUgX21vZGVsITogTW9kZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IG9wZXJhdGlvbiBjb250ZXh0IGZvciBjb21wb25lbnQgdmlzaWJpbGl0eSBjb250cm9sXG4gICAqIEBzdW1tYXJ5IFN0YXRpYyBwcm9wZXJ0eSB0aGF0IHN0b3JlcyB0aGUgY3VycmVudCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkLFxuICAgKiB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSBjb21wb25lbnQgdmlzaWJpbGl0eSB0aHJvdWdoIHRoZSAnaGlkZGVuJyBwcm9wZXJ0eS5cbiAgICogQ29tcG9uZW50cyBjYW4gc3BlY2lmeSBvcGVyYXRpb25zIHdoZXJlIHRoZXkgc2hvdWxkIGJlIGhpZGRlbiwgYW5kIHRoaXMgcHJvcGVydHlcbiAgICogcHJvdmlkZXMgdGhlIGNvbnRleHQgZm9yIHRob3NlIHZpc2liaWxpdHkgY2hlY2tzLiBUaGUgdmFsdWUgaXMgdHlwaWNhbGx5IGV4dHJhY3RlZFxuICAgKiBmcm9tIHRoZSBnbG9iYWwgcHJvcGVydGllcyBkdXJpbmcgdGhlIHJlbmRlcmluZyBwcm9jZXNzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfb3BlcmF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFN0YXRpYyBwcm9wZXJ0eSB0aGF0IG1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkXG4gICAqIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBpcyB1c2VkIGludGVybmFsbHkgZm9yIGNvbXBvbmVudCBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICAgKiBhbmQgY2FuIGJlIGNsZWFyZWQgdGhyb3VnaCB0aGUgZGVzdHJveSBtZXRob2QuIFRoZSByZWZlcmVuY2UgYWxsb3dzIGFjY2VzcyB0b1xuICAgKiB0aGUgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZSBmb3Igb3BlcmF0aW9ucyB0aGF0IG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGVcbiAgICogY3VycmVudGx5IHJlbmRlcmVkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAdHlwZSB7VHlwZTx1bmtub3duPiB8IHVuZGVmaW5lZH1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVHlwZTx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdHMgYSBuZXcgTmd4UmVuZGVyaW5nRW5naW5lIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBbmd1bGFyIHJlbmRlcmluZyBlbmdpbmUgYnkgY2FsbGluZyB0aGUgcGFyZW50XG4gICAqIGNvbnN0cnVjdG9yIHdpdGggdGhlICdhbmd1bGFyJyBlbmdpbmUgdHlwZSBpZGVudGlmaWVyLiBUaGlzIGNvbnN0cnVjdG9yIHNldHMgdXAgdGhlIGJhc2VcbiAgICogcmVuZGVyaW5nIGVuZ2luZSBmdW5jdGlvbmFsaXR5IHdpdGggQW5ndWxhci1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgcHJlcGFyZXMgdGhlXG4gICAqIGluc3RhbmNlIGZvciBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFuZCByZW5kZXJpbmcgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignYW5ndWxhcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIGZpZWxkIGRlZmluaXRpb24gdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgcHJpdmF0ZSBtZXRob2QgdGFrZXMgYSBmaWVsZCBkZWZpbml0aW9uIGFuZCBjcmVhdGVzIHRoZSBjb3JyZXNwb25kaW5nIEFuZ3VsYXIgY29tcG9uZW50LlxuICAgKiBJdCBoYW5kbGVzIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uLCBpbnB1dCBwcm9wZXJ0eSBtYXBwaW5nLCBhbmQgY2hpbGQgY29tcG9uZW50IHJlbmRlcmluZy5cbiAgICogVGhlIG1ldGhvZCB2YWxpZGF0ZXMgaW5wdXQgcHJvcGVydGllcyBhZ2FpbnN0IHRoZSBjb21wb25lbnQncyBtZXRhZGF0YSBhbmQgcHJvY2Vzc2VzXG4gICAqIGNoaWxkIGNvbXBvbmVudHMgcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+fSBmaWVsZERlZiAtIFRoZSBmaWVsZCBkZWZpbml0aW9uIHRvIGNvbnZlcnRcbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUaGUgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBjb250ZW50IHByb2plY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJ5Rm9ybUlkIC0gRm9ybSBpZGVudGlmaWVyIGZvciB0aGUgY29tcG9uZW50IHJlbmRlcmVyXG4gICAqIEByZXR1cm4ge0FuZ3VsYXJEeW5hbWljT3V0cHV0fSBUaGUgQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHdpdGggY29tcG9uZW50IHJlZmVyZW5jZSBhbmQgaW5wdXRzXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IE1ldGhvZCBhcyBmcm9tRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50cyBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUuY29tcG9uZW50c1xuICAgKiAgIHBhcnRpY2lwYW50IEFuZ3VsYXIgYXMgQW5ndWxhciBDb3JlXG4gICAqICAgcGFydGljaXBhbnQgUHJvY2VzcyBhcyBwcm9jZXNzQ2hpbGRcbiAgICpcbiAgICogICBNZXRob2QtPj5Db21wb25lbnRzOiBjb21wb25lbnRzKGZpZWxkRGVmLnRhZylcbiAgICogICBDb21wb25lbnRzLS0+Pk1ldGhvZDogY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gICAqICAgTWV0aG9kLT4+QW5ndWxhcjogcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KVxuICAgKiAgIEFuZ3VsYXItLT4+TWV0aG9kOiBjb21wb25lbnRNZXRhZGF0YVxuICAgKiAgIE1ldGhvZC0+Pk1ldGhvZDogVmFsaWRhdGUgaW5wdXQgcHJvcGVydGllc1xuICAgKiAgIE1ldGhvZC0+Pk1ldGhvZDogQ3JlYXRlIHJlc3VsdCBvYmplY3RcbiAgICogICBhbHQgSGFzIGNoaWxkcmVuXG4gICAqICAgICBNZXRob2QtPj5Qcm9jZXNzOiBQcm9jZXNzIGNoaWxkcmVuIHJlY3Vyc2l2ZWx5XG4gICAqICAgICBQcm9jZXNzLT4+TWV0aG9kOiBSZXR1cm4gcHJvY2Vzc2VkIGNoaWxkcmVuXG4gICAqICAgICBNZXRob2QtPj5Bbmd1bGFyOiBDcmVhdGUgZW1iZWRkZWQgdmlld1xuICAgKiAgICAgTWV0aG9kLT4+TWV0aG9kOiBDcmVhdGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAqICAgZW5kXG4gICAqICAgTWV0aG9kLS0+PkNhbGxlcjogcmV0dXJuIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gICAqL1xuICBwcml2YXRlIGZyb21GaWVsZERlZmluaXRpb24oXG4gICAgZmllbGREZWY6IEZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPixcbiAgICB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHRwbDogVGVtcGxhdGVSZWY8dW5rbm93bj4sXG4gICAgcmVnaXN0cnlGb3JtSWQ6IHN0cmluZyA9IERhdGUubm93KCkudG9TdHJpbmcoMzYpLnRvVXBwZXJDYXNlKCksXG4gICk6IEFuZ3VsYXJEeW5hbWljT3V0cHV0IHtcbiAgICBjb25zdCBjbXAgPSAoZmllbGREZWYgYXMgS2V5VmFsdWUpPy5bJ2NvbXBvbmVudCddIHx8IE5neFJlbmRlcmluZ0VuZ2luZS5jb21wb25lbnRzKGZpZWxkRGVmLnRhZyk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY21wLmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgVHlwZTx1bmtub3duPjtcblxuICAgIGNvbnN0IGNvbXBvbmVudE1ldGFkYXRhID0gcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KTtcbiAgICBpZiAoIWNvbXBvbmVudE1ldGFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTWV0YWRhdGEgZm9yIGNvbXBvbmVudCAke2ZpZWxkRGVmLnRhZ30gbm90IGZvdW5kLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgaW5wdXRzOiBwb3NzaWJsZUlucHV0cyB9ID0gY29tcG9uZW50TWV0YWRhdGE7XG4gICAgY29uc3QgaW5wdXRzID0geyAuLi5maWVsZERlZi5wcm9wcyB9O1xuXG4gICAgY29uc3QgdW5tYXBwZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRzKS5maWx0ZXIoaW5wdXQgPT4ge1xuICAgICAgY29uc3QgaXNNYXBwZWQgPSBwb3NzaWJsZUlucHV0cy5maW5kKCh7IHByb3BOYW1lIH0pID0+IHByb3BOYW1lID09PSBpbnB1dCk7XG4gICAgICBpZiAoIWlzTWFwcGVkKSBkZWxldGUgaW5wdXRzW2lucHV0XTtcbiAgICAgIHJldHVybiAhaXNNYXBwZWQ7XG4gICAgfSk7XG5cbiAgICBpZiAodW5tYXBwZWRLZXlzLmxlbmd0aCA+IDAgJiYgaXNEZXZlbG9wbWVudE1vZGUoKSlcbiAgICAgIGNvbnNvbGUud2FybihgVW5tYXBwZWQgaW5wdXQgcHJvcGVydGllcyBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfTogJHt1bm1hcHBlZEtleXMuam9pbignLCAnKX1gKTtcblxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IE5neFJlbmRlcmluZ0VuZ2luZS5fb3BlcmF0aW9uO1xuXG4gICAgY29uc3QgaGlkZGVuT24gPSBpbnB1dHM/LmhpZGRlbiB8fCBbXTtcbiAgICBpZigoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgcmV0dXJuIHtpbnB1dHMsIGluamVjdG9yfTtcbiAgICAvLyBjb25zdCBoaWRkZW5PbiA9IGlucHV0cz8uaGlkZGVuIHx8IFtdO1xuICAgIGNvbnN0IHJlc3VsdDogQW5ndWxhckR5bmFtaWNPdXRwdXQgPSB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBpbnB1dHMsXG4gICAgICBpbmplY3RvcixcbiAgICB9O1xuXG4gICAgaWYgKGZpZWxkRGVmLnJlbmRlcmVySWQpXG4gICAgICAocmVzdWx0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3JlbmRlcmVySWQnXSA9IGZpZWxkRGVmLnJlbmRlcmVySWQ7XG5cbiAgICAvLyBwcm9jZXNzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkRGVmLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IGZpZWxkRGVmLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYoY2hpbGQ/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk9uID0gYz8ucHJvcHM/LmhpZGRlbiB8fCBbXTtcbiAgICAgICAgICAgIGlmKCEoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgICAgICAgICByZXR1cm4gY1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGEgY2hpbGQgZm9ybSBhbmQgYWRkIGl0cyBjb250cm9scyBhcyBwcm9wZXJ0aWVzIG9mIGNoaWxkLnByb3BzXG4gICAgICAgIE5neEZvcm1TZXJ2aWNlLmFkZENvbnRyb2xGcm9tUHJvcHMocmVnaXN0cnlGb3JtSWQsIGNoaWxkLnByb3BzLCBpbnB1dHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmllbGREZWZpbml0aW9uKGNoaWxkLCB2Y3IsIGluamVjdG9yLCB0cGwsIHJlZ2lzdHJ5Rm9ybUlkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRpbmcgRE9NXG4gICAgdmNyLmNsZWFyKCk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB2Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRwbCwgaW5qZWN0b3IpLnJvb3ROb2RlcztcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5jcmVhdGVDb21wb25lbnQoXG4gICAgICBjb21wb25lbnQsXG4gICAgICB7IC4uLmlucHV0cywgbW9kZWw6IHRoaXMuX21vZGVsIH0sXG4gICAgICBjb21wb25lbnRNZXRhZGF0YSxcbiAgICAgIHZjcixcbiAgICAgIGluamVjdG9yLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcblxuICAgIHJlc3VsdC5pbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZSBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIHV0aWxpdHkgbWV0aG9kIGNyZWF0ZXMgYW4gQW5ndWxhciBjb21wb25lbnQgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkXG4gICAqIGlucHV0cyBhbmQgdGVtcGxhdGUuIEl0IHVzZXMgQW5ndWxhcidzIGNvbXBvbmVudCBjcmVhdGlvbiBBUEkgdG8gaW5zdGFudGlhdGUgdGhlIGNvbXBvbmVudFxuICAgKiBhbmQgdGhlbiBzZXRzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIHVzaW5nIHRoZSBwcm92aWRlZCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHR5cGUgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7S2V5VmFsdWV9IFtpbnB1dHM9e31dIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge05vZGVbXX0gW3RlbXBsYXRlPVtdXSAtIFRoZSB0ZW1wbGF0ZSBub2RlcyB0byBwcm9qZWN0IGludG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtDb21wb25lbnRSZWY8dW5rbm93bj59IFRoZSBjcmVhdGVkIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPHVua25vd24+LCBpbnB1dHM6IEtleVZhbHVlID0ge30sIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4sIHZjcjogVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3I6IEluamVjdG9yLCB0ZW1wbGF0ZTogTm9kZVtdID0gW10pOiBDb21wb25lbnRSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gdmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQgYXMgVHlwZTx1bmtub3duPiwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogaW5qZWN0b3IgYXMgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIHByb2plY3RhYmxlTm9kZXM6IFt0ZW1wbGF0ZV0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXRJbnB1dHMoY29tcG9uZW50SW5zdGFuY2UsIGlucHV0cywgbWV0YWRhdGEpO1xuICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgZGVjb3JhdG9yIG1ldGFkYXRhIGZyb20gYSBtb2RlbFxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gYSBtb2RlbCdzXG4gICAqIGRlY29yYXRvcnMuIEl0J3MgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kIHRoYXRcbiAgICogY29udmVydHMgYSBtb2RlbCB0byBhIGZpZWxkIGRlZmluaXRpb24gYmFzZWQgb24gaXRzIGRlY29yYXRvcnMgYW5kIHRoZSBwcm92aWRlZFxuICAgKiBnbG9iYWwgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gZXh0cmFjdCBkZWNvcmF0b3JzIGZyb21cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBpbmNsdWRlIGluIHRoZSBmaWVsZCBkZWZpbml0aW9uXG4gICAqIEByZXR1cm4ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gVGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gdGhlIG1vZGVsXG4gICAqL1xuICBnZXREZWNvcmF0b3JzKG1vZGVsOiBNb2RlbCwgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXN0cm95cyB0aGUgY3VycmVudCBlbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNsZWFycyB0aGUgY3VycmVudCBpbnN0YW5jZSByZWZlcmVuY2UsIGVmZmVjdGl2ZWx5XG4gICAqIGRlc3Ryb3lpbmcgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gVGhpcyBjYW4gYmUgdXNlZFxuICAgKiB0byByZXNldCB0aGUgZW5naW5lIHN0YXRlIG9yIHRvIHByZXBhcmUgZm9yIGEgbmV3IGluc3RhbmNlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIGludG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgbW9kZWwgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogSXQgZmlyc3Qgc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCwgdGhlbiBjb252ZXJ0cyBpdCB0byBhIGZpZWxkIGRlZmluaXRpb25cbiAgICogdXNpbmcgdGhlIGJhc2UgUmVuZGVyaW5nRW5naW5lJ3MgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kLCBhbmQgZmluYWxseSBjb252ZXJ0c1xuICAgKiB0aGF0IGZpZWxkIGRlZmluaXRpb24gdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHVzaW5nIGZyb21GaWVsZERlZmluaXRpb24uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byByZW5kZXJcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUaGUgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBjb250ZW50IHByb2plY3Rpb25cbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50IGFzIENsaWVudCBDb2RlXG4gICAqICAgcGFydGljaXBhbnQgUmVuZGVyIGFzIHJlbmRlciBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBUb0ZpZWxkIGFzIHRvRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgRnJvbUZpZWxkIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICpcbiAgICogICBDbGllbnQtPj5SZW5kZXI6IHJlbmRlcihtb2RlbCwgZ2xvYmFsUHJvcHMsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBSZW5kZXItPj5SZW5kZXI6IFN0b3JlIG1vZGVsIHJlZmVyZW5jZVxuICAgKiAgIFJlbmRlci0+PlRvRmllbGQ6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogICBUb0ZpZWxkLS0+PlJlbmRlcjogZmllbGREZWZcbiAgICogICBSZW5kZXItPj5Gcm9tRmllbGQ6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBGcm9tRmllbGQtLT4+UmVuZGVyOiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKiAgIFJlbmRlci0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgb3ZlcnJpZGUgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgY29uc3QgZm9ybUlkID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpZWxkRGVmID0gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICAgICAgY29uc3QgcHJvcHMgPSBmaWVsZERlZi5wcm9wcyBhcyBLZXlWYWx1ZTtcbiAgICAgIGlmKCFOZ3hSZW5kZXJpbmdFbmdpbmUuX29wZXJhdGlvbilcbiAgICAgICAgTmd4UmVuZGVyaW5nRW5naW5lLl9vcGVyYXRpb24gPSBwcm9wcz8uWydvcGVyYXRpb24nXSB8fCB1bmRlZmluZWQ7XG4gICAgICByZXN1bHQgPSB0aGlzLmZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbCwgZm9ybUlkKTtcblxuICAgICAgKHJlc3VsdCEuaW5zdGFuY2UhIGFzIEtleVZhbHVlKVsnZm9ybUdyb3VwJ10gPSBOZ3hGb3JtU2VydmljZS5nZXRDb250cm9sRnJvbUZvcm0oZm9ybUlkKTtcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnJlbW92ZVJlZ2lzdHJ5KGZvcm1JZCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmVuZGVyIE1vZGVsICR7bW9kZWwuY29uc3RydWN0b3IubmFtZX06ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gSXQgY2hlY2tzIGlmIHRoZSBlbmdpbmUgaXMgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgKiBhbmQgc2V0cyB0aGUgaW5pdGlhbGl6ZWQgZmxhZyB0byB0cnVlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlbmdpbmUgaXMgdXNlZFxuICAgKiB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBzZXQgdXAgZm9yIHJlbmRlcmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKVxuICAgICAgcmV0dXJuO1xuICAgIC8vIFZhbGlkYXRhYmxlQnlUeXBlW11cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgY29tcG9uZW50IHdpdGggdGhlIHJlbmRlcmluZyBlbmdpbmVcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIHJlZ2lzdGVycyBhIGNvbXBvbmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIHVuZGVyIGEgc3BlY2lmaWMgbmFtZS4gSXQgaW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudHMgcmVnaXN0cnkgaWYgbmVlZGVkIGFuZCB0aHJvd3NcbiAgICogYW4gZXJyb3IgaWYgYSBjb21wb25lbnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyIHRoZSBzYW1lIG5hbWUgdG8gcHJldmVudFxuICAgKiBhY2NpZGVudGFsIG92ZXJyaWRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IHVuZGVyXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8dW5rbm93bj59IGNvbnN0cnVjdG9yIC0gVGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQ29tcG9uZW50KG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRzKSB0aGlzLl9jb21wb25lbnRzID0ge307XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY29tcG9uZW50cylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb21wb25lbnQgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gKTtcbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0ge1xuICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyByZWdpc3RlcmVkIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgcmV0cmlldmVzIGVpdGhlciBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIG9yIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIGJ5IGl0cyBzZWxlY3Rvci4gV2hlbiBjYWxsZWQgd2l0aG91dCBhIHNlbGVjdG9yLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCByZWdpc3RlcmVkXG4gICAqIGNvbXBvbmVudHMuIFdoZW4gY2FsbGVkIHdpdGggYSBzZWxlY3RvciwgaXQgcmV0dXJucyB0aGUgc3BlY2lmaWMgY29tcG9uZW50IGlmIGZvdW5kLFxuICAgKiBvciB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciB0byByZXRyaWV2ZSBhIHNwZWNpZmljIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R8QXJyYXl9IEVpdGhlciBhIHNwZWNpZmljIGNvbXBvbmVudCBvciBhbiBhcnJheSBvZiBhbGwgY29tcG9uZW50c1xuICAgKi9cbiAgc3RhdGljIGNvbXBvbmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBvYmplY3QgfCBzdHJpbmdbXSB7XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29tcG9uZW50cyk7XG4gICAgaWYgKCEoc2VsZWN0b3IgaW4gdGhpcy5fY29tcG9uZW50cykpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQ29tcG9uZW50IHJlZ2lzdGVyZWQgdW5kZXIgJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50c1tzZWxlY3Rvcl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgZ2VuZXJhdGVzIGEga2V5IGZvciByZWZsZWN0aW9uIG1ldGFkYXRhIGJ5IHByZWZpeGluZyB0aGUgaW5wdXQga2V5XG4gICAqIHdpdGggdGhlIEFuZ3VsYXIgZW5naW5lJ3MgcmVmbGVjdGlvbiBwcmVmaXguIFRoaXMgaXMgdXNlZCBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZ1xuICAgKiBtZXRhZGF0YSBpbiBhIG5hbWVzcGFjZWQgd2F5IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGJhc2Uga2V5IHRvIHByZWZpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmVmaXhlZCBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBrZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtBbmd1bGFyRW5naW5lS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgaW5wdXQgcHJvcGVydGllcyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyB1dGlsaXR5IG1ldGhvZCBzZXRzIGlucHV0IHByb3BlcnRpZXMgb24gYSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0cyBvYmplY3QgYW5kIGNvbXBvbmVudCBtZXRhZGF0YS4gSXQgaGFuZGxlcyBib3RoIHNpbXBsZVxuICAgKiB2YWx1ZXMgYW5kIG5lc3RlZCBvYmplY3RzLCByZWN1cnNpdmVseSBwcm9jZXNzaW5nIG9iamVjdCBwcm9wZXJ0aWVzLiBUaGUgbWV0aG9kXG4gICAqIHZhbGlkYXRlcyBlYWNoIGlucHV0IGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIHRvIGVuc3VyZSBvbmx5IHZhbGlkIGlucHV0c1xuICAgKiBhcmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudFJlZjx1bmtub3duPn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gc2V0IGlucHV0cyBvblxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBpbnB1dHMgLSBUaGUgaW5wdXQgcHJvcGVydGllcyB0byBzZXRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBTZXRJbnB1dHMgYXMgc2V0SW5wdXRzXG4gICAqICAgcGFydGljaXBhbnQgUGFyc2UgYXMgcGFyc2VJbnB1dFZhbHVlXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50IGFzIENvbXBvbmVudFJlZlxuICAgKlxuICAgKiAgIENhbGxlci0+PlNldElucHV0czogc2V0SW5wdXRzKGNvbXBvbmVudCwgaW5wdXRzLCBtZXRhZGF0YSlcbiAgICogICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IEl0ZXJhdGUgdGhyb3VnaCBpbnB1dHNcbiAgICogICBsb29wIEZvciBlYWNoIGlucHV0XG4gICAqICAgICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IENoZWNrIGlmIGlucHV0IGV4aXN0cyBpbiBtZXRhZGF0YVxuICAgKiAgICAgYWx0IElucHV0IGlzICdwcm9wcydcbiAgICogICAgICAgU2V0SW5wdXRzLT4+UGFyc2U6IHBhcnNlSW5wdXRWYWx1ZShjb21wb25lbnQsIHZhbHVlKVxuICAgKiAgICAgICBQYXJzZS0+PlBhcnNlOiBSZWN1cnNpdmVseSBwcm9jZXNzIG5lc3RlZCBvYmplY3RzXG4gICAqICAgICAgIFBhcnNlLT4+Q29tcG9uZW50OiBzZXRJbnB1dChrZXksIHZhbHVlKVxuICAgKiAgICAgZWxzZSBJbnB1dCBpcyB2YWxpZFxuICAgKiAgICAgICBTZXRJbnB1dHMtPj5Db21wb25lbnQ6IHNldElucHV0KGtleSwgdmFsdWUpXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBzZXRJbnB1dHMoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0czogS2V5VmFsdWUsIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0OiBLZXlWYWx1ZSkge1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhIXZhbHVlKVxuICAgICAgICAgIHJldHVybiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbXBvbmVudC5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKGlucHV0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0gbWV0YWRhdGEuaW5wdXRzLmZpbmQoKGl0ZW06IHsgcHJvcE5hbWU6IHN0cmluZyB9KSA9PiBpdGVtLnByb3BOYW1lID09PSBrZXkpO1xuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Byb3BzJylcbiAgICAgICAgICBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIC8vIGlmKGtleSA9PT0gJ2xvY2FsZScgJiYgIXZhbHVlKVxuICAgICAgICAvLyAgIHZhbHVlID0gZ2V0TG9jYWxlRnJvbUNsYXNzTmFtZSh0aGlzLl9jb21wb25lbnROYW1lKTtcbiAgICAgICAgY29tcG9uZW50LnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { TranslateModule, TranslatePipe } from '@ngx-translate/core';
|
|
5
|
+
import { Logging } from '@decaf-ts/logging';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const ComponentsAndModules = [
|
|
8
|
+
CommonModule,
|
|
9
|
+
FormsModule,
|
|
10
|
+
ReactiveFormsModule,
|
|
11
|
+
TranslateModule,
|
|
12
|
+
TranslatePipe
|
|
13
|
+
];
|
|
14
|
+
const log = Logging.for("for-angular");
|
|
15
|
+
export function getLogger(instance) {
|
|
16
|
+
return log.for(instance);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @description Main Angular module for the Decaf framework
|
|
20
|
+
* @summary The ForAngularCommonModule provides the core functionality for integrating Decaf with Angular applications.
|
|
21
|
+
* It imports and exports common Angular and Ionic components and modules needed for Decaf applications,
|
|
22
|
+
* including form handling, translation support, and Ionic UI components. This module can be imported
|
|
23
|
+
* directly or via the forRoot() method for proper initialization in the application's root module.
|
|
24
|
+
*
|
|
25
|
+
* @class ForAngularCommonModule
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // In your app module:
|
|
29
|
+
* @NgModule({
|
|
30
|
+
* imports: [
|
|
31
|
+
* ForAngularCommonModule.forRoot(),
|
|
32
|
+
* // other imports
|
|
33
|
+
* ],
|
|
34
|
+
* // ...
|
|
35
|
+
* })
|
|
36
|
+
* export class AppModule {}
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export class ForAngularCommonModule {
|
|
40
|
+
/**
|
|
41
|
+
* @description Creates a module with providers for root module import
|
|
42
|
+
* @summary This static method provides the proper way to import the ForAngularCommonModule in the application's
|
|
43
|
+
* root module. It returns a ModuleWithProviders object that includes the ForAngularCommonModule itself.
|
|
44
|
+
* Using forRoot() ensures that the module and its providers are properly initialized and only
|
|
45
|
+
* instantiated once in the application.
|
|
46
|
+
*
|
|
47
|
+
* @return {ModuleWithProviders<ForAngularCommonModule>} The module with its providers
|
|
48
|
+
*/
|
|
49
|
+
static forRoot() {
|
|
50
|
+
return {
|
|
51
|
+
ngModule: ForAngularCommonModule,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ForAngularCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
55
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ForAngularCommonModule, imports: [CommonModule,
|
|
56
|
+
FormsModule,
|
|
57
|
+
ReactiveFormsModule,
|
|
58
|
+
TranslateModule,
|
|
59
|
+
TranslatePipe], exports: [CommonModule,
|
|
60
|
+
FormsModule,
|
|
61
|
+
ReactiveFormsModule,
|
|
62
|
+
TranslateModule,
|
|
63
|
+
TranslatePipe] }); }
|
|
64
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ForAngularCommonModule, imports: [CommonModule,
|
|
65
|
+
FormsModule,
|
|
66
|
+
ReactiveFormsModule,
|
|
67
|
+
TranslateModule,
|
|
68
|
+
CommonModule,
|
|
69
|
+
FormsModule,
|
|
70
|
+
ReactiveFormsModule,
|
|
71
|
+
TranslateModule] }); }
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ForAngularCommonModule, decorators: [{
|
|
74
|
+
type: NgModule,
|
|
75
|
+
args: [{
|
|
76
|
+
imports: ComponentsAndModules,
|
|
77
|
+
declarations: [],
|
|
78
|
+
exports: ComponentsAndModules,
|
|
79
|
+
schemas: [],
|
|
80
|
+
}]
|
|
81
|
+
}] });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yLWFuZ3VsYXItY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZm9yLWFuZ3VsYXItY29tbW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFVLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUdwRCxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLFlBQVk7SUFDWixXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixhQUFhO0NBQ2QsQ0FBQztBQUVGLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdkMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxRQUF5QztJQUNqRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBaUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFPSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLHNCQUFzQjtTQUNqQyxDQUFDO0lBQ0osQ0FBQzsrR0FkVSxzQkFBc0I7Z0hBQXRCLHNCQUFzQixZQXZDakMsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLGFBQWEsYUFKYixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2YsYUFBYTtnSEFtQ0Ysc0JBQXNCLFlBdkNqQyxZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixlQUFlO1lBSGYsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsZUFBZTs7NEZBb0NKLHNCQUFzQjtrQkFObEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsb0JBQW9CO29CQUM3QixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLG9CQUFvQjtvQkFDN0IsT0FBTyxFQUFFLEVBQUU7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tICdAZGVjYWYtdHMvbG9nZ2luZyc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICcuL2VuZ2luZSc7XG5cbmNvbnN0IENvbXBvbmVudHNBbmRNb2R1bGVzID0gW1xuICBDb21tb25Nb2R1bGUsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBUcmFuc2xhdGVNb2R1bGUsXG4gIFRyYW5zbGF0ZVBpcGVcbl07XG5cbmNvbnN0IGxvZyA9IExvZ2dpbmcuZm9yKFwiZm9yLWFuZ3VsYXJcIik7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKGluc3RhbmNlOiBzdHJpbmcgfCBGdW5jdGlvbkxpa2UgfCB1bmtub3duKTogTG9nZ2VyIHtcbiAgcmV0dXJuIGxvZy5mb3IoaW5zdGFuY2UgYXMgc3RyaW5nIHwgRnVuY3Rpb25MaWtlKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWFpbiBBbmd1bGFyIG1vZHVsZSBmb3IgdGhlIERlY2FmIGZyYW1ld29ya1xuICogQHN1bW1hcnkgVGhlIEZvckFuZ3VsYXJDb21tb25Nb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBmb3IgaW50ZWdyYXRpbmcgRGVjYWYgd2l0aCBBbmd1bGFyIGFwcGxpY2F0aW9ucy5cbiAqIEl0IGltcG9ydHMgYW5kIGV4cG9ydHMgY29tbW9uIEFuZ3VsYXIgYW5kIElvbmljIGNvbXBvbmVudHMgYW5kIG1vZHVsZXMgbmVlZGVkIGZvciBEZWNhZiBhcHBsaWNhdGlvbnMsXG4gKiBpbmNsdWRpbmcgZm9ybSBoYW5kbGluZywgdHJhbnNsYXRpb24gc3VwcG9ydCwgYW5kIElvbmljIFVJIGNvbXBvbmVudHMuIFRoaXMgbW9kdWxlIGNhbiBiZSBpbXBvcnRlZFxuICogZGlyZWN0bHkgb3IgdmlhIHRoZSBmb3JSb290KCkgbWV0aG9kIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIGFwcGxpY2F0aW9uJ3Mgcm9vdCBtb2R1bGUuXG4gKlxuICogQGNsYXNzIEZvckFuZ3VsYXJDb21tb25Nb2R1bGVcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbiB5b3VyIGFwcCBtb2R1bGU6XG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgRm9yQW5ndWxhckNvbW1vbk1vZHVsZS5mb3JSb290KCksXG4gKiAgICAgLy8gb3RoZXIgaW1wb3J0c1xuICogICBdLFxuICogICAvLyAuLi5cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKiBgYGBcbiAqL1xuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogQ29tcG9uZW50c0FuZE1vZHVsZXMsXG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGV4cG9ydHM6IENvbXBvbmVudHNBbmRNb2R1bGVzLFxuICBzY2hlbWFzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9yQW5ndWxhckNvbW1vbk1vZHVsZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG1vZHVsZSB3aXRoIHByb3ZpZGVycyBmb3Igcm9vdCBtb2R1bGUgaW1wb3J0XG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIG1ldGhvZCBwcm92aWRlcyB0aGUgcHJvcGVyIHdheSB0byBpbXBvcnQgdGhlIEZvckFuZ3VsYXJDb21tb25Nb2R1bGUgaW4gdGhlIGFwcGxpY2F0aW9uJ3NcbiAgICogcm9vdCBtb2R1bGUuIEl0IHJldHVybnMgYSBNb2R1bGVXaXRoUHJvdmlkZXJzIG9iamVjdCB0aGF0IGluY2x1ZGVzIHRoZSBGb3JBbmd1bGFyQ29tbW9uTW9kdWxlIGl0c2VsZi5cbiAgICogVXNpbmcgZm9yUm9vdCgpIGVuc3VyZXMgdGhhdCB0aGUgbW9kdWxlIGFuZCBpdHMgcHJvdmlkZXJzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgb25seVxuICAgKiBpbnN0YW50aWF0ZWQgb25jZSBpbiB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge01vZHVsZVdpdGhQcm92aWRlcnM8Rm9yQW5ndWxhckNvbW1vbk1vZHVsZT59IFRoZSBtb2R1bGUgd2l0aCBpdHMgcHJvdmlkZXJzXG4gICAqL1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEZvckFuZ3VsYXJDb21tb25Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEZvckFuZ3VsYXJDb21tb25Nb2R1bGUsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isDevMode } from '@angular/core';
|
|
2
2
|
import { InjectableRegistryImp } from '@decaf-ts/injectable-decorators';
|
|
3
3
|
import { Primitives } from '@decaf-ts/decorator-validation';
|
|
4
|
-
import { getLogger } from '../for-angular.module';
|
|
4
|
+
import { getLogger } from '../for-angular-common.module';
|
|
5
5
|
let injectableRegistry;
|
|
6
6
|
/**
|
|
7
7
|
* @description Retrieves the singleton instance of the injectables registry
|
|
@@ -433,4 +433,4 @@ export async function isDarkMode() {
|
|
|
433
433
|
const { matches } = getWindow().matchMedia('(prefers-color-scheme: dark)');
|
|
434
434
|
return matches;
|
|
435
435
|
}
|
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlcnMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUscUJBQXFCLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRCxJQUFJLGtCQUF1QyxDQUFDO0FBRTVDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxJQUFJLENBQUMsa0JBQWtCO1FBQ3JCLGtCQUFrQixHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRCxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsVUFBa0IsV0FBVztJQUM3RCxJQUFJLENBQUMsT0FBTztRQUNWLE9BQU8sU0FBUyxFQUFFLENBQUM7SUFDckIsTUFBTSxHQUFHLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDeEIsT0FBTyxDQUNMLFNBQVMsRUFBRTtRQUNYLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFBRTtRQUNqRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUMvQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQVksRUFDWixNQUFlLEVBQ2YsS0FBYztJQUVkLE1BQU0sSUFBSSxHQUFHLE1BQU0s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LE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFDaEMsSUFBRyxHQUFHLEVBQUUsYUFBYTtRQUNsQixHQUFHLENBQUMsYUFBNkIsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxFQUFFLFlBQXFCLEtBQUs7SUFDeEUsS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakQsQ0FBQztBQUdEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVO0lBQzlCLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN6RSxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlUmVnaXN0cnlJbXAsIEluamVjdGFibGVzUmVnaXN0cnkgfSBmcm9tICdAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IFByaW1pdGl2ZXMgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgS2V5VmFsdWUsIFN0cmluZ09yQm9vbGVhbiwgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMnO1xuaW1wb3J0IHsgRnVuY3Rpb25MaWtlIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4uL2Zvci1hbmd1bGFyLm1vZHVsZSc7XG5cbmxldCBpbmplY3RhYmxlUmVnaXN0cnk6IEluamVjdGFibGVzUmVnaXN0cnk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBpbmplY3RhYmxlcyByZWdpc3RyeVxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzaW5nbGV0b24gcGF0dGVybiBmb3IgdGhlIEluamVjdGFibGVzUmVnaXN0cnkuXG4gKiBJdCByZXR1cm5zIHRoZSBleGlzdGluZyByZWdpc3RyeSBpbnN0YW5jZSBpZiBvbmUgZXhpc3RzLCBvciBjcmVhdGVzIGEgbmV3IGluc3RhbmNlXG4gKiBpZiBub25lIGV4aXN0cy4gVGhlIHJlZ2lzdHJ5IGlzIHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGluamVjdGFibGUgZGVwZW5kZW5jaWVzXG4gKiB0aHJvdWdob3V0IHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtJbmplY3RhYmxlc1JlZ2lzdHJ5fSBUaGUgc2luZ2xldG9uIGluamVjdGFibGVzIHJlZ2lzdHJ5IGluc3RhbmNlXG4gKlxuICogQGZ1bmN0aW9uIGdldEluamVjdGFibGVzUmVnaXN0cnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluamVjdGFibGVzUmVnaXN0cnkoKTogSW5qZWN0YWJsZXNSZWdpc3RyeSB7XG4gIGlmICghaW5qZWN0YWJsZVJlZ2lzdHJ5KVxuICAgIGluamVjdGFibGVSZWdpc3RyeSA9IG5ldyBJbmplY3RhYmxlUmVnaXN0cnlJbXAoKTtcbiAgcmV0dXJuIGluamVjdGFibGVSZWdpc3RyeTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyBpZiB0aGUgYXBwbGljYXRpb24gaXMgcnVubmluZyBpbiBkZXZlbG9wbWVudCBtb2RlXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBpcyBjdXJyZW50bHkgcnVubmluZyBpbiBhIGRldmVsb3BtZW50XG4gKiBlbnZpcm9ubWVudC4gSXQgdXNlcyBBbmd1bGFyJ3MgaXNEZXZNb2RlKCkgZnVuY3Rpb24gYW5kIGFsc28gY2hlY2tzIHRoZSB3aW5kb3cgY29udGV4dFxuICogYW5kIGhvc3RuYW1lIGFnYWluc3QgdGhlIHByb3ZpZGVkIGNvbnRleHQgcGFyYW1ldGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZW5hYmxpbmdcbiAqIGRldmVsb3BtZW50LXNwZWNpZmljIGZlYXR1cmVzIG9yIGxvZ2dpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0PSdsb2NhbGhvc3QnXSAtIFRoZSBjb250ZXh0IHN0cmluZyB0byBjaGVjayBhZ2FpbnN0IHRoZSBjdXJyZW50IGVudmlyb25tZW50XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIGRldmVsb3BtZW50IG1vZGUsIGZhbHNlIG90aGVyd2lzZVxuICpcbiAqIEBmdW5jdGlvbiBpc0RldmVsb3BtZW50TW9kZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZXZlbG9wbWVudE1vZGUoY29udGV4dDogc3RyaW5nID0gJ2xvY2FsaG9zdCcpOiBib29sZWFuIHtcbiAgaWYgKCFjb250ZXh0KVxuICAgIHJldHVybiBpc0Rldk1vZGUoKTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KCk7XG4gIHJldHVybiAoXG4gICAgaXNEZXZNb2RlKCkgfHxcbiAgICB3aW4/LlsnZW52J10/LlsnQ09OVEVYVCddLnRvTG93ZXJDYXNlKCkgIT09IGNvbnRleHQudG9Mb3dlckNhc2UoKSB8fFxuICAgIHdpbj8uWydsb2NhdGlvbiddPy5ob3N0bmFtZT8uaW5jbHVkZXMoY29udGV4dClcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGlzcGF0Y2hlcyBhIGN1c3RvbSBldmVudCB0byB0aGUgZG9jdW1lbnQgd2luZG93XG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIGRpc3BhdGNoZXMgYSBjdXN0b20gZXZlbnQgdG8gdGhlIGJyb3dzZXIgd2luZG93LlxuICogSXQncyB1c2VmdWwgZm9yIGNyb3NzLWNvbXBvbmVudCBjb21tdW5pY2F0aW9uIG9yIGZvciB0cmlnZ2VyaW5nIGFwcGxpY2F0aW9uLXdpZGUgZXZlbnRzLlxuICogVGhlIGZ1bmN0aW9uIGFsbG93cyBzcGVjaWZ5aW5nIHRoZSBldmVudCBuYW1lLCBkZXRhaWwgZGF0YSwgYW5kIGFkZGl0aW9uYWwgZXZlbnQgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjdXN0b20gZXZlbnQgdG8gZGlzcGF0Y2hcbiAqIEBwYXJhbSB7dW5rbm93bn0gZGV0YWlsIC0gVGhlIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgZXZlbnQncyBkZXRhaWwgcHJvcGVydHlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciB0aGUgY3VzdG9tIGV2ZW50XG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiB3aW5kb3dFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50RW1pdHRlcihcbiAgbmFtZTogc3RyaW5nLFxuICBkZXRhaWw6IHVua25vd24sXG4gIHByb3BzPzogb2JqZWN0XG4pOiB2b2lkIHtcbiAgY29uc3QgZGF0YSA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICBkZXRhaWw6IGRldGFpbCxcbiAgICB9LFxuICAgIHByb3BzIHx8IHt9XG4gICk7XG4gIChnZXRXaW5kb3coKSBhcyBXaW5kb3cpLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KG5hbWUsIGRhdGEpKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHByb3BlcnR5IGZyb20gdGhlIHdpbmRvdydzIGRvY3VtZW50IG9iamVjdFxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHNhZmUgd2F5IHRvIGFjY2VzcyBwcm9wZXJ0aWVzIG9uIHRoZSB3aW5kb3cncyBkb2N1bWVudCBvYmplY3QuXG4gKiBJdCB1c2VzIHRoZSBnZXRXaW5kb3dEb2N1bWVudCBmdW5jdGlvbiB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50LCB0aGVuIGFjY2Vzc2VzXG4gKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgYnJvd3NlciBlbnZpcm9ubWVudCBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkXG4gKiB0byBhY2Nlc3MgZG9jdW1lbnQgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIGZyb20gdGhlIGRvY3VtZW50IG9iamVjdFxuICogQHJldHVybiB7YW55fSBUaGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBkb2N1bWVudCBvciBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0XG4gKlxuICogQGZ1bmN0aW9uIGdldE9uV2luZG93RG9jdW1lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9uV2luZG93RG9jdW1lbnQoa2V5OiBzdHJpbmcpOiBEb2N1bWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRvYyA9IGdldFdpbmRvd0RvY3VtZW50KCk/LltrZXkgYXMga2V5b2YgRG9jdW1lbnRdO1xuICByZXR1cm4gZG9jIGluc3RhbmNlb2YgRG9jdW1lbnQgP1xuICAgIGRvYyA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHRoZSBkb2N1bWVudCBvYmplY3QgZnJvbSB0aGUgd2luZG93XG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgc2FmZSB3YXkgdG8gYWNjZXNzIHRoZSBkb2N1bWVudCBvYmplY3QgZnJvbSB0aGUgd2luZG93LlxuICogSXQgdXNlcyB0aGUgZ2V0T25XaW5kb3cgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlICdkb2N1bWVudCcgcHJvcGVydHkgZnJvbSB0aGUgd2luZG93IG9iamVjdC5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBicm93c2VyIGVudmlyb25tZW50IGludGVyYWN0aW9ucyB0aGF0IG5lZWQgYWNjZXNzIHRvIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBAcmV0dXJuIHtEb2N1bWVudCB8IHVuZGVmaW5lZH0gVGhlIHdpbmRvdydzIGRvY3VtZW50IG9iamVjdCwgb3IgdW5kZWZpbmVkIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0V2luZG93RG9jdW1lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdpbmRvd0RvY3VtZW50KCk6IERvY3VtZW50IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldE9uV2luZG93KCdkb2N1bWVudCcpIGFzIERvY3VtZW50O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSBwcm9wZXJ0eSBmcm9tIHRoZSB3aW5kb3cgb2JqZWN0XG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgc2FmZSB3YXkgdG8gYWNjZXNzIHByb3BlcnRpZXMgb24gdGhlIHdpbmRvdyBvYmplY3QuXG4gKiBJdCB1c2VzIHRoZSBnZXRXaW5kb3cgZnVuY3Rpb24gdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSB3aW5kb3csIHRoZW4gYWNjZXNzZXNcbiAqIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkuIFRoaXMgaXMgdXNlZnVsIGZvciBicm93c2VyIGVudmlyb25tZW50IGludGVyYWN0aW9ucyB0aGF0IG5lZWRcbiAqIHRvIGFjY2VzcyB3aW5kb3cgcHJvcGVydGllcyBvciBBUElzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUgZnJvbSB0aGUgd2luZG93IG9iamVjdFxuICogQHJldHVybiB7dW5rbm93biB8IHVuZGVmaW5lZH0gVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcHJvcGVydHksIG9yIHVuZGVmaW5lZCBpZiB0aGUgd2luZG93IG9yIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3RcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0T25XaW5kb3dcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9uV2luZG93KGtleTogc3RyaW5nKTogdW5rbm93biB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRXaW5kb3coKT8uW2tleV07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNldHMgYSBwcm9wZXJ0eSBvbiB0aGUgd2luZG93IG9iamVjdFxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHdheSB0byBzZXQgcHJvcGVydGllcyBvbiB0aGUgd2luZG93IG9iamVjdC5cbiAqIEl0IHVzZXMgdGhlIGdldFdpbmRvdyBmdW5jdGlvbiB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIHdpbmRvdywgdGhlbiBzZXRzXG4gKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IHRvIHRoZSBwcm92aWRlZCB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHN0b3JpbmdcbiAqIGdsb2JhbCBkYXRhIG9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWNjZXNzaWJsZSBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0IG9uIHRoZSB3aW5kb3cgb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gc2V0T25XaW5kb3dcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE9uV2luZG93KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICBnZXRXaW5kb3coKVtrZXldID0gdmFsdWU7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgZ2xvYmFsIHdpbmRvdyBvYmplY3RcbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBzYWZlIHdheSB0byBhY2Nlc3MgdGhlIGdsb2JhbCB3aW5kb3cgb2JqZWN0LlxuICogSXQgdXNlcyBnbG9iYWxUaGlzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgSmF2YVNjcmlwdCBlbnZpcm9ubWVudHMuXG4gKiBUaGlzIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHVzZWQgYnkgb3RoZXIgd2luZG93LXJlbGF0ZWQgdXRpbGl0eSBmdW5jdGlvbnMgdG9cbiAqIGFjY2VzcyB0aGUgd2luZG93IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJuIHtXaW5kb3d9IFRoZSBnbG9iYWwgd2luZG93IG9iamVjdFxuICpcbiAqIEBmdW5jdGlvbiBnZXRXaW5kb3dcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdpbmRvdygpOiBXaW5kb3cgJiBLZXlWYWx1ZSB7XG4gIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBLZXlWYWx1ZSk/Llsnd2luZG93J10gYXMgV2luZG93ICYgS2V5VmFsdWU7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgd2lkdGggb2YgdGhlIGJyb3dzZXIgd2luZG93XG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHdpZHRoIG9mIHRoZSBicm93c2VyIHdpbmRvdy5cbiAqIEl0IHVzZXMgdGhlIGdldE9uV2luZG93IGZ1bmN0aW9uIHRvIGFjY2VzcyB0aGUgJ2lubmVyV2lkdGgnIHByb3BlcnR5IG9mIHRoZSB3aW5kb3cgb2JqZWN0LlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIHJlc3BvbnNpdmUgZGVzaWduIGltcGxlbWVudGF0aW9ucyBhbmQgdmlld3BvcnQtYmFzZWQgY2FsY3VsYXRpb25zLlxuICpcbiAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gVGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIGJyb3dzZXIgd2luZG93IGluIHBpeGVsc1xuICpcbiAqIEBmdW5jdGlvbiBnZXRXaW5kb3dXaWR0aFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldE9uV2luZG93KCdpbm5lcldpZHRoJykgYXMgbnVtYmVyIHx8IDA7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIHZhbHVlIGlzICBub3QgdW5kZWZpbmVkXG4gKiBAc3VtbWFyeSBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gdmFsdWUgaXMgbm90IHVuZGVmaW5lZC5cbiAqIEl0J3MgYSBzaW1wbGUgd3JhcHBlciB0aGF0IG1ha2VzIGNvZGUgbW9yZSByZWFkYWJsZSB3aGVuIGNoZWNraW5nIGZvciBkZWZpbmVkIHZhbHVlcy5cbiAqIFRoZSBmdW5jdGlvbiBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjaGVja2luZyBTdHJpbmdPckJvb2xlYW4gcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ09yQm9vbGVhbiB8IHVuZGVmaW5lZH0gcHJvcCAtIFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IHVuZGVmaW5lZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQGZ1bmN0aW9uIGlzTm90VW5kZWZpbmVkXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdFVuZGVmaW5lZChwcm9wOiBTdHJpbmdPckJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChwcm9wICE9PSB1bmRlZmluZWQpIGFzIGJvb2xlYW47XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGxvY2FsZSBzdHJpbmcgZnJvbSBhIGNsYXNzIG5hbWUgb3IgaW5zdGFuY2VcbiAqIEBzdW1tYXJ5IFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBjb252ZXJ0cyBhIGNsYXNzIG5hbWUgb3IgaW5zdGFuY2UgaW50byBhIGxvY2FsZSBzdHJpbmdcbiAqIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIHB1cnBvc2VzLiBJdCBoYW5kbGVzIGRpZmZlcmVudCBpbnB1dCB0eXBlc1xuICogKHN0cmluZywgZnVuY3Rpb24sIG9yIG9iamVjdCkgYW5kIGFwcGxpZXMgZm9ybWF0dGluZyBydWxlcyB0byBnZW5lcmF0ZSBhIGNvbnNpc3RlbnRcbiAqIGxvY2FsZSBpZGVudGlmaWVyLiBGb3Igc2hvcnQgbmFtZXMgKGxlc3MgdGhhbiAzIHBhcnRzKSwgaXQgcmV2ZXJzZXMgdGhlIGRvdC1zZXBhcmF0ZWRcbiAqIHN0cmluZy4gRm9yIGxvbmdlciBuYW1lcywgaXQgdXNlcyB0aGUgbGFzdCBwYXJ0IGFzIGEgcHJlZml4IGFuZCBqb2lucyB0aGUgcmVzdCB3aXRoXG4gKiB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbkxpa2V8b2JqZWN0fSBpbnN0YW5jZSAtIFRoZSBpbnB1dCB0byBnZW5lcmF0ZSB0aGUgbG9jYWxlIGZyb20gKGNsYXNzIG5hbWUsIGNvbnN0cnVjdG9yLCBvciBpbnN0YW5jZSlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3VmZml4XSAtIE9wdGlvbmFsIHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIGluc3RhbmNlIG5hbWUgYmVmb3JlIHByb2Nlc3NpbmdcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBmb3JtYXR0ZWQgbG9jYWxlIHN0cmluZyBkZXJpdmVkIGZyb20gdGhlIGlucHV0XG4gKlxuICogQGZ1bmN0aW9uIGdldExvY2FsZUZyb21DbGFzc05hbWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZUZyb21DbGFzc05hbWUoXG4gIGluc3RhbmNlOiBzdHJpbmcgfCBGdW5jdGlvbkxpa2UgfCBLZXlWYWx1ZSxcbiAgc3VmZml4Pzogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGluc3RhbmNlICE9PSBQcmltaXRpdmVzLlNUUklORylcbiAgICBpbnN0YW5jZSA9IChpbnN0YW5jZSBhcyBGdW5jdGlvbkxpa2UpLm5hbWUgfHwgKGluc3RhbmNlIGFzIG9iamVjdCk/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXG4gIGxldCBuYW1lOiBzdHJpbmcgfCBzdHJpbmdbXSA9IGluc3RhbmNlIGFzIHN0cmluZztcblxuICBpZiAoc3VmZml4KVxuICAgIG5hbWUgPSBgJHtpbnN0YW5jZX0ke3N1ZmZpeC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN1ZmZpeC5zbGljZSgxKX1gO1xuXG4gIG5hbWUgPSBuYW1lLnJlcGxhY2UoL198LS9nLCAnJykucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDEpIHdvcmQgPSAnLicgKyB3b3JkO1xuICAgICAgcmV0dXJuIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KS5zcGxpdCgnLicpO1xuXG4gIGlmIChuYW1lLmxlbmd0aCA8IDMpXG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLmpvaW4oJy4nKTtcblxuICBjb25zdCBwcmVmZml4ID0gbmFtZVtuYW1lLmxlbmd0aCAtIDFdO1xuICBuYW1lLnBvcCgpO1xuICBuYW1lID0gbmFtZS5qb2luKCdfJyk7XG4gIHJldHVybiBgJHtwcmVmZml4fS4ke25hbWV9YDtcbn1cblxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgY3VycmVudCBsb2NhbGUgbGFuZ3VhZ2VcbiAqIEBzdW1tYXJ5IFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IGxvY2FsZSBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgdXNlcidzIGJyb3dzZXIgc2V0dGluZ3MuXG4gKiBJdCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgd2F5IHRvIGFjY2VzcyB0aGUgdXNlcidzIGxhbmd1YWdlIHByZWZlcmVuY2UgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uXG4gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYnJvd3NlcidzIG5hdmlnYXRvci5sYW5ndWFnZSB2YWx1ZSwgZGVmYXVsdGluZyB0byAnZW4nIGlmIG5vdCBhdmFpbGFibGUuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgY3VycmVudCBsb2NhbGUgbGFuZ3VhZ2UgKGUuZy4sICdlbicsICdmcicpXG4gKlxuICogQGZ1bmN0aW9uIGdldExvY2FsZUxhbmd1YWdlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVMYW5ndWFnZSgpOiBzdHJpbmcge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coKTtcbiAgcmV0dXJuICh3aW4gYXMgV2luZG93KS5uYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgXCJlblwiO1xuICAvLyByZXR1cm4gd2luPy5bV0lORE9XX0tFWVMuTEFOR1VBR0VfU0VMRUNURURdIHx8ICh3aW4ubmF2aWdhdG9yLmxhbmd1YWdlIHx8ICcnKS5zcGxpdCgnLScpWzBdIHx8IFwiZW5cIjtcbn1cblxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIHJhbmRvbSBzdHJpbmcgb3IgbnVtYmVyIG9mIHNwZWNpZmllZCBsZW5ndGhcbiAqIEBzdW1tYXJ5IFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBjcmVhdGVzIGEgcmFuZG9tIHN0cmluZyBvZiBhIHNwZWNpZmllZCBsZW5ndGguXG4gKiBJdCBjYW4gZ2VuZXJhdGUgZWl0aGVyIGFscGhhbnVtZXJpYyBzdHJpbmdzIChpbmNsdWRpbmcgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycylcbiAqIG9yIG51bWVyaWMtb25seSBzdHJpbmdzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgcmFuZG9tIElEcywgdGVtcG9yYXJ5IHBhc3N3b3JkcyxcbiAqIG9yIG90aGVyIHJhbmRvbSBpZGVudGlmaWVycyB0aHJvdWdob3V0IHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD04XSAtIFRoZSBsZW5ndGggb2YgdGhlIHJhbmRvbSB2YWx1ZSB0byBnZW5lcmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbb25seU51bWJlcnM9ZmFsc2VdIC0gV2hldGhlciB0byBnZW5lcmF0ZSBvbmx5IG51bWVyaWMgY2hhcmFjdGVyc1xuICogQHJldHVybiB7c3RyaW5nfSBBIHJhbmRvbWx5IGdlbmVyYXRlZCBzdHJpbmcgb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggYW5kIGNoYXJhY3RlciBzZXRcbiAqXG4gKiBAZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21WYWx1ZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21WYWx1ZShsZW5ndGg6IG51bWJlciA9IDgsIG9ubHlOdW1iZXJzOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICBjb25zdCBjaGFycyA9IG9ubHlOdW1iZXJzXG4gICAgPyAnMDEyMzQ1Njc4OSdcbiAgICA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICByZXN1bHQgKz0gY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCkpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGJvb2xlYW4gb3IgYSBib29sZWFuIHZhbHVlIHRvIGEgYm9vbGVhbiB0eXBlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7KCd0cnVlJyB8ICdmYWxzZScgfCBib29sZWFuKX0gcHJvcCAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0LiBDYW4gYmUgdGhlIHN0cmluZyAndHJ1ZScsICdmYWxzZScsIG9yIGEgYm9vbGVhbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgYm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQgdmFsdWUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5wdXQgaXMgdGhlIHN0cmluZyAndHJ1ZScgb3IgYm9vbGVhbiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0Jvb2xlYW4ocHJvcDogJ3RydWUnIHwgJ2ZhbHNlJyB8IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgaWYodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKVxuICAgIHByb3AgPSBwcm9wLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgcmV0dXJuIHByb3A7XG59XG5cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIERhdGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgRGF0ZSB8IG51bWJlcil9IGRhdGUgLSBUaGUgdmFsdWUgdG8gY2hlY2suIENhbiBiZSBhIERhdGUgb2JqZWN0LCBhIHRpbWVzdGFtcCBudW1iZXIsIG9yIGEgZGF0ZSBzdHJpbmdcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBEYXRlIG9iamVjdCAobm90IE5hTiksIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlcik6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUgYXMgdW5rbm93biBhcyBudW1iZXIpKSB8fCAoKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdFJlZ2V4ID0gbmV3IFJlZ0V4cCgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8pLnRlc3QoZGF0ZSBhcyBzdHJpbmcpXG4gICAgICBpZih0eXBlb2YgZGF0ZSAhPT0gUHJpbWl0aXZlcy5TVFJJTkcgfHwgIShkYXRlIGFzIHN0cmluZyk/LmluY2x1ZGVzKCdUJykgJiYgIXRlc3RSZWdleClcbiAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICBkYXRlID0gKGRhdGUgYXMgc3RyaW5nKS5zcGxpdCgnVCcpWzBdO1xuICAgIGlmKCFuZXcgUmVnRXhwKC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLykudGVzdChkYXRlKSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAhIShuZXcgRGF0ZShkYXRlKSk7XG4gICB9KSgpO1xuICB9IGNhdGNoKGVycm9yOiB1bmtub3duKSB7XG4gICAgZ2V0TG9nZ2VyKGlzVmFsaWREYXRlKS5lcnJvcihlcnJvciBhcyBFcnJvciB8IHN0cmluZyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIGRhdGUgaW50byBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBEYXRlIHwgbnVtYmVyKX0gZGF0ZSAtIFRoZSBkYXRlIHRvIGZvcm1hdC4gQ2FuIGJlIGEgRGF0ZSBvYmplY3QsIGEgdGltZXN0YW1wIG51bWJlciwgb3IgYSBkYXRlIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtsb2NhbGVdIC0gVGhlIGxvY2FsZSB0byB1c2UgZm9yIGZvcm1hdHRpbmcuIElmIG5vdCBwcm92aWRlZCwgdGhlIHN5c3RlbSdzIGxvY2FsZSB3aWxsIGJlIHVzZWRcbiAqIEByZXR1cm4geyhEYXRlIHwgc3RyaW5nKX0gQSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGZvcm1hdCBERC9NTS9ZWVlZIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGxvY2FsZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIG9yaWdpbmFsIGlucHV0IGFzIGEgc3RyaW5nIGlmIHRoZSBkYXRlIGlzIGludmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlciwgbG9jYWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkKTogRGF0ZSB8IHN0cmluZyB7XG5cbiAgaWYoIWxvY2FsZSlcbiAgICBsb2NhbGUgPSBnZXRMb2NhbGVMYW5ndWFnZSgpO1xuXG4gIGlmKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicpXG4gICAgZGF0ZSA9IG5ldyBEYXRlKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyA/IGRhdGUucmVwbGFjZSgvXFwvL2csICctJykgOiBkYXRlKTtcblxuICBpZighaXNWYWxpZERhdGUoZGF0ZSkpXG4gICAgcmV0dXJuIGAke2RhdGV9YCBhcyBzdHJpbmc7XG4gIGNvbnN0IHIgPSBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0J1xuICB9KTtcblxuXG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIHBhcnNlIGEgZGF0ZSBzdHJpbmcsIERhdGUgb2JqZWN0LCBvciBudW1iZXIgaW50byBhIHZhbGlkIERhdGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgRGF0ZSB8IG51bWJlcil9IGRhdGUgLSBUaGUgZGF0ZSB0byBwYXJzZS4gQ2FuIGJlIGEgRGF0ZSBvYmplY3QsIGEgdGltZXN0YW1wIG51bWJlcixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGRhdGUgc3RyaW5nIGluIHRoZSBmb3JtYXQgXCJERC9NTS9ZWVlZIEhIOk1NOlNTOk1TXCJcbiAqIEByZXR1cm4geyhEYXRlIHwgbnVsbCl9IEEgdmFsaWQgRGF0ZSBvYmplY3QgaWYgcGFyc2luZyBpcyBzdWNjZXNzZnVsLCBvciBudWxsIGlmIHRoZSBkYXRlIGlzIGludmFsaWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUb1ZhbGlkRGF0ZShkYXRlOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyKTogRGF0ZSB8IG51bGwge1xuICBpZihpc1ZhbGlkRGF0ZShkYXRlKSlcbiAgICByZXR1cm4gZGF0ZSBhcyBEYXRlO1xuXG4gIGlmKCFgJHtkYXRlfWAuaW5jbHVkZXMoJy8nKSlcbiAgICByZXR1cm4gbnVsbDtcblxuICBjb25zdCBbZGF0ZVN0cmluZywgdGltZVN0cmluZ10gPSAoZGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCcgJyk7XG4gIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IGRhdGVTdHJpbmcuc3BsaXQoJy8nKS5tYXAoTnVtYmVyKTtcbiAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHNdID0gdGltZVN0cmluZy5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xuICBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMpO1xuXG4gIGlmKCFpc1ZhbGlkRGF0ZShkYXRlKSkge1xuICAgIGNvbnNvbGUud2FybigncGFyc2VUb1ZhbGlkRGF0ZSAtIEludmFsaWQgZGF0ZSBmb3JtYXQnLCBkYXRlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkYXRlO1xufVxuXG5cbi8qKlxuICogTWFwcyBhbiBpdGVtIG9iamVjdCB1c2luZyBhIHByb3ZpZGVkIG1hcHBlciBvYmplY3QgYW5kIG9wdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge0tleVZhbHVlfSBpdGVtIC0gVGhlIHNvdXJjZSBvYmplY3QgdG8gYmUgbWFwcGVkLlxuICogQHBhcmFtIHtLZXlWYWx1ZX0gbWFwcGVyIC0gQW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgbWFwcGluZyBydWxlcy4gS2V5cyByZXByZXNlbnQgdGhlIG5ldyBwcm9wZXJ0eSBuYW1lcyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7S2V5VmFsdWV9IFtwcm9wc10gLSBPcHRpb25hbCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1hcHBlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7S2V5VmFsdWV9IEEgbmV3IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgbWFwcGVkIGFjY29yZGluZyB0byB0aGUgbWFwcGVyIG9iamVjdCBhbmQgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpdGVtTWFwcGVyKGl0ZW06IEtleVZhbHVlLCBtYXBwZXI6IEtleVZhbHVlLCBwcm9wcz86IEtleVZhbHVlKTogS2V5VmFsdWUge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMobWFwcGVyKS5yZWR1Y2UoKGFjY3VtOiBLZXlWYWx1ZSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgY29uc3QgYXJyYXlWYWx1ZSA9ICh2YWx1ZSBhcyBzdHJpbmcpLnNwbGl0KCcuJyk7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgYWNjdW1ba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYXJyYXlWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgYWNjdW1ba2V5XSA9IGl0ZW0/Llt2YWx1ZSBhcyBzdHJpbmddIHx8ICh2YWx1ZSAhPT0ga2V5ID8gdmFsdWUgOiBcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB2YWw7XG5cbiAgICAgICAgZm9yIChjb25zdCBfdmFsdWUgb2YgYXJyYXlWYWx1ZSlcbiAgICAgICAgICB2YWwgPSAhdmFsXG4gICAgICAgICAgICA/IGl0ZW1bX3ZhbHVlXVxuICAgICAgICAgICAgOiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHZhbCkgOiB2YWwpW192YWx1ZV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWREYXRlKG5ldyBEYXRlKHZhbCkpKSB2YWwgPSBgJHtmb3JtYXREYXRlKHZhbCl9YDtcblxuICAgICAgICBhY2N1bVtrZXldID0gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcyB8fCB7fSwgYWNjdW0pO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogTWFwcyBhbiBhcnJheSBvZiBkYXRhIG9iamVjdHMgdXNpbmcgYSBwcm92aWRlZCBtYXBwZXIgb2JqZWN0LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdGluZyBtYXBwZWQgaXRlbXMuXG4gKiBAcGFyYW0ge2FueVtdfSBkYXRhIC0gVGhlIGFycmF5IG9mIGRhdGEgb2JqZWN0cyB0byBiZSBtYXBwZWQuXG4gKiBAcGFyYW0ge0tleVZhbHVlfSBtYXBwZXIgLSBBbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBtYXBwaW5nIHJ1bGVzLlxuICogQHBhcmFtIHtLZXlWYWx1ZX0gW3Byb3BzXSAtIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbWFwcGVkIGl0ZW1zLlxuICpcbiAqIEByZXR1cm5zIHtUW119IC0gVGhlIGFycmF5IG9mIG1hcHBlZCBpdGVtcy4gSWYgYW4gaXRlbSBpbiB0aGUgb3JpZ2luYWwgYXJyYXkgZG9lcyBub3QgaGF2ZSBhbnkgbm9uLW51bGwgdmFsdWVzIGFmdGVyIG1hcHBpbmcsXG4gKiB0aGUgb3JpZ2luYWwgaXRlbSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YU1hcHBlcjxUPihkYXRhOiBUW10sIG1hcHBlcjogS2V5VmFsdWUsIHByb3BzPzogS2V5VmFsdWUpOiBUW10ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm4gW107XG4gIHJldHVybiBkYXRhLnJlZHVjZSgoYWNjdW06IFRbXSwgY3VycikgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBpdGVtTWFwcGVyKGN1cnIgYXMgS2V5VmFsdWUsIG1hcHBlciwgcHJvcHMpIGFzIFQ7XG4gICAgY29uc3QgaGFzVmFsdWVzID1cbiAgICAgIFsuLi5uZXcgU2V0KE9iamVjdC52YWx1ZXMoaXRlbSBhcyBUW10pKV0uZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUpLmxlbmd0aCA+XG4gICAgICAwO1xuICAgIGFjY3VtLnB1c2goaGFzVmFsdWVzID8gaXRlbSA6IGN1cnIpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfSwgW10pO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGZvY3VzIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgRE9NIGVsZW1lbnRcbiAqIEBzdW1tYXJ5IFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBibHVycyB0aGUgY3VycmVudGx5IGZvY3VzZWQgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQsXG4gKiBlZmZlY3RpdmVseSByZW1vdmluZyBmb2N1cyB0cmFwcyB0aGF0IG1pZ2h0IHByZXZlbnQgcHJvcGVyIG5hdmlnYXRpb24gb3Iga2V5Ym9hcmRcbiAqIGludGVyYWN0aW9uLiBJdCBzYWZlbHkgYWNjZXNzZXMgdGhlIGRvY3VtZW50J3MgYWN0aXZlRWxlbWVudCBhbmQgY2FsbHMgYmx1cigpIGlmXG4gKiBhbiBlbGVtZW50IGlzIGN1cnJlbnRseSBmb2N1c2VkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgYWNjZXNzaWJpbGl0eSBhbmQgdXNlciBleHBlcmllbmNlXG4gKiBpbXByb3ZlbWVudHMsIHBhcnRpY3VsYXJseSB3aGVuIGNsb3NpbmcgbW9kYWxzIG9yIGRpYWxvZ3MuXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gcmVtb3ZlRm9jdXNUcmFwXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGb2N1c1RyYXAoKTogdm9pZCB7XG4gIGNvbnN0IGRvYyA9IGdldFdpbmRvd0RvY3VtZW50KCk7XG4gIGlmKGRvYz8uYWN0aXZlRWxlbWVudClcbiAgICAoZG9jLmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpPy5ibHVyKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENsZWFucyBhbmQgbm9ybWFsaXplcyB3aGl0ZXNwYWNlIGluIGEgc3RyaW5nIHZhbHVlXG4gKiBAc3VtbWFyeSBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gdHJpbXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIGEgc3RyaW5nXG4gKiBhbmQgcmVwbGFjZXMgbXVsdGlwbGUgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHdpdGggYSBzaW5nbGUgc3BhY2UuXG4gKiBPcHRpb25hbGx5IGNvbnZlcnRzIHRoZSByZXN1bHQgdG8gbG93ZXJjYXNlIGZvciBjb25zaXN0ZW50IHRleHQgcHJvY2Vzc2luZy5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBub3JtYWxpemluZyB1c2VyIGlucHV0LCBzZWFyY2ggdGVybXMsIG9yIGRhdGEgc2FuaXRpemF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBzdHJpbmcgdmFsdWUgdG8gY2xlYW4gYW5kIG5vcm1hbGl6ZVxuICogQHBhcmFtIHtib29sZWFufSBbbG93ZXJjYXNlPWZhbHNlXSAtIFdoZXRoZXIgdG8gY29udmVydCB0aGUgcmVzdWx0IHRvIGxvd2VyY2FzZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgY2xlYW5lZCBhbmQgbm9ybWFsaXplZCBzdHJpbmdcbiAqXG4gKiBAZnVuY3Rpb24gY2xlYW5TcGFjZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuU3BhY2VzKHZhbHVlOiBzdHJpbmcgPSBcIlwiLCBsb3dlcmNhc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gIHZhbHVlID0gYCR7dmFsdWV9YC50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xuICByZXR1cm4gbG93ZXJjYXNlID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xufVxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgdGhlIHVzZXIncyBzeXN0ZW0gaXMgY3VycmVudGx5IGluIGRhcmsgbW9kZVxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHVzZXIncyBjb2xvciBzY2hlbWUgcHJlZmVyZW5jZSB1c2luZyB0aGUgQ1NTIG1lZGlhIHF1ZXJ5XG4gKiAnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScuIEl0IHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3lzdGVtIGlzXG4gKiBjdXJyZW50bHkgc2V0IHRvIGRhcmsgbW9kZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyB0aGVtZS1hd2FyZSBmdW5jdGlvbmFsaXR5XG4gKiBhbmQgYWRqdXN0aW5nIFVJIGVsZW1lbnRzIGJhc2VkIG9uIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGNvbG9yIHNjaGVtZS5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBUcnVlIGlmIHRoZSBzeXN0ZW0gaXMgaW4gZGFyayBtb2RlLCBmYWxzZSBvdGhlcndpc2VcbiAqXG4gKiBAZnVuY3Rpb24gaXNEYXJrTW9kZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNEYXJrTW9kZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qge21hdGNoZXN9ID0gZ2V0V2luZG93KCkubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpO1xuICByZXR1cm4gbWF0Y2hlcztcbn1cbiJdfQ==
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlcnMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUscUJBQXFCLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV6RCxJQUFJLGtCQUF1QyxDQUFDO0FBRTVDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxJQUFJLENBQUMsa0JBQWtCO1FBQ3JCLGtCQUFrQixHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRCxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsVUFBa0IsV0FBVztJQUM3RCxJQUFJLENBQUMsT0FBTztRQUNWLE9BQU8sU0FBUyxFQUFFLENBQUM7SUFDckIsTUFBTSxHQUFHLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDeEIsT0FBTyxDQUNMLFNBQVMsRUFBRTtRQUNYLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFBRTtRQUNqRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUMvQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQVksRUFDWixNQUFlLEVBQ2YsS0FBYztJQUVkLE1BQU0sSUFBSSxHQUFHLE1BQU0s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LE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFDaEMsSUFBRyxHQUFHLEVBQUUsYUFBYTtRQUNsQixHQUFHLENBQUMsYUFBNkIsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxFQUFFLFlBQXFCLEtBQUs7SUFDeEUsS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakQsQ0FBQztBQUdEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVO0lBQzlCLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN6RSxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlUmVnaXN0cnlJbXAsIEluamVjdGFibGVzUmVnaXN0cnkgfSBmcm9tICdAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IFByaW1pdGl2ZXMgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgS2V5VmFsdWUsIFN0cmluZ09yQm9vbGVhbiwgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMnO1xuaW1wb3J0IHsgRnVuY3Rpb25MaWtlIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4uL2Zvci1hbmd1bGFyLWNvbW1vbi5tb2R1bGUnO1xuXG5sZXQgaW5qZWN0YWJsZVJlZ2lzdHJ5OiBJbmplY3RhYmxlc1JlZ2lzdHJ5O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgaW5qZWN0YWJsZXMgcmVnaXN0cnlcbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2luZ2xldG9uIHBhdHRlcm4gZm9yIHRoZSBJbmplY3RhYmxlc1JlZ2lzdHJ5LlxuICogSXQgcmV0dXJucyB0aGUgZXhpc3RpbmcgcmVnaXN0cnkgaW5zdGFuY2UgaWYgb25lIGV4aXN0cywgb3IgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZVxuICogaWYgbm9uZSBleGlzdHMuIFRoZSByZWdpc3RyeSBpcyB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmplY3RhYmxlIGRlcGVuZGVuY2llc1xuICogdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHJldHVybiB7SW5qZWN0YWJsZXNSZWdpc3RyeX0gVGhlIHNpbmdsZXRvbiBpbmplY3RhYmxlcyByZWdpc3RyeSBpbnN0YW5jZVxuICpcbiAqIEBmdW5jdGlvbiBnZXRJbmplY3RhYmxlc1JlZ2lzdHJ5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmplY3RhYmxlc1JlZ2lzdHJ5KCk6IEluamVjdGFibGVzUmVnaXN0cnkge1xuICBpZiAoIWluamVjdGFibGVSZWdpc3RyeSlcbiAgICBpbmplY3RhYmxlUmVnaXN0cnkgPSBuZXcgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wKCk7XG4gIHJldHVybiBpbmplY3RhYmxlUmVnaXN0cnk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgY3VycmVudGx5IHJ1bm5pbmcgaW4gYSBkZXZlbG9wbWVudFxuICogZW52aXJvbm1lbnQuIEl0IHVzZXMgQW5ndWxhcidzIGlzRGV2TW9kZSgpIGZ1bmN0aW9uIGFuZCBhbHNvIGNoZWNrcyB0aGUgd2luZG93IGNvbnRleHRcbiAqIGFuZCBob3N0bmFtZSBhZ2FpbnN0IHRoZSBwcm92aWRlZCBjb250ZXh0IHBhcmFtZXRlci4gVGhpcyBpcyB1c2VmdWwgZm9yIGVuYWJsaW5nXG4gKiBkZXZlbG9wbWVudC1zcGVjaWZpYyBmZWF0dXJlcyBvciBsb2dnaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dD0nbG9jYWxob3N0J10gLSBUaGUgY29udGV4dCBzdHJpbmcgdG8gY2hlY2sgYWdhaW5zdCB0aGUgY3VycmVudCBlbnZpcm9ubWVudFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgcnVubmluZyBpbiBkZXZlbG9wbWVudCBtb2RlLCBmYWxzZSBvdGhlcndpc2VcbiAqXG4gKiBAZnVuY3Rpb24gaXNEZXZlbG9wbWVudE1vZGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGV2ZWxvcG1lbnRNb2RlKGNvbnRleHQ6IHN0cmluZyA9ICdsb2NhbGhvc3QnKTogYm9vbGVhbiB7XG4gIGlmICghY29udGV4dClcbiAgICByZXR1cm4gaXNEZXZNb2RlKCk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdygpO1xuICByZXR1cm4gKFxuICAgIGlzRGV2TW9kZSgpIHx8XG4gICAgd2luPy5bJ2VudiddPy5bJ0NPTlRFWFQnXS50b0xvd2VyQ2FzZSgpICE9PSBjb250ZXh0LnRvTG93ZXJDYXNlKCkgfHxcbiAgICB3aW4/LlsnbG9jYXRpb24nXT8uaG9zdG5hbWU/LmluY2x1ZGVzKGNvbnRleHQpXG4gICk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERpc3BhdGNoZXMgYSBjdXN0b20gZXZlbnQgdG8gdGhlIGRvY3VtZW50IHdpbmRvd1xuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBkaXNwYXRjaGVzIGEgY3VzdG9tIGV2ZW50IHRvIHRoZSBicm93c2VyIHdpbmRvdy5cbiAqIEl0J3MgdXNlZnVsIGZvciBjcm9zcy1jb21wb25lbnQgY29tbXVuaWNhdGlvbiBvciBmb3IgdHJpZ2dlcmluZyBhcHBsaWNhdGlvbi13aWRlIGV2ZW50cy5cbiAqIFRoZSBmdW5jdGlvbiBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgZXZlbnQgbmFtZSwgZGV0YWlsIGRhdGEsIGFuZCBhZGRpdGlvbmFsIGV2ZW50IHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY3VzdG9tIGV2ZW50IHRvIGRpc3BhdGNoXG4gKiBAcGFyYW0ge3Vua25vd259IGRldGFpbCAtIFRoZSBkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGV2ZW50J3MgZGV0YWlsIHByb3BlcnR5XG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXSAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIGN1c3RvbSBldmVudFxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gd2luZG93RXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dFdmVudEVtaXR0ZXIoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGV0YWlsOiB1bmtub3duLFxuICBwcm9wcz86IG9iamVjdFxuKTogdm9pZCB7XG4gIGNvbnN0IGRhdGEgPSBPYmplY3QuYXNzaWduKFxuICAgIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOiBkZXRhaWwsXG4gICAgfSxcbiAgICBwcm9wcyB8fCB7fVxuICApO1xuICAoZ2V0V2luZG93KCkgYXMgV2luZG93KS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChuYW1lLCBkYXRhKSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSBwcm9wZXJ0eSBmcm9tIHRoZSB3aW5kb3cncyBkb2N1bWVudCBvYmplY3RcbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBzYWZlIHdheSB0byBhY2Nlc3MgcHJvcGVydGllcyBvbiB0aGUgd2luZG93J3MgZG9jdW1lbnQgb2JqZWN0LlxuICogSXQgdXNlcyB0aGUgZ2V0V2luZG93RG9jdW1lbnQgZnVuY3Rpb24gdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCwgdGhlbiBhY2Nlc3Nlc1xuICogdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS4gVGhpcyBpcyB1c2VmdWwgZm9yIGJyb3dzZXIgZW52aXJvbm1lbnQgaW50ZXJhY3Rpb25zIHRoYXQgbmVlZFxuICogdG8gYWNjZXNzIGRvY3VtZW50IHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZSBmcm9tIHRoZSBkb2N1bWVudCBvYmplY3RcbiAqIEByZXR1cm4ge2FueX0gVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcHJvcGVydHksIG9yIHVuZGVmaW5lZCBpZiB0aGUgZG9jdW1lbnQgb3IgcHJvcGVydHkgZG9lc24ndCBleGlzdFxuICpcbiAqIEBmdW5jdGlvbiBnZXRPbldpbmRvd0RvY3VtZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPbldpbmRvd0RvY3VtZW50KGtleTogc3RyaW5nKTogRG9jdW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBkb2MgPSBnZXRXaW5kb3dEb2N1bWVudCgpPy5ba2V5IGFzIGtleW9mIERvY3VtZW50XTtcbiAgcmV0dXJuIGRvYyBpbnN0YW5jZW9mIERvY3VtZW50ID9cbiAgICBkb2MgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgZG9jdW1lbnQgb2JqZWN0IGZyb20gdGhlIHdpbmRvd1xuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHNhZmUgd2F5IHRvIGFjY2VzcyB0aGUgZG9jdW1lbnQgb2JqZWN0IGZyb20gdGhlIHdpbmRvdy5cbiAqIEl0IHVzZXMgdGhlIGdldE9uV2luZG93IGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSAnZG9jdW1lbnQnIHByb3BlcnR5IGZyb20gdGhlIHdpbmRvdyBvYmplY3QuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgYnJvd3NlciBlbnZpcm9ubWVudCBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkIGFjY2VzcyB0byB0aGUgZG9jdW1lbnQuXG4gKlxuICogQHJldHVybiB7RG9jdW1lbnQgfCB1bmRlZmluZWR9IFRoZSB3aW5kb3cncyBkb2N1bWVudCBvYmplY3QsIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gKlxuICogQGZ1bmN0aW9uIGdldFdpbmRvd0RvY3VtZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaW5kb3dEb2N1bWVudCgpOiBEb2N1bWVudCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRPbldpbmRvdygnZG9jdW1lbnQnKSBhcyBEb2N1bWVudDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgcHJvcGVydHkgZnJvbSB0aGUgd2luZG93IG9iamVjdFxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHNhZmUgd2F5IHRvIGFjY2VzcyBwcm9wZXJ0aWVzIG9uIHRoZSB3aW5kb3cgb2JqZWN0LlxuICogSXQgdXNlcyB0aGUgZ2V0V2luZG93IGZ1bmN0aW9uIHRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgd2luZG93LCB0aGVuIGFjY2Vzc2VzXG4gKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgYnJvd3NlciBlbnZpcm9ubWVudCBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkXG4gKiB0byBhY2Nlc3Mgd2luZG93IHByb3BlcnRpZXMgb3IgQVBJcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIGZyb20gdGhlIHdpbmRvdyBvYmplY3RcbiAqIEByZXR1cm4ge3Vua25vd24gfCB1bmRlZmluZWR9IFRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgdGhlIHdpbmRvdyBvciBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0XG4gKlxuICogQGZ1bmN0aW9uIGdldE9uV2luZG93XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPbldpbmRvdyhrZXk6IHN0cmluZyk6IHVua25vd24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2V0V2luZG93KCk/LltrZXldO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXRzIGEgcHJvcGVydHkgb24gdGhlIHdpbmRvdyBvYmplY3RcbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSB3YXkgdG8gc2V0IHByb3BlcnRpZXMgb24gdGhlIHdpbmRvdyBvYmplY3QuXG4gKiBJdCB1c2VzIHRoZSBnZXRXaW5kb3cgZnVuY3Rpb24gdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSB3aW5kb3csIHRoZW4gc2V0c1xuICogdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSB0byB0aGUgcHJvdmlkZWQgdmFsdWUuIFRoaXMgaXMgdXNlZnVsIGZvciBzdG9yaW5nXG4gKiBnbG9iYWwgZGF0YSBvciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFjY2Vzc2libGUgYWNyb3NzIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldCBvbiB0aGUgd2luZG93IG9iamVjdFxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgcHJvcGVydHlcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHNldE9uV2luZG93XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRPbldpbmRvdyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgZ2V0V2luZG93KClba2V5XSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGdsb2JhbCB3aW5kb3cgb2JqZWN0XG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgc2FmZSB3YXkgdG8gYWNjZXNzIHRoZSBnbG9iYWwgd2luZG93IG9iamVjdC5cbiAqIEl0IHVzZXMgZ2xvYmFsVGhpcyB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IEphdmFTY3JpcHQgZW52aXJvbm1lbnRzLlxuICogVGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiB1c2VkIGJ5IG90aGVyIHdpbmRvdy1yZWxhdGVkIHV0aWxpdHkgZnVuY3Rpb25zIHRvXG4gKiBhY2Nlc3MgdGhlIHdpbmRvdyBvYmplY3QuXG4gKlxuICogQHJldHVybiB7V2luZG93fSBUaGUgZ2xvYmFsIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0V2luZG93XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaW5kb3coKTogV2luZG93ICYgS2V5VmFsdWUge1xuICByZXR1cm4gKGdsb2JhbFRoaXMgYXMgS2V5VmFsdWUpPy5bJ3dpbmRvdyddIGFzIFdpbmRvdyAmIEtleVZhbHVlO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIHdpZHRoIG9mIHRoZSBicm93c2VyIHdpbmRvd1xuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IHRvIGdldCB0aGUgY3VycmVudCB3aWR0aCBvZiB0aGUgYnJvd3NlciB3aW5kb3cuXG4gKiBJdCB1c2VzIHRoZSBnZXRPbldpbmRvdyBmdW5jdGlvbiB0byBhY2Nlc3MgdGhlICdpbm5lcldpZHRoJyBwcm9wZXJ0eSBvZiB0aGUgd2luZG93IG9iamVjdC5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciByZXNwb25zaXZlIGRlc2lnbiBpbXBsZW1lbnRhdGlvbnMgYW5kIHZpZXdwb3J0LWJhc2VkIGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXIgfCB1bmRlZmluZWR9IFRoZSBjdXJyZW50IHdpZHRoIG9mIHRoZSBicm93c2VyIHdpbmRvdyBpbiBwaXhlbHNcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0V2luZG93V2lkdGhcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdpbmRvd1dpZHRoKCk6IG51bWJlciB7XG4gIHJldHVybiBnZXRPbldpbmRvdygnaW5uZXJXaWR0aCcpIGFzIG51bWJlciB8fCAwO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYSB2YWx1ZSBpcyAgbm90IHVuZGVmaW5lZFxuICogQHN1bW1hcnkgVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQuXG4gKiBJdCdzIGEgc2ltcGxlIHdyYXBwZXIgdGhhdCBtYWtlcyBjb2RlIG1vcmUgcmVhZGFibGUgd2hlbiBjaGVja2luZyBmb3IgZGVmaW5lZCB2YWx1ZXMuXG4gKiBUaGUgZnVuY3Rpb24gaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY2hlY2tpbmcgU3RyaW5nT3JCb29sZWFuIHByb3BlcnRpZXMgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmdPckJvb2xlYW4gfCB1bmRlZmluZWR9IHByb3AgLSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCB1bmRlZmluZWQsIGZhbHNlIG90aGVyd2lzZVxuICpcbiAqIEBmdW5jdGlvbiBpc05vdFVuZGVmaW5lZFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RVbmRlZmluZWQocHJvcDogU3RyaW5nT3JCb29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiAocHJvcCAhPT0gdW5kZWZpbmVkKSBhcyBib29sZWFuO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGUgc3RyaW5nIGZyb20gYSBjbGFzcyBuYW1lIG9yIGluc3RhbmNlXG4gKiBAc3VtbWFyeSBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gY29udmVydHMgYSBjbGFzcyBuYW1lIG9yIGluc3RhbmNlIGludG8gYSBsb2NhbGUgc3RyaW5nXG4gKiB0aGF0IGNhbiBiZSB1c2VkIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBwdXJwb3Nlcy4gSXQgaGFuZGxlcyBkaWZmZXJlbnQgaW5wdXQgdHlwZXNcbiAqIChzdHJpbmcsIGZ1bmN0aW9uLCBvciBvYmplY3QpIGFuZCBhcHBsaWVzIGZvcm1hdHRpbmcgcnVsZXMgdG8gZ2VuZXJhdGUgYSBjb25zaXN0ZW50XG4gKiBsb2NhbGUgaWRlbnRpZmllci4gRm9yIHNob3J0IG5hbWVzIChsZXNzIHRoYW4gMyBwYXJ0cyksIGl0IHJldmVyc2VzIHRoZSBkb3Qtc2VwYXJhdGVkXG4gKiBzdHJpbmcuIEZvciBsb25nZXIgbmFtZXMsIGl0IHVzZXMgdGhlIGxhc3QgcGFydCBhcyBhIHByZWZpeCBhbmQgam9pbnMgdGhlIHJlc3Qgd2l0aFxuICogdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb25MaWtlfG9iamVjdH0gaW5zdGFuY2UgLSBUaGUgaW5wdXQgdG8gZ2VuZXJhdGUgdGhlIGxvY2FsZSBmcm9tIChjbGFzcyBuYW1lLCBjb25zdHJ1Y3Rvciwgb3IgaW5zdGFuY2UpXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N1ZmZpeF0gLSBPcHRpb25hbCBzdHJpbmcgdG8gYXBwZW5kIHRvIHRoZSBpbnN0YW5jZSBuYW1lIGJlZm9yZSBwcm9jZXNzaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEEgZm9ybWF0dGVkIGxvY2FsZSBzdHJpbmcgZGVyaXZlZCBmcm9tIHRoZSBpbnB1dFxuICpcbiAqIEBmdW5jdGlvbiBnZXRMb2NhbGVGcm9tQ2xhc3NOYW1lXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVGcm9tQ2xhc3NOYW1lKFxuICBpbnN0YW5jZTogc3RyaW5nIHwgRnVuY3Rpb25MaWtlIHwgS2V5VmFsdWUsXG4gIHN1ZmZpeD86IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBpbnN0YW5jZSAhPT0gUHJpbWl0aXZlcy5TVFJJTkcpXG4gICAgaW5zdGFuY2UgPSAoaW5zdGFuY2UgYXMgRnVuY3Rpb25MaWtlKS5uYW1lIHx8IChpbnN0YW5jZSBhcyBvYmplY3QpPy5jb25zdHJ1Y3Rvcj8ubmFtZTtcblxuICBsZXQgbmFtZTogc3RyaW5nIHwgc3RyaW5nW10gPSBpbnN0YW5jZSBhcyBzdHJpbmc7XG5cbiAgaWYgKHN1ZmZpeClcbiAgICBuYW1lID0gYCR7aW5zdGFuY2V9JHtzdWZmaXguY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdWZmaXguc2xpY2UoMSl9YDtcblxuICBuYW1lID0gbmFtZS5yZXBsYWNlKC9ffC0vZywgJycpLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAxKSB3b3JkID0gJy4nICsgd29yZDtcbiAgICAgIHJldHVybiB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSkuc3BsaXQoJy4nKTtcblxuICBpZiAobmFtZS5sZW5ndGggPCAzKVxuICAgIHJldHVybiBuYW1lLnJldmVyc2UoKS5qb2luKCcuJyk7XG5cbiAgY29uc3QgcHJlZmZpeCA9IG5hbWVbbmFtZS5sZW5ndGggLSAxXTtcbiAgbmFtZS5wb3AoKTtcbiAgbmFtZSA9IG5hbWUuam9pbignXycpO1xuICByZXR1cm4gYCR7cHJlZmZpeH0uJHtuYW1lfWA7XG59XG5cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgbG9jYWxlIGxhbmd1YWdlXG4gKiBAc3VtbWFyeSBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gZ2V0cyB0aGUgY3VycmVudCBsb2NhbGUgbGFuZ3VhZ2UgYmFzZWQgb24gdGhlIHVzZXIncyBicm93c2VyIHNldHRpbmdzLlxuICogSXQgcHJvdmlkZXMgYSBjb25zaXN0ZW50IHdheSB0byBhY2Nlc3MgdGhlIHVzZXIncyBsYW5ndWFnZSBwcmVmZXJlbmNlIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLlxuICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGJyb3dzZXIncyBuYXZpZ2F0b3IubGFuZ3VhZ2UgdmFsdWUsIGRlZmF1bHRpbmcgdG8gJ2VuJyBpZiBub3QgYXZhaWxhYmxlLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGN1cnJlbnQgbG9jYWxlIGxhbmd1YWdlIChlLmcuLCAnZW4nLCAnZnInKVxuICpcbiAqIEBmdW5jdGlvbiBnZXRMb2NhbGVMYW5ndWFnZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlTGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KCk7XG4gIHJldHVybiAod2luIGFzIFdpbmRvdykubmF2aWdhdG9yLmxhbmd1YWdlIHx8IFwiZW5cIjtcbiAgLy8gcmV0dXJuIHdpbj8uW1dJTkRPV19LRVlTLkxBTkdVQUdFX1NFTEVDVEVEXSB8fCAod2luLm5hdmlnYXRvci5sYW5ndWFnZSB8fCAnJykuc3BsaXQoJy0nKVswXSB8fCBcImVuXCI7XG59XG5cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSByYW5kb20gc3RyaW5nIG9yIG51bWJlciBvZiBzcGVjaWZpZWQgbGVuZ3RoXG4gKiBAc3VtbWFyeSBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gY3JlYXRlcyBhIHJhbmRvbSBzdHJpbmcgb2YgYSBzcGVjaWZpZWQgbGVuZ3RoLlxuICogSXQgY2FuIGdlbmVyYXRlIGVpdGhlciBhbHBoYW51bWVyaWMgc3RyaW5ncyAoaW5jbHVkaW5nIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlIGxldHRlcnMpXG4gKiBvciBudW1lcmljLW9ubHkgc3RyaW5ncy4gVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIHJhbmRvbSBJRHMsIHRlbXBvcmFyeSBwYXNzd29yZHMsXG4gKiBvciBvdGhlciByYW5kb20gaWRlbnRpZmllcnMgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9OF0gLSBUaGUgbGVuZ3RoIG9mIHRoZSByYW5kb20gdmFsdWUgdG8gZ2VuZXJhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29ubHlOdW1iZXJzPWZhbHNlXSAtIFdoZXRoZXIgdG8gZ2VuZXJhdGUgb25seSBudW1lcmljIGNoYXJhY3RlcnNcbiAqIEByZXR1cm4ge3N0cmluZ30gQSByYW5kb21seSBnZW5lcmF0ZWQgc3RyaW5nIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIGFuZCBjaGFyYWN0ZXIgc2V0XG4gKlxuICogQGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tVmFsdWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tVmFsdWUobGVuZ3RoOiBudW1iZXIgPSA4LCBvbmx5TnVtYmVyczogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgY29uc3QgY2hhcnMgPSBvbmx5TnVtYmVyc1xuICAgID8gJzAxMjM0NTY3ODknXG4gICAgOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBib29sZWFuIG9yIGEgYm9vbGVhbiB2YWx1ZSB0byBhIGJvb2xlYW4gdHlwZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0geygndHJ1ZScgfCAnZmFsc2UnIHwgYm9vbGVhbil9IHByb3AgLSBUaGUgdmFsdWUgdG8gY29udmVydC4gQ2FuIGJlIHRoZSBzdHJpbmcgJ3RydWUnLCAnZmFsc2UnLCBvciBhIGJvb2xlYW4uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGJvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0IHZhbHVlLiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IGlzIHRoZSBzdHJpbmcgJ3RydWUnIG9yIGJvb2xlYW4gdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9Cb29sZWFuKHByb3A6ICd0cnVlJyB8ICdmYWxzZScgfCBib29sZWFuKTogYm9vbGVhbiB7XG4gIGlmKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJylcbiAgICBwcm9wID0gcHJvcC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gIHJldHVybiBwcm9wO1xufVxuXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBEYXRlIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7KHN0cmluZyB8IERhdGUgfCBudW1iZXIpfSBkYXRlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLiBDYW4gYmUgYSBEYXRlIG9iamVjdCwgYSB0aW1lc3RhbXAgbnVtYmVyLCBvciBhIGRhdGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgRGF0ZSBvYmplY3QgKG5vdCBOYU4pLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWREYXRlKGRhdGU6IHN0cmluZyB8IERhdGUgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlIGFzIHVua25vd24gYXMgbnVtYmVyKSkgfHwgKCgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3RSZWdleCA9IG5ldyBSZWdFeHAoL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvKS50ZXN0KGRhdGUgYXMgc3RyaW5nKVxuICAgICAgaWYodHlwZW9mIGRhdGUgIT09IFByaW1pdGl2ZXMuU1RSSU5HIHx8ICEoZGF0ZSBhcyBzdHJpbmcpPy5pbmNsdWRlcygnVCcpICYmICF0ZXN0UmVnZXgpXG4gICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgZGF0ZSA9IChkYXRlIGFzIHN0cmluZykuc3BsaXQoJ1QnKVswXTtcbiAgICBpZighbmV3IFJlZ0V4cCgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8pLnRlc3QoZGF0ZSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gISEobmV3IERhdGUoZGF0ZSkpO1xuICAgfSkoKTtcbiAgfSBjYXRjaChlcnJvcjogdW5rbm93bikge1xuICAgIGdldExvZ2dlcihpc1ZhbGlkRGF0ZSkuZXJyb3IoZXJyb3IgYXMgRXJyb3IgfCBzdHJpbmcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBkYXRlIGludG8gYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgRGF0ZSB8IG51bWJlcil9IGRhdGUgLSBUaGUgZGF0ZSB0byBmb3JtYXQuIENhbiBiZSBhIERhdGUgb2JqZWN0LCBhIHRpbWVzdGFtcCBudW1iZXIsIG9yIGEgZGF0ZSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbG9jYWxlXSAtIFRoZSBsb2NhbGUgdG8gdXNlIGZvciBmb3JtYXR0aW5nLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBzeXN0ZW0ncyBsb2NhbGUgd2lsbCBiZSB1c2VkXG4gKiBAcmV0dXJuIHsoRGF0ZSB8IHN0cmluZyl9IEEgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBmb3JtYXQgREQvTU0vWVlZWSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBsb2NhbGUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBvcmlnaW5hbCBpbnB1dCBhcyBhIHN0cmluZyBpZiB0aGUgZGF0ZSBpcyBpbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGU6IHN0cmluZyB8IERhdGUgfCBudW1iZXIsIGxvY2FsZT86IHN0cmluZyB8IHVuZGVmaW5lZCk6IERhdGUgfCBzdHJpbmcge1xuXG4gIGlmKCFsb2NhbGUpXG4gICAgbG9jYWxlID0gZ2V0TG9jYWxlTGFuZ3VhZ2UoKTtcblxuICBpZih0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGRhdGUgPT09ICdudW1iZXInKVxuICAgIGRhdGUgPSBuZXcgRGF0ZSh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycgPyBkYXRlLnJlcGxhY2UoL1xcLy9nLCAnLScpIDogZGF0ZSk7XG5cbiAgaWYoIWlzVmFsaWREYXRlKGRhdGUpKVxuICAgIHJldHVybiBgJHtkYXRlfWAgYXMgc3RyaW5nO1xuICBjb25zdCByID0gZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgZGF5OiBcIjItZGlnaXRcIixcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCdcbiAgfSk7XG5cblxuICByZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBwYXJzZSBhIGRhdGUgc3RyaW5nLCBEYXRlIG9iamVjdCwgb3IgbnVtYmVyIGludG8gYSB2YWxpZCBEYXRlIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7KHN0cmluZyB8IERhdGUgfCBudW1iZXIpfSBkYXRlIC0gVGhlIGRhdGUgdG8gcGFyc2UuIENhbiBiZSBhIERhdGUgb2JqZWN0LCBhIHRpbWVzdGFtcCBudW1iZXIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBkYXRlIHN0cmluZyBpbiB0aGUgZm9ybWF0IFwiREQvTU0vWVlZWSBISDpNTTpTUzpNU1wiXG4gKiBAcmV0dXJuIHsoRGF0ZSB8IG51bGwpfSBBIHZhbGlkIERhdGUgb2JqZWN0IGlmIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bCwgb3IgbnVsbCBpZiB0aGUgZGF0ZSBpcyBpbnZhbGlkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBvciBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVG9WYWxpZERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlcik6IERhdGUgfCBudWxsIHtcbiAgaWYoaXNWYWxpZERhdGUoZGF0ZSkpXG4gICAgcmV0dXJuIGRhdGUgYXMgRGF0ZTtcblxuICBpZighYCR7ZGF0ZX1gLmluY2x1ZGVzKCcvJykpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgW2RhdGVTdHJpbmcsIHRpbWVTdHJpbmddID0gKGRhdGUgYXMgc3RyaW5nKS5zcGxpdCgnICcpO1xuICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBkYXRlU3RyaW5nLnNwbGl0KCcvJykubWFwKE51bWJlcik7XG4gIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzXSA9IHRpbWVTdHJpbmcuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcbiAgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzKTtcblxuICBpZighaXNWYWxpZERhdGUoZGF0ZSkpIHtcbiAgICBjb25zb2xlLndhcm4oJ3BhcnNlVG9WYWxpZERhdGUgLSBJbnZhbGlkIGRhdGUgZm9ybWF0JywgZGF0ZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZGF0ZTtcbn1cblxuXG4vKipcbiAqIE1hcHMgYW4gaXRlbSBvYmplY3QgdXNpbmcgYSBwcm92aWRlZCBtYXBwZXIgb2JqZWN0IGFuZCBvcHRpb25hbCBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtLZXlWYWx1ZX0gaXRlbSAtIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGJlIG1hcHBlZC5cbiAqIEBwYXJhbSB7S2V5VmFsdWV9IG1hcHBlciAtIEFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIG1hcHBpbmcgcnVsZXMuIEtleXMgcmVwcmVzZW50IHRoZSBuZXcgcHJvcGVydHkgbmFtZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdmFsdWVzIHJlcHJlc2VudCB0aGUgcGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge0tleVZhbHVlfSBbcHJvcHNdIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBtYXBwZWQgb2JqZWN0LlxuICogQHJldHVybnMge0tleVZhbHVlfSBBIG5ldyBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIG1hcHBlZCBhY2NvcmRpbmcgdG8gdGhlIG1hcHBlciBvYmplY3QgYW5kIGluY2x1ZGluZyBhbnkgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXRlbU1hcHBlcihpdGVtOiBLZXlWYWx1ZSwgbWFwcGVyOiBLZXlWYWx1ZSwgcHJvcHM/OiBLZXlWYWx1ZSk6IEtleVZhbHVlIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG1hcHBlcikucmVkdWNlKChhY2N1bTogS2V5VmFsdWUsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IGFycmF5VmFsdWUgPSAodmFsdWUgYXMgc3RyaW5nKS5zcGxpdCgnLicpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIGFjY3VtW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFycmF5VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGFjY3VtW2tleV0gPSBpdGVtPy5bdmFsdWUgYXMgc3RyaW5nXSB8fCAodmFsdWUgIT09IGtleSA/IHZhbHVlIDogXCJcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdmFsO1xuXG4gICAgICAgIGZvciAoY29uc3QgX3ZhbHVlIG9mIGFycmF5VmFsdWUpXG4gICAgICAgICAgdmFsID0gIXZhbFxuICAgICAgICAgICAgPyBpdGVtW192YWx1ZV1cbiAgICAgICAgICAgIDogKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSh2YWwpIDogdmFsKVtfdmFsdWVdO1xuXG4gICAgICAgIGlmIChpc1ZhbGlkRGF0ZShuZXcgRGF0ZSh2YWwpKSkgdmFsID0gYCR7Zm9ybWF0RGF0ZSh2YWwpfWA7XG5cbiAgICAgICAgYWNjdW1ba2V5XSA9IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMgfHwge30sIGFjY3VtKTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIE1hcHMgYW4gYXJyYXkgb2YgZGF0YSBvYmplY3RzIHVzaW5nIGEgcHJvdmlkZWQgbWFwcGVyIG9iamVjdC5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHRpbmcgbWFwcGVkIGl0ZW1zLlxuICogQHBhcmFtIHthbnlbXX0gZGF0YSAtIFRoZSBhcnJheSBvZiBkYXRhIG9iamVjdHMgdG8gYmUgbWFwcGVkLlxuICogQHBhcmFtIHtLZXlWYWx1ZX0gbWFwcGVyIC0gQW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgbWFwcGluZyBydWxlcy5cbiAqIEBwYXJhbSB7S2V5VmFsdWV9IFtwcm9wc10gLSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1hcHBlZCBpdGVtcy5cbiAqXG4gKiBAcmV0dXJucyB7VFtdfSAtIFRoZSBhcnJheSBvZiBtYXBwZWQgaXRlbXMuIElmIGFuIGl0ZW0gaW4gdGhlIG9yaWdpbmFsIGFycmF5IGRvZXMgbm90IGhhdmUgYW55IG5vbi1udWxsIHZhbHVlcyBhZnRlciBtYXBwaW5nLFxuICogdGhlIG9yaWdpbmFsIGl0ZW0gaXMgcmV0dXJuZWQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFNYXBwZXI8VD4oZGF0YTogVFtdLCBtYXBwZXI6IEtleVZhbHVlLCBwcm9wcz86IEtleVZhbHVlKTogVFtdIHtcbiAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkgcmV0dXJuIFtdO1xuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGFjY3VtOiBUW10sIGN1cnIpID0+IHtcbiAgICBjb25zdCBpdGVtID0gaXRlbU1hcHBlcihjdXJyIGFzIEtleVZhbHVlLCBtYXBwZXIsIHByb3BzKSBhcyBUO1xuICAgIGNvbnN0IGhhc1ZhbHVlcyA9XG4gICAgICBbLi4ubmV3IFNldChPYmplY3QudmFsdWVzKGl0ZW0gYXMgVFtdKSldLmZpbHRlcigodmFsdWUpID0+IHZhbHVlKS5sZW5ndGggPlxuICAgICAgMDtcbiAgICBhY2N1bS5wdXNoKGhhc1ZhbHVlcyA/IGl0ZW0gOiBjdXJyKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH0sIFtdKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBjdXJyZW50bHkgYWN0aXZlIERPTSBlbGVtZW50XG4gKiBAc3VtbWFyeSBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gYmx1cnMgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LFxuICogZWZmZWN0aXZlbHkgcmVtb3ZpbmcgZm9jdXMgdHJhcHMgdGhhdCBtaWdodCBwcmV2ZW50IHByb3BlciBuYXZpZ2F0aW9uIG9yIGtleWJvYXJkXG4gKiBpbnRlcmFjdGlvbi4gSXQgc2FmZWx5IGFjY2Vzc2VzIHRoZSBkb2N1bWVudCdzIGFjdGl2ZUVsZW1lbnQgYW5kIGNhbGxzIGJsdXIoKSBpZlxuICogYW4gZWxlbWVudCBpcyBjdXJyZW50bHkgZm9jdXNlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIGFjY2Vzc2liaWxpdHkgYW5kIHVzZXIgZXhwZXJpZW5jZVxuICogaW1wcm92ZW1lbnRzLCBwYXJ0aWN1bGFybHkgd2hlbiBjbG9zaW5nIG1vZGFscyBvciBkaWFsb2dzLlxuICpcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHJlbW92ZUZvY3VzVHJhcFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRm9jdXNUcmFwKCk6IHZvaWQge1xuICBjb25zdCBkb2MgPSBnZXRXaW5kb3dEb2N1bWVudCgpO1xuICBpZihkb2M/LmFjdGl2ZUVsZW1lbnQpXG4gICAgKGRvYy5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KT8uYmx1cigpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDbGVhbnMgYW5kIG5vcm1hbGl6ZXMgd2hpdGVzcGFjZSBpbiBhIHN0cmluZyB2YWx1ZVxuICogQHN1bW1hcnkgVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIHRyaW1zIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBhIHN0cmluZ1xuICogYW5kIHJlcGxhY2VzIG11bHRpcGxlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB3aXRoIGEgc2luZ2xlIHNwYWNlLlxuICogT3B0aW9uYWxseSBjb252ZXJ0cyB0aGUgcmVzdWx0IHRvIGxvd2VyY2FzZSBmb3IgY29uc2lzdGVudCB0ZXh0IHByb2Nlc3NpbmcuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3Igbm9ybWFsaXppbmcgdXNlciBpbnB1dCwgc2VhcmNoIHRlcm1zLCBvciBkYXRhIHNhbml0aXphdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBUaGUgc3RyaW5nIHZhbHVlIHRvIGNsZWFuIGFuZCBub3JtYWxpemVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xvd2VyY2FzZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCB0byBsb3dlcmNhc2VcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNsZWFuZWQgYW5kIG5vcm1hbGl6ZWQgc3RyaW5nXG4gKlxuICogQGZ1bmN0aW9uIGNsZWFuU3BhY2VzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1hbmd1bGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblNwYWNlcyh2YWx1ZTogc3RyaW5nID0gXCJcIiwgbG93ZXJjYXNlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICB2YWx1ZSA9IGAke3ZhbHVlfWAudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgcmV0dXJuIGxvd2VyY2FzZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbn1cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIGlmIHRoZSB1c2VyJ3Mgc3lzdGVtIGlzIGN1cnJlbnRseSBpbiBkYXJrIG1vZGVcbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSB1c2VyJ3MgY29sb3Igc2NoZW1lIHByZWZlcmVuY2UgdXNpbmcgdGhlIENTUyBtZWRpYSBxdWVyeVxuICogJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknLiBJdCByZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN5c3RlbSBpc1xuICogY3VycmVudGx5IHNldCB0byBkYXJrIG1vZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgdGhlbWUtYXdhcmUgZnVuY3Rpb25hbGl0eVxuICogYW5kIGFkanVzdGluZyBVSSBlbGVtZW50cyBiYXNlZCBvbiB0aGUgdXNlcidzIHByZWZlcnJlZCBjb2xvciBzY2hlbWUuXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVHJ1ZSBpZiB0aGUgc3lzdGVtIGlzIGluIGRhcmsgbW9kZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQGZ1bmN0aW9uIGlzRGFya01vZGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRGFya01vZGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHttYXRjaGVzfSA9IGdldFdpbmRvdygpLm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKTtcbiAgcmV0dXJuIG1hdGNoZXM7XG59XG4iXX0=
|
package/esm2022/i18n/Loader.mjs
CHANGED
|
@@ -3,6 +3,7 @@ import { forkJoin } from 'rxjs';
|
|
|
3
3
|
import { map } from 'rxjs/operators';
|
|
4
4
|
import { inject, InjectionToken } from '@angular/core';
|
|
5
5
|
import { cleanSpaces, getLocaleFromClassName } from '../helpers';
|
|
6
|
+
import en from './data/en.json';
|
|
6
7
|
export class I18nLoader {
|
|
7
8
|
static loadFromHttp(http) {
|
|
8
9
|
function getSuffix() {
|
|
@@ -58,6 +59,7 @@ export function getI18nLoaderFactoryProviderConfig(resources = [], versionedSuff
|
|
|
58
59
|
], versionedSuffix }
|
|
59
60
|
};
|
|
60
61
|
}
|
|
62
|
+
const libLanguage = { en };
|
|
61
63
|
export class MultiI18nLoader {
|
|
62
64
|
constructor(http, resources = [], versionedSuffix = false) {
|
|
63
65
|
this.http = http;
|
|
@@ -71,12 +73,14 @@ export class MultiI18nLoader {
|
|
|
71
73
|
return `${suffix}?version=${today.getFullYear()}${today.getMonth()}${today.getDay()}`;
|
|
72
74
|
}
|
|
73
75
|
getTranslation(lang) {
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
const libKeys = libLanguage[lang] || libLanguage["en"] || {};
|
|
77
|
+
const httpRequests$ = forkJoin(this.resources.map(config => this.http.get(`${config.prefix}${lang}${this.getSuffix(config.suffix)}`)));
|
|
78
|
+
return httpRequests$.pipe(map(res => {
|
|
79
|
+
return {
|
|
80
|
+
...libKeys,
|
|
81
|
+
...res.reduce((acc, current) => ({ ...acc, ...current }), {})
|
|
82
|
+
};
|
|
79
83
|
}));
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9pMThuL0xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hDLE1BQU0sT0FBTyxVQUFVO0lBQ3JCLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBZ0I7UUFDbEMsU0FBUyxTQUFTO1lBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDekIsT0FBTyxpQkFBaUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQVksQ0FBQztRQUM5RixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBTSxTQUFRLG1CQUFtQjtZQUNsQyxjQUFjLENBQUMsSUFBWTtnQkFDbEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1NBQ0YsQ0FBQyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQUdELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFxQyxFQUFFLE1BQWU7SUFDckYsT0FBTyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUs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O2dCQUNMLEdBQUcsT0FBTztnQkFDVixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUM5RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMb2FkZXIsIFRyYW5zbGF0aW9uT2JqZWN0IH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVIdHRwTG9hZGVyIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvaHR0cC1sb2FkZXInO1xuaW1wb3J0IHsgZm9ya0pvaW4sICBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0kxOG5SZXNvdXJjZUNvbmZpZ30gZnJvbSAnLi4vZW5naW5lL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnVuY3Rpb25MaWtlLCBLZXlWYWx1ZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBjbGVhblNwYWNlcywgZ2V0TG9jYWxlRnJvbUNsYXNzTmFtZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IGVuIGZyb20gJy4vZGF0YS9lbi5qc29uJztcbmV4cG9ydCBjbGFzcyBJMThuTG9hZGVyIHtcbiAgc3RhdGljIGxvYWRGcm9tSHR0cChodHRwOiBIdHRwQ2xpZW50KTogVHJhbnNsYXRlTG9hZGVyIHtcbiAgICBmdW5jdGlvbiBnZXRTdWZmaXgoKSB7XG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICByZXR1cm4gYC5qc29uP3ZlcnNpb249JHt0b2RheS5nZXRGdWxsWWVhcigpfSR7dG9kYXkuZ2V0TW9udGgoKX0ke3RvZGF5LmdldERheSgpfWAgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgVHJhbnNsYXRlSHR0cExvYWRlciB7XG4gICAgICBvdmVycmlkZSBnZXRUcmFuc2xhdGlvbihsYW5nOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRyYW5zbGF0aW9uT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHN1cGVyLmdldFRyYW5zbGF0aW9uKGxhbmcpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH0pKGh0dHAsICcuL2Fzc2V0cy9pMThuLycsIGdldFN1ZmZpeCgpKTtcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVDb250ZXh0KGNsYXp6OiBGdW5jdGlvbkxpa2UgfCBvYmplY3QgfCBzdHJpbmcsIHN1ZmZpeD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRMb2NhbGVGcm9tQ2xhc3NOYW1lKGNsYXp6LCBzdWZmaXgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGl6ZWQgc3RyaW5nIGJ5IGNvbWJpbmluZyBsb2NhbGUgYW5kIHBocmFzZVxuICogQHN1bW1hcnkgVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBwcm9wZXJseSBmb3JtYXR0ZWQgbG9jYWxlIHN0cmluZyBieSBjb21iaW5pbmdcbiAqIGEgbG9jYWxlIGlkZW50aWZpZXIgd2l0aCBhIHBocmFzZS4gSXQgaGFuZGxlcyBlZGdlIGNhc2VzIHN1Y2ggYXMgZW1wdHkgcGhyYXNlcyxcbiAqIG1pc3NpbmcgbG9jYWxlcywgYW5kIHBocmFzZXMgdGhhdCBhbHJlYWR5IGluY2x1ZGUgdGhlIGxvY2FsZSBwcmVmaXguIFRoaXMgZnVuY3Rpb25cbiAqIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgY29uc2lzdGVudCBmb3JtYXR0aW5nIG9mIGxvY2FsaXplZCBzdHJpbmdzIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgLSBUaGUgbG9jYWxlIGlkZW50aWZpZXIgKGUuZy4sICdlbicsICdmcicpXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gcGhyYXNlIC0gVGhlIHBocmFzZSB0byBsb2NhbGl6ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGxvY2FsZSBzdHJpbmcsIG9yIGVtcHR5IHN0cmluZyBpZiBwaHJhc2UgaXMgdW5kZWZpbmVkXG4gKlxuICogQGZ1bmN0aW9uIGdlbmVyYXRlTG9jYWxlRnJvbVN0cmluZ1xuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItYW5ndWxhclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlQ29udGV4dEJ5S2V5KFxuICBsb2NhbGU6IHN0cmluZyxcbiAgcGhyYXNlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG4gIGlmICghcGhyYXNlKVxuICAgIHJldHVybiBsb2NhbGU7XG4gIGlmICghbG9jYWxlIHx8IHBocmFzZS5pbmNsdWRlcyhgJHtsb2NhbGV9LmApKVxuICAgIHJldHVybiBwaHJhc2U7XG4gIGNvbnN0IHBhcnRzID0gcGhyYXNlLnNwbGl0KCcgJyk7XG4gIHJldHVybiBgJHtsb2NhbGV9LiR7Y2xlYW5TcGFjZXMocGFydHMuam9pbignLicpLCB0cnVlKX1gO1xufVxuXG5leHBvcnQgY29uc3QgSTE4Tl9DT05GSUdfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48e3Jlc291cmNlczogSTE4blJlc291cmNlQ29uZmlnW107IHZlcnNpb25lZFN1ZmZpeDogZmFsc2V9PignSTE4Tl9DT05GSUdfVE9LRU4nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIEkxOG5Mb2FkZXJGYWN0b3J5KGh0dHA6IEh0dHBDbGllbnQpOiBUcmFuc2xhdGVMb2FkZXIge1xuICBjb25zdCB7cmVzb3VyY2VzLCB2ZXJzaW9uZWRTdWZmaXh9ID0gaW5qZWN0KEkxOE5fQ09ORklHX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IGdldEkxOG5Mb2FkZXJGYWN0b3J5UHJvdmlkZXJDb25maWcoKS51c2VWYWx1ZTtcbiAgcmV0dXJuIG5ldyBNdWx0aUkxOG5Mb2FkZXIoaHR0cCwgcmVzb3VyY2VzLCB2ZXJzaW9uZWRTdWZmaXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkxvYWRlckZhY3RvcnlQcm92aWRlckNvbmZpZyhyZXNvdXJjZXM6IEkxOG5SZXNvdXJjZUNvbmZpZyB8IEkxOG5SZXNvdXJjZUNvbmZpZ1tdID0gW10sIHZlcnNpb25lZFN1ZmZpeDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIGlmKCFBcnJheS5pc0FycmF5KHJlc291cmNlcykpXG4gICAgcmVzb3VyY2VzID0gW3Jlc291cmNlc107XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogSTE4Tl9DT05GSUdfVE9LRU4sXG4gICAgdXNlVmFsdWU6IHsgcmVzb3VyY2VzOiBbXG4gICAgICB7IHByZWZpeDogJy4vYXNzZXRzL2kxOG4vJywgc3VmZml4OiAnLmpzb24nIH0sXG4gICAgICAuLi5yZXNvdXJjZXNcbiAgICBdLCB2ZXJzaW9uZWRTdWZmaXh9XG4gIH1cbn1cblxuY29uc3QgbGliTGFuZ3VhZ2U6IFJlY29yZDxzdHJpbmcsIFRyYW5zbGF0aW9uT2JqZWN0PiA9IHtlbn07XG5cbmV4cG9ydCBjbGFzcyBNdWx0aUkxOG5Mb2FkZXIgaW1wbGVtZW50cyBJMThuTG9hZGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHJlc291cmNlczogSTE4blJlc291cmNlQ29uZmlnW10gPSBbXSwgcHJpdmF0ZSB2ZXJzaW9uZWRTdWZmaXg6IGJvb2xlYW4gPSBmYWxzZSkge31cblxuICBwcml2YXRlIGdldFN1ZmZpeChzdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYoIXRoaXMudmVyc2lvbmVkU3VmZml4KVxuICAgICAgcmV0dXJuIHN1ZmZpeDtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIGAke3N1ZmZpeH0/dmVyc2lvbj0ke3RvZGF5LmdldEZ1bGxZZWFyKCl9JHt0b2RheS5nZXRNb250aCgpfSR7dG9kYXkuZ2V0RGF5KCl9YCBhcyBzdHJpbmc7XG4gIH1cblxuICBnZXRUcmFuc2xhdGlvbihsYW5nOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRyYW5zbGF0aW9uT2JqZWN0PiB7XG4gICAgY29uc3QgbGliS2V5cyA9IGxpYkxhbmd1YWdlW2xhbmddIHx8IGxpYkxhbmd1YWdlW1wiZW5cIl0gfHwge307XG4gICAgY29uc3QgaHR0cFJlcXVlc3RzJCA9IGZvcmtKb2luKFxuICAgICAgdGhpcy5yZXNvdXJjZXMubWFwKGNvbmZpZyA9PlxuICAgICAgICB0aGlzLmh0dHAuZ2V0PFRyYW5zbGF0aW9uT2JqZWN0PihcbiAgICAgICAgICBgJHtjb25maWcucHJlZml4fSR7bGFuZ30ke3RoaXMuZ2V0U3VmZml4KGNvbmZpZy5zdWZmaXgpfWBcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGh0dHBSZXF1ZXN0cyQucGlwZShcbiAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmxpYktleXMsXG4gICAgICAgICAgLi4ucmVzLnJlZHVjZSgoYWNjLCBjdXJyZW50KSA9PiAoeyAuLi5hY2MsIC4uLmN1cnJlbnQgfSksIHt9KVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|