breeze-client 2.1.4 → 2.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/breeze-client.metadata.json +1 -1
- package/bundles/breeze-client.umd.js +2 -2
- package/bundles/breeze-client.umd.js.map +1 -1
- package/bundles/breeze-client.umd.min.js +1 -1
- package/bundles/breeze-client.umd.min.js.map +1 -1
- package/esm2015/src/breeze.js +2 -2
- package/esm2015/src/default-property-interceptor.js +2 -2
- package/esm2015/src/entity-aspect.js +1 -1
- package/esm5/src/breeze.js +2 -2
- package/esm5/src/default-property-interceptor.js +2 -2
- package/esm5/src/entity-aspect.js +1 -1
- package/fesm2015/breeze-client.js +2 -2
- package/fesm2015/breeze-client.js.map +1 -1
- package/fesm5/breeze-client.js +2 -2
- package/fesm5/breeze-client.js.map +1 -1
- package/package.json +1 -1
- package/src/entity-aspect.d.ts +2 -2
|
@@ -803,4 +803,4 @@ function clearOriginalValues(target) {
|
|
|
803
803
|
}
|
|
804
804
|
});
|
|
805
805
|
}
|
|
806
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFzcGVjdC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWFzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFpRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBeUM3Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFzRnZCLHdCQUF3QjtJQUN4QixZQUFZLE1BQWU7UUFFekIsd0JBQXdCO1FBQ3hCLHlDQUF5QztRQUN6QyxxQ0FBcUM7UUFDckMsSUFBSTtRQXVLTjs7Ozs7O1dBTUc7UUFDSCxpQkFBWSxHQUFHO1lBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUM7UUFHRjs7Ozs7O1dBTUc7UUFDSCxnQkFBVyxHQUFHO1lBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7UUFFRjs7Ozs7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ZyB9IGZyb20gJy4vY29uZmlnJztcclxuaW1wb3J0IHsgQnJlZXplRXZlbnQgfSBmcm9tICcuL2V2ZW50JztcclxuaW1wb3J0IHsgYXNzZXJ0UGFyYW0gfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlICB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5VHlwZSwgQ29tcGxleFR5cGUsIERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5R3JvdXAgfSBmcm9tICcuL2VudGl0eS1ncm91cCc7XHJcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIFF1ZXJ5UmVzdWx0LCBRdWVyeUVycm9yQ2FsbGJhY2ssIFF1ZXJ5U3VjY2Vzc0NhbGxiYWNrIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi92YWxpZGF0ZSc7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5IH0gZnJvbSAnLi9lbnRpdHktcXVlcnknO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHkge1xyXG4gIGVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0O1xyXG4gIGVudGl0eVR5cGU6IEVudGl0eVR5cGU7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIGdldFByb3BlcnR5Pyhwcm9wOiBzdHJpbmcpOiBhbnk7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHNldFByb3BlcnR5Pyhwcm9wOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RvdHlwZT86IHsgXyR0eXBlTmFtZTogc3RyaW5nIH07XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyRlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV4T2JqZWN0IHtcclxuICBjb21wbGV4QXNwZWN0OiBDb21wbGV4QXNwZWN0O1xyXG4gIGNvbXBsZXhUeXBlOiBDb21wbGV4VHlwZTtcclxuICBnZXRQcm9wZXJ0eShwcm9wOiBzdHJpbmcpOiBhbnk7XHJcbiAgc2V0UHJvcGVydHkocHJvcDogYW55LCB2YWx1ZTogYW55KTogdm9pZDtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBwcm90b3R5cGU/OiB7IF8kdHlwZU5hbWU6IHN0cmluZyB9O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTdHJ1Y3R1cmFsT2JqZWN0ID0gRW50aXR5IHwgQ29tcGxleE9iamVjdDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIHtcclxuICBlbnRpdHk6IEVudGl0eTtcclxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IG51bGw7XHJcbiAgcGFyZW50PzogU3RydWN0dXJhbE9iamVjdDtcclxuICBwcm9wZXJ0eT86IEVudGl0eVByb3BlcnR5O1xyXG4gIG9sZFZhbHVlPzogYW55O1xyXG4gIG5ld1ZhbHVlPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzIHtcclxuICBlbnRpdHk6IEVudGl0eTtcclxuICBhZGRlZDogVmFsaWRhdGlvbkVycm9yW107XHJcbiAgcmVtb3ZlZDogVmFsaWRhdGlvbkVycm9yW107XHJcbn1cclxuXHJcbi8qKlxyXG5BbiBFbnRpdHlBc3BlY3QgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IGF0dGFjaGVkIGVudGl0eSBhbmQgaXMgYWNjZXNzZWQgdmlhIHRoZSBlbnRpdHkncyAnZW50aXR5QXNwZWN0JyBwcm9wZXJ0eS5cclxuXHJcblRoZSBFbnRpdHlBc3BlY3QgaXRzZWxmIHByb3ZpZGVzIHByb3BlcnRpZXMgdG8gZGV0ZXJtaW5lIGFuZCBtb2RpZnkgdGhlIEVudGl0eVN0YXRlIG9mIHRoZSBlbnRpdHkgYW5kIGhhcyBtZXRob2RzXHJcbnRoYXQgcHJvdmlkZSBhIHZhcmlldHkgb2Ygc2VydmljZXMgaW5jbHVkaW5nIHZhbGlkYXRpb24gYW5kIGNoYW5nZSB0cmFja2luZy5cclxuXHJcbkFuIEVudGl0eUFzcGVjdCB3aWxsIGFsbW9zdCBuZXZlciBuZWVkIHRvIGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LiBZb3Ugd2lsbCB1c3VhbGx5IGdldCBhbiBFbnRpdHlBc3BlY3QgYnkgYWNjZXNzaW5nXHJcbmFuIGVudGl0aWVzICdlbnRpdHlBc3BlY3QnIHByb3BlcnR5LiAgVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXR0YWNoZWQgd2hlbiBhbiBlbnRpdHkgaXMgY3JlYXRlZCB2aWEgZWl0aGVyXHJcbmEgcXVlcnksIGltcG9ydCBvciBbW0VudGl0eU1hbmFnZXIuY3JlYXRlRW50aXR5XV0gY2FsbC5cclxuPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuPiAgICAgIHZhciBhc3BlY3QgPSBvcmRlci5lbnRpdHlBc3BlY3Q7XHJcbj4gICAgICB2YXIgY3VycmVudFN0YXRlID0gYXNwZWN0LmVudGl0eVN0YXRlO1xyXG5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlBc3BlY3Qge1xyXG4gIC8qKiBUaGUgRW50aXR5IHRoYXQgdGhpcyBhc3BlY3QgaXMgYXNzb2NpYXRlZCB3aXRoLiBfX1JlYWQgT25seV9fICAqKi9cclxuICBlbnRpdHk/OiBFbnRpdHk7XHJcbiAgLyoqIFRoZSBbW0VudGl0eU1hbmFnZXJdXSB0aGF0IGNvbnRhaW5zIHRoaXMgZW50aXR5LiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGVudGl0eU1hbmFnZXI/OiBFbnRpdHlNYW5hZ2VyO1xyXG4gIC8qKiAgQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBlbnRpdHlHcm91cD86IEVudGl0eUdyb3VwO1xyXG4gIC8qKiBUaGUgW1tFbnRpdHlTdGF0ZV1dIG9mIHRoaXMgZW50aXR5LiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZTtcclxuICAvKiogICBXaGV0aGVyIHRoaXMgZW50aXR5IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHNhdmVkLiBfX1JlYWQgT25seV9fICovXHJcbiAgaXNCZWluZ1NhdmVkOiBib29sZWFuO1xyXG4gIC8qKiBUaGUgJ29yaWdpbmFsIHZhbHVlcycgb2YgdGhpcyBlbnRpdHkgd2hlcmUgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gdGhlICdjdXJyZW50IHZhbHVlcycuXHJcbiAgVGhpcyBpcyBhIG1hcCB3aGVyZSB0aGUga2V5IGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgdGhlIHZhbHVlIGlzIHRoZSAnb3JpZ2luYWwgdmFsdWUnIG9mIHRoZSBwcm9wZXJ0eS4gKi9cclxuICBvcmlnaW5hbFZhbHVlczoge307XHJcbiAgLyoqICBXaGV0aGVyIHRoaXMgZW50aXR5IGhhcyBhbnkgdmFsaWRhdGlvbiBlcnJvcnMuIF9fUmVhZCBPbmx5X18gKi9cclxuICBoYXNWYWxpZGF0aW9uRXJyb3JzOiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgZW50aXR5IGhhcyBhIHRlbXBvcmFyeSBbW0VudGl0eUtleV1dLiAqL1xyXG4gIGhhc1RlbXBLZXk6IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdGhpcyBlbnRpdHkgd2FzIGNyZWF0ZWQgYnkgYmVpbmcgbG9hZGVkIGZyb20gdGhlIGRhdGFiYXNlICovXHJcbiAgd2FzTG9hZGVkPzogYm9vbGVhbjtcclxuICAvKiogRXh0cmEgbWV0YWRhdGEgYWJvdXQgdGhpcyBlbnRpdHkgc3VjaCBhcyB0aGUgZW50aXR5J3MgZXRhZy5cclxuICBZb3UgbWF5IGV4dGVuZCB0aGlzIG9iamVjdCB3aXRoIHlvdXIgb3duIG1ldGFkYXRhIGluZm9ybWF0aW9uLlxyXG4gIEJyZWV6ZSAoZGUpc2VyaWFsaXplcyB0aGlzIG9iamVjdCB3aGVuIGltcG9ydGluZy9leHBvcnRpbmcgdGhlIGVudGl0eS4gKiovXHJcbiAgZXh0cmFNZXRhZGF0YT86IGFueTtcclxuICAvKipcclxuICBBIFtbQnJlZXplRXZlbnRdXSB0aGF0IGZpcmVzIHdoZW5ldmVyIGFueSBvZiB0aGUgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhpcyBlbnRpdHkgY2hhbmdlLlxyXG4gIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IGJlIHRoZSByZW1vdmFsIG9mIGFuIGVycm9yIHdoZW4gc29tZSBkYXRhIG9uIHRoZSBlbnRpdHkgaXMgZml4ZWQuXHJcbiAgQGV2ZW50QXJncyAtIFxyXG4gICAgLSBlbnRpdHkgLSBUaGUgZW50aXR5IG9uIHdoaWNoIHRoZSB2YWxpZGF0aW9uIGVycm9ycyBhcmUgYmVpbmcgYWRkZWQgb3IgcmVtb3ZlZC5cclxuICAgIC0gYWRkZWQgLSBBbiBhcnJheSBjb250YWluaW5nIGFueSBuZXdseSBhZGRlZCBbW1ZhbGlkYXRpb25FcnJvcl1dc1xyXG4gICAgLSByZW1vdmVkIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbnkgbmV3bHkgcmVtb3ZlZCBbW1ZhbGlkYXRpb25FcnJvcl1dcy4gVGhpcyBpcyB0aG9zZVxyXG4gICAgICBlcnJvcnMgdGhhdCBoYXZlIGJlZW4gJ2ZpeGVkJy5cclxuXHJcbj4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbj4gICAgICBvcmRlci5lbnRpdHlBc3BlY3QudmFsaWRhdGlvbkVycm9yc0NoYW5nZWQuc3Vic2NyaWJlKFxyXG4+ICAgICAgZnVuY3Rpb24gKHZhbGlkYXRpb25DaGFuZ2VBcmdzKSB7XHJcbj4gICAgICAgICAgLy8gdGhpcyBjb2RlIHdpbGwgYmUgZXhlY3V0ZWQgYW55dGltZSBhIHByb3BlcnR5IHZhbHVlIGNoYW5nZXMgb24gdGhlICdvcmRlcicgZW50aXR5LlxyXG4+ICAgICAgICAgIHZhciBlbnRpdHkgPT0gdmFsaWRhdGlvbkNoYW5nZUFyZ3MuZW50aXR5OyAvLyBOb3RlOiBlbnRpdHkgPT09IG9yZGVyXHJcbj4gICAgICAgICAgdmFyIGVycm9yc0FkZGVkID0gdmFsaWRhdGlvbkNoYW5nZUFyZ3MuYWRkZWQ7XHJcbj4gICAgICAgICAgdmFyIGVycm9yc0NsZWFyZWQgPSB2YWxpZGF0aW9uQ2hhbmdlQXJncy5yZW1vdmVkO1xyXG4+ICAgICAgfSk7XHJcbiAgQGV2ZW50XHJcbiAgKiovXHJcbiAgdmFsaWRhdGlvbkVycm9yc0NoYW5nZWQ6IEJyZWV6ZUV2ZW50PFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzPjtcclxuICAvKipcclxuICBBIFtbQnJlZXplRXZlbnRdXSB0aGF0IGZpcmVzIHdoZW5ldmVyIGEgdmFsdWUgb2Ygb25lIG9mIHRoaXMgZW50aXR5J3MgcHJvcGVydGllcyBjaGFuZ2UuXHJcbiAgQGV2ZW50QXJncyAtXHJcbiAgICAtIGVudGl0eSAtIFRoZSBlbnRpdHkgd2hvc2UgcHJvcGVydHkgaGFzIGNoYW5nZWQuXHJcbiAgICAtIHByb3BlcnR5IC0gVGhlIFtbRGF0YVByb3BlcnR5XV0gdGhhdCBjaGFuZ2VkLlxyXG4gICAgLSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjaGFuZ2VkLiBUaGlzIHZhbHVlIHdpbGwgYmUgJ251bGwnIGZvciBvcGVyYXRpb25zIHRoYXQgcmVwbGFjZSB0aGUgZW50aXJlIGVudGl0eS4gIFRoaXMgaW5jbHVkZXNcclxuICAgICAgcXVlcmllcywgaW1wb3J0cyBhbmQgc2F2ZXMgdGhhdCByZXF1aXJlIGEgbWVyZ2UuIFRoZSByZW1haW5pbmcgcGFyYW1ldGVycyB3aWxsIG5vdCBleGlzdCBpbiB0aGlzIGNhc2UgZWl0aGVyLiBUaGlzIHdpbGwgYWN0dWFsbHkgYmUgYSBcInByb3BlcnR5IHBhdGhcIlxyXG4gICAgICBmb3IgYW55IHByb3BlcnRpZXMgb2YgYSBjb21wbGV4IHR5cGUuXHJcbiAgICAtIG9sZFZhbHVlIC0gVGhlIG9sZCB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGJlZm9yZSB0aGUgY2hhbmdlLlxyXG4gICAgLSBuZXdWYWx1ZSAtIFRoZSBuZXcgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBhZnRlciB0aGUgY2hhbmdlLlxyXG4gICAgLSBwYXJlbnQgLSBUaGUgaW1tZWRpYXRlIHBhcmVudCBvYmplY3QgZm9yIHRoZSBjaGFuZ2VkIHByb3BlcnR5LiAgVGhpcyB3aWxsIGJlIGEgQ29tcGxleFR5cGUgaW5zdGFuY2UgYXMgb3Bwb3NlZCB0byBhbiBFbnRpdHkgXHJcbiAgICAgIGZvciBhbnkgY29tcGxleCB0eXBlIG9yIG5lc3RlZCBjb21wbGV4IHR5cGUgcHJvcGVydGllcy5cclxuXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZC5zdWJzY3JpYmUoXHJcbiAgPiAgICAgIGZ1bmN0aW9uIChwcm9wZXJ0eUNoYW5nZWRBcmdzKSB7XHJcbiAgPiAgICAgICAgICAvLyB0aGlzIGNvZGUgd2lsbCBiZSBleGVjdXRlZCBhbnl0aW1lIGEgcHJvcGVydHkgdmFsdWUgY2hhbmdlcyBvbiB0aGUgJ29yZGVyJyBlbnRpdHkuXHJcbiAgPiAgICAgICAgICB2YXIgZW50aXR5ID0gcHJvcGVydHlDaGFuZ2VkQXJncy5lbnRpdHk7IC8vIE5vdGU6IGVudGl0eSA9PT0gb3JkZXJcclxuICA+ICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWVDaGFuZ2VkID0gcHJvcGVydHlDaGFuZ2VkQXJncy5wcm9wZXJ0eU5hbWU7XHJcbiAgPiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBwcm9wZXJ0eUNoYW5nZWRBcmdzLm9sZFZhbHVlO1xyXG4gID4gICAgICAgICAgdmFyIG5ld1ZhbHVlID0gcHJvcGVydHlDaGFuZ2VkQXJncy5uZXdWYWx1ZTtcclxuICA+ICAgICAgfSk7XHJcbiAgQGV2ZW50XHJcbiAgKiovXHJcbiAgcHJvcGVydHlDaGFuZ2VkOiBCcmVlemVFdmVudDxQcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3M+O1xyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfdmFsaWRhdGlvbkVycm9yczogeyBbaW5kZXg6IHN0cmluZ106IFZhbGlkYXRpb25FcnJvciB9O1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdDogYW55O1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9lbnRpdHlLZXk6IEVudGl0eUtleTtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfbG9hZGVkTnBzOiBhbnlbXTtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfaW5pdGlhbGl6ZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9pblByb2Nlc3M6IGFueVtdOyAvLyB1c2VkIGluIGRlZmF1bHRQcm9wZXJ0eUludGVyY2VwdG9yIGZvciB0ZW1wIHN0b3JhZ2UuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2luUHJvY2Vzc0VudGl0eT86IEVudGl0eTsgLy8gdXNlZCBpbiBFbnRpdHlNYW5hZ2VyXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIF9udWxsSW5zdGFuY2UgPSBuZXcgRW50aXR5QXNwZWN0KCk7IC8vIFRPRE86IGRldGVybWluZSBpZiB0aGlzIHdvcmtzXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgY29uc3RydWN0b3IoZW50aXR5PzogRW50aXR5KSB7XHJcblxyXG4gICAgLy8gaWYgY2FsbGVkIHdpdGhvdXQgbmV3XHJcbiAgICAvLyBpZiAoISh0aGlzIGluc3RhbmNlb2YgRW50aXR5QXNwZWN0KSkge1xyXG4gICAgLy8gICByZXR1cm4gbmV3IEVudGl0eUFzcGVjdChlbnRpdHkpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHRoaXMuZW50aXR5ID0gZW50aXR5O1xyXG4gICAgLy8gVE9ETzoga2VlcCBwdWJsaWMgb3Igbm90P1xyXG4gICAgdGhpcy5lbnRpdHlHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZW50aXR5TWFuYWdlciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZW50aXR5U3RhdGUgPSBFbnRpdHlTdGF0ZS5EZXRhY2hlZDtcclxuICAgIHRoaXMuaXNCZWluZ1NhdmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLm9yaWdpbmFsVmFsdWVzID0ge307XHJcbiAgICB0aGlzLmhhc1ZhbGlkYXRpb25FcnJvcnMgPSBmYWxzZTtcclxuICAgIHRoaXMuX3ZhbGlkYXRpb25FcnJvcnMgPSB7fTtcclxuXHJcbiAgICAvLyBVbmNvbW1lbnQgd2hlbiB3ZSBpbXBsZW1lbnQgZW50aXR5QXNwZWN0LmlzTmF2aWdhdGlvblByb3BlcnR5TG9hZGVkIG1ldGhvZFxyXG4gICAgLy8gdGhpcy5fbG9hZGVkTmF2UHJvcE1hcCA9IHt9O1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc0NoYW5nZWQgPSBuZXcgQnJlZXplRXZlbnQoXCJ2YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZFwiLCB0aGlzKTtcclxuICAgIHRoaXMucHJvcGVydHlDaGFuZ2VkID0gbmV3IEJyZWV6ZUV2ZW50KFwicHJvcGVydHlDaGFuZ2VkXCIsIHRoaXMpO1xyXG4gICAgLy8gaW4gY2FzZSB0aGlzIGlzIHRoZSBOVUxMIGVudGl0eUFzcGVjdC4gLSB1c2VkIHdpdGggQ29tcGxleEFzcGVjdHMgdGhhdCBoYXZlIG5vIHBhcmVudC5cclxuXHJcbiAgICBpZiAoZW50aXR5ICE9IG51bGwpIHtcclxuICAgICAgLy8gcmVtb3ZlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgb24gcHJvdG90eXBlIGJ1dCBwbGFjZWQgb24gY2xhc3MgYnkgQmFiZWxcclxuICAgICAgaWYgKCFlbnRpdHkuZW50aXR5VHlwZSkgeyBkZWxldGUoZW50aXR5LmVudGl0eVR5cGUpOyB9XHJcbiAgICAgIGlmICghZW50aXR5LmVudGl0eUFzcGVjdCkgeyBkZWxldGUoZW50aXR5LmVudGl0eUFzcGVjdCk7IH1cclxuICAgICAgZW50aXR5LmVudGl0eUFzcGVjdCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBlbnRpdHlUeXBlIHNob3VsZCBhbHJlYWR5IGJlIG9uIHRoZSBlbnRpdHkgZnJvbSAnd2F0Y2gnXHJcbiAgICAgIGxldCBlbnRpdHlUeXBlID0gZW50aXR5LmVudGl0eVR5cGUgfHwgZW50aXR5Ll8kZW50aXR5VHlwZTtcclxuICAgICAgaWYgKCFlbnRpdHlUeXBlKSB7XHJcbiAgICAgICAgbGV0IHR5cGVOYW1lID0gZW50aXR5LnByb3RvdHlwZS5fJHR5cGVOYW1lO1xyXG4gICAgICAgIGlmICghdHlwZU5hbWUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZW50aXR5IGlzIG5vdCByZWdpc3RlcmVkIGFzIGEgdmFsaWQgRW50aXR5VHlwZVwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgZm9yIHRoaXMgZW50aXR5VHlwZSBoYXMgbm90IHlldCBiZWVuIHJlc29sdmVkOiBcIiArIHR5cGVOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGVudGl0eUN0b3IgPSBlbnRpdHlUeXBlLmdldEVudGl0eUN0b3IoKTtcclxuICAgICAgY29uZmlnLmludGVyZmFjZVJlZ2lzdHJ5Lm1vZGVsTGlicmFyeS5nZXREZWZhdWx0SW5zdGFuY2UoKS5zdGFydFRyYWNraW5nKGVudGl0eSwgZW50aXR5Q3Rvci5wcm90b3R5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gKi9cclxuICAvLyB0eXBlLWd1YXJkXHJcbiAgc3RhdGljIGlzRW50aXR5KG9iajogU3RydWN0dXJhbE9iamVjdCk6IG9iaiBpcyBFbnRpdHkge1xyXG4gICAgcmV0dXJuIChvYmogYXMgYW55KS5lbnRpdHlBc3BlY3QgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIE5vIGxvbmdlciB1c2VkXHJcbiAgLy8gc3RhdGljIGNyZWF0ZUZyb20oZW50aXR5OiBFbnRpdHkpOiBFbnRpdHlBc3BlY3Qge1xyXG4gIC8vICAgaWYgKGVudGl0eSA9PSBudWxsKSB7XHJcbiAgLy8gICAgIHJldHVybiBFbnRpdHlBc3BlY3QuX251bGxJbnN0YW5jZTtcclxuICAvLyAgIH0gZWxzZSBpZiAoZW50aXR5LmVudGl0eUFzcGVjdCkge1xyXG4gIC8vICAgICByZXR1cm4gZW50aXR5LmVudGl0eUFzcGVjdDtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBuZXcgRW50aXR5QXNwZWN0KGVudGl0eSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGFuZCB0aGUgaW5zdGFuY2UgZ2V0UHJvcGVydHlWYWx1ZSBtZXRob2QuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpZWQgJ3Byb3BlcnR5IHBhdGgnIGZvciBhIHNwZWNpZmllZCBlbnRpdHkuXHJcblxyXG4gIFRoZSBwcm9wZXJ0eVBhdGggY2FuIGJlIGVpdGhlciBhIHN0cmluZyBkZWxpbWl0ZWQgd2l0aCAnLicgb3IgYSBzdHJpbmcgYXJyYXkuICBcclxuICAqKi9cclxuICAvLyB1c2VkIGJ5IEVudGl0eVF1ZXJ5IGFuZCBQcmVkaWNhdGVcclxuICBzdGF0aWMgZ2V0UHJvcGVydHlQYXRoVmFsdWUob2JqOiBFbnRpdHksIHByb3BlcnR5UGF0aDogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzID0gQXJyYXkuaXNBcnJheShwcm9wZXJ0eVBhdGgpID8gcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoLnNwbGl0KFwiLlwiKTtcclxuICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gb2JqLmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCBhcyBzdHJpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IG5leHRWYWx1ZSA9IG9iajtcclxuICAgICAgLy8gaGFjayB1c2Ugb2Ygc29tZSB0byBwZXJmb3JtIG1hcEZpcnN0IG9wZXJhdGlvbi5cclxuICAgICAgcHJvcGVydGllcy5zb21lKChwcm9wKSA9PiB7XHJcbiAgICAgICAgbmV4dFZhbHVlID0gbmV4dFZhbHVlLmdldFByb3BlcnR5KHByb3ApO1xyXG4gICAgICAgIHJldHVybiBuZXh0VmFsdWUgPT0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBuZXh0VmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSBbW0VudGl0eUtleV1dIGZvciB0aGlzIEVudGl0eS5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICB2YXIgZW50aXR5S2V5ID0gb3JkZXIuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG4gIEBwYXJhbSBmb3JjZVJlZnJlc2ggLSAoYm9vbGVhbj1mYWxzZSkgRm9yY2VzIHRoZSByZWNhbGN1bGF0aW9uIG9mIHRoZSBrZXkuICBUaGlzIHNob3VsZCBub3JtYWxseSBiZSB1bm5lY2Vzc2FyeS5cclxuICBAcmV0dXJuIFRoZSBbW0VudGl0eUtleV1dIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEVudGl0eS5cclxuICAqKi9cclxuICBnZXRLZXkoZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGZvcmNlUmVmcmVzaCA9IGFzc2VydFBhcmFtKGZvcmNlUmVmcmVzaCwgXCJmb3JjZVJlZnJlc2hcIikuaXNCb29sZWFuKCkuaXNPcHRpb25hbCgpLmNoZWNrKGZhbHNlKTtcclxuICAgIGlmIChmb3JjZVJlZnJlc2ggfHwgIXRoaXMuX2VudGl0eUtleSkge1xyXG4gICAgICBsZXQgZW50aXR5VHlwZSA9IHRoaXMuZW50aXR5IS5lbnRpdHlUeXBlO1xyXG4gICAgICBsZXQga2V5UHJvcHMgPSBlbnRpdHlUeXBlLmtleVByb3BlcnRpZXM7XHJcbiAgICAgIGxldCB2YWx1ZXMgPSBrZXlQcm9wcy5tYXAoZnVuY3Rpb24gKHApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnRpdHkuZ2V0UHJvcGVydHkocC5uYW1lKTtcclxuICAgICAgfSwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX2VudGl0eUtleSA9IG5ldyBFbnRpdHlLZXkoZW50aXR5VHlwZSwgdmFsdWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9lbnRpdHlLZXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSBlbnRpdHkgdG8gYW4gW1tFbnRpdHlTdGF0ZV1dIG9mICdVbmNoYW5nZWQnIGJ5IGNvbW1pdHRpbmcgYWxsIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgZW50aXR5IHdhcyBsYXN0IHF1ZXJpZWRcclxuICBoYWQgJ2FjY2VwdENoYW5nZXMnIGNhbGxlZCBvbiBpdC5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICBvcmRlci5lbnRpdHlBc3BlY3QuYWNjZXB0Q2hhbmdlcygpO1xyXG4gID4gICAgICAvLyBUaGUgJ29yZGVyJyBlbnRpdHkgd2lsbCBub3cgYmUgaW4gYW4gJ1VuY2hhbmdlZCcgc3RhdGUgd2l0aCBhbnkgY2hhbmdlcyBjb21taXR0ZWQuXHJcbiAgKiovXHJcbiAgYWNjZXB0Q2hhbmdlcygpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHJldHVybjtcclxuICAgIHRoaXMuX2NoZWNrT3BlcmF0aW9uKFwiYWNjZXB0Q2hhbmdlc1wiKTtcclxuICAgIGxldCBlbSA9IHRoaXMuZW50aXR5TWFuYWdlciE7XHJcbiAgICBpZiAodGhpcy5lbnRpdHlTdGF0ZS5pc0RlbGV0ZWQoKSkge1xyXG4gICAgICBlbS5kZXRhY2hFbnRpdHkodGhpcy5lbnRpdHkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRVbmNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIGVtLmVudGl0eUNoYW5nZWQucHVibGlzaCh7IGVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLkFjY2VwdENoYW5nZXMsIGVudGl0eTogdGhpcy5lbnRpdHkgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSBlbnRpdHkgdG8gYW4gW1tFbnRpdHlTdGF0ZV1dIG9mICdVbmNoYW5nZWQnIGJ5IHJlamVjdGluZyBhbGwgY2hhbmdlcyBtYWRlIHRvIGl0IHNpbmNlIHRoZSBlbnRpdHkgd2FzIGxhc3QgcXVlcmllZFxyXG4gIGhhZCAncmVqZWN0Q2hhbmdlcycgY2FsbGVkIG9uIGl0LlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5yZWplY3RDaGFuZ2VzKCk7XHJcbiAgPiAgICAgIC8vIFRoZSAnb3JkZXInIGVudGl0eSB3aWxsIG5vdyBiZSBpbiBhbiAnVW5jaGFuZ2VkJyBzdGF0ZSB3aXRoIGFueSBjaGFuZ2VzIHJlamVjdGVkLlxyXG4gICoqL1xyXG4gIHJlamVjdENoYW5nZXMoKSB7XHJcbiAgICB0aGlzLl9jaGVja09wZXJhdGlvbihcInJlamVjdENoYW5nZXNcIik7XHJcbiAgICBsZXQgZW50aXR5ID0gdGhpcy5lbnRpdHkhO1xyXG4gICAgbGV0IGVudGl0eU1hbmFnZXIgPSB0aGlzLmVudGl0eU1hbmFnZXIhO1xyXG4gICAgLy8gd2UgZG8gbm90IHdhbnQgUHJvcGVydHlDaGFuZ2Ugb3IgRW50aXR5Q2hhbmdlIGV2ZW50cyB0byBvY2N1ciBoZXJlXHJcbiAgICBjb3JlLnVzaW5nKGVudGl0eU1hbmFnZXIsIFwiaXNSZWplY3RpbmdDaGFuZ2VzXCIsIHRydWUsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmVqZWN0Q2hhbmdlc0NvcmUoZW50aXR5KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZW50aXR5U3RhdGUuaXNBZGRlZCgpKSB7XHJcbiAgICAgIC8vIG5leHQgbGluZSBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgZm9sbG93aW5nIGxpbmUgd2lsbCBjYXVzZSB0aGlzLmVudGl0eU1hbmFnZXIgLT4gbnVsbDtcclxuICAgICAgZW50aXR5TWFuYWdlci5kZXRhY2hFbnRpdHkoZW50aXR5KTtcclxuICAgICAgLy8gbmVlZCB0byB0ZWxsIGVtIHRoYXQgYW4gZW50aXR5IHRoYXQgbmVlZGVkIHRvIGJlIHNhdmVkIG5vIGxvbmdlciBkb2VzLlxyXG4gICAgICBlbnRpdHlNYW5hZ2VyLl9ub3RpZnlTdGF0ZUNoYW5nZShlbnRpdHksIGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSB7XHJcbiAgICAgICAgZW50aXR5TWFuYWdlci5fbGlua1JlbGF0ZWRFbnRpdGllcyhlbnRpdHkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0VW5jaGFuZ2VkKCk7XHJcbiAgICAgIC8vIHByb3BlcnR5Q2hhbmdlZCBwcm9wZXJ0eU5hbWUgaXMgbm90IHNwZWNpZmllZCBiZWNhdXNlIG1vcmUgdGhhbiBvbmUgcHJvcGVydHkgbWF5IGhhdmUgY2hhbmdlZC5cclxuICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaCh7IGVudGl0eTogZW50aXR5LCBwcm9wZXJ0eU5hbWU6IG51bGwgfSk7XHJcbiAgICAgIGVudGl0eU1hbmFnZXIuZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uUmVqZWN0Q2hhbmdlcywgZW50aXR5OiBlbnRpdHkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgLy8gVE9ETzogcmVuYW1lIC0gYW5kIHVzZSAnXyc7IHVzZWQgb24gYm90aCBFbnRpdHlBc3BlY3QgYW5kIENvbXBsZXhBc3BlY3QgZm9yIHBvbHltb3JwaGljIHJlYXNvbnMuXHJcbiAgZ2V0UHJvcGVydHlQYXRoKHByb3BOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBwcm9wTmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFNldHMgdGhlIGVudGl0eSB0byBhbiBFbnRpdHlTdGF0ZSBvZiAnQWRkZWQnLiAgVGhpcyBpcyBOT1QgdGhlIGVxdWl2YWxlbnQgb2YgY2FsbGluZyBbW0VudGl0eU1hbmFnZXIuYWRkRW50aXR5XV1cclxuICBiZWNhdXNlIG5vIGtleSBnZW5lcmF0aW9uIHdpbGwgb2NjdXIgZm9yIGF1dG9nZW5lcmF0ZWQga2V5cyBhcyBhIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbi4gQXMgYSByZXN1bHQgdGhpcyBvcGVyYXRpb24gY2FuIGJlIHByb2JsZW1hdGljXHJcbiAgdW5sZXNzIHlvdSBhcmUgY2VydGFpbiB0aGF0IHRoZSBlbnRpdHkgYmVpbmcgbWFya2VkICdBZGRlZCcgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgZGF0YWJhc2UgYW5kIGRvZXMgbm90IGhhdmUgYW4gYXV0b2dlbmVyYXRlZCBrZXkuXHJcbiAgVGhlIHNhbWUgb3BlcmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYnkgY2FsbGluZyBbW0VudGl0eUFzcGVjdC5zZXRFbnRpdHlTdGF0ZV1dLlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5zZXRBZGRlZCgpO1xyXG4gID4gICAgICAvLyBUaGUgJ29yZGVyJyBlbnRpdHkgd2lsbCBub3cgYmUgaW4gYW4gJ0FkZGVkJyBzdGF0ZS5cclxuICAqKi9cclxuICBzZXRBZGRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNldEVudGl0eVN0YXRlKEVudGl0eVN0YXRlLkFkZGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFNldHMgdGhlIGVudGl0eSB0byBhbiBFbnRpdHlTdGF0ZSBvZiAnVW5jaGFuZ2VkJy4gIFRoaXMgaXMgYWxzbyB0aGUgZXF1aXZhbGVudCBvZiBjYWxsaW5nIFtbRW50aXR5QXNwZWN0LmFjY2VwdENoYW5nZXNdXS5cclxuICBUaGUgc2FtZSBvcGVyYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSBjYWxsaW5nIFtbRW50aXR5QXNwZWN0LnNldEVudGl0eVN0YXRlXV0uXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnNldFVuY2hhbmdlZCgpO1xyXG4gID4gICAgICAvLyBUaGUgJ29yZGVyJyBlbnRpdHkgd2lsbCBub3cgYmUgaW4gYW4gJ1VuY2hhbmdlZCcgc3RhdGUgd2l0aCBhbnkgY2hhbmdlcyBjb21taXR0ZWQuXHJcbiAgKiovXHJcbiAgc2V0VW5jaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0RW50aXR5U3RhdGUoRW50aXR5U3RhdGUuVW5jaGFuZ2VkKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgU2V0cyB0aGUgZW50aXR5IHRvIGFuIEVudGl0eVN0YXRlIG9mICdNb2RpZmllZCcuICBUaGlzIGNhbiBhbHNvIGJlIGFjaGlldmVkIGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBhbnkgcHJvcGVydHkgb24gYW4gJ1VuY2hhbmdlZCcgZW50aXR5LlxyXG4gIFRoZSBzYW1lIG9wZXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGJ5IGNhbGxpbmcgW1tFbnRpdHlBc3BlY3Quc2V0RW50aXR5U3RhdGVdXS5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICBvcmRlci5lbnRpdHlBc3BlY3Quc2V0TW9kaWZpZWQoKTtcclxuICA+ICAgICAgLy8gVGhlICdvcmRlcicgZW50aXR5IHdpbGwgbm93IGJlIGluIGEgJ01vZGlmaWVkJyBzdGF0ZS5cclxuICAqKi9cclxuICBzZXRNb2RpZmllZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnNldEVudGl0eVN0YXRlKEVudGl0eVN0YXRlLk1vZGlmaWVkKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICBTZXRzIHRoZSBlbnRpdHkgdG8gYW4gRW50aXR5U3RhdGUgb2YgJ0RlbGV0ZWQnLiAgVGhpcyBib3RoIG1hcmtzIHRoZSBlbnRpdHkgYXMgYmVpbmcgc2NoZWR1bGVkIGZvciBkZWxldGlvbiBkdXJpbmcgdGhlIG5leHQgJ1NhdmUnIGNhbGxcclxuICBidXQgYWxzbyByZW1vdmVzIHRoZSBlbnRpdHkgZnJvbSBhbGwgb2YgaXRzIHJlbGF0ZWQgZW50aXRpZXMuXHJcbiAgVGhlIHNhbWUgb3BlcmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYnkgY2FsbGluZyBbW0VudGl0eUFzcGVjdC5zZXRFbnRpdHlTdGF0ZV1dLlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5zZXREZWxldGVkKCk7XHJcbiAgPiAgICAgIC8vIFRoZSAnb3JkZXInIGVudGl0eSB3aWxsIG5vdyBiZSBpbiBhICdEZWxldGVkJyBzdGF0ZSBhbmQgaXQgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgJ3JlbGF0ZWQnIGVudGl0aWVzLlxyXG4gICoqL1xyXG4gIHNldERlbGV0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRFbnRpdHlTdGF0ZShFbnRpdHlTdGF0ZS5EZWxldGVkKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICBTZXRzIHRoZSBlbnRpdHkgdG8gYW4gRW50aXR5U3RhdGUgb2YgJ0RldGFjaGVkJy4gIFRoaXMgcmVtb3ZlcyB0aGUgZW50aXR5IGZyb20gYWxsIG9mIGl0cyByZWxhdGVkIGVudGl0aWVzLCBidXQgZG9lcyBOT1QgY2hhbmdlIHRoZSBFbnRpdHlTdGF0ZSBvZiBhbnkgZXhpc3RpbmcgZW50aXRpZXMuXHJcbiAgVGhlIHNhbWUgb3BlcmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYnkgY2FsbGluZyBbW0VudGl0eUFzcGVjdC5zZXRFbnRpdHlTdGF0ZV1dLlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5zZXREZXRhY2hlZCgpO1xyXG4gID4gICAgICAvLyBUaGUgJ29yZGVyJyBlbnRpdHkgd2lsbCBub3cgYmUgaW4gYSAnRGV0YWNoZWQnIHN0YXRlIGFuZCBpdCB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSAncmVsYXRlZCcgZW50aXRpZXMuXHJcbiAgKiovXHJcbiAgc2V0RGV0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRFbnRpdHlTdGF0ZShFbnRpdHlTdGF0ZS5EZXRhY2hlZCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgU2V0cyB0aGUgZW50aXR5IHRvIHRoZSBzcGVjaWZpZWQgRW50aXR5U3RhdGUuIFNlZSBhbHNvICdzZXRVbmNoYW5nZWQnLCAnc2V0TW9kaWZpZWQnLCAnc2V0RGV0YWNoZWQnLCBldGMuXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnNldEVudGl0eVN0YXRlKEVudGl0eVN0YXRlLlVuY2hhbmdlZCk7XHJcbiAgPiAgICAgIC8vIFRoZSAnb3JkZXInIGVudGl0eSB3aWxsIG5vdyBiZSBpbiBhICdVbmNoYW5nZWQnIHN0YXRlLlxyXG4gICoqL1xyXG4gIHNldEVudGl0eVN0YXRlKGVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSkge1xyXG4gICAgaWYgKHRoaXMuZW50aXR5U3RhdGUgPT09IGVudGl0eVN0YXRlKSByZXR1cm4gZmFsc2U7XHJcbiAgICB0aGlzLl9jaGVja09wZXJhdGlvbihcInNldEVudGl0eVN0YXRlXCIpO1xyXG4gICAgaWYgKHRoaXMuZW50aXR5U3RhdGUuaXNEZXRhY2hlZCgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3Qgc2V0IHRoZSAnZW50aXR5U3RhdGUnIG9mIGFuIGVudGl0eSB3aGVuIGl0IGlzIGRldGFjaGVkIC0gZXhjZXB0IGJ5IGZpcnN0IGF0dGFjaGluZyBpdCB0byBhbiBFbnRpdHlNYW5hZ2VyXCIpO1xyXG4gICAgfVxyXG4gICAgbGV0IGVudGl0eSA9IHRoaXMuZW50aXR5ITtcclxuICAgIGxldCBlbSA9IHRoaXMuZW50aXR5TWFuYWdlciE7XHJcbiAgICBsZXQgbmVlZHNTYXZlID0gdHJ1ZTtcclxuICAgIGlmIChlbnRpdHlTdGF0ZSA9PT0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkKSB7XHJcbiAgICAgIGNsZWFyT3JpZ2luYWxWYWx1ZXMoZW50aXR5KTtcclxuICAgICAgZGVsZXRlIHRoaXMuaGFzVGVtcEtleTtcclxuICAgICAgbmVlZHNTYXZlID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKGVudGl0eVN0YXRlID09PSBFbnRpdHlTdGF0ZS5BZGRlZCkge1xyXG4gICAgICBjbGVhck9yaWdpbmFsVmFsdWVzKGVudGl0eSk7XHJcbiAgICAgIC8vIFRPRE86IG1vcmUgdG8gZG8gaGVyZS4uLiBsaWtlIHJlZ2VuZXJhdGluZyBrZXkgPz8/XHJcbiAgICB9IGVsc2UgaWYgKGVudGl0eVN0YXRlID09PSBFbnRpdHlTdGF0ZS5EZWxldGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmVudGl0eVN0YXRlLmlzQWRkZWQoKSkge1xyXG4gICAgICAgIC8vIHR1cm4gaXQgaW50byBhIGRldGFjaCBhbmQgZXhpdCBlYXJseVxyXG4gICAgICAgIHRoaXMuc2V0RW50aXR5U3RhdGUoRW50aXR5U3RhdGUuRGV0YWNoZWQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRPRE86IHRoaW5rIGFib3V0IGNhc2NhZGUgZGVsZXRlc1xyXG4gICAgICAgIC8vIGVudGl0eVN0YXRlIG5lZWRzIHRvIGJlIHNldCBpdCBlYXJseSBpbiB0aGlzIG9uZSBjYXNlIHRvIGluc3VyZSB0aGF0IGZrJ3MgYXJlIG5vdCBjbGVhcmVkLlxyXG4gICAgICAgIHRoaXMuZW50aXR5U3RhdGUgPSBFbnRpdHlTdGF0ZS5EZWxldGVkO1xyXG4gICAgICAgIHJlbW92ZUZyb21SZWxhdGlvbnMoZW50aXR5LCBFbnRpdHlTdGF0ZS5EZWxldGVkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlbnRpdHlTdGF0ZSA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWQpIHtcclxuICAgICAgLy8gbm90aGluZyBleHRyYSBuZWVkZWRcclxuICAgIH0gZWxzZSBpZiAoZW50aXR5U3RhdGUgPT09IEVudGl0eVN0YXRlLkRldGFjaGVkKSB7XHJcbiAgICAgIGxldCBncm91cCA9IHRoaXMuZW50aXR5R3JvdXA7XHJcbiAgICAgIC8vIG5vIGdyb3VwID09PSBhbHJlYWR5IGRldGFjaGVkLlxyXG4gICAgICBpZiAoIWdyb3VwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGdyb3VwLmRldGFjaEVudGl0eShlbnRpdHkpO1xyXG4gICAgICAvLyBuZWVkcyB0byBvY2N1ciBlYXJseSBoZXJlIC0gc28gdGhpcyBJUyBkZWxpYmVyYXRlbHkgcmVkdW5kZW50IHdpdGggdGhlIHNhbWUgY29kZSBsYXRlciBpbiB0aGlzIG1ldGhvZC5cclxuICAgICAgdGhpcy5lbnRpdHlTdGF0ZSA9IGVudGl0eVN0YXRlO1xyXG4gICAgICByZW1vdmVGcm9tUmVsYXRpb25zKGVudGl0eSwgRW50aXR5U3RhdGUuRGV0YWNoZWQpO1xyXG4gICAgICB0aGlzLl9kZXRhY2goKTtcclxuICAgICAgZW0uZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uRGV0YWNoLCBlbnRpdHk6IGVudGl0eSB9KTtcclxuICAgICAgbmVlZHNTYXZlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eVN0YXRlID0gZW50aXR5U3RhdGU7XHJcbiAgICBlbS5fbm90aWZ5U3RhdGVDaGFuZ2UoZW50aXR5LCBuZWVkc1NhdmUpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsb2FkTmF2aWdhdGlvblByb3BlcnR5KG5hdmlnYXRpb25Qcm9wZXJ0eTogc3RyaW5nLCBjYWxsYmFjaz86IFF1ZXJ5U3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrPzogUXVlcnlFcnJvckNhbGxiYWNrKTogUHJvbWlzZTxRdWVyeVJlc3VsdD47XHJcbiAgbG9hZE5hdmlnYXRpb25Qcm9wZXJ0eShuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSwgY2FsbGJhY2s/OiBRdWVyeVN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaz86IFF1ZXJ5RXJyb3JDYWxsYmFjayk6IFByb21pc2U8UXVlcnlSZXN1bHQ+O1xyXG4gIC8qKlxyXG4gIFBlcmZvcm1zIGEgcXVlcnkgZm9yIHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBbW05hdmlnYXRpb25Qcm9wZXJ0eV1dLiBfX0FzeW5jX19cclxuICA+ICAgICAgZW1wLmVudGl0eUFzcGVjdC5sb2FkTmF2aWdhdGlvblByb3BlcnR5KFwiT3JkZXJzXCIpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcclxuICA+ICAgICAgICAgIHZhciBvcmRlcnMgPSBkYXRhLnJlc3VsdHM7XHJcbiAgPiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChleGNlcHRpb24pIHtcclxuICA+ICAgICAgICAgIC8vIGhhbmRsZSBleGNlcHRpb24gaGVyZTtcclxuICA+ICAgICAgfSk7XHJcbiAgQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eSAtIFRoZSBOYXZpZ2F0aW9uUHJvcGVydHkgb3IgdGhlIG5hbWUgb2YgdGhlIE5hdmlnYXRpb25Qcm9wZXJ0eSB0byAnbG9hZCcuXHJcbiAgQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxyXG4gIEBwYXJhbSBlcnJvckNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxyXG4gIEByZXR1cm4gUHJvbWlzZSB3aXRoIHNoYXBlXHJcbiAgICAtIHJlc3VsdHMge0FycmF5IG9mIEVudGl0eX1cclxuICAgIC0gcXVlcnkge0VudGl0eVF1ZXJ5fSBUaGUgb3JpZ2luYWwgcXVlcnlcclxuICAgIC0gaHR0cFJlc3BvbnNlIHtodHRwUmVzcG9uc2V9IFRoZSBIdHRwUmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLlxyXG4gICoqL1xyXG4gIGxvYWROYXZpZ2F0aW9uUHJvcGVydHkobmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkgfCBzdHJpbmcsIGNhbGxiYWNrOiBRdWVyeVN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjazogUXVlcnlFcnJvckNhbGxiYWNrKSB7XHJcbiAgICBsZXQgZW50aXR5ID0gdGhpcy5lbnRpdHkhO1xyXG4gICAgbGV0IG5hdlByb3BlcnR5ID0gZW50aXR5LmVudGl0eVR5cGUuX2NoZWNrTmF2UHJvcGVydHkobmF2aWdhdGlvblByb3BlcnR5KTtcclxuICAgIGxldCBxdWVyeSA9IEVudGl0eVF1ZXJ5LmZyb21FbnRpdHlOYXZpZ2F0aW9uKGVudGl0eSwgbmF2UHJvcGVydHkpO1xyXG4gICAgLy8gcmV0dXJuIGVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnkocXVlcnksIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcclxuICAgIGxldCBwcm9taXNlID0gZW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyIS5leGVjdXRlUXVlcnkocXVlcnkpO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5fbWFya0FzTG9hZGVkKG5hdlByb3BlcnR5Lm5hbWUpO1xyXG4gICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIGlmIChlcnJvckNhbGxiYWNrKSBlcnJvckNhbGxiYWNrKGVycm9yKTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIE1hcmtzIHRoaXMgbmF2aWdhdGlvblByb3BlcnR5IG9uIHRoaXMgZW50aXR5IGFzIGFscmVhZHkgaGF2aW5nIGJlZW4gbG9hZGVkLlxyXG4gID4gICAgICBlbXAuZW50aXR5QXNwZWN0Lm1hcmtOYXZpZ2F0aW9uUHJvcGVydHlBc0xvYWRlZChcIk9yZGVyc1wiKTtcclxuICBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5IC0gVGhlIE5hdmlnYXRpb25Qcm9wZXJ0eSBvciBuYW1lIG9mIE5hdmlnYXRpb25Qcm9wZXJ0eSB0byAnbG9hZCcuXHJcbiAgKiovXHJcbiAgbWFya05hdmlnYXRpb25Qcm9wZXJ0eUFzTG9hZGVkKG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5IHwgc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSByZXR1cm47XHJcbiAgICBsZXQgbmF2UHJvcGVydHkgPSB0aGlzLmVudGl0eS5lbnRpdHlUeXBlLl9jaGVja05hdlByb3BlcnR5KG5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgICB0aGlzLl9tYXJrQXNMb2FkZWQobmF2UHJvcGVydHkubmFtZSk7XHJcbiAgfVxyXG5cclxuICBpc05hdmlnYXRpb25Qcm9wZXJ0eUxvYWRlZChuYXZpZ2F0aW9uUHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW47XHJcbiAgaXNOYXZpZ2F0aW9uUHJvcGVydHlMb2FkZWQobmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkpOiBib29sZWFuO1xyXG4gIC8qKlxyXG4gIERldGVybWluZXMgd2hldGhlciBhIG5hdmlnYXRpb25Qcm9wZXJ0eSBvbiB0aGlzIGVudGl0eSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC5cclxuXHJcbiAgQSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvbnNpZGVyZWQgbG9hZGVkIHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgY29uZGl0aW9ucyBhcHBsaWVzOlxyXG5cclxuICAgIDEuIEl0IHdhcyBmZXRjaGVkIGZyb20gdGhlIGJhY2tlbmQgc2VydmVyLlxyXG4gICAgICAgIDxici8+ICAgVGhpcyBjYW4gYmUgdGhlIHJlc3VsdCBvZiBhbiBleHBhbmQgcXVlcnkgb3IgYSBjYWxsIHRvIHRoZSBbW0VudGl0eUFzcGVjdC5sb2FkTmF2aWdhdGlvblByb3BlcnR5XV0gbWV0aG9kLlxyXG4gICAgICAgIDxici8+ICAgTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIGZldGNoIHJldHVybnMgbm90aGluZyB0aGUgcHJvcGVydHkgaXMgc3RpbGwgbWFya2VkIGFzIGxvYWRlZCBpbiB0aGlzIGNhc2UuXHJcbiAgICAxLiBUaGUgcHJvcGVydHkgaXMgc2NhbGFyIGFuZCBoYXMgYmVlbiBzZXQgdG8gYSBub25udWxsIHZhbHVlLlxyXG4gICAgMS4gVGhlIFtbRW50aXR5QXNwZWN0Lm1hcmtOYXZpZ2F0aW9uUHJvcGVydHlBc0xvYWRlZF1dIHdhcyBjYWxsZWQuXHJcbiAgXHJcbiAgPiAgICAgdmFyIHdhc0xvYWRlZCA9IGVtcC5lbnRpdHlBc3BlY3QuaXNOYXZpZ2F0aW9uUHJvcGVydHlMb2FkZWQoXCJPcmRlcnNcIik7XHJcbiAgQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eSAtIFRoZSBOYXZpZ2F0aW9uUHJvcGVydHkgb3IgbmFtZSBvZiBOYXZpZ2F0aW9uUHJvcGVydHkgdG8gJ2xvYWQnLlxyXG4gICoqL1xyXG4gIGlzTmF2aWdhdGlvblByb3BlcnR5TG9hZGVkKG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5IHwgc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSByZXR1cm47XHJcbiAgICBsZXQgbmF2UHJvcGVydHkgPSB0aGlzLmVudGl0eS5lbnRpdHlUeXBlLl9jaGVja05hdlByb3BlcnR5KG5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgICBpZiAobmF2UHJvcGVydHkuaXNTY2FsYXIgJiYgdGhpcy5lbnRpdHkuZ2V0UHJvcGVydHkobmF2UHJvcGVydHkubmFtZSkgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9sb2FkZWROcHMgJiYgdGhpcy5fbG9hZGVkTnBzLmluZGV4T2YobmF2UHJvcGVydHkubmFtZSkgPj0gMDtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9tYXJrQXNMb2FkZWQobmF2UHJvcE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbG9hZGVkTnBzID0gdGhpcy5fbG9hZGVkTnBzIHx8IFtdO1xyXG4gICAgY29yZS5hcnJheUFkZEl0ZW1VbmlxdWUodGhpcy5fbG9hZGVkTnBzLCBuYXZQcm9wTmFtZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgUGVyZm9ybXMgdmFsaWRhdGlvbiBvbiB0aGUgZW50aXR5LCBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgdmFsaWRhdGlvbiBhcmUgYXZhaWxhYmxlIHZpYSB0aGVcclxuICBbW0VudGl0eUFzcGVjdC5nZXRWYWxpZGF0aW9uRXJyb3JzXV0gbWV0aG9kLiBWYWxpZGF0aW5nIGFuIGVudGl0eSBtZWFucyBleGVjdXRpbmdcclxuICBhbGwgb2YgdGhlIHZhbGlkYXRvcnMgb24gYm90aCB0aGUgZW50aXR5IGl0c2VsZiBhcyB3ZWxsIGFzIHRob3NlIG9uIGVhY2ggb2YgaXRzIHByb3BlcnRpZXMuXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgdmFyIGlzT2sgPSBvcmRlci5lbnRpdHlBc3BlY3QudmFsaWRhdGVFbnRpdHkoKTtcclxuICA+ICAgICAgLy8gaXNPayB3aWxsIGJlICd0cnVlJyBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzIG9uIHRoZSBlbnRpdHkuXHJcbiAgPiAgICAgIGlmICghaXNPaykge1xyXG4gID4gICAgICAgICAgdmFyIGVycm9ycyA9IG9yZGVyLmVudGl0eUFzcGVjdC5nZXRWYWxpZGF0aW9uRXJyb3JzKCk7XHJcbiAgPiAgICAgIH1cclxuICBAcmV0dXJuIFdoZXRoZXIgdGhlIGVudGl0eSBwYXNzZWQgdmFsaWRhdGlvbi5cclxuICAqKi9cclxuICB2YWxpZGF0ZUVudGl0eSgpIHtcclxuICAgIGxldCBvayA9IHRydWU7XHJcbiAgICB0aGlzLl9wcm9jZXNzVmFsaWRhdGlvbk9wQW5kUHVibGlzaChmdW5jdGlvbiAodGhhdDogYW55KSB7XHJcbiAgICAgIG9rID0gdmFsaWRhdGVUYXJnZXQodGhhdC5lbnRpdHkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gb2s7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBib29sZWFuO1xyXG4gIHZhbGlkYXRlUHJvcGVydHkocHJvcGVydHk6IERhdGFQcm9wZXJ0eSwgY29udGV4dD86IGFueSk6IGJvb2xlYW47XHJcbiAgdmFsaWRhdGVQcm9wZXJ0eShwcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LCBjb250ZXh0PzogYW55KTogYm9vbGVhbjtcclxuICAvKipcclxuICBQZXJmb3JtcyB2YWxpZGF0aW9uIG9uIGEgc3BlY2lmaWMgcHJvcGVydHkgb2YgdGhpcyBlbnRpdHksIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIGFyZSBhdmFpbGFibGUgdmlhIHRoZVxyXG4gIFtbRW50aXR5QXNwZWN0LmdldFZhbGlkYXRpb25FcnJvcnNdXSBtZXRob2QuIFZhbGlkYXRpbmcgYSBwcm9wZXJ0eSBtZWFucyBleGVjdXRpbmdcclxuICBhbGwgb2YgdGhlIHZhbGlkYXRvcnMgb24gdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS4gIFRoaXMgY2FsbCBpcyBhbHNvIG1hZGUgYXV0b21hdGljYWxseSBhbnl0aW1lIGEgcHJvcGVydHlcclxuICBvZiBhbiBlbnRpdHkgaXMgY2hhbmdlZC5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICB2YXIgaXNPayA9IG9yZGVyLmVudGl0eUFzcGVjdC52YWxpZGF0ZVByb3BlcnR5KFwiT3JkZXJcIik7XHJcblxyXG4gIG9yXHJcbiAgPiAgICAgIHZhciBvcmRlckRhdGVQcm9wZXJ0eSA9IG9yZGVyLmVudGl0eVR5cGUuZ2V0UHJvcGVydHkoXCJPcmRlckRhdGVcIik7XHJcbiAgPiAgICAgIHZhciBpc09rID0gb3JkZXIuZW50aXR5QXNwZWN0LnZhbGlkYXRlUHJvcGVydHkoT3JkZXJEYXRlUHJvcGVydHkpO1xyXG4gIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBbW0RhdGFQcm9wZXJ0eV1dIG9yIFtbTmF2aWdhdGlvblByb3BlcnR5XV0gdG8gdmFsaWRhdGUgb3IgYSBzdHJpbmcgXHJcbiAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb3IgYSBwcm9wZXJ0eSBwYXRoIHdpdGggdGhlIHBhdGggdG8gYSBwcm9wZXJ0eSBvZiBhIGNvbXBsZXggb2JqZWN0LlxyXG4gIEBwYXJhbSBjb250ZXh0IC0gIEEgY29udGV4dCBvYmplY3QgdXNlZCB0byBwYXNzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gZWFjaCBbW1ZhbGlkYXRvcl1dLlxyXG4gIEByZXR1cm4gV2hldGhlciB0aGUgZW50aXR5IHBhc3NlZCB2YWxpZGF0aW9uLlxyXG4gICoqL1xyXG4gIHZhbGlkYXRlUHJvcGVydHkocHJvcGVydHk6IEVudGl0eVByb3BlcnR5IHwgc3RyaW5nLCBjb250ZXh0OiBhbnkpIHtcclxuICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7IC8vIHBlcmZvcm1zIHZhbGlkYXRpb25zXHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuY29tcGxleEFzcGVjdCkge1xyXG4gICAgICByZXR1cm4gdmFsaWRhdGVUYXJnZXQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY29udGV4dCA9IGNvbnRleHQgfHwge307XHJcbiAgICBjb250ZXh0LmVudGl0eSA9IHRoaXMuZW50aXR5O1xyXG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBjb250ZXh0LnByb3BlcnR5ID0gdGhpcy5lbnRpdHkhLmVudGl0eVR5cGUuZ2V0UHJvcGVydHkocHJvcGVydHksIHRydWUpO1xyXG4gICAgICBjb250ZXh0LnByb3BlcnR5TmFtZSA9IHByb3BlcnR5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dC5wcm9wZXJ0eSA9IHByb3BlcnR5O1xyXG4gICAgICBjb250ZXh0LnByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlUHJvcGVydHkodmFsdWUsIGNvbnRleHQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsaWRhdGlvbkVycm9ycygpOiBWYWxpZGF0aW9uRXJyb3JbXTtcclxuICBnZXRWYWxpZGF0aW9uRXJyb3JzKHByb3BlcnR5OiBzdHJpbmcpOiBWYWxpZGF0aW9uRXJyb3JbXTtcclxuICBnZXRWYWxpZGF0aW9uRXJyb3JzKHByb3BlcnR5OiBFbnRpdHlQcm9wZXJ0eSk6IFZhbGlkYXRpb25FcnJvcltdO1xyXG4gIC8qKlxyXG4gIFJldHVybnMgdGhlIHZhbGlkYXRpb24gZXJyb3JzIGFzc29jaWF0ZWQgd2l0aCBlaXRoZXIgdGhlIGVudGlyZSBlbnRpdHkgb3IgYW55IHNwZWNpZmllZCBwcm9wZXJ0eS5cclxuICBcclxuICBUaGlzIG1ldGhvZCBjYW4gcmV0dXJuIGFsbCBvZiB0aGUgZXJyb3JzIGZvciBhbiBFbnRpdHlcclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICB2YXIgdmFsRXJyb3JzID0gb3JkZXIuZW50aXR5QXNwZWN0LmdldFZhbGlkYXRpb25FcnJvcnMoKTtcclxuXHJcbiAgYXMgd2VsbCBhcyB0aG9zZSBmb3IganVzdCBhIHNwZWNpZmljIHByb3BlcnR5LlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIHZhciBvcmRlckRhdGVFcnJvcnMgPSBvcmRlci5lbnRpdHlBc3BlY3QuZ2V0VmFsaWRhdGlvbkVycm9ycyhcIk9yZGVyRGF0ZVwiKTtcclxuXHJcbiAgd2hpY2ggY2FuIGFsc28gYmUgZXhwcmVzc2VkIGFzXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgdmFyIG9yZGVyRGF0ZVByb3BlcnR5ID0gb3JkZXIuZW50aXR5VHlwZS5nZXRQcm9wZXJ0eShcIk9yZGVyRGF0ZVwiKTtcclxuICA+ICAgICAgdmFyIG9yZGVyRGF0ZUVycm9ycyA9IG9yZGVyLmVudGl0eUFzcGVjdC5nZXRWYWxpZGF0aW9uRXJyb3JzKG9yZGVyRGF0ZVByb3BlcnR5KTtcclxuICBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgZm9yIHdoaWNoIHZhbGlkYXRpb24gZXJyb3JzIHNob3VsZCBiZSByZXRyaWV2ZWQuXHJcbiAgSWYgb21pdHRlZCwgYWxsIG9mIHRoZSB2YWxpZGF0aW9uIGVycm9ycyBmb3IgdGhpcyBlbnRpdHkgd2lsbCBiZSByZXR1cm5lZC5cclxuICBAcmV0dXJuIEEgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMuXHJcbiAgKiovXHJcbiAgZ2V0VmFsaWRhdGlvbkVycm9ycyhwcm9wZXJ0eT86IERhdGFQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHN0cmluZykge1xyXG4gICAgYXNzZXJ0UGFyYW0ocHJvcGVydHksIFwicHJvcGVydHlcIikuaXNPcHRpb25hbCgpLmlzRW50aXR5UHJvcGVydHkoKS5vcigpLmlzU3RyaW5nKCkuY2hlY2soKTtcclxuICAgIGxldCByZXN1bHQgPSBjb3JlLmdldE93blByb3BlcnR5VmFsdWVzKHRoaXMuX3ZhbGlkYXRpb25FcnJvcnMpO1xyXG4gICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgIGxldCBwcm9wZXJ0eU5hbWUgPSB0eXBlb2YgKHByb3BlcnR5KSA9PT0gJ3N0cmluZycgPyBwcm9wZXJ0eSA6IHByb3BlcnR5Lm5hbWU7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKHZlOiBWYWxpZGF0aW9uRXJyb3IpIHtcclxuICAgICAgICByZXR1cm4gdmUucHJvcGVydHkgJiYgKHZlLnByb3BlcnR5Lm5hbWUgPT09IHByb3BlcnR5TmFtZSB8fCAocHJvcGVydHlOYW1lLmluZGV4T2YoXCIuXCIpICE9PSAtMSAmJiB2ZS5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBBZGRzIGEgdmFsaWRhdGlvbiBlcnJvci5cclxuICAqKi9cclxuICBhZGRWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IpIHtcclxuICAgIGFzc2VydFBhcmFtKHZhbGlkYXRpb25FcnJvciwgXCJ2YWxpZGF0aW9uRXJyb3JcIikuaXNJbnN0YW5jZU9mKFZhbGlkYXRpb25FcnJvcikuY2hlY2soKTtcclxuICAgIHRoaXMuX3Byb2Nlc3NWYWxpZGF0aW9uT3BBbmRQdWJsaXNoKGZ1bmN0aW9uICh0aGF0OiBhbnkpIHtcclxuICAgICAgdGhhdC5fYWRkVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25FcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVZhbGlkYXRpb25FcnJvcih2YWxpZGF0aW9uRXJyb3I6IFZhbGlkYXRpb25FcnJvcik6IHZvaWQ7XHJcbiAgcmVtb3ZlVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25LZXk6IHN0cmluZyk6IHZvaWQ7XHJcbiAgLyoqXHJcbiAgUmVtb3ZlcyBhIHZhbGlkYXRpb24gZXJyb3IuXHJcbiAgQHBhcmFtIHZhbGlkYXRpb25FcnJvck9yS2V5IC0gRWl0aGVyIGEgVmFsaWRhdGlvbkVycm9yIG9yIGEgVmFsaWRhdGlvbkVycm9yICdrZXknIHZhbHVlXHJcbiAgKiovXHJcbiAgcmVtb3ZlVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25FcnJvck9yS2V5OiBWYWxpZGF0aW9uRXJyb3IgfCBzdHJpbmcpIHtcclxuICAgIGFzc2VydFBhcmFtKHZhbGlkYXRpb25FcnJvck9yS2V5LCBcInZhbGlkYXRpb25FcnJvck9yS2V5XCIpLmlzU3RyaW5nKCkub3IoKS5pc0luc3RhbmNlT2YoVmFsaWRhdGlvbkVycm9yKS5vcigpLmlzSW5zdGFuY2VPZihWYWxpZGF0b3IpLmNoZWNrKCk7XHJcblxyXG4gICAgbGV0IGtleSA9ICh0eXBlb2YgKHZhbGlkYXRpb25FcnJvck9yS2V5KSA9PT0gXCJzdHJpbmdcIikgPyB2YWxpZGF0aW9uRXJyb3JPcktleSA6IHZhbGlkYXRpb25FcnJvck9yS2V5LmtleTtcclxuICAgIHRoaXMuX3Byb2Nlc3NWYWxpZGF0aW9uT3BBbmRQdWJsaXNoKGZ1bmN0aW9uICh0aGF0OiBhbnkpIHtcclxuICAgICAgdGhhdC5fcmVtb3ZlVmFsaWRhdGlvbkVycm9yKGtleSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJlbW92ZXMgYWxsIG9mIHRoZSB2YWxpZGF0aW9uIGVycm9ycyBmb3IgYSBzcGVjaWZpZWQgZW50aXR5XHJcbiAgKiovXHJcbiAgY2xlYXJWYWxpZGF0aW9uRXJyb3JzKCkge1xyXG4gICAgdGhpcy5fcHJvY2Vzc1ZhbGlkYXRpb25PcEFuZFB1Ymxpc2goZnVuY3Rpb24gKHRoYXQ6IGFueSkge1xyXG4gICAgICBjb3JlLm9iamVjdEZvckVhY2godGhhdC5fdmFsaWRhdGlvbkVycm9ycywgZnVuY3Rpb24gKGtleTogc3RyaW5nLCB2YWxFcnJvcjogVmFsaWRhdGlvbkVycm9yKSB7XHJcbiAgICAgICAgaWYgKHZhbEVycm9yKSB7XHJcbiAgICAgICAgICBkZWxldGUgdGhhdC5fdmFsaWRhdGlvbkVycm9yc1trZXldO1xyXG4gICAgICAgICAgdGhhdC5fcGVuZGluZ1ZhbGlkYXRpb25SZXN1bHQucmVtb3ZlZC5wdXNoKHZhbEVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGF0Lmhhc1ZhbGlkYXRpb25FcnJvcnMgPSAhY29yZS5pc0VtcHR5KHRoYXQuX3ZhbGlkYXRpb25FcnJvcnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGFuIFtbRW50aXR5S2V5XV0gZm9yIHRoZSBlbnRpdHkgcG9pbnRlZCB0byBieSB0aGUgc3BlY2lmaWVkIHNjYWxhciBOYXZpZ2F0aW9uUHJvcGVydHkuXHJcbiAgVGhpcyBvbmx5IHJldHVybnMgYW4gRW50aXR5S2V5IGlmIHRoZSBjdXJyZW50IGVudGl0eSBpcyBhICdjaGlsZCcgZW50aXR5IGFsb25nIHRoZSBzcGVjaWZpZWQgTmF2aWdhdGlvblByb3BlcnR5LiBcclxuICBpLmUuIGhhcyBhIHNpbmdsZSBwYXJlbnQuXHJcblxyXG4gIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHkgLSBUaGUgW1tOYXZpZ2F0aW9uUHJvcGVydHldXSAoIHBvaW50aW5nIHRvIGEgcGFyZW50KS4gXHJcbiAgQHJldHVybnMgRWl0aGVyIGEgcGFyZW50IEVudGl0eUtleSBpZiB0aGlzIGlzIGEgJ2NoaWxkJyBlbnRpdHkgb3IgbnVsbDsgIFxyXG4gICovXHJcbiAgZ2V0UGFyZW50S2V5KG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5KSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5KSByZXR1cm4gbnVsbDtcclxuICAgIC8vIFRPRE86IHJldmlldyB0aGlzIC0gbm90IHN1cmUgYWJvdXQgdGhlIGNvbW1lbnQuXHJcbiAgICAvLyBOYXZpZ2F0aW9uUHJvcGVydHkgZG9lc24ndCB5ZXQgZXhpc3RcclxuICAgIC8vIGFzc2VydFBhcmFtKG5hdmlnYXRpb25Qcm9wZXJ0eSwgXCJuYXZpZ2F0aW9uUHJvcGVydHlcIikuaXNJbnN0YW5jZU9mKE5hdmlnYXRpb25Qcm9wZXJ0eSkuY2hlY2soKTtcclxuICAgIGxldCBma05hbWVzID0gbmF2aWdhdGlvblByb3BlcnR5LmZvcmVpZ25LZXlOYW1lcztcclxuICAgIGlmIChma05hbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICBsZXQgZmtWYWx1ZXMgPSBma05hbWVzLm1hcChmdW5jdGlvbiAoZmtuKSB7XHJcbiAgICAgIHJldHVybiB0aGF0LmVudGl0eSEuZ2V0UHJvcGVydHkoZmtuKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ldyBFbnRpdHlLZXkobmF2aWdhdGlvblByb3BlcnR5LmVudGl0eVR5cGUsIGZrVmFsdWVzKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgYW5kIHRoZSBzdGF0aWMgZ2V0UHJvcGVydHlQYXRoVmFsdWUuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpZWQgRGF0YVByb3BlcnR5IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSBvciAncHJvcGVydHkgcGF0aCcuICBcclxuICAqKi9cclxuICBnZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5OiBzdHJpbmcgfCBEYXRhUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkpIHtcclxuICAgIGFzc2VydFBhcmFtKHByb3BlcnR5LCBcInByb3BlcnR5XCIpLmlzU3RyaW5nKCkub3IoKS5pc0VudGl0eVByb3BlcnR5KCkuY2hlY2soKTtcclxuICAgIGxldCB2YWx1ZTogYW55O1xyXG4gICAgaWYgKHR5cGVvZiAocHJvcGVydHkpID09PSAnc3RyaW5nJykge1xyXG4gICAgICBsZXQgcHJvcE5hbWVzID0gcHJvcGVydHkudHJpbSgpLnNwbGl0KFwiLlwiKTtcclxuICAgICAgbGV0IHByb3BOYW1lID0gcHJvcE5hbWVzLnNoaWZ0KCk7XHJcbiAgICAgIHZhbHVlID0gdGhpcy5lbnRpdHk7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUuZ2V0UHJvcGVydHkocHJvcE5hbWUpO1xyXG4gICAgICB3aGlsZSAocHJvcE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwcm9wTmFtZSA9IHByb3BOYW1lcy5zaGlmdCgpO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUuZ2V0UHJvcGVydHkocHJvcE5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIShwcm9wZXJ0eS5wYXJlbnRUeXBlIGluc3RhbmNlb2YgRW50aXR5VHlwZSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgdmFsaWRhdGVQcm9wZXJ0eSBtZXRob2QgZG9lcyBub3QgYWNjZXB0IGEgJ3Byb3BlcnR5JyBwYXJhbWV0ZXIgd2hvc2UgcGFyZW50VHlwZSBpcyBhIENvbXBsZXhUeXBlOyBcIiArXHJcbiAgICAgICAgICBcIlBhc3MgYSAncHJvcGVydHkgcGF0aCcgc3RyaW5nIGFzIHRoZSAncHJvcGVydHknIHBhcmFtZXRlciBpbnN0ZWFkIFwiKTtcclxuICAgICAgfVxyXG4gICAgICB2YWx1ZSA9IHRoaXMuZW50aXR5IS5nZXRQcm9wZXJ0eShwcm9wZXJ0eS5uYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIGludGVybmFsIG1ldGhvZHNcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfY2hlY2tPcGVyYXRpb24ob3BlcmF0aW9uTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5pc0JlaW5nU2F2ZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHBlcmZvcm0gYSAnXCIgKyBvcGVyYXRpb25OYW1lICsgXCInIG9uIGFuIGVudGl0eSB0aGF0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHNhdmVkXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gYWxsb3dzIGNoYWluaW5nXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9kZXRhY2goKSB7XHJcbiAgICB0aGlzLmVudGl0eUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5lbnRpdHlNYW5hZ2VyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5lbnRpdHlTdGF0ZSA9IEVudGl0eVN0YXRlLkRldGFjaGVkO1xyXG4gICAgdGhpcy5vcmlnaW5hbFZhbHVlcyA9IHt9O1xyXG4gICAgdGhpcy5fdmFsaWRhdGlvbkVycm9ycyA9IHt9O1xyXG4gICAgdGhpcy5oYXNWYWxpZGF0aW9uRXJyb3JzID0gZmFsc2U7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkLmNsZWFyKCk7XHJcbiAgICB0aGlzLnByb3BlcnR5Q2hhbmdlZC5jbGVhcigpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvLyBjYWxsZWQgZnJvbSBkZWZhdWx0SW50ZXJjZXB0b3IuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3ZhbGlkYXRlUHJvcGVydHkodmFsdWU6IGFueSwgY29udGV4dDogYW55KSB7XHJcbiAgICBsZXQgb2sgPSB0cnVlO1xyXG4gICAgdGhpcy5fcHJvY2Vzc1ZhbGlkYXRpb25PcEFuZFB1Ymxpc2goZnVuY3Rpb24gKHRoYXQ6IGFueSkge1xyXG4gICAgICBjb250ZXh0LnByb3BlcnR5LmdldEFsbFZhbGlkYXRvcnMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWxpZGF0b3I6IFZhbGlkYXRvcikge1xyXG4gICAgICAgIG9rID0gdmFsaWRhdGUodGhhdCwgdmFsaWRhdG9yLCB2YWx1ZSwgY29udGV4dCkgJiYgb2s7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gb2s7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfcHJvY2Vzc1ZhbGlkYXRpb25PcEFuZFB1Ymxpc2godmFsaWRhdGlvbkZuOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdCkge1xyXG4gICAgICAvLyBvbmx5IHRvcCBsZXZlbCBwcm9jZXNzVmFsaWRhdGlvbnMgY2FsbCBwdWJsaXNoZXNcclxuICAgICAgdmFsaWRhdGlvbkZuKHRoaXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdCA9IHsgZW50aXR5OiB0aGlzLmVudGl0eSwgYWRkZWQ6IFtdLCByZW1vdmVkOiBbXSB9O1xyXG4gICAgICAgIHZhbGlkYXRpb25Gbih0aGlzKTtcclxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1ZhbGlkYXRpb25SZXN1bHQuYWRkZWQubGVuZ3RoID4gMCB8fCB0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdC5yZW1vdmVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc0NoYW5nZWQucHVibGlzaCh0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAvLyB0aGlzIG1pZ2h0IGJlIGEgZGV0YWNoZWQgZW50aXR5IGhlbmNlIHRoZSBndWFyZCBiZWxvdy5cclxuICAgICAgICAgIHRoaXMuZW50aXR5TWFuYWdlciAmJiB0aGlzLmVudGl0eU1hbmFnZXIudmFsaWRhdGlvbkVycm9yc0NoYW5nZWQucHVibGlzaCh0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdCA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgLy8gVE9ETzogYWRkL3VzZSBhIFZhbGlkYXRpb25FcnJvciB0eXBlXHJcbiAgX2FkZFZhbGlkYXRpb25FcnJvcih2YWxpZGF0aW9uRXJyb3I6IGFueSkge1xyXG4gICAgdGhpcy5fdmFsaWRhdGlvbkVycm9yc1t2YWxpZGF0aW9uRXJyb3Iua2V5XSA9IHZhbGlkYXRpb25FcnJvcjtcclxuICAgIHRoaXMuaGFzVmFsaWRhdGlvbkVycm9ycyA9IHRydWU7XHJcbiAgICB0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdC5hZGRlZC5wdXNoKHZhbGlkYXRpb25FcnJvcik7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfcmVtb3ZlVmFsaWRhdGlvbkVycm9yKGtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgdmFsRXJyb3IgPSB0aGlzLl92YWxpZGF0aW9uRXJyb3JzW2tleV07XHJcbiAgICBpZiAodmFsRXJyb3IpIHtcclxuICAgICAgZGVsZXRlIHRoaXMuX3ZhbGlkYXRpb25FcnJvcnNba2V5XTtcclxuICAgICAgdGhpcy5oYXNWYWxpZGF0aW9uRXJyb3JzID0gIWNvcmUuaXNFbXB0eSh0aGlzLl92YWxpZGF0aW9uRXJyb3JzKTtcclxuICAgICAgdGhpcy5fcGVuZGluZ1ZhbGlkYXRpb25SZXN1bHQucmVtb3ZlZC5wdXNoKHZhbEVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5CcmVlemVFdmVudC5idWJibGVFdmVudChFbnRpdHlBc3BlY3QucHJvdG90eXBlLCBmdW5jdGlvbiAoKSB7XHJcbiAgcmV0dXJuIHRoaXMuZW50aXR5TWFuYWdlcjtcclxufSk7XHJcblxyXG5mdW5jdGlvbiByZWplY3RDaGFuZ2VzQ29yZSh0YXJnZXQ6IGFueSkge1xyXG4gIGxldCBhc3BlY3QgPSB0YXJnZXQuZW50aXR5QXNwZWN0IHx8IHRhcmdldC5jb21wbGV4QXNwZWN0O1xyXG4gIGxldCBzdHlwZSA9IHRhcmdldC5lbnRpdHlUeXBlIHx8IHRhcmdldC5jb21wbGV4VHlwZTtcclxuICBsZXQgb3JpZ2luYWxWYWx1ZXMgPSBhc3BlY3Qub3JpZ2luYWxWYWx1ZXM7XHJcbiAgZm9yIChsZXQgcHJvcE5hbWUgaW4gb3JpZ2luYWxWYWx1ZXMpIHtcclxuICAgIHRhcmdldC5zZXRQcm9wZXJ0eShwcm9wTmFtZSwgb3JpZ2luYWxWYWx1ZXNbcHJvcE5hbWVdKTtcclxuICB9XHJcbiAgc3R5cGUuY29tcGxleFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoY3A6IGFueSkge1xyXG4gICAgbGV0IGNvcyA9IHRhcmdldC5nZXRQcm9wZXJ0eShjcC5uYW1lKTtcclxuICAgIGlmIChjcC5pc1NjYWxhcikge1xyXG4gICAgICByZWplY3RDaGFuZ2VzQ29yZShjb3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29zLl9yZWplY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGNvcy5mb3JFYWNoKHJlamVjdENoYW5nZXNDb3JlKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlRnJvbVJlbGF0aW9ucyhlbnRpdHk6IEVudGl0eSwgZW50aXR5U3RhdGU6IEVudGl0eVN0YXRlKSB7XHJcbiAgLy8gcmVtb3ZlIHRoaXMgZW50aXR5IGZyb20gYW55IGNvbGxlY3Rpb25zLlxyXG4gIC8vIG1hcmsgdGhlIGVudGl0eSBkZWxldGVkIG9yIGRldGFjaGVkXHJcblxyXG4gIGxldCBpc0RlbGV0ZWQgPSBlbnRpdHlTdGF0ZS5pc0RlbGV0ZWQoKTtcclxuICBpZiAoaXNEZWxldGVkKSB7XHJcbiAgICByZW1vdmVGcm9tUmVsYXRpb25zQ29yZShlbnRpdHkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb3JlLnVzaW5nKGVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlciEsIFwiaXNMb2FkaW5nXCIsIHRydWUsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmVtb3ZlRnJvbVJlbGF0aW9uc0NvcmUoZW50aXR5KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlRnJvbVJlbGF0aW9uc0NvcmUoZW50aXR5OiBFbnRpdHkpIHtcclxuICBlbnRpdHkuZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChucCkge1xyXG4gICAgbGV0IGludmVyc2VOcCA9IG5wLmludmVyc2U7XHJcbiAgICBsZXQgbnBWYWx1ZSA9IGVudGl0eS5nZXRQcm9wZXJ0eShucC5uYW1lKTtcclxuICAgIGlmIChucC5pc1NjYWxhcikge1xyXG4gICAgICBpZiAobnBWYWx1ZSkge1xyXG4gICAgICAgIGlmIChpbnZlcnNlTnApIHtcclxuICAgICAgICAgIGlmIChpbnZlcnNlTnAuaXNTY2FsYXIpIHtcclxuICAgICAgICAgICAgbnBWYWx1ZS5zZXRQcm9wZXJ0eShpbnZlcnNlTnAubmFtZSwgbnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IG5wVmFsdWUuZ2V0UHJvcGVydHkoaW52ZXJzZU5wLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb3JlLmFycmF5UmVtb3ZlSXRlbShjb2xsZWN0aW9uLCBlbnRpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVudGl0eS5zZXRQcm9wZXJ0eShucC5uYW1lLCBudWxsKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGludmVyc2VOcCAhPSBudWxsKSB7XHJcbiAgICAgICAgLy8gbnBWYWx1ZSBpcyBhIGxpdmUgbGlzdCBzbyB3ZSBuZWVkIHRvIGNvcHkgaXQgZmlyc3QuXHJcbiAgICAgICAgbnBWYWx1ZS5zbGljZSgwKS5mb3JFYWNoKCh2OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChpbnZlcnNlTnAhLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgICAgIHYuc2V0UHJvcGVydHkoaW52ZXJzZU5wIS5uYW1lLCBudWxsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IG1hbnkgdG8gbWFueSAtIG5vdCB5ZXQgaGFuZGxlZC5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBub3cgY2xlYXIgaXQuXHJcbiAgICAgIG5wVmFsdWUubGVuZ3RoID0gMDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbn1cclxuXHJcbi8vIG5vdGUgZW50aXR5QXNwZWN0IG9ubHkgLSAoIG5vIGNvbXBsZXggYXNwZWN0IGFsbG93ZWQgb24gdGhlIGNhbGwpLlxyXG5mdW5jdGlvbiB2YWxpZGF0ZShlbnRpdHlBc3BlY3Q6IEVudGl0eUFzcGVjdCwgdmFsaWRhdG9yOiBWYWxpZGF0b3IsIHZhbHVlOiBhbnksIGNvbnRleHQ/OiBhbnkpIHtcclxuICBsZXQgdmUgPSB2YWxpZGF0b3IudmFsaWRhdGUodmFsdWUsIGNvbnRleHQpO1xyXG4gIGlmICh2ZSkge1xyXG4gICAgZW50aXR5QXNwZWN0Ll9hZGRWYWxpZGF0aW9uRXJyb3IodmUpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQga2V5ID0gVmFsaWRhdGlvbkVycm9yLmdldEtleSh2YWxpZGF0b3IsIGNvbnRleHQgPyBjb250ZXh0LnByb3BlcnR5TmFtZSA6IG51bGwpO1xyXG4gICAgZW50aXR5QXNwZWN0Ll9yZW1vdmVWYWxpZGF0aW9uRXJyb3Ioa2V5KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLy8gY29JbmRleCBpcyBvbmx5IHVzZWQgd2hlcmUgdGFyZ2V0IGlzIGEgY29tcGxleCBvYmplY3QgdGhhdCBpcyBwYXJ0IG9mIGFuIGFycmF5IG9mIGNvbXBsZXggb2JqZWN0c1xyXG4vLyBpbiB3aGljaCBjYXNlIGN0SW5kZXggaXMgdGhlIGluZGV4IG9mIHRoZSB0YXJnZXQgd2l0aGluIHRoZSBhcnJheS5cclxuZnVuY3Rpb24gdmFsaWRhdGVUYXJnZXQodGFyZ2V0OiBhbnksIGNvSW5kZXg/OiBudW1iZXIpIHtcclxuICBsZXQgb2sgPSB0cnVlO1xyXG4gIGxldCBzdHlwZSA9IHRhcmdldC5lbnRpdHlUeXBlIHx8IHRhcmdldC5jb21wbGV4VHlwZTtcclxuICBsZXQgYXNwZWN0ID0gdGFyZ2V0LmVudGl0eUFzcGVjdCB8fCB0YXJnZXQuY29tcGxleEFzcGVjdDtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gdGFyZ2V0LmVudGl0eUFzcGVjdCB8fCB0YXJnZXQuY29tcGxleEFzcGVjdC5nZXRFbnRpdHlBc3BlY3QoKTtcclxuICBsZXQgY29udGV4dCA9IDxhbnk+eyBlbnRpdHk6IGVudGl0eUFzcGVjdC5lbnRpdHkgfTtcclxuICBpZiAoY29JbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICBjb250ZXh0LmluZGV4ID0gY29JbmRleDtcclxuICB9XHJcblxyXG4gIHN0eXBlLmdldFByb3BlcnRpZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChwOiBhbnkpIHtcclxuICAgIGxldCB2YWx1ZSA9IHRhcmdldC5nZXRQcm9wZXJ0eShwLm5hbWUpO1xyXG4gICAgbGV0IHZhbGlkYXRvcnMgPSBwLmdldEFsbFZhbGlkYXRvcnMoKTtcclxuICAgIGlmICh2YWxpZGF0b3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29udGV4dC5wcm9wZXJ0eSA9IHA7XHJcbiAgICAgIGNvbnRleHQucHJvcGVydHlOYW1lID0gYXNwZWN0LmdldFByb3BlcnR5UGF0aChwLm5hbWUpO1xyXG4gICAgICBvayA9IGVudGl0eUFzcGVjdC5fdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZSwgY29udGV4dCkgJiYgb2s7XHJcbiAgICB9XHJcbiAgICBpZiAocC5pc0NvbXBsZXhQcm9wZXJ0eSkge1xyXG4gICAgICBpZiAocC5pc1NjYWxhcikge1xyXG4gICAgICAgIG9rID0gdmFsaWRhdGVUYXJnZXQodmFsdWUpICYmIG9rO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9rID0gdmFsdWUucmVkdWNlKGZ1bmN0aW9uIChwdjogYW55LCBjdjogYW55LCBpeDogbnVtYmVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVUYXJnZXQoY3YsIGl4KSAmJiBwdjtcclxuICAgICAgICB9LCBvayk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHRoZW4gdGFyZ2V0IGxldmVsXHJcbiAgc3R5cGUuZ2V0QWxsVmFsaWRhdG9ycygpLmZvckVhY2goZnVuY3Rpb24gKHZhbGlkYXRvcjogVmFsaWRhdG9yKSB7XHJcbiAgICBvayA9IHZhbGlkYXRlKGVudGl0eUFzcGVjdCwgdmFsaWRhdG9yLCB0YXJnZXQpICYmIG9rO1xyXG4gIH0pO1xyXG4gIHJldHVybiBvaztcclxufVxyXG5cclxuLyoqXHJcbkFuIENvbXBsZXhBc3BlY3QgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IGNvbXBsZXggb2JqZWN0IGluc3RhbmNlIGFuZCBpcyBhY2Nlc3NlZCB2aWEgdGhlIGNvbXBsZXggb2JqZWN0J3MgJ2NvbXBsZXhBc3BlY3QnIHByb3BlcnR5LlxyXG5cclxuVGhlIENvbXBsZXhBc3BlY3QgaXRzZWxmIHByb3ZpZGVzIHByb3BlcnRpZXMgdG8gZGV0ZXJtaW5lIHRoZSBwYXJlbnQgb2JqZWN0LCBwYXJlbnQgcHJvcGVydHkgYW5kIG9yaWdpbmFsIHZhbHVlcyBmb3IgdGhlIGNvbXBsZXggb2JqZWN0LlxyXG5cclxuQSBDb21wbGV4QXNwZWN0IHdpbGwgYWxtb3N0IG5ldmVyIG5lZWQgdG8gYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkuIFlvdSB3aWxsIHVzdWFsbHkgZ2V0IGFuIENvbXBsZXhBc3BlY3QgYnkgYWNjZXNzaW5nXHJcbmFuIGVudGl0aWVzICdjb21wbGV4QXNwZWN0JyBwcm9wZXJ0eS4gIFRoaXMgcHJvcGVydHkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGF0dGFjaGVkIHdoZW4gYW4gY29tcGxleCBvYmplY3QgaXMgY3JlYXRlZCBhcyBwYXJ0IG9mIGFuXHJcbmVudGl0eSB2aWEgZWl0aGVyIGEgcXVlcnksIGltcG9ydCBvciBFbnRpdHlNYW5hZ2VyLmNyZWF0ZUVudGl0eSBjYWxsLlxyXG4+ICAgICAgLy8gYXNzdW1lIGFkZHJlc3MgaXMgYSBjb21wbGV4IHByb3BlcnR5IG9uIHRoZSAnQ3VzdG9tZXInIHR5cGVcclxuPiAgICAgIHZhciBhc3BlY3QgPSBhQ3VzdG9tZXIuYWRkcmVzcy5jb21wbGV4QXNwZWN0O1xyXG4+ICAgICAgLy8gYUN1c3RvbWVyID09PSBhc3BlY3QucGFyZW50O1xyXG4qKi9cclxuZXhwb3J0IGNsYXNzIENvbXBsZXhBc3BlY3Qge1xyXG5cclxuICAvKiogVGhlIGNvbXBsZXggb2JqZWN0IHRoYXQgdGhpcyBhc3BlY3QgaXMgYXNzb2NpYXRlZCB3aXRoLiBfX1JlYWQgT25seV9fICovXHJcbiAgY29tcGxleE9iamVjdDogQ29tcGxleE9iamVjdDtcclxuICAvKiogVGhlICdvcmlnaW5hbCB2YWx1ZXMnIG9mIHRoaXMgY29tcGxleCBvYmplY3Qgd2hlcmUgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gdGhlICdjdXJyZW50IHZhbHVlcycuXHJcbiAgVGhpcyBpcyBhIG1hcCB3aGVyZSB0aGUga2V5IGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgdGhlIHZhbHVlIGlzIHRoZSAnb3JpZ2luYWwgdmFsdWUnIG9mIHRoZSBwcm9wZXJ0eS5cclxuICBfX1JlYWQgT25seV9fICovXHJcbiAgb3JpZ2luYWxWYWx1ZXM6IHt9O1xyXG4gIC8qKiBUaGUgcGFyZW50IG9iamVjdCB0aGF0IHRvIHdoaWNoIHRoaXMgYXNwZWN0IGJlbG9uZ3M7IHRoaXMgd2lsbCBlaXRoZXIgYmUgYW4gZW50aXR5IG9yIGFub3RoZXIgY29tcGxleCBvYmplY3QuIF9fUmVhZCBPbmx5X18gKi9cclxuICBwYXJlbnQ/OiBTdHJ1Y3R1cmFsT2JqZWN0O1xyXG4gIC8qKiBUaGUgW1tEYXRhUHJvcGVydHldXSBvbiB0aGUgJ3BhcmVudCcgdGhhdCBjb250YWlucyB0aGlzIGNvbXBsZXggb2JqZWN0LiBfX1JlYWQgT25seV9fICovXHJcbiAgcGFyZW50UHJvcGVydHk/OiBEYXRhUHJvcGVydHk7XHJcbiAgZXh0cmFNZXRhZGF0YT86IGFueTtcclxuXHJcbiAgLyoqIFlvdSB3aWxsIHJhcmVseSwgaWYgZXZlciwgY3JlYXRlIGEgQ29tcGxleEFzcGVjdCBkaXJlY3RseS4gKi9cclxuICBjb25zdHJ1Y3Rvcihjb21wbGV4T2JqZWN0OiBDb21wbGV4T2JqZWN0LCBwYXJlbnQ6IFN0cnVjdHVyYWxPYmplY3QsIHBhcmVudFByb3BlcnR5OiBEYXRhUHJvcGVydHkpIHtcclxuICAgIGlmICghY29tcGxleE9iamVjdCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgIENvbXBsZXhBc3BlY3QgY3RvciByZXF1aXJlcyBhbiBlbnRpdHkgYXMgaXRzIG9ubHkgYXJndW1lbnQuXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXBsZXhPYmplY3QuY29tcGxleEFzcGVjdCkge1xyXG4gICAgICByZXR1cm4gY29tcGxleE9iamVjdC5jb21wbGV4QXNwZWN0O1xyXG4gICAgfVxyXG4gICAgLy8gaWYgY2FsbGVkIHdpdGhvdXQgbmV3XHJcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29tcGxleEFzcGVjdCkpIHtcclxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4QXNwZWN0KGNvbXBsZXhPYmplY3QsIHBhcmVudCwgcGFyZW50UHJvcGVydHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVudGl0eVR5cGUgc2hvdWxkIGFscmVhZHkgYmUgb24gdGhlIGVudGl0eSBmcm9tICd3YXRjaCdcclxuICAgIHRoaXMuY29tcGxleE9iamVjdCA9IGNvbXBsZXhPYmplY3Q7XHJcbiAgICBjb21wbGV4T2JqZWN0LmNvbXBsZXhBc3BlY3QgPSB0aGlzO1xyXG5cclxuICAgIC8vIFRPRE86IGtlZXAgcHVibGljIG9yIG5vdD9cclxuICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMgPSB7fTtcclxuXHJcbiAgICAvLyBpZiBhIHN0YW5kYWxvbmUgY29tcGxleE9iamVjdFxyXG4gICAgaWYgKHBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG4gICAgICB0aGlzLnBhcmVudFByb3BlcnR5ID0gcGFyZW50UHJvcGVydHk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbXBsZXhUeXBlID0gY29tcGxleE9iamVjdC5jb21wbGV4VHlwZTtcclxuICAgIGlmICghY29tcGxleFR5cGUpIHtcclxuICAgICAgbGV0IHR5cGVOYW1lID0gY29tcGxleE9iamVjdC5wcm90b3R5cGUuXyR0eXBlTmFtZTtcclxuICAgICAgaWYgKCF0eXBlTmFtZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZW50aXR5IGlzIG5vdCByZWdpc3RlcmVkIGFzIGEgdmFsaWQgQ29tcGxleFR5cGVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgZm9yIHRoaXMgY29tcGxleFR5cGUgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZDogXCIgKyB0eXBlTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBjb21wbGV4Q3RvciA9IGNvbXBsZXhUeXBlLmdldEN0b3IoKTtcclxuICAgIGNvbmZpZy5pbnRlcmZhY2VSZWdpc3RyeS5tb2RlbExpYnJhcnkuZ2V0RGVmYXVsdEluc3RhbmNlKCkuc3RhcnRUcmFja2luZyhjb21wbGV4T2JqZWN0LCBjb21wbGV4Q3Rvci5wcm90b3R5cGUpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSBFbnRpdHlBc3BlY3QgZm9yIHRoZSB0b3AgbGV2ZWwgZW50aXR5IHRoYXQgY29udGFpbnMgdGhpcyBjb21wbGV4IG9iamVjdC5cclxuICAqKi9cclxuICBnZXRFbnRpdHlBc3BlY3QoKSB7XHJcbiAgICBsZXQgcGFyZW50ID0gPGFueT50aGlzLnBhcmVudDtcclxuICAgIGlmICghcGFyZW50KSByZXR1cm4gbmV3IEVudGl0eUFzcGVjdCgpO1xyXG4gICAgbGV0IGVudGl0eUFzcGVjdCA9IHBhcmVudC5lbnRpdHlBc3BlY3Q7XHJcbiAgICB3aGlsZSAocGFyZW50ICYmICFlbnRpdHlBc3BlY3QpIHtcclxuICAgICAgcGFyZW50ID0gcGFyZW50LmNvbXBsZXhBc3BlY3QgJiYgcGFyZW50LmNvbXBsZXhBc3BlY3QucGFyZW50O1xyXG4gICAgICBlbnRpdHlBc3BlY3QgPSBwYXJlbnQgJiYgcGFyZW50LmVudGl0eUFzcGVjdDtcclxuICAgIH1cclxuICAgIHJldHVybiBlbnRpdHlBc3BlY3QgfHwgbmV3IEVudGl0eUFzcGVjdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqICBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIC8vIFRPRE86IHJlbmFtZSAtIGFuZCB1c2UgJ18nOyB1c2VkIG9uIGJvdGggRW50aXR5QXNwZWN0IGFuZCBDb21wbGV4QXNwZWN0IGZvciBwb2x5bW9ycGhpYyByZWFzb25zLlxyXG4gIGdldFByb3BlcnR5UGF0aChwcm9wTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGFyZW50ID0gPGFueT50aGlzLnBhcmVudDtcclxuICAgIGlmICghcGFyZW50KSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBhc3BlY3QgPSBwYXJlbnQuY29tcGxleEFzcGVjdCB8fCBwYXJlbnQuZW50aXR5QXNwZWN0O1xyXG4gICAgcmV0dXJuIGFzcGVjdC5nZXRQcm9wZXJ0eVBhdGgodGhpcy5wYXJlbnRQcm9wZXJ0eSEubmFtZSArIFwiLlwiICsgcHJvcE5hbWUpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsZWFyT3JpZ2luYWxWYWx1ZXModGFyZ2V0OiBhbnkpIHtcclxuICBsZXQgYXNwZWN0ID0gdGFyZ2V0LmVudGl0eUFzcGVjdCB8fCB0YXJnZXQuY29tcGxleEFzcGVjdDtcclxuICBhc3BlY3Qub3JpZ2luYWxWYWx1ZXMgPSB7fTtcclxuICBsZXQgc3R5cGUgPSB0YXJnZXQuZW50aXR5VHlwZSB8fCB0YXJnZXQuY29tcGxleFR5cGU7XHJcbiAgc3R5cGUuY29tcGxleFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoY3A6IGFueSkge1xyXG4gICAgbGV0IGNvcyA9IHRhcmdldC5nZXRQcm9wZXJ0eShjcC5uYW1lKTtcclxuICAgIGlmIChjcC5pc1NjYWxhcikge1xyXG4gICAgICBjbGVhck9yaWdpbmFsVmFsdWVzKGNvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb3MuX2FjY2VwdENoYW5nZXMoKTtcclxuICAgICAgY29zLmZvckVhY2goY2xlYXJPcmlnaW5hbFZhbHVlcyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
806
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFzcGVjdC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWFzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFpRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBeUM3Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFzRnZCLHdCQUF3QjtJQUN4QixZQUFZLE1BQWU7UUFFekIsd0JBQXdCO1FBQ3hCLHlDQUF5QztRQUN6QyxxQ0FBcUM7UUFDckMsSUFBSTtRQXVLTjs7Ozs7O1dBTUc7UUFDSCxpQkFBWSxHQUFHO1lBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUM7UUFHRjs7Ozs7O1dBTUc7UUFDSCxnQkFBVyxHQUFHO1lBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7UUFFRjs7Ozs7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ZyB9IGZyb20gJy4vY29uZmlnJztcclxuaW1wb3J0IHsgQnJlZXplRXZlbnQgfSBmcm9tICcuL2V2ZW50JztcclxuaW1wb3J0IHsgYXNzZXJ0UGFyYW0gfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlICB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5VHlwZSwgQ29tcGxleFR5cGUsIERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5R3JvdXAgfSBmcm9tICcuL2VudGl0eS1ncm91cCc7XHJcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIFF1ZXJ5UmVzdWx0LCBRdWVyeUVycm9yQ2FsbGJhY2ssIFF1ZXJ5U3VjY2Vzc0NhbGxiYWNrIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi92YWxpZGF0ZSc7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5IH0gZnJvbSAnLi9lbnRpdHktcXVlcnknO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHkge1xyXG4gIGVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0O1xyXG4gIGVudGl0eVR5cGU6IEVudGl0eVR5cGU7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIGdldFByb3BlcnR5Pyhwcm9wOiBzdHJpbmcpOiBhbnk7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHNldFByb3BlcnR5Pyhwcm9wOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RvdHlwZT86IHsgXyR0eXBlTmFtZTogc3RyaW5nIH07XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyRlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV4T2JqZWN0IHtcclxuICBjb21wbGV4QXNwZWN0OiBDb21wbGV4QXNwZWN0O1xyXG4gIGNvbXBsZXhUeXBlOiBDb21wbGV4VHlwZTtcclxuICBnZXRQcm9wZXJ0eT8ocHJvcDogc3RyaW5nKTogYW55O1xyXG4gIHNldFByb3BlcnR5Pyhwcm9wOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RvdHlwZT86IHsgXyR0eXBlTmFtZTogc3RyaW5nIH07XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFN0cnVjdHVyYWxPYmplY3QgPSBFbnRpdHkgfCBDb21wbGV4T2JqZWN0O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3Mge1xyXG4gIGVudGl0eTogRW50aXR5O1xyXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nIHwgbnVsbDtcclxuICBwYXJlbnQ/OiBTdHJ1Y3R1cmFsT2JqZWN0O1xyXG4gIHByb3BlcnR5PzogRW50aXR5UHJvcGVydHk7XHJcbiAgb2xkVmFsdWU/OiBhbnk7XHJcbiAgbmV3VmFsdWU/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3Mge1xyXG4gIGVudGl0eTogRW50aXR5O1xyXG4gIGFkZGVkOiBWYWxpZGF0aW9uRXJyb3JbXTtcclxuICByZW1vdmVkOiBWYWxpZGF0aW9uRXJyb3JbXTtcclxufVxyXG5cclxuLyoqXHJcbkFuIEVudGl0eUFzcGVjdCBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGggZXZlcnkgYXR0YWNoZWQgZW50aXR5IGFuZCBpcyBhY2Nlc3NlZCB2aWEgdGhlIGVudGl0eSdzICdlbnRpdHlBc3BlY3QnIHByb3BlcnR5LlxyXG5cclxuVGhlIEVudGl0eUFzcGVjdCBpdHNlbGYgcHJvdmlkZXMgcHJvcGVydGllcyB0byBkZXRlcm1pbmUgYW5kIG1vZGlmeSB0aGUgRW50aXR5U3RhdGUgb2YgdGhlIGVudGl0eSBhbmQgaGFzIG1ldGhvZHNcclxudGhhdCBwcm92aWRlIGEgdmFyaWV0eSBvZiBzZXJ2aWNlcyBpbmNsdWRpbmcgdmFsaWRhdGlvbiBhbmQgY2hhbmdlIHRyYWNraW5nLlxyXG5cclxuQW4gRW50aXR5QXNwZWN0IHdpbGwgYWxtb3N0IG5ldmVyIG5lZWQgdG8gYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkuIFlvdSB3aWxsIHVzdWFsbHkgZ2V0IGFuIEVudGl0eUFzcGVjdCBieSBhY2Nlc3NpbmdcclxuYW4gZW50aXRpZXMgJ2VudGl0eUFzcGVjdCcgcHJvcGVydHkuICBUaGlzIHByb3BlcnR5IHdpbGwgYmUgYXV0b21hdGljYWxseSBhdHRhY2hlZCB3aGVuIGFuIGVudGl0eSBpcyBjcmVhdGVkIHZpYSBlaXRoZXJcclxuYSBxdWVyeSwgaW1wb3J0IG9yIFtbRW50aXR5TWFuYWdlci5jcmVhdGVFbnRpdHldXSBjYWxsLlxyXG4+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4+ICAgICAgdmFyIGFzcGVjdCA9IG9yZGVyLmVudGl0eUFzcGVjdDtcclxuPiAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBhc3BlY3QuZW50aXR5U3RhdGU7XHJcblxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIEVudGl0eUFzcGVjdCB7XHJcbiAgLyoqIFRoZSBFbnRpdHkgdGhhdCB0aGlzIGFzcGVjdCBpcyBhc3NvY2lhdGVkIHdpdGguIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIGVudGl0eT86IEVudGl0eTtcclxuICAvKiogVGhlIFtbRW50aXR5TWFuYWdlcl1dIHRoYXQgY29udGFpbnMgdGhpcyBlbnRpdHkuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgZW50aXR5TWFuYWdlcj86IEVudGl0eU1hbmFnZXI7XHJcbiAgLyoqICBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIGVudGl0eUdyb3VwPzogRW50aXR5R3JvdXA7XHJcbiAgLyoqIFRoZSBbW0VudGl0eVN0YXRlXV0gb2YgdGhpcyBlbnRpdHkuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgZW50aXR5U3RhdGU6IEVudGl0eVN0YXRlO1xyXG4gIC8qKiAgIFdoZXRoZXIgdGhpcyBlbnRpdHkgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2F2ZWQuIF9fUmVhZCBPbmx5X18gKi9cclxuICBpc0JlaW5nU2F2ZWQ6IGJvb2xlYW47XHJcbiAgLyoqIFRoZSAnb3JpZ2luYWwgdmFsdWVzJyBvZiB0aGlzIGVudGl0eSB3aGVyZSB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgJ2N1cnJlbnQgdmFsdWVzJy5cclxuICBUaGlzIGlzIGEgbWFwIHdoZXJlIHRoZSBrZXkgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCB0aGUgdmFsdWUgaXMgdGhlICdvcmlnaW5hbCB2YWx1ZScgb2YgdGhlIHByb3BlcnR5LiAqL1xyXG4gIG9yaWdpbmFsVmFsdWVzOiB7fTtcclxuICAvKiogIFdoZXRoZXIgdGhpcyBlbnRpdHkgaGFzIGFueSB2YWxpZGF0aW9uIGVycm9ycy4gX19SZWFkIE9ubHlfXyAqL1xyXG4gIGhhc1ZhbGlkYXRpb25FcnJvcnM6IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdGhpcyBlbnRpdHkgaGFzIGEgdGVtcG9yYXJ5IFtbRW50aXR5S2V5XV0uICovXHJcbiAgaGFzVGVtcEtleTogYm9vbGVhbjtcclxuICAvKiogV2hldGhlciB0aGlzIGVudGl0eSB3YXMgY3JlYXRlZCBieSBiZWluZyBsb2FkZWQgZnJvbSB0aGUgZGF0YWJhc2UgKi9cclxuICB3YXNMb2FkZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBFeHRyYSBtZXRhZGF0YSBhYm91dCB0aGlzIGVudGl0eSBzdWNoIGFzIHRoZSBlbnRpdHkncyBldGFnLlxyXG4gIFlvdSBtYXkgZXh0ZW5kIHRoaXMgb2JqZWN0IHdpdGggeW91ciBvd24gbWV0YWRhdGEgaW5mb3JtYXRpb24uXHJcbiAgQnJlZXplIChkZSlzZXJpYWxpemVzIHRoaXMgb2JqZWN0IHdoZW4gaW1wb3J0aW5nL2V4cG9ydGluZyB0aGUgZW50aXR5LiAqKi9cclxuICBleHRyYU1ldGFkYXRhPzogYW55O1xyXG4gIC8qKlxyXG4gIEEgW1tCcmVlemVFdmVudF1dIHRoYXQgZmlyZXMgd2hlbmV2ZXIgYW55IG9mIHRoZSB2YWxpZGF0aW9uIGVycm9ycyBvbiB0aGlzIGVudGl0eSBjaGFuZ2UuXHJcbiAgTm90ZSB0aGF0IHRoaXMgbWlnaHQgYmUgdGhlIHJlbW92YWwgb2YgYW4gZXJyb3Igd2hlbiBzb21lIGRhdGEgb24gdGhlIGVudGl0eSBpcyBmaXhlZC5cclxuICBAZXZlbnRBcmdzIC0gXHJcbiAgICAtIGVudGl0eSAtIFRoZSBlbnRpdHkgb24gd2hpY2ggdGhlIHZhbGlkYXRpb24gZXJyb3JzIGFyZSBiZWluZyBhZGRlZCBvciByZW1vdmVkLlxyXG4gICAgLSBhZGRlZCAtIEFuIGFycmF5IGNvbnRhaW5pbmcgYW55IG5ld2x5IGFkZGVkIFtbVmFsaWRhdGlvbkVycm9yXV1zXHJcbiAgICAtIHJlbW92ZWQgLSBBbiBhcnJheSBjb250YWluaW5nIGFueSBuZXdseSByZW1vdmVkIFtbVmFsaWRhdGlvbkVycm9yXV1zLiBUaGlzIGlzIHRob3NlXHJcbiAgICAgIGVycm9ycyB0aGF0IGhhdmUgYmVlbiAnZml4ZWQnLlxyXG5cclxuPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC52YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZC5zdWJzY3JpYmUoXHJcbj4gICAgICBmdW5jdGlvbiAodmFsaWRhdGlvbkNoYW5nZUFyZ3MpIHtcclxuPiAgICAgICAgICAvLyB0aGlzIGNvZGUgd2lsbCBiZSBleGVjdXRlZCBhbnl0aW1lIGEgcHJvcGVydHkgdmFsdWUgY2hhbmdlcyBvbiB0aGUgJ29yZGVyJyBlbnRpdHkuXHJcbj4gICAgICAgICAgdmFyIGVudGl0eSA9PSB2YWxpZGF0aW9uQ2hhbmdlQXJncy5lbnRpdHk7IC8vIE5vdGU6IGVudGl0eSA9PT0gb3JkZXJcclxuPiAgICAgICAgICB2YXIgZXJyb3JzQWRkZWQgPSB2YWxpZGF0aW9uQ2hhbmdlQXJncy5hZGRlZDtcclxuPiAgICAgICAgICB2YXIgZXJyb3JzQ2xlYXJlZCA9IHZhbGlkYXRpb25DaGFuZ2VBcmdzLnJlbW92ZWQ7XHJcbj4gICAgICB9KTtcclxuICBAZXZlbnRcclxuICAqKi9cclxuICB2YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZDogQnJlZXplRXZlbnQ8VmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3M+O1xyXG4gIC8qKlxyXG4gIEEgW1tCcmVlemVFdmVudF1dIHRoYXQgZmlyZXMgd2hlbmV2ZXIgYSB2YWx1ZSBvZiBvbmUgb2YgdGhpcyBlbnRpdHkncyBwcm9wZXJ0aWVzIGNoYW5nZS5cclxuICBAZXZlbnRBcmdzIC1cclxuICAgIC0gZW50aXR5IC0gVGhlIGVudGl0eSB3aG9zZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZC5cclxuICAgIC0gcHJvcGVydHkgLSBUaGUgW1tEYXRhUHJvcGVydHldXSB0aGF0IGNoYW5nZWQuXHJcbiAgICAtIHByb3BlcnR5TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNoYW5nZWQuIFRoaXMgdmFsdWUgd2lsbCBiZSAnbnVsbCcgZm9yIG9wZXJhdGlvbnMgdGhhdCByZXBsYWNlIHRoZSBlbnRpcmUgZW50aXR5LiAgVGhpcyBpbmNsdWRlc1xyXG4gICAgICBxdWVyaWVzLCBpbXBvcnRzIGFuZCBzYXZlcyB0aGF0IHJlcXVpcmUgYSBtZXJnZS4gVGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHdpbGwgbm90IGV4aXN0IGluIHRoaXMgY2FzZSBlaXRoZXIuIFRoaXMgd2lsbCBhY3R1YWxseSBiZSBhIFwicHJvcGVydHkgcGF0aFwiXHJcbiAgICAgIGZvciBhbnkgcHJvcGVydGllcyBvZiBhIGNvbXBsZXggdHlwZS5cclxuICAgIC0gb2xkVmFsdWUgLSBUaGUgb2xkIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgYmVmb3JlIHRoZSBjaGFuZ2UuXHJcbiAgICAtIG5ld1ZhbHVlIC0gVGhlIG5ldyB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGFmdGVyIHRoZSBjaGFuZ2UuXHJcbiAgICAtIHBhcmVudCAtIFRoZSBpbW1lZGlhdGUgcGFyZW50IG9iamVjdCBmb3IgdGhlIGNoYW5nZWQgcHJvcGVydHkuICBUaGlzIHdpbGwgYmUgYSBDb21wbGV4VHlwZSBpbnN0YW5jZSBhcyBvcHBvc2VkIHRvIGFuIEVudGl0eSBcclxuICAgICAgZm9yIGFueSBjb21wbGV4IHR5cGUgb3IgbmVzdGVkIGNvbXBsZXggdHlwZSBwcm9wZXJ0aWVzLlxyXG5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICBvcmRlci5lbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnN1YnNjcmliZShcclxuICA+ICAgICAgZnVuY3Rpb24gKHByb3BlcnR5Q2hhbmdlZEFyZ3MpIHtcclxuICA+ICAgICAgICAgIC8vIHRoaXMgY29kZSB3aWxsIGJlIGV4ZWN1dGVkIGFueXRpbWUgYSBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VzIG9uIHRoZSAnb3JkZXInIGVudGl0eS5cclxuICA+ICAgICAgICAgIHZhciBlbnRpdHkgPSBwcm9wZXJ0eUNoYW5nZWRBcmdzLmVudGl0eTsgLy8gTm90ZTogZW50aXR5ID09PSBvcmRlclxyXG4gID4gICAgICAgICAgdmFyIHByb3BlcnR5TmFtZUNoYW5nZWQgPSBwcm9wZXJ0eUNoYW5nZWRBcmdzLnByb3BlcnR5TmFtZTtcclxuICA+ICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHByb3BlcnR5Q2hhbmdlZEFyZ3Mub2xkVmFsdWU7XHJcbiAgPiAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBwcm9wZXJ0eUNoYW5nZWRBcmdzLm5ld1ZhbHVlO1xyXG4gID4gICAgICB9KTtcclxuICBAZXZlbnRcclxuICAqKi9cclxuICBwcm9wZXJ0eUNoYW5nZWQ6IEJyZWV6ZUV2ZW50PFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncz47XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF92YWxpZGF0aW9uRXJyb3JzOiB7IFtpbmRleDogc3RyaW5nXTogVmFsaWRhdGlvbkVycm9yIH07XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0OiBhbnk7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2VudGl0eUtleTogRW50aXR5S2V5O1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9sb2FkZWROcHM6IGFueVtdO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9pbml0aWFsaXplZD86IGJvb2xlYW47XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2luUHJvY2VzczogYW55W107IC8vIHVzZWQgaW4gZGVmYXVsdFByb3BlcnR5SW50ZXJjZXB0b3IgZm9yIHRlbXAgc3RvcmFnZS5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfaW5Qcm9jZXNzRW50aXR5PzogRW50aXR5OyAvLyB1c2VkIGluIEVudGl0eU1hbmFnZXJcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX251bGxJbnN0YW5jZSA9IG5ldyBFbnRpdHlBc3BlY3QoKTsgLy8gVE9ETzogZGV0ZXJtaW5lIGlmIHRoaXMgd29ya3NcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBjb25zdHJ1Y3RvcihlbnRpdHk/OiBFbnRpdHkpIHtcclxuXHJcbiAgICAvLyBpZiBjYWxsZWQgd2l0aG91dCBuZXdcclxuICAgIC8vIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFbnRpdHlBc3BlY3QpKSB7XHJcbiAgICAvLyAgIHJldHVybiBuZXcgRW50aXR5QXNwZWN0KGVudGl0eSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XHJcbiAgICAvLyBUT0RPOiBrZWVwIHB1YmxpYyBvciBub3Q/XHJcbiAgICB0aGlzLmVudGl0eUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5lbnRpdHlNYW5hZ2VyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5lbnRpdHlTdGF0ZSA9IEVudGl0eVN0YXRlLkRldGFjaGVkO1xyXG4gICAgdGhpcy5pc0JlaW5nU2F2ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMgPSB7fTtcclxuICAgIHRoaXMuaGFzVmFsaWRhdGlvbkVycm9ycyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fdmFsaWRhdGlvbkVycm9ycyA9IHt9O1xyXG5cclxuICAgIC8vIFVuY29tbWVudCB3aGVuIHdlIGltcGxlbWVudCBlbnRpdHlBc3BlY3QuaXNOYXZpZ2F0aW9uUHJvcGVydHlMb2FkZWQgbWV0aG9kXHJcbiAgICAvLyB0aGlzLl9sb2FkZWROYXZQcm9wTWFwID0ge307XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZCA9IG5ldyBCcmVlemVFdmVudChcInZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkXCIsIHRoaXMpO1xyXG4gICAgdGhpcy5wcm9wZXJ0eUNoYW5nZWQgPSBuZXcgQnJlZXplRXZlbnQoXCJwcm9wZXJ0eUNoYW5nZWRcIiwgdGhpcyk7XHJcbiAgICAvLyBpbiBjYXNlIHRoaXMgaXMgdGhlIE5VTEwgZW50aXR5QXNwZWN0LiAtIHVzZWQgd2l0aCBDb21wbGV4QXNwZWN0cyB0aGF0IGhhdmUgbm8gcGFyZW50LlxyXG5cclxuICAgIGlmIChlbnRpdHkgIT0gbnVsbCkge1xyXG4gICAgICAvLyByZW1vdmUgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZSBvbiBwcm90b3R5cGUgYnV0IHBsYWNlZCBvbiBjbGFzcyBieSBCYWJlbFxyXG4gICAgICBpZiAoIWVudGl0eS5lbnRpdHlUeXBlKSB7IGRlbGV0ZShlbnRpdHkuZW50aXR5VHlwZSk7IH1cclxuICAgICAgaWYgKCFlbnRpdHkuZW50aXR5QXNwZWN0KSB7IGRlbGV0ZShlbnRpdHkuZW50aXR5QXNwZWN0KTsgfVxyXG4gICAgICBlbnRpdHkuZW50aXR5QXNwZWN0ID0gdGhpcztcclxuXHJcbiAgICAgIC8vIGVudGl0eVR5cGUgc2hvdWxkIGFscmVhZHkgYmUgb24gdGhlIGVudGl0eSBmcm9tICd3YXRjaCdcclxuICAgICAgbGV0IGVudGl0eVR5cGUgPSBlbnRpdHkuZW50aXR5VHlwZSB8fCBlbnRpdHkuXyRlbnRpdHlUeXBlO1xyXG4gICAgICBpZiAoIWVudGl0eVR5cGUpIHtcclxuICAgICAgICBsZXQgdHlwZU5hbWUgPSBlbnRpdHkucHJvdG90eXBlLl8kdHlwZU5hbWU7XHJcbiAgICAgICAgaWYgKCF0eXBlTmFtZSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbnRpdHkgaXMgbm90IHJlZ2lzdGVyZWQgYXMgYSB2YWxpZCBFbnRpdHlUeXBlXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBmb3IgdGhpcyBlbnRpdHlUeXBlIGhhcyBub3QgeWV0IGJlZW4gcmVzb2x2ZWQ6IFwiICsgdHlwZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgZW50aXR5Q3RvciA9IGVudGl0eVR5cGUuZ2V0RW50aXR5Q3RvcigpO1xyXG4gICAgICBjb25maWcuaW50ZXJmYWNlUmVnaXN0cnkubW9kZWxMaWJyYXJ5LmdldERlZmF1bHRJbnN0YW5jZSgpLnN0YXJ0VHJhY2tpbmcoZW50aXR5LCBlbnRpdHlDdG9yLnByb3RvdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiAqL1xyXG4gIC8vIHR5cGUtZ3VhcmRcclxuICBzdGF0aWMgaXNFbnRpdHkob2JqOiBTdHJ1Y3R1cmFsT2JqZWN0KTogb2JqIGlzIEVudGl0eSB7XHJcbiAgICByZXR1cm4gKG9iaiBhcyBhbnkpLmVudGl0eUFzcGVjdCAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gTm8gbG9uZ2VyIHVzZWRcclxuICAvLyBzdGF0aWMgY3JlYXRlRnJvbShlbnRpdHk6IEVudGl0eSk6IEVudGl0eUFzcGVjdCB7XHJcbiAgLy8gICBpZiAoZW50aXR5ID09IG51bGwpIHtcclxuICAvLyAgICAgcmV0dXJuIEVudGl0eUFzcGVjdC5fbnVsbEluc3RhbmNlO1xyXG4gIC8vICAgfSBlbHNlIGlmIChlbnRpdHkuZW50aXR5QXNwZWN0KSB7XHJcbiAgLy8gICAgIHJldHVybiBlbnRpdHkuZW50aXR5QXNwZWN0O1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIG5ldyBFbnRpdHlBc3BlY3QoZW50aXR5KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgYW5kIHRoZSBpbnN0YW5jZSBnZXRQcm9wZXJ0eVZhbHVlIG1ldGhvZC5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmllZCAncHJvcGVydHkgcGF0aCcgZm9yIGEgc3BlY2lmaWVkIGVudGl0eS5cclxuXHJcbiAgVGhlIHByb3BlcnR5UGF0aCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIGRlbGltaXRlZCB3aXRoICcuJyBvciBhIHN0cmluZyBhcnJheS4gIFxyXG4gICoqL1xyXG4gIC8vIHVzZWQgYnkgRW50aXR5UXVlcnkgYW5kIFByZWRpY2F0ZVxyXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eVBhdGhWYWx1ZShvYmo6IEVudGl0eSwgcHJvcGVydHlQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xyXG4gICAgbGV0IHByb3BlcnRpZXMgPSBBcnJheS5pc0FycmF5KHByb3BlcnR5UGF0aCkgPyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGguc3BsaXQoXCIuXCIpO1xyXG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBvYmouZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoIGFzIHN0cmluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgbmV4dFZhbHVlID0gb2JqO1xyXG4gICAgICAvLyBoYWNrIHVzZSBvZiBzb21lIHRvIHBlcmZvcm0gbWFwRmlyc3Qgb3BlcmF0aW9uLlxyXG4gICAgICBwcm9wZXJ0aWVzLnNvbWUoKHByb3ApID0+IHtcclxuICAgICAgICBuZXh0VmFsdWUgPSBuZXh0VmFsdWUuZ2V0UHJvcGVydHkocHJvcCk7XHJcbiAgICAgICAgcmV0dXJuIG5leHRWYWx1ZSA9PSBudWxsO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIG5leHRWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgdGhlIFtbRW50aXR5S2V5XV0gZm9yIHRoaXMgRW50aXR5LlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIHZhciBlbnRpdHlLZXkgPSBvcmRlci5lbnRpdHlBc3BlY3QuZ2V0S2V5KCk7XHJcbiAgQHBhcmFtIGZvcmNlUmVmcmVzaCAtIChib29sZWFuPWZhbHNlKSBGb3JjZXMgdGhlIHJlY2FsY3VsYXRpb24gb2YgdGhlIGtleS4gIFRoaXMgc2hvdWxkIG5vcm1hbGx5IGJlIHVubmVjZXNzYXJ5LlxyXG4gIEByZXR1cm4gVGhlIFtbRW50aXR5S2V5XV0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgRW50aXR5LlxyXG4gICoqL1xyXG4gIGdldEtleShmb3JjZVJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgZm9yY2VSZWZyZXNoID0gYXNzZXJ0UGFyYW0oZm9yY2VSZWZyZXNoLCBcImZvcmNlUmVmcmVzaFwiKS5pc0Jvb2xlYW4oKS5pc09wdGlvbmFsKCkuY2hlY2soZmFsc2UpO1xyXG4gICAgaWYgKGZvcmNlUmVmcmVzaCB8fCAhdGhpcy5fZW50aXR5S2V5KSB7XHJcbiAgICAgIGxldCBlbnRpdHlUeXBlID0gdGhpcy5lbnRpdHkhLmVudGl0eVR5cGU7XHJcbiAgICAgIGxldCBrZXlQcm9wcyA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcztcclxuICAgICAgbGV0IHZhbHVlcyA9IGtleVByb3BzLm1hcChmdW5jdGlvbiAocCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudGl0eS5nZXRQcm9wZXJ0eShwLm5hbWUpO1xyXG4gICAgICB9LCB0aGlzKTtcclxuICAgICAgdGhpcy5fZW50aXR5S2V5ID0gbmV3IEVudGl0eUtleShlbnRpdHlUeXBlLCB2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eUtleTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgdGhlIGVudGl0eSB0byBhbiBbW0VudGl0eVN0YXRlXV0gb2YgJ1VuY2hhbmdlZCcgYnkgY29tbWl0dGluZyBhbGwgY2hhbmdlcyBtYWRlIHNpbmNlIHRoZSBlbnRpdHkgd2FzIGxhc3QgcXVlcmllZFxyXG4gIGhhZCAnYWNjZXB0Q2hhbmdlcycgY2FsbGVkIG9uIGl0LlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5hY2NlcHRDaGFuZ2VzKCk7XHJcbiAgPiAgICAgIC8vIFRoZSAnb3JkZXInIGVudGl0eSB3aWxsIG5vdyBiZSBpbiBhbiAnVW5jaGFuZ2VkJyBzdGF0ZSB3aXRoIGFueSBjaGFuZ2VzIGNvbW1pdHRlZC5cclxuICAqKi9cclxuICBhY2NlcHRDaGFuZ2VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eSkgcmV0dXJuO1xyXG4gICAgdGhpcy5fY2hlY2tPcGVyYXRpb24oXCJhY2NlcHRDaGFuZ2VzXCIpO1xyXG4gICAgbGV0IGVtID0gdGhpcy5lbnRpdHlNYW5hZ2VyITtcclxuICAgIGlmICh0aGlzLmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSB7XHJcbiAgICAgIGVtLmRldGFjaEVudGl0eSh0aGlzLmVudGl0eSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFVuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gICAgZW0uZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uQWNjZXB0Q2hhbmdlcywgZW50aXR5OiB0aGlzLmVudGl0eSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgdGhlIGVudGl0eSB0byBhbiBbW0VudGl0eVN0YXRlXV0gb2YgJ1VuY2hhbmdlZCcgYnkgcmVqZWN0aW5nIGFsbCBjaGFuZ2VzIG1hZGUgdG8gaXQgc2luY2UgdGhlIGVudGl0eSB3YXMgbGFzdCBxdWVyaWVkXHJcbiAgaGFkICdyZWplY3RDaGFuZ2VzJyBjYWxsZWQgb24gaXQuXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnJlamVjdENoYW5nZXMoKTtcclxuICA+ICAgICAgLy8gVGhlICdvcmRlcicgZW50aXR5IHdpbGwgbm93IGJlIGluIGFuICdVbmNoYW5nZWQnIHN0YXRlIHdpdGggYW55IGNoYW5nZXMgcmVqZWN0ZWQuXHJcbiAgKiovXHJcbiAgcmVqZWN0Q2hhbmdlcygpIHtcclxuICAgIHRoaXMuX2NoZWNrT3BlcmF0aW9uKFwicmVqZWN0Q2hhbmdlc1wiKTtcclxuICAgIGxldCBlbnRpdHkgPSB0aGlzLmVudGl0eSE7XHJcbiAgICBsZXQgZW50aXR5TWFuYWdlciA9IHRoaXMuZW50aXR5TWFuYWdlciE7XHJcbiAgICAvLyB3ZSBkbyBub3Qgd2FudCBQcm9wZXJ0eUNoYW5nZSBvciBFbnRpdHlDaGFuZ2UgZXZlbnRzIHRvIG9jY3VyIGhlcmVcclxuICAgIGNvcmUudXNpbmcoZW50aXR5TWFuYWdlciwgXCJpc1JlamVjdGluZ0NoYW5nZXNcIiwgdHJ1ZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICByZWplY3RDaGFuZ2VzQ29yZShlbnRpdHkpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5lbnRpdHlTdGF0ZS5pc0FkZGVkKCkpIHtcclxuICAgICAgLy8gbmV4dCBsaW5lIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgbGluZSB3aWxsIGNhdXNlIHRoaXMuZW50aXR5TWFuYWdlciAtPiBudWxsO1xyXG4gICAgICBlbnRpdHlNYW5hZ2VyLmRldGFjaEVudGl0eShlbnRpdHkpO1xyXG4gICAgICAvLyBuZWVkIHRvIHRlbGwgZW0gdGhhdCBhbiBlbnRpdHkgdGhhdCBuZWVkZWQgdG8gYmUgc2F2ZWQgbm8gbG9uZ2VyIGRvZXMuXHJcbiAgICAgIGVudGl0eU1hbmFnZXIuX25vdGlmeVN0YXRlQ2hhbmdlKGVudGl0eSwgZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZW50aXR5U3RhdGUuaXNEZWxldGVkKCkpIHtcclxuICAgICAgICBlbnRpdHlNYW5hZ2VyLl9saW5rUmVsYXRlZEVudGl0aWVzKGVudGl0eSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRVbmNoYW5nZWQoKTtcclxuICAgICAgLy8gcHJvcGVydHlDaGFuZ2VkIHByb3BlcnR5TmFtZSBpcyBub3Qgc3BlY2lmaWVkIGJlY2F1c2UgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eSBtYXkgaGF2ZSBjaGFuZ2VkLlxyXG4gICAgICB0aGlzLnByb3BlcnR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5OiBlbnRpdHksIHByb3BlcnR5TmFtZTogbnVsbCB9KTtcclxuICAgICAgZW50aXR5TWFuYWdlci5lbnRpdHlDaGFuZ2VkLnB1Ymxpc2goeyBlbnRpdHlBY3Rpb246IEVudGl0eUFjdGlvbi5SZWplY3RDaGFuZ2VzLCBlbnRpdHk6IGVudGl0eSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiAgQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICAvLyBUT0RPOiByZW5hbWUgLSBhbmQgdXNlICdfJzsgdXNlZCBvbiBib3RoIEVudGl0eUFzcGVjdCBhbmQgQ29tcGxleEFzcGVjdCBmb3IgcG9seW1vcnBoaWMgcmVhc29ucy5cclxuICBnZXRQcm9wZXJ0eVBhdGgocHJvcE5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHByb3BOYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgU2V0cyB0aGUgZW50aXR5IHRvIGFuIEVudGl0eVN0YXRlIG9mICdBZGRlZCcuICBUaGlzIGlzIE5PVCB0aGUgZXF1aXZhbGVudCBvZiBjYWxsaW5nIFtbRW50aXR5TWFuYWdlci5hZGRFbnRpdHldXVxyXG4gIGJlY2F1c2Ugbm8ga2V5IGdlbmVyYXRpb24gd2lsbCBvY2N1ciBmb3IgYXV0b2dlbmVyYXRlZCBrZXlzIGFzIGEgcmVzdWx0IG9mIHRoaXMgb3BlcmF0aW9uLiBBcyBhIHJlc3VsdCB0aGlzIG9wZXJhdGlvbiBjYW4gYmUgcHJvYmxlbWF0aWNcclxuICB1bmxlc3MgeW91IGFyZSBjZXJ0YWluIHRoYXQgdGhlIGVudGl0eSBiZWluZyBtYXJrZWQgJ0FkZGVkJyBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBkYXRhYmFzZSBhbmQgZG9lcyBub3QgaGF2ZSBhbiBhdXRvZ2VuZXJhdGVkIGtleS5cclxuICBUaGUgc2FtZSBvcGVyYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSBjYWxsaW5nIFtbRW50aXR5QXNwZWN0LnNldEVudGl0eVN0YXRlXV0uXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnNldEFkZGVkKCk7XHJcbiAgPiAgICAgIC8vIFRoZSAnb3JkZXInIGVudGl0eSB3aWxsIG5vdyBiZSBpbiBhbiAnQWRkZWQnIHN0YXRlLlxyXG4gICoqL1xyXG4gIHNldEFkZGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0RW50aXR5U3RhdGUoRW50aXR5U3RhdGUuQWRkZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgU2V0cyB0aGUgZW50aXR5IHRvIGFuIEVudGl0eVN0YXRlIG9mICdVbmNoYW5nZWQnLiAgVGhpcyBpcyBhbHNvIHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcgW1tFbnRpdHlBc3BlY3QuYWNjZXB0Q2hhbmdlc11dLlxyXG4gIFRoZSBzYW1lIG9wZXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGJ5IGNhbGxpbmcgW1tFbnRpdHlBc3BlY3Quc2V0RW50aXR5U3RhdGVdXS5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICBvcmRlci5lbnRpdHlBc3BlY3Quc2V0VW5jaGFuZ2VkKCk7XHJcbiAgPiAgICAgIC8vIFRoZSAnb3JkZXInIGVudGl0eSB3aWxsIG5vdyBiZSBpbiBhbiAnVW5jaGFuZ2VkJyBzdGF0ZSB3aXRoIGFueSBjaGFuZ2VzIGNvbW1pdHRlZC5cclxuICAqKi9cclxuICBzZXRVbmNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRFbnRpdHlTdGF0ZShFbnRpdHlTdGF0ZS5VbmNoYW5nZWQpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKipcclxuICBTZXRzIHRoZSBlbnRpdHkgdG8gYW4gRW50aXR5U3RhdGUgb2YgJ01vZGlmaWVkJy4gIFRoaXMgY2FuIGFsc28gYmUgYWNoaWV2ZWQgYnkgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGFueSBwcm9wZXJ0eSBvbiBhbiAnVW5jaGFuZ2VkJyBlbnRpdHkuXHJcbiAgVGhlIHNhbWUgb3BlcmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYnkgY2FsbGluZyBbW0VudGl0eUFzcGVjdC5zZXRFbnRpdHlTdGF0ZV1dLlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5zZXRNb2RpZmllZCgpO1xyXG4gID4gICAgICAvLyBUaGUgJ29yZGVyJyBlbnRpdHkgd2lsbCBub3cgYmUgaW4gYSAnTW9kaWZpZWQnIHN0YXRlLlxyXG4gICoqL1xyXG4gIHNldE1vZGlmaWVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0RW50aXR5U3RhdGUoRW50aXR5U3RhdGUuTW9kaWZpZWQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFNldHMgdGhlIGVudGl0eSB0byBhbiBFbnRpdHlTdGF0ZSBvZiAnRGVsZXRlZCcuICBUaGlzIGJvdGggbWFya3MgdGhlIGVudGl0eSBhcyBiZWluZyBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIGR1cmluZyB0aGUgbmV4dCAnU2F2ZScgY2FsbFxyXG4gIGJ1dCBhbHNvIHJlbW92ZXMgdGhlIGVudGl0eSBmcm9tIGFsbCBvZiBpdHMgcmVsYXRlZCBlbnRpdGllcy5cclxuICBUaGUgc2FtZSBvcGVyYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSBjYWxsaW5nIFtbRW50aXR5QXNwZWN0LnNldEVudGl0eVN0YXRlXV0uXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnNldERlbGV0ZWQoKTtcclxuICA+ICAgICAgLy8gVGhlICdvcmRlcicgZW50aXR5IHdpbGwgbm93IGJlIGluIGEgJ0RlbGV0ZWQnIHN0YXRlIGFuZCBpdCB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSAncmVsYXRlZCcgZW50aXRpZXMuXHJcbiAgKiovXHJcbiAgc2V0RGVsZXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnNldEVudGl0eVN0YXRlKEVudGl0eVN0YXRlLkRlbGV0ZWQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFNldHMgdGhlIGVudGl0eSB0byBhbiBFbnRpdHlTdGF0ZSBvZiAnRGV0YWNoZWQnLiAgVGhpcyByZW1vdmVzIHRoZSBlbnRpdHkgZnJvbSBhbGwgb2YgaXRzIHJlbGF0ZWQgZW50aXRpZXMsIGJ1dCBkb2VzIE5PVCBjaGFuZ2UgdGhlIEVudGl0eVN0YXRlIG9mIGFueSBleGlzdGluZyBlbnRpdGllcy5cclxuICBUaGUgc2FtZSBvcGVyYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSBjYWxsaW5nIFtbRW50aXR5QXNwZWN0LnNldEVudGl0eVN0YXRlXV0uXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnNldERldGFjaGVkKCk7XHJcbiAgPiAgICAgIC8vIFRoZSAnb3JkZXInIGVudGl0eSB3aWxsIG5vdyBiZSBpbiBhICdEZXRhY2hlZCcgc3RhdGUgYW5kIGl0IHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW55ICdyZWxhdGVkJyBlbnRpdGllcy5cclxuICAqKi9cclxuICBzZXREZXRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnNldEVudGl0eVN0YXRlKEVudGl0eVN0YXRlLkRldGFjaGVkKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICBTZXRzIHRoZSBlbnRpdHkgdG8gdGhlIHNwZWNpZmllZCBFbnRpdHlTdGF0ZS4gU2VlIGFsc28gJ3NldFVuY2hhbmdlZCcsICdzZXRNb2RpZmllZCcsICdzZXREZXRhY2hlZCcsIGV0Yy5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICBvcmRlci5lbnRpdHlBc3BlY3Quc2V0RW50aXR5U3RhdGUoRW50aXR5U3RhdGUuVW5jaGFuZ2VkKTtcclxuICA+ICAgICAgLy8gVGhlICdvcmRlcicgZW50aXR5IHdpbGwgbm93IGJlIGluIGEgJ1VuY2hhbmdlZCcgc3RhdGUuXHJcbiAgKiovXHJcbiAgc2V0RW50aXR5U3RhdGUoZW50aXR5U3RhdGU6IEVudGl0eVN0YXRlKSB7XHJcbiAgICBpZiAodGhpcy5lbnRpdHlTdGF0ZSA9PT0gZW50aXR5U3RhdGUpIHJldHVybiBmYWxzZTtcclxuICAgIHRoaXMuX2NoZWNrT3BlcmF0aW9uKFwic2V0RW50aXR5U3RhdGVcIik7XHJcbiAgICBpZiAodGhpcy5lbnRpdHlTdGF0ZS5pc0RldGFjaGVkKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBzZXQgdGhlICdlbnRpdHlTdGF0ZScgb2YgYW4gZW50aXR5IHdoZW4gaXQgaXMgZGV0YWNoZWQgLSBleGNlcHQgYnkgZmlyc3QgYXR0YWNoaW5nIGl0IHRvIGFuIEVudGl0eU1hbmFnZXJcIik7XHJcbiAgICB9XHJcbiAgICBsZXQgZW50aXR5ID0gdGhpcy5lbnRpdHkhO1xyXG4gICAgbGV0IGVtID0gdGhpcy5lbnRpdHlNYW5hZ2VyITtcclxuICAgIGxldCBuZWVkc1NhdmUgPSB0cnVlO1xyXG4gICAgaWYgKGVudGl0eVN0YXRlID09PSBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQpIHtcclxuICAgICAgY2xlYXJPcmlnaW5hbFZhbHVlcyhlbnRpdHkpO1xyXG4gICAgICBkZWxldGUgdGhpcy5oYXNUZW1wS2V5O1xyXG4gICAgICBuZWVkc1NhdmUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoZW50aXR5U3RhdGUgPT09IEVudGl0eVN0YXRlLkFkZGVkKSB7XHJcbiAgICAgIGNsZWFyT3JpZ2luYWxWYWx1ZXMoZW50aXR5KTtcclxuICAgICAgLy8gVE9ETzogbW9yZSB0byBkbyBoZXJlLi4uIGxpa2UgcmVnZW5lcmF0aW5nIGtleSA/Pz9cclxuICAgIH0gZWxzZSBpZiAoZW50aXR5U3RhdGUgPT09IEVudGl0eVN0YXRlLkRlbGV0ZWQpIHtcclxuICAgICAgaWYgKHRoaXMuZW50aXR5U3RhdGUuaXNBZGRlZCgpKSB7XHJcbiAgICAgICAgLy8gdHVybiBpdCBpbnRvIGEgZGV0YWNoIGFuZCBleGl0IGVhcmx5XHJcbiAgICAgICAgdGhpcy5zZXRFbnRpdHlTdGF0ZShFbnRpdHlTdGF0ZS5EZXRhY2hlZCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVE9ETzogdGhpbmsgYWJvdXQgY2FzY2FkZSBkZWxldGVzXHJcbiAgICAgICAgLy8gZW50aXR5U3RhdGUgbmVlZHMgdG8gYmUgc2V0IGl0IGVhcmx5IGluIHRoaXMgb25lIGNhc2UgdG8gaW5zdXJlIHRoYXQgZmsncyBhcmUgbm90IGNsZWFyZWQuXHJcbiAgICAgICAgdGhpcy5lbnRpdHlTdGF0ZSA9IEVudGl0eVN0YXRlLkRlbGV0ZWQ7XHJcbiAgICAgICAgcmVtb3ZlRnJvbVJlbGF0aW9ucyhlbnRpdHksIEVudGl0eVN0YXRlLkRlbGV0ZWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGVudGl0eVN0YXRlID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZCkge1xyXG4gICAgICAvLyBub3RoaW5nIGV4dHJhIG5lZWRlZFxyXG4gICAgfSBlbHNlIGlmIChlbnRpdHlTdGF0ZSA9PT0gRW50aXR5U3RhdGUuRGV0YWNoZWQpIHtcclxuICAgICAgbGV0IGdyb3VwID0gdGhpcy5lbnRpdHlHcm91cDtcclxuICAgICAgLy8gbm8gZ3JvdXAgPT09IGFscmVhZHkgZGV0YWNoZWQuXHJcbiAgICAgIGlmICghZ3JvdXApIHJldHVybiBmYWxzZTtcclxuICAgICAgZ3JvdXAuZGV0YWNoRW50aXR5KGVudGl0eSk7XHJcbiAgICAgIC8vIG5lZWRzIHRvIG9jY3VyIGVhcmx5IGhlcmUgLSBzbyB0aGlzIElTIGRlbGliZXJhdGVseSByZWR1bmRlbnQgd2l0aCB0aGUgc2FtZSBjb2RlIGxhdGVyIGluIHRoaXMgbWV0aG9kLlxyXG4gICAgICB0aGlzLmVudGl0eVN0YXRlID0gZW50aXR5U3RhdGU7XHJcbiAgICAgIHJlbW92ZUZyb21SZWxhdGlvbnMoZW50aXR5LCBFbnRpdHlTdGF0ZS5EZXRhY2hlZCk7XHJcbiAgICAgIHRoaXMuX2RldGFjaCgpO1xyXG4gICAgICBlbS5lbnRpdHlDaGFuZ2VkLnB1Ymxpc2goeyBlbnRpdHlBY3Rpb246IEVudGl0eUFjdGlvbi5EZXRhY2gsIGVudGl0eTogZW50aXR5IH0pO1xyXG4gICAgICBuZWVkc1NhdmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5U3RhdGUgPSBlbnRpdHlTdGF0ZTtcclxuICAgIGVtLl9ub3RpZnlTdGF0ZUNoYW5nZShlbnRpdHksIG5lZWRzU2F2ZSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGxvYWROYXZpZ2F0aW9uUHJvcGVydHkobmF2aWdhdGlvblByb3BlcnR5OiBzdHJpbmcsIGNhbGxiYWNrPzogUXVlcnlTdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s/OiBRdWVyeUVycm9yQ2FsbGJhY2spOiBQcm9taXNlPFF1ZXJ5UmVzdWx0PjtcclxuICBsb2FkTmF2aWdhdGlvblByb3BlcnR5KG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LCBjYWxsYmFjaz86IFF1ZXJ5U3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrPzogUXVlcnlFcnJvckNhbGxiYWNrKTogUHJvbWlzZTxRdWVyeVJlc3VsdD47XHJcbiAgLyoqXHJcbiAgUGVyZm9ybXMgYSBxdWVyeSBmb3IgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWVkIFtbTmF2aWdhdGlvblByb3BlcnR5XV0uIF9fQXN5bmNfX1xyXG4gID4gICAgICBlbXAuZW50aXR5QXNwZWN0LmxvYWROYXZpZ2F0aW9uUHJvcGVydHkoXCJPcmRlcnNcIikudGhlbihmdW5jdGlvbiAoZGF0YSkge1xyXG4gID4gICAgICAgICAgdmFyIG9yZGVycyA9IGRhdGEucmVzdWx0cztcclxuICA+ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGV4Y2VwdGlvbikge1xyXG4gID4gICAgICAgICAgLy8gaGFuZGxlIGV4Y2VwdGlvbiBoZXJlO1xyXG4gID4gICAgICB9KTtcclxuICBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5IC0gVGhlIE5hdmlnYXRpb25Qcm9wZXJ0eSBvciB0aGUgbmFtZSBvZiB0aGUgTmF2aWdhdGlvblByb3BlcnR5IHRvICdsb2FkJy5cclxuICBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXHJcbiAgQHBhcmFtIGVycm9yQ2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIG9uIGZhaWx1cmUuXHJcbiAgQHJldHVybiBQcm9taXNlIHdpdGggc2hhcGVcclxuICAgIC0gcmVzdWx0cyB7QXJyYXkgb2YgRW50aXR5fVxyXG4gICAgLSBxdWVyeSB7RW50aXR5UXVlcnl9IFRoZSBvcmlnaW5hbCBxdWVyeVxyXG4gICAgLSBodHRwUmVzcG9uc2Uge2h0dHBSZXNwb25zZX0gVGhlIEh0dHBSZXNwb25zZSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgKiovXHJcbiAgbG9hZE5hdmlnYXRpb25Qcm9wZXJ0eShuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHN0cmluZywgY2FsbGJhY2s6IFF1ZXJ5U3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrOiBRdWVyeUVycm9yQ2FsbGJhY2spIHtcclxuICAgIGxldCBlbnRpdHkgPSB0aGlzLmVudGl0eSE7XHJcbiAgICBsZXQgbmF2UHJvcGVydHkgPSBlbnRpdHkuZW50aXR5VHlwZS5fY2hlY2tOYXZQcm9wZXJ0eShuYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gICAgbGV0IHF1ZXJ5ID0gRW50aXR5UXVlcnkuZnJvbUVudGl0eU5hdmlnYXRpb24oZW50aXR5LCBuYXZQcm9wZXJ0eSk7XHJcbiAgICAvLyByZXR1cm4gZW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xyXG4gICAgbGV0IHByb21pc2UgPSBlbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXIhLmV4ZWN1dGVRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLl9tYXJrQXNMb2FkZWQobmF2UHJvcGVydHkubmFtZSk7XHJcbiAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZGF0YSk7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgaWYgKGVycm9yQ2FsbGJhY2spIGVycm9yQ2FsbGJhY2soZXJyb3IpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgTWFya3MgdGhpcyBuYXZpZ2F0aW9uUHJvcGVydHkgb24gdGhpcyBlbnRpdHkgYXMgYWxyZWFkeSBoYXZpbmcgYmVlbiBsb2FkZWQuXHJcbiAgPiAgICAgIGVtcC5lbnRpdHlBc3BlY3QubWFya05hdmlnYXRpb25Qcm9wZXJ0eUFzTG9hZGVkKFwiT3JkZXJzXCIpO1xyXG4gIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHkgLSBUaGUgTmF2aWdhdGlvblByb3BlcnR5IG9yIG5hbWUgb2YgTmF2aWdhdGlvblByb3BlcnR5IHRvICdsb2FkJy5cclxuICAqKi9cclxuICBtYXJrTmF2aWdhdGlvblByb3BlcnR5QXNMb2FkZWQobmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkgfCBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHJldHVybjtcclxuICAgIGxldCBuYXZQcm9wZXJ0eSA9IHRoaXMuZW50aXR5LmVudGl0eVR5cGUuX2NoZWNrTmF2UHJvcGVydHkobmF2aWdhdGlvblByb3BlcnR5KTtcclxuICAgIHRoaXMuX21hcmtBc0xvYWRlZChuYXZQcm9wZXJ0eS5uYW1lKTtcclxuICB9XHJcblxyXG4gIGlzTmF2aWdhdGlvblByb3BlcnR5TG9hZGVkKG5hdmlnYXRpb25Qcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbjtcclxuICBpc05hdmlnYXRpb25Qcm9wZXJ0eUxvYWRlZChuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSk6IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbmF2aWdhdGlvblByb3BlcnR5IG9uIHRoaXMgZW50aXR5IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLlxyXG5cclxuICBBIG5hdmlnYXRpb24gcHJvcGVydHkgaXMgY29uc2lkZXJlZCBsb2FkZWQgd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBjb25kaXRpb25zIGFwcGxpZXM6XHJcblxyXG4gICAgMS4gSXQgd2FzIGZldGNoZWQgZnJvbSB0aGUgYmFja2VuZCBzZXJ2ZXIuXHJcbiAgICAgICAgPGJyLz4gICBUaGlzIGNhbiBiZSB0aGUgcmVzdWx0IG9mIGFuIGV4cGFuZCBxdWVyeSBvciBhIGNhbGwgdG8gdGhlIFtbRW50aXR5QXNwZWN0LmxvYWROYXZpZ2F0aW9uUHJvcGVydHldXSBtZXRob2QuXHJcbiAgICAgICAgPGJyLz4gICBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgZmV0Y2ggcmV0dXJucyBub3RoaW5nIHRoZSBwcm9wZXJ0eSBpcyBzdGlsbCBtYXJrZWQgYXMgbG9hZGVkIGluIHRoaXMgY2FzZS5cclxuICAgIDEuIFRoZSBwcm9wZXJ0eSBpcyBzY2FsYXIgYW5kIGhhcyBiZWVuIHNldCB0byBhIG5vbm51bGwgdmFsdWUuXHJcbiAgICAxLiBUaGUgW1tFbnRpdHlBc3BlY3QubWFya05hdmlnYXRpb25Qcm9wZXJ0eUFzTG9hZGVkXV0gd2FzIGNhbGxlZC5cclxuICBcclxuICA+ICAgICB2YXIgd2FzTG9hZGVkID0gZW1wLmVudGl0eUFzcGVjdC5pc05hdmlnYXRpb25Qcm9wZXJ0eUxvYWRlZChcIk9yZGVyc1wiKTtcclxuICBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5IC0gVGhlIE5hdmlnYXRpb25Qcm9wZXJ0eSBvciBuYW1lIG9mIE5hdmlnYXRpb25Qcm9wZXJ0eSB0byAnbG9hZCcuXHJcbiAgKiovXHJcbiAgaXNOYXZpZ2F0aW9uUHJvcGVydHlMb2FkZWQobmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkgfCBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHJldHVybjtcclxuICAgIGxldCBuYXZQcm9wZXJ0eSA9IHRoaXMuZW50aXR5LmVudGl0eVR5cGUuX2NoZWNrTmF2UHJvcGVydHkobmF2aWdhdGlvblByb3BlcnR5KTtcclxuICAgIGlmIChuYXZQcm9wZXJ0eS5pc1NjYWxhciAmJiB0aGlzLmVudGl0eS5nZXRQcm9wZXJ0eShuYXZQcm9wZXJ0eS5uYW1lKSAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZE5wcyAmJiB0aGlzLl9sb2FkZWROcHMuaW5kZXhPZihuYXZQcm9wZXJ0eS5uYW1lKSA+PSAwO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX21hcmtBc0xvYWRlZChuYXZQcm9wTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sb2FkZWROcHMgPSB0aGlzLl9sb2FkZWROcHMgfHwgW107XHJcbiAgICBjb3JlLmFycmF5QWRkSXRlbVVuaXF1ZSh0aGlzLl9sb2FkZWROcHMsIG5hdlByb3BOYW1lKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICBQZXJmb3JtcyB2YWxpZGF0aW9uIG9uIHRoZSBlbnRpdHksIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIGFyZSBhdmFpbGFibGUgdmlhIHRoZVxyXG4gIFtbRW50aXR5QXNwZWN0LmdldFZhbGlkYXRpb25FcnJvcnNdXSBtZXRob2QuIFZhbGlkYXRpbmcgYW4gZW50aXR5IG1lYW5zIGV4ZWN1dGluZ1xyXG4gIGFsbCBvZiB0aGUgdmFsaWRhdG9ycyBvbiBib3RoIHRoZSBlbnRpdHkgaXRzZWxmIGFzIHdlbGwgYXMgdGhvc2Ugb24gZWFjaCBvZiBpdHMgcHJvcGVydGllcy5cclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICB2YXIgaXNPayA9IG9yZGVyLmVudGl0eUFzcGVjdC52YWxpZGF0ZUVudGl0eSgpO1xyXG4gID4gICAgICAvLyBpc09rIHdpbGwgYmUgJ3RydWUnIGlmIHRoZXJlIGFyZSBubyBlcnJvcnMgb24gdGhlIGVudGl0eS5cclxuICA+ICAgICAgaWYgKCFpc09rKSB7XHJcbiAgPiAgICAgICAgICB2YXIgZXJyb3JzID0gb3JkZXIuZW50aXR5QXNwZWN0LmdldFZhbGlkYXRpb25FcnJvcnMoKTtcclxuICA+ICAgICAgfVxyXG4gIEByZXR1cm4gV2hldGhlciB0aGUgZW50aXR5IHBhc3NlZCB2YWxpZGF0aW9uLlxyXG4gICoqL1xyXG4gIHZhbGlkYXRlRW50aXR5KCkge1xyXG4gICAgbGV0IG9rID0gdHJ1ZTtcclxuICAgIHRoaXMuX3Byb2Nlc3NWYWxpZGF0aW9uT3BBbmRQdWJsaXNoKGZ1bmN0aW9uICh0aGF0OiBhbnkpIHtcclxuICAgICAgb2sgPSB2YWxpZGF0ZVRhcmdldCh0aGF0LmVudGl0eSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvaztcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlUHJvcGVydHkocHJvcGVydHk6IHN0cmluZywgY29udGV4dD86IGFueSk6IGJvb2xlYW47XHJcbiAgdmFsaWRhdGVQcm9wZXJ0eShwcm9wZXJ0eTogRGF0YVByb3BlcnR5LCBjb250ZXh0PzogYW55KTogYm9vbGVhbjtcclxuICB2YWxpZGF0ZVByb3BlcnR5KHByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHksIGNvbnRleHQ/OiBhbnkpOiBib29sZWFuO1xyXG4gIC8qKlxyXG4gIFBlcmZvcm1zIHZhbGlkYXRpb24gb24gYSBzcGVjaWZpYyBwcm9wZXJ0eSBvZiB0aGlzIGVudGl0eSwgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIHZhbGlkYXRpb24gYXJlIGF2YWlsYWJsZSB2aWEgdGhlXHJcbiAgW1tFbnRpdHlBc3BlY3QuZ2V0VmFsaWRhdGlvbkVycm9yc11dIG1ldGhvZC4gVmFsaWRhdGluZyBhIHByb3BlcnR5IG1lYW5zIGV4ZWN1dGluZ1xyXG4gIGFsbCBvZiB0aGUgdmFsaWRhdG9ycyBvbiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LiAgVGhpcyBjYWxsIGlzIGFsc28gbWFkZSBhdXRvbWF0aWNhbGx5IGFueXRpbWUgYSBwcm9wZXJ0eVxyXG4gIG9mIGFuIGVudGl0eSBpcyBjaGFuZ2VkLlxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIHZhciBpc09rID0gb3JkZXIuZW50aXR5QXNwZWN0LnZhbGlkYXRlUHJvcGVydHkoXCJPcmRlclwiKTtcclxuXHJcbiAgb3JcclxuICA+ICAgICAgdmFyIG9yZGVyRGF0ZVByb3BlcnR5ID0gb3JkZXIuZW50aXR5VHlwZS5nZXRQcm9wZXJ0eShcIk9yZGVyRGF0ZVwiKTtcclxuICA+ICAgICAgdmFyIGlzT2sgPSBvcmRlci5lbnRpdHlBc3BlY3QudmFsaWRhdGVQcm9wZXJ0eShPcmRlckRhdGVQcm9wZXJ0eSk7XHJcbiAgQHBhcmFtIHByb3BlcnR5IC0gVGhlIFtbRGF0YVByb3BlcnR5XV0gb3IgW1tOYXZpZ2F0aW9uUHJvcGVydHldXSB0byB2YWxpZGF0ZSBvciBhIHN0cmluZyBcclxuICB3aXRoIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvciBhIHByb3BlcnR5IHBhdGggd2l0aCB0aGUgcGF0aCB0byBhIHByb3BlcnR5IG9mIGEgY29tcGxleCBvYmplY3QuXHJcbiAgQHBhcmFtIGNvbnRleHQgLSAgQSBjb250ZXh0IG9iamVjdCB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBlYWNoIFtbVmFsaWRhdG9yXV0uXHJcbiAgQHJldHVybiBXaGV0aGVyIHRoZSBlbnRpdHkgcGFzc2VkIHZhbGlkYXRpb24uXHJcbiAgKiovXHJcbiAgdmFsaWRhdGVQcm9wZXJ0eShwcm9wZXJ0eTogRW50aXR5UHJvcGVydHkgfCBzdHJpbmcsIGNvbnRleHQ6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTsgLy8gcGVyZm9ybXMgdmFsaWRhdGlvbnNcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jb21wbGV4QXNwZWN0KSB7XHJcbiAgICAgIHJldHVybiB2YWxpZGF0ZVRhcmdldCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjb250ZXh0ID0gY29udGV4dCB8fCB7fTtcclxuICAgIGNvbnRleHQuZW50aXR5ID0gdGhpcy5lbnRpdHk7XHJcbiAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGNvbnRleHQucHJvcGVydHkgPSB0aGlzLmVudGl0eSEuZW50aXR5VHlwZS5nZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdHJ1ZSk7XHJcbiAgICAgIGNvbnRleHQucHJvcGVydHlOYW1lID0gcHJvcGVydHk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0LnByb3BlcnR5ID0gcHJvcGVydHk7XHJcbiAgICAgIGNvbnRleHQucHJvcGVydHlOYW1lID0gcHJvcGVydHkubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZSwgY29udGV4dCk7XHJcbiAgfVxyXG5cclxuICBnZXRWYWxpZGF0aW9uRXJyb3JzKCk6IFZhbGlkYXRpb25FcnJvcltdO1xyXG4gIGdldFZhbGlkYXRpb25FcnJvcnMocHJvcGVydHk6IHN0cmluZyk6IFZhbGlkYXRpb25FcnJvcltdO1xyXG4gIGdldFZhbGlkYXRpb25FcnJvcnMocHJvcGVydHk6IEVudGl0eVByb3BlcnR5KTogVmFsaWRhdGlvbkVycm9yW107XHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgdmFsaWRhdGlvbiBlcnJvcnMgYXNzb2NpYXRlZCB3aXRoIGVpdGhlciB0aGUgZW50aXJlIGVudGl0eSBvciBhbnkgc3BlY2lmaWVkIHByb3BlcnR5LlxyXG4gIFxyXG4gIFRoaXMgbWV0aG9kIGNhbiByZXR1cm4gYWxsIG9mIHRoZSBlcnJvcnMgZm9yIGFuIEVudGl0eVxyXG4gID4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIHZhciB2YWxFcnJvcnMgPSBvcmRlci5lbnRpdHlBc3BlY3QuZ2V0VmFsaWRhdGlvbkVycm9ycygpO1xyXG5cclxuICBhcyB3ZWxsIGFzIHRob3NlIGZvciBqdXN0IGEgc3BlY2lmaWMgcHJvcGVydHkuXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgdmFyIG9yZGVyRGF0ZUVycm9ycyA9IG9yZGVyLmVudGl0eUFzcGVjdC5nZXRWYWxpZGF0aW9uRXJyb3JzKFwiT3JkZXJEYXRlXCIpO1xyXG5cclxuICB3aGljaCBjYW4gYWxzbyBiZSBleHByZXNzZWQgYXNcclxuICA+ICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICB2YXIgb3JkZXJEYXRlUHJvcGVydHkgPSBvcmRlci5lbnRpdHlUeXBlLmdldFByb3BlcnR5KFwiT3JkZXJEYXRlXCIpO1xyXG4gID4gICAgICB2YXIgb3JkZXJEYXRlRXJyb3JzID0gb3JkZXIuZW50aXR5QXNwZWN0LmdldFZhbGlkYXRpb25FcnJvcnMob3JkZXJEYXRlUHJvcGVydHkpO1xyXG4gIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdmFsaWRhdGlvbiBlcnJvcnMgc2hvdWxkIGJlIHJldHJpZXZlZC5cclxuICBJZiBvbWl0dGVkLCBhbGwgb2YgdGhlIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGlzIGVudGl0eSB3aWxsIGJlIHJldHVybmVkLlxyXG4gIEByZXR1cm4gQSBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9ycy5cclxuICAqKi9cclxuICBnZXRWYWxpZGF0aW9uRXJyb3JzKHByb3BlcnR5PzogRGF0YVByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5IHwgc3RyaW5nKSB7XHJcbiAgICBhc3NlcnRQYXJhbShwcm9wZXJ0eSwgXCJwcm9wZXJ0eVwiKS5pc09wdGlvbmFsKCkuaXNFbnRpdHlQcm9wZXJ0eSgpLm9yKCkuaXNTdHJpbmcoKS5jaGVjaygpO1xyXG4gICAgbGV0IHJlc3VsdCA9IGNvcmUuZ2V0T3duUHJvcGVydHlWYWx1ZXModGhpcy5fdmFsaWRhdGlvbkVycm9ycyk7XHJcbiAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IHR5cGVvZiAocHJvcGVydHkpID09PSAnc3RyaW5nJyA/IHByb3BlcnR5IDogcHJvcGVydHkubmFtZTtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAodmU6IFZhbGlkYXRpb25FcnJvcikge1xyXG4gICAgICAgIHJldHVybiB2ZS5wcm9wZXJ0eSAmJiAodmUucHJvcGVydHkubmFtZSA9PT0gcHJvcGVydHlOYW1lIHx8IChwcm9wZXJ0eU5hbWUuaW5kZXhPZihcIi5cIikgIT09IC0xICYmIHZlLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIEFkZHMgYSB2YWxpZGF0aW9uIGVycm9yLlxyXG4gICoqL1xyXG4gIGFkZFZhbGlkYXRpb25FcnJvcih2YWxpZGF0aW9uRXJyb3I6IFZhbGlkYXRpb25FcnJvcikge1xyXG4gICAgYXNzZXJ0UGFyYW0odmFsaWRhdGlvbkVycm9yLCBcInZhbGlkYXRpb25FcnJvclwiKS5pc0luc3RhbmNlT2YoVmFsaWRhdGlvbkVycm9yKS5jaGVjaygpO1xyXG4gICAgdGhpcy5fcHJvY2Vzc1ZhbGlkYXRpb25PcEFuZFB1Ymxpc2goZnVuY3Rpb24gKHRoYXQ6IGFueSkge1xyXG4gICAgICB0aGF0Ll9hZGRWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvbkVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25FcnJvcjogVmFsaWRhdGlvbkVycm9yKTogdm9pZDtcclxuICByZW1vdmVWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvbktleTogc3RyaW5nKTogdm9pZDtcclxuICAvKipcclxuICBSZW1vdmVzIGEgdmFsaWRhdGlvbiBlcnJvci5cclxuICBAcGFyYW0gdmFsaWRhdGlvbkVycm9yT3JLZXkgLSBFaXRoZXIgYSBWYWxpZGF0aW9uRXJyb3Igb3IgYSBWYWxpZGF0aW9uRXJyb3IgJ2tleScgdmFsdWVcclxuICAqKi9cclxuICByZW1vdmVWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvbkVycm9yT3JLZXk6IFZhbGlkYXRpb25FcnJvciB8IHN0cmluZykge1xyXG4gICAgYXNzZXJ0UGFyYW0odmFsaWRhdGlvbkVycm9yT3JLZXksIFwidmFsaWRhdGlvbkVycm9yT3JLZXlcIikuaXNTdHJpbmcoKS5vcigpLmlzSW5zdGFuY2VPZihWYWxpZGF0aW9uRXJyb3IpLm9yKCkuaXNJbnN0YW5jZU9mKFZhbGlkYXRvcikuY2hlY2soKTtcclxuXHJcbiAgICBsZXQga2V5ID0gKHR5cGVvZiAodmFsaWRhdGlvbkVycm9yT3JLZXkpID09PSBcInN0cmluZ1wiKSA/IHZhbGlkYXRpb25FcnJvck9yS2V5IDogdmFsaWRhdGlvbkVycm9yT3JLZXkua2V5O1xyXG4gICAgdGhpcy5fcHJvY2Vzc1ZhbGlkYXRpb25PcEFuZFB1Ymxpc2goZnVuY3Rpb24gKHRoYXQ6IGFueSkge1xyXG4gICAgICB0aGF0Ll9yZW1vdmVWYWxpZGF0aW9uRXJyb3Ioa2V5KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmVtb3ZlcyBhbGwgb2YgdGhlIHZhbGlkYXRpb24gZXJyb3JzIGZvciBhIHNwZWNpZmllZCBlbnRpdHlcclxuICAqKi9cclxuICBjbGVhclZhbGlkYXRpb25FcnJvcnMoKSB7XHJcbiAgICB0aGlzLl9wcm9jZXNzVmFsaWRhdGlvbk9wQW5kUHVibGlzaChmdW5jdGlvbiAodGhhdDogYW55KSB7XHJcbiAgICAgIGNvcmUub2JqZWN0Rm9yRWFjaCh0aGF0Ll92YWxpZGF0aW9uRXJyb3JzLCBmdW5jdGlvbiAoa2V5OiBzdHJpbmcsIHZhbEVycm9yOiBWYWxpZGF0aW9uRXJyb3IpIHtcclxuICAgICAgICBpZiAodmFsRXJyb3IpIHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll92YWxpZGF0aW9uRXJyb3JzW2tleV07XHJcbiAgICAgICAgICB0aGF0Ll9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdC5yZW1vdmVkLnB1c2godmFsRXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoYXQuaGFzVmFsaWRhdGlvbkVycm9ycyA9ICFjb3JlLmlzRW1wdHkodGhhdC5fdmFsaWRhdGlvbkVycm9ycyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYW4gW1tFbnRpdHlLZXldXSBmb3IgdGhlIGVudGl0eSBwb2ludGVkIHRvIGJ5IHRoZSBzcGVjaWZpZWQgc2NhbGFyIE5hdmlnYXRpb25Qcm9wZXJ0eS5cclxuICBUaGlzIG9ubHkgcmV0dXJucyBhbiBFbnRpdHlLZXkgaWYgdGhlIGN1cnJlbnQgZW50aXR5IGlzIGEgJ2NoaWxkJyBlbnRpdHkgYWxvbmcgdGhlIHNwZWNpZmllZCBOYXZpZ2F0aW9uUHJvcGVydHkuIFxyXG4gIGkuZS4gaGFzIGEgc2luZ2xlIHBhcmVudC5cclxuXHJcbiAgQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eSAtIFRoZSBbW05hdmlnYXRpb25Qcm9wZXJ0eV1dICggcG9pbnRpbmcgdG8gYSBwYXJlbnQpLiBcclxuICBAcmV0dXJucyBFaXRoZXIgYSBwYXJlbnQgRW50aXR5S2V5IGlmIHRoaXMgaXMgYSAnY2hpbGQnIGVudGl0eSBvciBudWxsOyAgXHJcbiAgKi9cclxuICBnZXRQYXJlbnRLZXkobmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkpIHtcclxuICAgIGlmICghdGhpcy5lbnRpdHkpIHJldHVybiBudWxsO1xyXG4gICAgLy8gVE9ETzogcmV2aWV3IHRoaXMgLSBub3Qgc3VyZSBhYm91dCB0aGUgY29tbWVudC5cclxuICAgIC8vIE5hdmlnYXRpb25Qcm9wZXJ0eSBkb2Vzbid0IHlldCBleGlzdFxyXG4gICAgLy8gYXNzZXJ0UGFyYW0obmF2aWdhdGlvblByb3BlcnR5LCBcIm5hdmlnYXRpb25Qcm9wZXJ0eVwiKS5pc0luc3RhbmNlT2YoTmF2aWdhdGlvblByb3BlcnR5KS5jaGVjaygpO1xyXG4gICAgbGV0IGZrTmFtZXMgPSBuYXZpZ2F0aW9uUHJvcGVydHkuZm9yZWlnbktleU5hbWVzO1xyXG4gICAgaWYgKGZrTmFtZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIGxldCBma1ZhbHVlcyA9IGZrTmFtZXMubWFwKGZ1bmN0aW9uIChma24pIHtcclxuICAgICAgcmV0dXJuIHRoYXQuZW50aXR5IS5nZXRQcm9wZXJ0eShma24pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3IEVudGl0eUtleShuYXZpZ2F0aW9uUHJvcGVydHkuZW50aXR5VHlwZSwgZmtWYWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBhbmQgdGhlIHN0YXRpYyBnZXRQcm9wZXJ0eVBhdGhWYWx1ZS5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBEYXRhUHJvcGVydHkgb3IgTmF2aWdhdGlvblByb3BlcnR5IG9yICdwcm9wZXJ0eSBwYXRoJy4gIFxyXG4gICoqL1xyXG4gIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHk6IHN0cmluZyB8IERhdGFQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xyXG4gICAgYXNzZXJ0UGFyYW0ocHJvcGVydHksIFwicHJvcGVydHlcIikuaXNTdHJpbmcoKS5vcigpLmlzRW50aXR5UHJvcGVydHkoKS5jaGVjaygpO1xyXG4gICAgbGV0IHZhbHVlOiBhbnk7XHJcbiAgICBpZiAodHlwZW9mIChwcm9wZXJ0eSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGxldCBwcm9wTmFtZXMgPSBwcm9wZXJ0eS50cmltKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgICBsZXQgcHJvcE5hbWUgPSBwcm9wTmFtZXMuc2hpZnQoKTtcclxuICAgICAgdmFsdWUgPSB0aGlzLmVudGl0eTtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShwcm9wTmFtZSk7XHJcbiAgICAgIHdoaWxlIChwcm9wTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHByb3BOYW1lID0gcHJvcE5hbWVzLnNoaWZ0KCk7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShwcm9wTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghKHByb3BlcnR5LnBhcmVudFR5cGUgaW5zdGFuY2VvZiBFbnRpdHlUeXBlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSB2YWxpZGF0ZVByb3BlcnR5IG1ldGhvZCBkb2VzIG5vdCBhY2NlcHQgYSAncHJvcGVydHknIHBhcmFtZXRlciB3aG9zZSBwYXJlbnRUeXBlIGlzIGEgQ29tcGxleFR5cGU7IFwiICtcclxuICAgICAgICAgIFwiUGFzcyBhICdwcm9wZXJ0eSBwYXRoJyBzdHJpbmcgYXMgdGhlICdwcm9wZXJ0eScgcGFyYW1ldGVyIGluc3RlYWQgXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbHVlID0gdGhpcy5lbnRpdHkhLmdldFByb3BlcnR5KHByb3BlcnR5Lm5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gaW50ZXJuYWwgbWV0aG9kc1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9jaGVja09wZXJhdGlvbihvcGVyYXRpb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmlzQmVpbmdTYXZlZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcGVyZm9ybSBhICdcIiArIG9wZXJhdGlvbk5hbWUgKyBcIicgb24gYW4gZW50aXR5IHRoYXQgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2F2ZWRcIik7XHJcbiAgICB9XHJcbiAgICAvLyBhbGxvd3MgY2hhaW5pbmdcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2RldGFjaCgpIHtcclxuICAgIHRoaXMuZW50aXR5R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmVudGl0eU1hbmFnZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmVudGl0eVN0YXRlID0gRW50aXR5U3RhdGUuRGV0YWNoZWQ7XHJcbiAgICB0aGlzLm9yaWdpbmFsVmFsdWVzID0ge307XHJcbiAgICB0aGlzLl92YWxpZGF0aW9uRXJyb3JzID0ge307XHJcbiAgICB0aGlzLmhhc1ZhbGlkYXRpb25FcnJvcnMgPSBmYWxzZTtcclxuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc0NoYW5nZWQuY2xlYXIoKTtcclxuICAgIHRoaXMucHJvcGVydHlDaGFuZ2VkLmNsZWFyKCk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8vIGNhbGxlZCBmcm9tIGRlZmF1bHRJbnRlcmNlcHRvci5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZTogYW55LCBjb250ZXh0OiBhbnkpIHtcclxuICAgIGxldCBvayA9IHRydWU7XHJcbiAgICB0aGlzLl9wcm9jZXNzVmFsaWRhdGlvbk9wQW5kUHVibGlzaChmdW5jdGlvbiAodGhhdDogYW55KSB7XHJcbiAgICAgIGNvbnRleHQucHJvcGVydHkuZ2V0QWxsVmFsaWRhdG9ycygpLmZvckVhY2goZnVuY3Rpb24gKHZhbGlkYXRvcjogVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgb2sgPSB2YWxpZGF0ZSh0aGF0LCB2YWxpZGF0b3IsIHZhbHVlLCBjb250ZXh0KSAmJiBvaztcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvaztcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9wcm9jZXNzVmFsaWRhdGlvbk9wQW5kUHVibGlzaCh2YWxpZGF0aW9uRm46IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0KSB7XHJcbiAgICAgIC8vIG9ubHkgdG9wIGxldmVsIHByb2Nlc3NWYWxpZGF0aW9ucyBjYWxsIHB1Ymxpc2hlc1xyXG4gICAgICB2YWxpZGF0aW9uRm4odGhpcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0ID0geyBlbnRpdHk6IHRoaXMuZW50aXR5LCBhZGRlZDogW10sIHJlbW92ZWQ6IFtdIH07XHJcbiAgICAgICAgdmFsaWRhdGlvbkZuKHRoaXMpO1xyXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdC5hZGRlZC5sZW5ndGggPiAwIHx8IHRoaXMuX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0LnJlbW92ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZC5wdWJsaXNoKHRoaXMuX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgICAgIC8vIHRoaXMgbWlnaHQgYmUgYSBkZXRhY2hlZCBlbnRpdHkgaGVuY2UgdGhlIGd1YXJkIGJlbG93LlxyXG4gICAgICAgICAgdGhpcy5lbnRpdHlNYW5hZ2VyICYmIHRoaXMuZW50aXR5TWFuYWdlci52YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZC5wdWJsaXNoKHRoaXMuX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0KTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0ID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICAvLyBUT0RPOiBhZGQvdXNlIGEgVmFsaWRhdGlvbkVycm9yIHR5cGVcclxuICBfYWRkVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25FcnJvcjogYW55KSB7XHJcbiAgICB0aGlzLl92YWxpZGF0aW9uRXJyb3JzW3ZhbGlkYXRpb25FcnJvci5rZXldID0gdmFsaWRhdGlvbkVycm9yO1xyXG4gICAgdGhpcy5oYXNWYWxpZGF0aW9uRXJyb3JzID0gdHJ1ZTtcclxuICAgIHRoaXMuX3BlbmRpbmdWYWxpZGF0aW9uUmVzdWx0LmFkZGVkLnB1c2godmFsaWRhdGlvbkVycm9yKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9yZW1vdmVWYWxpZGF0aW9uRXJyb3Ioa2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCB2YWxFcnJvciA9IHRoaXMuX3ZhbGlkYXRpb25FcnJvcnNba2V5XTtcclxuICAgIGlmICh2YWxFcnJvcikge1xyXG4gICAgICBkZWxldGUgdGhpcy5fdmFsaWRhdGlvbkVycm9yc1trZXldO1xyXG4gICAgICB0aGlzLmhhc1ZhbGlkYXRpb25FcnJvcnMgPSAhY29yZS5pc0VtcHR5KHRoaXMuX3ZhbGlkYXRpb25FcnJvcnMpO1xyXG4gICAgICB0aGlzLl9wZW5kaW5nVmFsaWRhdGlvblJlc3VsdC5yZW1vdmVkLnB1c2godmFsRXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbkJyZWV6ZUV2ZW50LmJ1YmJsZUV2ZW50KEVudGl0eUFzcGVjdC5wcm90b3R5cGUsIGZ1bmN0aW9uICgpIHtcclxuICByZXR1cm4gdGhpcy5lbnRpdHlNYW5hZ2VyO1xyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHJlamVjdENoYW5nZXNDb3JlKHRhcmdldDogYW55KSB7XHJcbiAgbGV0IGFzcGVjdCA9IHRhcmdldC5lbnRpdHlBc3BlY3QgfHwgdGFyZ2V0LmNvbXBsZXhBc3BlY3Q7XHJcbiAgbGV0IHN0eXBlID0gdGFyZ2V0LmVudGl0eVR5cGUgfHwgdGFyZ2V0LmNvbXBsZXhUeXBlO1xyXG4gIGxldCBvcmlnaW5hbFZhbHVlcyA9IGFzcGVjdC5vcmlnaW5hbFZhbHVlcztcclxuICBmb3IgKGxldCBwcm9wTmFtZSBpbiBvcmlnaW5hbFZhbHVlcykge1xyXG4gICAgdGFyZ2V0LnNldFByb3BlcnR5KHByb3BOYW1lLCBvcmlnaW5hbFZhbHVlc1twcm9wTmFtZV0pO1xyXG4gIH1cclxuICBzdHlwZS5jb21wbGV4UHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChjcDogYW55KSB7XHJcbiAgICBsZXQgY29zID0gdGFyZ2V0LmdldFByb3BlcnR5KGNwLm5hbWUpO1xyXG4gICAgaWYgKGNwLmlzU2NhbGFyKSB7XHJcbiAgICAgIHJlamVjdENoYW5nZXNDb3JlKGNvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb3MuX3JlamVjdENoYW5nZXMoKTtcclxuICAgICAgY29zLmZvckVhY2gocmVqZWN0Q2hhbmdlc0NvcmUpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVGcm9tUmVsYXRpb25zKGVudGl0eTogRW50aXR5LCBlbnRpdHlTdGF0ZTogRW50aXR5U3RhdGUpIHtcclxuICAvLyByZW1vdmUgdGhpcyBlbnRpdHkgZnJvbSBhbnkgY29sbGVjdGlvbnMuXHJcbiAgLy8gbWFyayB0aGUgZW50aXR5IGRlbGV0ZWQgb3IgZGV0YWNoZWRcclxuXHJcbiAgbGV0IGlzRGVsZXRlZCA9IGVudGl0eVN0YXRlLmlzRGVsZXRlZCgpO1xyXG4gIGlmIChpc0RlbGV0ZWQpIHtcclxuICAgIHJlbW92ZUZyb21SZWxhdGlvbnNDb3JlKGVudGl0eSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvcmUudXNpbmcoZW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyISwgXCJpc0xvYWRpbmdcIiwgdHJ1ZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICByZW1vdmVGcm9tUmVsYXRpb25zQ29yZShlbnRpdHkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVGcm9tUmVsYXRpb25zQ29yZShlbnRpdHk6IEVudGl0eSkge1xyXG4gIGVudGl0eS5lbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG5wKSB7XHJcbiAgICBsZXQgaW52ZXJzZU5wID0gbnAuaW52ZXJzZTtcclxuICAgIGxldCBucFZhbHVlID0gZW50aXR5LmdldFByb3BlcnR5KG5wLm5hbWUpO1xyXG4gICAgaWYgKG5wLmlzU2NhbGFyKSB7XHJcbiAgICAgIGlmIChucFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGludmVyc2VOcCkge1xyXG4gICAgICAgICAgaWYgKGludmVyc2VOcC5pc1NjYWxhcikge1xyXG4gICAgICAgICAgICBucFZhbHVlLnNldFByb3BlcnR5KGludmVyc2VOcC5uYW1lLCBudWxsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gbnBWYWx1ZS5nZXRQcm9wZXJ0eShpbnZlcnNlTnAubmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGNvcmUuYXJyYXlSZW1vdmVJdGVtKGNvbGxlY3Rpb24sIGVudGl0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZW50aXR5LnNldFByb3BlcnR5KG5wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaW52ZXJzZU5wICE9IG51bGwpIHtcclxuICAgICAgICAvLyBucFZhbHVlIGlzIGEgbGl2ZSBsaXN0IHNvIHdlIG5lZWQgdG8gY29weSBpdCBmaXJzdC5cclxuICAgICAgICBucFZhbHVlLnNsaWNlKDApLmZvckVhY2goKHY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGludmVyc2VOcCEuaXNTY2FsYXIpIHtcclxuICAgICAgICAgICAgdi5zZXRQcm9wZXJ0eShpbnZlcnNlTnAhLm5hbWUsIG51bGwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogbWFueSB0byBtYW55IC0gbm90IHlldCBoYW5kbGVkLlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIG5vdyBjbGVhciBpdC5cclxuICAgICAgbnBWYWx1ZS5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxufVxyXG5cclxuLy8gbm90ZSBlbnRpdHlBc3BlY3Qgb25seSAtICggbm8gY29tcGxleCBhc3BlY3QgYWxsb3dlZCBvbiB0aGUgY2FsbCkuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlKGVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LCB2YWxpZGF0b3I6IFZhbGlkYXRvciwgdmFsdWU6IGFueSwgY29udGV4dD86IGFueSkge1xyXG4gIGxldCB2ZSA9IHZhbGlkYXRvci52YWxpZGF0ZSh2YWx1ZSwgY29udGV4dCk7XHJcbiAgaWYgKHZlKSB7XHJcbiAgICBlbnRpdHlBc3BlY3QuX2FkZFZhbGlkYXRpb25FcnJvcih2ZSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCBrZXkgPSBWYWxpZGF0aW9uRXJyb3IuZ2V0S2V5KHZhbGlkYXRvciwgY29udGV4dCA/IGNvbnRleHQucHJvcGVydHlOYW1lIDogbnVsbCk7XHJcbiAgICBlbnRpdHlBc3BlY3QuX3JlbW92ZVZhbGlkYXRpb25FcnJvcihrZXkpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBjb0luZGV4IGlzIG9ubHkgdXNlZCB3aGVyZSB0YXJnZXQgaXMgYSBjb21wbGV4IG9iamVjdCB0aGF0IGlzIHBhcnQgb2YgYW4gYXJyYXkgb2YgY29tcGxleCBvYmplY3RzXHJcbi8vIGluIHdoaWNoIGNhc2UgY3RJbmRleCBpcyB0aGUgaW5kZXggb2YgdGhlIHRhcmdldCB3aXRoaW4gdGhlIGFycmF5LlxyXG5mdW5jdGlvbiB2YWxpZGF0ZVRhcmdldCh0YXJnZXQ6IGFueSwgY29JbmRleD86IG51bWJlcikge1xyXG4gIGxldCBvayA9IHRydWU7XHJcbiAgbGV0IHN0eXBlID0gdGFyZ2V0LmVudGl0eVR5cGUgfHwgdGFyZ2V0LmNvbXBsZXhUeXBlO1xyXG4gIGxldCBhc3BlY3QgPSB0YXJnZXQuZW50aXR5QXNwZWN0IHx8IHRhcmdldC5jb21wbGV4QXNwZWN0O1xyXG4gIGxldCBlbnRpdHlBc3BlY3QgPSB0YXJnZXQuZW50aXR5QXNwZWN0IHx8IHRhcmdldC5jb21wbGV4QXNwZWN0LmdldEVudGl0eUFzcGVjdCgpO1xyXG4gIGxldCBjb250ZXh0ID0gPGFueT57IGVudGl0eTogZW50aXR5QXNwZWN0LmVudGl0eSB9O1xyXG4gIGlmIChjb0luZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGNvbnRleHQuaW5kZXggPSBjb0luZGV4O1xyXG4gIH1cclxuXHJcbiAgc3R5cGUuZ2V0UHJvcGVydGllcygpLmZvckVhY2goZnVuY3Rpb24gKHA6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlID0gdGFyZ2V0LmdldFByb3BlcnR5KHAubmFtZSk7XHJcbiAgICBsZXQgdmFsaWRhdG9ycyA9IHAuZ2V0QWxsVmFsaWRhdG9ycygpO1xyXG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb250ZXh0LnByb3BlcnR5ID0gcDtcclxuICAgICAgY29udGV4dC5wcm9wZXJ0eU5hbWUgPSBhc3BlY3QuZ2V0UHJvcGVydHlQYXRoKHAubmFtZSk7XHJcbiAgICAgIG9rID0gZW50aXR5QXNwZWN0Ll92YWxpZGF0ZVByb3BlcnR5KHZhbHVlLCBjb250ZXh0KSAmJiBvaztcclxuICAgIH1cclxuICAgIGlmIChwLmlzQ29tcGxleFByb3BlcnR5KSB7XHJcbiAgICAgIGlmIChwLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgb2sgPSB2YWxpZGF0ZVRhcmdldCh2YWx1ZSkgJiYgb2s7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2sgPSB2YWx1ZS5yZWR1Y2UoZnVuY3Rpb24gKHB2OiBhbnksIGN2OiBhbnksIGl4OiBudW1iZXIpIHtcclxuICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVRhcmdldChjdiwgaXgpICYmIHB2O1xyXG4gICAgICAgIH0sIG9rKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gdGhlbiB0YXJnZXQgbGV2ZWxcclxuICBzdHlwZS5nZXRBbGxWYWxpZGF0b3JzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsaWRhdG9yOiBWYWxpZGF0b3IpIHtcclxuICAgIG9rID0gdmFsaWRhdGUoZW50aXR5QXNwZWN0LCB2YWxpZGF0b3IsIHRhcmdldCkgJiYgb2s7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG9rO1xyXG59XHJcblxyXG4vKipcclxuQW4gQ29tcGxleEFzcGVjdCBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGggZXZlcnkgY29tcGxleCBvYmplY3QgaW5zdGFuY2UgYW5kIGlzIGFjY2Vzc2VkIHZpYSB0aGUgY29tcGxleCBvYmplY3QncyAnY29tcGxleEFzcGVjdCcgcHJvcGVydHkuXHJcblxyXG5UaGUgQ29tcGxleEFzcGVjdCBpdHNlbGYgcHJvdmlkZXMgcHJvcGVydGllcyB0byBkZXRlcm1pbmUgdGhlIHBhcmVudCBvYmplY3QsIHBhcmVudCBwcm9wZXJ0eSBhbmQgb3JpZ2luYWwgdmFsdWVzIGZvciB0aGUgY29tcGxleCBvYmplY3QuXHJcblxyXG5BIENvbXBsZXhBc3BlY3Qgd2lsbCBhbG1vc3QgbmV2ZXIgbmVlZCB0byBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseS4gWW91IHdpbGwgdXN1YWxseSBnZXQgYW4gQ29tcGxleEFzcGVjdCBieSBhY2Nlc3NpbmdcclxuYW4gZW50aXRpZXMgJ2NvbXBsZXhBc3BlY3QnIHByb3BlcnR5LiAgVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXR0YWNoZWQgd2hlbiBhbiBjb21wbGV4IG9iamVjdCBpcyBjcmVhdGVkIGFzIHBhcnQgb2YgYW5cclxuZW50aXR5IHZpYSBlaXRoZXIgYSBxdWVyeSwgaW1wb3J0IG9yIEVudGl0eU1hbmFnZXIuY3JlYXRlRW50aXR5IGNhbGwuXHJcbj4gICAgICAvLyBhc3N1bWUgYWRkcmVzcyBpcyBhIGNvbXBsZXggcHJvcGVydHkgb24gdGhlICdDdXN0b21lcicgdHlwZVxyXG4+ICAgICAgdmFyIGFzcGVjdCA9IGFDdXN0b21lci5hZGRyZXNzLmNvbXBsZXhBc3BlY3Q7XHJcbj4gICAgICAvLyBhQ3VzdG9tZXIgPT09IGFzcGVjdC5wYXJlbnQ7XHJcbioqL1xyXG5leHBvcnQgY2xhc3MgQ29tcGxleEFzcGVjdCB7XHJcblxyXG4gIC8qKiBUaGUgY29tcGxleCBvYmplY3QgdGhhdCB0aGlzIGFzcGVjdCBpcyBhc3NvY2lhdGVkIHdpdGguIF9fUmVhZCBPbmx5X18gKi9cclxuICBjb21wbGV4T2JqZWN0OiBDb21wbGV4T2JqZWN0O1xyXG4gIC8qKiBUaGUgJ29yaWdpbmFsIHZhbHVlcycgb2YgdGhpcyBjb21wbGV4IG9iamVjdCB3aGVyZSB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgJ2N1cnJlbnQgdmFsdWVzJy5cclxuICBUaGlzIGlzIGEgbWFwIHdoZXJlIHRoZSBrZXkgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCB0aGUgdmFsdWUgaXMgdGhlICdvcmlnaW5hbCB2YWx1ZScgb2YgdGhlIHByb3BlcnR5LlxyXG4gIF9fUmVhZCBPbmx5X18gKi9cclxuICBvcmlnaW5hbFZhbHVlczoge307XHJcbiAgLyoqIFRoZSBwYXJlbnQgb2JqZWN0IHRoYXQgdG8gd2hpY2ggdGhpcyBhc3BlY3QgYmVsb25nczsgdGhpcyB3aWxsIGVpdGhlciBiZSBhbiBlbnRpdHkgb3IgYW5vdGhlciBjb21wbGV4IG9iamVjdC4gX19SZWFkIE9ubHlfXyAqL1xyXG4gIHBhcmVudD86IFN0cnVjdHVyYWxPYmplY3Q7XHJcbiAgLyoqIFRoZSBbW0RhdGFQcm9wZXJ0eV1dIG9uIHRoZSAncGFyZW50JyB0aGF0IGNvbnRhaW5zIHRoaXMgY29tcGxleCBvYmplY3QuIF9fUmVhZCBPbmx5X18gKi9cclxuICBwYXJlbnRQcm9wZXJ0eT86IERhdGFQcm9wZXJ0eTtcclxuICBleHRyYU1ldGFkYXRhPzogYW55O1xyXG5cclxuICAvKiogWW91IHdpbGwgcmFyZWx5LCBpZiBldmVyLCBjcmVhdGUgYSBDb21wbGV4QXNwZWN0IGRpcmVjdGx5LiAqL1xyXG4gIGNvbnN0cnVjdG9yKGNvbXBsZXhPYmplY3Q6IENvbXBsZXhPYmplY3QsIHBhcmVudDogU3RydWN0dXJhbE9iamVjdCwgcGFyZW50UHJvcGVydHk6IERhdGFQcm9wZXJ0eSkge1xyXG4gICAgaWYgKCFjb21wbGV4T2JqZWN0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAgQ29tcGxleEFzcGVjdCBjdG9yIHJlcXVpcmVzIGFuIGVudGl0eSBhcyBpdHMgb25seSBhcmd1bWVudC5cIik7XHJcbiAgICB9XHJcbiAgICBpZiAoY29tcGxleE9iamVjdC5jb21wbGV4QXNwZWN0KSB7XHJcbiAgICAgIHJldHVybiBjb21wbGV4T2JqZWN0LmNvbXBsZXhBc3BlY3Q7XHJcbiAgICB9XHJcbiAgICAvLyBpZiBjYWxsZWQgd2l0aG91dCBuZXdcclxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb21wbGV4QXNwZWN0KSkge1xyXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXhBc3BlY3QoY29tcGxleE9iamVjdCwgcGFyZW50LCBwYXJlbnRQcm9wZXJ0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZW50aXR5VHlwZSBzaG91bGQgYWxyZWFkeSBiZSBvbiB0aGUgZW50aXR5IGZyb20gJ3dhdGNoJ1xyXG4gICAgdGhpcy5jb21wbGV4T2JqZWN0ID0gY29tcGxleE9iamVjdDtcclxuICAgIGNvbXBsZXhPYmplY3QuY29tcGxleEFzcGVjdCA9IHRoaXM7XHJcblxyXG4gICAgLy8gVE9ETzoga2VlcCBwdWJsaWMgb3Igbm90P1xyXG4gICAgdGhpcy5vcmlnaW5hbFZhbHVlcyA9IHt9O1xyXG5cclxuICAgIC8vIGlmIGEgc3RhbmRhbG9uZSBjb21wbGV4T2JqZWN0XHJcbiAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICAgIHRoaXMucGFyZW50UHJvcGVydHkgPSBwYXJlbnRQcm9wZXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29tcGxleFR5cGUgPSBjb21wbGV4T2JqZWN0LmNvbXBsZXhUeXBlO1xyXG4gICAgaWYgKCFjb21wbGV4VHlwZSkge1xyXG4gICAgICBsZXQgdHlwZU5hbWUgPSBjb21wbGV4T2JqZWN0LnByb3RvdHlwZS5fJHR5cGVOYW1lO1xyXG4gICAgICBpZiAoIXR5cGVOYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbnRpdHkgaXMgbm90IHJlZ2lzdGVyZWQgYXMgYSB2YWxpZCBDb21wbGV4VHlwZVwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBmb3IgdGhpcyBjb21wbGV4VHlwZSBoYXMgbm90IHlldCBiZWVuIHJlc29sdmVkOiBcIiArIHR5cGVOYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGNvbXBsZXhDdG9yID0gY29tcGxleFR5cGUuZ2V0Q3RvcigpO1xyXG4gICAgY29uZmlnLmludGVyZmFjZVJlZ2lzdHJ5Lm1vZGVsTGlicmFyeS5nZXREZWZhdWx0SW5zdGFuY2UoKS5zdGFydFRyYWNraW5nKGNvbXBsZXhPYmplY3QsIGNvbXBsZXhDdG9yLnByb3RvdHlwZSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgdGhlIEVudGl0eUFzcGVjdCBmb3IgdGhlIHRvcCBsZXZlbCBlbnRpdHkgdGhhdCBjb250YWlucyB0aGlzIGNvbXBsZXggb2JqZWN0LlxyXG4gICoqL1xyXG4gIGdldEVudGl0eUFzcGVjdCgpIHtcclxuICAgIGxldCBwYXJlbnQgPSA8YW55PnRoaXMucGFyZW50O1xyXG4gICAgaWYgKCFwYXJlbnQpIHJldHVybiBuZXcgRW50aXR5QXNwZWN0KCk7XHJcbiAgICBsZXQgZW50aXR5QXNwZWN0ID0gcGFyZW50LmVudGl0eUFzcGVjdDtcclxuICAgIHdoaWxlIChwYXJlbnQgJiYgIWVudGl0eUFzcGVjdCkge1xyXG4gICAgICBwYXJlbnQgPSBwYXJlbnQuY29tcGxleEFzcGVjdCAmJiBwYXJlbnQuY29tcGxleEFzcGVjdC5wYXJlbnQ7XHJcbiAgICAgIGVudGl0eUFzcGVjdCA9IHBhcmVudCAmJiBwYXJlbnQuZW50aXR5QXNwZWN0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVudGl0eUFzcGVjdCB8fCBuZXcgRW50aXR5QXNwZWN0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgLy8gVE9ETzogcmVuYW1lIC0gYW5kIHVzZSAnXyc7IHVzZWQgb24gYm90aCBFbnRpdHlBc3BlY3QgYW5kIENvbXBsZXhBc3BlY3QgZm9yIHBvbHltb3JwaGljIHJlYXNvbnMuXHJcbiAgZ2V0UHJvcGVydHlQYXRoKHByb3BOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJlbnQgPSA8YW55PnRoaXMucGFyZW50O1xyXG4gICAgaWYgKCFwYXJlbnQpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IGFzcGVjdCA9IHBhcmVudC5jb21wbGV4QXNwZWN0IHx8IHBhcmVudC5lbnRpdHlBc3BlY3Q7XHJcbiAgICByZXR1cm4gYXNwZWN0LmdldFByb3BlcnR5UGF0aCh0aGlzLnBhcmVudFByb3BlcnR5IS5uYW1lICsgXCIuXCIgKyBwcm9wTmFtZSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gY2xlYXJPcmlnaW5hbFZhbHVlcyh0YXJnZXQ6IGFueSkge1xyXG4gIGxldCBhc3BlY3QgPSB0YXJnZXQuZW50aXR5QXNwZWN0IHx8IHRhcmdldC5jb21wbGV4QXNwZWN0O1xyXG4gIGFzcGVjdC5vcmlnaW5hbFZhbHVlcyA9IHt9O1xyXG4gIGxldCBzdHlwZSA9IHRhcmdldC5lbnRpdHlUeXBlIHx8IHRhcmdldC5jb21wbGV4VHlwZTtcclxuICBzdHlwZS5jb21wbGV4UHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChjcDogYW55KSB7XHJcbiAgICBsZXQgY29zID0gdGFyZ2V0LmdldFByb3BlcnR5KGNwLm5hbWUpO1xyXG4gICAgaWYgKGNwLmlzU2NhbGFyKSB7XHJcbiAgICAgIGNsZWFyT3JpZ2luYWxWYWx1ZXMoY29zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvcy5fYWNjZXB0Q2hhbmdlcygpO1xyXG4gICAgICBjb3MuZm9yRWFjaChjbGVhck9yaWdpbmFsVmFsdWVzKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuXHJcbiJdfQ==
|
package/esm5/src/breeze.js
CHANGED
|
@@ -70,7 +70,7 @@ export var breeze = {
|
|
|
70
70
|
ValidationError: ValidationError,
|
|
71
71
|
ValidationOptions: ValidationOptions,
|
|
72
72
|
Validator: Validator,
|
|
73
|
-
version: "2.1.
|
|
73
|
+
version: "2.1.5"
|
|
74
74
|
};
|
|
75
75
|
/** @hidden @internal */
|
|
76
76
|
var win;
|
|
@@ -82,4 +82,4 @@ catch (e) {
|
|
|
82
82
|
if (win) {
|
|
83
83
|
win.breeze = breeze;
|
|
84
84
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9icmVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQW1ELE1BQU0sZ0JBQWdCLENBQUM7QUFDckksT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXFFLE1BQU0saUJBQWlCLENBQUM7QUFDakksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFtTixNQUFNLGtCQUFrQixDQUFDO0FBQ2xRLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtLLE1BQU0sc0JBQXNCLENBQUM7QUFDek4sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLLE9BQUE7SUFDTCxTQUFTLEVBQUUsU0FBUztJQUNwQixZQUFZLEVBQUUsWUFBWTtJQUMxQixXQUFXLEVBQUUsV0FBVztJQUN4QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsU0FBUyxFQUFFLFNBQVM7SUFDcEIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQWdCRix3QkFBd0I7QUFDeEIsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJO0lBQ0YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFBQyxPQUFPLENBQUMsRUFBRTtDQUVYO0FBQ0QsSUFBSSxHQUFHLEVBQUU7SUFDUCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hYnN0cmFjdC1kYXRhLXNlcnZpY2UtYWRhcHRlcic7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtLCBhc3NlcnRDb25maWcsIFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBCcmVlemVDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEYXRhU2VydmljZUNvbmZpZywgSnNvblJlc3VsdHNBZGFwdGVyLCBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsIE5vZGVDb250ZXh0LCBOb2RlTWV0YSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgQ29tcGxleE9iamVjdCwgU3RydWN0dXJhbE9iamVjdCwgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TWFuYWdlckNvbmZpZywgRW50aXR5RXJyb3IsIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsIFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBIdHRwUmVzcG9uc2UsIEtleU1hcHBpbmcsIFNlcnZlckVycm9yLCBTYXZlUmVzdWx0LCBRdWVyeVJlc3VsdCwgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5LCBGaWx0ZXJRdWVyeU9wLCBCb29sZWFuUXVlcnlPcCwgT3JkZXJCeUNsYXVzZSwgRXhwYW5kQ2xhdXNlLCBTZWxlY3RDbGF1c2UgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBJbnRlcmZhY2VSZWdpc3RyeSwgQWpheEFkYXB0ZXIsIEFqYXhDb25maWcsIERhdGFTZXJ2aWNlQWRhcHRlciwgTW9kZWxMaWJyYXJ5QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLCBVcmlCdWlsZGVyQWRhcHRlciwgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcsIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleUdlbmVyYXRvciB9IGZyb20gJy4va2V5LWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB9IGZyb20gJy4vbG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBTdHJ1Y3R1cmFsVHlwZSwgRGF0YVByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSAgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBOYW1pbmdDb252ZW50aW9uIH0gZnJvbSAnLi9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgVmlzaXRDb250ZXh0LCBWaXNpdG9yLCBFeHByZXNzaW9uQ29udGV4dCwgVW5hcnlQcmVkaWNhdGUsIEJpbmFyeVByZWRpY2F0ZSwgQW55QWxsUHJlZGljYXRlLCBBbmRPclByZWRpY2F0ZSwgTGl0RXhwciwgRm5FeHByLCBQcm9wRXhwciB9IGZyb20gJy4vcHJlZGljYXRlJztcclxuaW1wb3J0IHsgUXVlcnlPcHRpb25zLCAgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4vcXVlcnktb3B0aW9ucyc7XHJcbmltcG9ydCB7IFNhdmVPcHRpb25zIH0gZnJvbSAnLi9zYXZlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbi1vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZywgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUsIENhbGxiYWNrLCBFcnJvckNhbGxiYWNrIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXksIG1ha2VQcmltaXRpdmVBcnJheSwgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vYXJyYXknO1xyXG5cclxuaW1wb3J0IHsgUmVsYXRpb25BcnJheSB9IGZyb20gJy4vcmVsYXRpb24tYXJyYXknO1xyXG5pbXBvcnQgeyBBcnJheUNoYW5nZWRBcmdzIH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuZXhwb3J0IHsgQnJlZXplQ29uZmlnLCBDb21wbGV4QXJyYXksIFJlbGF0aW9uQXJyYXkgfTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIsXHJcbiAgQWpheEFkYXB0ZXIsXHJcbiAgQWpheENvbmZpZyxcclxuICBBamF4UmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIEFuZE9yUHJlZGljYXRlLFxyXG4gIEFueUFsbFByZWRpY2F0ZSxcclxuICBBcnJheUNoYW5nZWRBcmdzLFxyXG4gIGFzc2VydENvbmZpZyxcclxuICBhc3NlcnRQYXJhbSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCYXNlQWRhcHRlcixcclxuICBCaW5hcnlQcmVkaWNhdGUsXHJcbiAgQnJlZXplRW51bSxcclxuICBCcmVlemVFdmVudCwgXHJcbiAgQ2FsbGJhY2ssXHJcbiAgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleE9iamVjdCxcclxuICBDb21wbGV4VHlwZSxcclxuICBjb25maWcsXHJcbiAgY29yZSxcclxuICBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIERhdGFTZXJ2aWNlQ29uZmlnLFxyXG4gIERhdGFUeXBlLFxyXG4gIEVudGl0eSxcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsXHJcbiAgRW50aXR5RXJyb3IsXHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5TWFuYWdlckNvbmZpZyxcclxuICBFbnRpdHlQcm9wZXJ0eSxcclxuICBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlLFxyXG4gIEVycm9yQ2FsbGJhY2ssXHJcbiAgRXhwYW5kQ2xhdXNlLFxyXG4gIEV4cHJlc3Npb25Db250ZXh0LFxyXG4gIEZldGNoU3RyYXRlZ3ksXHJcbiAgRmlsdGVyUXVlcnlPcCxcclxuICBGbkV4cHIsXHJcbiAgSGFzQ2hhbmdlc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsXHJcbiAgS2V5R2VuZXJhdG9yLFxyXG4gIEtleU1hcHBpbmcsXHJcbiAgTGl0RXhwcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXHJcbiAgbWFrZUNvbXBsZXhBcnJheSxcclxuICBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXksXHJcbiAgTWFwcGluZ0NvbnRleHQsXHJcbiAgTWVyZ2VTdHJhdGVneSxcclxuICBNZXRhZGF0YVN0b3JlLFxyXG4gIE1vZGVsTGlicmFyeUFkYXB0ZXIsXHJcbiAgTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHksXHJcbiAgTm9kZUNvbnRleHQsXHJcbiAgTm9kZU1ldGEsXHJcbiAgT3JkZXJCeUNsYXVzZSxcclxuICBQcmVkaWNhdGUsXHJcbiAgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFByb3BFeHByLFxyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVJlc3VsdCxcclxuICBTYXZlQnVuZGxlLFxyXG4gIFNhdmVDb250ZXh0LFxyXG4gIFNhdmVPcHRpb25zLFxyXG4gIFNhdmVSZXN1bHQsXHJcbiAgU2VsZWN0Q2xhdXNlLFxyXG4gIFNlcnZlckVycm9yLFxyXG4gIFN0cnVjdHVyYWxPYmplY3QsXHJcbiAgU3RydWN0dXJhbFR5cGUsXHJcbiAgVW5hcnlQcmVkaWNhdGUsXHJcbiAgVXJpQnVpbGRlckFkYXB0ZXIsXHJcbiAgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcixcclxuICBWaXNpdENvbnRleHQsXHJcbiAgVmlzaXRvcixcclxufTtcclxuXHJcbi8vIGNyZWF0ZSBhIGJyZWV6ZSB2YXJpYWJsZSBoZXJlXHJcbmV4cG9ydCBjb25zdCBicmVlemUgPSB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXI6IEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIGFzc2VydENvbmZpZzogbnVsbCBhcyBhbnksXHJcbiAgYXNzZXJ0UGFyYW06IG51bGwgYXMgYW55LFxyXG4gIEF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCb29sZWFuUXVlcnlPcDogQm9vbGVhblF1ZXJ5T3AsXHJcbiAgQ29tcGxleEFzcGVjdDogQ29tcGxleEFzcGVjdCxcclxuICBDb21wbGV4VHlwZTogQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnOiBjb25maWcsXHJcbiAgY29yZTogY29yZSxcclxuICBEYXRhUHJvcGVydHk6IERhdGFQcm9wZXJ0eSxcclxuICBEYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVR5cGU6IERhdGFUeXBlLFxyXG4gIEVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUtleTogRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5UXVlcnk6IEVudGl0eVF1ZXJ5LFxyXG4gIEVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxyXG4gIEV2ZW50OiBCcmVlemVFdmVudCxcclxuICBGZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3A6IEZpbHRlclF1ZXJ5T3AsXHJcbiAgSW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyLFxyXG4gIEtleUdlbmVyYXRvcjogS2V5R2VuZXJhdG9yLFxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uczogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXk6IG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5OiBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXk6IG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSxcclxuICBOYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLFxyXG4gIE5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE9yZGVyQnlDbGF1c2U6IE9yZGVyQnlDbGF1c2UsIC8vIGZvciB0ZXN0aW5nIG9ubHlcclxuICBQYXJhbSxcclxuICBQcmVkaWNhdGU6IFByZWRpY2F0ZSxcclxuICBRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICBTYXZlT3B0aW9uczogU2F2ZU9wdGlvbnMsXHJcbiAgVmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnM6IFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcjogVmFsaWRhdG9yLFxyXG4gIHZlcnNpb246IFwiMi4xLjRcIlxyXG59O1xyXG5cclxuLy8gYnJlZXplLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZyBhcyBhbnk7XHJcbi8vIGJyZWV6ZS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtIGFzIGFueTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgcHJvbWlzZXMge1xyXG4gIC8qKiBuby1vcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGJyZWV6ZS1icmlkZ2UyLWFuZ3VsYXIgKi9cclxuICBleHBvcnQgaW50ZXJmYWNlIElQcm9taXNlU2VydmljZSB7fVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxubGV0IHdpbjogYW55O1xyXG50cnkge1xyXG4gIHdpbiA9IHdpbmRvdyA/IHdpbmRvdyA6IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxufSBjYXRjaCAoZSkge1xyXG5cclxufVxyXG5pZiAod2luKSB7XHJcbiAgd2luLmJyZWV6ZSA9IGJyZWV6ZTtcclxufVxyXG4iXX0=
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9icmVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQW1ELE1BQU0sZ0JBQWdCLENBQUM7QUFDckksT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXFFLE1BQU0saUJBQWlCLENBQUM7QUFDakksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFtTixNQUFNLGtCQUFrQixDQUFDO0FBQ2xRLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtLLE1BQU0sc0JBQXNCLENBQUM7QUFDek4sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLLE9BQUE7SUFDTCxTQUFTLEVBQUUsU0FBUztJQUNwQixZQUFZLEVBQUUsWUFBWTtJQUMxQixXQUFXLEVBQUUsV0FBVztJQUN4QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsU0FBUyxFQUFFLFNBQVM7SUFDcEIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQWdCRix3QkFBd0I7QUFDeEIsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJO0lBQ0YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFBQyxPQUFPLENBQUMsRUFBRTtDQUVYO0FBQ0QsSUFBSSxHQUFHLEVBQUU7SUFDUCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hYnN0cmFjdC1kYXRhLXNlcnZpY2UtYWRhcHRlcic7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtLCBhc3NlcnRDb25maWcsIFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBCcmVlemVDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEYXRhU2VydmljZUNvbmZpZywgSnNvblJlc3VsdHNBZGFwdGVyLCBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsIE5vZGVDb250ZXh0LCBOb2RlTWV0YSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgQ29tcGxleE9iamVjdCwgU3RydWN0dXJhbE9iamVjdCwgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TWFuYWdlckNvbmZpZywgRW50aXR5RXJyb3IsIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsIFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBIdHRwUmVzcG9uc2UsIEtleU1hcHBpbmcsIFNlcnZlckVycm9yLCBTYXZlUmVzdWx0LCBRdWVyeVJlc3VsdCwgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5LCBGaWx0ZXJRdWVyeU9wLCBCb29sZWFuUXVlcnlPcCwgT3JkZXJCeUNsYXVzZSwgRXhwYW5kQ2xhdXNlLCBTZWxlY3RDbGF1c2UgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBJbnRlcmZhY2VSZWdpc3RyeSwgQWpheEFkYXB0ZXIsIEFqYXhDb25maWcsIERhdGFTZXJ2aWNlQWRhcHRlciwgTW9kZWxMaWJyYXJ5QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLCBVcmlCdWlsZGVyQWRhcHRlciwgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcsIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleUdlbmVyYXRvciB9IGZyb20gJy4va2V5LWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB9IGZyb20gJy4vbG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBTdHJ1Y3R1cmFsVHlwZSwgRGF0YVByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSAgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBOYW1pbmdDb252ZW50aW9uIH0gZnJvbSAnLi9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgVmlzaXRDb250ZXh0LCBWaXNpdG9yLCBFeHByZXNzaW9uQ29udGV4dCwgVW5hcnlQcmVkaWNhdGUsIEJpbmFyeVByZWRpY2F0ZSwgQW55QWxsUHJlZGljYXRlLCBBbmRPclByZWRpY2F0ZSwgTGl0RXhwciwgRm5FeHByLCBQcm9wRXhwciB9IGZyb20gJy4vcHJlZGljYXRlJztcclxuaW1wb3J0IHsgUXVlcnlPcHRpb25zLCAgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4vcXVlcnktb3B0aW9ucyc7XHJcbmltcG9ydCB7IFNhdmVPcHRpb25zIH0gZnJvbSAnLi9zYXZlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbi1vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZywgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUsIENhbGxiYWNrLCBFcnJvckNhbGxiYWNrIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXksIG1ha2VQcmltaXRpdmVBcnJheSwgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vYXJyYXknO1xyXG5cclxuaW1wb3J0IHsgUmVsYXRpb25BcnJheSB9IGZyb20gJy4vcmVsYXRpb24tYXJyYXknO1xyXG5pbXBvcnQgeyBBcnJheUNoYW5nZWRBcmdzIH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuZXhwb3J0IHsgQnJlZXplQ29uZmlnLCBDb21wbGV4QXJyYXksIFJlbGF0aW9uQXJyYXkgfTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIsXHJcbiAgQWpheEFkYXB0ZXIsXHJcbiAgQWpheENvbmZpZyxcclxuICBBamF4UmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIEFuZE9yUHJlZGljYXRlLFxyXG4gIEFueUFsbFByZWRpY2F0ZSxcclxuICBBcnJheUNoYW5nZWRBcmdzLFxyXG4gIGFzc2VydENvbmZpZyxcclxuICBhc3NlcnRQYXJhbSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCYXNlQWRhcHRlcixcclxuICBCaW5hcnlQcmVkaWNhdGUsXHJcbiAgQnJlZXplRW51bSxcclxuICBCcmVlemVFdmVudCwgXHJcbiAgQ2FsbGJhY2ssXHJcbiAgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleE9iamVjdCxcclxuICBDb21wbGV4VHlwZSxcclxuICBjb25maWcsXHJcbiAgY29yZSxcclxuICBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIERhdGFTZXJ2aWNlQ29uZmlnLFxyXG4gIERhdGFUeXBlLFxyXG4gIEVudGl0eSxcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsXHJcbiAgRW50aXR5RXJyb3IsXHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5TWFuYWdlckNvbmZpZyxcclxuICBFbnRpdHlQcm9wZXJ0eSxcclxuICBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlLFxyXG4gIEVycm9yQ2FsbGJhY2ssXHJcbiAgRXhwYW5kQ2xhdXNlLFxyXG4gIEV4cHJlc3Npb25Db250ZXh0LFxyXG4gIEZldGNoU3RyYXRlZ3ksXHJcbiAgRmlsdGVyUXVlcnlPcCxcclxuICBGbkV4cHIsXHJcbiAgSGFzQ2hhbmdlc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsXHJcbiAgS2V5R2VuZXJhdG9yLFxyXG4gIEtleU1hcHBpbmcsXHJcbiAgTGl0RXhwcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXHJcbiAgbWFrZUNvbXBsZXhBcnJheSxcclxuICBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXksXHJcbiAgTWFwcGluZ0NvbnRleHQsXHJcbiAgTWVyZ2VTdHJhdGVneSxcclxuICBNZXRhZGF0YVN0b3JlLFxyXG4gIE1vZGVsTGlicmFyeUFkYXB0ZXIsXHJcbiAgTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHksXHJcbiAgTm9kZUNvbnRleHQsXHJcbiAgTm9kZU1ldGEsXHJcbiAgT3JkZXJCeUNsYXVzZSxcclxuICBQcmVkaWNhdGUsXHJcbiAgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFByb3BFeHByLFxyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVJlc3VsdCxcclxuICBTYXZlQnVuZGxlLFxyXG4gIFNhdmVDb250ZXh0LFxyXG4gIFNhdmVPcHRpb25zLFxyXG4gIFNhdmVSZXN1bHQsXHJcbiAgU2VsZWN0Q2xhdXNlLFxyXG4gIFNlcnZlckVycm9yLFxyXG4gIFN0cnVjdHVyYWxPYmplY3QsXHJcbiAgU3RydWN0dXJhbFR5cGUsXHJcbiAgVW5hcnlQcmVkaWNhdGUsXHJcbiAgVXJpQnVpbGRlckFkYXB0ZXIsXHJcbiAgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcixcclxuICBWaXNpdENvbnRleHQsXHJcbiAgVmlzaXRvcixcclxufTtcclxuXHJcbi8vIGNyZWF0ZSBhIGJyZWV6ZSB2YXJpYWJsZSBoZXJlXHJcbmV4cG9ydCBjb25zdCBicmVlemUgPSB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXI6IEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIGFzc2VydENvbmZpZzogbnVsbCBhcyBhbnksXHJcbiAgYXNzZXJ0UGFyYW06IG51bGwgYXMgYW55LFxyXG4gIEF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCb29sZWFuUXVlcnlPcDogQm9vbGVhblF1ZXJ5T3AsXHJcbiAgQ29tcGxleEFzcGVjdDogQ29tcGxleEFzcGVjdCxcclxuICBDb21wbGV4VHlwZTogQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnOiBjb25maWcsXHJcbiAgY29yZTogY29yZSxcclxuICBEYXRhUHJvcGVydHk6IERhdGFQcm9wZXJ0eSxcclxuICBEYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVR5cGU6IERhdGFUeXBlLFxyXG4gIEVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUtleTogRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5UXVlcnk6IEVudGl0eVF1ZXJ5LFxyXG4gIEVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxyXG4gIEV2ZW50OiBCcmVlemVFdmVudCxcclxuICBGZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3A6IEZpbHRlclF1ZXJ5T3AsXHJcbiAgSW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyLFxyXG4gIEtleUdlbmVyYXRvcjogS2V5R2VuZXJhdG9yLFxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uczogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXk6IG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5OiBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXk6IG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSxcclxuICBOYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLFxyXG4gIE5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE9yZGVyQnlDbGF1c2U6IE9yZGVyQnlDbGF1c2UsIC8vIGZvciB0ZXN0aW5nIG9ubHlcclxuICBQYXJhbSxcclxuICBQcmVkaWNhdGU6IFByZWRpY2F0ZSxcclxuICBRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICBTYXZlT3B0aW9uczogU2F2ZU9wdGlvbnMsXHJcbiAgVmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnM6IFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcjogVmFsaWRhdG9yLFxyXG4gIHZlcnNpb246IFwiMi4xLjVcIlxyXG59O1xyXG5cclxuLy8gYnJlZXplLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZyBhcyBhbnk7XHJcbi8vIGJyZWV6ZS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtIGFzIGFueTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgcHJvbWlzZXMge1xyXG4gIC8qKiBuby1vcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGJyZWV6ZS1icmlkZ2UyLWFuZ3VsYXIgKi9cclxuICBleHBvcnQgaW50ZXJmYWNlIElQcm9taXNlU2VydmljZSB7fVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxubGV0IHdpbjogYW55O1xyXG50cnkge1xyXG4gIHdpbiA9IHdpbmRvdyA/IHdpbmRvdyA6IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxufSBjYXRjaCAoZSkge1xyXG5cclxufVxyXG5pZiAod2luKSB7XHJcbiAgd2luLmJyZWV6ZSA9IGJyZWV6ZTtcclxufVxyXG4iXX0=
|