@lumeer/pivot 0.0.11 → 0.0.13
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/esm2022/lib/directives/lmr-templates.directive.mjs +8 -8
- package/esm2022/lib/lmr-pivot-table.component.mjs +5 -5
- package/esm2022/lib/lmr-pivot-table.module.mjs +4 -4
- package/esm2022/lib/lmr-simple-pivot-table.component.mjs +4 -4
- package/esm2022/lib/pipes/cell-has-value.pipe.mjs +3 -3
- package/esm2022/lib/pipes/contrast-color.pipe.mjs +4 -4
- package/esm2022/lib/pipes/filter-visible-cells.pipe.mjs +3 -3
- package/esm2022/lib/pipes/is-cell-expandable.pipe.mjs +3 -3
- package/esm2022/lib/pipes/is-cell-expanded.pipe.mjs +4 -4
- package/esm2022/lib/pipes/is-cell-rows-expandable.pipe.mjs +3 -3
- package/esm2022/lib/pipes/pivot-data-empty.pipe.mjs +3 -3
- package/esm2022/lib/util/lmr-pivot-state.mjs +2 -2
- package/esm2022/lib/util/pivot-data-converter.mjs +1 -1
- package/esm2022/lib/util/pivot-table-converter.mjs +1 -2
- package/esm2022/lib/util/pivot-util.mjs +1 -1
- package/fesm2022/lumeer-pivot.mjs +42 -43
- package/fesm2022/lumeer-pivot.mjs.map +1 -1
- package/lumeer-pivot-0.0.13.tgz +0 -0
- package/package.json +4 -4
- package/lumeer-pivot-0.0.11.tgz +0 -0
|
@@ -504,4 +504,4 @@ function canMergeConfigsByType(type, c1, c2) {
|
|
|
504
504
|
return ((c1.rowAttributes || []).length === (c2.rowAttributes || []).length &&
|
|
505
505
|
(c1.columnAttributes || []).length === (c2.columnAttributes || []).length);
|
|
506
506
|
}
|
|
507
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sbXItcGl2b3QtdGFibGUvc3JjL2xpYi91dGlsL3Bpdm90LWRhdGEtY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE9BQU8sRUFPTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsRUFJZCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUF3RCxzQkFBc0IsRUFBRSxnQ0FBZ0MsR0FDMUksTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQVNwRCxJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDbEIseURBQU0sQ0FBQTtJQUNOLHFEQUFJLENBQUE7SUFDSiwyREFBTyxDQUFBO0lBQ1AseUVBQWMsQ0FBQTtBQUNoQixDQUFDLEVBTEksZUFBZSxLQUFmLGVBQWUsUUFLbkI7QUFpQkQsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixXQUFXLENBQWU7SUFDMUIsU0FBUyxDQUFhO0lBQ3RCLHdCQUF3QixDQUE0QztJQUNwRSxzQkFBc0IsQ0FBNEM7SUFDbEUsSUFBSSxDQUF3QjtJQUM1QixNQUFNLENBQWlCO0lBQ3ZCLFNBQVMsQ0FBb0I7SUFDN0IsY0FBYyxDQUFpQjtJQUUvQixjQUFjLENBQWlCO0lBRXZDO1FBQ0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FDeEYsSUFBSSxDQUFDLGdCQUFn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RSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUNsRjtJQUNELE9BQU8sQ0FDTCxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ25FLENBQUMsRUFBRSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQzFFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEx1bWVlcjogTW9kZXJuIERhdGEgRGVmaW5pdGlvbiBhbmQgUHJvY2Vzc2luZyBQbGF0Zm9ybVxuICpcbiAqIENvcHlyaWdodCAoQykgc2luY2UgMjAxNyBMdW1lZXIuaW8sIHMuci5vLiBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBZ2dyZWdhdGVkRGF0YU1hcCxcbiAgQWdncmVnYXRlZERhdGFWYWx1ZXMsXG4gIEFnZ3JlZ2F0ZWRNYXBEYXRhLFxuICBDb25zdHJhaW50LFxuICBDb25zdHJhaW50RGF0YSxcbiAgQ29uc3RyYWludFR5cGUsXG4gIERhdGFBZ2dyZWdhdGlvblR5cGUsXG4gIERhdGFBZ2dyZWdhdG9yLFxuICBEYXRhQWdncmVnYXRvckF0dHJpYnV0ZSxcbiAgRGF0YVZhbHVlLFxuICBEb2N1bWVudHNBbmRMaW5rc0RhdGEsXG4gIFVua25vd25Db25zdHJhaW50LFxuICBhZ2dyZWdhdGVEYXRhUmVzb3VyY2VzLFxuICBkYXRhQWdncmVnYXRpb25Db25zdHJhaW50LCBRdWVyeVN0ZW0sIENvbGxlY3Rpb24sIExpbmtUeXBlLCBEYXRhUmVzb3VyY2UsIFF1ZXJ5LCBBdHRyaWJ1dGVzUmVzb3VyY2VUeXBlLCBhdHRyaWJ1dGVzUmVzb3VyY2VzQXR0cmlidXRlc01hcCxcbn0gZnJvbSAnQGx1bWVlci9kYXRhLWZpbHRlcnMnO1xuaW1wb3J0IHtkZWVwT2JqZWN0c0VxdWFscywgZmxhdHRlbk1hdHJpeCwgZmxhdHRlblZhbHVlcywgaXNBcnJheSwgaXNOb3ROdWxsT3JVbmRlZmluZWQsIHVuaXF1ZVZhbHVlc30gZnJvbSAnQGx1bWVlci91dGlscyc7XG5pbXBvcnQge0xtclBpdm90QXR0cmlidXRlLCBMbXJQaXZvdENvbmZpZywgTG1yUGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUsIExtclBpdm90U3RlbUNvbmZpZywgTG1yUGl2b3RUcmFuc2Zvcm0sIExtclBpdm90VmFsdWVBdHRyaWJ1dGV9IGZyb20gJy4vbG1yLXBpdm90LWNvbmZpZyc7XG5pbXBvcnQge0xtclBpdm90RGF0YSwgTG1yUGl2b3REYXRhSGVhZGVyLCBMbXJQaXZvdERpbWVuc2lvbkNvbmZpZywgTG1yUGl2b3RIZWFkZXJBdHRyaWJ1dGUsIExtclBpdm90U3RlbURhdGF9IGZyb20gJy4vbG1yLXBpdm90LWRhdGEnO1xuaW1wb3J0IHtwaXZvdFN0ZW1Db25maWdJc0VtcHR5fSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuXG5pbnRlcmZhY2UgUGl2b3RNZXJnZURhdGEge1xuICBjb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXTtcbiAgc3RlbXM6IFF1ZXJ5U3RlbVtdO1xuICBzdGVtc0luZGV4ZXM6IG51bWJlcltdO1xuICB0eXBlOiBQaXZvdENvbmZpZ1R5cGU7XG59XG5cbmVudW0gUGl2b3RDb25maWdUeXBlIHtcbiAgVmFsdWVzLFxuICBSb3dzLFxuICBDb2x1bW5zLFxuICBSb3dzQW5kQ29sdW1ucyxcbn1cblxuaW50ZXJmYWNlIFBpdm90Q29sb3JzIHtcbiAgcm93czogc3RyaW5nW107XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgUGl2b3RDb25maWdEYXRhIHtcbiAgcm93c0NvbmZpZzogTG1yUGl2b3REaW1lbnNpb25Db25maWdbXTtcbiAgcm93U2hvd0hlYWRlckF0dHJpYnV0ZXM6IGJvb2xlYW5bXTtcbiAgY29sdW1uc0NvbmZpZzogTG1yUGl2b3REaW1lbnNpb25Db25maWdbXTtcbiAgY29sdW1uU2hvd0hlYWRlckF0dHJpYnV0ZXM6IGJvb2xlYW5bXTtcbiAgcm93QXR0cmlidXRlczogQXR0cmlidXRlW107XG4gIGNvbHVtbkF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgUGl2b3REYXRhQ29udmVydGVyIHtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdO1xuICBwcml2YXRlIGxpbmtUeXBlczogTGlua1R5cGVbXTtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uc0F0dHJpYnV0ZXNNYXA6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZT4+O1xuICBwcml2YXRlIGxpbmtUeXBlc0F0dHJpYnV0ZXNNYXA6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZT4+O1xuICBwcml2YXRlIGRhdGE6IERvY3VtZW50c0FuZExpbmtzRGF0YTtcbiAgcHJpdmF0ZSBjb25maWc6IExtclBpdm90Q29uZmlnO1xuICBwcml2YXRlIHRyYW5zZm9ybTogTG1yUGl2b3RUcmFuc2Zvcm07XG4gIHByaXZhdGUgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhO1xuXG4gIHByaXZhdGUgZGF0YUFnZ3JlZ2F0b3I6IERhdGFBZ2dyZWdhdG9yO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGF0YUFnZ3JlZ2F0b3IgPSBuZXcgRGF0YUFnZ3JlZ2F0b3IoKHZhbHVlLCBjb25zdHJhaW50LCBkYXRhLCBhZ2dyZWdhdG9yQXR0cmlidXRlKSA9PlxuICAgICAgdGhpcy5mb3JtYXRQaXZvdFZhbHVlKHZhbHVlLCBjb25zdHJhaW50LCBkYXRhLCBhZ2dyZWdhdG9yQXR0cmlidXRlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFBpdm90VmFsdWUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBjb25zdHJhaW50OiBDb25zdHJhaW50LFxuICAgIGNvbnN0cmFpbnREYXRhOiBDb25zdHJhaW50RGF0YSxcbiAgICBhZ2dyZWdhdG9yQXR0cmlidXRlOiBEYXRhQWdncmVnYXRvckF0dHJpYnV0ZVxuICApOiBhbnkge1xuICAgIGNvbnN0IHBpdm90Q29uc3RyYWludCA9IGFnZ3JlZ2F0b3JBdHRyaWJ1dGUuZGF0YSAmJiAoYWdncmVnYXRvckF0dHJpYnV0ZS5kYXRhIGFzIENvbnN0cmFpbnQpO1xuICAgIGNvbnN0IG92ZXJyaWRlQ29uc3RyYWludCA9XG4gICAgICBwaXZvdENvbnN0cmFpbnQgJiYgdGhpcy50cmFuc2Zvcm0/LmNoZWNrVmFsaWRDb25zdHJhaW50T3ZlcnJpZGU/Lihjb25zdHJhaW50LCBwaXZvdENvbnN0cmFpbnQpO1xuICAgIGNvbnN0IGZpbmFsQ29uc3RyYWludCA9IG92ZXJyaWRlQ29uc3RyYWludCB8fCBjb25zdHJhaW50IHx8IG5ldyBVbmtub3duQ29uc3RyYWludCgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IChjb25zdHJhaW50IHx8IG5ldyBVbmtub3duQ29uc3RyYWludCgpKS5jcmVhdGVEYXRhVmFsdWUodmFsdWUsIGNvbnN0cmFpbnREYXRhKS5zZXJpYWxpemUoKVxuICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGFWYWx1ZShmaW5hbENvbnN0cmFpbnQuY3JlYXRlRGF0YVZhbHVlKHNlcmlhbGl6ZWRWYWx1ZSwgY29uc3RyYWludERhdGEpLCBmaW5hbENvbnN0cmFpbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRhVmFsdWUoZGF0YVZhbHVlOiBEYXRhVmFsdWUsIGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQpOiBhbnkge1xuICAgIHN3aXRjaCAoY29uc3RyYWludC50eXBlKSB7XG4gICAgICBjYXNlIENvbnN0cmFpbnRUeXBlLkRhdGVUaW1lOlxuICAgICAgICByZXR1cm4gZGF0YVZhbHVlLmZvcm1hdCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRhdGFWYWx1ZS5zZXJpYWxpemUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGEoXG4gICAgY29uZmlnOiBMbXJQaXZvdENvbmZpZyxcbiAgICB0cmFuc2Zvcm06IExtclBpdm90VHJhbnNmb3JtLFxuICAgIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uW10sXG4gICAgbGlua1R5cGVzOiBMaW5rVHlwZVtdLFxuICAgIGRhdGE6IERvY3VtZW50c0FuZExpbmtzRGF0YSxcbiAgICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGFcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgdGhpcy5jb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zO1xuICAgIHRoaXMubGlua1R5cGVzID0gbGlua1R5cGVzO1xuICAgIHRoaXMuY29sbGVjdGlvbnNBdHRyaWJ1dGVzTWFwID0gYXR0cmlidXRlc1Jlc291cmNlc0F0dHJpYnV0ZXNNYXAoY29sbGVjdGlvbnMpO1xuICAgIHRoaXMubGlua1R5cGVzQXR0cmlidXRlc01hcCA9IGF0dHJpYnV0ZXNSZXNvdXJjZXNBdHRyaWJ1dGVzTWFwKGxpbmtUeXBlcyk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmNvbnN0cmFpbnREYXRhID0gY29uc3RyYWludERhdGE7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRGF0YShcbiAgICBjb25maWc6IExtclBpdm90Q29uZmlnLFxuICAgIHRyYW5zZm9ybTogTG1yUGl2b3RUcmFuc2Zvcm0sXG4gICAgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25bXSxcbiAgICBsaW5rVHlwZXM6IExpbmtUeXBlW10sXG4gICAgZGF0YTogRG9jdW1lbnRzQW5kTGlua3NEYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICBjb25zdHJhaW50RGF0YT86IENvbnN0cmFpbnREYXRhXG4gICk6IExtclBpdm90RGF0YSB7XG4gICAgdGhpcy51cGRhdGVEYXRhKGNvbmZpZywgdHJhbnNmb3JtLCBjb2xsZWN0aW9ucywgbGlua1R5cGVzLCBkYXRhLCBjb25zdHJhaW50RGF0YSk7XG5cbiAgICBjb25zdCB7c3RlbXNDb25maWdzLCBzdGVtc30gPSB0aGlzLmZpbHRlckVtcHR5Q29uZmlncyhjb25maWcsIHF1ZXJ5KTtcblxuICAgIGNvbnN0IG1lcmdlRGF0YSA9IHRoaXMuY3JlYXRlUGl2b3RNZXJnZURhdGEoY29uZmlnLm1lcmdlVGFibGVzLCBzdGVtc0NvbmZpZ3MsIHN0ZW1zKTtcbiAgICBjb25zdCBhYmxlVG9NZXJnZSA9IG1lcmdlRGF0YS5sZW5ndGggPD0gMTtcbiAgICBjb25zdCBwaXZvdERhdGEgPSB0aGlzLm1lcmdlUGl2b3REYXRhKG1lcmdlRGF0YSk7XG4gICAgcmV0dXJuIHtkYXRhOiBwaXZvdERhdGEsIGNvbnN0cmFpbnREYXRhLCBhYmxlVG9NZXJnZSwgbWVyZ2VUYWJsZXM6IGNvbmZpZy5tZXJnZVRhYmxlc307XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckVtcHR5Q29uZmlncyhjb25maWc6IExtclBpdm90Q29uZmlnLCBxdWVyeTogUXVlcnkpOiB7c3RlbXNDb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXTsgc3RlbXM6IFF1ZXJ5U3RlbVtdfSB7XG4gICAgcmV0dXJuIChjb25maWcuc3RlbXNDb25maWdzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAoe3N0ZW1zQ29uZmlncywgc3RlbXN9LCBzdGVtQ29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXBpdm90U3RlbUNvbmZpZ0lzRW1wdHkoc3RlbUNvbmZpZykpIHtcbiAgICAgICAgICBjb25zdCBzdGVtID0gKHF1ZXJ5LnN0ZW1zIHx8IFtdKVtpbmRleF07XG4gICAgICAgICAgc3RlbXNDb25maWdzLnB1c2goc3RlbUNvbmZpZyk7XG4gICAgICAgICAgc3RlbXMucHVzaChzdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7c3RlbXNDb25maWdzLCBzdGVtc307XG4gICAgICB9LFxuICAgICAge3N0ZW1zQ29uZmlnczogW10sIHN0ZW1zOiBbXX1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQaXZvdE1lcmdlRGF0YShcbiAgICBtZXJnZVRhYmxlczogYm9vbGVhbixcbiAgICBzdGVtc0NvbmZpZ3M6IExtclBpdm90U3RlbUNvbmZpZ1tdLFxuICAgIHN0ZW1zOiBRdWVyeVN0ZW1bXVxuICApOiBQaXZvdE1lcmdlRGF0YVtdIHtcbiAgICByZXR1cm4gc3RlbXNDb25maWdzLnJlZHVjZSgobWVyZ2VEYXRhOiBQaXZvdE1lcmdlRGF0YVtdLCBzdGVtQ29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnVHlwZSA9IGdldFBpdm90U3RlbUNvbmZpZ1R5cGUoc3RlbUNvbmZpZyk7XG4gICAgICBjb25zdCBtZXJnZURhdGFJbmRleCA9IG1lcmdlRGF0YS5maW5kSW5kZXgoXG4gICAgICAgIGRhdGEgPT4gZGF0YS50eXBlID09PSBjb25maWdUeXBlICYmIGNhbk1lcmdlQ29uZmlnc0J5VHlwZShkYXRhLnR5cGUsIGRhdGEuY29uZmlnc1swXSwgc3RlbUNvbmZpZylcbiAgICAgICk7XG4gICAgICBpZiAobWVyZ2VUYWJsZXMgJiYgbWVyZ2VEYXRhSW5kZXggPj0gMCkge1xuICAgICAgICBtZXJnZURhdGFbbWVyZ2VEYXRhSW5kZXhdLmNvbmZpZ3MucHVzaChzdGVtQ29uZmlnKTtcbiAgICAgICAgbWVyZ2VEYXRhW21lcmdlRGF0YUluZGV4XS5zdGVtcy5wdXNoKHN0ZW1zW2luZGV4XSk7XG4gICAgICAgIG1lcmdlRGF0YVttZXJnZURhdGFJbmRleF0uc3RlbXNJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VEYXRhLnB1c2goe2NvbmZpZ3M6IFtzdGVtQ29uZmlnXSwgc3RlbXM6IFtzdGVtc1tpbmRleF1dLCBzdGVtc0luZGV4ZXM6IFtpbmRleF0sIHR5cGU6IGNvbmZpZ1R5cGV9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlRGF0YTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUGl2b3REYXRhKG1lcmdlRGF0YTogUGl2b3RNZXJnZURhdGFbXSk6IExtclBpdm90U3RlbURhdGFbXSB7XG4gICAgcmV0dXJuIG1lcmdlRGF0YS5yZWR1Y2UoKHN0ZW1EYXRhLCBkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YS50eXBlID09PSBQaXZvdENvbmZpZ1R5cGUuVmFsdWVzKSB7XG4gICAgICAgIHN0ZW1EYXRhLnB1c2godGhpcy5jb252ZXJ0VmFsdWVBdHRyaWJ1dGVzKGRhdGEuY29uZmlncywgZGF0YS5zdGVtcywgZGF0YS5zdGVtc0luZGV4ZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZW1EYXRhLnB1c2godGhpcy50cmFuc2Zvcm1TdGVtcyhkYXRhLmNvbmZpZ3MsIGRhdGEuc3RlbXMsIGRhdGEuc3RlbXNJbmRleGVzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RlbURhdGE7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1TdGVtcyhjb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXSwgcXVlcnlTdGVtczogUXVlcnlTdGVtW10sIHN0ZW1zSW5kZXhlczogbnVtYmVyW10pOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgICBjb25zdCBwaXZvdENvbG9yczogUGl2b3RDb2xvcnMgPSB7cm93czogW10sIGNvbHVtbnM6IFtdLCB2YWx1ZXM6IFtdfTtcbiAgICBjb25zdCBtZXJnZWRWYWx1ZUF0dHJpYnV0ZXM6IExtclBpdm90VmFsdWVBdHRyaWJ1dGVbXSA9IFtdO1xuICAgIGxldCBtZXJnZWRBZ2dyZWdhdGVkRGF0YTogQWdncmVnYXRlZE1hcERhdGEgPSBudWxsO1xuICAgIGxldCBhZGRpdGlvbmFsRGF0YTogUGl2b3RDb25maWdEYXRhO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdzW2ldO1xuICAgICAgY29uc3QgcXVlcnlTdGVtID0gcXVlcnlTdGVtc1tpXTtcbiAgICAgIGNvbnN0IHN0ZW1JbmRleCA9IHN0ZW1zSW5kZXhlc1tpXTtcbiAgICAgIGNvbnN0IHN0ZW1EYXRhID0gdGhpcy5kYXRhPy5kYXRhQnlTdGVtcz8uW3N0ZW1JbmRleF07XG5cbiAgICAgIHRoaXMuZGF0YUFnZ3JlZ2F0b3IudXBkYXRlRGF0YShcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyxcbiAgICAgICAgc3RlbURhdGE/LmRvY3VtZW50cyB8fCBbXSxcbiAgICAgICAgdGhpcy5saW5rVHlwZXMsXG4gICAgICAgIHN0ZW1EYXRhPy5saW5rSW5zdGFuY2VzIHx8IFtdLFxuICAgICAgICBxdWVyeVN0ZW0sXG4gICAgICAgIHRoaXMuY29uc3RyYWludERhdGFcbiAgICAgICk7XG4gICAgICBjb25zdCByb3dBdHRyaWJ1dGVzID0gKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+XG4gICAgICAgIHRoaXMuY29udmVydFBpdm90Um93Q29sdW1uQXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICk7XG4gICAgICBjb25zdCBjb2x1bW5BdHRyaWJ1dGVzID0gKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+XG4gICAgICAgIHRoaXMuY29udmVydFBpdm90Um93Q29sdW1uQXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICk7XG4gICAgICBjb25zdCB2YWx1ZUF0dHJpYnV0ZXMgPSAoY29uZmlnLnZhbHVlQXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHJpYnV0ZSA9PiB0aGlzLmNvbnZlcnRQaXZvdEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTtcblxuICAgICAgcGl2b3RDb2xvcnMucm93cy5wdXNoKC4uLnRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyhjb25maWcucm93QXR0cmlidXRlcykpO1xuICAgICAgcGl2b3RDb2xvcnMuY29sdW1ucy5wdXNoKC4uLnRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyhjb25maWcuY29sdW1uQXR0cmlidXRlcykpO1xuICAgICAgcGl2b3RDb2xvcnMudmFsdWVzLnB1c2goLi4udGhpcy5nZXRBdHRyaWJ1dGVzQ29sb3JzKGNvbmZpZy52YWx1ZUF0dHJpYnV0ZXMpKTtcblxuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGEgPSB0aGlzLmRhdGFBZ2dyZWdhdG9yLmFnZ3JlZ2F0ZShyb3dBdHRyaWJ1dGVzLCBjb2x1bW5BdHRyaWJ1dGVzLCB2YWx1ZUF0dHJpYnV0ZXMpO1xuICAgICAgbWVyZ2VkQWdncmVnYXRlZERhdGEgPSB0aGlzLm1lcmdlQWdncmVnYXRlZERhdGEobWVyZ2VkQWdncmVnYXRlZERhdGEsIGFnZ3JlZ2F0ZWREYXRhKTtcblxuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZUF0dHJpYnV0ZXMgPSAoY29uZmlnLnZhbHVlQXR0cmlidXRlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICB2YWx1ZUF0dHIgPT4gIW1lcmdlZFZhbHVlQXR0cmlidXRlcy5zb21lKG1lckF0dHIgPT4gZGVlcE9iamVjdHNFcXVhbHModmFsdWVBdHRyLCBtZXJBdHRyKSlcbiAgICAgICk7XG4gICAgICBtZXJnZWRWYWx1ZUF0dHJpYnV0ZXMucHVzaCguLi5maWx0ZXJlZFZhbHVlQXR0cmlidXRlcyk7XG5cbiAgICAgIGlmICghYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgY29uc3Qgcm93U3RpY2t5ID0gdGhpcy5tYXBTdGlja3lWYWx1ZXMoKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiBhdHRyLnN0aWNreSkpO1xuICAgICAgICBjb25zdCBjb2x1bW5TdGlja3kgPSB0aGlzLm1hcFN0aWNreVZhbHVlcygoY29uZmlnLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IGF0dHIuc3RpY2t5KSk7XG4gICAgICAgIGFkZGl0aW9uYWxEYXRhID0ge1xuICAgICAgICAgIHJvd3NDb25maWc6IChjb25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubWFwKChhdHRyLCBpbmRleCkgPT4gKHtzaG93U3VtczogYXR0ci5zaG93U3Vtcywgc29ydDogYXR0ci5zb3J0LCBleHByZXNzaW9uczogYXR0ci5leHByZXNzaW9ucywgc3RpY2t5OiByb3dTdGlja3lbaW5kZXhdfSkpLFxuICAgICAgICAgIGNvbHVtbnNDb25maWc6IChjb25maWcuY29sdW1uQXR0cmlidXRlcyB8fCBbXSkubWFwKChhdHRyLCBpbmRleCkgPT4gKHtzaG93U3VtczogYXR0ci5zaG93U3Vtcywgc29ydDogYXR0ci5zb3J0LCBleHByZXNzaW9uczogYXR0ci5leHByZXNzaW9ucywgc3RpY2t5OiBjb2x1bW5TdGlja3lbaW5kZXhdfSkpLFxuICAgICAgICAgIHJvd1Nob3dIZWFkZXJBdHRyaWJ1dGVzOiAoY29uZmlnLnJvd0F0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IGF0dHIuc2hvd0hlYWRlciksXG4gICAgICAgICAgcm93QXR0cmlidXRlczogKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiB0aGlzLnBpdm90QXR0cmlidXRlQXR0cmlidXRlKGF0dHIpKSxcbiAgICAgICAgICBjb2x1bW5TaG93SGVhZGVyQXR0cmlidXRlczogKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiBmYWxzZSksXG4gICAgICAgICAgY29sdW1uQXR0cmlidXRlczogKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiB0aGlzLnBpdm90QXR0cmlidXRlQXR0cmlidXRlKGF0dHIpKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0QWdncmVnYXRlZERhdGEobWVyZ2VkQWdncmVnYXRlZERhdGEsIG1lcmdlZFZhbHVlQXR0cmlidXRlcywgcGl2b3RDb2xvcnMsIGFkZGl0aW9uYWxEYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3RpY2t5VmFsdWVzKHZhbHVlczogYm9vbGVhbltdKTogYm9vbGVhbltdIHtcbiAgICAvLyB3ZSBzdXBwb3J0IG9ubHkgc3RpY2t5IHJvd3MvY29sdW1ucyBpbiBhIHJvd1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChzdGlja3lWYWx1ZXMsIHN0aWNreSwgaW5kZXgpID0+IHtcbiAgICAgIHN0aWNreVZhbHVlcy5wdXNoKHN0aWNreSAmJiAoaW5kZXggPT09IDAgfHwgc3RpY2t5VmFsdWVzW2luZGV4IC0gMV0pKTtcbiAgICAgIHJldHVybiBzdGlja3lWYWx1ZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBwaXZvdEF0dHJpYnV0ZUNvbnN0cmFpbnQocGl2b3RBdHRyaWJ1dGU6IExtclBpdm90QXR0cmlidXRlKTogQ29uc3RyYWludCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5maW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZSk7XG4gICAgY29uc3QgY29uc3RyYWludCA9IGF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuY29uc3RyYWludDtcbiAgICBjb25zdCBvdmVycmlkZUNvbnN0cmFpbnQgPVxuICAgICAgcGl2b3RBdHRyaWJ1dGUuY29uc3RyYWludCAmJlxuICAgICAgdGhpcy50cmFuc2Zvcm0/LmNoZWNrVmFsaWRDb25zdHJhaW50T3ZlcnJpZGU/Lihjb25zdHJhaW50LCBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50KTtcbiAgICByZXR1cm4gb3ZlcnJpZGVDb25zdHJhaW50IHx8IGNvbnN0cmFpbnQ7XG4gIH1cblxuICBwcml2YXRlIHBpdm90QXR0cmlidXRlQXR0cmlidXRlKHBpdm90QXR0cmlidXRlOiBMbXJQaXZvdEF0dHJpYnV0ZSk6IEF0dHJpYnV0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5maW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZSk7XG4gICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IGF0dHJpYnV0ZT8uY29uc3RyYWludDtcbiAgICAgIGNvbnN0IG92ZXJyaWRlQ29uc3RyYWludCA9XG4gICAgICAgIHBpdm90QXR0cmlidXRlLmNvbnN0cmFpbnQgJiZcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0/LmNoZWNrVmFsaWRDb25zdHJhaW50T3ZlcnJpZGU/Lihjb25zdHJhaW50LCBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7Li4uYXR0cmlidXRlLCBjb25zdHJhaW50OiBvdmVycmlkZUNvbnN0cmFpbnQgfHwgY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKX07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQWdncmVnYXRlZERhdGEoYTE6IEFnZ3JlZ2F0ZWRNYXBEYXRhLCBhMjogQWdncmVnYXRlZE1hcERhdGEpOiBBZ2dyZWdhdGVkTWFwRGF0YSB7XG4gICAgaWYgKCFhMSB8fCAhYTIpIHtcbiAgICAgIHJldHVybiBhMSB8fCBhMjtcbiAgICB9XG5cbiAgICB0aGlzLm1lcmdlTWFwcyhhMS5tYXAsIGEyLm1hcCk7XG4gICAgdGhpcy5tZXJnZU1hcHMoYTEuY29sdW1uc01hcCwgYTIuY29sdW1uc01hcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcDogYTEubWFwLFxuICAgICAgY29sdW1uc01hcDogYTEuY29sdW1uc01hcCxcbiAgICAgIHJvd0xldmVsczogTWF0aC5tYXgoYTEucm93TGV2ZWxzLCBhMi5yb3dMZXZlbHMpLFxuICAgICAgY29sdW1uTGV2ZWxzOiBNYXRoLm1heChhMS5jb2x1bW5MZXZlbHMsIGEyLmNvbHVtbkxldmVscyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VNYXBzKG0xOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtMjogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIE9iamVjdC5rZXlzKG0yKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAobTFba2V5XSkge1xuICAgICAgICBpZiAoaXNBcnJheShtMVtrZXldKSAmJiBpc0FycmF5KG0yW2tleV0pKSB7XG4gICAgICAgICAgbTFba2V5XS5wdXNoKC4uLm0yW2tleV0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0FycmF5KG0xW2tleV0pICYmICFpc0FycmF5KG0yW2tleV0pKSB7XG4gICAgICAgICAgdGhpcy5tZXJnZU1hcHMobTFba2V5XSwgbTJba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG0xW2tleV0gPSBtMltrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVzQ29sb3JzKGF0dHJpYnV0ZXM6IExtclBpdm90QXR0cmlidXRlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIChhdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5kYXRhQWdncmVnYXRvci5nZXROZXh0Q29sbGVjdGlvblJlc291cmNlKGF0dHJpYnV0ZS5yZXNvdXJjZUluZGV4KTtcbiAgICAgIHJldHVybiByZXNvdXJjZSAmJiAoPENvbGxlY3Rpb24+cmVzb3VyY2UpLmNvbG9yO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGU6IExtclBpdm90Um93Q29sdW1uQXR0cmlidXRlKTogRGF0YUFnZ3JlZ2F0b3JBdHRyaWJ1dGUge1xuICAgIHJldHVybiB7Li4udGhpcy5jb252ZXJ0UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGUpLCBkYXRhOiBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50fTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFBpdm90QXR0cmlidXRlKHBpdm90QXR0cmlidXRlOiBMbXJQaXZvdEF0dHJpYnV0ZSk6IERhdGFBZ2dyZWdhdG9yQXR0cmlidXRlIHtcbiAgICByZXR1cm4ge3Jlc291cmNlSW5kZXg6IHBpdm90QXR0cmlidXRlLnJlc291cmNlSW5kZXgsIGF0dHJpYnV0ZUlkOiBwaXZvdEF0dHJpYnV0ZS5hdHRyaWJ1dGVJZH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZUF0dHJpYnV0ZXMoXG4gICAgY29uZmlnczogTG1yUGl2b3RTdGVtQ29uZmlnW10sXG4gICAgc3RlbXM6IFF1ZXJ5U3RlbVtdLFxuICAgIHN0ZW1zSW5kZXhlczogbnVtYmVyW11cbiAgKTogTG1yUGl2b3RTdGVtRGF0YSB7XG4gICAgY29uc3QgZGF0YSA9IGNvbmZpZ3MucmVkdWNlKFxuICAgICAgKGFsbERhdGEsIGNvbmZpZywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlbSA9IHN0ZW1zW2luZGV4XTtcbiAgICAgICAgY29uc3Qgc3RlbUluZGV4ID0gc3RlbXNJbmRleGVzW2luZGV4XTtcblxuICAgICAgICBjb25zdCBzdGVtRGF0YSA9IHRoaXMuZGF0YT8uZGF0YUJ5U3RlbXM/LltzdGVtSW5kZXhdO1xuICAgICAgICB0aGlzLmRhdGFBZ2dyZWdhdG9yLnVwZGF0ZURhdGEoXG4gICAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyxcbiAgICAgICAgICBzdGVtRGF0YT8uZG9jdW1lbnRzIHx8IFtdLFxuICAgICAgICAgIHRoaXMubGlua1R5cGVzLFxuICAgICAgICAgIHN0ZW1EYXRhPy5saW5rSW5zdGFuY2VzIHx8IFtdLFxuICAgICAgICAgIHN0ZW0sXG4gICAgICAgICAgdGhpcy5jb25zdHJhaW50RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlQXR0cmlidXRlcyA9IGNvbmZpZy52YWx1ZUF0dHJpYnV0ZXMgfHwgW107XG4gICAgICAgIGFsbERhdGEudmFsdWVUeXBlcy5wdXNoKC4uLnZhbHVlQXR0cmlidXRlcy5tYXAoYXR0ciA9PiBhdHRyLnZhbHVlVHlwZSkpO1xuICAgICAgICBjb25zdCB2YWx1ZUNvbG9ycyA9IHRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyh2YWx1ZUF0dHJpYnV0ZXMpO1xuXG4gICAgICAgIGNvbnN0IHt0aXRsZXMsIGNvbnN0cmFpbnRzfSA9IHRoaXMuY3JlYXRlVmFsdWVUaXRsZXModmFsdWVBdHRyaWJ1dGVzKTtcbiAgICAgICAgYWxsRGF0YS50aXRsZXMucHVzaCguLi50aXRsZXMpO1xuICAgICAgICBhbGxEYXRhLmNvbnN0cmFpbnRzLnB1c2goLi4uY29uc3RyYWludHMpO1xuXG4gICAgICAgIGNvbnN0IHtoZWFkZXJzfSA9IHRoaXMuY29udmVydE1hcFRvUGl2b3REYXRhSGVhZGVyKHt9LCAwLCBbXSwgdmFsdWVDb2xvcnMsIFtdLCB0aXRsZXMsIGFsbERhdGEuaGVhZGVycy5sZW5ndGgpO1xuICAgICAgICBhbGxEYXRhLmhlYWRlcnMucHVzaCguLi5oZWFkZXJzKTtcblxuICAgICAgICBhbGxEYXRhLmFnZ3JlZ2F0aW9ucyA9IFsuLi4odmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5tYXAodmFsdWVBdHRyaWJ1dGUgPT4gdmFsdWVBdHRyaWJ1dGUuYWdncmVnYXRpb24pXTtcblxuICAgICAgICBjb25zdCB7dmFsdWVzLCBkYXRhUmVzb3VyY2VzfSA9ICh2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLnJlZHVjZTx7dmFsdWVzOiBhbnlbXTsgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW11bXX0+KFxuICAgICAgICAgIChhZ2dyZWdhdG9yLCB2YWx1ZUF0dHJpYnV0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSZXNvdXJjZXMgPSB0aGlzLmZpbmREYXRhUmVzb3VyY2VzQnlQaXZvdEF0dHJpYnV0ZSh2YWx1ZUF0dHJpYnV0ZSk7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLmZpbmRBdHRyaWJ1dGVCeVBpdm90QXR0cmlidXRlKHZhbHVlQXR0cmlidXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYWdncmVnYXRlRGF0YVJlc291cmNlcyh2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbiwgZGF0YVJlc291cmNlcywgYXR0cmlidXRlLCB0cnVlKTtcbiAgICAgICAgICAgIGFnZ3JlZ2F0b3IudmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgYWdncmVnYXRvci5kYXRhUmVzb3VyY2VzLnB1c2goZGF0YVJlc291cmNlcyk7XG4gICAgICAgICAgICByZXR1cm4gYWdncmVnYXRvcjtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt2YWx1ZXM6IFtdLCBkYXRhUmVzb3VyY2VzOiBbXX1cbiAgICAgICAgKTtcblxuICAgICAgICBhbGxEYXRhLnZhbHVlcy5wdXNoKC4uLnZhbHVlcyk7XG4gICAgICAgIGFsbERhdGEuZGF0YVJlc291cmNlcy5wdXNoKC4uLmRhdGFSZXNvdXJjZXMpO1xuICAgICAgICByZXR1cm4gYWxsRGF0YTtcbiAgICAgIH0sXG4gICAgICB7dGl0bGVzOiBbXSwgY29uc3RyYWludHM6IFtdLCBoZWFkZXJzOiBbXSwgdmFsdWVzOiBbXSwgZGF0YVJlc291cmNlczogW10sIHZhbHVlVHlwZXM6IFtdLCBhZ2dyZWdhdGlvbnM6IFtdfVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uSGVhZGVyczogZGF0YS5oZWFkZXJzLFxuICAgICAgY29sdW1uSGVhZGVyQXR0cmlidXRlczogW10sXG4gICAgICByb3dIZWFkZXJzOiBbXSxcbiAgICAgIHJvd0hlYWRlckF0dHJpYnV0ZXM6IFtdLFxuICAgICAgdmFsdWVUaXRsZXM6IGRhdGEudGl0bGVzLFxuICAgICAgdmFsdWVzOiBbZGF0YS52YWx1ZXNdLFxuICAgICAgZGF0YVJlc291cmNlczogW2RhdGEuZGF0YVJlc291cmNlc10sXG4gICAgICB2YWx1ZXNDb25zdHJhaW50czogZGF0YS5jb25zdHJhaW50cyxcbiAgICAgIHZhbHVlVHlwZXM6IGRhdGEudmFsdWVUeXBlcyxcbiAgICAgIHZhbHVlQWdncmVnYXRpb25zOiBkYXRhLmFnZ3JlZ2F0aW9ucyxcblxuICAgICAgcm93c0NvbmZpZzogW10sXG4gICAgICBjb2x1bW5zQ29uZmlnOiBbXSxcblxuICAgICAgaGFzQWRkaXRpb25hbENvbHVtbkxldmVsOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZpbmREYXRhUmVzb3VyY2VzQnlQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBEYXRhUmVzb3VyY2VbXSB7XG4gICAgaWYgKHBpdm90QXR0cmlidXRlLnJlc291cmNlVHlwZSA9PT0gQXR0cmlidXRlc1Jlc291cmNlVHlwZS5Db2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZGF0YT8udW5pcXVlRG9jdW1lbnRzIHx8IFtdKS5maWx0ZXIoZG9jdW1lbnQgPT4gZG9jdW1lbnQuY29sbGVjdGlvbklkID09PSBwaXZvdEF0dHJpYnV0ZS5yZXNvdXJjZUlkKTtcbiAgICB9IGVsc2UgaWYgKHBpdm90QXR0cmlidXRlLnJlc291cmNlVHlwZSA9PT0gQXR0cmlidXRlc1Jlc291cmNlVHlwZS5MaW5rVHlwZSkge1xuICAgICAgcmV0dXJuICh0aGlzLmRhdGE/LnVuaXF1ZUxpbmtJbnN0YW5jZXMgfHwgW10pLmZpbHRlcihsaW5rID0+IGxpbmsubGlua1R5cGVJZCA9PT0gcGl2b3RBdHRyaWJ1dGUucmVzb3VyY2VJZCk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEFnZ3JlZ2F0ZWREYXRhKFxuICAgIGFnZ3JlZ2F0ZWREYXRhOiBBZ2dyZWdhdGVkTWFwRGF0YSxcbiAgICB2YWx1ZUF0dHJpYnV0ZXM6IExtclBpdm90VmFsdWVBdHRyaWJ1dGVbXSxcbiAgICBwaXZvdENvbG9yczogUGl2b3RDb2xvcnMsXG4gICAgYWRkaXRpb25hbERhdGE6IFBpdm90Q29uZmlnRGF0YVxuICApOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgICBjb25zdCByb3dEYXRhID0gdGhpcy5jb252ZXJ0TWFwVG9QaXZvdERhdGFIZWFkZXIoXG4gICAgICBhZ2dyZWdhdGVkRGF0YS5tYXAsXG4gICAgICBhZ2dyZWdhdGVkRGF0YS5yb3dMZXZlbHMsXG4gICAgICBwaXZvdENvbG9ycy5yb3dzLFxuICAgICAgcGl2b3RDb2xvcnMudmFsdWVzLFxuICAgICAgYWRkaXRpb25hbERhdGEucm93QXR0cmlidXRlc1xuICAgICk7XG4gICAgY29uc3Qgcm93SGVhZGVyQXR0cmlidXRlczogTG1yUGl2b3RIZWFkZXJBdHRyaWJ1dGVbXSA9IChhZGRpdGlvbmFsRGF0YS5yb3dBdHRyaWJ1dGVzIHx8IFtdKVxuICAgICAgLm1hcCgoYXR0cmlidXRlLCBpbmRleCkgPT4gYWRkaXRpb25hbERhdGEucm93U2hvd0hlYWRlckF0dHJpYnV0ZXM/LltpbmRleF0gPyAoe3RpdGxlOiBhdHRyaWJ1dGUubmFtZSwgY29sb3I6IHBpdm90Q29sb3JzLnJvd3M/LltpbmRleF19KSA6IHVuZGVmaW5lZClcblxuICAgIGNvbnN0IHt0aXRsZXM6IHZhbHVlVGl0bGVzLCBjb25zdHJhaW50czogdmFsdWVzQ29uc3RyYWludHN9ID0gdGhpcy5jcmVhdGVWYWx1ZVRpdGxlcyh2YWx1ZUF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmNvbnZlcnRNYXBUb1Bpdm90RGF0YUhlYWRlcihcbiAgICAgIGFnZ3JlZ2F0ZWREYXRhLnJvd0xldmVscyA+IDAgPyBhZ2dyZWdhdGVkRGF0YS5jb2x1bW5zTWFwIDogYWdncmVnYXRlZERhdGEubWFwLFxuICAgICAgYWdncmVnYXRlZERhdGEuY29sdW1uTGV2ZWxzLFxuICAgICAgcGl2b3RDb2xvcnMuY29sdW1ucyxcbiAgICAgIHBpdm90Q29sb3JzLnZhbHVlcyxcbiAgICAgIGFkZGl0aW9uYWxEYXRhLmNvbHVtbkF0dHJpYnV0ZXMsXG4gICAgICB2YWx1ZVRpdGxlc1xuICAgICk7XG4gICAgY29uc3QgY29sdW1uSGVhZGVyQXR0cmlidXRlczogTG1yUGl2b3RIZWFkZXJBdHRyaWJ1dGVbXSA9IChhZGRpdGlvbmFsRGF0YS5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKVxuICAgICAgLm1hcCgoYXR0cmlidXRlLCBpbmRleCkgPT4gIGFkZGl0aW9uYWxEYXRhLmNvbHVtblNob3dIZWFkZXJBdHRyaWJ1dGVzPy5baW5kZXhdID8gKHt0aXRsZTogYXR0cmlidXRlLm5hbWUsIGNvbG9yOiBwaXZvdENvbG9ycy5jb2x1bW5zPy5baW5kZXhdfSkgOiB1bmRlZmluZWQpXG5cbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmluaXRNYXRyaXg8bnVtYmVyPihyb3dEYXRhLm1heEluZGV4ICsgMSwgY29sdW1uRGF0YS5tYXhJbmRleCArIDEpO1xuICAgIGNvbnN0IGRhdGFSZXNvdXJjZXMgPSB0aGlzLmluaXRNYXRyaXg8RGF0YVJlc291cmNlW10+KHJvd0RhdGEubWF4SW5kZXggKyAxLCBjb2x1bW5EYXRhLm1heEluZGV4ICsgMSk7XG4gICAgaWYgKCh2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsbFZhbHVlcyh2YWx1ZXMsIGRhdGFSZXNvdXJjZXMsIHJvd0RhdGEuaGVhZGVycywgY29sdW1uRGF0YS5oZWFkZXJzLCB2YWx1ZUF0dHJpYnV0ZXMsIGFnZ3JlZ2F0ZWREYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUFnZ3JlZ2F0aW9ucyA9ICh2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLm1hcCh2YWx1ZUF0dHJpYnV0ZSA9PiB2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbik7XG5cbiAgICBjb25zdCBoYXNBZGRpdGlvbmFsQ29sdW1uTGV2ZWwgPVxuICAgICAgKGFnZ3JlZ2F0ZWREYXRhLmNvbHVtbkxldmVscyA9PT0gMCAmJiB2YWx1ZVRpdGxlcy5sZW5ndGggPiAwKSB8fFxuICAgICAgKGFnZ3JlZ2F0ZWREYXRhLmNvbHVtbkxldmVscyA+IDAgJiYgdmFsdWVUaXRsZXMubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0hlYWRlcnM6IHJvd0RhdGEuaGVhZGVycyxcbiAgICAgIHJvd0hlYWRlckF0dHJpYnV0ZXMsXG4gICAgICBjb2x1bW5IZWFkZXJzOiBjb2x1bW5EYXRhLmhlYWRlcnMsXG4gICAgICBjb2x1bW5IZWFkZXJBdHRyaWJ1dGVzLFxuICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICB2YWx1ZXMsXG4gICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgdmFsdWVzQ29uc3RyYWludHMsXG4gICAgICB2YWx1ZUFnZ3JlZ2F0aW9ucyxcblxuICAgICAgLi4uYWRkaXRpb25hbERhdGEsXG5cbiAgICAgIHZhbHVlVHlwZXM6IHZhbHVlQXR0cmlidXRlcy5tYXAoYXR0ciA9PiBhdHRyLnZhbHVlVHlwZSEpLFxuICAgICAgaGFzQWRkaXRpb25hbENvbHVtbkxldmVsLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRNYXBUb1Bpdm90RGF0YUhlYWRlcihcbiAgICBtYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgbGV2ZWxzOiBudW1iZXIsXG4gICAgY29sb3JzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZUNvbG9yczogc3RyaW5nW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlW10sXG4gICAgdmFsdWVUaXRsZXM/OiBzdHJpbmdbXSxcbiAgICBhZGRpdGlvbmFsTnVtOiBudW1iZXIgPSAwXG4gICk6IHtoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXTsgbWF4SW5kZXg6IG51bWJlcn0ge1xuICAgIGNvbnN0IGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdID0gW107XG4gICAgY29uc3QgZGF0YSA9IHttYXhJbmRleDogMH07XG4gICAgaWYgKGxldmVscyA9PT0gMCkge1xuICAgICAgaWYgKCh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgICBoZWFkZXJzLnB1c2goXG4gICAgICAgICAgLi4udmFsdWVUaXRsZXMhLm1hcCgodGl0bGUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogaW5kZXggKyBhZGRpdGlvbmFsTnVtLFxuICAgICAgICAgICAgY29sb3I6IHZhbHVlQ29sb3JzW2luZGV4XSxcbiAgICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IHRydWUsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICAgIGRhdGEubWF4SW5kZXggPSB2YWx1ZVRpdGxlcyEubGVuZ3RoIC0gMSArIGFkZGl0aW9uYWxOdW07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjdXJyZW50SW5kZXggPSBhZGRpdGlvbmFsTnVtO1xuICAgICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKCh0aXRsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzWzBdO1xuICAgICAgICBpZiAobGV2ZWxzID09PSAxICYmICh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goe1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yc1swXSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IGZhbHNlLFxuICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlPy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRhdGEubWF4SW5kZXggPSBNYXRoLm1heChkYXRhLm1heEluZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbMF0sXG4gICAgICAgICAgICBjb25zdHJhaW50OiBhdHRyaWJ1dGU/LmNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCksXG4gICAgICAgICAgICBpc1ZhbHVlSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGF0dHJpYnV0ZT8ubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hQaXZvdERhdGFIZWFkZXIoXG4gICAgICAgICAgbWFwW3RpdGxlXSxcbiAgICAgICAgICBoZWFkZXJzW2luZGV4XSxcbiAgICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgMSxcbiAgICAgICAgICBsZXZlbHMsXG4gICAgICAgICAgY29sb3JzLFxuICAgICAgICAgIHZhbHVlQ29sb3JzLFxuICAgICAgICAgIHZhbHVlVGl0bGVzIHx8IFtdLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICApO1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5udW1DaGlsZHJlbihtYXBbdGl0bGVdLCBsZXZlbHMgLSAxLCAodmFsdWVUaXRsZXMgJiYgdmFsdWVUaXRsZXMubGVuZ3RoKSB8fCAxKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7aGVhZGVycywgbWF4SW5kZXg6IGRhdGEubWF4SW5kZXh9O1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVyYXRlVGhyb3VnaFBpdm90RGF0YUhlYWRlcihcbiAgICBjdXJyZW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyLFxuICAgIGhlYWRlckluZGV4OiBudW1iZXIsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBtYXhMZXZlbHM6IG51bWJlcixcbiAgICBjb2xvcnM6IHN0cmluZ1tdLFxuICAgIHZhbHVlQ29sb3JzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZVRpdGxlczogc3RyaW5nW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlW10sXG4gICAgYWRkaXRpb25hbERhdGE6IHttYXhJbmRleDogbnVtYmVyfVxuICApIHtcbiAgICBpZiAobGV2ZWwgPT09IG1heExldmVscykge1xuICAgICAgaWYgKCh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoID4gMSkge1xuICAgICAgICBoZWFkZXIuY2hpbGRyZW4gPSB2YWx1ZVRpdGxlcy5tYXAoKHRpdGxlLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB0YXJnZXRJbmRleDogaGVhZGVySW5kZXggKyBpbmRleCxcbiAgICAgICAgICBjb2xvcjogdmFsdWVDb2xvcnNbaW5kZXhdLFxuICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgYWRkaXRpb25hbERhdGEubWF4SW5kZXggPSBNYXRoLm1heChhZGRpdGlvbmFsRGF0YS5tYXhJbmRleCwgaGVhZGVySW5kZXggKyB2YWx1ZVRpdGxlcy5sZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoZWFkZXIuY2hpbGRyZW4gPSBbXTtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gaGVhZGVySW5kZXg7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudE1hcCkuZm9yRWFjaCgodGl0bGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXNbbGV2ZWxdO1xuICAgICAgaWYgKGxldmVsICsgMSA9PT0gbWF4TGV2ZWxzICYmICh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuIS5wdXNoKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB0YXJnZXRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgICAgIGNvbG9yOiBjb2xvcnNbbGV2ZWxdLFxuICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICBpc1ZhbHVlSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBhdHRyaWJ1dGU/Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBhZGRpdGlvbmFsRGF0YS5tYXhJbmRleCA9IE1hdGgubWF4KGFkZGl0aW9uYWxEYXRhLm1heEluZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuIS5wdXNoKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBjb2xvcjogY29sb3JzW2xldmVsXSxcbiAgICAgICAgICBjb25zdHJhaW50OiBhdHRyaWJ1dGU/LmNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCksXG4gICAgICAgICAgaXNWYWx1ZUhlYWRlcjogZmFsc2UsXG4gICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlPy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pdGVyYXRlVGhyb3VnaFBpdm90RGF0YUhlYWRlcihcbiAgICAgICAgY3VycmVudE1hcFt0aXRsZV0sXG4gICAgICAgIGhlYWRlci5jaGlsZHJlbj8uW2luZGV4XSxcbiAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICBsZXZlbCArIDEsXG4gICAgICAgIG1heExldmVscyxcbiAgICAgICAgY29sb3JzLFxuICAgICAgICB2YWx1ZUNvbG9ycyxcbiAgICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhXG4gICAgICApO1xuXG4gICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5udW1DaGlsZHJlbihcbiAgICAgICAgY3VycmVudE1hcFt0aXRsZV0sXG4gICAgICAgIG1heExldmVscyAtIChsZXZlbCArIDEpLFxuICAgICAgICAodmFsdWVUaXRsZXMgJiYgdmFsdWVUaXRsZXMubGVuZ3RoKSB8fCAxXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBudW1DaGlsZHJlbihtYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1heExldmVsczogbnVtYmVyLCBudW1UaXRsZXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG1heExldmVscyA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bVRpdGxlcztcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobWFwIHx8IHt9KTtcbiAgICBpZiAobWF4TGV2ZWxzID09PSAxKSB7XG4gICAgICByZXR1cm4ga2V5cy5sZW5ndGggKiBudW1UaXRsZXM7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBrZXlzLnJlZHVjZSgoc3VtLCBrZXkpID0+IHN1bSArIHRoaXMubnVtQ2hpbGRyZW5SZWN1cnNpdmUobWFwW2tleV0sIDEsIG1heExldmVscyksIDApO1xuICAgIHJldHVybiBjb3VudCAqIG51bVRpdGxlcztcbiAgfVxuXG4gIHByaXZhdGUgbnVtQ2hpbGRyZW5SZWN1cnNpdmUobWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBsZXZlbDogbnVtYmVyLCBtYXhMZXZlbHM6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGxldmVsID49IG1heExldmVscykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1hcCB8fCB7fSk7XG4gICAgaWYgKGxldmVsICsgMSA9PT0gbWF4TGV2ZWxzKSB7XG4gICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXMucmVkdWNlKChzdW0sIGtleSkgPT4gc3VtICsgdGhpcy5udW1DaGlsZHJlblJlY3Vyc2l2ZShtYXBba2V5XSwgbGV2ZWwgKyAxLCBtYXhMZXZlbHMpLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmFsdWVUaXRsZXModmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10pOiB7dGl0bGVzOiBzdHJpbmdbXTsgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXX0ge1xuICAgIHJldHVybiAodmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5yZWR1Y2U8e3RpdGxlczogc3RyaW5nW107IGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W119PihcbiAgICAgICh7dGl0bGVzLCBjb25zdHJhaW50c30sIHBpdm90QXR0cmlidXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuZmluZEF0dHJpYnV0ZUJ5UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGUpO1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKFxuICAgICAgICAgIGRhdGFBZ2dyZWdhdGlvbkNvbnN0cmFpbnQocGl2b3RBdHRyaWJ1dGUuYWdncmVnYXRpb24pIHx8IHRoaXMucGl2b3RBdHRyaWJ1dGVDb25zdHJhaW50KHBpdm90QXR0cmlidXRlKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5jcmVhdGVWYWx1ZVRpdGxlKHBpdm90QXR0cmlidXRlLmFnZ3JlZ2F0aW9uLCBhdHRyaWJ1dGU/Lm5hbWUgfHwgJycpO1xuICAgICAgICB0aXRsZXMucHVzaCh0aXRsZSk7XG5cbiAgICAgICAgcmV0dXJuIHt0aXRsZXMsIGNvbnN0cmFpbnRzfTtcbiAgICAgIH0sXG4gICAgICB7dGl0bGVzOiBbXSwgY29uc3RyYWludHM6IFtdfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVmFsdWVUaXRsZShhZ2dyZWdhdGlvbjogRGF0YUFnZ3JlZ2F0aW9uVHlwZSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZUFnZ3JlZ2F0aW9uVGl0bGUgPSB0aGlzLnRyYW5zZm9ybT8uZm9ybWF0QWdncmVnYXRpb24/LihhZ2dyZWdhdGlvbikgfHwgYWdncmVnYXRpb24udG9TdHJpbmcoKTtcbiAgICByZXR1cm4gYCR7dmFsdWVBZ2dyZWdhdGlvblRpdGxlfSAke2F0dHJpYnV0ZU5hbWUgfHwgJyd9YC50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNYXRyaXg8VD4ocm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBUW11bXSB7XG4gICAgY29uc3QgbWF0cml4OiBUW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtYXRyaXhbaV0gPSBbXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIG1hdHJpeFtpXVtqXSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsVmFsdWVzKFxuICAgIHZhbHVlczogbnVtYmVyW11bXSxcbiAgICBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXVtdW10sXG4gICAgcm93SGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgY29sdW1uSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgdmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10sXG4gICAgYWdncmVnYXRlZERhdGE6IEFnZ3JlZ2F0ZWRNYXBEYXRhXG4gICkge1xuICAgIGlmIChyb3dIZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hSb3dIZWFkZXJzKFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgIHJvd0hlYWRlcnMsXG4gICAgICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgICAgIHZhbHVlQXR0cmlidXRlcyxcbiAgICAgICAgYWdncmVnYXRlZERhdGEubWFwXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZXJhdGVUaHJvdWdoQ29sdW1uSGVhZGVycyh2YWx1ZXMsIGRhdGFSZXNvdXJjZXMsIGNvbHVtbkhlYWRlcnMsIDAsIHZhbHVlQXR0cmlidXRlcywgYWdncmVnYXRlZERhdGEubWFwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVUaHJvdWdoUm93SGVhZGVycyhcbiAgICB2YWx1ZXM6IG51bWJlcltdW10sXG4gICAgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW11bXVtdLFxuICAgIHJvd0hlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIGNvbHVtbkhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIHZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdLFxuICAgIGN1cnJlbnRNYXA6IEFnZ3JlZ2F0ZWREYXRhTWFwXG4gICkge1xuICAgIGZvciAoY29uc3Qgcm93SGVhZGVyIG9mIHJvd0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHJvd0hlYWRlck1hcCA9IGN1cnJlbnRNYXBbcm93SGVhZGVyLnRpdGxlXSB8fCB7fTtcblxuICAgICAgaWYgKHJvd0hlYWRlci5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLml0ZXJhdGVUaHJvdWdoUm93SGVhZGVycyhcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgZGF0YVJlc291cmNlcyxcbiAgICAgICAgICByb3dIZWFkZXIuY2hpbGRyZW4sXG4gICAgICAgICAgY29sdW1uSGVhZGVycyxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcm93SGVhZGVyTWFwXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKHJvd0hlYWRlci50YXJnZXRJbmRleCkgJiYgY29sdW1uSGVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hDb2x1bW5IZWFkZXJzKFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgICAgICAgcm93SGVhZGVyLnRhcmdldEluZGV4ISxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcm93SGVhZGVyTWFwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpdGVyYXRlVGhyb3VnaENvbHVtbkhlYWRlcnMoXG4gICAgdmFsdWVzOiBudW1iZXJbXVtdLFxuICAgIGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdW11bXSxcbiAgICBjb2x1bW5IZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdLFxuICAgIGN1cnJlbnRNYXA6IEFnZ3JlZ2F0ZWREYXRhTWFwIHwgQWdncmVnYXRlZERhdGFWYWx1ZXNbXVxuICApIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbkhlYWRlciBvZiBjb2x1bW5IZWFkZXJzKSB7XG4gICAgICBpZiAoY29sdW1uSGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hDb2x1bW5IZWFkZXJzKFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbHVtbkhlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgY3VycmVudE1hcFtjb2x1bW5IZWFkZXIudGl0bGVdIHx8IHt9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbkhlYWRlci50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFWYWx1ZXMgPSBpc0FycmF5KGN1cnJlbnRNYXApID8gY3VycmVudE1hcCA6IGN1cnJlbnRNYXBbY29sdW1uSGVhZGVyLnRpdGxlXTtcblxuICAgICAgICBpZiAodmFsdWVBdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSBjb2x1bW5IZWFkZXIudGFyZ2V0SW5kZXghICUgdmFsdWVBdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCB7dmFsdWUsIGRhdGFSZXNvdXJjZXM6IGFnZ3JlZ2F0ZWREYXRhUmVzb3VyY2VzfSA9IHRoaXMuYWdncmVnYXRlVmFsdWUoXG4gICAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXNbdmFsdWVJbmRleF0sXG4gICAgICAgICAgICBhZ2dyZWdhdGVkRGF0YVZhbHVlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdmFsdWVzW3Jvd0luZGV4XVtjb2x1bW5IZWFkZXIudGFyZ2V0SW5kZXghXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFSZXNvdXJjZXNbcm93SW5kZXhdW2NvbHVtbkhlYWRlci50YXJnZXRJbmRleCFdID0gYWdncmVnYXRlZERhdGFSZXNvdXJjZXMgfHwgW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFnZ3JlZ2F0ZVZhbHVlKFxuICAgIHZhbHVlQXR0cmlidXRlOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlLFxuICAgIGFnZ3JlZ2F0ZWREYXRhVmFsdWVzOiBBZ2dyZWdhdGVkRGF0YVZhbHVlc1tdXG4gICk6IHt2YWx1ZT86IGFueTsgZGF0YVJlc291cmNlcz86IERhdGFSZXNvdXJjZVtdfSB7XG4gICAgY29uc3QgcmVzb3VyY2VBZ2dyZWdhdGVkRGF0YVZhbHVlcyA9IChhZ2dyZWdhdGVkRGF0YVZhbHVlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgYWdnID0+IGFnZy5yZXNvdXJjZUlkID09PSB2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZUlkICYmIGFnZy50eXBlID09PSB2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGVcbiAgICApO1xuICAgIGlmIChyZXNvdXJjZUFnZ3JlZ2F0ZWREYXRhVmFsdWVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGF0YVJlc291cmNlcyA9IGZsYXR0ZW5NYXRyaXgocmVzb3VyY2VBZ2dyZWdhdGVkRGF0YVZhbHVlcy5tYXAodmFsID0+IHZhbC5vYmplY3RzKSk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLnBpdm90QXR0cmlidXRlQXR0cmlidXRlKHZhbHVlQXR0cmlidXRlKTtcbiAgICAgIGlmICh2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbiA9PT0gRGF0YUFnZ3JlZ2F0aW9uVHlwZS5Kb2luKSB7XG4gICAgICAgIC8vIHZhbHVlcyB3aWxsIGJlIGpvaW5lZCBpbiBwaXZvdC10YWJsZS1jb252ZXJ0ZXJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gKGRhdGFSZXNvdXJjZXMgfHwgW10pLm1hcCgocmVzb3VyY2U6IERhdGFSZXNvdXJjZSkgPT4gcmVzb3VyY2UuZGF0YT8uW2F0dHJpYnV0ZT8uaWQgfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHt2YWx1ZTogdW5pcXVlVmFsdWVzKGZsYXR0ZW5WYWx1ZXModmFsdWVzKSksIGRhdGFSZXNvdXJjZXN9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZSAmJiBhZ2dyZWdhdGVEYXRhUmVzb3VyY2VzKHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uLCBkYXRhUmVzb3VyY2VzLCBhdHRyaWJ1dGUsIHRydWUpO1xuICAgICAgcmV0dXJuIHt2YWx1ZSwgZGF0YVJlc291cmNlc307XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZSh2YWx1ZUF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuQ29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbnNBdHRyaWJ1dGVzTWFwPy5bdmFsdWVBdHRyaWJ1dGUucmVzb3VyY2VJZF0/Llt2YWx1ZUF0dHJpYnV0ZS5hdHRyaWJ1dGVJZF07XG4gICAgfSBlbHNlIGlmICh2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuTGlua1R5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmtUeXBlc0F0dHJpYnV0ZXNNYXA/Llt2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZUlkXT8uW3ZhbHVlQXR0cmlidXRlLmF0dHJpYnV0ZUlkXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBpdm90U3RlbUNvbmZpZ1R5cGUoc3RlbUNvbmZpZzogTG1yUGl2b3RTdGVtQ29uZmlnKTogUGl2b3RDb25maWdUeXBlIHtcbiAgY29uc3Qgcm93TGVuZ3RoID0gKHN0ZW1Db25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoO1xuICBjb25zdCBjb2x1bW5MZW5ndGggPSAoc3RlbUNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG5cbiAgaWYgKHJvd0xlbmd0aCA+IDAgJiYgY29sdW1uTGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuUm93c0FuZENvbHVtbnM7XG4gIH0gZWxzZSBpZiAocm93TGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuUm93cztcbiAgfSBlbHNlIGlmIChjb2x1bW5MZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFBpdm90Q29uZmlnVHlwZS5Db2x1bW5zO1xuICB9XG4gIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuVmFsdWVzO1xufVxuXG5mdW5jdGlvbiBjYW5NZXJnZUNvbmZpZ3NCeVR5cGUodHlwZTogUGl2b3RDb25maWdUeXBlLCBjMTogTG1yUGl2b3RTdGVtQ29uZmlnLCBjMjogTG1yUGl2b3RTdGVtQ29uZmlnKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlID09PSBQaXZvdENvbmZpZ1R5cGUuUm93cykge1xuICAgIHJldHVybiAoYzEucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID09PSAoYzIucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFBpdm90Q29uZmlnVHlwZS5Db2x1bW5zKSB7XG4gICAgcmV0dXJuIChjMS5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGggPT09IChjMi5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAoYzEucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID09PSAoYzIucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoICYmXG4gICAgKGMxLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aCA9PT0gKGMyLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aFxuICApO1xufVxuIl19
|
|
507
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sbXItcGl2b3QtdGFibGUvc3JjL2xpYi91dGlsL3Bpdm90LWRhdGEtY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE9BQU8sRUFPTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsRUFJZCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUF3RCxzQkFBc0IsRUFBRSxnQ0FBZ0MsR0FDMUksTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQVNwRCxJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDbEIseURBQU0sQ0FBQTtJQUNOLHFEQUFJLENBQUE7SUFDSiwyREFBTyxDQUFBO0lBQ1AseUVBQWMsQ0FBQTtBQUNoQixDQUFDLEVBTEksZUFBZSxLQUFmLGVBQWUsUUFLbkI7QUFpQkQsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixXQUFXLENBQWU7SUFDMUIsU0FBUyxDQUFhO0lBQ3RCLHdCQUF3QixDQUE0QztJQUNwRSxzQkFBc0IsQ0FBNEM7SUFDbEUsSUFBSSxDQUF3QjtJQUM1QixNQUFNLENBQWlCO0lBQ3ZCLFNBQVMsQ0FBb0I7SUFDN0IsY0FBYyxDQUFpQjtJQUUvQixjQUFjLENBQWlCO0lBRXZDO1FBQ0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FDeEYsSUFBSSxDQUFDLGdCQUFn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LElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO1NBQU0sSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7QUFDaEMsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsSUFBcUIsRUFBRSxFQUFzQixFQUFFLEVBQXNCO0lBQ2xHLElBQUksSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RSxDQUFDO1NBQU0sSUFBSSxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuRixDQUFDO0lBQ0QsT0FBTyxDQUNMLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDbkUsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDMUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTHVtZWVyOiBNb2Rlcm4gRGF0YSBEZWZpbml0aW9uIGFuZCBQcm9jZXNzaW5nIFBsYXRmb3JtXG4gKlxuICogQ29weXJpZ2h0IChDKSBzaW5jZSAyMDE3IEx1bWVlci5pbywgcy5yLm8uIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEFnZ3JlZ2F0ZWREYXRhTWFwLFxuICBBZ2dyZWdhdGVkRGF0YVZhbHVlcyxcbiAgQWdncmVnYXRlZE1hcERhdGEsXG4gIENvbnN0cmFpbnQsXG4gIENvbnN0cmFpbnREYXRhLFxuICBDb25zdHJhaW50VHlwZSxcbiAgRGF0YUFnZ3JlZ2F0aW9uVHlwZSxcbiAgRGF0YUFnZ3JlZ2F0b3IsXG4gIERhdGFBZ2dyZWdhdG9yQXR0cmlidXRlLFxuICBEYXRhVmFsdWUsXG4gIERvY3VtZW50c0FuZExpbmtzRGF0YSxcbiAgVW5rbm93bkNvbnN0cmFpbnQsXG4gIGFnZ3JlZ2F0ZURhdGFSZXNvdXJjZXMsXG4gIGRhdGFBZ2dyZWdhdGlvbkNvbnN0cmFpbnQsIFF1ZXJ5U3RlbSwgQ29sbGVjdGlvbiwgTGlua1R5cGUsIERhdGFSZXNvdXJjZSwgUXVlcnksIEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUsIGF0dHJpYnV0ZXNSZXNvdXJjZXNBdHRyaWJ1dGVzTWFwLFxufSBmcm9tICdAbHVtZWVyL2RhdGEtZmlsdGVycyc7XG5pbXBvcnQge2RlZXBPYmplY3RzRXF1YWxzLCBmbGF0dGVuTWF0cml4LCBmbGF0dGVuVmFsdWVzLCBpc0FycmF5LCBpc05vdE51bGxPclVuZGVmaW5lZCwgdW5pcXVlVmFsdWVzfSBmcm9tICdAbHVtZWVyL3V0aWxzJztcbmltcG9ydCB7TG1yUGl2b3RBdHRyaWJ1dGUsIExtclBpdm90Q29uZmlnLCBMbXJQaXZvdFJvd0NvbHVtbkF0dHJpYnV0ZSwgTG1yUGl2b3RTdGVtQ29uZmlnLCBMbXJQaXZvdFRyYW5zZm9ybSwgTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZX0gZnJvbSAnLi9sbXItcGl2b3QtY29uZmlnJztcbmltcG9ydCB7TG1yUGl2b3REYXRhLCBMbXJQaXZvdERhdGFIZWFkZXIsIExtclBpdm90RGltZW5zaW9uQ29uZmlnLCBMbXJQaXZvdEhlYWRlckF0dHJpYnV0ZSwgTG1yUGl2b3RTdGVtRGF0YX0gZnJvbSAnLi9sbXItcGl2b3QtZGF0YSc7XG5pbXBvcnQge3Bpdm90U3RlbUNvbmZpZ0lzRW1wdHl9IGZyb20gJy4vcGl2b3QtdXRpbCc7XG5cbmludGVyZmFjZSBQaXZvdE1lcmdlRGF0YSB7XG4gIGNvbmZpZ3M6IExtclBpdm90U3RlbUNvbmZpZ1tdO1xuICBzdGVtczogUXVlcnlTdGVtW107XG4gIHN0ZW1zSW5kZXhlczogbnVtYmVyW107XG4gIHR5cGU6IFBpdm90Q29uZmlnVHlwZTtcbn1cblxuZW51bSBQaXZvdENvbmZpZ1R5cGUge1xuICBWYWx1ZXMsXG4gIFJvd3MsXG4gIENvbHVtbnMsXG4gIFJvd3NBbmRDb2x1bW5zLFxufVxuXG5pbnRlcmZhY2UgUGl2b3RDb2xvcnMge1xuICByb3dzOiBzdHJpbmdbXTtcbiAgY29sdW1uczogc3RyaW5nW107XG4gIHZhbHVlczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBQaXZvdENvbmZpZ0RhdGEge1xuICByb3dzQ29uZmlnOiBMbXJQaXZvdERpbWVuc2lvbkNvbmZpZ1tdO1xuICByb3dTaG93SGVhZGVyQXR0cmlidXRlczogYm9vbGVhbltdO1xuICBjb2x1bW5zQ29uZmlnOiBMbXJQaXZvdERpbWVuc2lvbkNvbmZpZ1tdO1xuICBjb2x1bW5TaG93SGVhZGVyQXR0cmlidXRlczogYm9vbGVhbltdO1xuICByb3dBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXTtcbiAgY29sdW1uQXR0cmlidXRlczogQXR0cmlidXRlW107XG59XG5cbmV4cG9ydCBjbGFzcyBQaXZvdERhdGFDb252ZXJ0ZXIge1xuICBwcml2YXRlIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uW107XG4gIHByaXZhdGUgbGlua1R5cGVzOiBMaW5rVHlwZVtdO1xuICBwcml2YXRlIGNvbGxlY3Rpb25zQXR0cmlidXRlc01hcDogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgQXR0cmlidXRlPj47XG4gIHByaXZhdGUgbGlua1R5cGVzQXR0cmlidXRlc01hcDogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgQXR0cmlidXRlPj47XG4gIHByaXZhdGUgZGF0YTogRG9jdW1lbnRzQW5kTGlua3NEYXRhO1xuICBwcml2YXRlIGNvbmZpZzogTG1yUGl2b3RDb25maWc7XG4gIHByaXZhdGUgdHJhbnNmb3JtOiBMbXJQaXZvdFRyYW5zZm9ybTtcbiAgcHJpdmF0ZSBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGE7XG5cbiAgcHJpdmF0ZSBkYXRhQWdncmVnYXRvcjogRGF0YUFnZ3JlZ2F0b3I7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kYXRhQWdncmVnYXRvciA9IG5ldyBEYXRhQWdncmVnYXRvcigodmFsdWUsIGNvbnN0cmFpbnQsIGRhdGEsIGFnZ3JlZ2F0b3JBdHRyaWJ1dGUpID0+XG4gICAgICB0aGlzLmZvcm1hdFBpdm90VmFsdWUodmFsdWUsIGNvbnN0cmFpbnQsIGRhdGEsIGFnZ3JlZ2F0b3JBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UGl2b3RWYWx1ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQsXG4gICAgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhLFxuICAgIGFnZ3JlZ2F0b3JBdHRyaWJ1dGU6IERhdGFBZ2dyZWdhdG9yQXR0cmlidXRlXG4gICk6IGFueSB7XG4gICAgY29uc3QgcGl2b3RDb25zdHJhaW50ID0gYWdncmVnYXRvckF0dHJpYnV0ZS5kYXRhICYmIChhZ2dyZWdhdG9yQXR0cmlidXRlLmRhdGEgYXMgQ29uc3RyYWludCk7XG4gICAgY29uc3Qgb3ZlcnJpZGVDb25zdHJhaW50ID1cbiAgICAgIHBpdm90Q29uc3RyYWludCAmJiB0aGlzLnRyYW5zZm9ybT8uY2hlY2tWYWxpZENvbnN0cmFpbnRPdmVycmlkZT8uKGNvbnN0cmFpbnQsIHBpdm90Q29uc3RyYWludCk7XG4gICAgY29uc3QgZmluYWxDb25zdHJhaW50ID0gb3ZlcnJpZGVDb25zdHJhaW50IHx8IGNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFZhbHVlID0gKGNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCkpLmNyZWF0ZURhdGFWYWx1ZSh2YWx1ZSwgY29uc3RyYWludERhdGEpLnNlcmlhbGl6ZSgpXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0YVZhbHVlKGZpbmFsQ29uc3RyYWludC5jcmVhdGVEYXRhVmFsdWUoc2VyaWFsaXplZFZhbHVlLCBjb25zdHJhaW50RGF0YSksIGZpbmFsQ29uc3RyYWludCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGFWYWx1ZShkYXRhVmFsdWU6IERhdGFWYWx1ZSwgY29uc3RyYWludDogQ29uc3RyYWludCk6IGFueSB7XG4gICAgc3dpdGNoIChjb25zdHJhaW50LnR5cGUpIHtcbiAgICAgIGNhc2UgQ29uc3RyYWludFR5cGUuRGF0ZVRpbWU6XG4gICAgICAgIHJldHVybiBkYXRhVmFsdWUuZm9ybWF0KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF0YVZhbHVlLnNlcmlhbGl6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0YShcbiAgICBjb25maWc6IExtclBpdm90Q29uZmlnLFxuICAgIHRyYW5zZm9ybTogTG1yUGl2b3RUcmFuc2Zvcm0sXG4gICAgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25bXSxcbiAgICBsaW5rVHlwZXM6IExpbmtUeXBlW10sXG4gICAgZGF0YTogRG9jdW1lbnRzQW5kTGlua3NEYXRhLFxuICAgIGNvbnN0cmFpbnREYXRhOiBDb25zdHJhaW50RGF0YVxuICApIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICB0aGlzLmNvbGxlY3Rpb25zID0gY29sbGVjdGlvbnM7XG4gICAgdGhpcy5saW5rVHlwZXMgPSBsaW5rVHlwZXM7XG4gICAgdGhpcy5jb2xsZWN0aW9uc0F0dHJpYnV0ZXNNYXAgPSBhdHRyaWJ1dGVzUmVzb3VyY2VzQXR0cmlidXRlc01hcChjb2xsZWN0aW9ucyk7XG4gICAgdGhpcy5saW5rVHlwZXNBdHRyaWJ1dGVzTWFwID0gYXR0cmlidXRlc1Jlc291cmNlc0F0dHJpYnV0ZXNNYXAobGlua1R5cGVzKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY29uc3RyYWludERhdGEgPSBjb25zdHJhaW50RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVEYXRhKFxuICAgIGNvbmZpZzogTG1yUGl2b3RDb25maWcsXG4gICAgdHJhbnNmb3JtOiBMbXJQaXZvdFRyYW5zZm9ybSxcbiAgICBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdLFxuICAgIGxpbmtUeXBlczogTGlua1R5cGVbXSxcbiAgICBkYXRhOiBEb2N1bWVudHNBbmRMaW5rc0RhdGEsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIGNvbnN0cmFpbnREYXRhPzogQ29uc3RyYWludERhdGFcbiAgKTogTG1yUGl2b3REYXRhIHtcbiAgICB0aGlzLnVwZGF0ZURhdGEoY29uZmlnLCB0cmFuc2Zvcm0sIGNvbGxlY3Rpb25zLCBsaW5rVHlwZXMsIGRhdGEsIGNvbnN0cmFpbnREYXRhKTtcblxuICAgIGNvbnN0IHtzdGVtc0NvbmZpZ3MsIHN0ZW1zfSA9IHRoaXMuZmlsdGVyRW1wdHlDb25maWdzKGNvbmZpZywgcXVlcnkpO1xuXG4gICAgY29uc3QgbWVyZ2VEYXRhID0gdGhpcy5jcmVhdGVQaXZvdE1lcmdlRGF0YShjb25maWcubWVyZ2VUYWJsZXMsIHN0ZW1zQ29uZmlncywgc3RlbXMpO1xuICAgIGNvbnN0IGFibGVUb01lcmdlID0gbWVyZ2VEYXRhLmxlbmd0aCA8PSAxO1xuICAgIGNvbnN0IHBpdm90RGF0YSA9IHRoaXMubWVyZ2VQaXZvdERhdGEobWVyZ2VEYXRhKTtcbiAgICByZXR1cm4ge2RhdGE6IHBpdm90RGF0YSwgY29uc3RyYWludERhdGEsIGFibGVUb01lcmdlLCBtZXJnZVRhYmxlczogY29uZmlnLm1lcmdlVGFibGVzfTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyRW1wdHlDb25maWdzKGNvbmZpZzogTG1yUGl2b3RDb25maWcsIHF1ZXJ5OiBRdWVyeSk6IHtzdGVtc0NvbmZpZ3M6IExtclBpdm90U3RlbUNvbmZpZ1tdOyBzdGVtczogUXVlcnlTdGVtW119IHtcbiAgICByZXR1cm4gKGNvbmZpZy5zdGVtc0NvbmZpZ3MgfHwgW10pLnJlZHVjZShcbiAgICAgICh7c3RlbXNDb25maWdzLCBzdGVtc30sIHN0ZW1Db25maWcsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghcGl2b3RTdGVtQ29uZmlnSXNFbXB0eShzdGVtQ29uZmlnKSkge1xuICAgICAgICAgIGNvbnN0IHN0ZW0gPSAocXVlcnkuc3RlbXMgfHwgW10pW2luZGV4XTtcbiAgICAgICAgICBzdGVtc0NvbmZpZ3MucHVzaChzdGVtQ29uZmlnKTtcbiAgICAgICAgICBzdGVtcy5wdXNoKHN0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtzdGVtc0NvbmZpZ3MsIHN0ZW1zfTtcbiAgICAgIH0sXG4gICAgICB7c3RlbXNDb25maWdzOiBbXSwgc3RlbXM6IFtdfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBpdm90TWVyZ2VEYXRhKFxuICAgIG1lcmdlVGFibGVzOiBib29sZWFuLFxuICAgIHN0ZW1zQ29uZmlnczogTG1yUGl2b3RTdGVtQ29uZmlnW10sXG4gICAgc3RlbXM6IFF1ZXJ5U3RlbVtdXG4gICk6IFBpdm90TWVyZ2VEYXRhW10ge1xuICAgIHJldHVybiBzdGVtc0NvbmZpZ3MucmVkdWNlKChtZXJnZURhdGE6IFBpdm90TWVyZ2VEYXRhW10sIHN0ZW1Db25maWcsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb25maWdUeXBlID0gZ2V0UGl2b3RTdGVtQ29uZmlnVHlwZShzdGVtQ29uZmlnKTtcbiAgICAgIGNvbnN0IG1lcmdlRGF0YUluZGV4ID0gbWVyZ2VEYXRhLmZpbmRJbmRleChcbiAgICAgICAgZGF0YSA9PiBkYXRhLnR5cGUgPT09IGNvbmZpZ1R5cGUgJiYgY2FuTWVyZ2VDb25maWdzQnlUeXBlKGRhdGEudHlwZSwgZGF0YS5jb25maWdzWzBdLCBzdGVtQ29uZmlnKVxuICAgICAgKTtcbiAgICAgIGlmIChtZXJnZVRhYmxlcyAmJiBtZXJnZURhdGFJbmRleCA+PSAwKSB7XG4gICAgICAgIG1lcmdlRGF0YVttZXJnZURhdGFJbmRleF0uY29uZmlncy5wdXNoKHN0ZW1Db25maWcpO1xuICAgICAgICBtZXJnZURhdGFbbWVyZ2VEYXRhSW5kZXhdLnN0ZW1zLnB1c2goc3RlbXNbaW5kZXhdKTtcbiAgICAgICAgbWVyZ2VEYXRhW21lcmdlRGF0YUluZGV4XS5zdGVtc0luZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZURhdGEucHVzaCh7Y29uZmlnczogW3N0ZW1Db25maWddLCBzdGVtczogW3N0ZW1zW2luZGV4XV0sIHN0ZW1zSW5kZXhlczogW2luZGV4XSwgdHlwZTogY29uZmlnVHlwZX0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2VEYXRhO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VQaXZvdERhdGEobWVyZ2VEYXRhOiBQaXZvdE1lcmdlRGF0YVtdKTogTG1yUGl2b3RTdGVtRGF0YVtdIHtcbiAgICByZXR1cm4gbWVyZ2VEYXRhLnJlZHVjZSgoc3RlbURhdGEsIGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhLnR5cGUgPT09IFBpdm90Q29uZmlnVHlwZS5WYWx1ZXMpIHtcbiAgICAgICAgc3RlbURhdGEucHVzaCh0aGlzLmNvbnZlcnRWYWx1ZUF0dHJpYnV0ZXMoZGF0YS5jb25maWdzLCBkYXRhLnN0ZW1zLCBkYXRhLnN0ZW1zSW5kZXhlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlbURhdGEucHVzaCh0aGlzLnRyYW5zZm9ybVN0ZW1zKGRhdGEuY29uZmlncywgZGF0YS5zdGVtcywgZGF0YS5zdGVtc0luZGV4ZXMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGVtRGF0YTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybVN0ZW1zKGNvbmZpZ3M6IExtclBpdm90U3RlbUNvbmZpZ1tdLCBxdWVyeVN0ZW1zOiBRdWVyeVN0ZW1bXSwgc3RlbXNJbmRleGVzOiBudW1iZXJbXSk6IExtclBpdm90U3RlbURhdGEge1xuICAgIGNvbnN0IHBpdm90Q29sb3JzOiBQaXZvdENvbG9ycyA9IHtyb3dzOiBbXSwgY29sdW1uczogW10sIHZhbHVlczogW119O1xuICAgIGNvbnN0IG1lcmdlZFZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdID0gW107XG4gICAgbGV0IG1lcmdlZEFnZ3JlZ2F0ZWREYXRhOiBBZ2dyZWdhdGVkTWFwRGF0YSA9IG51bGw7XG4gICAgbGV0IGFkZGl0aW9uYWxEYXRhOiBQaXZvdENvbmZpZ0RhdGE7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ3NbaV07XG4gICAgICBjb25zdCBxdWVyeVN0ZW0gPSBxdWVyeVN0ZW1zW2ldO1xuICAgICAgY29uc3Qgc3RlbUluZGV4ID0gc3RlbXNJbmRleGVzW2ldO1xuICAgICAgY29uc3Qgc3RlbURhdGEgPSB0aGlzLmRhdGE/LmRhdGFCeVN0ZW1zPy5bc3RlbUluZGV4XTtcblxuICAgICAgdGhpcy5kYXRhQWdncmVnYXRvci51cGRhdGVEYXRhKFxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25zLFxuICAgICAgICBzdGVtRGF0YT8uZG9jdW1lbnRzIHx8IFtdLFxuICAgICAgICB0aGlzLmxpbmtUeXBlcyxcbiAgICAgICAgc3RlbURhdGE/LmxpbmtJbnN0YW5jZXMgfHwgW10sXG4gICAgICAgIHF1ZXJ5U3RlbSxcbiAgICAgICAgdGhpcy5jb25zdHJhaW50RGF0YVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJvd0F0dHJpYnV0ZXMgPSAoY29uZmlnLnJvd0F0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyaWJ1dGUgPT5cbiAgICAgICAgdGhpcy5jb252ZXJ0UGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUoYXR0cmlidXRlKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbHVtbkF0dHJpYnV0ZXMgPSAoY29uZmlnLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyaWJ1dGUgPT5cbiAgICAgICAgdGhpcy5jb252ZXJ0UGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUoYXR0cmlidXRlKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHZhbHVlQXR0cmlidXRlcyA9IChjb25maWcudmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+IHRoaXMuY29udmVydFBpdm90QXR0cmlidXRlKGF0dHJpYnV0ZSkpO1xuXG4gICAgICBwaXZvdENvbG9ycy5yb3dzLnB1c2goLi4udGhpcy5nZXRBdHRyaWJ1dGVzQ29sb3JzKGNvbmZpZy5yb3dBdHRyaWJ1dGVzKSk7XG4gICAgICBwaXZvdENvbG9ycy5jb2x1bW5zLnB1c2goLi4udGhpcy5nZXRBdHRyaWJ1dGVzQ29sb3JzKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzKSk7XG4gICAgICBwaXZvdENvbG9ycy52YWx1ZXMucHVzaCguLi50aGlzLmdldEF0dHJpYnV0ZXNDb2xvcnMoY29uZmlnLnZhbHVlQXR0cmlidXRlcykpO1xuXG4gICAgICBjb25zdCBhZ2dyZWdhdGVkRGF0YSA9IHRoaXMuZGF0YUFnZ3JlZ2F0b3IuYWdncmVnYXRlKHJvd0F0dHJpYnV0ZXMsIGNvbHVtbkF0dHJpYnV0ZXMsIHZhbHVlQXR0cmlidXRlcyk7XG4gICAgICBtZXJnZWRBZ2dyZWdhdGVkRGF0YSA9IHRoaXMubWVyZ2VBZ2dyZWdhdGVkRGF0YShtZXJnZWRBZ2dyZWdhdGVkRGF0YSwgYWdncmVnYXRlZERhdGEpO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZFZhbHVlQXR0cmlidXRlcyA9IChjb25maWcudmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgIHZhbHVlQXR0ciA9PiAhbWVyZ2VkVmFsdWVBdHRyaWJ1dGVzLnNvbWUobWVyQXR0ciA9PiBkZWVwT2JqZWN0c0VxdWFscyh2YWx1ZUF0dHIsIG1lckF0dHIpKVxuICAgICAgKTtcbiAgICAgIG1lcmdlZFZhbHVlQXR0cmlidXRlcy5wdXNoKC4uLmZpbHRlcmVkVmFsdWVBdHRyaWJ1dGVzKTtcblxuICAgICAgaWYgKCFhZGRpdGlvbmFsRGF0YSkge1xuICAgICAgICBjb25zdCByb3dTdGlja3kgPSB0aGlzLm1hcFN0aWNreVZhbHVlcygoY29uZmlnLnJvd0F0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IGF0dHIuc3RpY2t5KSk7XG4gICAgICAgIGNvbnN0IGNvbHVtblN0aWNreSA9IHRoaXMubWFwU3RpY2t5VmFsdWVzKChjb25maWcuY29sdW1uQXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHIgPT4gYXR0ci5zdGlja3kpKTtcbiAgICAgICAgYWRkaXRpb25hbERhdGEgPSB7XG4gICAgICAgICAgcm93c0NvbmZpZzogKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoKGF0dHIsIGluZGV4KSA9PiAoe3Nob3dTdW1zOiBhdHRyLnNob3dTdW1zLCBzb3J0OiBhdHRyLnNvcnQsIGV4cHJlc3Npb25zOiBhdHRyLmV4cHJlc3Npb25zLCBzdGlja3k6IHJvd1N0aWNreVtpbmRleF19KSksXG4gICAgICAgICAgY29sdW1uc0NvbmZpZzogKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoKGF0dHIsIGluZGV4KSA9PiAoe3Nob3dTdW1zOiBhdHRyLnNob3dTdW1zLCBzb3J0OiBhdHRyLnNvcnQsIGV4cHJlc3Npb25zOiBhdHRyLmV4cHJlc3Npb25zLCBzdGlja3k6IGNvbHVtblN0aWNreVtpbmRleF19KSksXG4gICAgICAgICAgcm93U2hvd0hlYWRlckF0dHJpYnV0ZXM6IChjb25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHIgPT4gYXR0ci5zaG93SGVhZGVyKSxcbiAgICAgICAgICByb3dBdHRyaWJ1dGVzOiAoY29uZmlnLnJvd0F0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IHRoaXMucGl2b3RBdHRyaWJ1dGVBdHRyaWJ1dGUoYXR0cikpLFxuICAgICAgICAgIGNvbHVtblNob3dIZWFkZXJBdHRyaWJ1dGVzOiAoY29uZmlnLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IGZhbHNlKSxcbiAgICAgICAgICBjb2x1bW5BdHRyaWJ1dGVzOiAoY29uZmlnLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IHRoaXMucGl2b3RBdHRyaWJ1dGVBdHRyaWJ1dGUoYXR0cikpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRBZ2dyZWdhdGVkRGF0YShtZXJnZWRBZ2dyZWdhdGVkRGF0YSwgbWVyZ2VkVmFsdWVBdHRyaWJ1dGVzLCBwaXZvdENvbG9ycywgYWRkaXRpb25hbERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTdGlja3lWYWx1ZXModmFsdWVzOiBib29sZWFuW10pOiBib29sZWFuW10ge1xuICAgIC8vIHdlIHN1cHBvcnQgb25seSBzdGlja3kgcm93cy9jb2x1bW5zIGluIGEgcm93XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKHN0aWNreVZhbHVlcywgc3RpY2t5LCBpbmRleCkgPT4ge1xuICAgICAgc3RpY2t5VmFsdWVzLnB1c2goc3RpY2t5ICYmIChpbmRleCA9PT0gMCB8fCBzdGlja3lWYWx1ZXNbaW5kZXggLSAxXSkpO1xuICAgICAgcmV0dXJuIHN0aWNreVZhbHVlcztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHBpdm90QXR0cmlidXRlQ29uc3RyYWludChwaXZvdEF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBDb25zdHJhaW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLmZpbmRBdHRyaWJ1dGVCeVBpdm90QXR0cmlidXRlKHBpdm90QXR0cmlidXRlKTtcbiAgICBjb25zdCBjb25zdHJhaW50ID0gYXR0cmlidXRlICYmIGF0dHJpYnV0ZS5jb25zdHJhaW50O1xuICAgIGNvbnN0IG92ZXJyaWRlQ29uc3RyYWludCA9XG4gICAgICBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50ICYmXG4gICAgICB0aGlzLnRyYW5zZm9ybT8uY2hlY2tWYWxpZENvbnN0cmFpbnRPdmVycmlkZT8uKGNvbnN0cmFpbnQsIHBpdm90QXR0cmlidXRlLmNvbnN0cmFpbnQpO1xuICAgIHJldHVybiBvdmVycmlkZUNvbnN0cmFpbnQgfHwgY29uc3RyYWludDtcbiAgfVxuXG4gIHByaXZhdGUgcGl2b3RBdHRyaWJ1dGVBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGU6IExtclBpdm90QXR0cmlidXRlKTogQXR0cmlidXRlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLmZpbmRBdHRyaWJ1dGVCeVBpdm90QXR0cmlidXRlKHBpdm90QXR0cmlidXRlKTtcbiAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gYXR0cmlidXRlPy5jb25zdHJhaW50O1xuICAgICAgY29uc3Qgb3ZlcnJpZGVDb25zdHJhaW50ID1cbiAgICAgICAgcGl2b3RBdHRyaWJ1dGUuY29uc3RyYWludCAmJlxuICAgICAgICB0aGlzLnRyYW5zZm9ybT8uY2hlY2tWYWxpZENvbnN0cmFpbnRPdmVycmlkZT8uKGNvbnN0cmFpbnQsIHBpdm90QXR0cmlidXRlLmNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsuLi5hdHRyaWJ1dGUsIGNvbnN0cmFpbnQ6IG92ZXJyaWRlQ29uc3RyYWludCB8fCBjb25zdHJhaW50IHx8IG5ldyBVbmtub3duQ29uc3RyYWludCgpfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VBZ2dyZWdhdGVkRGF0YShhMTogQWdncmVnYXRlZE1hcERhdGEsIGEyOiBBZ2dyZWdhdGVkTWFwRGF0YSk6IEFnZ3JlZ2F0ZWRNYXBEYXRhIHtcbiAgICBpZiAoIWExIHx8ICFhMikge1xuICAgICAgcmV0dXJuIGExIHx8IGEyO1xuICAgIH1cblxuICAgIHRoaXMubWVyZ2VNYXBzKGExLm1hcCwgYTIubWFwKTtcbiAgICB0aGlzLm1lcmdlTWFwcyhhMS5jb2x1bW5zTWFwLCBhMi5jb2x1bW5zTWFwKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWFwOiBhMS5tYXAsXG4gICAgICBjb2x1bW5zTWFwOiBhMS5jb2x1bW5zTWFwLFxuICAgICAgcm93TGV2ZWxzOiBNYXRoLm1heChhMS5yb3dMZXZlbHMsIGEyLnJvd0xldmVscyksXG4gICAgICBjb2x1bW5MZXZlbHM6IE1hdGgubWF4KGExLmNvbHVtbkxldmVscywgYTIuY29sdW1uTGV2ZWxzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZU1hcHMobTE6IFJlY29yZDxzdHJpbmcsIGFueT4sIG0yOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgT2JqZWN0LmtleXMobTIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChtMVtrZXldKSB7XG4gICAgICAgIGlmIChpc0FycmF5KG0xW2tleV0pICYmIGlzQXJyYXkobTJba2V5XSkpIHtcbiAgICAgICAgICBtMVtrZXldLnB1c2goLi4ubTJba2V5XSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXkobTFba2V5XSkgJiYgIWlzQXJyYXkobTJba2V5XSkpIHtcbiAgICAgICAgICB0aGlzLm1lcmdlTWFwcyhtMVtrZXldLCBtMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbTFba2V5XSA9IG0yW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEF0dHJpYnV0ZXNDb2xvcnMoYXR0cmlidXRlczogTG1yUGl2b3RBdHRyaWJ1dGVbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKGF0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyaWJ1dGUgPT4ge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmRhdGFBZ2dyZWdhdG9yLmdldE5leHRDb2xsZWN0aW9uUmVzb3VyY2UoYXR0cmlidXRlLnJlc291cmNlSW5kZXgpO1xuICAgICAgcmV0dXJuIHJlc291cmNlICYmICg8Q29sbGVjdGlvbj5yZXNvdXJjZSkuY29sb3I7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRQaXZvdFJvd0NvbHVtbkF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZTogTG1yUGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUpOiBEYXRhQWdncmVnYXRvckF0dHJpYnV0ZSB7XG4gICAgcmV0dXJuIHsuLi50aGlzLmNvbnZlcnRQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZSksIGRhdGE6IHBpdm90QXR0cmlidXRlLmNvbnN0cmFpbnR9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGU6IExtclBpdm90QXR0cmlidXRlKTogRGF0YUFnZ3JlZ2F0b3JBdHRyaWJ1dGUge1xuICAgIHJldHVybiB7cmVzb3VyY2VJbmRleDogcGl2b3RBdHRyaWJ1dGUucmVzb3VyY2VJbmRleCwgYXR0cmlidXRlSWQ6IHBpdm90QXR0cmlidXRlLmF0dHJpYnV0ZUlkfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFZhbHVlQXR0cmlidXRlcyhcbiAgICBjb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXSxcbiAgICBzdGVtczogUXVlcnlTdGVtW10sXG4gICAgc3RlbXNJbmRleGVzOiBudW1iZXJbXVxuICApOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgICBjb25zdCBkYXRhID0gY29uZmlncy5yZWR1Y2UoXG4gICAgICAoYWxsRGF0YSwgY29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdGVtID0gc3RlbXNbaW5kZXhdO1xuICAgICAgICBjb25zdCBzdGVtSW5kZXggPSBzdGVtc0luZGV4ZXNbaW5kZXhdO1xuXG4gICAgICAgIGNvbnN0IHN0ZW1EYXRhID0gdGhpcy5kYXRhPy5kYXRhQnlTdGVtcz8uW3N0ZW1JbmRleF07XG4gICAgICAgIHRoaXMuZGF0YUFnZ3JlZ2F0b3IudXBkYXRlRGF0YShcbiAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25zLFxuICAgICAgICAgIHN0ZW1EYXRhPy5kb2N1bWVudHMgfHwgW10sXG4gICAgICAgICAgdGhpcy5saW5rVHlwZXMsXG4gICAgICAgICAgc3RlbURhdGE/LmxpbmtJbnN0YW5jZXMgfHwgW10sXG4gICAgICAgICAgc3RlbSxcbiAgICAgICAgICB0aGlzLmNvbnN0cmFpbnREYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdmFsdWVBdHRyaWJ1dGVzID0gY29uZmlnLnZhbHVlQXR0cmlidXRlcyB8fCBbXTtcbiAgICAgICAgYWxsRGF0YS52YWx1ZVR5cGVzLnB1c2goLi4udmFsdWVBdHRyaWJ1dGVzLm1hcChhdHRyID0+IGF0dHIudmFsdWVUeXBlKSk7XG4gICAgICAgIGNvbnN0IHZhbHVlQ29sb3JzID0gdGhpcy5nZXRBdHRyaWJ1dGVzQ29sb3JzKHZhbHVlQXR0cmlidXRlcyk7XG5cbiAgICAgICAgY29uc3Qge3RpdGxlcywgY29uc3RyYWludHN9ID0gdGhpcy5jcmVhdGVWYWx1ZVRpdGxlcyh2YWx1ZUF0dHJpYnV0ZXMpO1xuICAgICAgICBhbGxEYXRhLnRpdGxlcy5wdXNoKC4uLnRpdGxlcyk7XG4gICAgICAgIGFsbERhdGEuY29uc3RyYWludHMucHVzaCguLi5jb25zdHJhaW50cyk7XG5cbiAgICAgICAgY29uc3Qge2hlYWRlcnN9ID0gdGhpcy5jb252ZXJ0TWFwVG9QaXZvdERhdGFIZWFkZXIoe30sIDAsIFtdLCB2YWx1ZUNvbG9ycywgW10sIHRpdGxlcywgYWxsRGF0YS5oZWFkZXJzLmxlbmd0aCk7XG4gICAgICAgIGFsbERhdGEuaGVhZGVycy5wdXNoKC4uLmhlYWRlcnMpO1xuXG4gICAgICAgIGFsbERhdGEuYWdncmVnYXRpb25zID0gWy4uLih2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLm1hcCh2YWx1ZUF0dHJpYnV0ZSA9PiB2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbildO1xuXG4gICAgICAgIGNvbnN0IHt2YWx1ZXMsIGRhdGFSZXNvdXJjZXN9ID0gKHZhbHVlQXR0cmlidXRlcyB8fCBbXSkucmVkdWNlPHt2YWx1ZXM6IGFueVtdOyBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXVtdfT4oXG4gICAgICAgICAgKGFnZ3JlZ2F0b3IsIHZhbHVlQXR0cmlidXRlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVJlc291cmNlcyA9IHRoaXMuZmluZERhdGFSZXNvdXJjZXNCeVBpdm90QXR0cmlidXRlKHZhbHVlQXR0cmlidXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuZmluZEF0dHJpYnV0ZUJ5UGl2b3RBdHRyaWJ1dGUodmFsdWVBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhZ2dyZWdhdGVEYXRhUmVzb3VyY2VzKHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uLCBkYXRhUmVzb3VyY2VzLCBhdHRyaWJ1dGUsIHRydWUpO1xuICAgICAgICAgICAgYWdncmVnYXRvci52YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICBhZ2dyZWdhdG9yLmRhdGFSZXNvdXJjZXMucHVzaChkYXRhUmVzb3VyY2VzKTtcbiAgICAgICAgICAgIHJldHVybiBhZ2dyZWdhdG9yO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge3ZhbHVlczogW10sIGRhdGFSZXNvdXJjZXM6IFtdfVxuICAgICAgICApO1xuXG4gICAgICAgIGFsbERhdGEudmFsdWVzLnB1c2goLi4udmFsdWVzKTtcbiAgICAgICAgYWxsRGF0YS5kYXRhUmVzb3VyY2VzLnB1c2goLi4uZGF0YVJlc291cmNlcyk7XG4gICAgICAgIHJldHVybiBhbGxEYXRhO1xuICAgICAgfSxcbiAgICAgIHt0aXRsZXM6IFtdLCBjb25zdHJhaW50czogW10sIGhlYWRlcnM6IFtdLCB2YWx1ZXM6IFtdLCBkYXRhUmVzb3VyY2VzOiBbXSwgdmFsdWVUeXBlczogW10sIGFnZ3JlZ2F0aW9uczogW119XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW5IZWFkZXJzOiBkYXRhLmhlYWRlcnMsXG4gICAgICBjb2x1bW5IZWFkZXJBdHRyaWJ1dGVzOiBbXSxcbiAgICAgIHJvd0hlYWRlcnM6IFtdLFxuICAgICAgcm93SGVhZGVyQXR0cmlidXRlczogW10sXG4gICAgICB2YWx1ZVRpdGxlczogZGF0YS50aXRsZXMsXG4gICAgICB2YWx1ZXM6IFtkYXRhLnZhbHVlc10sXG4gICAgICBkYXRhUmVzb3VyY2VzOiBbZGF0YS5kYXRhUmVzb3VyY2VzXSxcbiAgICAgIHZhbHVlc0NvbnN0cmFpbnRzOiBkYXRhLmNvbnN0cmFpbnRzLFxuICAgICAgdmFsdWVUeXBlczogZGF0YS52YWx1ZVR5cGVzLFxuICAgICAgdmFsdWVBZ2dyZWdhdGlvbnM6IGRhdGEuYWdncmVnYXRpb25zLFxuXG4gICAgICByb3dzQ29uZmlnOiBbXSxcbiAgICAgIGNvbHVtbnNDb25maWc6IFtdLFxuXG4gICAgICBoYXNBZGRpdGlvbmFsQ29sdW1uTGV2ZWw6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZERhdGFSZXNvdXJjZXNCeVBpdm90QXR0cmlidXRlKHBpdm90QXR0cmlidXRlOiBMbXJQaXZvdEF0dHJpYnV0ZSk6IERhdGFSZXNvdXJjZVtdIHtcbiAgICBpZiAocGl2b3RBdHRyaWJ1dGUucmVzb3VyY2VUeXBlID09PSBBdHRyaWJ1dGVzUmVzb3VyY2VUeXBlLkNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiAodGhpcy5kYXRhPy51bmlxdWVEb2N1bWVudHMgfHwgW10pLmZpbHRlcihkb2N1bWVudCA9PiBkb2N1bWVudC5jb2xsZWN0aW9uSWQgPT09IHBpdm90QXR0cmlidXRlLnJlc291cmNlSWQpO1xuICAgIH0gZWxzZSBpZiAocGl2b3RBdHRyaWJ1dGUucmVzb3VyY2VUeXBlID09PSBBdHRyaWJ1dGVzUmVzb3VyY2VUeXBlLkxpbmtUeXBlKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZGF0YT8udW5pcXVlTGlua0luc3RhbmNlcyB8fCBbXSkuZmlsdGVyKGxpbmsgPT4gbGluay5saW5rVHlwZUlkID09PSBwaXZvdEF0dHJpYnV0ZS5yZXNvdXJjZUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0QWdncmVnYXRlZERhdGEoXG4gICAgYWdncmVnYXRlZERhdGE6IEFnZ3JlZ2F0ZWRNYXBEYXRhLFxuICAgIHZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdLFxuICAgIHBpdm90Q29sb3JzOiBQaXZvdENvbG9ycyxcbiAgICBhZGRpdGlvbmFsRGF0YTogUGl2b3RDb25maWdEYXRhXG4gICk6IExtclBpdm90U3RlbURhdGEge1xuICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmNvbnZlcnRNYXBUb1Bpdm90RGF0YUhlYWRlcihcbiAgICAgIGFnZ3JlZ2F0ZWREYXRhLm1hcCxcbiAgICAgIGFnZ3JlZ2F0ZWREYXRhLnJvd0xldmVscyxcbiAgICAgIHBpdm90Q29sb3JzLnJvd3MsXG4gICAgICBwaXZvdENvbG9ycy52YWx1ZXMsXG4gICAgICBhZGRpdGlvbmFsRGF0YS5yb3dBdHRyaWJ1dGVzXG4gICAgKTtcbiAgICBjb25zdCByb3dIZWFkZXJBdHRyaWJ1dGVzOiBMbXJQaXZvdEhlYWRlckF0dHJpYnV0ZVtdID0gKGFkZGl0aW9uYWxEYXRhLnJvd0F0dHJpYnV0ZXMgfHwgW10pXG4gICAgICAubWFwKChhdHRyaWJ1dGUsIGluZGV4KSA9PiBhZGRpdGlvbmFsRGF0YS5yb3dTaG93SGVhZGVyQXR0cmlidXRlcz8uW2luZGV4XSA/ICh7dGl0bGU6IGF0dHJpYnV0ZS5uYW1lLCBjb2xvcjogcGl2b3RDb2xvcnMucm93cz8uW2luZGV4XX0pIDogdW5kZWZpbmVkKVxuXG4gICAgY29uc3Qge3RpdGxlczogdmFsdWVUaXRsZXMsIGNvbnN0cmFpbnRzOiB2YWx1ZXNDb25zdHJhaW50c30gPSB0aGlzLmNyZWF0ZVZhbHVlVGl0bGVzKHZhbHVlQXR0cmlidXRlcyk7XG4gICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuY29udmVydE1hcFRvUGl2b3REYXRhSGVhZGVyKFxuICAgICAgYWdncmVnYXRlZERhdGEucm93TGV2ZWxzID4gMCA/IGFnZ3JlZ2F0ZWREYXRhLmNvbHVtbnNNYXAgOiBhZ2dyZWdhdGVkRGF0YS5tYXAsXG4gICAgICBhZ2dyZWdhdGVkRGF0YS5jb2x1bW5MZXZlbHMsXG4gICAgICBwaXZvdENvbG9ycy5jb2x1bW5zLFxuICAgICAgcGl2b3RDb2xvcnMudmFsdWVzLFxuICAgICAgYWRkaXRpb25hbERhdGEuY29sdW1uQXR0cmlidXRlcyxcbiAgICAgIHZhbHVlVGl0bGVzXG4gICAgKTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJBdHRyaWJ1dGVzOiBMbXJQaXZvdEhlYWRlckF0dHJpYnV0ZVtdID0gKGFkZGl0aW9uYWxEYXRhLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pXG4gICAgICAubWFwKChhdHRyaWJ1dGUsIGluZGV4KSA9PiAgYWRkaXRpb25hbERhdGEuY29sdW1uU2hvd0hlYWRlckF0dHJpYnV0ZXM/LltpbmRleF0gPyAoe3RpdGxlOiBhdHRyaWJ1dGUubmFtZSwgY29sb3I6IHBpdm90Q29sb3JzLmNvbHVtbnM/LltpbmRleF19KSA6IHVuZGVmaW5lZClcblxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuaW5pdE1hdHJpeDxudW1iZXI+KHJvd0RhdGEubWF4SW5kZXggKyAxLCBjb2x1bW5EYXRhLm1heEluZGV4ICsgMSk7XG4gICAgY29uc3QgZGF0YVJlc291cmNlcyA9IHRoaXMuaW5pdE1hdHJpeDxEYXRhUmVzb3VyY2VbXT4ocm93RGF0YS5tYXhJbmRleCArIDEsIGNvbHVtbkRhdGEubWF4SW5kZXggKyAxKTtcbiAgICBpZiAoKHZhbHVlQXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWxsVmFsdWVzKHZhbHVlcywgZGF0YVJlc291cmNlcywgcm93RGF0YS5oZWFkZXJzLCBjb2x1bW5EYXRhLmhlYWRlcnMsIHZhbHVlQXR0cmlidXRlcywgYWdncmVnYXRlZERhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlQWdncmVnYXRpb25zID0gKHZhbHVlQXR0cmlidXRlcyB8fCBbXSkubWFwKHZhbHVlQXR0cmlidXRlID0+IHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uKTtcblxuICAgIGNvbnN0IGhhc0FkZGl0aW9uYWxDb2x1bW5MZXZlbCA9XG4gICAgICAoYWdncmVnYXRlZERhdGEuY29sdW1uTGV2ZWxzID09PSAwICYmIHZhbHVlVGl0bGVzLmxlbmd0aCA+IDApIHx8XG4gICAgICAoYWdncmVnYXRlZERhdGEuY29sdW1uTGV2ZWxzID4gMCAmJiB2YWx1ZVRpdGxlcy5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4ge1xuICAgICAgcm93SGVhZGVyczogcm93RGF0YS5oZWFkZXJzLFxuICAgICAgcm93SGVhZGVyQXR0cmlidXRlcyxcbiAgICAgIGNvbHVtbkhlYWRlcnM6IGNvbHVtbkRhdGEuaGVhZGVycyxcbiAgICAgIGNvbHVtbkhlYWRlckF0dHJpYnV0ZXMsXG4gICAgICB2YWx1ZVRpdGxlcyxcbiAgICAgIHZhbHVlcyxcbiAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICB2YWx1ZXNDb25zdHJhaW50cyxcbiAgICAgIHZhbHVlQWdncmVnYXRpb25zLFxuXG4gICAgICAuLi5hZGRpdGlvbmFsRGF0YSxcblxuICAgICAgdmFsdWVUeXBlczogdmFsdWVBdHRyaWJ1dGVzLm1hcChhdHRyID0+IGF0dHIudmFsdWVUeXBlISksXG4gICAgICBoYXNBZGRpdGlvbmFsQ29sdW1uTGV2ZWwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydE1hcFRvUGl2b3REYXRhSGVhZGVyKFxuICAgIG1hcDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBsZXZlbHM6IG51bWJlcixcbiAgICBjb2xvcnM6IHN0cmluZ1tdLFxuICAgIHZhbHVlQ29sb3JzOiBzdHJpbmdbXSxcbiAgICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSxcbiAgICB2YWx1ZVRpdGxlcz86IHN0cmluZ1tdLFxuICAgIGFkZGl0aW9uYWxOdW06IG51bWJlciA9IDBcbiAgKToge2hlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdOyBtYXhJbmRleDogbnVtYmVyfSB7XG4gICAgY29uc3QgaGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10gPSBbXTtcbiAgICBjb25zdCBkYXRhID0ge21heEluZGV4OiAwfTtcbiAgICBpZiAobGV2ZWxzID09PSAwKSB7XG4gICAgICBpZiAoKHZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgICAuLi52YWx1ZVRpdGxlcyEubWFwKCh0aXRsZSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIHRhcmdldEluZGV4OiBpbmRleCArIGFkZGl0aW9uYWxOdW0sXG4gICAgICAgICAgICBjb2xvcjogdmFsdWVDb2xvcnNbaW5kZXhdLFxuICAgICAgICAgICAgaXNWYWx1ZUhlYWRlcjogdHJ1ZSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgICAgZGF0YS5tYXhJbmRleCA9IHZhbHVlVGl0bGVzIS5sZW5ndGggLSAxICsgYWRkaXRpb25hbE51bTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IGFkZGl0aW9uYWxOdW07XG4gICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goKHRpdGxlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXNbMF07XG4gICAgICAgIGlmIChsZXZlbHMgPT09IDEgJiYgKHZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGggPD0gMSkge1xuICAgICAgICAgIGhlYWRlcnMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIHRhcmdldEluZGV4OiBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgICBjb2xvcjogY29sb3JzWzBdLFxuICAgICAgICAgICAgY29uc3RyYWludDogYXR0cmlidXRlPy5jb25zdHJhaW50IHx8IG5ldyBVbmtub3duQ29uc3RyYWludCgpLFxuICAgICAgICAgICAgaXNWYWx1ZUhlYWRlcjogZmFsc2UsXG4gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBhdHRyaWJ1dGU/Lm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0YS5tYXhJbmRleCA9IE1hdGgubWF4KGRhdGEubWF4SW5kZXgsIGN1cnJlbnRJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yc1swXSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IGZhbHNlLFxuICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlPy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pdGVyYXRlVGhyb3VnaFBpdm90RGF0YUhlYWRlcihcbiAgICAgICAgICBtYXBbdGl0bGVdLFxuICAgICAgICAgIGhlYWRlcnNbaW5kZXhdLFxuICAgICAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgICAgICAxLFxuICAgICAgICAgIGxldmVscyxcbiAgICAgICAgICBjb2xvcnMsXG4gICAgICAgICAgdmFsdWVDb2xvcnMsXG4gICAgICAgICAgdmFsdWVUaXRsZXMgfHwgW10sXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnRJbmRleCArPSB0aGlzLm51bUNoaWxkcmVuKG1hcFt0aXRsZV0sIGxldmVscyAtIDEsICh2YWx1ZVRpdGxlcyAmJiB2YWx1ZVRpdGxlcy5sZW5ndGgpIHx8IDEpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtoZWFkZXJzLCBtYXhJbmRleDogZGF0YS5tYXhJbmRleH07XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVUaHJvdWdoUGl2b3REYXRhSGVhZGVyKFxuICAgIGN1cnJlbnRNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgaGVhZGVyOiBMbXJQaXZvdERhdGFIZWFkZXIsXG4gICAgaGVhZGVySW5kZXg6IG51bWJlcixcbiAgICBsZXZlbDogbnVtYmVyLFxuICAgIG1heExldmVsczogbnVtYmVyLFxuICAgIGNvbG9yczogc3RyaW5nW10sXG4gICAgdmFsdWVDb2xvcnM6IHN0cmluZ1tdLFxuICAgIHZhbHVlVGl0bGVzOiBzdHJpbmdbXSxcbiAgICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSxcbiAgICBhZGRpdGlvbmFsRGF0YToge21heEluZGV4OiBudW1iZXJ9XG4gICkge1xuICAgIGlmIChsZXZlbCA9PT0gbWF4TGV2ZWxzKSB7XG4gICAgICBpZiAoKHZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGhlYWRlci5jaGlsZHJlbiA9IHZhbHVlVGl0bGVzLm1hcCgodGl0bGUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHRhcmdldEluZGV4OiBoZWFkZXJJbmRleCArIGluZGV4LFxuICAgICAgICAgIGNvbG9yOiB2YWx1ZUNvbG9yc1tpbmRleF0sXG4gICAgICAgICAgaXNWYWx1ZUhlYWRlcjogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgICBhZGRpdGlvbmFsRGF0YS5tYXhJbmRleCA9IE1hdGgubWF4KGFkZGl0aW9uYWxEYXRhLm1heEluZGV4LCBoZWFkZXJJbmRleCArIHZhbHVlVGl0bGVzLmxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGhlYWRlci5jaGlsZHJlbiA9IFtdO1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBoZWFkZXJJbmRleDtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50TWFwKS5mb3JFYWNoKCh0aXRsZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlc1tsZXZlbF07XG4gICAgICBpZiAobGV2ZWwgKyAxID09PSBtYXhMZXZlbHMgJiYgKHZhbHVlVGl0bGVzIHx8IFtdKS5sZW5ndGggPD0gMSkge1xuICAgICAgICBoZWFkZXIuY2hpbGRyZW4hLnB1c2goe1xuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHRhcmdldEluZGV4OiBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgY29sb3I6IGNvbG9yc1tsZXZlbF0sXG4gICAgICAgICAgY29uc3RyYWludDogYXR0cmlidXRlPy5jb25zdHJhaW50IHx8IG5ldyBVbmtub3duQ29uc3RyYWludCgpLFxuICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IGZhbHNlLFxuICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGF0dHJpYnV0ZT8ubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGFkZGl0aW9uYWxEYXRhLm1heEluZGV4ID0gTWF0aC5tYXgoYWRkaXRpb25hbERhdGEubWF4SW5kZXgsIGN1cnJlbnRJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkZXIuY2hpbGRyZW4hLnB1c2goe1xuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIGNvbG9yOiBjb2xvcnNbbGV2ZWxdLFxuICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICBpc1ZhbHVlSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBhdHRyaWJ1dGU/Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLml0ZXJhdGVUaHJvdWdoUGl2b3REYXRhSGVhZGVyKFxuICAgICAgICBjdXJyZW50TWFwW3RpdGxlXSxcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuPy5baW5kZXhdLFxuICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgIGxldmVsICsgMSxcbiAgICAgICAgbWF4TGV2ZWxzLFxuICAgICAgICBjb2xvcnMsXG4gICAgICAgIHZhbHVlQ29sb3JzLFxuICAgICAgICB2YWx1ZVRpdGxlcyxcbiAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgYWRkaXRpb25hbERhdGFcbiAgICAgICk7XG5cbiAgICAgIGN1cnJlbnRJbmRleCArPSB0aGlzLm51bUNoaWxkcmVuKFxuICAgICAgICBjdXJyZW50TWFwW3RpdGxlXSxcbiAgICAgICAgbWF4TGV2ZWxzIC0gKGxldmVsICsgMSksXG4gICAgICAgICh2YWx1ZVRpdGxlcyAmJiB2YWx1ZVRpdGxlcy5sZW5ndGgpIHx8IDFcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG51bUNoaWxkcmVuKG1hcDogUmVjb3JkPHN0cmluZywgYW55PiwgbWF4TGV2ZWxzOiBudW1iZXIsIG51bVRpdGxlczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobWF4TGV2ZWxzID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVtVGl0bGVzO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtYXAgfHwge30pO1xuICAgIGlmIChtYXhMZXZlbHMgPT09IDEpIHtcbiAgICAgIHJldHVybiBrZXlzLmxlbmd0aCAqIG51bVRpdGxlcztcbiAgICB9XG5cbiAgICBjb25zdCBjb3VudCA9IGtleXMucmVkdWNlKChzdW0sIGtleSkgPT4gc3VtICsgdGhpcy5udW1DaGlsZHJlblJlY3Vyc2l2ZShtYXBba2V5XSwgMSwgbWF4TGV2ZWxzKSwgMCk7XG4gICAgcmV0dXJuIGNvdW50ICogbnVtVGl0bGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBudW1DaGlsZHJlblJlY3Vyc2l2ZShtYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sIGxldmVsOiBudW1iZXIsIG1heExldmVsczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobGV2ZWwgPj0gbWF4TGV2ZWxzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobWFwIHx8IHt9KTtcbiAgICBpZiAobGV2ZWwgKyAxID09PSBtYXhMZXZlbHMpIHtcbiAgICAgIHJldHVybiBrZXlzLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKHN1bSwga2V5KSA9PiBzdW0gKyB0aGlzLm51bUNoaWxkcmVuUmVjdXJzaXZlKG1hcFtrZXldLCBsZXZlbCArIDEsIG1heExldmVscyksIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVWYWx1ZVRpdGxlcyh2YWx1ZUF0dHJpYnV0ZXM6IExtclBpdm90VmFsdWVBdHRyaWJ1dGVbXSk6IHt0aXRsZXM6IHN0cmluZ1tdOyBjb25zdHJhaW50czogQ29uc3RyYWludFtdfSB7XG4gICAgcmV0dXJuICh2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLnJlZHVjZTx7dGl0bGVzOiBzdHJpbmdbXTsgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXX0+KFxuICAgICAgKHt0aXRsZXMsIGNvbnN0cmFpbnRzfSwgcGl2b3RBdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5maW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZSk7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2goXG4gICAgICAgICAgZGF0YUFnZ3JlZ2F0aW9uQ29uc3RyYWludChwaXZvdEF0dHJpYnV0ZS5hZ2dyZWdhdGlvbikgfHwgdGhpcy5waXZvdEF0dHJpYnV0ZUNvbnN0cmFpbnQocGl2b3RBdHRyaWJ1dGUpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmNyZWF0ZVZhbHVlVGl0bGUocGl2b3RBdHRyaWJ1dGUuYWdncmVnYXRpb24sIGF0dHJpYnV0ZT8ubmFtZSB8fCAnJyk7XG4gICAgICAgIHRpdGxlcy5wdXNoKHRpdGxlKTtcblxuICAgICAgICByZXR1cm4ge3RpdGxlcywgY29uc3RyYWludHN9O1xuICAgICAgfSxcbiAgICAgIHt0aXRsZXM6IFtdLCBjb25zdHJhaW50czogW119XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVWYWx1ZVRpdGxlKGFnZ3JlZ2F0aW9uOiBEYXRhQWdncmVnYXRpb25UeXBlLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlQWdncmVnYXRpb25UaXRsZSA9IHRoaXMudHJhbnNmb3JtPy5mb3JtYXRBZ2dyZWdhdGlvbj8uKGFnZ3JlZ2F0aW9uKSB8fCBhZ2dyZWdhdGlvbi50b1N0cmluZygpO1xuICAgIHJldHVybiBgJHt2YWx1ZUFnZ3JlZ2F0aW9uVGl0bGV9ICR7YXR0cmlidXRlTmFtZSB8fCAnJ31gLnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE1hdHJpeDxUPihyb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcik6IFRbXVtdIHtcbiAgICBjb25zdCBtYXRyaXg6IFRbXVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIG1hdHJpeFtpXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4W2ldW2pdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBwcml2YXRlIGZpbGxWYWx1ZXMoXG4gICAgdmFsdWVzOiBudW1iZXJbXVtdLFxuICAgIGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdW11bXSxcbiAgICByb3dIZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgICBjb2x1bW5IZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgICB2YWx1ZUF0dHJpYnV0ZXM6IExtclBpdm90VmFsdWVBdHRyaWJ1dGVbXSxcbiAgICBhZ2dyZWdhdGVkRGF0YTogQWdncmVnYXRlZE1hcERhdGFcbiAgKSB7XG4gICAgaWYgKHJvd0hlYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pdGVyYXRlVGhyb3VnaFJvd0hlYWRlcnMoXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZGF0YVJlc291cmNlcyxcbiAgICAgICAgcm93SGVhZGVycyxcbiAgICAgICAgY29sdW1uSGVhZGVycyxcbiAgICAgICAgdmFsdWVBdHRyaWJ1dGVzLFxuICAgICAgICBhZ2dyZWdhdGVkRGF0YS5tYXBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hDb2x1bW5IZWFkZXJzKHZhbHVlcywgZGF0YVJlc291cmNlcywgY29sdW1uSGVhZGVycywgMCwgdmFsdWVBdHRyaWJ1dGVzLCBhZ2dyZWdhdGVkRGF0YS5tYXApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXRlcmF0ZVRocm91Z2hSb3dIZWFkZXJzKFxuICAgIHZhbHVlczogbnVtYmVyW11bXSxcbiAgICBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXVtdW10sXG4gICAgcm93SGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgY29sdW1uSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgdmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10sXG4gICAgY3VycmVudE1hcDogQWdncmVnYXRlZERhdGFNYXBcbiAgKSB7XG4gICAgZm9yIChjb25zdCByb3dIZWFkZXIgb2Ygcm93SGVhZGVycykge1xuICAgICAgY29uc3Qgcm93SGVhZGVyTWFwID0gY3VycmVudE1hcFtyb3dIZWFkZXIudGl0bGVdIHx8IHt9O1xuXG4gICAgICBpZiAocm93SGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hSb3dIZWFkZXJzKFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIHJvd0hlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICBjb2x1bW5IZWFkZXJzLFxuICAgICAgICAgIHZhbHVlQXR0cmlidXRlcyxcbiAgICAgICAgICByb3dIZWFkZXJNYXBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQocm93SGVhZGVyLnRhcmdldEluZGV4KSAmJiBjb2x1bW5IZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5pdGVyYXRlVGhyb3VnaENvbHVtbkhlYWRlcnMoXG4gICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgICAgY29sdW1uSGVhZGVycyxcbiAgICAgICAgICByb3dIZWFkZXIudGFyZ2V0SW5kZXghLFxuICAgICAgICAgIHZhbHVlQXR0cmlidXRlcyxcbiAgICAgICAgICByb3dIZWFkZXJNYXBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVUaHJvdWdoQ29sdW1uSGVhZGVycyhcbiAgICB2YWx1ZXM6IG51bWJlcltdW10sXG4gICAgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW11bXVtdLFxuICAgIGNvbHVtbkhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgdmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10sXG4gICAgY3VycmVudE1hcDogQWdncmVnYXRlZERhdGFNYXAgfCBBZ2dyZWdhdGVkRGF0YVZhbHVlc1tdXG4gICkge1xuICAgIGZvciAoY29uc3QgY29sdW1uSGVhZGVyIG9mIGNvbHVtbkhlYWRlcnMpIHtcbiAgICAgIGlmIChjb2x1bW5IZWFkZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5pdGVyYXRlVGhyb3VnaENvbHVtbkhlYWRlcnMoXG4gICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgICAgY29sdW1uSGVhZGVyLmNoaWxkcmVuLFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIHZhbHVlQXR0cmlidXRlcyxcbiAgICAgICAgICBjdXJyZW50TWFwW2NvbHVtbkhlYWRlci50aXRsZV0gfHwge31cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOb3ROdWxsT3JVbmRlZmluZWQoY29sdW1uSGVhZGVyLnRhcmdldEluZGV4KSkge1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGVkRGF0YVZhbHVlcyA9IGlzQXJyYXkoY3VycmVudE1hcCkgPyBjdXJyZW50TWFwIDogY3VycmVudE1hcFtjb2x1bW5IZWFkZXIudGl0bGVdO1xuXG4gICAgICAgIGlmICh2YWx1ZUF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVJbmRleCA9IGNvbHVtbkhlYWRlci50YXJnZXRJbmRleCEgJSB2YWx1ZUF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IHt2YWx1ZSwgZGF0YVJlc291cmNlczogYWdncmVnYXRlZERhdGFSZXNvdXJjZXN9ID0gdGhpcy5hZ2dyZWdhdGVWYWx1ZShcbiAgICAgICAgICAgIHZhbHVlQXR0cmlidXRlc1t2YWx1ZUluZGV4XSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZWREYXRhVmFsdWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2YWx1ZXNbcm93SW5kZXhdW2NvbHVtbkhlYWRlci50YXJnZXRJbmRleCFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVJlc291cmNlc1tyb3dJbmRleF1bY29sdW1uSGVhZGVyLnRhcmdldEluZGV4IV0gPSBhZ2dyZWdhdGVkRGF0YVJlc291cmNlcyB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWdncmVnYXRlVmFsdWUoXG4gICAgdmFsdWVBdHRyaWJ1dGU6IExtclBpdm90VmFsdWVBdHRyaWJ1dGUsXG4gICAgYWdncmVnYXRlZERhdGFWYWx1ZXM6IEFnZ3JlZ2F0ZWREYXRhVmFsdWVzW11cbiAgKToge3ZhbHVlPzogYW55OyBkYXRhUmVzb3VyY2VzPzogRGF0YVJlc291cmNlW119IHtcbiAgICBjb25zdCByZXNvdXJjZUFnZ3JlZ2F0ZWREYXRhVmFsdWVzID0gKGFnZ3JlZ2F0ZWREYXRhVmFsdWVzIHx8IFtdKS5maWx0ZXIoXG4gICAgICBhZ2cgPT4gYWdnLnJlc291cmNlSWQgPT09IHZhbHVlQXR0cmlidXRlLnJlc291cmNlSWQgJiYgYWdnLnR5cGUgPT09IHZhbHVlQXR0cmlidXRlLnJlc291cmNlVHlwZVxuICAgICk7XG4gICAgaWYgKHJlc291cmNlQWdncmVnYXRlZERhdGFWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkYXRhUmVzb3VyY2VzID0gZmxhdHRlbk1hdHJpeChyZXNvdXJjZUFnZ3JlZ2F0ZWREYXRhVmFsdWVzLm1hcCh2YWwgPT4gdmFsLm9iamVjdHMpKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMucGl2b3RBdHRyaWJ1dGVBdHRyaWJ1dGUodmFsdWVBdHRyaWJ1dGUpO1xuICAgICAgaWYgKHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uID09PSBEYXRhQWdncmVnYXRpb25UeXBlLkpvaW4pIHtcbiAgICAgICAgLy8gdmFsdWVzIHdpbGwgYmUgam9pbmVkIGluIHBpdm90LXRhYmxlLWNvbnZlcnRlclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSAoZGF0YVJlc291cmNlcyB8fCBbXSkubWFwKChyZXNvdXJjZTogRGF0YVJlc291cmNlKSA9PiByZXNvdXJjZS5kYXRhPy5bYXR0cmlidXRlPy5pZCB8fCAnJ10pO1xuICAgICAgICByZXR1cm4ge3ZhbHVlOiB1bmlxdWVWYWx1ZXMoZmxhdHRlblZhbHVlcyh2YWx1ZXMpKSwgZGF0YVJlc291cmNlc307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlICYmIGFnZ3JlZ2F0ZURhdGFSZXNvdXJjZXModmFsdWVBdHRyaWJ1dGUuYWdncmVnYXRpb24sIGRhdGFSZXNvdXJjZXMsIGF0dHJpYnV0ZSwgdHJ1ZSk7XG4gICAgICByZXR1cm4ge3ZhbHVlLCBkYXRhUmVzb3VyY2VzfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIGZpbmRBdHRyaWJ1dGVCeVBpdm90QXR0cmlidXRlKHZhbHVlQXR0cmlidXRlOiBMbXJQaXZvdEF0dHJpYnV0ZSk6IEF0dHJpYnV0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlQXR0cmlidXRlLnJlc291cmNlVHlwZSA9PT0gQXR0cmlidXRlc1Jlc291cmNlVHlwZS5Db2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uc0F0dHJpYnV0ZXNNYXA/Llt2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZUlkXT8uW3ZhbHVlQXR0cmlidXRlLmF0dHJpYnV0ZUlkXTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlQXR0cmlidXRlLnJlc291cmNlVHlwZSA9PT0gQXR0cmlidXRlc1Jlc291cmNlVHlwZS5MaW5rVHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlua1R5cGVzQXR0cmlidXRlc01hcD8uW3ZhbHVlQXR0cmlidXRlLnJlc291cmNlSWRdPy5bdmFsdWVBdHRyaWJ1dGUuYXR0cmlidXRlSWRdO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGl2b3RTdGVtQ29uZmlnVHlwZShzdGVtQ29uZmlnOiBMbXJQaXZvdFN0ZW1Db25maWcpOiBQaXZvdENvbmZpZ1R5cGUge1xuICBjb25zdCByb3dMZW5ndGggPSAoc3RlbUNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG4gIGNvbnN0IGNvbHVtbkxlbmd0aCA9IChzdGVtQ29uZmlnLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aDtcblxuICBpZiAocm93TGVuZ3RoID4gMCAmJiBjb2x1bW5MZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFBpdm90Q29uZmlnVHlwZS5Sb3dzQW5kQ29sdW1ucztcbiAgfSBlbHNlIGlmIChyb3dMZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFBpdm90Q29uZmlnVHlwZS5Sb3dzO1xuICB9IGVsc2UgaWYgKGNvbHVtbkxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gUGl2b3RDb25maWdUeXBlLkNvbHVtbnM7XG4gIH1cbiAgcmV0dXJuIFBpdm90Q29uZmlnVHlwZS5WYWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGNhbk1lcmdlQ29uZmlnc0J5VHlwZSh0eXBlOiBQaXZvdENvbmZpZ1R5cGUsIGMxOiBMbXJQaXZvdFN0ZW1Db25maWcsIGMyOiBMbXJQaXZvdFN0ZW1Db25maWcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGUgPT09IFBpdm90Q29uZmlnVHlwZS5Sb3dzKSB7XG4gICAgcmV0dXJuIChjMS5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGggPT09IChjMi5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gUGl2b3RDb25maWdUeXBlLkNvbHVtbnMpIHtcbiAgICByZXR1cm4gKGMxLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aCA9PT0gKGMyLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gKFxuICAgIChjMS5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGggPT09IChjMi5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGggJiZcbiAgICAoYzEuY29sdW1uQXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID09PSAoYzIuY29sdW1uQXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoXG4gICk7XG59XG4iXX0=
|