breeze-client 2.1.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/package.json +2 -2
  3. package/adapter-ajax-fetch/package.json +2 -2
  4. package/adapter-ajax-httpclient/package.json +2 -6
  5. package/adapter-ajax-jquery/package.json +2 -2
  6. package/adapter-ajax-post/package.json +2 -2
  7. package/adapter-data-service-odata/package.json +2 -2
  8. package/adapter-data-service-webapi/package.json +2 -2
  9. package/adapter-model-library-backing-store/package.json +2 -2
  10. package/adapter-model-library-ko/package.json +2 -2
  11. package/adapter-uri-builder-json/package.json +2 -2
  12. package/adapter-uri-builder-odata/package.json +2 -2
  13. package/breeze-client.d.ts +1 -1
  14. package/breeze-client.metadata.json +1 -1
  15. package/bundles/breeze-client.umd.js +9 -5
  16. package/bundles/breeze-client.umd.js.map +1 -1
  17. package/bundles/breeze-client.umd.min.js +1 -1
  18. package/bundles/breeze-client.umd.min.js.map +1 -1
  19. package/esm2015/breeze-client.js +2 -2
  20. package/esm2015/src/array.js +1 -1
  21. package/esm2015/src/breeze.js +2 -2
  22. package/esm2015/src/core.js +4 -1
  23. package/esm2015/src/csdl-metadata-parser.js +3 -3
  24. package/esm2015/src/default-property-interceptor.js +3 -2
  25. package/esm2015/src/enum.js +2 -2
  26. package/esm2015/src/local-query-comparison-options.js +1 -1
  27. package/esm5/breeze-client.js +2 -2
  28. package/esm5/src/array.js +1 -1
  29. package/esm5/src/breeze.js +2 -2
  30. package/esm5/src/core.js +4 -1
  31. package/esm5/src/csdl-metadata-parser.js +3 -3
  32. package/esm5/src/default-property-interceptor.js +3 -2
  33. package/esm5/src/enum.js +2 -2
  34. package/esm5/src/local-query-comparison-options.js +1 -1
  35. package/fesm2015/breeze-client.js +9 -5
  36. package/fesm2015/breeze-client.js.map +1 -1
  37. package/fesm5/breeze-client.js +9 -5
  38. package/fesm5/breeze-client.js.map +1 -1
  39. package/mixin-get-entity-graph/package.json +2 -2
  40. package/mixin-save-queuing/package.json +2 -2
  41. package/package.json +1 -1
  42. package/esm2015/public_api.js +0 -2
  43. package/esm5/public_api.js +0 -2
  44. package/public_api.d.ts +0 -1
@@ -23,7 +23,8 @@ export function defaultPropertyInterceptor(property, newValue, rawAccessorFn) {
23
23
  }
24
24
  }
25
25
  // exit if no change - extra cruft is because dateTimes don't compare cleanly.
26
- if (newValue === oldValue || (dataType && dataType.normalize && newValue && oldValue && dataType.normalize(newValue) === dataType.normalize(oldValue))) {
26
+ if (newValue === oldValue || (newValue === null && oldValue === undefined) ||
27
+ (dataType && dataType.normalize && newValue && oldValue && dataType.normalize(newValue) === dataType.normalize(oldValue))) {
27
28
  return;
28
29
  }
29
30
  // CANNOT DO NEXT LINE because it has the possibility of creating a new property
@@ -456,4 +457,4 @@ function updateStateAndValidate(context) {
456
457
  entityAspect._validateProperty(context.newValue, { entity: entityAspect.entity, property: property, propertyName: context.propertyName, oldValue: context.oldValue });
457
458
  }
458
459
  }
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBMkMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3Qyx3QkFBd0I7QUFDeEIsTUFBTSxVQUFVLDBCQUEwQixDQUF5QixRQUF3QixFQUFFLFFBQWEsRUFBRSxhQUF1QjtJQUNqSSwrQ0FBK0M7SUFFL0MsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxrRUFBa0U7SUFDL0csSUFBSSxRQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFL0IsSUFBSSxRQUFRLEdBQUksUUFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDMUMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtRQUM5Qiw0RkFBNEY7UUFDNUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNqRCxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztTQUNKO2FB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QUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUMxSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgQ29tcGxleFR5cGUsIERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5QXNwZWN0LCBDb21wbGV4QXNwZWN0LCBFbnRpdHksIFN0cnVjdHVyYWxPYmplY3QgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5UXVlcnkgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0eUludGVyY2VwdG9yKHRoaXM6IFN0cnVjdHVyYWxPYmplY3QsIHByb3BlcnR5OiBFbnRpdHlQcm9wZXJ0eSwgbmV3VmFsdWU6IGFueSwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuICAvLyAndGhpcycgaXMgdGhlIGVudGl0eSBpdHNlbGYgaW4gdGhpcyBjb250ZXh0LlxyXG5cclxuICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgbmV3VmFsdWUgPSBudWxsOyAvLyByZW1vdmU/IHRvIGFsbG93IGFzc2lnbm1lbnQgdG8gdW5kZWZpbmVkIGluIEJhYmVsIGNvbnN0cnVjdG9ycz9cclxuICBsZXQgb2xkVmFsdWUgPSByYXdBY2Nlc3NvckZuKCk7XHJcblxyXG4gIGxldCBkYXRhVHlwZSA9IChwcm9wZXJ0eSBhcyBhbnkpLmRhdGFUeXBlO1xyXG4gIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5wYXJzZSkge1xyXG4gICAgLy8gYXR0ZW1wdHMgdG8gY29lcmNlIGEgdmFsdWUgdG8gdGhlIGNvcnJlY3QgdHlwZSAtIGlmIHRoaXMgZmFpbHMgcmV0dXJuIHRoZSB2YWx1ZSB1bmNoYW5nZWRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiAhcHJvcGVydHkuaXNTY2FsYXIpIHtcclxuICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5tYXAoZnVuY3Rpb24gKG52KSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFUeXBlLnBhcnNlKG52LCB0eXBlb2YgbnYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gZGF0YVR5cGUucGFyc2UobmV3VmFsdWUsIHR5cGVvZiBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBleGl0IGlmIG5vIGNoYW5nZSAtIGV4dHJhIGNydWZ0IGlzIGJlY2F1c2UgZGF0ZVRpbWVzIGRvbid0IGNvbXBhcmUgY2xlYW5seS5cclxuICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlIHx8IChkYXRhVHlwZSAmJiBkYXRhVHlwZS5ub3JtYWxpemUgJiYgbmV3VmFsdWUgJiYgb2xkVmFsdWUgJiYgZGF0YVR5cGUubm9ybWFsaXplKG5ld1ZhbHVlKSA9PT0gZGF0YVR5cGUubm9ybWFsaXplKG9sZFZhbHVlKSkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIENBTk5PVCBETyBORVhUIExJTkUgYmVjYXVzZSBpdCBoYXMgdGhlIHBvc3NpYmlsaXR5IG9mIGNyZWF0aW5nIGEgbmV3IHByb3BlcnR5XHJcbiAgLy8gJ2VudGl0eUFzcGVjdCcgb24gJ3RoaXMnLiAgLSBOb3QgcGVybWl0dGVkIGJ5IElFIGluc2lkZSBvZiBhIGRlZmluZWQgcHJvcGVydHkgb24gYSBwcm90b3R5cGUuXHJcbiAgLy8gbGV0IGVudGl0eUFzcGVjdCA9IG5ldyBFbnRpdHlBc3BlY3QodGhpcyk7XHJcblxyXG4gIGxldCBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gKHRoaXMgYXMgYW55KS5lbnRpdHlBc3BlY3QgYXMgRW50aXR5QXNwZWN0O1xyXG4gIGlmIChlbnRpdHlBc3BlY3QpIHtcclxuICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCBsb2NhbEFzcGVjdCA9ICh0aGlzIGFzIGFueSkuY29tcGxleEFzcGVjdCBhcyBDb21wbGV4QXNwZWN0O1xyXG4gICAgaWYgKGxvY2FsQXNwZWN0KSB7XHJcbiAgICAgIGVudGl0eUFzcGVjdCA9IGxvY2FsQXNwZWN0LmdldEVudGl0eUFzcGVjdCgpO1xyXG4gICAgICBwcm9wZXJ0eU5hbWUgPSBsb2NhbEFzcGVjdC5nZXRQcm9wZXJ0eVBhdGgocHJvcGVydHkubmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBFbnRpdHlBc3BlY3Qgc28ganVzdCBzZXQgdGhlIHByb3BcclxuICAgICAgcmF3QWNjZXNzb3JGbihuZXdWYWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGhhbmRsZSBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIHByb2Nlc3MsIG5vdCBqdXN0IG9uZSBpbiBvcmRlciB0byBhdm9pZCByZWN1cnNpb24uXHJcbiAgLy8gKCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgbnVsbCBwcm9wYWdhdGlvbiB3aXRoIGZrcyB3aGVyZSBudWxsIC0+IDAgaW4gc29tZSBjYXNlcy4pXHJcbiAgLy8gKHRoaXMgbWF5IG5vdCBiZSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgbmV3VmFsdWUgPT09IG9sZFZhbHVlIHRlc3QgYWJvdmUpXHJcbiAgbGV0IGluUHJvY2VzcyA9IGVudGl0eUFzcGVjdC5faW5Qcm9jZXNzID0gZW50aXR5QXNwZWN0Ll9pblByb2Nlc3MgfHwgW107XHJcbiAgLy8gY2hlY2sgZm9yIHJlY3Vyc2lvblxyXG4gIGlmIChpblByb2Nlc3MuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMCkgcmV0dXJuO1xyXG4gIGluUHJvY2Vzcy5wdXNoKHByb3BlcnR5KTtcclxuXHJcbiAgdHJ5IHtcclxuXHJcbiAgICBsZXQgY29udGV4dDogSUNvbnRleHQgPSB7XHJcbiAgICAgIHBhcmVudDogdGhpcyxcclxuICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxyXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXHJcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcclxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXHJcbiAgICAgIGVudGl0eUFzcGVjdDogZW50aXR5QXNwZWN0XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICgocHJvcGVydHkgYXMgYW55KS5pc0NvbXBsZXhQcm9wZXJ0eSkge1xyXG4gICAgICBzZXREcFZhbHVlQ29tcGxleChjb250ZXh0LCByYXdBY2Nlc3NvckZuKTtcclxuICAgIH0gZWxzZSBpZiAocHJvcGVydHkuaXNEYXRhUHJvcGVydHkpIHtcclxuICAgICAgc2V0RHBWYWx1ZVNpbXBsZShjb250ZXh0LCByYXdBY2Nlc3NvckZuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldE5wVmFsdWUoY29udGV4dCwgcmF3QWNjZXNzb3JGbik7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdENoYW5nZUV2ZW50cyhjb250ZXh0KTtcclxuXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGluUHJvY2Vzcy5wb3AoKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBJQ29udGV4dCB7XHJcbiAgcGFyZW50OiBTdHJ1Y3R1cmFsT2JqZWN0O1xyXG4gIHByb3BlcnR5OiBFbnRpdHlQcm9wZXJ0eTtcclxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBlbnRpdHlBc3BlY3Q6IEVudGl0eUFzcGVjdDtcclxuICBvbGRWYWx1ZTogYW55O1xyXG4gIG5ld1ZhbHVlOiBhbnk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldERwVmFsdWVTaW1wbGUoY29udGV4dDogSUNvbnRleHQsIHJhd0FjY2Vzc29yRm46IGFueSkge1xyXG4gIGxldCBwYXJlbnQgPSBjb250ZXh0LnBhcmVudDtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIERhdGFQcm9wZXJ0eTtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG5cclxuICBpZiAoIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25zY2FsYXIgZGF0YSBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSAtIGl0ZW1zIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGJ1dCB0aGUgY29sbGVjdGlvbiBtYXkgbm90IGJlIGNoYW5nZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8gc3RvcmUgYW4gb3JpZ2luYWwgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHkgaWYgbm90IGFscmVhZHkgc2V0XHJcbiAgaWYgKGVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5pc1VuY2hhbmdlZE9yTW9kaWZpZWQoKSkge1xyXG4gICAgbGV0IHByb3BOYW1lID0gcHJvcGVydHkubmFtZTtcclxuICAgIC8vIGxvY2FsQXNwZWN0IGlzIG5vdCB0aGUgc2FtZSBhcyBlbnRpdHlBc3BlY3QgZm9yIGNvbXBsZXggcHJvcHNcclxuICAgIGxldCBsb2NhbEFzcGVjdCA9IEVudGl0eUFzcGVjdC5pc0VudGl0eShwYXJlbnQpID8gcGFyZW50LmVudGl0eUFzcGVjdCA6IHBhcmVudC5jb21wbGV4QXNwZWN0O1xyXG4gICAgaWYgKGxvY2FsQXNwZWN0Lm9yaWdpbmFsVmFsdWVzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIG90aGVyd2lzZSB0aGlzIGVudHJ5IHdpbGwgYmUgc2tpcHBlZCBkdXJpbmcgc2VyaWFsaXphdGlvblxyXG4gICAgICBsb2NhbEFzcGVjdC5vcmlnaW5hbFZhbHVlc1twcm9wTmFtZV0gPSBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gb2xkVmFsdWUgOiBwcm9wZXJ0eS5kZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIGtleSB1cGRhdGUgb3VyIGludGVybmFsIGVudGl0eUdyb3VwIGluZGV4ZXMuXHJcbiAgaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5ICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSB7XHJcbiAgICAvLyAnZW50aXR5VHlwZScgb24gdGhlIG5leHQgbGluZSBiZSBudWxsIGZvciBjb21wbGV4IHByb3BlcnRpZXMgYnV0IGl0IHdpbGwgb25seSBiZSByZWYnZCB3aXRoaW4gdGhpc1xyXG4gICAgLy8gZm4gd2hlbiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiB0aGUga2V5XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IChwYXJlbnQgYXMgRW50aXR5KS5lbnRpdHlUeXBlO1xyXG4gICAgbGV0IGtleVByb3BzID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzO1xyXG4gICAgbGV0IHZhbHVlcyA9IGtleVByb3BzLm1hcChmdW5jdGlvbiAocCkge1xyXG4gICAgICBpZiAocCA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRQcm9wZXJ0eShwLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBuZXdLZXkgPSBuZXcgRW50aXR5S2V5KGVudGl0eVR5cGUsIHZhbHVlcyk7XHJcbiAgICBpZiAoZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShuZXdLZXkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSB3aXRoIHRoaXMga2V5IGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlOiBcIiArIG5ld0tleS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIGxldCBvbGRLZXkgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG4gICAgbGV0IGVnID0gZW50aXR5TWFuYWdlci5fZmluZEVudGl0eUdyb3VwKGVudGl0eVR5cGUpO1xyXG4gICAgZWcuX3JlcGxhY2VLZXkob2xkS2V5LCBuZXdLZXkpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJvY2VzcyByZWxhdGVkIHVwZGF0ZXMgKCB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXApIGZpcnN0IHNvIHRoYXQgY29sbGVjdGlvbiBkdXBzIGNoZWNrIHdvcmtzIHByb3Blcmx5LlxyXG4gIC8vIHVwZGF0ZSBpbnZlcnNlIHJlbGF0aW9uc2hpcFxyXG5cclxuICBsZXQgcmVsYXRlZE5hdlByb3AgPSBwcm9wZXJ0eS5yZWxhdGVkTmF2aWdhdGlvblByb3BlcnR5O1xyXG4gIGlmIChyZWxhdGVkTmF2UHJvcCAmJiBlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAvLyBFeGFtcGxlOiBiaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiBvcmRlciAtPiBvcmRlckRldGFpbHNcclxuICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVySWQgPC0gbmV3T3JkZXJJZCB8fCBudWxsXHJcbiAgICAvLyAgICA9PT4gb3JkZXJEZXRhaWwub3JkZXIgPSBsb29rdXBPcmRlcihuZXdPcmRlcklkKVxyXG4gICAgLy8gICAgPT0+IChzZWUgc2V0IG5hdlByb3AgYWJvdmUpXHJcbiAgICAvLyAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVySWQgPC0gbmV3T3JkZXJJZCB8fCBudWxsXHJcbiAgICAvLyAgICA9PT4gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVyID0gbG9va3VwT3JkZXIobmV3T3JkZXJJZClcclxuICAgIC8vICAgID09PiAoc2VlIHNldCBuYXZQcm9wIGFib3ZlKVxyXG5cclxuICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCByZWxhdGVkRW50aXR5OiBFbnRpdHk7XHJcbiAgICAgIGxldCBrZXk6IEVudGl0eUtleTtcclxuICAgICAgaWYgKHJlbGF0ZWROYXZQcm9wLmludkZvcmVpZ25LZXlOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBwcm9wZXJ0eSBpcyByZWxhdGVkIGJ5IGZpZWxkIHdoaWNoIGlzIG5vdCB0aGUgUEtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBFbnRpdHlRdWVyeShyZWxhdGVkTmF2UHJvcC5lbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWUpLndoZXJlKHJlbGF0ZWROYXZQcm9wLmludkZvcmVpZ25LZXlOYW1lc1swXSwgJ2VxJywgbmV3VmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHFyZXN1bHQgPSBlbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gICAgICAgIGlmIChxcmVzdWx0Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eSA9IHFyZXN1bHRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHByb3BlcnR5IGlzIHJlbGF0ZWQgYnkgdGhlIFBLXHJcbiAgICAgICAga2V5ID0gbmV3IEVudGl0eUtleShyZWxhdGVkTmF2UHJvcC5lbnRpdHlUeXBlLCBbbmV3VmFsdWVdKTtcclxuICAgICAgICByZWxhdGVkRW50aXR5ID0gZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShrZXkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVsYXRlZEVudGl0eSkge1xyXG4gICAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkTmF2UHJvcC5uYW1lLCByZWxhdGVkRW50aXR5KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBpdCBtYXkgbm90IGhhdmUgYmVlbiBmZXRjaGVkIHlldCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gYWRkIGl0IGFzIGFuIHVuYXR0YWNoZWRDaGlsZC5cclxuICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAvLyBUT0RPIGN1cnJlbnRseSBfbGlua1JlbGF0ZWRlbnRpdGllcyBvbmx5IHdvcmtzIHdpdGggUEsgcmVsYXRpb25zLCBzbyB3ZSBvbmx5IGFkZCB0aG9zZS5cclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIuX3VuYXR0YWNoZWRDaGlsZHJlbk1hcC5hZGRDaGlsZChrZXksIHJlbGF0ZWROYXZQcm9wLCBwYXJlbnQgYXMgRW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWROYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJlbnQuc2V0UHJvcGVydHkocmVsYXRlZE5hdlByb3AubmFtZSwgbnVsbCk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pbnZlcnNlTmF2aWdhdGlvblByb3BlcnR5ICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuX2luS2V5Rml4dXApIHtcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiByZWdpb24gLT4gdGVycml0b3JpZXNcclxuICAgIC8vIHRlcnJpdG9yeS5yZWdpb25JZCA8LSBuZXdSZWdpb25JZFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cFJlZ2lvbihuZXdSZWdpb25JZCkudGVycml0b3JpZXMucHVzaCh0ZXJyaXRvcnkpXHJcbiAgICAvLyAgICAgICAgICAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vIGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkIDwtIG5ld09yZGVySWRcclxuICAgIC8vICAgID09PiBsb29rdXBPcmRlcihuZXdPcmRlcklkKS5pbnRlcm5hdGlvbmFsT3JkZXIgPSBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vICAgICAgICAgICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPm46IHJlZ2lvbiAtPiB0ZXJyaXRvcmllc1xyXG4gICAgLy8gdGVycml0b3J5LnJlZ2lvbklkIDwtIG51bGxcclxuICAgIC8vICAgID09PiBsb29rdXBSZWdpb24odGVycml0b3J5Lm9sZFJlZ2lvbklkKS50ZXJyaXRvcmllcy5yZW1vdmUob2xkVGVycml0b3J5KTtcclxuICAgIC8vICAgICAgICAgICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVySWQgPC0gbnVsbFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cE9yZGVyKGludGVybmF0aW9uYWxPcmRlci5vbGRPcmRlcklkKS5pbnRlcm5hdGlvbmFsT3JkZXIgPSBudWxsO1xyXG5cclxuICAgIGxldCBpbnZOYXZQcm9wID0gcHJvcGVydHkuaW52ZXJzZU5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuXHJcbiAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQga2V5ID0gbmV3IEVudGl0eUtleShpbnZOYXZQcm9wLnBhcmVudFR5cGUsIFtvbGRWYWx1ZV0pO1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuICAgICAgaWYgKHJlbGF0ZWRFbnRpdHkpIHtcclxuICAgICAgICBpZiAoaW52TmF2UHJvcC5pc1NjYWxhcikge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eS5zZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyByZW1vdmUgJ3RoaXMnIGZyb20gb2xkIHJlbGF0ZWQgbmF2IHByb3BcclxuICAgICAgICAgIGxldCByZWxhdGVkQXJyYXkgPSByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludk5hdlByb3AubmFtZSk7XHJcbiAgICAgICAgICAvLyBhcnIuc3BsaWNlKGFyci5pbmRleE9mKHZhbHVlX3RvX3JlbW92ZSksIDEpO1xyXG4gICAgICAgICAgcmVsYXRlZEFycmF5LnNwbGljZShyZWxhdGVkQXJyYXkuaW5kZXhPZihwYXJlbnQpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQga2V5ID0gbmV3IEVudGl0eUtleShpbnZOYXZQcm9wLnBhcmVudFR5cGUsIFtuZXdWYWx1ZV0pO1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuXHJcbiAgICAgIGlmIChyZWxhdGVkRW50aXR5KSB7XHJcbiAgICAgICAgaWYgKGludk5hdlByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkuc2V0UHJvcGVydHkoaW52TmF2UHJvcC5uYW1lLCBwYXJlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludk5hdlByb3AubmFtZSkucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBpdCBtYXkgbm90IGhhdmUgYmVlbiBmZXRjaGVkIHlldCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gYWRkIGl0IGFzIGFuIHVuYXR0YWNoZWRDaGlsZC5cclxuICAgICAgICBlbnRpdHlNYW5hZ2VyLl91bmF0dGFjaGVkQ2hpbGRyZW5NYXAuYWRkQ2hpbGQoa2V5LCBpbnZOYXZQcm9wLCBwYXJlbnQgYXMgRW50aXR5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG5cclxuICB1cGRhdGVTdGF0ZUFuZFZhbGlkYXRlKGNvbnRleHQpO1xyXG5cclxuICAvLyBpZiAocHJvcGVydHkuaXNQYXJ0T2ZLZXkgJiYgKCF0aGlzLmNvbXBsZXhBc3BlY3QpKSB7XHJcbiAgaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5KSB7XHJcbiAgICAvLyBwcm9wb2dhdGUgcGsgY2hhbmdlIHRvIGFsbCByZWxhdGVkIGVudGl0aWVzO1xyXG4gICAgbGV0IGVudGl0eVR5cGUgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5VHlwZTtcclxuICAgIGxldCBwcm9wZXJ0eUl4ID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpO1xyXG4gICAgLy8gdGhpcyBwYXJ0IGhhbmRsZXMgb3JkZXIub3JkZXJJZCA9PiBvcmRlckRldGFpbC5vcmRlcklkXHJcbiAgICAvLyBidXQgd29uJ3QgaGFuZGxlIHByb2R1Y3QucHJvZHVjdElkID0+IG9yZGVyRGV0YWlsLnByb2R1Y3RJZCBiZWNhdXNlIHByb2R1Y3RcclxuICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbiBvcmRlckRldGFpbHMgcHJvcGVydHkuXHJcbiAgICBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG5wKSB7XHJcbiAgICAgIGxldCBpbnZlcnNlTnAgPSBucC5pbnZlcnNlO1xyXG4gICAgICBsZXQgZmtOYW1lcyA9IGludmVyc2VOcCA/IGludmVyc2VOcC5mb3JlaWduS2V5TmFtZXMgOiBucC5pbnZGb3JlaWduS2V5TmFtZXM7XHJcblxyXG4gICAgICBpZiAoZmtOYW1lcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgbGV0IG5wVmFsdWUgPSBwYXJlbnQuZ2V0UHJvcGVydHkobnAubmFtZSk7XHJcbiAgICAgIGlmICghbnBWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICBsZXQgZmtOYW1lID0gZmtOYW1lc1twcm9wZXJ0eUl4XTtcclxuICAgICAgaWYgKG5wLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgbnBWYWx1ZS5zZXRQcm9wZXJ0eShma05hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBucFZhbHVlLnNsaWNlKDApLmZvckVhY2goZnVuY3Rpb24gKGl2OiBhbnkpIHtcclxuICAgICAgICAgIGl2LnNldFByb3BlcnR5KGZrTmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMgaGFuZGxlcyB1bmlkaXJlY3Rpb25hbCBwcm9ibGVtcyBub3QgY292ZXJlZCBhYm92ZS5cclxuICAgIGlmIChlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAgIGxldCBpbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcztcclxuICAgICAgbGV0IGJhc2VFbnRpdHlUeXBlID0gZW50aXR5VHlwZS5iYXNlRW50aXR5VHlwZTtcclxuICAgICAgd2hpbGUgKGJhc2VFbnRpdHlUeXBlKSB7XHJcbiAgICAgICAgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzID0gaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzLmNvbmNhdChiYXNlRW50aXR5VHlwZS5pbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGJhc2VFbnRpdHlUeXBlID0gYmFzZUVudGl0eVR5cGUuYmFzZUVudGl0eVR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzLmZvckVhY2goKGludkZrUHJvcCkgPT4ge1xyXG4gICAgICAgIGlmIChpbnZGa1Byb3AucmVsYXRlZE5hdmlnYXRpb25Qcm9wZXJ0eSEuaW52ZXJzZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyB0aGlzIG5leHQgc3RlcCBtYXkgYmUgc2xvdyAtIGl0IGl0ZXJhdGVzIG92ZXIgYWxsIG9mIHRoZSBlbnRpdGllcyBpbiBhIGdyb3VwO1xyXG4gICAgICAgICAgLy8gaG9wZWZ1bGx5IGl0IGRvZXNuJ3QgaGFwcGVuIG9mdGVuLlxyXG4gICAgICAgICAgZW50aXR5TWFuYWdlciEuX3VwZGF0ZUZrVmFsKGludkZrUHJvcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluc3VyZSB0aGF0IGNhY2hlZCBrZXkgaXMgdXBkYXRlZC5cclxuICAgIGVudGl0eUFzcGVjdC5nZXRLZXkodHJ1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXREcFZhbHVlQ29tcGxleChjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIERhdGFQcm9wZXJ0eTtcclxuICBsZXQgb2xkVmFsdWUgPSBjb250ZXh0Lm9sZFZhbHVlO1xyXG4gIGxldCBuZXdWYWx1ZSA9IGNvbnRleHQubmV3VmFsdWU7XHJcblxyXG4gIC8vIFRvIGdldCBoZXJlIGl0IG11c3QgYmUgYSBDb21wbGV4UHJvcGVydHlcclxuICAvLyAnZGF0YVR5cGUnIHdpbGwgYmUgYSBjb21wbGV4VHlwZVxyXG4gIGxldCBkYXRhVHlwZSA9IHByb3BlcnR5LmRhdGFUeXBlIGFzIENvbXBsZXhUeXBlO1xyXG4gIGlmIChwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoY29yZS5mb3JtYXRTdHJpbmcoXCJZb3UgY2Fubm90IHNldCB0aGUgJyUxJyBwcm9wZXJ0eSB0byBudWxsIGJlY2F1c2UgaXQncyBkYXRhdHlwZSBpcyB0aGUgQ29tcGxleFR5cGU6ICclMidcIiwgcHJvcGVydHkubmFtZSwgcHJvcGVydHkuZGF0YVR5cGUubmFtZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2xkVmFsdWUpIHtcclxuICAgICAgbGV0IGN0b3IgPSBkYXRhVHlwZS5nZXRDdG9yKCk7XHJcbiAgICAgIG9sZFZhbHVlID0gbmV3IGN0b3IoKTtcclxuICAgICAgcmF3QWNjZXNzb3JGbihvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBkYXRhVHlwZS5kYXRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICBsZXQgcG4gPSBkcC5uYW1lO1xyXG4gICAgICBsZXQgbnYgPSBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShwbik7XHJcbiAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KHBuLCBudik7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGNvcmUuZm9ybWF0U3RyaW5nKFwiWW91IGNhbm5vdCBzZXQgdGhlIG5vbi1zY2FsYXIgY29tcGxleCBwcm9wZXJ0eTogJyUxJyBvbiB0aGUgdHlwZTogJyUyJy5cIiArXHJcbiAgICAgICAgICAgIFwiSW5zdGVhZCBnZXQgdGhlIHByb3BlcnR5IGFuZCB1c2UgYXJyYXkgZnVuY3Rpb25zIGxpa2UgJ3B1c2gnIG9yICdzcGxpY2UnIHRvIGNoYW5nZSBpdHMgY29udGVudHMuXCIsXHJcbiAgICAgICAgcHJvcGVydHkubmFtZSwgcHJvcGVydHkucGFyZW50VHlwZS5uYW1lKSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gc2V0TnBWYWx1ZShjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuXHJcbiAgbGV0IHBhcmVudCA9IGNvbnRleHQucGFyZW50IGFzIEVudGl0eTtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICBpZiAoIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25zY2FsYXIgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSAtIGVudGl0aWVzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGJ1dCB0aGUgY29sbGVjdGlvbiBtYXkgbm90IGJlIGNoYW5nZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuICBsZXQgaW52ZXJzZVByb3AgPSBwcm9wZXJ0eS5pbnZlcnNlO1xyXG5cclxuICAvLyBtYW5hZ2UgYXR0YWNobWVudCAtXHJcbiAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgIGlmICghbmV3VmFsdWUuZW50aXR5QXNwZWN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBuZXdBc3BlY3QgPSBuZXdWYWx1ZS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgICBpZiAobmV3QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkge1xyXG4gICAgICAgIGlmICghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIuYXR0YWNoRW50aXR5KG5ld1ZhbHVlLCBFbnRpdHlTdGF0ZS5BZGRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChuZXdBc3BlY3QuZW50aXR5TWFuYWdlciAhPT0gZW50aXR5TWFuYWdlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gRW50aXR5IGNhbm5vdCBiZSBhdHRhY2hlZCB0byBhbiBlbnRpdHkgaW4gYW5vdGhlciBFbnRpdHlNYW5hZ2VyLiBPbmUgb2YgdGhlIHR3byBlbnRpdGllcyBtdXN0IGJlIGRldGFjaGVkIGZpcnN0LlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuZXdBc3BlY3QgJiYgbmV3QXNwZWN0LmVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgICBlbnRpdHlNYW5hZ2VyID0gbmV3QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgICAgICAgaWYgKCFlbnRpdHlNYW5hZ2VyIS5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIhLmF0dGFjaEVudGl0eShlbnRpdHlBc3BlY3QuZW50aXR5ISwgRW50aXR5U3RhdGUuQWRkZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvY2VzcyByZWxhdGVkIHVwZGF0ZXMgKCB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXApIGZpcnN0IHNvIHRoYXQgY29sbGVjdGlvbiBkdXBzIGNoZWNrIHdvcmtzIHByb3Blcmx5LlxyXG4gIC8vIHVwZGF0ZSBpbnZlcnNlIHJlbGF0aW9uc2hpcFxyXG4gIGlmIChpbnZlcnNlUHJvcCkge1xyXG4gICAgLy8vXHJcbiAgICBpZiAoaW52ZXJzZVByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLmludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXIgfHwgbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZEludGVybmF0aW9uYWxPcmRlci5vcmRlciA9IG51bGwpXHJcbiAgICAgIC8vICAgID09PiBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXIgPSBvcmRlclxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG51bGwgLT4gTnVsbEVudGl0eSBsYXRlclxyXG4gICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgbmV3VmFsdWUuc2V0UHJvcGVydHkoaW52ZXJzZVByb3AubmFtZSwgcGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwtIG5ld09yZGVyIHx8IG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGRPcmRlcikub3JkZXJEZXRhaWxzLnJlbW92ZShvcmRlckRldGFpbClcclxuICAgICAgLy8gICAgPT0+IG9yZGVyLm9yZGVyRGV0YWlscy5wdXNoKG5ld09yZGVyKVxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBvbGRTaWJsaW5ncyA9IG9sZFZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIGxldCBpeCA9IG9sZFNpYmxpbmdzLmluZGV4T2YocGFyZW50KTtcclxuICAgICAgICBpZiAoaXggIT09IC0xKSB7XHJcbiAgICAgICAgICBvbGRTaWJsaW5ncy5zcGxpY2UoaXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWJsaW5ncyA9IG5ld1ZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIC8vIHJlY3Vyc2lvbiBjaGVjayBpZiBhbHJlYWR5IGluIHRoZSBjb2xsZWN0aW9uIGlzIHBlcmZvcm1lZCBieSB0aGUgcmVsYXRpb25BcnJheVxyXG4gICAgICAgIHNpYmxpbmdzLnB1c2gocGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocHJvcGVydHkuaW52Rm9yZWlnbktleU5hbWVzICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuX2luS2V5Rml4dXApIHtcclxuICAgIGxldCBpbnZGb3JlaWduS2V5TmFtZXMgPSBwcm9wZXJ0eS5pbnZGb3JlaWduS2V5TmFtZXM7XHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLkludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgICAgLy8gICAgPT0+IGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkID0gb3JkZXJJZFxyXG4gICAgICAvLyAgICAgIGFuZFxyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwteHh4IG5ld09yZGVyXHJcbiAgICAgIC8vICAgID09PiBDQU4nVCBIQVBQRU4gYmVjYXVzZSBpZiB1bmlkaXJlY3Rpb25hbCBiZWNhdXNlIG9yZGVyRGV0YWlsIHdpbGwgbm90IGhhdmUgYW4gb3JkZXIgcHJvcFxyXG4gICAgICBsZXQgcGtWYWx1ZXMgPSBwYXJlbnQuZW50aXR5QXNwZWN0LmdldEtleSgpLnZhbHVlcztcclxuICAgICAgaW52Rm9yZWlnbktleU5hbWVzLmZvckVhY2goIChma05hbWUsIGkpID0+IHtcclxuICAgICAgICBuZXdWYWx1ZSEuc2V0UHJvcGVydHkoZmtOYW1lLCBwa1ZhbHVlc1tpXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5pbnRlcm5hdGlvbmFsT3JkZXIgPC0gbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZCBpbnRlcm5hdGlvbmFsT3JkZXIpLm9yZGVySWQgPSBudWxsXHJcbiAgICAgIC8vICAgICAgICBhbmRcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LXh4eCBuZXdPcmRlclxyXG4gICAgICAvLyAgICA9PT4gQ0FOJ1QgSEFQUEVOIGJlY2F1c2UgaWYgdW5pZGlyZWN0aW9uYWwgYmVjYXVzZSBvcmRlckRldGFpbCB3aWxsIG5vdCBoYXZlIGFuIG9yZGVyIHByb3BcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBpbnZGb3JlaWduS2V5TmFtZXMuZm9yRWFjaCggKGZrTmFtZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZrUHJvcCA9IG9sZFZhbHVlLmVudGl0eVR5cGUuZ2V0UHJvcGVydHkoZmtOYW1lKTtcclxuICAgICAgICAgIGlmICghZmtQcm9wLmlzUGFydE9mS2V5KSB7XHJcbiAgICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSB3aXRoIG51bGwgaWYgZmsgaXMgcGFydCBvZiB0aGUga2V5XHJcbiAgICAgICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGZrTmFtZSwgbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG5cclxuICB1cGRhdGVTdGF0ZUFuZFZhbGlkYXRlKGNvbnRleHQpO1xyXG5cclxuICAvLyB1cGRhdGUgZmsgZGF0YSBwcm9wZXJ0eSAtIHRoaXMgY2FuIG9ubHkgb2NjdXIgaWYgdGhpcyBuYXZQcm9wZXJ0eSBoYXNcclxuICAvLyBhIGNvcnJlc3BvbmRpbmcgZmsgb24gdGhpcyBlbnRpdHkuXHJcbiAgaWYgKHByb3BlcnR5LnJlbGF0ZWREYXRhUHJvcGVydGllcykge1xyXG4gICAgbGV0IGVudGl0eVN0YXRlID0gZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gICAgLy8gaWYgZWl0aGVyIHNpZGUgb2YgbmF2IHByb3AgaXMgZGV0YWNoZWQgZG9uJ3QgY2xlYXIgZmtzLiBOb3RlOiBvbGRWYWx1ZSBpbiBuZXh0IGxpbmUgY2Fubm90IGJlIG51bGwgc28gbm8gY2hlY2sgaXMgbmVlZGVkLlxyXG4gICAgaWYgKG5ld1ZhbHVlID09IG51bGwgJiYgKGVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSB8fCBvbGRWYWx1ZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNEZXRhY2hlZCgpKSkgcmV0dXJuO1xyXG4gICAgaWYgKGVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSByZXR1cm47XHJcblxyXG4gICAgLy8gd2UgbWF5IGhhdmUgaW52ZXJzZSBwcm9wcyBpbmRpY2F0aW5nIHRoZSByZWxhdGVkIHByb3Agb24gdGhlIG90aGVyIGVudGl0eSwgaWYgaXQgaXMgbm90IHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgbGV0IGludmVyc2VLZXlQcm9wcyA9IHByb3BlcnR5LmludkZvcmVpZ25LZXlOYW1lcztcclxuICAgIGlmICghKGludmVyc2VLZXlQcm9wcyAmJiBpbnZlcnNlS2V5UHJvcHMubGVuZ3RoKSkge1xyXG4gICAgICAvLyBvdGhlcndpc2UsIHRoaXMgcHJvcCBpcyByZWxhdGVkIHRvIHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgICBpbnZlcnNlS2V5UHJvcHMgPSBwcm9wZXJ0eS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXMubWFwKGsgPT4gay5uYW1lKTtcclxuICAgIH1cclxuICAgIGludmVyc2VLZXlQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlQcm9wLCBpKSB7XHJcbiAgICAgIGxldCByZWxhdGVkRGF0YVByb3AgPSBwcm9wZXJ0eS5yZWxhdGVkRGF0YVByb3BlcnRpZXNbaV07XHJcbiAgICAgIC8vIERvIG5vdCB0cmFzaCByZWxhdGVkIHByb3BlcnR5IGlmIGl0IGlzIHBhcnQgb2YgdGhhdCBlbnRpdHkncyBrZXlcclxuICAgICAgaWYgKG5ld1ZhbHVlIHx8ICFyZWxhdGVkRGF0YVByb3AuaXNQYXJ0T2ZLZXkpIHtcclxuICAgICAgICBsZXQgcmVsYXRlZFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShrZXlQcm9wKSA6IHJlbGF0ZWREYXRhUHJvcC5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWREYXRhUHJvcC5uYW1lLCByZWxhdGVkVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvc3RDaGFuZ2VFdmVudHMoY29udGV4dDogSUNvbnRleHQpIHtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcblxyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGVudGl0eSA9IGVudGl0eUFzcGVjdC5lbnRpdHk7XHJcblxyXG4gIGxldCBwcm9wQ2hhbmdlZEFyZ3MgPSB7IGVudGl0eTogZW50aXR5ISwgcGFyZW50OiBjb250ZXh0LnBhcmVudCwgcHJvcGVydHk6IGNvbnRleHQucHJvcGVydHksIHByb3BlcnR5TmFtZTogY29udGV4dC5wcm9wZXJ0eU5hbWUsIG9sZFZhbHVlOiBjb250ZXh0Lm9sZFZhbHVlLCBuZXdWYWx1ZTogY29udGV4dC5uZXdWYWx1ZSB9O1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAvLyBwcm9wZXJ0eUNoYW5nZWQgd2lsbCBiZSBmaXJlZCBkdXJpbmcgbG9hZGluZyBidXQgd2Ugb25seSB3YW50IHRvIGZpcmUgaXQgb25jZSBwZXIgZW50aXR5LCBub3Qgb25jZSBwZXIgcHJvcGVydHkuXHJcbiAgICAvLyBzbyBwcm9wZXJ0eUNoYW5nZWQgaXMgZmlyZWQgaW4gdGhlIGVudGl0eU1hbmFnZXIgbWVyZ2VFbnRpdHkgbWV0aG9kIGlmIG5vdCBmaXJlZCBoZXJlLlxyXG4gICAgaWYgKCghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpICYmICghZW50aXR5TWFuYWdlci5pc1JlamVjdGluZ0NoYW5nZXMpKSB7XHJcbiAgICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gICAgICAvLyBkb24ndCBmaXJlIGVudGl0eUNoYW5nZWQgZXZlbnQgaWYgcHJvcGVydHlDaGFuZ2VkIGlzIHN1cHByZXNzZWQuXHJcbiAgICAgIGVudGl0eU1hbmFnZXIuZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uUHJvcGVydHlDaGFuZ2UsIGVudGl0eTogZW50aXR5LCBhcmdzOiBwcm9wQ2hhbmdlZEFyZ3MgfSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0OiBJQ29udGV4dCkge1xyXG4gIGxldCBlbnRpdHlBc3BlY3QgPSBjb250ZXh0LmVudGl0eUFzcGVjdDtcclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyID09IG51bGwgfHwgZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHJldHVybjtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xyXG5cclxuICBpZiAoZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzVW5jaGFuZ2VkKCkgJiYgIXByb3BlcnR5LmlzVW5tYXBwZWQpIHtcclxuICAgIGVudGl0eUFzcGVjdC5zZXRNb2RpZmllZCgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGVudGl0eU1hbmFnZXIudmFsaWRhdGlvbk9wdGlvbnMudmFsaWRhdGVPblByb3BlcnR5Q2hhbmdlKSB7XHJcbiAgICAvLyBlbnRpdHlBc3BlY3QuZW50aXR5IGlzIE5PVCB0aGUgc2FtZSBhcyBwYXJlbnQgaW4gdGhlIGNvZGUgYmVsb3cuIEl0J3MgdXNlIGlzIGRlbGliZXJhdGUuXHJcbiAgICBlbnRpdHlBc3BlY3QuX3ZhbGlkYXRlUHJvcGVydHkoY29udGV4dC5uZXdWYWx1ZSxcclxuICAgICAgICB7IGVudGl0eTogZW50aXR5QXNwZWN0LmVudGl0eSwgcHJvcGVydHk6IHByb3BlcnR5LCBwcm9wZXJ0eU5hbWU6IGNvbnRleHQucHJvcGVydHlOYW1lLCBvbGRWYWx1ZTogY29udGV4dC5vbGRWYWx1ZSB9KTtcclxuICB9XHJcbn1cclxuIl19
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBMkMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3Qyx3QkFBd0I7QUFDeEIsTUFBTSxVQUFVLDBCQUEwQixDQUF5QixRQUF3QixFQUFFLFFBQWEsRUFBRSxhQUF1QjtJQUNqSSwrQ0FBK0M7SUFFL0MsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxrRUFBa0U7SUFDL0csSUFBSSxRQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFL0IsSUFBSSxRQUFRLEdBQUksUUFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDMUMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtRQUM5Qiw0RkFBNEY7UUFDNUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNqRCxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztTQUNKO2FB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RUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUMxSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgQ29tcGxleFR5cGUsIERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5QXNwZWN0LCBDb21wbGV4QXNwZWN0LCBFbnRpdHksIFN0cnVjdHVyYWxPYmplY3QgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5UXVlcnkgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0eUludGVyY2VwdG9yKHRoaXM6IFN0cnVjdHVyYWxPYmplY3QsIHByb3BlcnR5OiBFbnRpdHlQcm9wZXJ0eSwgbmV3VmFsdWU6IGFueSwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuICAvLyAndGhpcycgaXMgdGhlIGVudGl0eSBpdHNlbGYgaW4gdGhpcyBjb250ZXh0LlxyXG5cclxuICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgbmV3VmFsdWUgPSBudWxsOyAvLyByZW1vdmU/IHRvIGFsbG93IGFzc2lnbm1lbnQgdG8gdW5kZWZpbmVkIGluIEJhYmVsIGNvbnN0cnVjdG9ycz9cclxuICBsZXQgb2xkVmFsdWUgPSByYXdBY2Nlc3NvckZuKCk7XHJcblxyXG4gIGxldCBkYXRhVHlwZSA9IChwcm9wZXJ0eSBhcyBhbnkpLmRhdGFUeXBlO1xyXG4gIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5wYXJzZSkge1xyXG4gICAgLy8gYXR0ZW1wdHMgdG8gY29lcmNlIGEgdmFsdWUgdG8gdGhlIGNvcnJlY3QgdHlwZSAtIGlmIHRoaXMgZmFpbHMgcmV0dXJuIHRoZSB2YWx1ZSB1bmNoYW5nZWRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiAhcHJvcGVydHkuaXNTY2FsYXIpIHtcclxuICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5tYXAoZnVuY3Rpb24gKG52KSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFUeXBlLnBhcnNlKG52LCB0eXBlb2YgbnYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gZGF0YVR5cGUucGFyc2UobmV3VmFsdWUsIHR5cGVvZiBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBleGl0IGlmIG5vIGNoYW5nZSAtIGV4dHJhIGNydWZ0IGlzIGJlY2F1c2UgZGF0ZVRpbWVzIGRvbid0IGNvbXBhcmUgY2xlYW5seS5cclxuICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlIHx8IChuZXdWYWx1ZSA9PT0gbnVsbCAmJiBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB8fCBcclxuICAgIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5ub3JtYWxpemUgJiYgbmV3VmFsdWUgJiYgb2xkVmFsdWUgJiYgZGF0YVR5cGUubm9ybWFsaXplKG5ld1ZhbHVlKSA9PT0gZGF0YVR5cGUubm9ybWFsaXplKG9sZFZhbHVlKSkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIENBTk5PVCBETyBORVhUIExJTkUgYmVjYXVzZSBpdCBoYXMgdGhlIHBvc3NpYmlsaXR5IG9mIGNyZWF0aW5nIGEgbmV3IHByb3BlcnR5XHJcbiAgLy8gJ2VudGl0eUFzcGVjdCcgb24gJ3RoaXMnLiAgLSBOb3QgcGVybWl0dGVkIGJ5IElFIGluc2lkZSBvZiBhIGRlZmluZWQgcHJvcGVydHkgb24gYSBwcm90b3R5cGUuXHJcbiAgLy8gbGV0IGVudGl0eUFzcGVjdCA9IG5ldyBFbnRpdHlBc3BlY3QodGhpcyk7XHJcblxyXG4gIGxldCBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gKHRoaXMgYXMgYW55KS5lbnRpdHlBc3BlY3QgYXMgRW50aXR5QXNwZWN0O1xyXG4gIGlmIChlbnRpdHlBc3BlY3QpIHtcclxuICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCBsb2NhbEFzcGVjdCA9ICh0aGlzIGFzIGFueSkuY29tcGxleEFzcGVjdCBhcyBDb21wbGV4QXNwZWN0O1xyXG4gICAgaWYgKGxvY2FsQXNwZWN0KSB7XHJcbiAgICAgIGVudGl0eUFzcGVjdCA9IGxvY2FsQXNwZWN0LmdldEVudGl0eUFzcGVjdCgpO1xyXG4gICAgICBwcm9wZXJ0eU5hbWUgPSBsb2NhbEFzcGVjdC5nZXRQcm9wZXJ0eVBhdGgocHJvcGVydHkubmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBFbnRpdHlBc3BlY3Qgc28ganVzdCBzZXQgdGhlIHByb3BcclxuICAgICAgcmF3QWNjZXNzb3JGbihuZXdWYWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGhhbmRsZSBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIHByb2Nlc3MsIG5vdCBqdXN0IG9uZSBpbiBvcmRlciB0byBhdm9pZCByZWN1cnNpb24uXHJcbiAgLy8gKCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgbnVsbCBwcm9wYWdhdGlvbiB3aXRoIGZrcyB3aGVyZSBudWxsIC0+IDAgaW4gc29tZSBjYXNlcy4pXHJcbiAgLy8gKHRoaXMgbWF5IG5vdCBiZSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgbmV3VmFsdWUgPT09IG9sZFZhbHVlIHRlc3QgYWJvdmUpXHJcbiAgbGV0IGluUHJvY2VzcyA9IGVudGl0eUFzcGVjdC5faW5Qcm9jZXNzID0gZW50aXR5QXNwZWN0Ll9pblByb2Nlc3MgfHwgW107XHJcbiAgLy8gY2hlY2sgZm9yIHJlY3Vyc2lvblxyXG4gIGlmIChpblByb2Nlc3MuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMCkgcmV0dXJuO1xyXG4gIGluUHJvY2Vzcy5wdXNoKHByb3BlcnR5KTtcclxuXHJcbiAgdHJ5IHtcclxuXHJcbiAgICBsZXQgY29udGV4dDogSUNvbnRleHQgPSB7XHJcbiAgICAgIHBhcmVudDogdGhpcyxcclxuICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxyXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXHJcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcclxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXHJcbiAgICAgIGVudGl0eUFzcGVjdDogZW50aXR5QXNwZWN0XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICgocHJvcGVydHkgYXMgYW55KS5pc0NvbXBsZXhQcm9wZXJ0eSkge1xyXG4gICAgICBzZXREcFZhbHVlQ29tcGxleChjb250ZXh0LCByYXdBY2Nlc3NvckZuKTtcclxuICAgIH0gZWxzZSBpZiAocHJvcGVydHkuaXNEYXRhUHJvcGVydHkpIHtcclxuICAgICAgc2V0RHBWYWx1ZVNpbXBsZShjb250ZXh0LCByYXdBY2Nlc3NvckZuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldE5wVmFsdWUoY29udGV4dCwgcmF3QWNjZXNzb3JGbik7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdENoYW5nZUV2ZW50cyhjb250ZXh0KTtcclxuXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGluUHJvY2Vzcy5wb3AoKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBJQ29udGV4dCB7XHJcbiAgcGFyZW50OiBTdHJ1Y3R1cmFsT2JqZWN0O1xyXG4gIHByb3BlcnR5OiBFbnRpdHlQcm9wZXJ0eTtcclxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBlbnRpdHlBc3BlY3Q6IEVudGl0eUFzcGVjdDtcclxuICBvbGRWYWx1ZTogYW55O1xyXG4gIG5ld1ZhbHVlOiBhbnk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldERwVmFsdWVTaW1wbGUoY29udGV4dDogSUNvbnRleHQsIHJhd0FjY2Vzc29yRm46IGFueSkge1xyXG4gIGxldCBwYXJlbnQgPSBjb250ZXh0LnBhcmVudDtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIERhdGFQcm9wZXJ0eTtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG5cclxuICBpZiAoIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25zY2FsYXIgZGF0YSBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSAtIGl0ZW1zIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGJ1dCB0aGUgY29sbGVjdGlvbiBtYXkgbm90IGJlIGNoYW5nZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8gc3RvcmUgYW4gb3JpZ2luYWwgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHkgaWYgbm90IGFscmVhZHkgc2V0XHJcbiAgaWYgKGVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5pc1VuY2hhbmdlZE9yTW9kaWZpZWQoKSkge1xyXG4gICAgbGV0IHByb3BOYW1lID0gcHJvcGVydHkubmFtZTtcclxuICAgIC8vIGxvY2FsQXNwZWN0IGlzIG5vdCB0aGUgc2FtZSBhcyBlbnRpdHlBc3BlY3QgZm9yIGNvbXBsZXggcHJvcHNcclxuICAgIGxldCBsb2NhbEFzcGVjdCA9IEVudGl0eUFzcGVjdC5pc0VudGl0eShwYXJlbnQpID8gcGFyZW50LmVudGl0eUFzcGVjdCA6IHBhcmVudC5jb21wbGV4QXNwZWN0O1xyXG4gICAgaWYgKGxvY2FsQXNwZWN0Lm9yaWdpbmFsVmFsdWVzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIG90aGVyd2lzZSB0aGlzIGVudHJ5IHdpbGwgYmUgc2tpcHBlZCBkdXJpbmcgc2VyaWFsaXphdGlvblxyXG4gICAgICBsb2NhbEFzcGVjdC5vcmlnaW5hbFZhbHVlc1twcm9wTmFtZV0gPSBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gb2xkVmFsdWUgOiBwcm9wZXJ0eS5kZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIGtleSB1cGRhdGUgb3VyIGludGVybmFsIGVudGl0eUdyb3VwIGluZGV4ZXMuXHJcbiAgaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5ICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSB7XHJcbiAgICAvLyAnZW50aXR5VHlwZScgb24gdGhlIG5leHQgbGluZSBiZSBudWxsIGZvciBjb21wbGV4IHByb3BlcnRpZXMgYnV0IGl0IHdpbGwgb25seSBiZSByZWYnZCB3aXRoaW4gdGhpc1xyXG4gICAgLy8gZm4gd2hlbiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiB0aGUga2V5XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IChwYXJlbnQgYXMgRW50aXR5KS5lbnRpdHlUeXBlO1xyXG4gICAgbGV0IGtleVByb3BzID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzO1xyXG4gICAgbGV0IHZhbHVlcyA9IGtleVByb3BzLm1hcChmdW5jdGlvbiAocCkge1xyXG4gICAgICBpZiAocCA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRQcm9wZXJ0eShwLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBuZXdLZXkgPSBuZXcgRW50aXR5S2V5KGVudGl0eVR5cGUsIHZhbHVlcyk7XHJcbiAgICBpZiAoZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShuZXdLZXkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSB3aXRoIHRoaXMga2V5IGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlOiBcIiArIG5ld0tleS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIGxldCBvbGRLZXkgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG4gICAgbGV0IGVnID0gZW50aXR5TWFuYWdlci5fZmluZEVudGl0eUdyb3VwKGVudGl0eVR5cGUpO1xyXG4gICAgZWcuX3JlcGxhY2VLZXkob2xkS2V5LCBuZXdLZXkpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJvY2VzcyByZWxhdGVkIHVwZGF0ZXMgKCB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXApIGZpcnN0IHNvIHRoYXQgY29sbGVjdGlvbiBkdXBzIGNoZWNrIHdvcmtzIHByb3Blcmx5LlxyXG4gIC8vIHVwZGF0ZSBpbnZlcnNlIHJlbGF0aW9uc2hpcFxyXG5cclxuICBsZXQgcmVsYXRlZE5hdlByb3AgPSBwcm9wZXJ0eS5yZWxhdGVkTmF2aWdhdGlvblByb3BlcnR5O1xyXG4gIGlmIChyZWxhdGVkTmF2UHJvcCAmJiBlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAvLyBFeGFtcGxlOiBiaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiBvcmRlciAtPiBvcmRlckRldGFpbHNcclxuICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVySWQgPC0gbmV3T3JkZXJJZCB8fCBudWxsXHJcbiAgICAvLyAgICA9PT4gb3JkZXJEZXRhaWwub3JkZXIgPSBsb29rdXBPcmRlcihuZXdPcmRlcklkKVxyXG4gICAgLy8gICAgPT0+IChzZWUgc2V0IG5hdlByb3AgYWJvdmUpXHJcbiAgICAvLyAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVySWQgPC0gbmV3T3JkZXJJZCB8fCBudWxsXHJcbiAgICAvLyAgICA9PT4gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVyID0gbG9va3VwT3JkZXIobmV3T3JkZXJJZClcclxuICAgIC8vICAgID09PiAoc2VlIHNldCBuYXZQcm9wIGFib3ZlKVxyXG5cclxuICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCByZWxhdGVkRW50aXR5OiBFbnRpdHk7XHJcbiAgICAgIGxldCBrZXk6IEVudGl0eUtleTtcclxuICAgICAgaWYgKHJlbGF0ZWROYXZQcm9wLmludkZvcmVpZ25LZXlOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBwcm9wZXJ0eSBpcyByZWxhdGVkIGJ5IGZpZWxkIHdoaWNoIGlzIG5vdCB0aGUgUEtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBFbnRpdHlRdWVyeShyZWxhdGVkTmF2UHJvcC5lbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWUpLndoZXJlKHJlbGF0ZWROYXZQcm9wLmludkZvcmVpZ25LZXlOYW1lc1swXSwgJ2VxJywgbmV3VmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHFyZXN1bHQgPSBlbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gICAgICAgIGlmIChxcmVzdWx0Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eSA9IHFyZXN1bHRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHByb3BlcnR5IGlzIHJlbGF0ZWQgYnkgdGhlIFBLXHJcbiAgICAgICAga2V5ID0gbmV3IEVudGl0eUtleShyZWxhdGVkTmF2UHJvcC5lbnRpdHlUeXBlLCBbbmV3VmFsdWVdKTtcclxuICAgICAgICByZWxhdGVkRW50aXR5ID0gZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShrZXkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVsYXRlZEVudGl0eSkge1xyXG4gICAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkTmF2UHJvcC5uYW1lLCByZWxhdGVkRW50aXR5KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBpdCBtYXkgbm90IGhhdmUgYmVlbiBmZXRjaGVkIHlldCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gYWRkIGl0IGFzIGFuIHVuYXR0YWNoZWRDaGlsZC5cclxuICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAvLyBUT0RPIGN1cnJlbnRseSBfbGlua1JlbGF0ZWRlbnRpdGllcyBvbmx5IHdvcmtzIHdpdGggUEsgcmVsYXRpb25zLCBzbyB3ZSBvbmx5IGFkZCB0aG9zZS5cclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIuX3VuYXR0YWNoZWRDaGlsZHJlbk1hcC5hZGRDaGlsZChrZXksIHJlbGF0ZWROYXZQcm9wLCBwYXJlbnQgYXMgRW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWROYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJlbnQuc2V0UHJvcGVydHkocmVsYXRlZE5hdlByb3AubmFtZSwgbnVsbCk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pbnZlcnNlTmF2aWdhdGlvblByb3BlcnR5ICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuX2luS2V5Rml4dXApIHtcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiByZWdpb24gLT4gdGVycml0b3JpZXNcclxuICAgIC8vIHRlcnJpdG9yeS5yZWdpb25JZCA8LSBuZXdSZWdpb25JZFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cFJlZ2lvbihuZXdSZWdpb25JZCkudGVycml0b3JpZXMucHVzaCh0ZXJyaXRvcnkpXHJcbiAgICAvLyAgICAgICAgICAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vIGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkIDwtIG5ld09yZGVySWRcclxuICAgIC8vICAgID09PiBsb29rdXBPcmRlcihuZXdPcmRlcklkKS5pbnRlcm5hdGlvbmFsT3JkZXIgPSBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vICAgICAgICAgICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPm46IHJlZ2lvbiAtPiB0ZXJyaXRvcmllc1xyXG4gICAgLy8gdGVycml0b3J5LnJlZ2lvbklkIDwtIG51bGxcclxuICAgIC8vICAgID09PiBsb29rdXBSZWdpb24odGVycml0b3J5Lm9sZFJlZ2lvbklkKS50ZXJyaXRvcmllcy5yZW1vdmUob2xkVGVycml0b3J5KTtcclxuICAgIC8vICAgICAgICAgICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVySWQgPC0gbnVsbFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cE9yZGVyKGludGVybmF0aW9uYWxPcmRlci5vbGRPcmRlcklkKS5pbnRlcm5hdGlvbmFsT3JkZXIgPSBudWxsO1xyXG5cclxuICAgIGxldCBpbnZOYXZQcm9wID0gcHJvcGVydHkuaW52ZXJzZU5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuXHJcbiAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQga2V5ID0gbmV3IEVudGl0eUtleShpbnZOYXZQcm9wLnBhcmVudFR5cGUsIFtvbGRWYWx1ZV0pO1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuICAgICAgaWYgKHJlbGF0ZWRFbnRpdHkpIHtcclxuICAgICAgICBpZiAoaW52TmF2UHJvcC5pc1NjYWxhcikge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eS5zZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyByZW1vdmUgJ3RoaXMnIGZyb20gb2xkIHJlbGF0ZWQgbmF2IHByb3BcclxuICAgICAgICAgIGxldCByZWxhdGVkQXJyYXkgPSByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludk5hdlByb3AubmFtZSk7XHJcbiAgICAgICAgICAvLyBhcnIuc3BsaWNlKGFyci5pbmRleE9mKHZhbHVlX3RvX3JlbW92ZSksIDEpO1xyXG4gICAgICAgICAgcmVsYXRlZEFycmF5LnNwbGljZShyZWxhdGVkQXJyYXkuaW5kZXhPZihwYXJlbnQpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQga2V5ID0gbmV3IEVudGl0eUtleShpbnZOYXZQcm9wLnBhcmVudFR5cGUsIFtuZXdWYWx1ZV0pO1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuXHJcbiAgICAgIGlmIChyZWxhdGVkRW50aXR5KSB7XHJcbiAgICAgICAgaWYgKGludk5hdlByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkuc2V0UHJvcGVydHkoaW52TmF2UHJvcC5uYW1lLCBwYXJlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludk5hdlByb3AubmFtZSkucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBpdCBtYXkgbm90IGhhdmUgYmVlbiBmZXRjaGVkIHlldCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gYWRkIGl0IGFzIGFuIHVuYXR0YWNoZWRDaGlsZC5cclxuICAgICAgICBlbnRpdHlNYW5hZ2VyLl91bmF0dGFjaGVkQ2hpbGRyZW5NYXAuYWRkQ2hpbGQoa2V5LCBpbnZOYXZQcm9wLCBwYXJlbnQgYXMgRW50aXR5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG5cclxuICB1cGRhdGVTdGF0ZUFuZFZhbGlkYXRlKGNvbnRleHQpO1xyXG5cclxuICAvLyBpZiAocHJvcGVydHkuaXNQYXJ0T2ZLZXkgJiYgKCF0aGlzLmNvbXBsZXhBc3BlY3QpKSB7XHJcbiAgaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5KSB7XHJcbiAgICAvLyBwcm9wb2dhdGUgcGsgY2hhbmdlIHRvIGFsbCByZWxhdGVkIGVudGl0aWVzO1xyXG4gICAgbGV0IGVudGl0eVR5cGUgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5VHlwZTtcclxuICAgIGxldCBwcm9wZXJ0eUl4ID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpO1xyXG4gICAgLy8gdGhpcyBwYXJ0IGhhbmRsZXMgb3JkZXIub3JkZXJJZCA9PiBvcmRlckRldGFpbC5vcmRlcklkXHJcbiAgICAvLyBidXQgd29uJ3QgaGFuZGxlIHByb2R1Y3QucHJvZHVjdElkID0+IG9yZGVyRGV0YWlsLnByb2R1Y3RJZCBiZWNhdXNlIHByb2R1Y3RcclxuICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbiBvcmRlckRldGFpbHMgcHJvcGVydHkuXHJcbiAgICBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG5wKSB7XHJcbiAgICAgIGxldCBpbnZlcnNlTnAgPSBucC5pbnZlcnNlO1xyXG4gICAgICBsZXQgZmtOYW1lcyA9IGludmVyc2VOcCA/IGludmVyc2VOcC5mb3JlaWduS2V5TmFtZXMgOiBucC5pbnZGb3JlaWduS2V5TmFtZXM7XHJcblxyXG4gICAgICBpZiAoZmtOYW1lcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgbGV0IG5wVmFsdWUgPSBwYXJlbnQuZ2V0UHJvcGVydHkobnAubmFtZSk7XHJcbiAgICAgIGlmICghbnBWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICBsZXQgZmtOYW1lID0gZmtOYW1lc1twcm9wZXJ0eUl4XTtcclxuICAgICAgaWYgKG5wLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgbnBWYWx1ZS5zZXRQcm9wZXJ0eShma05hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBucFZhbHVlLnNsaWNlKDApLmZvckVhY2goZnVuY3Rpb24gKGl2OiBhbnkpIHtcclxuICAgICAgICAgIGl2LnNldFByb3BlcnR5KGZrTmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMgaGFuZGxlcyB1bmlkaXJlY3Rpb25hbCBwcm9ibGVtcyBub3QgY292ZXJlZCBhYm92ZS5cclxuICAgIGlmIChlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAgIGxldCBpbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcztcclxuICAgICAgbGV0IGJhc2VFbnRpdHlUeXBlID0gZW50aXR5VHlwZS5iYXNlRW50aXR5VHlwZTtcclxuICAgICAgd2hpbGUgKGJhc2VFbnRpdHlUeXBlKSB7XHJcbiAgICAgICAgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzID0gaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzLmNvbmNhdChiYXNlRW50aXR5VHlwZS5pbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGJhc2VFbnRpdHlUeXBlID0gYmFzZUVudGl0eVR5cGUuYmFzZUVudGl0eVR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzLmZvckVhY2goKGludkZrUHJvcCkgPT4ge1xyXG4gICAgICAgIGlmIChpbnZGa1Byb3AucmVsYXRlZE5hdmlnYXRpb25Qcm9wZXJ0eSEuaW52ZXJzZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyB0aGlzIG5leHQgc3RlcCBtYXkgYmUgc2xvdyAtIGl0IGl0ZXJhdGVzIG92ZXIgYWxsIG9mIHRoZSBlbnRpdGllcyBpbiBhIGdyb3VwO1xyXG4gICAgICAgICAgLy8gaG9wZWZ1bGx5IGl0IGRvZXNuJ3QgaGFwcGVuIG9mdGVuLlxyXG4gICAgICAgICAgZW50aXR5TWFuYWdlciEuX3VwZGF0ZUZrVmFsKGludkZrUHJvcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluc3VyZSB0aGF0IGNhY2hlZCBrZXkgaXMgdXBkYXRlZC5cclxuICAgIGVudGl0eUFzcGVjdC5nZXRLZXkodHJ1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXREcFZhbHVlQ29tcGxleChjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIERhdGFQcm9wZXJ0eTtcclxuICBsZXQgb2xkVmFsdWUgPSBjb250ZXh0Lm9sZFZhbHVlO1xyXG4gIGxldCBuZXdWYWx1ZSA9IGNvbnRleHQubmV3VmFsdWU7XHJcblxyXG4gIC8vIFRvIGdldCBoZXJlIGl0IG11c3QgYmUgYSBDb21wbGV4UHJvcGVydHlcclxuICAvLyAnZGF0YVR5cGUnIHdpbGwgYmUgYSBjb21wbGV4VHlwZVxyXG4gIGxldCBkYXRhVHlwZSA9IHByb3BlcnR5LmRhdGFUeXBlIGFzIENvbXBsZXhUeXBlO1xyXG4gIGlmIChwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoY29yZS5mb3JtYXRTdHJpbmcoXCJZb3UgY2Fubm90IHNldCB0aGUgJyUxJyBwcm9wZXJ0eSB0byBudWxsIGJlY2F1c2UgaXQncyBkYXRhdHlwZSBpcyB0aGUgQ29tcGxleFR5cGU6ICclMidcIiwgcHJvcGVydHkubmFtZSwgcHJvcGVydHkuZGF0YVR5cGUubmFtZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2xkVmFsdWUpIHtcclxuICAgICAgbGV0IGN0b3IgPSBkYXRhVHlwZS5nZXRDdG9yKCk7XHJcbiAgICAgIG9sZFZhbHVlID0gbmV3IGN0b3IoKTtcclxuICAgICAgcmF3QWNjZXNzb3JGbihvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBkYXRhVHlwZS5kYXRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICBsZXQgcG4gPSBkcC5uYW1lO1xyXG4gICAgICBsZXQgbnYgPSBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShwbik7XHJcbiAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KHBuLCBudik7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGNvcmUuZm9ybWF0U3RyaW5nKFwiWW91IGNhbm5vdCBzZXQgdGhlIG5vbi1zY2FsYXIgY29tcGxleCBwcm9wZXJ0eTogJyUxJyBvbiB0aGUgdHlwZTogJyUyJy5cIiArXHJcbiAgICAgICAgICAgIFwiSW5zdGVhZCBnZXQgdGhlIHByb3BlcnR5IGFuZCB1c2UgYXJyYXkgZnVuY3Rpb25zIGxpa2UgJ3B1c2gnIG9yICdzcGxpY2UnIHRvIGNoYW5nZSBpdHMgY29udGVudHMuXCIsXHJcbiAgICAgICAgcHJvcGVydHkubmFtZSwgcHJvcGVydHkucGFyZW50VHlwZS5uYW1lKSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gc2V0TnBWYWx1ZShjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuXHJcbiAgbGV0IHBhcmVudCA9IGNvbnRleHQucGFyZW50IGFzIEVudGl0eTtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICBpZiAoIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25zY2FsYXIgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSAtIGVudGl0aWVzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGJ1dCB0aGUgY29sbGVjdGlvbiBtYXkgbm90IGJlIGNoYW5nZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuICBsZXQgaW52ZXJzZVByb3AgPSBwcm9wZXJ0eS5pbnZlcnNlO1xyXG5cclxuICAvLyBtYW5hZ2UgYXR0YWNobWVudCAtXHJcbiAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgIGlmICghbmV3VmFsdWUuZW50aXR5QXNwZWN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBuZXdBc3BlY3QgPSBuZXdWYWx1ZS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgICBpZiAobmV3QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkge1xyXG4gICAgICAgIGlmICghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIuYXR0YWNoRW50aXR5KG5ld1ZhbHVlLCBFbnRpdHlTdGF0ZS5BZGRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChuZXdBc3BlY3QuZW50aXR5TWFuYWdlciAhPT0gZW50aXR5TWFuYWdlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gRW50aXR5IGNhbm5vdCBiZSBhdHRhY2hlZCB0byBhbiBlbnRpdHkgaW4gYW5vdGhlciBFbnRpdHlNYW5hZ2VyLiBPbmUgb2YgdGhlIHR3byBlbnRpdGllcyBtdXN0IGJlIGRldGFjaGVkIGZpcnN0LlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuZXdBc3BlY3QgJiYgbmV3QXNwZWN0LmVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgICBlbnRpdHlNYW5hZ2VyID0gbmV3QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgICAgICAgaWYgKCFlbnRpdHlNYW5hZ2VyIS5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIhLmF0dGFjaEVudGl0eShlbnRpdHlBc3BlY3QuZW50aXR5ISwgRW50aXR5U3RhdGUuQWRkZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvY2VzcyByZWxhdGVkIHVwZGF0ZXMgKCB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXApIGZpcnN0IHNvIHRoYXQgY29sbGVjdGlvbiBkdXBzIGNoZWNrIHdvcmtzIHByb3Blcmx5LlxyXG4gIC8vIHVwZGF0ZSBpbnZlcnNlIHJlbGF0aW9uc2hpcFxyXG4gIGlmIChpbnZlcnNlUHJvcCkge1xyXG4gICAgLy8vXHJcbiAgICBpZiAoaW52ZXJzZVByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLmludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXIgfHwgbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZEludGVybmF0aW9uYWxPcmRlci5vcmRlciA9IG51bGwpXHJcbiAgICAgIC8vICAgID09PiBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXIgPSBvcmRlclxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG51bGwgLT4gTnVsbEVudGl0eSBsYXRlclxyXG4gICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgbmV3VmFsdWUuc2V0UHJvcGVydHkoaW52ZXJzZVByb3AubmFtZSwgcGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwtIG5ld09yZGVyIHx8IG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGRPcmRlcikub3JkZXJEZXRhaWxzLnJlbW92ZShvcmRlckRldGFpbClcclxuICAgICAgLy8gICAgPT0+IG9yZGVyLm9yZGVyRGV0YWlscy5wdXNoKG5ld09yZGVyKVxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBvbGRTaWJsaW5ncyA9IG9sZFZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIGxldCBpeCA9IG9sZFNpYmxpbmdzLmluZGV4T2YocGFyZW50KTtcclxuICAgICAgICBpZiAoaXggIT09IC0xKSB7XHJcbiAgICAgICAgICBvbGRTaWJsaW5ncy5zcGxpY2UoaXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWJsaW5ncyA9IG5ld1ZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIC8vIHJlY3Vyc2lvbiBjaGVjayBpZiBhbHJlYWR5IGluIHRoZSBjb2xsZWN0aW9uIGlzIHBlcmZvcm1lZCBieSB0aGUgcmVsYXRpb25BcnJheVxyXG4gICAgICAgIHNpYmxpbmdzLnB1c2gocGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocHJvcGVydHkuaW52Rm9yZWlnbktleU5hbWVzICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuX2luS2V5Rml4dXApIHtcclxuICAgIGxldCBpbnZGb3JlaWduS2V5TmFtZXMgPSBwcm9wZXJ0eS5pbnZGb3JlaWduS2V5TmFtZXM7XHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLkludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgICAgLy8gICAgPT0+IGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkID0gb3JkZXJJZFxyXG4gICAgICAvLyAgICAgIGFuZFxyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwteHh4IG5ld09yZGVyXHJcbiAgICAgIC8vICAgID09PiBDQU4nVCBIQVBQRU4gYmVjYXVzZSBpZiB1bmlkaXJlY3Rpb25hbCBiZWNhdXNlIG9yZGVyRGV0YWlsIHdpbGwgbm90IGhhdmUgYW4gb3JkZXIgcHJvcFxyXG4gICAgICBsZXQgcGtWYWx1ZXMgPSBwYXJlbnQuZW50aXR5QXNwZWN0LmdldEtleSgpLnZhbHVlcztcclxuICAgICAgaW52Rm9yZWlnbktleU5hbWVzLmZvckVhY2goIChma05hbWUsIGkpID0+IHtcclxuICAgICAgICBuZXdWYWx1ZSEuc2V0UHJvcGVydHkoZmtOYW1lLCBwa1ZhbHVlc1tpXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5pbnRlcm5hdGlvbmFsT3JkZXIgPC0gbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZCBpbnRlcm5hdGlvbmFsT3JkZXIpLm9yZGVySWQgPSBudWxsXHJcbiAgICAgIC8vICAgICAgICBhbmRcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LXh4eCBuZXdPcmRlclxyXG4gICAgICAvLyAgICA9PT4gQ0FOJ1QgSEFQUEVOIGJlY2F1c2UgaWYgdW5pZGlyZWN0aW9uYWwgYmVjYXVzZSBvcmRlckRldGFpbCB3aWxsIG5vdCBoYXZlIGFuIG9yZGVyIHByb3BcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBpbnZGb3JlaWduS2V5TmFtZXMuZm9yRWFjaCggKGZrTmFtZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZrUHJvcCA9IG9sZFZhbHVlLmVudGl0eVR5cGUuZ2V0UHJvcGVydHkoZmtOYW1lKTtcclxuICAgICAgICAgIGlmICghZmtQcm9wLmlzUGFydE9mS2V5KSB7XHJcbiAgICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSB3aXRoIG51bGwgaWYgZmsgaXMgcGFydCBvZiB0aGUga2V5XHJcbiAgICAgICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGZrTmFtZSwgbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG5cclxuICB1cGRhdGVTdGF0ZUFuZFZhbGlkYXRlKGNvbnRleHQpO1xyXG5cclxuICAvLyB1cGRhdGUgZmsgZGF0YSBwcm9wZXJ0eSAtIHRoaXMgY2FuIG9ubHkgb2NjdXIgaWYgdGhpcyBuYXZQcm9wZXJ0eSBoYXNcclxuICAvLyBhIGNvcnJlc3BvbmRpbmcgZmsgb24gdGhpcyBlbnRpdHkuXHJcbiAgaWYgKHByb3BlcnR5LnJlbGF0ZWREYXRhUHJvcGVydGllcykge1xyXG4gICAgbGV0IGVudGl0eVN0YXRlID0gZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gICAgLy8gaWYgZWl0aGVyIHNpZGUgb2YgbmF2IHByb3AgaXMgZGV0YWNoZWQgZG9uJ3QgY2xlYXIgZmtzLiBOb3RlOiBvbGRWYWx1ZSBpbiBuZXh0IGxpbmUgY2Fubm90IGJlIG51bGwgc28gbm8gY2hlY2sgaXMgbmVlZGVkLlxyXG4gICAgaWYgKG5ld1ZhbHVlID09IG51bGwgJiYgKGVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSB8fCBvbGRWYWx1ZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNEZXRhY2hlZCgpKSkgcmV0dXJuO1xyXG4gICAgaWYgKGVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSByZXR1cm47XHJcblxyXG4gICAgLy8gd2UgbWF5IGhhdmUgaW52ZXJzZSBwcm9wcyBpbmRpY2F0aW5nIHRoZSByZWxhdGVkIHByb3Agb24gdGhlIG90aGVyIGVudGl0eSwgaWYgaXQgaXMgbm90IHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgbGV0IGludmVyc2VLZXlQcm9wcyA9IHByb3BlcnR5LmludkZvcmVpZ25LZXlOYW1lcztcclxuICAgIGlmICghKGludmVyc2VLZXlQcm9wcyAmJiBpbnZlcnNlS2V5UHJvcHMubGVuZ3RoKSkge1xyXG4gICAgICAvLyBvdGhlcndpc2UsIHRoaXMgcHJvcCBpcyByZWxhdGVkIHRvIHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgICBpbnZlcnNlS2V5UHJvcHMgPSBwcm9wZXJ0eS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXMubWFwKGsgPT4gay5uYW1lKTtcclxuICAgIH1cclxuICAgIGludmVyc2VLZXlQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlQcm9wLCBpKSB7XHJcbiAgICAgIGxldCByZWxhdGVkRGF0YVByb3AgPSBwcm9wZXJ0eS5yZWxhdGVkRGF0YVByb3BlcnRpZXNbaV07XHJcbiAgICAgIC8vIERvIG5vdCB0cmFzaCByZWxhdGVkIHByb3BlcnR5IGlmIGl0IGlzIHBhcnQgb2YgdGhhdCBlbnRpdHkncyBrZXlcclxuICAgICAgaWYgKG5ld1ZhbHVlIHx8ICFyZWxhdGVkRGF0YVByb3AuaXNQYXJ0T2ZLZXkpIHtcclxuICAgICAgICBsZXQgcmVsYXRlZFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShrZXlQcm9wKSA6IHJlbGF0ZWREYXRhUHJvcC5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWREYXRhUHJvcC5uYW1lLCByZWxhdGVkVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvc3RDaGFuZ2VFdmVudHMoY29udGV4dDogSUNvbnRleHQpIHtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcblxyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGVudGl0eSA9IGVudGl0eUFzcGVjdC5lbnRpdHk7XHJcblxyXG4gIGxldCBwcm9wQ2hhbmdlZEFyZ3MgPSB7IGVudGl0eTogZW50aXR5ISwgcGFyZW50OiBjb250ZXh0LnBhcmVudCwgcHJvcGVydHk6IGNvbnRleHQucHJvcGVydHksIHByb3BlcnR5TmFtZTogY29udGV4dC5wcm9wZXJ0eU5hbWUsIG9sZFZhbHVlOiBjb250ZXh0Lm9sZFZhbHVlLCBuZXdWYWx1ZTogY29udGV4dC5uZXdWYWx1ZSB9O1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAvLyBwcm9wZXJ0eUNoYW5nZWQgd2lsbCBiZSBmaXJlZCBkdXJpbmcgbG9hZGluZyBidXQgd2Ugb25seSB3YW50IHRvIGZpcmUgaXQgb25jZSBwZXIgZW50aXR5LCBub3Qgb25jZSBwZXIgcHJvcGVydHkuXHJcbiAgICAvLyBzbyBwcm9wZXJ0eUNoYW5nZWQgaXMgZmlyZWQgaW4gdGhlIGVudGl0eU1hbmFnZXIgbWVyZ2VFbnRpdHkgbWV0aG9kIGlmIG5vdCBmaXJlZCBoZXJlLlxyXG4gICAgaWYgKCghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpICYmICghZW50aXR5TWFuYWdlci5pc1JlamVjdGluZ0NoYW5nZXMpKSB7XHJcbiAgICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gICAgICAvLyBkb24ndCBmaXJlIGVudGl0eUNoYW5nZWQgZXZlbnQgaWYgcHJvcGVydHlDaGFuZ2VkIGlzIHN1cHByZXNzZWQuXHJcbiAgICAgIGVudGl0eU1hbmFnZXIuZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uUHJvcGVydHlDaGFuZ2UsIGVudGl0eTogZW50aXR5LCBhcmdzOiBwcm9wQ2hhbmdlZEFyZ3MgfSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0OiBJQ29udGV4dCkge1xyXG4gIGxldCBlbnRpdHlBc3BlY3QgPSBjb250ZXh0LmVudGl0eUFzcGVjdDtcclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyID09IG51bGwgfHwgZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHJldHVybjtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xyXG5cclxuICBpZiAoZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzVW5jaGFuZ2VkKCkgJiYgIXByb3BlcnR5LmlzVW5tYXBwZWQpIHtcclxuICAgIGVudGl0eUFzcGVjdC5zZXRNb2RpZmllZCgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGVudGl0eU1hbmFnZXIudmFsaWRhdGlvbk9wdGlvbnMudmFsaWRhdGVPblByb3BlcnR5Q2hhbmdlKSB7XHJcbiAgICAvLyBlbnRpdHlBc3BlY3QuZW50aXR5IGlzIE5PVCB0aGUgc2FtZSBhcyBwYXJlbnQgaW4gdGhlIGNvZGUgYmVsb3cuIEl0J3MgdXNlIGlzIGRlbGliZXJhdGUuXHJcbiAgICBlbnRpdHlBc3BlY3QuX3ZhbGlkYXRlUHJvcGVydHkoY29udGV4dC5uZXdWYWx1ZSxcclxuICAgICAgICB7IGVudGl0eTogZW50aXR5QXNwZWN0LmVudGl0eSwgcHJvcGVydHk6IHByb3BlcnR5LCBwcm9wZXJ0eU5hbWU6IGNvbnRleHQucHJvcGVydHlOYW1lLCBvbGRWYWx1ZTogY29udGV4dC5vbGRWYWx1ZSB9KTtcclxuICB9XHJcbn1cclxuIl19
package/esm5/src/enum.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2012-2021 IdeaBlade, Inc. All Rights Reserved.
2
+ * Copyright 2012-2023 IdeaBlade, Inc. All Rights Reserved.
3
3
  * Use, reproduction, distribution, and modification of this code is subject to the terms and
4
4
  * conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license
5
5
  *
@@ -141,4 +141,4 @@ var BreezeEnum = /** @class */ (function () {
141
141
  return BreezeEnum;
142
142
  }());
143
143
  export { BreezeEnum };
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdDRTtBQUNGO0lBU0UsT0FBTztJQUNQLG9CQUFZLGFBQXNCO1FBQWxDLGlCQUlDO1FBSEMsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHLElBQUssT0FBQSxLQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUE5QixDQUE4QixDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFVLEdBQWpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsRUFBRSxDQUFDLE1BQU0sRUFBVCxDQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFRLEdBQWY7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxFQUFFLENBQUMsSUFBSSxFQUFQLENBQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBUSxHQUFmLFVBQWdCLElBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx5QkFBYyxHQUFyQjtRQUNFLElBQUksSUFBSSxDQUFDLHdCQUF3QjtZQUFFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ3hFLElBQUksTUFBTSxHQUEwQyxFQUFFLENBQUM7UUFFdkQsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRTtvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2lCQUNqQjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLG1CQUFRLEdBQWYsVUFBZ0IsR0FBZTtRQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksVUFBVSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUdELE1BQU07SUFDTiwwRkFBMEY7SUFDMUYsNENBQTRDO0lBQzVDLGtEQUFrRDtJQUNsRCw4QkFBOEI7SUFDOUIsV0FBVztJQUNYLE1BQU07SUFDTiw4QkFBOEI7SUFDOUIsc0NBQXNDO0lBQ3RDLEtBQUs7SUFFTCwyQ0FBMkM7SUFDM0MsNkJBQVEsR0FBUjtRQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLDJCQUFNLEdBQU47UUFDRSxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSyxJQUFJLENBQUMsV0FBbUIsQ0FBQyxJQUFJO1lBQ2hFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVILGlCQUFDO0FBQUQsQ0FBQyxBQTlHRCxJQThHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAyMDEyLTIwMjEgSWRlYUJsYWRlLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgXHJcbiAqIFVzZSwgcmVwcm9kdWN0aW9uLCBkaXN0cmlidXRpb24sIGFuZCBtb2RpZmljYXRpb24gb2YgdGhpcyBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBcclxuICogY29uZGl0aW9ucyBvZiB0aGUgSWRlYUJsYWRlIEJyZWV6ZSBsaWNlbnNlLCBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5icmVlemVqcy5jb20vbGljZW5zZVxyXG4gKlxyXG4gKiBBdXRob3I6IEpheSBUcmFiYW5kXHJcbiAqL1xyXG5cclxuLyoqXHJcbkJhc2UgY2xhc3MgZm9yIGFsbCBCcmVlemUgZW51bWVyYXRpb25zLCBzdWNoIGFzIEVudGl0eVN0YXRlLCBEYXRhVHlwZSwgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSBldGMuXHJcbkEgQnJlZXplIEVudW0gaXMgYSBuYW1lc3BhY2VkIHNldCBvZiBjb25zdGFudCB2YWx1ZXMuICBFYWNoIEVudW0gY29uc2lzdHMgb2YgYSBncm91cCBvZiByZWxhdGVkIGNvbnN0YW50cywgY2FsbGVkICdzeW1ib2xzJy5cclxuVW5saWtlIGVudW1zIGluIHNvbWUgb3RoZXIgZW52aXJvbm1lbnRzLCBlYWNoICdzeW1ib2wnIGNhbiBoYXZlIGJvdGggbWV0aG9kcyBhbmQgcHJvcGVydGllcy5cclxuPiAgICAgY2xhc3MgRGF5T2ZXZWVrIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcbj4gICAgICAgZGF5SW5kZXg6IG51bWJlcjtcclxuPiAgICAgICBpc1dlZWtlbmQ/OiBib29sZWFuO1xyXG4+ICAgICAgIG5leHREYXkoKSB7XHJcbj4gICAgICAgICBsZXQgbmV4dEluZGV4ID0gKHRoaXMuZGF5SW5kZXggKyAxKSAlIDc7XHJcbj4gICAgICAgICByZXR1cm4gRGF5T2ZXZWVrLmdldFN5bWJvbHMoKVtuZXh0SW5kZXhdO1xyXG4+ICAgICAgIH1cclxuPlxyXG4+ICAgICAgIHN0YXRpYyBNb25kYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAwfSk7XHJcbj4gICAgICAgc3RhdGljIFR1ZXNkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAxIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBXZWRuZXNkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAyIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBUaHVyc2RheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDMgfSk7XHJcbj4gICAgICAgc3RhdGljIEZyaWRheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDQgfSk7XHJcbj4gICAgICAgc3RhdGljIFNhdHVyZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogNSwgaXNXZWVrZW5kOiB0cnVlIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBTdW5kYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiA2LCBpc1dlZWtlbmQ6IHRydWUgfSk7XHJcbj4gICAgIH1cclxuPlxyXG4+ICAgICBkZXNjcmliZShcIkRheU9mV2Vla1wiLCAoKSA9PiB7XHJcbj4gICAgICAgdGVzdChcInNob3VsZCBzdXBwb3J0IGZ1bGwgZW51bSBjYXBhYmlsaXRpZXNcIiwgZnVuY3Rpb24oKSB7XHJcbj4gICAgICAgICAvLyAvLyBjdXN0b20gbWV0aG9kc1xyXG4+ICAgICAgICAgbGV0IGRvd1N5bWJvbHMgPSBEYXlPZldlZWsuZ2V0U3ltYm9scygpO1xyXG4+ICAgICAgICAgZXhwZWN0KGRvd1N5bWJvbHMubGVuZ3RoKS50b0JlKDcpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5Nb25kYXkubmV4dERheSgpKS50b0JlKERheU9mV2Vlay5UdWVzZGF5KTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuU3VuZGF5Lm5leHREYXkoKSkudG9CZShEYXlPZldlZWsuTW9uZGF5KTtcclxuPiAgICAgICAvLyAvLyBjdXN0b20gcHJvcGVydGllc1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5UdWVzZGF5LmlzV2Vla2VuZCkudG9CZSh1bmRlZmluZWQpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5TYXR1cmRheS5pc1dlZWtlbmQpLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgLy8gLy8gU3RhbmRhcmQgZW51bSBjYXBhYmlsaXRpZXNcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuVGh1cnNkYXkgaW5zdGFuY2VvZiBEYXlPZldlZWspLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgICBleHBlY3QoQnJlZXplRW51bS5pc1N5bWJvbChEYXlPZldlZWsuV2VkbmVzZGF5KSkudG9CZSh0cnVlKTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuY29udGFpbnMoRGF5T2ZXZWVrLlRodXJzZGF5KSkudG9CZSh0cnVlKTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuRnJpZGF5LnRvU3RyaW5nKCkpLnRvQmUoXCJGcmlkYXlcIik7XHJcbj4gICAgICAgfSk7XHJcbj4gICB9KTtcclxuTm90ZSB0aGF0IHdlIGhhdmUgRXJyb3JbJ3gnXSA9IC4uLiBpbiBzb21lIHBsYWNlcyBpbiB0aGUgY29kZSB0byBwcmV2ZW50IFRlcnNlciBmcm9tIG9wdGltaXppbmcgb3V0IHNvbWUgaW1wb3J0YW50IGNhbGxzLlxyXG5AZHluYW1pY1xyXG4qL1xyXG5leHBvcnQgY2xhc3MgQnJlZXplRW51bSB7XHJcbiAgLy8gLy8gVE9ETzogdGhpbmsgYWJvdXQgQ29tcG9zaXRlRW51bSAoZmxhZ3MgaW1wbCkuXHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgc3ltYm9sICovXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIC8qKiBUeXBlIG9mIHRoZSBlbnVtOyBzZXQgaW4gcHJvdG90eXBlIG9mIGVhY2ggZW51bSAqL1xyXG4gIF8kdHlwZU5hbWU6IHN0cmluZztcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX3Jlc29sdmVkTmFtZXNBbmRTeW1ib2xzOiB7IG5hbWU6IHN0cmluZywgc3ltYm9sOiBCcmVlemVFbnVtIH1bXTtcclxuXHJcbiAgLyoqICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXNPYmo/OiBPYmplY3QpIHtcclxuICAgIGlmIChwcm9wZXJ0aWVzT2JqKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXNPYmopLmZvckVhY2goKGtleSkgPT4gdGhpc1trZXldID0gcHJvcGVydGllc09ialtrZXldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYWxsIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gID4gICAgIGxldCBzeW1ib2xzID0gRGF5T2ZXZWVrLmdldFN5bWJvbHMoKTtcclxuICBAcmV0dXJuIEFsbCBvZiB0aGUgc3ltYm9scyBjb250YWluZWQgd2l0aGluIHRoaXMgRW51bS5cclxuICAqKi9cclxuICBzdGF0aWMgZ2V0U3ltYm9scygpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTeW1ib2xzKCkubWFwKGtzID0+IGtzLnN5bWJvbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgb2YgdGhlIHN5bWJvbHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIEVudW0uXHJcbiAgPiAgICAgbGV0IHN5bWJvbHMgPSBEYXlPZldlZWsuZ2V0TmFtZXMoKTtcclxuICBAcmV0dXJuICBBbGwgb2YgdGhlIG5hbWVzIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBnZXROYW1lcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTeW1ib2xzKCkubWFwKGtzID0+IGtzLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhbiBFbnVtIHN5bWJvbCBnaXZlbiBpdHMgbmFtZS5cclxuICA+ICAgICBsZXQgZGF5T2ZXZWVrID0gRGF5T2ZXZWVrLmZyb20oXCJUaHVyc2RheVwiKTtcclxuICA+ICAgICAvLyBub3dkYXlPZldlZWsgPT09IERheU9mV2Vlay5UaHVyc2RheVxyXG4gIEBwYXJhbSBuYW1lIC0gTmFtZSBmb3Igd2hpY2ggYW4gZW51bSBzeW1ib2wgc2hvdWxkIGJlIHJldHVybmVkLlxyXG4gIEByZXR1cm4gVGhlIHN5bWJvbCB0aGF0IG1hdGNoZXMgdGhlIG5hbWUgb3IgJ3VuZGVmaW5lZCcgaWYgbm90IGZvdW5kLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBmcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzW25hbWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgU2VhbHMgdGhpcyBlbnVtIHNvIHRoYXQgbm8gbW9yZSBzeW1ib2xzIG1heSBiZSBhZGRlZCB0byBpdC4gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHN5bWJvbHNcclxuICBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgRW51bS4gVGhpcyBtZXRob2QgYWxzbyBzZXRzIHRoZSAnbmFtZScgcHJvcGVydHkgb24gZWFjaCBvZiB0aGUgc3ltYm9scy5cclxuICA+ICAgICBEYXlPZldlZWsucmVzb2x2ZVN5bWJvbHMoKTtcclxuICAqKi9cclxuICBzdGF0aWMgcmVzb2x2ZVN5bWJvbHMoKSB7XHJcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWROYW1lc0FuZFN5bWJvbHMpIHJldHVybiB0aGlzLl9yZXNvbHZlZE5hbWVzQW5kU3ltYm9scztcclxuICAgIGxldCByZXN1bHQ6IHtuYW1lOiBzdHJpbmcsIHN5bWJvbDogQnJlZXplRW51bSB9W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcykge1xyXG4gICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgbGV0IHN5bWIgPSB0aGlzW2tleV07XHJcbiAgICAgICAgaWYgKHN5bWIgaW5zdGFuY2VvZiBCcmVlemVFbnVtKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaCggeyBuYW1lOiBrZXksIHN5bWJvbDogc3ltYiB9KTtcclxuICAgICAgICAgIHRoaXNba2V5XSA9IHN5bWI7XHJcbiAgICAgICAgICBzeW1iLm5hbWUgPSBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXNvbHZlZE5hbWVzQW5kU3ltYm9scyA9IHJlc3VsdDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gRW51bSBjb250YWlucyBhIHNwZWNpZmllZCBzeW1ib2wuXHJcbiAgPiAgICAgbGV0IHN5bWJvbCA9IERheU9mV2Vlay5GcmlkYXk7XHJcbiAgPiAgICAgaWYgKERheU9mV2Vlay5jb250YWlucyhzeW1ib2wpKSB7XHJcbiAgPiAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gID4gICAgIH1cclxuICBAcGFyYW0gc3ltIC0gT2JqZWN0IG9yIHN5bWJvbCB0byB0ZXN0LlxyXG4gIEByZXR1cm4gV2hldGhlciB0aGlzIEVudW0gY29udGFpbnMgdGhlIHNwZWNpZmllZCBzeW1ib2wuXHJcbiAgKiovXHJcbiAgc3RhdGljIGNvbnRhaW5zKHN5bTogQnJlZXplRW51bSkge1xyXG4gICAgaWYgKCEoc3ltIGluc3RhbmNlb2YgQnJlZXplRW51bSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzW3N5bS5uYW1lXSAhPSBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIC8qKlxyXG4gIC8vIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gRW51bSAnc3ltYm9sJy4gVXNlIHRoZSAnY29udGFpbnMnIG1ldGhvZCBpbnN0ZWFkIG9mIHRoaXMgb25lIFxyXG4gIC8vIGlmIHlvdSB3YW50IHRvIHRlc3QgZm9yIGEgc3BlY2lmaWMgRW51bS4gXHJcbiAgLy8gPiAgICAgaWYgKEVudW0uaXNTeW1ib2woRGF5T2ZXZWVrLldlZG5lc2RheSkpIHtcclxuICAvLyA+ICAgICAgIC8vIGRvIHNvbWV0aGluZyAuLi5cclxuICAvLyA+ICAgICB9O1xyXG4gIC8vICoqL1xyXG4gIC8vIHN0YXRpYyBpc1N5bWJvbChvYmo6IGFueSkge1xyXG4gIC8vICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEJyZWV6ZUVudW07XHJcbiAgLy8gfTtcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyBuYW1lIG9mIHRoaXMgRW51bSAqL1xyXG4gIHRvU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gZW51bSBuYW1lIGFuZCBzeW1ib2wgbmFtZSAqL1xyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIF8kdHlwZU5hbWU6IHRoaXNbJ18kdHlwZU5hbWUnXSB8fCAodGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkpLm5hbWUsXHJcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIl19
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdDRTtBQUNGO0lBU0UsT0FBTztJQUNQLG9CQUFZLGFBQXNCO1FBQWxDLGlCQUlDO1FBSEMsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHLElBQUssT0FBQSxLQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUE5QixDQUE4QixDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFVLEdBQWpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsRUFBRSxDQUFDLE1BQU0sRUFBVCxDQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFRLEdBQWY7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxFQUFFLENBQUMsSUFBSSxFQUFQLENBQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBUSxHQUFmLFVBQWdCLElBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx5QkFBYyxHQUFyQjtRQUNFLElBQUksSUFBSSxDQUFDLHdCQUF3QjtZQUFFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ3hFLElBQUksTUFBTSxHQUEwQyxFQUFFLENBQUM7UUFFdkQsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRTtvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2lCQUNqQjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLG1CQUFRLEdBQWYsVUFBZ0IsR0FBZTtRQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksVUFBVSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUdELE1BQU07SUFDTiwwRkFBMEY7SUFDMUYsNENBQTRDO0lBQzVDLGtEQUFrRDtJQUNsRCw4QkFBOEI7SUFDOUIsV0FBVztJQUNYLE1BQU07SUFDTiw4QkFBOEI7SUFDOUIsc0NBQXNDO0lBQ3RDLEtBQUs7SUFFTCwyQ0FBMkM7SUFDM0MsNkJBQVEsR0FBUjtRQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLDJCQUFNLEdBQU47UUFDRSxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSyxJQUFJLENBQUMsV0FBbUIsQ0FBQyxJQUFJO1lBQ2hFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVILGlCQUFDO0FBQUQsQ0FBQyxBQTlHRCxJQThHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAyMDEyLTIwMjMgSWRlYUJsYWRlLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgXHJcbiAqIFVzZSwgcmVwcm9kdWN0aW9uLCBkaXN0cmlidXRpb24sIGFuZCBtb2RpZmljYXRpb24gb2YgdGhpcyBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBcclxuICogY29uZGl0aW9ucyBvZiB0aGUgSWRlYUJsYWRlIEJyZWV6ZSBsaWNlbnNlLCBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5icmVlemVqcy5jb20vbGljZW5zZVxyXG4gKlxyXG4gKiBBdXRob3I6IEpheSBUcmFiYW5kXHJcbiAqL1xyXG5cclxuLyoqXHJcbkJhc2UgY2xhc3MgZm9yIGFsbCBCcmVlemUgZW51bWVyYXRpb25zLCBzdWNoIGFzIEVudGl0eVN0YXRlLCBEYXRhVHlwZSwgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSBldGMuXHJcbkEgQnJlZXplIEVudW0gaXMgYSBuYW1lc3BhY2VkIHNldCBvZiBjb25zdGFudCB2YWx1ZXMuICBFYWNoIEVudW0gY29uc2lzdHMgb2YgYSBncm91cCBvZiByZWxhdGVkIGNvbnN0YW50cywgY2FsbGVkICdzeW1ib2xzJy5cclxuVW5saWtlIGVudW1zIGluIHNvbWUgb3RoZXIgZW52aXJvbm1lbnRzLCBlYWNoICdzeW1ib2wnIGNhbiBoYXZlIGJvdGggbWV0aG9kcyBhbmQgcHJvcGVydGllcy5cclxuPiAgICAgY2xhc3MgRGF5T2ZXZWVrIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcbj4gICAgICAgZGF5SW5kZXg6IG51bWJlcjtcclxuPiAgICAgICBpc1dlZWtlbmQ/OiBib29sZWFuO1xyXG4+ICAgICAgIG5leHREYXkoKSB7XHJcbj4gICAgICAgICBsZXQgbmV4dEluZGV4ID0gKHRoaXMuZGF5SW5kZXggKyAxKSAlIDc7XHJcbj4gICAgICAgICByZXR1cm4gRGF5T2ZXZWVrLmdldFN5bWJvbHMoKVtuZXh0SW5kZXhdO1xyXG4+ICAgICAgIH1cclxuPlxyXG4+ICAgICAgIHN0YXRpYyBNb25kYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAwfSk7XHJcbj4gICAgICAgc3RhdGljIFR1ZXNkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAxIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBXZWRuZXNkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAyIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBUaHVyc2RheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDMgfSk7XHJcbj4gICAgICAgc3RhdGljIEZyaWRheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDQgfSk7XHJcbj4gICAgICAgc3RhdGljIFNhdHVyZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogNSwgaXNXZWVrZW5kOiB0cnVlIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBTdW5kYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiA2LCBpc1dlZWtlbmQ6IHRydWUgfSk7XHJcbj4gICAgIH1cclxuPlxyXG4+ICAgICBkZXNjcmliZShcIkRheU9mV2Vla1wiLCAoKSA9PiB7XHJcbj4gICAgICAgdGVzdChcInNob3VsZCBzdXBwb3J0IGZ1bGwgZW51bSBjYXBhYmlsaXRpZXNcIiwgZnVuY3Rpb24oKSB7XHJcbj4gICAgICAgICAvLyAvLyBjdXN0b20gbWV0aG9kc1xyXG4+ICAgICAgICAgbGV0IGRvd1N5bWJvbHMgPSBEYXlPZldlZWsuZ2V0U3ltYm9scygpO1xyXG4+ICAgICAgICAgZXhwZWN0KGRvd1N5bWJvbHMubGVuZ3RoKS50b0JlKDcpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5Nb25kYXkubmV4dERheSgpKS50b0JlKERheU9mV2Vlay5UdWVzZGF5KTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuU3VuZGF5Lm5leHREYXkoKSkudG9CZShEYXlPZldlZWsuTW9uZGF5KTtcclxuPiAgICAgICAvLyAvLyBjdXN0b20gcHJvcGVydGllc1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5UdWVzZGF5LmlzV2Vla2VuZCkudG9CZSh1bmRlZmluZWQpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5TYXR1cmRheS5pc1dlZWtlbmQpLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgLy8gLy8gU3RhbmRhcmQgZW51bSBjYXBhYmlsaXRpZXNcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuVGh1cnNkYXkgaW5zdGFuY2VvZiBEYXlPZldlZWspLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgICBleHBlY3QoQnJlZXplRW51bS5pc1N5bWJvbChEYXlPZldlZWsuV2VkbmVzZGF5KSkudG9CZSh0cnVlKTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuY29udGFpbnMoRGF5T2ZXZWVrLlRodXJzZGF5KSkudG9CZSh0cnVlKTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuRnJpZGF5LnRvU3RyaW5nKCkpLnRvQmUoXCJGcmlkYXlcIik7XHJcbj4gICAgICAgfSk7XHJcbj4gICB9KTtcclxuTm90ZSB0aGF0IHdlIGhhdmUgRXJyb3JbJ3gnXSA9IC4uLiBpbiBzb21lIHBsYWNlcyBpbiB0aGUgY29kZSB0byBwcmV2ZW50IFRlcnNlciBmcm9tIG9wdGltaXppbmcgb3V0IHNvbWUgaW1wb3J0YW50IGNhbGxzLlxyXG5AZHluYW1pY1xyXG4qL1xyXG5leHBvcnQgY2xhc3MgQnJlZXplRW51bSB7XHJcbiAgLy8gLy8gVE9ETzogdGhpbmsgYWJvdXQgQ29tcG9zaXRlRW51bSAoZmxhZ3MgaW1wbCkuXHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgc3ltYm9sICovXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIC8qKiBUeXBlIG9mIHRoZSBlbnVtOyBzZXQgaW4gcHJvdG90eXBlIG9mIGVhY2ggZW51bSAqL1xyXG4gIF8kdHlwZU5hbWU6IHN0cmluZztcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX3Jlc29sdmVkTmFtZXNBbmRTeW1ib2xzOiB7IG5hbWU6IHN0cmluZywgc3ltYm9sOiBCcmVlemVFbnVtIH1bXTtcclxuXHJcbiAgLyoqICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXNPYmo/OiBPYmplY3QpIHtcclxuICAgIGlmIChwcm9wZXJ0aWVzT2JqKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXNPYmopLmZvckVhY2goKGtleSkgPT4gdGhpc1trZXldID0gcHJvcGVydGllc09ialtrZXldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYWxsIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gID4gICAgIGxldCBzeW1ib2xzID0gRGF5T2ZXZWVrLmdldFN5bWJvbHMoKTtcclxuICBAcmV0dXJuIEFsbCBvZiB0aGUgc3ltYm9scyBjb250YWluZWQgd2l0aGluIHRoaXMgRW51bS5cclxuICAqKi9cclxuICBzdGF0aWMgZ2V0U3ltYm9scygpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTeW1ib2xzKCkubWFwKGtzID0+IGtzLnN5bWJvbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgb2YgdGhlIHN5bWJvbHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIEVudW0uXHJcbiAgPiAgICAgbGV0IHN5bWJvbHMgPSBEYXlPZldlZWsuZ2V0TmFtZXMoKTtcclxuICBAcmV0dXJuICBBbGwgb2YgdGhlIG5hbWVzIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBnZXROYW1lcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTeW1ib2xzKCkubWFwKGtzID0+IGtzLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhbiBFbnVtIHN5bWJvbCBnaXZlbiBpdHMgbmFtZS5cclxuICA+ICAgICBsZXQgZGF5T2ZXZWVrID0gRGF5T2ZXZWVrLmZyb20oXCJUaHVyc2RheVwiKTtcclxuICA+ICAgICAvLyBub3dkYXlPZldlZWsgPT09IERheU9mV2Vlay5UaHVyc2RheVxyXG4gIEBwYXJhbSBuYW1lIC0gTmFtZSBmb3Igd2hpY2ggYW4gZW51bSBzeW1ib2wgc2hvdWxkIGJlIHJldHVybmVkLlxyXG4gIEByZXR1cm4gVGhlIHN5bWJvbCB0aGF0IG1hdGNoZXMgdGhlIG5hbWUgb3IgJ3VuZGVmaW5lZCcgaWYgbm90IGZvdW5kLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBmcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzW25hbWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgU2VhbHMgdGhpcyBlbnVtIHNvIHRoYXQgbm8gbW9yZSBzeW1ib2xzIG1heSBiZSBhZGRlZCB0byBpdC4gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHN5bWJvbHNcclxuICBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgRW51bS4gVGhpcyBtZXRob2QgYWxzbyBzZXRzIHRoZSAnbmFtZScgcHJvcGVydHkgb24gZWFjaCBvZiB0aGUgc3ltYm9scy5cclxuICA+ICAgICBEYXlPZldlZWsucmVzb2x2ZVN5bWJvbHMoKTtcclxuICAqKi9cclxuICBzdGF0aWMgcmVzb2x2ZVN5bWJvbHMoKSB7XHJcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWROYW1lc0FuZFN5bWJvbHMpIHJldHVybiB0aGlzLl9yZXNvbHZlZE5hbWVzQW5kU3ltYm9scztcclxuICAgIGxldCByZXN1bHQ6IHtuYW1lOiBzdHJpbmcsIHN5bWJvbDogQnJlZXplRW51bSB9W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcykge1xyXG4gICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgbGV0IHN5bWIgPSB0aGlzW2tleV07XHJcbiAgICAgICAgaWYgKHN5bWIgaW5zdGFuY2VvZiBCcmVlemVFbnVtKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaCggeyBuYW1lOiBrZXksIHN5bWJvbDogc3ltYiB9KTtcclxuICAgICAgICAgIHRoaXNba2V5XSA9IHN5bWI7XHJcbiAgICAgICAgICBzeW1iLm5hbWUgPSBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXNvbHZlZE5hbWVzQW5kU3ltYm9scyA9IHJlc3VsdDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gRW51bSBjb250YWlucyBhIHNwZWNpZmllZCBzeW1ib2wuXHJcbiAgPiAgICAgbGV0IHN5bWJvbCA9IERheU9mV2Vlay5GcmlkYXk7XHJcbiAgPiAgICAgaWYgKERheU9mV2Vlay5jb250YWlucyhzeW1ib2wpKSB7XHJcbiAgPiAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gID4gICAgIH1cclxuICBAcGFyYW0gc3ltIC0gT2JqZWN0IG9yIHN5bWJvbCB0byB0ZXN0LlxyXG4gIEByZXR1cm4gV2hldGhlciB0aGlzIEVudW0gY29udGFpbnMgdGhlIHNwZWNpZmllZCBzeW1ib2wuXHJcbiAgKiovXHJcbiAgc3RhdGljIGNvbnRhaW5zKHN5bTogQnJlZXplRW51bSkge1xyXG4gICAgaWYgKCEoc3ltIGluc3RhbmNlb2YgQnJlZXplRW51bSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzW3N5bS5uYW1lXSAhPSBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIC8qKlxyXG4gIC8vIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gRW51bSAnc3ltYm9sJy4gVXNlIHRoZSAnY29udGFpbnMnIG1ldGhvZCBpbnN0ZWFkIG9mIHRoaXMgb25lIFxyXG4gIC8vIGlmIHlvdSB3YW50IHRvIHRlc3QgZm9yIGEgc3BlY2lmaWMgRW51bS4gXHJcbiAgLy8gPiAgICAgaWYgKEVudW0uaXNTeW1ib2woRGF5T2ZXZWVrLldlZG5lc2RheSkpIHtcclxuICAvLyA+ICAgICAgIC8vIGRvIHNvbWV0aGluZyAuLi5cclxuICAvLyA+ICAgICB9O1xyXG4gIC8vICoqL1xyXG4gIC8vIHN0YXRpYyBpc1N5bWJvbChvYmo6IGFueSkge1xyXG4gIC8vICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEJyZWV6ZUVudW07XHJcbiAgLy8gfTtcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyBuYW1lIG9mIHRoaXMgRW51bSAqL1xyXG4gIHRvU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gZW51bSBuYW1lIGFuZCBzeW1ib2wgbmFtZSAqL1xyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIF8kdHlwZU5hbWU6IHRoaXNbJ18kdHlwZU5hbWUnXSB8fCAodGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkpLm5hbWUsXHJcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIl19
@@ -64,4 +64,4 @@ var LocalQueryComparisonOptions = /** @class */ (function () {
64
64
  }());
65
65
  export { LocalQueryComparisonOptions };
66
66
  LocalQueryComparisonOptions.prototype._$typeName = "LocalQueryComparisonOptions";
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9sb2NhbC1xdWVyeS1jb21wYXJpc29uLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWVsQzs7Ozs7OztHQU9HO0FBQ0g7SUFZRTs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILHFDQUFZLFVBQTZDO1FBQ3ZELFlBQVksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUU7YUFDMUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFO2FBQ3RELFVBQVUsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLFNBQVMsRUFBRTthQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjtRQUNELE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBZ0JEOzs7Ozs7OztPQVFHO0lBQ0gsa0RBQVksR0FBWjtRQUNFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBekJEOztPQUVHO0lBQ0ksOENBQWtCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQztRQUMxRCxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLGVBQWUsRUFBRSxLQUFLO1FBQ3RCLGtDQUFrQyxFQUFFLElBQUk7S0FDekMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSSwyQ0FBZSxHQUFHLElBQUksMkJBQTJCLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQWUzRyxrQ0FBQztDQUFBLEFBbEVELElBa0VDO1NBbEVZLDJCQUEyQjtBQW1FeEMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0Q29uZmlnIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuXG5cbi8qKiBDb25maWd1cmF0aW9uIGluZm8gdG8gYmUgcGFzc2VkIHRvIHRoZSBbW0xvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uc11dIGNvbnN0cnVjdG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnNDb25maWcge1xuICAvKiogVGhlIG5hbWUgb2YgdGhpcyBjb2xsZWN0aW9uIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHByZWRpY2F0ZXMgdGhhdCBpbnZvbHZlIHN0cmluZ3Mgd2lsbCBiZSBpbnRlcnByZXRlZCBpbiBhIFwiY2FzZVNlbnNpdGl2ZVwiIG1hbm5lci4gRGVmYXVsdCBpcyAnZmFsc2UnLiAqL1xuICBpc0Nhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuICAvKiBXaGV0aGVyIG9yIG5vdCB0byBlbmZvcmNlIHRoZSBBTlNJIFNRTCBzdGFuZGFyZFxuICBvZiBwYWRkaW5nIHN0cmluZ3Mgb2YgdW5lcXVhbCBsZW5ndGhzIGJlZm9yZSBjb21wYXJpc29uIHdpdGggc3BhY2VzLiBOb3RlIHRoYXQgcGVyIHRoZSBzdGFuZGFyZCwgcGFkZGluZyBvbmx5IG9jY3VycyB3aXRoIGVxdWFsaXR5IGFuZFxuICBpbmVxdWFsaXR5IHByZWRpY2F0ZXMsIGFuZCBub3Qgd2l0aCBvcGVyYXRpb25zIGxpa2UgJ3N0YXJ0c1dpdGgnLCAnZW5kc1dpdGgnIG9yICdjb250YWlucycuICBEZWZhdWx0IGlzIHRydWUuICovXG4gIHVzZXNTcWw5MkNvbXBsaWFudFN0cmluZ0NvbXBhcmlzb24/OiBib29sZWFuO1xufVxuXG4vKipcbkEgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zIGluc3RhbmNlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgXCJjb21wYXJpc29uIHJ1bGVzXCIgdXNlZCB3aGVuIHBlcmZvcm1pbmcgXCJsb2NhbCBxdWVyaWVzXCIgaW4gb3JkZXJcbnRvIG1hdGNoIHRoZSBzZW1hbnRpY3Mgb2YgdGhlc2Ugc2FtZSBxdWVyaWVzIHdoZW4gZXhlY3V0ZWQgYWdhaW5zdCBhIHJlbW90ZSBzZXJ2aWNlLiAgVGhlc2Ugb3B0aW9ucyBzaG91bGQgYmUgc2V0IGJhc2VkIG9uIHRoZVxubWFubmVyIGluIHdoaWNoIHlvdXIgcmVtb3RlIHNlcnZpY2UgaW50ZXJwcmV0cyBjZXJ0YWluIGNvbXBhcmlzb24gb3BlcmF0aW9ucy5cblxuVGhlIGRlZmF1bHQgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zIHN0aXB1bGF0ZXMgJ2Nhc2VJbnNlbnNpdGl2ZVwiIHF1ZXJpZXMgd2l0aCBBTlNJIFNRTCBydWxlcyByZWdhcmRpbmcgY29tcGFyaXNvbnMgb2YgdW5lcXVhbFxubGVuZ3RoIHN0cmluZ3MuXG4qKi9cbmV4cG9ydCBjbGFzcyBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMge1xuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBvbiBwcm90b3R5cGVcbiAgLyoqIFRoZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHByZWRpY2F0ZXMgdGhhdCBpbnZvbHZlIHN0cmluZ3Mgd2lsbCBiZSBpbnRlcnByZXRlZCBpbiBhIFwiY2FzZVNlbnNpdGl2ZVwiIG1hbm5lci4gKGRlZmF1bHQgPSBmYWxzZSkuICAqL1xuICBpc0Nhc2VTZW5zaXRpdmU6IGJvb2xlYW47XG4gIC8qIFdoZXRoZXIgb3Igbm90IHRvIGVuZm9yY2UgdGhlIEFOU0kgU1FMIHN0YW5kYXJkXG4gIG9mIHBhZGRpbmcgc3RyaW5ncyBvZiB1bmVxdWFsIGxlbmd0aHMgYmVmb3JlIGNvbXBhcmlzb24gd2l0aCBzcGFjZXMuIE5vdGUgdGhhdCBwZXIgdGhlIHN0YW5kYXJkLCBwYWRkaW5nIG9ubHkgb2NjdXJzIHdpdGggZXF1YWxpdHkgYW5kXG4gIGluZXF1YWxpdHkgcHJlZGljYXRlcywgYW5kIG5vdCB3aXRoIG9wZXJhdGlvbnMgbGlrZSAnc3RhcnRzV2l0aCcsICdlbmRzV2l0aCcgb3IgJ2NvbnRhaW5zJy4gIERlZmF1bHQgaXMgdHJ1ZS4gKi9cbiAgdXNlc1NxbDkyQ29tcGxpYW50U3RyaW5nQ29tcGFyaXNvbjogYm9vbGVhbjtcblxuICAvKipcbiAgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zIGNvbnN0cnVjdG9yXG4gID4gICAgICAvLyBjcmVhdGUgYSAnY2FzZVNlbnNpdGl2ZSAtIG5vbiBTUUwnIGluc3RhbmNlLlxuICA+ICAgICAgdmFyIGxxY28gPSBuZXcgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zKHtcbiAgPiAgICAgICAgICAgICAgbmFtZTogXCJjYXNlU2Vuc2l0aXZlLW5vblNRTFwiXG4gID4gICAgICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogdHJ1ZTtcbiAgPiAgICAgICAgICAgICAgdXNlc1NxbDkyQ29tcGxpYW50U3RyaW5nQ29tcGFyaXNvbjogZmFsc2U7XG4gID4gICAgICAgICAgfSk7XG4gID4gICAgICAvLyBlaXRoZXIgYXBwbHkgaXQgZ2xvYmFsbHlcbiAgPiAgICAgIGxxY28uc2V0QXNEZWZhdWx0KCk7XG4gID4gICAgICAvLyBvciB0byBhIHNwZWNpZmljIE1ldGFkYXRhU3RvcmVcbiAgPiAgICAgIHZhciBtcyA9IG5ldyBNZXRhZGF0YVN0b3JlKHsgbG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zOiBscWNvIH0pO1xuICA+ICAgICAgdmFyIGVtID0gbmV3IEVudGl0eU1hbmFnZXIoIHsgbWV0YWRhdGFTdG9yZTogbXMgfSk7XG4gIEBwYXJhbSBjb25maWcgLSBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAqKi9cbiAgY29uc3RydWN0b3IobHFjb0NvbmZpZzogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zQ29uZmlnKSB7XG4gICAgYXNzZXJ0Q29uZmlnKGxxY29Db25maWcgfHwge30pXG4gICAgICAgIC53aGVyZVBhcmFtKFwibmFtZVwiKS5pc09wdGlvbmFsKCkuaXNTdHJpbmcoKVxuICAgICAgICAud2hlcmVQYXJhbShcImlzQ2FzZVNlbnNpdGl2ZVwiKS5pc09wdGlvbmFsKCkuaXNCb29sZWFuKClcbiAgICAgICAgLndoZXJlUGFyYW0oXCJ1c2VzU3FsOTJDb21wbGlhbnRTdHJpbmdDb21wYXJpc29uXCIpLmlzQm9vbGVhbigpXG4gICAgICAgIC5hcHBseUFsbCh0aGlzKTtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5uYW1lID0gY29yZS5nZXRVdWlkKCk7XG4gICAgfVxuICAgIGNvbmZpZy5fc3RvcmVPYmplY3QodGhpcywgXCJMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnNcIiwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICBDYXNlIGluc2Vuc2l0aXZlIFNRTCBjb21wbGlhbnQgb3B0aW9ucyAtIHRoaXMgaXMgYWxzbyB0aGUgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlIGNoYW5nZWQuXG4gICoqL1xuICBzdGF0aWMgY2FzZUluc2Vuc2l0aXZlU1FMID0gbmV3IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyh7XG4gICAgbmFtZTogXCJjYXNlSW5zZW5zaXRpdmVTUUxcIixcbiAgICBpc0Nhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICAgIHVzZXNTcWw5MkNvbXBsaWFudFN0cmluZ0NvbXBhcmlzb246IHRydWVcbiAgfSk7XG5cbiAgLyoqXG4gIFRoZSBkZWZhdWx0IHZhbHVlIHdoZW5ldmVyIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyBhcmUgbm90IHNwZWNpZmllZC4gQnkgZGVmYXVsdCB0aGlzIGlzICdjYXNlSW5zZW5zaXRpdmVTUUwnLlxuICAqKi9cbiAgc3RhdGljIGRlZmF1bHRJbnN0YW5jZSA9IG5ldyBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMoTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLmNhc2VJbnNlbnNpdGl2ZVNRTCk7XG5cbiAgLyoqXG4gIFNldHMgdGhlICdkZWZhdWx0SW5zdGFuY2UnIGJ5IGNyZWF0aW5nIGEgY29weSBvZiB0aGUgY3VycmVudCAnZGVmYXVsdEluc3RhbmNlJyBhbmQgdGhlbiBhcHBseWluZyBhbGwgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UuXG4gIFRoZSBjdXJyZW50IGluc3RhbmNlIGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAgPiAgICAgdmFyIGxxY28gPSBuZXcgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zKHtcbiAgPiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBmYWxzZTtcbiAgPiAgICAgICAgdXNlc1NxbDkyQ29tcGxpYW50U3RyaW5nQ29tcGFyaXNvbjogdHJ1ZTtcbiAgPiAgICAgfSk7XG4gID4gICAgIGxxY28uc2V0QXNEZWZhdWx0KCk7XG4gICoqL1xuICBzZXRBc0RlZmF1bHQoKSB7XG4gICAgcmV0dXJuIGNvcmUuc2V0QXNEZWZhdWx0KHRoaXMsIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyk7XG4gIH1cblxufVxuTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnNcIjtcbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9sb2NhbC1xdWVyeS1jb21wYXJpc29uLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWVsQzs7Ozs7OztHQU9HO0FBQ0g7SUFZRTs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILHFDQUFZLFVBQTZDO1FBQ3ZELFlBQVksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUU7YUFDMUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFO2FBQ3RELFVBQVUsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLFNBQVMsRUFBRTthQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjtRQUNELE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBZ0JEOzs7Ozs7OztPQVFHO0lBQ0gsa0RBQVksR0FBWjtRQUNFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBekJEOztPQUVHO0lBQ0ksOENBQWtCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQztRQUMxRCxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLGVBQWUsRUFBRSxLQUFLO1FBQ3RCLGtDQUFrQyxFQUFFLElBQUk7S0FDekMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSSwyQ0FBZSxHQUFHLElBQUksMkJBQTJCLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQWUzRyxrQ0FBQztDQUFBLEFBbEVELElBa0VDO1NBbEVZLDJCQUEyQjtBQW1FeEMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBhc3NlcnRDb25maWcgfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcclxuXHJcblxyXG4vKiogQ29uZmlndXJhdGlvbiBpbmZvIHRvIGJlIHBhc3NlZCB0byB0aGUgW1tMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnNdXSBjb25zdHJ1Y3Rvci4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnNDb25maWcge1xyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIGNvbGxlY3Rpb24gb2YgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gKi9cclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHByZWRpY2F0ZXMgdGhhdCBpbnZvbHZlIHN0cmluZ3Mgd2lsbCBiZSBpbnRlcnByZXRlZCBpbiBhIFwiY2FzZVNlbnNpdGl2ZVwiIG1hbm5lci4gRGVmYXVsdCBpcyAnZmFsc2UnLiAqL1xyXG4gIGlzQ2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XHJcbiAgLyogV2hldGhlciBvciBub3QgdG8gZW5mb3JjZSB0aGUgQU5TSSBTUUwgc3RhbmRhcmRcclxuICBvZiBwYWRkaW5nIHN0cmluZ3Mgb2YgdW5lcXVhbCBsZW5ndGhzIGJlZm9yZSBjb21wYXJpc29uIHdpdGggc3BhY2VzLiBOb3RlIHRoYXQgcGVyIHRoZSBzdGFuZGFyZCwgcGFkZGluZyBvbmx5IG9jY3VycyB3aXRoIGVxdWFsaXR5IGFuZFxyXG4gIGluZXF1YWxpdHkgcHJlZGljYXRlcywgYW5kIG5vdCB3aXRoIG9wZXJhdGlvbnMgbGlrZSAnc3RhcnRzV2l0aCcsICdlbmRzV2l0aCcgb3IgJ2NvbnRhaW5zJy4gIERlZmF1bHQgaXMgdHJ1ZS4gKi9cclxuICB1c2VzU3FsOTJDb21wbGlhbnRTdHJpbmdDb21wYXJpc29uPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbkEgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zIGluc3RhbmNlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgXCJjb21wYXJpc29uIHJ1bGVzXCIgdXNlZCB3aGVuIHBlcmZvcm1pbmcgXCJsb2NhbCBxdWVyaWVzXCIgaW4gb3JkZXJcclxudG8gbWF0Y2ggdGhlIHNlbWFudGljcyBvZiB0aGVzZSBzYW1lIHF1ZXJpZXMgd2hlbiBleGVjdXRlZCBhZ2FpbnN0IGEgcmVtb3RlIHNlcnZpY2UuICBUaGVzZSBvcHRpb25zIHNob3VsZCBiZSBzZXQgYmFzZWQgb24gdGhlXHJcbm1hbm5lciBpbiB3aGljaCB5b3VyIHJlbW90ZSBzZXJ2aWNlIGludGVycHJldHMgY2VydGFpbiBjb21wYXJpc29uIG9wZXJhdGlvbnMuXHJcblxyXG5UaGUgZGVmYXVsdCBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMgc3RpcHVsYXRlcyAnY2FzZUluc2Vuc2l0aXZlXCIgcXVlcmllcyB3aXRoIEFOU0kgU1FMIHJ1bGVzIHJlZ2FyZGluZyBjb21wYXJpc29ucyBvZiB1bmVxdWFsXHJcbmxlbmd0aCBzdHJpbmdzLlxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBvbiBwcm90b3R5cGVcclxuICAvKiogVGhlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2UuICovXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHByZWRpY2F0ZXMgdGhhdCBpbnZvbHZlIHN0cmluZ3Mgd2lsbCBiZSBpbnRlcnByZXRlZCBpbiBhIFwiY2FzZVNlbnNpdGl2ZVwiIG1hbm5lci4gKGRlZmF1bHQgPSBmYWxzZSkuICAqL1xyXG4gIGlzQ2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcclxuICAvKiBXaGV0aGVyIG9yIG5vdCB0byBlbmZvcmNlIHRoZSBBTlNJIFNRTCBzdGFuZGFyZFxyXG4gIG9mIHBhZGRpbmcgc3RyaW5ncyBvZiB1bmVxdWFsIGxlbmd0aHMgYmVmb3JlIGNvbXBhcmlzb24gd2l0aCBzcGFjZXMuIE5vdGUgdGhhdCBwZXIgdGhlIHN0YW5kYXJkLCBwYWRkaW5nIG9ubHkgb2NjdXJzIHdpdGggZXF1YWxpdHkgYW5kXHJcbiAgaW5lcXVhbGl0eSBwcmVkaWNhdGVzLCBhbmQgbm90IHdpdGggb3BlcmF0aW9ucyBsaWtlICdzdGFydHNXaXRoJywgJ2VuZHNXaXRoJyBvciAnY29udGFpbnMnLiAgRGVmYXVsdCBpcyB0cnVlLiAqL1xyXG4gIHVzZXNTcWw5MkNvbXBsaWFudFN0cmluZ0NvbXBhcmlzb246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyBjb25zdHJ1Y3RvclxyXG4gID4gICAgICAvLyBjcmVhdGUgYSAnY2FzZVNlbnNpdGl2ZSAtIG5vbiBTUUwnIGluc3RhbmNlLlxyXG4gID4gICAgICB2YXIgbHFjbyA9IG5ldyBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMoe1xyXG4gID4gICAgICAgICAgICAgIG5hbWU6IFwiY2FzZVNlbnNpdGl2ZS1ub25TUUxcIlxyXG4gID4gICAgICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogdHJ1ZTtcclxuICA+ICAgICAgICAgICAgICB1c2VzU3FsOTJDb21wbGlhbnRTdHJpbmdDb21wYXJpc29uOiBmYWxzZTtcclxuICA+ICAgICAgICAgIH0pO1xyXG4gID4gICAgICAvLyBlaXRoZXIgYXBwbHkgaXQgZ2xvYmFsbHlcclxuICA+ICAgICAgbHFjby5zZXRBc0RlZmF1bHQoKTtcclxuICA+ICAgICAgLy8gb3IgdG8gYSBzcGVjaWZpYyBNZXRhZGF0YVN0b3JlXHJcbiAgPiAgICAgIHZhciBtcyA9IG5ldyBNZXRhZGF0YVN0b3JlKHsgbG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zOiBscWNvIH0pO1xyXG4gID4gICAgICB2YXIgZW0gPSBuZXcgRW50aXR5TWFuYWdlciggeyBtZXRhZGF0YVN0b3JlOiBtcyB9KTtcclxuICBAcGFyYW0gY29uZmlnIC0gQSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAqKi9cclxuICBjb25zdHJ1Y3RvcihscWNvQ29uZmlnOiBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnNDb25maWcpIHtcclxuICAgIGFzc2VydENvbmZpZyhscWNvQ29uZmlnIHx8IHt9KVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwibmFtZVwiKS5pc09wdGlvbmFsKCkuaXNTdHJpbmcoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiaXNDYXNlU2Vuc2l0aXZlXCIpLmlzT3B0aW9uYWwoKS5pc0Jvb2xlYW4oKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidXNlc1NxbDkyQ29tcGxpYW50U3RyaW5nQ29tcGFyaXNvblwiKS5pc0Jvb2xlYW4oKVxyXG4gICAgICAgIC5hcHBseUFsbCh0aGlzKTtcclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IGNvcmUuZ2V0VXVpZCgpO1xyXG4gICAgfVxyXG4gICAgY29uZmlnLl9zdG9yZU9iamVjdCh0aGlzLCBcIkxvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uc1wiLCB0aGlzLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgQ2FzZSBpbnNlbnNpdGl2ZSBTUUwgY29tcGxpYW50IG9wdGlvbnMgLSB0aGlzIGlzIGFsc28gdGhlIGRlZmF1bHQgdW5sZXNzIG90aGVyd2lzZSBjaGFuZ2VkLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBjYXNlSW5zZW5zaXRpdmVTUUwgPSBuZXcgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zKHtcclxuICAgIG5hbWU6IFwiY2FzZUluc2Vuc2l0aXZlU1FMXCIsXHJcbiAgICBpc0Nhc2VTZW5zaXRpdmU6IGZhbHNlLFxyXG4gICAgdXNlc1NxbDkyQ29tcGxpYW50U3RyaW5nQ29tcGFyaXNvbjogdHJ1ZVxyXG4gIH0pO1xyXG5cclxuICAvKipcclxuICBUaGUgZGVmYXVsdCB2YWx1ZSB3aGVuZXZlciBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMgYXJlIG5vdCBzcGVjaWZpZWQuIEJ5IGRlZmF1bHQgdGhpcyBpcyAnY2FzZUluc2Vuc2l0aXZlU1FMJy5cclxuICAqKi9cclxuICBzdGF0aWMgZGVmYXVsdEluc3RhbmNlID0gbmV3IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyhMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlU1FMKTtcclxuXHJcbiAgLyoqXHJcbiAgU2V0cyB0aGUgJ2RlZmF1bHRJbnN0YW5jZScgYnkgY3JlYXRpbmcgYSBjb3B5IG9mIHRoZSBjdXJyZW50ICdkZWZhdWx0SW5zdGFuY2UnIGFuZCB0aGVuIGFwcGx5aW5nIGFsbCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBpbnN0YW5jZS5cclxuICBUaGUgY3VycmVudCBpbnN0YW5jZSBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXHJcbiAgPiAgICAgdmFyIGxxY28gPSBuZXcgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zKHtcclxuICA+ICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGZhbHNlO1xyXG4gID4gICAgICAgIHVzZXNTcWw5MkNvbXBsaWFudFN0cmluZ0NvbXBhcmlzb246IHRydWU7XHJcbiAgPiAgICAgfSk7XHJcbiAgPiAgICAgbHFjby5zZXRBc0RlZmF1bHQoKTtcclxuICAqKi9cclxuICBzZXRBc0RlZmF1bHQoKSB7XHJcbiAgICByZXR1cm4gY29yZS5zZXRBc0RlZmF1bHQodGhpcywgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zKTtcclxuICB9XHJcblxyXG59XHJcbkxvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucy5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zXCI7XHJcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2012-2021 IdeaBlade, Inc. All Rights Reserved.
2
+ * Copyright 2012-2023 IdeaBlade, Inc. All Rights Reserved.
3
3
  * Use, reproduction, distribution, and modification of this code is subject to the terms and
4
4
  * conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license
5
5
  *
@@ -588,6 +588,9 @@ function requireLibCore(libName) {
588
588
  }
589
589
  /** Execute fn while obj has tempValue for property */
590
590
  function using(obj, property, tempValue, fn) {
591
+ if (!obj) {
592
+ return fn();
593
+ }
591
594
  let originalValue = obj[property];
592
595
  if (tempValue === originalValue) {
593
596
  return fn();
@@ -6756,7 +6759,7 @@ The default value whenever NamingConventions are not specified.
6756
6759
  NamingConvention.defaultInstance = new NamingConvention(NamingConvention.none);
6757
6760
  NamingConvention.prototype._$typeName = "NamingConvention";
6758
6761
 
6759
- const RX_COLLECTION = /Collection\((?<type>.*)\)/;
6762
+ const RX_COLLECTION = /Collection\((.*)\)/;
6760
6763
  function parse(metadataStore, schemas, altMetadata) {
6761
6764
  metadataStore._entityTypeResourceMap = {};
6762
6765
  schemas = core.toArray(schemas);
@@ -7114,7 +7117,7 @@ function parseTypeNameWithSchema(entityTypeName, schema) {
7114
7117
  }
7115
7118
  function getCollectionType(propertyType) {
7116
7119
  const match = propertyType.match(RX_COLLECTION);
7117
- return match ? match["groups"].type : null;
7120
+ return match ? match[1] : null;
7118
7121
  }
7119
7122
  function getNamespaceFor(shortName, schema) {
7120
7123
  let ns;
@@ -7218,7 +7221,8 @@ function defaultPropertyInterceptor(property, newValue, rawAccessorFn) {
7218
7221
  }
7219
7222
  }
7220
7223
  // exit if no change - extra cruft is because dateTimes don't compare cleanly.
7221
- if (newValue === oldValue || (dataType && dataType.normalize && newValue && oldValue && dataType.normalize(newValue) === dataType.normalize(oldValue))) {
7224
+ if (newValue === oldValue || (newValue === null && oldValue === undefined) ||
7225
+ (dataType && dataType.normalize && newValue && oldValue && dataType.normalize(newValue) === dataType.normalize(oldValue))) {
7222
7226
  return;
7223
7227
  }
7224
7228
  // CANNOT DO NEXT LINE because it has the possibility of creating a new property
@@ -13588,7 +13592,7 @@ const breeze = {
13588
13592
  ValidationError: ValidationError,
13589
13593
  ValidationOptions: ValidationOptions,
13590
13594
  Validator: Validator,
13591
- version: "2.1.2"
13595
+ version: "2.1.3"
13592
13596
  };
13593
13597
  /** @hidden @internal */
13594
13598
  let win;