@data-client/rest 0.16.1 → 0.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/dist/index.js +8 -1
- package/dist/index.umd.min.js +1 -1
- package/legacy/RestEndpoint.js +3 -4
- package/legacy/RestEndpointTypes.js +1 -1
- package/legacy/RestHelpers.js +9 -2
- package/legacy/pathTypes.js +1 -1
- package/lib/RestEndpoint.js +3 -4
- package/lib/RestEndpointTypes.d.ts +13 -12
- package/lib/RestEndpointTypes.d.ts.map +1 -1
- package/lib/RestEndpointTypes.js +1 -1
- package/lib/RestHelpers.d.ts +1 -0
- package/lib/RestHelpers.d.ts.map +1 -1
- package/lib/RestHelpers.js +9 -2
- package/lib/pathTypes.d.ts +3 -0
- package/lib/pathTypes.d.ts.map +1 -1
- package/lib/pathTypes.js +1 -1
- package/package.json +2 -2
- package/src/RestEndpoint.js +7 -3
- package/src/RestEndpointTypes.ts +29 -20
- package/src/RestHelpers.ts +16 -1
- package/src/__tests__/RestEndpoint.ts +14 -0
- package/src/pathTypes.ts +7 -0
- package/ts4.0/RestEndpointTypes.d.ts +15 -12
- package/ts4.0/RestHelpers.d.ts +1 -0
- package/ts4.0/pathTypes.d.ts +6 -0
- package/ts4.1/RestEndpointTypes.d.ts +15 -12
- package/ts4.1/RestHelpers.d.ts +1 -0
- package/ts4.1/pathTypes.d.ts +3 -0
package/lib/RestEndpointTypes.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RFbmRwb2ludFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRW5kcG9pbnRFeHRyYU9wdGlvbnMsXG4gIEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRmV0Y2hGdW5jdGlvbixcbiAgUmVzb2x2ZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbGxlY3Rpb24gfSBmcm9tICcuL2V4dHJhY3RDb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7XG4gIE9wdGlvbnNUb0JvZHlBcmd1bWVudCxcbiAgT3B0aW9uc1RvRnVuY3Rpb24sXG59IGZyb20gJy4vT3B0aW9uc1RvRnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgUGF0aEFyZ3MgfSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5pbXBvcnQgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi9SZXN0RW5kcG9pbnRUeXBlSGVscC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEluc3RhbmNlQmFzZTxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIG1ldGhvZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nIH0sXG4+IGV4dGVuZHMgRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZTxGLCBTLCBNPiB7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjYm9keSAqL1xuICByZWFkb25seSBib2R5PzogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9bJ2JvZHknXSA6IGFueTtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNzZWFyY2hQYXJhbXMgKi9cbiAgcmVhZG9ubHkgc2VhcmNoUGFyYW1zPzogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgOiAvLyB1bmtub3duIGlzIGlkZW50aXR5IHdpdGggJyYnIHR5cGUgb3BlcmF0b3JcbiAgICB1bmtub3duO1xuXG4gIC8qKiBQYXR0ZXJuIHRvIGNvbnN0cnVjdCB1cmwgYmFzZWQgb24gVXJsIFBhcmFtZXRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IE9bJ3BhdGgnXTtcbiAgLyoqIFByZXBlbmRlZCB0byBhbGwgdXJsc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdXJsUHJlZml4XG4gICAqL1xuICByZWFkb25seSB1cmxQcmVmaXg6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVxdWVzdEluaXQ6IFJlcXVlc3RJbml0O1xuICAvKiogSFRUUCByZXF1ZXN0IG1ldGhvZFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbWV0aG9kXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IChPICYgeyBtZXRob2Q6IHN0cmluZyB9KVsnbWV0aG9kJ107XG4gIHJlYWRvbmx5IHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQ7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFnaW5hdGlvbkZpZWxkICovXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcblxuICAvKiBmZXRjaCBsaWZlY3ljbGVzICovXG4gIC8qIGJlZm9yZS1mZXRjaCAqL1xuICAvKiogQnVpbGRzIHRoZSBVUkwgdG8gZmV0Y2hcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3VybFxuICAgKi9cbiAgdXJsKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBzdHJpbmc7XG4gIC8qKiBFbmNvZGUgdGhlIHNlYXJjaFBhcmFtcyBjb21wb25lbnQgb2YgdGhlIHVybFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjc2VhcmNoVG9TdHJpbmdcbiAgICovXG4gIHNlYXJjaFRvU3RyaW5nKHNlYXJjaFBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZztcbiAgLyoqIFByZXBhcmVzIFJlcXVlc3RJbml0IHVzZWQgaW4gZmV0Y2guIFRoaXMgaXMgc2VudCB0byBmZXRjaFJlc3BvbnNlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldFJlcXVlc3RJbml0XG4gICAqL1xuICBnZXRSZXF1ZXN0SW5pdChcbiAgICB0aGlzOiBhbnksXG4gICAgYm9keT86IFJlcXVlc3RJbml0Wydib2R5J10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0SW5pdD4gfCBSZXF1ZXN0SW5pdDtcbiAgLyoqIENhbGxlZCBieSBnZXRSZXF1ZXN0SW5pdCB0byBkZXRlcm1pbmUgSFRUUCBIZWFkZXJzXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNnZXRIZWFkZXJzXG4gICAqL1xuICBnZXRIZWFkZXJzKGhlYWRlcnM6IEhlYWRlcnNJbml0KTogUHJvbWlzZTxIZWFkZXJzSW5pdD4gfCBIZWFkZXJzSW5pdDtcbiAgLyogYWZ0ZXItZmV0Y2ggKi9cbiAgLyoqIFBlcmZvcm1zIHRoZSBmZXRjaCBjYWxsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNmZXRjaFJlc3BvbnNlXG4gICAqL1xuICBmZXRjaFJlc3BvbnNlKGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPjtcbiAgLyoqIFRha2VzIHRoZSBSZXNwb25zZSBhbmQgcGFyc2VzIHZpYSAudGV4dCgpIG9yIC5qc29uKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhcnNlUmVzcG9uc2VcbiAgICovXG4gIHBhcnNlUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+O1xuICAvKiogUGVyZm9ybSBhbnkgdHJhbnNmb3JtcyB3aXRoIHRoZSBwYXJzZWQgcmVzdWx0LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcHJvY2Vzc1xuICAgKi9cbiAgcHJvY2Vzcyh2YWx1ZTogYW55LCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KTogUmVzb2x2ZVR5cGU8Rj47XG5cbiAgLyogdXRpbGl0aWVzICovXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIChmZXRjaCkga2V5IG1hdGNoZXMgdGhpcyBlbmRwb2ludC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Rlc3RLZXlcbiAgICovXG4gIHRlc3RLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qIGV4dGVuZGVycyAqL1xuICAvLyBUT0RPOiBmaWd1cmUgb3V0IGJldHRlciB3YXkgdGhhbiB3cmFwcGluZyB3aG9sZSBvcHRpb25zIGluIFJlYWRvbmx5PD4gKyBtYWtpbmcgTyBleHRlbmQgZnJvbSB7fVxuICAvLyAgICAgICB0aGlzIGlzIGp1c3QgYSBoYWNrIHRvIGhhbmRsZSB3aGVuIG5vIG1lbWJlcnMgb2YgUGFydGlhbFJlc3RHZW5lcmljcyBhcmUgcHJlc2VudFxuICAvLyAgICAgICBOb3RlOiBVc2luZyBvdmVybG9hZGluZyAobGlrZSBwYWdpbmF0ZWQgZGlkKSBzdHJ1Z2dsZXMgYmVjYXVzZSB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBjbGVhciB3YXkgb2YgZGlzdGluZ3Vpc2hpbmcgb25lXG4gIC8vICAgICAgIHNob3VsZCBiZSB1c2VkIGZyb20gdGhlIG90aGVyIChkdWUgdG8gc2FtZSBwcm9ibGVtIHdpdGggZXZlcnkgbWVtYmVyIGJlaW5nIHBhcnRpYWwpXG4gIC8qKiBDcmVhdGVzIGEgY2hpbGQgZW5kcG9pbnQgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgd2hpbGUgb3ZlcnJpZGluZyBwcm92aWRlZCBgb3B0aW9uc2AuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNleHRlbmRcbiAgICovXG4gIGV4dGVuZDxcbiAgICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZSxcbiAgICBFeHRlbmRPcHRpb25zIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyB8IHt9LFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgb3B0aW9uczogUmVhZG9ubHk8XG4gICAgICBSZXN0RW5kcG9pbnRFeHRlbmRPcHRpb25zPEV4dGVuZE9wdGlvbnMsIEUsIEY+ICYgRXh0ZW5kT3B0aW9uc1xuICAgID4sXG4gICk6IFJlc3RFeHRlbmRlZEVuZHBvaW50PEV4dGVuZE9wdGlvbnMsIEU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RJbnN0YW5jZTxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIG1ldGhvZD86IHN0cmluZztcbiAgICBwYWdpbmF0aW9uRmllbGQ/OiBzdHJpbmc7XG4gIH0gPSB7IHBhdGg6IHN0cmluZyB9LFxuPiBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2U8RiwgUywgTSwgTz4ge1xuICAvKiogQ3JlYXRlcyBhbiBFbmRwb2ludCB0byBhcHBlbmQgdGhlIG5leHQgcGFnZSBleHRlbmRpbmcgYSBsaXN0IGZvciBwYWdpbmF0aW9uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0ZWRcbiAgICovXG4gIHBhZ2luYXRlZDxcbiAgICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGZXRjaEZ1bmN0aW9uLCBhbnksIHVuZGVmaW5lZD4sXG4gICAgQSBleHRlbmRzIGFueVtdLFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgcmVtb3ZlQ3Vyc29yOiAoLi4uYXJnczogQSkgPT4gcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICApOiBQYWdpbmF0aW9uRW5kcG9pbnQ8RSwgQT47XG4gIHBhZ2luYXRlZDxcbiAgICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGZXRjaEZ1bmN0aW9uLCBhbnksIHVuZGVmaW5lZD4sXG4gICAgQyBleHRlbmRzIHN0cmluZyxcbiAgPihcbiAgICB0aGlzOiBFLFxuICAgIGN1cnNvckZpZWxkOiBDLFxuICApOiBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxFLCBDPjtcbiAgLyoqIENvbmNhdGluYXRlIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyAoR0VUKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0UGFnZVxuICAgKi9cbiAgZ2V0UGFnZTogJ3BhZ2luYXRpb25GaWVsZCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBPWydwYWdpbmF0aW9uRmllbGQnXSBleHRlbmRzIHN0cmluZyA/XG4gICAgICBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxcbiAgICAgICAgRiAmIHsgc2NoZW1hOiBTOyBzaWRlRWZmZWN0OiBNIH0gJiBPLFxuICAgICAgICBPWydwYWdpbmF0aW9uRmllbGQnXVxuICAgICAgPlxuICAgIDogdW5kZWZpbmVkXG4gIDogdW5kZWZpbmVkO1xuICAvKiogQ3JlYXRlIGEgbmV3IGl0ZW0gKFBPU1QpIGFuZCBgcHVzaGAgdG8gdGhlIGVuZFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcHVzaFxuICAgKi9cbiAgcHVzaDogQWRkRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPlsncHVzaCddLFxuICAgIEV4Y2x1ZGU8TywgJ2JvZHknIHwgJ21ldGhvZCc+ICYge1xuICAgICAgYm9keTpcbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+W11cbiAgICAgICAgfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBDcmVhdGUgYSBuZXcgaXRlbSAoUE9TVCkgYW5kIGB1bnNoaWZ0YCB0byB0aGUgYmVnaW5uaW5nXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCN1bnNoaWZ0XG4gICAqL1xuICB1bnNoaWZ0OiBBZGRFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+Wyd1bnNoaWZ0J10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIENyZWF0ZSBuZXcgaXRlbShzKSAoUE9TVCkgYW5kIGBPYmplY3QuYXNzaWduYCBtZXJnZVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjYXNzaWduXG4gICAqL1xuICBhc3NpZ246IEFkZEVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz4sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OiBSZWNvcmQ8c3RyaW5nLCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPj4gfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBSZW1vdmUgaXRlbShzKSAoUEFUQ0gpIGZyb20gY29sbGVjdGlvblxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcmVtb3ZlXG4gICAqL1xuICByZW1vdmU6IFJlbW92ZUVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3JlbW92ZSddLFxuICAgIEV4Y2x1ZGU8TywgJ2JvZHknIHwgJ21ldGhvZCc+ICYge1xuICAgICAgYm9keTpcbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+W11cbiAgICAgICAgfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBNb3ZlIGl0ZW0gYmV0d2VlbiBjb2xsZWN0aW9ucyAoUEFUQ0gpIC0gcmVtb3ZlcyBmcm9tIG9sZCwgYWRkcyB0byBuZXdcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I21vdmVcbiAgICovXG4gIG1vdmU6IE1vdmVFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+Wydtb3ZlJ10sXG4gICAge1xuICAgICAgcGF0aDogJ21vdmVQYXRoJyBleHRlbmRzIGtleW9mIE8gPyBPWydtb3ZlUGF0aCddICYgc3RyaW5nIDogT1sncGF0aCddO1xuICAgICAgYm9keTogT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz4gfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG59XG5cbmV4cG9ydCB0eXBlIFJlc3RFbmRwb2ludEV4dGVuZE9wdGlvbnM8XG4gIE8gZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzLFxuICBFIGV4dGVuZHMgeyBib2R5PzogYW55OyBwYXRoPzogc3RyaW5nOyBzY2hlbWE/OiBTY2hlbWE7IG1ldGhvZD86IHN0cmluZyB9LFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbixcbj4gPSBSZXN0RW5kcG9pbnRPcHRpb25zPFxuICBPcHRpb25zVG9GdW5jdGlvbjxPLCBFLCBGPixcbiAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gRXh0cmFjdDxPWydzY2hlbWEnXSwgU2NoZW1hIHwgdW5kZWZpbmVkPlxuICA6IEVbJ3NjaGVtYSddXG4+ICZcbiAgUGFydGlhbDxcbiAgICBPbWl0PFxuICAgICAgRSxcbiAgICAgIEtleW9mUmVzdEVuZHBvaW50IHwga2V5b2YgUGFydGlhbFJlc3RHZW5lcmljcyB8IGtleW9mIFJlc3RFbmRwb2ludE9wdGlvbnNcbiAgICA+XG4gID47XG5cbnR5cGUgT3B0aW9uc1RvUmVzdEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyxcbiAgRSBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2UgJiB7IGJvZHk/OiBhbnk7IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZyB9LFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbixcbj4gPVxuICAncGF0aCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBSZXN0VHlwZTxcbiAgICAgICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gTyA6IEUsXG4gICAgICAgICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ11cbiAgICAgID4sXG4gICAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICAgICAgOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBNZXRob2RUb1NpZGU8T1snbWV0aG9kJ10+XG4gICAgICA6IEVbJ3NpZGVFZmZlY3QnXSxcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+IDogUmVzb2x2ZVR5cGU8Rj4sXG4gICAgICB7XG4gICAgICAgIHBhdGg6IEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+O1xuICAgICAgICBib2R5OiAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogRVsnYm9keSddO1xuICAgICAgICBzZWFyY2hQYXJhbXM6ICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NlYXJjaFBhcmFtcyddXG4gICAgICAgIDogRVsnc2VhcmNoUGFyYW1zJ107XG4gICAgICAgIG1ldGhvZDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXTtcbiAgICAgICAgcGFnaW5hdGlvbkZpZWxkOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICAgIDogRVsncGFnaW5hdGlvbkZpZWxkJ107XG4gICAgICB9XG4gICAgPlxuICA6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgICBPcHRpb25zVG9Cb2R5QXJndW1lbnQ8XG4gICAgICAgIE8sXG4gICAgICAgICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ11cbiAgICAgID4sXG4gICAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICAgICAgOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBNZXRob2RUb1NpZGU8T1snbWV0aG9kJ10+XG4gICAgICA6IEVbJ3NpZGVFZmZlY3QnXSxcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+IDogUmVzb2x2ZVR5cGU8Rj4sXG4gICAgICB7XG4gICAgICAgIHBhdGg6IEVbJ3BhdGgnXTtcbiAgICAgICAgYm9keTogT1snYm9keSddO1xuICAgICAgICBzZWFyY2hQYXJhbXM6ICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NlYXJjaFBhcmFtcyddXG4gICAgICAgIDogRVsnc2VhcmNoUGFyYW1zJ107XG4gICAgICAgIG1ldGhvZDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXTtcbiAgICAgICAgcGFnaW5hdGlvbkZpZWxkOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICAgIDogRXh0cmFjdDxFWydwYWdpbmF0aW9uRmllbGQnXSwgc3RyaW5nPjtcbiAgICAgIH1cbiAgICA+XG4gIDogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBSZXN0VHlwZTxcbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgICAgRSxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRVsncGF0aCddO1xuICAgICAgICBib2R5OiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogT1snc2VhcmNoUGFyYW1zJ107XG4gICAgICAgIG1ldGhvZDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXTtcbiAgICAgICAgcGFnaW5hdGlvbkZpZWxkOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICAgIDogRXh0cmFjdDxFWydwYWdpbmF0aW9uRmllbGQnXSwgc3RyaW5nPjtcbiAgICAgIH1cbiAgICA+XG4gIDogUmVzdEluc3RhbmNlPFxuICAgICAgRixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAge1xuICAgICAgICBwYXRoOiAncGF0aCcgZXh0ZW5kcyBrZXlvZiBPID8gRXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD5cbiAgICAgICAgOiBFWydwYXRoJ107XG4gICAgICAgIGJvZHk6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFWydwYWdpbmF0aW9uRmllbGQnXTtcbiAgICAgIH1cbiAgICA+O1xuXG5leHBvcnQgdHlwZSBSZXN0RXh0ZW5kZWRFbmRwb2ludDxcbiAgTyBleHRlbmRzIFBhcnRpYWxSZXN0R2VuZXJpY3MsXG4gIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlICYgeyBnZXRQYWdlPzogdW5rbm93biB9LFxuPiA9IE9wdGlvbnNUb1Jlc3RFbmRwb2ludDxcbiAgTyxcbiAgRSAmXG4gICAgKEUgZXh0ZW5kcyB7IGdldFBhZ2U6IHsgcGFnaW5hdGlvbkZpZWxkOiBzdHJpbmcgfSB9ID9cbiAgICAgIHsgcGFnaW5hdGlvbkZpZWxkOiBFWydnZXRQYWdlJ11bJ3BhZ2luYXRpb25GaWVsZCddIH1cbiAgICA6IHVua25vd24pLFxuICBSZXN0SW5zdGFuY2U8XG4gICAgKFxuICAgICAgLi4uYXJnczogUGFyYW1ldGVyczxFPlxuICAgICkgPT4gT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBQcm9taXNlPFJldHVyblR5cGU8T1sncHJvY2VzcyddPj5cbiAgICA6IFJldHVyblR5cGU8RT4sXG4gICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID8gRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBNZXRob2RUb1NpZGU8T1snbWV0aG9kJ10+XG4gICAgOiBFWydzaWRlRWZmZWN0J11cbiAgPlxuPiAmXG4gIE9taXQ8TywgS2V5b2ZSZXN0RW5kcG9pbnQ+ICZcbiAgT21pdDxFLCBLZXlvZlJlc3RFbmRwb2ludCB8IGtleW9mIE8+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpYWxSZXN0R2VuZXJpY3Mge1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhdGggKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNzY2hlbWEgKi9cbiAgcmVhZG9ubHkgc2NoZW1hPzogU2NoZW1hIHwgdW5kZWZpbmVkO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I21ldGhvZCAqL1xuICByZWFkb25seSBtZXRob2Q/OiBzdHJpbmc7XG4gIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjYm9keSAqL1xuICBib2R5PzogYW55O1xuICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NlYXJjaFBhcmFtcyAqL1xuICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFnaW5hdGlvbmZpZWxkICovXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwcm9jZXNzICovXG4gIHByb2Nlc3M/KHZhbHVlOiBhbnksIC4uLmFyZ3M6IGFueSk6IGFueTtcbn1cbi8qKiBHZW5lcmljIHR5cGVzIHdoZW4gY29uc3RydWN0aW5nIGEgUmVzdEVuZHBvaW50XG4gKlxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2luaGVyaXRhbmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEdlbmVyaWNzIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyB7XG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbkVuZHBvaW50PFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQSBleHRlbmRzIGFueVtdLFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFBhcmFtRmV0Y2hOb0JvZHk8QVswXSwgUmVzb2x2ZVR5cGU8RT4+LFxuICBFWydzY2hlbWEnXSxcbiAgRVsnc2lkZUVmZmVjdCddLFxuICBQaWNrPEUsICdwYXRoJyB8ICdzZWFyY2hQYXJhbXMnIHwgJ2JvZHknPiAmIHtcbiAgICBzZWFyY2hQYXJhbXM6IE9taXQ8QVswXSwga2V5b2YgUGF0aEFyZ3M8RVsncGF0aCddPj47XG4gIH1cbj47XG4vKiogTWVyZ2UgcGFnaW5hdGlvbiBmaWVsZCBDIGludG8gYm9keSwgbWFraW5nIGl0IHJlcXVpcmVkICovXG50eXBlIFBhZ2luYXRpb25JbnRvQm9keTxCb2R5LCBDIGV4dGVuZHMgc3RyaW5nPiA9IEJvZHkgJiB7XG4gIFtLIGluIENdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xufTtcblxuLyoqIFBhZ2luYXRlZCBzZWFyY2hQYXJhbXMgdHlwZSAqL1xudHlwZSBQYWdpbmF0ZWRTZWFyY2hQYXJhbXM8XG4gIEUgZXh0ZW5kcyB7IHNlYXJjaFBhcmFtcz86IGFueTsgcGF0aD86IHN0cmluZyB9LFxuICBDIGV4dGVuZHMgc3RyaW5nLFxuPiA9IHtcbiAgW0sgaW4gQ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59ICYgRVsnc2VhcmNoUGFyYW1zJ10gJlxuICBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj47XG5cbi8qKiBzZWFyY2hQYXJhbXMgdmVyc2lvbjogcGFnaW5hdGlvbiBpbiBzZWFyY2hQYXJhbXMsIG9wdGlvbmFsIGJvZHkgc3VwcG9ydCAqL1xudHlwZSBQYWdpbmF0aW9uRmllbGRJblNlYXJjaFBhcmFtczxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgLy8gVW5pb24gYWxsb3dzIGNhbGxpbmcgd2l0aCBqdXN0IHNlYXJjaFBhcmFtcyBvciB3aXRoIHNlYXJjaFBhcmFtcyArIGJvZHlcbiAgfCBQYXJhbUZldGNoTm9Cb2R5PFBhZ2luYXRlZFNlYXJjaFBhcmFtczxFLCBDPiwgUmVzb2x2ZVR5cGU8RT4+XG4gIHwgUGFyYW1GZXRjaFdpdGhCb2R5PFxuICAgICAgUGFnaW5hdGVkU2VhcmNoUGFyYW1zPEUsIEM+LFxuICAgICAgTm9uTnVsbGFibGU8RVsnYm9keSddPixcbiAgICAgIFJlc29sdmVUeXBlPEU+XG4gICAgPixcbiAgRVsnc2NoZW1hJ10sXG4gIEVbJ3NpZGVFZmZlY3QnXSxcbiAgUGljazxFLCAncGF0aCcgfCAnc2VhcmNoUGFyYW1zJyB8ICdib2R5Jz4gJiB7XG4gICAgc2VhcmNoUGFyYW1zOiB7XG4gICAgICBbSyBpbiBDXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9ICYgRVsnc2VhcmNoUGFyYW1zJ107XG4gIH1cbj4gJiB7IHBhZ2luYXRpb25GaWVsZDogQyB9O1xuXG4vKiogYm9keSB2ZXJzaW9uOiBwYWdpbmF0aW9uIGZpZWxkIGlzIGluIGJvZHkgKGJvZHkgcmVxdWlyZWQpICovXG50eXBlIFBhZ2luYXRpb25GaWVsZEluQm9keTxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUGFyYW1GZXRjaFdpdGhCb2R5PFxuICAgIEVbJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIFBhZ2luYXRpb25JbnRvQm9keTxFWydib2R5J10sIEM+LFxuICAgIFJlc29sdmVUeXBlPEU+XG4gID4sXG4gIEVbJ3NjaGVtYSddLFxuICBFWydzaWRlRWZmZWN0J10sXG4gIFBpY2s8RSwgJ3BhdGgnIHwgJ3NlYXJjaFBhcmFtcyc+ICYge1xuICAgIGJvZHk6IFBhZ2luYXRpb25JbnRvQm9keTxFWydib2R5J10sIEM+O1xuICB9XG4+ICYgeyBwYWdpbmF0aW9uRmllbGQ6IEMgfTtcblxuLyoqIFJldHJpZXZlcyB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHMgYnkgcGFnaW5hdGlvbiBmaWVsZCAqL1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbkZpZWxkRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uICYgUmVzdEdlbmVyaWNzICYgeyBzaWRlRWZmZWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBDIGV4dGVuZHMgc3RyaW5nLFxuPiA9XG4gIC8vIElmIGJvZHkgY2FuIGJlIHVuZGVmaW5lZCBvciBwYWdpbmF0aW9uIGZpZWxkIG5vdCBpbiBib2R5LCB1c2Ugc2VhcmNoUGFyYW1zXG4gIHVuZGVmaW5lZCBleHRlbmRzIEVbJ2JvZHknXSA/IFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPEUsIEM+XG4gIDogLy8gSWYgcGFnaW5hdGlvbiBmaWVsZCBDIGlzIGEga2V5IG9mIGJvZHksIG1lcmdlIGludG8gYm9keVxuICBDIGV4dGVuZHMga2V5b2YgRVsnYm9keSddID8gUGFnaW5hdGlvbkZpZWxkSW5Cb2R5PEUsIEM+XG4gIDogLy8gT3RoZXJ3aXNlIHVzZSBzZWFyY2hQYXJhbXNcbiAgICBQYWdpbmF0aW9uRmllbGRJblNlYXJjaFBhcmFtczxFLCBDPjtcblxuZXhwb3J0IHR5cGUgQWRkRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIE9bJ2JvZHknXSxcbiAgICBSZXNvbHZlVHlwZTxGPlxuICA+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnPiAmIHsgbWV0aG9kOiAnUE9TVCcgfVxuPjtcbmV4cG9ydCB0eXBlIFJlbW92ZUVuZHBvaW50PFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgYm9keTogYW55IH0sXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUmVzdEZldGNoPFxuICAgICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICA6IFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICBPWydib2R5J10sXG4gICAgUmVzb2x2ZVR5cGU8Rj5cbiAgPixcbiAgUyxcbiAgdHJ1ZSxcbiAgT21pdDxPLCAnbWV0aG9kJz4gJiB7IG1ldGhvZDogJ1BBVENIJyB9XG4+O1xuZXhwb3J0IHR5cGUgTW92ZUVuZHBvaW50PFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8UGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LCBPWydib2R5J10sIFJlc29sdmVUeXBlPEY+PixcbiAgUyxcbiAgdHJ1ZSxcbiAgT21pdDxPLCAnbWV0aG9kJyB8ICdzZWFyY2hQYXJhbXMnPiAmIHsgbWV0aG9kOiAnUEFUQ0gnIH1cbj47XG5cbnR5cGUgT3B0aW9uc0JvZHlEZWZhdWx0PE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3M+ID1cbiAgJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9cbiAgOiBPWydtZXRob2QnXSBleHRlbmRzICdQT1NUJyB8ICdQVVQnIHwgJ1BBVENIJyA/IE8gJiB7IGJvZHk6IGFueSB9XG4gIDogTyAmIHsgYm9keTogdW5kZWZpbmVkIH07XG5cbnR5cGUgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8TyBleHRlbmRzIHsgYm9keT86IGFueSB9PiA9XG4gICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEVuZHBvaW50T3B0aW9uczxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuPiBleHRlbmRzIEVuZHBvaW50RXh0cmFPcHRpb25zPEY+IHtcbiAgLyoqIFByZXBlbmRlZCB0byBhbGwgdXJsc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdXJsUHJlZml4XG4gICAqL1xuICB1cmxQcmVmaXg/OiBzdHJpbmc7XG4gIHJlcXVlc3RJbml0PzogUmVxdWVzdEluaXQ7XG4gIC8qKiBDYWxsZWQgYnkgZ2V0UmVxdWVzdEluaXQgdG8gZGV0ZXJtaW5lIEhUVFAgSGVhZGVyc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0SGVhZGVyc1xuICAgKi9cbiAgZ2V0SGVhZGVycz8oaGVhZGVyczogSGVhZGVyc0luaXQpOiBQcm9taXNlPEhlYWRlcnNJbml0PiB8IEhlYWRlcnNJbml0O1xuICAvKiogUHJlcGFyZXMgUmVxdWVzdEluaXQgdXNlZCBpbiBmZXRjaC4gVGhpcyBpcyBzZW50IHRvIGZldGNoUmVzcG9uc2UoKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0UmVxdWVzdEluaXRcbiAgICovXG4gIGdldFJlcXVlc3RJbml0Pyhib2R5OiBhbnkpOiBQcm9taXNlPFJlcXVlc3RJbml0PiB8IFJlcXVlc3RJbml0O1xuICAvKiogUGVyZm9ybXMgdGhlIGZldGNoIGNhbGxcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2ZldGNoUmVzcG9uc2VcbiAgICovXG4gIGZldGNoUmVzcG9uc2U/KGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpOiBQcm9taXNlPGFueT47XG4gIC8qKiBUYWtlcyB0aGUgUmVzcG9uc2UgYW5kIHBhcnNlcyB2aWEgLnRleHQoKSBvciAuanNvbigpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYXJzZVJlc3BvbnNlXG4gICAqL1xuICBwYXJzZVJlc3BvbnNlPyhyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPGFueT47XG5cbiAgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBmZXRjaD86IEY7XG4gIGtleT8oLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgdXJsPyguLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KTogc3RyaW5nO1xuICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEYsIFM+O1xufVxuXG5leHBvcnQgdHlwZSBSZXN0RW5kcG9pbnRDb25zdHJ1Y3Rvck9wdGlvbnM8TyBleHRlbmRzIFJlc3RHZW5lcmljcyA9IGFueT4gPVxuICBSZXN0RW5kcG9pbnRPcHRpb25zPFxuICAgIFJlc3RGZXRjaDxcbiAgICAgICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICBPLFxuICAgICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXVxuICAgICAgICA6IE8gZXh0ZW5kcyB7IHNpZGVFZmZlY3Q6IHRydWUgfSA/ICdQT1NUJ1xuICAgICAgICA6ICdHRVQnXG4gICAgICA+LFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT5cbiAgICAgIDogYW55IC8qRGVub3JtYWxpemU8T1snc2NoZW1hJ10+Ki9cbiAgICA+LFxuICAgIE9bJ3NjaGVtYSddXG4gID47XG5cbi8qKiBTaW1wbGlmaWVzIGVuZHBvaW50IGRlZmluaXRpb25zIHRoYXQgZm9sbG93IFJFU1QgcGF0dGVybnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnksXG4+IGV4dGVuZHMgUmVzdEluc3RhbmNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgIE8sXG4gICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXVxuICAgICAgOiBPIGV4dGVuZHMgeyBzaWRlRWZmZWN0OiB0cnVlIH0gPyAnUE9TVCdcbiAgICAgIDogJ0dFVCdcbiAgICA+LFxuICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgOiBhbnkgLypEZW5vcm1hbGl6ZTxPWydzY2hlbWEnXT4qL1xuICA+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IHVuZGVmaW5lZCxcbiAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/IEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICA6IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT4sXG4gICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9cbiAgOiBPICYge1xuICAgICAgbWV0aG9kOiBPIGV4dGVuZHMgeyBzaWRlRWZmZWN0OiB0cnVlIH0gPyAnUE9TVCcgOiAnR0VUJztcbiAgICB9XG4+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEVuZHBvaW50Q29uc3RydWN0b3Ige1xuICAvKiogU2ltcGxpZmllcyBlbmRwb2ludCBkZWZpbml0aW9ucyB0aGF0IGZvbGxvdyBSRVNUIHBhdHRlcm5zXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludFxuICAgKi9cbiAgbmV3IDxPIGV4dGVuZHMgUmVzdEdlbmVyaWNzID0gYW55Pih7XG4gICAgbWV0aG9kLFxuICAgIHNpZGVFZmZlY3QsXG4gICAgbmFtZSxcbiAgICAuLi5vcHRpb25zXG4gIH06IFJlc3RFbmRwb2ludENvbnN0cnVjdG9yT3B0aW9uczxPPiAmIFJlYWRvbmx5PE8+KTogUmVzdEVuZHBvaW50PE8+O1xuICByZWFkb25seSBwcm90b3R5cGU6IFJlc3RJbnN0YW5jZUJhc2U7XG59XG5cbmV4cG9ydCB0eXBlIE1ldGhvZFRvU2lkZTxNPiA9XG4gIE0gZXh0ZW5kcyBzdHJpbmcgP1xuICAgIE0gZXh0ZW5kcyAnR0VUJyA/XG4gICAgICB1bmRlZmluZWRcbiAgICA6IHRydWVcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKiBSZXN0RW5kcG9pbnQgdHlwZXMgc2ltcGxpZmllZCAqL1xuZXhwb3J0IHR5cGUgUmVzdFR5cGU8XG4gIFVybFBhcmFtcyA9IGFueSxcbiAgQm9keSA9IGFueSxcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgTSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBSID0gYW55LFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgICBwYWdpbmF0aW9uRmllbGQ/OiBzdHJpbmc7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgcGFnaW5hdGlvbkZpZWxkOiBzdHJpbmcgfSxcbj4gPSBJZlR5cGVTY3JpcHRMb29zZU51bGw8XG4gIFJlc3RJbnN0YW5jZTxSZXN0RmV0Y2g8VXJsUGFyYW1zLCBCb2R5LCBSPiwgUywgTSwgTz4sXG4gIEJvZHkgZXh0ZW5kcyB7fSA/IFJlc3RUeXBlV2l0aEJvZHk8VXJsUGFyYW1zLCBTLCBNLCBCb2R5LCBSLCBPPlxuICA6IFJlc3RUeXBlTm9Cb2R5PFVybFBhcmFtcywgUywgTSwgUiwgTz5cbj47XG5cbmV4cG9ydCB0eXBlIFJlc3RUeXBlV2l0aEJvZHk8XG4gIFVybFBhcmFtcyA9IGFueSxcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgTSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBCb2R5ID0gYW55LFxuICBSID0gYW55IC8qRGVub3JtYWxpemU8Uz4qLyxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgYm9keTogYW55IH0sXG4+ID0gUmVzdEluc3RhbmNlPFBhcmFtRmV0Y2hXaXRoQm9keTxVcmxQYXJhbXMsIEJvZHksIFI+LCBTLCBNLCBPPjtcblxuZXhwb3J0IHR5cGUgUmVzdFR5cGVOb0JvZHk8XG4gIFVybFBhcmFtcyA9IGFueSxcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgTSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBSID0gYW55IC8qRGVub3JtYWxpemU8Uz4qLyxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IHVuZGVmaW5lZDtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgYm9keTogdW5kZWZpbmVkIH0sXG4+ID0gUmVzdEluc3RhbmNlPFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSPiwgUywgTSwgTz47XG5cbi8qKiBTaW1wbGUgcGFyYW1ldGVycywgYW5kIGJvZHkgZmV0Y2ggZnVuY3Rpb25zICovXG5leHBvcnQgdHlwZSBSZXN0RmV0Y2g8XG4gIFVybFBhcmFtcyxcbiAgQm9keSA9IHt9LFxuICBSZXNvbHZlID0gYW55LFxuPiA9IElmVHlwZVNjcmlwdExvb3NlTnVsbDxcbiAgfCBQYXJhbUZldGNoTm9Cb2R5PFVybFBhcmFtcywgUmVzb2x2ZT5cbiAgfCBQYXJhbUZldGNoV2l0aEJvZHk8VXJsUGFyYW1zLCBCb2R5LCBSZXNvbHZlPixcbiAgQm9keSBleHRlbmRzIHt9ID8gUGFyYW1GZXRjaFdpdGhCb2R5PFVybFBhcmFtcywgQm9keSwgUmVzb2x2ZT5cbiAgOiBQYXJhbUZldGNoTm9Cb2R5PFVybFBhcmFtcywgUmVzb2x2ZT5cbj47XG5cbmV4cG9ydCB0eXBlIFBhcmFtRmV0Y2hXaXRoQm9keTxQLCBCID0ge30sIFIgPSBhbnk+ID1cbiAgLy8gd2UgbXVzdCBhbHdheXMgYWxsb3cgdW5kZWZpbmVkIGluIGEgdW5pb24gYW5kIGdpdmUgaXQgYSB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gIFAgZXh0ZW5kcyB1bmRlZmluZWQgPyAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgYm9keTogQikgPT4gUHJvbWlzZTxSPlxuICA6IC8vIGV2ZW4gd2l0aCBsb29zZSBudWxsLCB0aGlzIHdpbGwgb25seSBiZSB0cnVlIHdoZW4gYWxsIG1lbWJlcnMgYXJlIG9wdGlvbmFsXG4gIHt9IGV4dGVuZHMgUCA/XG4gICAgLy8gdGhpcyBzYWZlbHkgaGFuZGxlcyBQYXRoQXJncyB3aXRoIG5vIG1lbWJlcnMgdGhhdCByZXN1bHRzIGluIGEgc2ltcGxlIGB1bmtub3duYCB0eXBlXG4gICAga2V5b2YgUCBleHRlbmRzIG5ldmVyID9cbiAgICAgICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+XG4gICAgOiB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+KVxuICAgICAgfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIGJvZHk6IEIpID0+IFByb21pc2U8Uj4pXG4gIDogKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCwgYm9keTogQikgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IHR5cGUgUGFyYW1GZXRjaE5vQm9keTxQLCBSID0gYW55PiA9XG4gIC8vIHdlIG11c3QgYWx3YXlzIGFsbG93IHVuZGVmaW5lZCBpbiBhIHVuaW9uIGFuZCBnaXZlIGl0IGEgdHlwZSB3aXRob3V0IHBhcmFtc1xuICBQIGV4dGVuZHMgdW5kZWZpbmVkID8gKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UpID0+IFByb21pc2U8Uj5cbiAgOiAvLyBldmVuIHdpdGggbG9vc2UgbnVsbCwgdGhpcyB3aWxsIG9ubHkgYmUgdHJ1ZSB3aGVuIGFsbCBtZW1iZXJzIGFyZSBvcHRpb25hbFxuICB7fSBleHRlbmRzIFAgP1xuICAgIC8vIHRoaXMgc2FmZWx5IGhhbmRsZXMgUGF0aEFyZ3Mgd2l0aCBubyBtZW1iZXJzIHRoYXQgcmVzdWx0cyBpbiBhIHNpbXBsZSBgdW5rbm93bmAgdHlwZVxuICAgIGtleW9mIFAgZXh0ZW5kcyBuZXZlciA/XG4gICAgICAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSkgPT4gUHJvbWlzZTxSPlxuICAgIDogfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCkgPT4gUHJvbWlzZTxSPilcbiAgICAgIHwgKCh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlKSA9PiBQcm9taXNlPFI+KVxuICA6ICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBwYXJhbXM6IFApID0+IFByb21pc2U8Uj47XG5cbi8vIHNhbWUgYWxnb3JpdGhtLCBidXQgZm9yIEFyZ3MgKGFrYSByZWFkb25seSBhbnlbXSlcbmV4cG9ydCB0eXBlIFBhcmFtVG9BcmdzPFA+ID1cbiAgUCBleHRlbmRzIHVuZGVmaW5lZCA/IFtdXG4gIDoge30gZXh0ZW5kcyBQID9cbiAgICBrZXlvZiBQIGV4dGVuZHMgbmV2ZXIgP1xuICAgICAgW11cbiAgICA6IFtdIHwgW1BdXG4gIDogW1BdO1xuXG50eXBlIElmVHlwZVNjcmlwdExvb3NlTnVsbDxZLCBOPiA9IDEgfCB1bmRlZmluZWQgZXh0ZW5kcyAxID8gWSA6IE47XG5cbmV4cG9ydCB0eXBlIEtleW9mUmVzdEVuZHBvaW50ID0ga2V5b2YgUmVzdEluc3RhbmNlO1xuXG5leHBvcnQgdHlwZSBGcm9tRmFsbEJhY2s8SyBleHRlbmRzIGtleW9mIEUsIE8sIEU+ID1cbiAgSyBleHRlbmRzIGtleW9mIE8gPyBPW0tdIDogRVtLXTtcblxuZXhwb3J0IHR5cGUgRmV0Y2hNdXRhdGU8XG4gIEEgZXh0ZW5kcyByZWFkb25seSBhbnlbXSA9IFthbnksIHt9XSB8IFt7fV0sXG4gIFIgPSBhbnksXG4+ID0gKHRoaXM6IFJlc3RJbnN0YW5jZSwgLi4uYXJnczogQSkgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IHR5cGUgRmV0Y2hHZXQ8QSBleHRlbmRzIHJlYWRvbmx5IGFueVtdID0gW2FueV0sIFIgPSBhbnk+ID0gKFxuICB0aGlzOiBSZXN0SW5zdGFuY2UsXG4gIC4uLmFyZ3M6IEFcbikgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdHM8TywgRD4gPSB7XG4gIFtLIGluIGtleW9mIE8gfCBrZXlvZiBEXTogSyBleHRlbmRzIGtleW9mIE8gPyBFeGNsdWRlPE9bS10sIHVuZGVmaW5lZD5cbiAgOiBEW0V4dHJhY3Q8Sywga2V5b2YgRD5dO1xufTtcblxuZXhwb3J0IHR5cGUgR2V0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyB7XG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHNjaGVtYTogU2NoZW1hO1xuICAgIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gICAgcmVhZG9ubHkgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIHJlYWRvbmx5IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2NoZW1hOiBTY2hlbWE7XG4gIH0sXG4+ID0gUmVzdFR5cGVOb0JvZHk8XG4gICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8T1sncGF0aCddPlxuICA6IFBhdGhBcmdzPE9bJ3BhdGgnXT4sXG4gIE9bJ3NjaGVtYSddLFxuICB1bmRlZmluZWQsXG4gIGFueSxcbiAgTyAmIHsgbWV0aG9kOiAnR0VUJyB9XG4+O1xuXG5leHBvcnQgdHlwZSBNdXRhdGVFbmRwb2ludDxcbiAgTyBleHRlbmRzIHtcbiAgICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWE7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBib2R5PzogYW55O1xuICB9ID0ge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5OiBhbnk7XG4gICAgc2NoZW1hOiBTY2hlbWE7XG4gIH0sXG4+ID0gUmVzdFR5cGVXaXRoQm9keTxcbiAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gIDogUGF0aEFyZ3M8T1sncGF0aCddPixcbiAgT1snc2NoZW1hJ10sXG4gIHRydWUsXG4gIE9bJ2JvZHknXSxcbiAgYW55LFxuICBPICYgeyBib2R5OiBhbnk7IG1ldGhvZDogJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURScgfVxuPjtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RFbmRwb2ludFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRW5kcG9pbnRFeHRyYU9wdGlvbnMsXG4gIEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRmV0Y2hGdW5jdGlvbixcbiAgUmVzb2x2ZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbGxlY3Rpb24gfSBmcm9tICcuL2V4dHJhY3RDb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7XG4gIE9wdGlvbnNUb0JvZHlBcmd1bWVudCxcbiAgT3B0aW9uc1RvRnVuY3Rpb24sXG59IGZyb20gJy4vT3B0aW9uc1RvRnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgUGF0aEFyZ3MsIFNvZnRQYXRoQXJncyB9IGZyb20gJy4vcGF0aFR5cGVzLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL1Jlc3RFbmRwb2ludFR5cGVIZWxwLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXN0SW5zdGFuY2VCYXNlPFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE0gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICB9ID0geyBwYXRoOiBzdHJpbmcgfSxcbj4gZXh0ZW5kcyBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlPEYsIFMsIE0+IHtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNib2R5ICovXG4gIHJlYWRvbmx5IGJvZHk/OiAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogYW55O1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NlYXJjaFBhcmFtcyAqL1xuICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gPyBPWydzZWFyY2hQYXJhbXMnXVxuICA6IC8vIHVua25vd24gaXMgaWRlbnRpdHkgd2l0aCAnJicgdHlwZSBvcGVyYXRvclxuICAgIHVua25vd247XG5cbiAgLyoqIFBhdHRlcm4gdG8gY29uc3RydWN0IHVybCBiYXNlZCBvbiBVcmwgUGFyYW1ldGVyc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogT1sncGF0aCddO1xuICAvKiogUHJlcGVuZGVkIHRvIGFsbCB1cmxzXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCN1cmxQcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHVybFByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQ7XG4gIC8qKiBIVFRQIHJlcXVlc3QgbWV0aG9kXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNtZXRob2RcbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogKE8gJiB7IG1ldGhvZDogc3RyaW5nIH0pWydtZXRob2QnXTtcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZDtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0aW9uRmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuXG4gIC8qIGZldGNoIGxpZmVjeWNsZXMgKi9cbiAgLyogYmVmb3JlLWZldGNoICovXG4gIC8qKiBCdWlsZHMgdGhlIFVSTCB0byBmZXRjaFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdXJsXG4gICAqL1xuICB1cmwoLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgLyoqIEVuY29kZSB0aGUgc2VhcmNoUGFyYW1zIGNvbXBvbmVudCBvZiB0aGUgdXJsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNzZWFyY2hUb1N0cmluZ1xuICAgKi9cbiAgc2VhcmNoVG9TdHJpbmcoc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nO1xuICAvKiogUHJlcGFyZXMgUmVxdWVzdEluaXQgdXNlZCBpbiBmZXRjaC4gVGhpcyBpcyBzZW50IHRvIGZldGNoUmVzcG9uc2UoKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0UmVxdWVzdEluaXRcbiAgICovXG4gIGdldFJlcXVlc3RJbml0KFxuICAgIHRoaXM6IGFueSxcbiAgICBib2R5PzogUmVxdWVzdEluaXRbJ2JvZHknXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBQcm9taXNlPFJlcXVlc3RJbml0PiB8IFJlcXVlc3RJbml0O1xuICAvKiogQ2FsbGVkIGJ5IGdldFJlcXVlc3RJbml0IHRvIGRldGVybWluZSBIVFRQIEhlYWRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldEhlYWRlcnNcbiAgICovXG4gIGdldEhlYWRlcnMoaGVhZGVyczogSGVhZGVyc0luaXQpOiBQcm9taXNlPEhlYWRlcnNJbml0PiB8IEhlYWRlcnNJbml0O1xuICAvKiBhZnRlci1mZXRjaCAqL1xuICAvKiogUGVyZm9ybXMgdGhlIGZldGNoIGNhbGxcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2ZldGNoUmVzcG9uc2VcbiAgICovXG4gIGZldGNoUmVzcG9uc2UoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+O1xuICAvKiogVGFrZXMgdGhlIFJlc3BvbnNlIGFuZCBwYXJzZXMgdmlhIC50ZXh0KCkgb3IgLmpzb24oKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFyc2VSZXNwb25zZVxuICAgKi9cbiAgcGFyc2VSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPGFueT47XG4gIC8qKiBQZXJmb3JtIGFueSB0cmFuc2Zvcm1zIHdpdGggdGhlIHBhcnNlZCByZXN1bHQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwcm9jZXNzXG4gICAqL1xuICBwcm9jZXNzKHZhbHVlOiBhbnksIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBSZXNvbHZlVHlwZTxGPjtcblxuICAvKiB1dGlsaXRpZXMgKi9cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgKGZldGNoKSBrZXkgbWF0Y2hlcyB0aGlzIGVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdGVzdEtleVxuICAgKi9cbiAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyogZXh0ZW5kZXJzICovXG4gIC8vIFRPRE86IGZpZ3VyZSBvdXQgYmV0dGVyIHdheSB0aGFuIHdyYXBwaW5nIHdob2xlIG9wdGlvbnMgaW4gUmVhZG9ubHk8PiArIG1ha2luZyBPIGV4dGVuZCBmcm9tIHt9XG4gIC8vICAgICAgIHRoaXMgaXMganVzdCBhIGhhY2sgdG8gaGFuZGxlIHdoZW4gbm8gbWVtYmVycyBvZiBQYXJ0aWFsUmVzdEdlbmVyaWNzIGFyZSBwcmVzZW50XG4gIC8vICAgICAgIE5vdGU6IFVzaW5nIG92ZXJsb2FkaW5nIChsaWtlIHBhZ2luYXRlZCBkaWQpIHN0cnVnZ2xlcyBiZWNhdXNlIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHdheSBvZiBkaXN0aW5ndWlzaGluZyBvbmVcbiAgLy8gICAgICAgc2hvdWxkIGJlIHVzZWQgZnJvbSB0aGUgb3RoZXIgKGR1ZSB0byBzYW1lIHByb2JsZW0gd2l0aCBldmVyeSBtZW1iZXIgYmVpbmcgcGFydGlhbClcbiAgLyoqIENyZWF0ZXMgYSBjaGlsZCBlbmRwb2ludCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyB3aGlsZSBvdmVycmlkaW5nIHByb3ZpZGVkIGBvcHRpb25zYC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2V4dGVuZFxuICAgKi9cbiAgZXh0ZW5kPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlLFxuICAgIEV4dGVuZE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzIHwge30sXG4gID4oXG4gICAgdGhpczogRSxcbiAgICBvcHRpb25zOiBSZWFkb25seTxcbiAgICAgIFJlc3RFbmRwb2ludEV4dGVuZE9wdGlvbnM8RXh0ZW5kT3B0aW9ucywgRSwgRj4gJiBFeHRlbmRPcHRpb25zXG4gICAgPixcbiAgKTogUmVzdEV4dGVuZGVkRW5kcG9pbnQ8RXh0ZW5kT3B0aW9ucywgRT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEluc3RhbmNlPFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE0gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nIH0sXG4+IGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGLCBTLCBNLCBPPiB7XG4gIC8qKiBDcmVhdGVzIGFuIEVuZHBvaW50IHRvIGFwcGVuZCB0aGUgbmV4dCBwYWdlIGV4dGVuZGluZyBhIGxpc3QgZm9yIHBhZ2luYXRpb25cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhZ2luYXRlZFxuICAgKi9cbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBBIGV4dGVuZHMgYW55W10sXG4gID4oXG4gICAgdGhpczogRSxcbiAgICByZW1vdmVDdXJzb3I6ICguLi5hcmdzOiBBKSA9PiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0sXG4gICk6IFBhZ2luYXRpb25FbmRwb2ludDxFLCBBPjtcbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBDIGV4dGVuZHMgc3RyaW5nLFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgY3Vyc29yRmllbGQ6IEMsXG4gICk6IFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PEUsIEM+O1xuICAvKiogQ29uY2F0aW5hdGUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzIChHRVQpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNnZXRQYWdlXG4gICAqL1xuICBnZXRQYWdlOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddIGV4dGVuZHMgc3RyaW5nID9cbiAgICAgIFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PFxuICAgICAgICBGICYgeyBzY2hlbWE6IFM7IHNpZGVFZmZlY3Q6IE0gfSAmIE8sXG4gICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICA+XG4gICAgOiB1bmRlZmluZWRcbiAgOiB1bmRlZmluZWQ7XG4gIC8qKiBDcmVhdGUgYSBuZXcgaXRlbSAoUE9TVCkgYW5kIGBwdXNoYCB0byB0aGUgZW5kXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwdXNoXG4gICAqL1xuICBwdXNoOiBBZGRFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+WydwdXNoJ10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIENyZWF0ZSBhIG5ldyBpdGVtIChQT1NUKSBhbmQgYHVuc2hpZnRgIHRvIHRoZSBiZWdpbm5pbmdcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Vuc2hpZnRcbiAgICovXG4gIHVuc2hpZnQ6IEFkZEVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3Vuc2hpZnQnXSxcbiAgICBFeGNsdWRlPE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5cbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPltdXG4gICAgICAgIHwgRm9ybURhdGE7XG4gICAgfVxuICA+O1xuICAvKiogQ3JlYXRlIG5ldyBpdGVtKHMpIChQT1NUKSBhbmQgYE9iamVjdC5hc3NpZ25gIG1lcmdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNhc3NpZ25cbiAgICovXG4gIGFzc2lnbjogQWRkRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPixcbiAgICBFeGNsdWRlPE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6IFJlY29yZDxzdHJpbmcsIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+PiB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIFJlbW92ZSBpdGVtKHMpIChQQVRDSCkgZnJvbSBjb2xsZWN0aW9uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNyZW1vdmVcbiAgICovXG4gIHJlbW92ZTogUmVtb3ZlRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPlsncmVtb3ZlJ10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIE1vdmUgaXRlbSBiZXR3ZWVuIGNvbGxlY3Rpb25zIChQQVRDSCkgLSByZW1vdmVzIGZyb20gb2xkLCBhZGRzIHRvIG5ld1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbW92ZVxuICAgKi9cbiAgbW92ZTogTW92ZUVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ21vdmUnXSxcbiAgICB7XG4gICAgICBwYXRoOiAnbW92ZVBhdGgnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21vdmVQYXRoJ10gJiBzdHJpbmcgOiBPWydwYXRoJ107XG4gICAgICBib2R5OiBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPiB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50RXh0ZW5kT3B0aW9uczxcbiAgTyBleHRlbmRzIFBhcnRpYWxSZXN0R2VuZXJpY3MsXG4gIEUgZXh0ZW5kcyB7IGJvZHk/OiBhbnk7IHBhdGg/OiBzdHJpbmc7IHNjaGVtYT86IFNjaGVtYTsgbWV0aG9kPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9IFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIE9wdGlvbnNUb0Z1bmN0aW9uPE8sIEUsIEY+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NjaGVtYSddLCBTY2hlbWEgfCB1bmRlZmluZWQ+XG4gIDogRVsnc2NoZW1hJ11cbj4gJlxuICBQYXJ0aWFsPFxuICAgIE9taXQ8XG4gICAgICBFLFxuICAgICAgS2V5b2ZSZXN0RW5kcG9pbnQgfCBrZXlvZiBQYXJ0aWFsUmVzdEdlbmVyaWNzIHwga2V5b2YgUmVzdEVuZHBvaW50T3B0aW9uc1xuICAgID5cbiAgPjtcblxudHlwZSBPcHRpb25zVG9SZXN0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzLFxuICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZSAmIHsgYm9keT86IGFueTsgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9XG4gICdwYXRoJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgICBPcHRpb25zVG9Cb2R5QXJndW1lbnQ8XG4gICAgICAgICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPIDogRSxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD47XG4gICAgICAgIGJvZHk6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFWydwYWdpbmF0aW9uRmllbGQnXTtcbiAgICAgIH1cbiAgICA+XG4gIDogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgUmVzdFR5cGU8XG4gICAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgICAgTyxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRVsncGF0aCddO1xuICAgICAgICBib2R5OiBPWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICBFLFxuICAgICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddXG4gICAgICA+LFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICBPWydwcm9jZXNzJ10gZXh0ZW5kcyB7fSA/IFJldHVyblR5cGU8T1sncHJvY2VzcyddPiA6IFJlc29sdmVUeXBlPEY+LFxuICAgICAge1xuICAgICAgICBwYXRoOiBFWydwYXRoJ107XG4gICAgICAgIGJvZHk6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiBPWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiBSZXN0SW5zdGFuY2U8XG4gICAgICBGLFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdwYXRoJyBleHRlbmRzIGtleW9mIE8gPyBFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPlxuICAgICAgICA6IEVbJ3BhdGgnXTtcbiAgICAgICAgYm9keTogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9bJ2JvZHknXSA6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gPyBPWydzZWFyY2hQYXJhbXMnXVxuICAgICAgICA6IEVbJ3NlYXJjaFBhcmFtcyddO1xuICAgICAgICBtZXRob2Q6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ107XG4gICAgICAgIHBhZ2luYXRpb25GaWVsZDogJ3BhZ2luYXRpb25GaWVsZCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgICBPWydwYWdpbmF0aW9uRmllbGQnXVxuICAgICAgICA6IEVbJ3BhZ2luYXRpb25GaWVsZCddO1xuICAgICAgfVxuICAgID47XG5cbmV4cG9ydCB0eXBlIFJlc3RFeHRlbmRlZEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyxcbiAgRSBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2UgJiB7IGdldFBhZ2U/OiB1bmtub3duIH0sXG4+ID0gT3B0aW9uc1RvUmVzdEVuZHBvaW50PFxuICBPLFxuICBFICZcbiAgICAoRSBleHRlbmRzIHsgZ2V0UGFnZTogeyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9IH0gP1xuICAgICAgeyBwYWdpbmF0aW9uRmllbGQ6IEVbJ2dldFBhZ2UnXVsncGFnaW5hdGlvbkZpZWxkJ10gfVxuICAgIDogdW5rbm93biksXG4gIFJlc3RJbnN0YW5jZTxcbiAgICAoXG4gICAgICAuLi5hcmdzOiBQYXJhbWV0ZXJzPEU+XG4gICAgKSA9PiBPWydwcm9jZXNzJ10gZXh0ZW5kcyB7fSA/IFByb21pc2U8UmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+PlxuICAgIDogUmV0dXJuVHlwZTxFPixcbiAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICA6IEVbJ3NpZGVFZmZlY3QnXVxuICA+XG4+ICZcbiAgT21pdDxPLCBLZXlvZlJlc3RFbmRwb2ludD4gJlxuICBPbWl0PEUsIEtleW9mUmVzdEVuZHBvaW50IHwga2V5b2YgTz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbFJlc3RHZW5lcmljcyB7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGF0aCAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NjaGVtYSAqL1xuICByZWFkb25seSBzY2hlbWE/OiBTY2hlbWEgfCB1bmRlZmluZWQ7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbWV0aG9kICovXG4gIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNib2R5ICovXG4gIGJvZHk/OiBhbnk7XG4gIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjc2VhcmNoUGFyYW1zICovXG4gIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0aW9uZmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Byb2Nlc3MgKi9cbiAgcHJvY2Vzcz8odmFsdWU6IGFueSwgLi4uYXJnczogYW55KTogYW55O1xufVxuLyoqIEdlbmVyaWMgdHlwZXMgd2hlbiBjb25zdHJ1Y3RpbmcgYSBSZXN0RW5kcG9pbnRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjaW5oZXJpdGFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0R2VuZXJpY3MgZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzIHtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uICYgUmVzdEdlbmVyaWNzICYgeyBzaWRlRWZmZWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBBIGV4dGVuZHMgYW55W10sXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUGFyYW1GZXRjaE5vQm9keTxBWzBdLCBSZXNvbHZlVHlwZTxFPj4sXG4gIEVbJ3NjaGVtYSddLFxuICBFWydzaWRlRWZmZWN0J10sXG4gIFBpY2s8RSwgJ3BhdGgnIHwgJ3NlYXJjaFBhcmFtcycgfCAnYm9keSc+ICYge1xuICAgIHNlYXJjaFBhcmFtczogT21pdDxBWzBdLCBrZXlvZiBQYXRoQXJnczxFWydwYXRoJ10+PjtcbiAgfVxuPjtcbi8qKiBNZXJnZSBwYWdpbmF0aW9uIGZpZWxkIEMgaW50byBib2R5LCBtYWtpbmcgaXQgcmVxdWlyZWQgKi9cbnR5cGUgUGFnaW5hdGlvbkludG9Cb2R5PEJvZHksIEMgZXh0ZW5kcyBzdHJpbmc+ID0gQm9keSAmIHtcbiAgW0sgaW4gQ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59O1xuXG4vKiogUGFnaW5hdGVkIHNlYXJjaFBhcmFtcyB0eXBlICovXG50eXBlIFBhZ2luYXRlZFNlYXJjaFBhcmFtczxcbiAgRSBleHRlbmRzIHsgc2VhcmNoUGFyYW1zPzogYW55OyBwYXRoPzogc3RyaW5nIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0ge1xuICBbSyBpbiBDXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbn0gJiBFWydzZWFyY2hQYXJhbXMnXSAmXG4gIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PjtcblxuLyoqIHNlYXJjaFBhcmFtcyB2ZXJzaW9uOiBwYWdpbmF0aW9uIGluIHNlYXJjaFBhcmFtcywgb3B0aW9uYWwgYm9keSBzdXBwb3J0ICovXG50eXBlIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICAvLyBVbmlvbiBhbGxvd3MgY2FsbGluZyB3aXRoIGp1c3Qgc2VhcmNoUGFyYW1zIG9yIHdpdGggc2VhcmNoUGFyYW1zICsgYm9keVxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8UGFnaW5hdGVkU2VhcmNoUGFyYW1zPEUsIEM+LCBSZXNvbHZlVHlwZTxFPj5cbiAgfCBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgICBQYWdpbmF0ZWRTZWFyY2hQYXJhbXM8RSwgQz4sXG4gICAgICBOb25OdWxsYWJsZTxFWydib2R5J10+LFxuICAgICAgUmVzb2x2ZVR5cGU8RT5cbiAgICA+LFxuICBFWydzY2hlbWEnXSxcbiAgRVsnc2lkZUVmZmVjdCddLFxuICBQaWNrPEUsICdwYXRoJyB8ICdzZWFyY2hQYXJhbXMnIHwgJ2JvZHknPiAmIHtcbiAgICBzZWFyY2hQYXJhbXM6IHtcbiAgICAgIFtLIGluIENdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH0gJiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgfVxuPiAmIHsgcGFnaW5hdGlvbkZpZWxkOiBDIH07XG5cbi8qKiBib2R5IHZlcnNpb246IHBhZ2luYXRpb24gZmllbGQgaXMgaW4gYm9keSAoYm9keSByZXF1aXJlZCkgKi9cbnR5cGUgUGFnaW5hdGlvbkZpZWxkSW5Cb2R5PFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgRVsnc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz4sXG4gICAgUmVzb2x2ZVR5cGU8RT5cbiAgPixcbiAgRVsnc2NoZW1hJ10sXG4gIEVbJ3NpZGVFZmZlY3QnXSxcbiAgUGljazxFLCAncGF0aCcgfCAnc2VhcmNoUGFyYW1zJz4gJiB7XG4gICAgYm9keTogUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz47XG4gIH1cbj4gJiB7IHBhZ2luYXRpb25GaWVsZDogQyB9O1xuXG4vKiogUmV0cmlldmVzIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyBieSBwYWdpbmF0aW9uIGZpZWxkICovXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID1cbiAgLy8gSWYgYm9keSBjYW4gYmUgdW5kZWZpbmVkIG9yIHBhZ2luYXRpb24gZmllbGQgbm90IGluIGJvZHksIHVzZSBzZWFyY2hQYXJhbXNcbiAgdW5kZWZpbmVkIGV4dGVuZHMgRVsnYm9keSddID8gUGFnaW5hdGlvbkZpZWxkSW5TZWFyY2hQYXJhbXM8RSwgQz5cbiAgOiAvLyBJZiBwYWdpbmF0aW9uIGZpZWxkIEMgaXMgYSBrZXkgb2YgYm9keSwgbWVyZ2UgaW50byBib2R5XG4gIEMgZXh0ZW5kcyBrZXlvZiBFWydib2R5J10gPyBQYWdpbmF0aW9uRmllbGRJbkJvZHk8RSwgQz5cbiAgOiAvLyBPdGhlcndpc2UgdXNlIHNlYXJjaFBhcmFtc1xuICAgIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPEUsIEM+O1xuXG5leHBvcnQgdHlwZSBBZGRFbmRwb2ludDxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxcbiAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgT1snYm9keSddLFxuICAgIFJlc29sdmVUeXBlPEY+XG4gID4sXG4gIFMsXG4gIHRydWUsXG4gIE9taXQ8TywgJ21ldGhvZCc+ICYgeyBtZXRob2Q6ICdQT1NUJyB9XG4+O1xuZXhwb3J0IHR5cGUgUmVtb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIE9bJ2JvZHknXSxcbiAgICBSZXNvbHZlVHlwZTxGPlxuICA+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnPiAmIHsgbWV0aG9kOiAnUEFUQ0gnIH1cbj47XG5leHBvcnQgdHlwZSBNb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sIE9bJ2JvZHknXSwgUmVzb2x2ZVR5cGU8Rj4+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnIHwgJ3NlYXJjaFBhcmFtcyc+ICYgeyBtZXRob2Q6ICdQQVRDSCcgfVxuPjtcblxudHlwZSBPcHRpb25zQm9keURlZmF1bHQ8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1xuICA6IE9bJ21ldGhvZCddIGV4dGVuZHMgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnID8gTyAmIHsgYm9keTogYW55IH1cbiAgOiBPICYgeyBib2R5OiB1bmRlZmluZWQgfTtcblxuLyoqIFdoZW4gYG1ldGhvZGAgaXMgb21pdHRlZCBmcm9tIGBPYCwgaW5mZXIgaXQgKG11c3Qgc3RheSBhbGlnbmVkIHdpdGggYE9wdGlvbnNUb0JvZHlBcmd1bWVudGApLiAqL1xudHlwZSBJbmZlclJlc3RNZXRob2RXaGVuT21pdHRlZDxPIGV4dGVuZHMgUmVzdEdlbmVyaWNzPiA9XG4gIE8gZXh0ZW5kcyB7IHNpZGVFZmZlY3Q6IHRydWUgfSA/ICdQT1NUJ1xuICA6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydib2R5J11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgJ0dFVCdcbiAgICA6ICdQT1NUJ1xuICA6ICdHRVQnO1xuXG50eXBlIE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEluZmVyUmVzdE1ldGhvZFdoZW5PbWl0dGVkPE8+O1xuXG50eXBlIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8gZXh0ZW5kcyB7IGJvZHk/OiBhbnkgfT4gPVxuICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gZXh0ZW5kcyBFbmRwb2ludEV4dHJhT3B0aW9uczxGPiB7XG4gIC8qKiBQcmVwZW5kZWQgdG8gYWxsIHVybHNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3VybFByZWZpeFxuICAgKi9cbiAgdXJsUHJlZml4Pzogc3RyaW5nO1xuICByZXF1ZXN0SW5pdD86IFJlcXVlc3RJbml0O1xuICAvKiogQ2FsbGVkIGJ5IGdldFJlcXVlc3RJbml0IHRvIGRldGVybWluZSBIVFRQIEhlYWRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldEhlYWRlcnNcbiAgICovXG4gIGdldEhlYWRlcnM/KGhlYWRlcnM6IEhlYWRlcnNJbml0KTogUHJvbWlzZTxIZWFkZXJzSW5pdD4gfCBIZWFkZXJzSW5pdDtcbiAgLyoqIFByZXBhcmVzIFJlcXVlc3RJbml0IHVzZWQgaW4gZmV0Y2guIFRoaXMgaXMgc2VudCB0byBmZXRjaFJlc3BvbnNlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldFJlcXVlc3RJbml0XG4gICAqL1xuICBnZXRSZXF1ZXN0SW5pdD8oYm9keTogYW55KTogUHJvbWlzZTxSZXF1ZXN0SW5pdD4gfCBSZXF1ZXN0SW5pdDtcbiAgLyoqIFBlcmZvcm1zIHRoZSBmZXRjaCBjYWxsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNmZXRjaFJlc3BvbnNlXG4gICAqL1xuICBmZXRjaFJlc3BvbnNlPyhpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxhbnk+O1xuICAvKiogVGFrZXMgdGhlIFJlc3BvbnNlIGFuZCBwYXJzZXMgdmlhIC50ZXh0KCkgb3IgLmpzb24oKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFyc2VSZXNwb25zZVxuICAgKi9cbiAgcGFyc2VSZXNwb25zZT8ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+O1xuXG4gIHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgZmV0Y2g/OiBGO1xuICBrZXk/KC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBzdHJpbmc7XG4gIHVybD8oLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxGLCBTPjtcbn1cblxuLy8gV2hlbiBzdWJjbGFzc2luZyBSZXN0RW5kcG9pbnQgd2l0aCBgTyBleHRlbmRzIFJlc3RHZW5lcmljcyA9IGFueWAsIE8gZGVmYXVsdHNcbi8vIHRvIGBhbnlgLiBUaGUgYHVua25vd24gZXh0ZW5kcyBPID8gYW55YCBndWFyZCBjYXRjaGVzIE89YW55IGJlZm9yZSBpdCByZWFjaGVzXG4vLyBQYXRoQXJncyAoc2VlICMzNzgyKS4gU29mdFBhdGhBcmdzIGNvbGxhcHNlcyBQYXRoQXJnczxzdHJpbmc+IHRvIGB1bmtub3duYFxuLy8gd2hlbiBhIGNvbmNyZXRlIGJvZHkgaXMgcHJlc2VudCwgcHJldmVudGluZyB1bmlvbiBvdmVybG9hZHMgdGhhdCBicmVha1xuLy8gZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIGNhbGxiYWNrcy4gTWV0aG9kIGluZmVyZW5jZSB0cmVhdHMgZXhwbGljaXQgYm9keSBhcyBQT1NULlxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50Q29uc3RydWN0b3JPcHRpb25zPE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnk+ID1cbiAgUmVzdEVuZHBvaW50T3B0aW9uczxcbiAgICBSZXN0RmV0Y2g8XG4gICAgICB1bmtub3duIGV4dGVuZHMgTyA/IGFueVxuICAgICAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFNvZnRQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxPLCBNZXRob2RBcmdGb3JCb2R5SW5mZXJlbmNlPE8+PixcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgICA6IGFueSAvKkRlbm9ybWFsaXplPE9bJ3NjaGVtYSddPiovXG4gICAgPixcbiAgICBPWydzY2hlbWEnXVxuICA+O1xuXG4vKiogU2ltcGxpZmllcyBlbmRwb2ludCBkZWZpbml0aW9ucyB0aGF0IGZvbGxvdyBSRVNUIHBhdHRlcm5zXG4gKlxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUmVzdEdlbmVyaWNzID0gYW55LFxuPiBleHRlbmRzIFJlc3RJbnN0YW5jZTxcbiAgUmVzdEZldGNoPFxuICAgIHVua25vd24gZXh0ZW5kcyBPID8gYW55XG4gICAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgICA6IFBhdGhBcmdzPE9bJ3BhdGgnXT4sXG4gICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PE8sIE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8Tz4+LFxuICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgOiBhbnkgLypEZW5vcm1hbGl6ZTxPWydzY2hlbWEnXT4qL1xuICA+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IHVuZGVmaW5lZCxcbiAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/IEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICA6IE1ldGhvZFRvU2lkZTxNZXRob2RBcmdGb3JCb2R5SW5mZXJlbmNlPE8+PixcbiAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1xuICA6IE8gJiB7XG4gICAgICBtZXRob2Q6IEluZmVyUmVzdE1ldGhvZFdoZW5PbWl0dGVkPE8+O1xuICAgIH1cbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0RW5kcG9pbnRDb25zdHJ1Y3RvciB7XG4gIC8qKiBTaW1wbGlmaWVzIGVuZHBvaW50IGRlZmluaXRpb25zIHRoYXQgZm9sbG93IFJFU1QgcGF0dGVybnNcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50XG4gICAqL1xuICBuZXcgPE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnk+KHtcbiAgICBtZXRob2QsXG4gICAgc2lkZUVmZmVjdCxcbiAgICBuYW1lLFxuICAgIC4uLm9wdGlvbnNcbiAgfTogUmVzdEVuZHBvaW50Q29uc3RydWN0b3JPcHRpb25zPE8+ICYgUmVhZG9ubHk8Tz4pOiBSZXN0RW5kcG9pbnQ8Tz47XG4gIHJlYWRvbmx5IHByb3RvdHlwZTogUmVzdEluc3RhbmNlQmFzZTtcbn1cblxuZXhwb3J0IHR5cGUgTWV0aG9kVG9TaWRlPE0+ID1cbiAgTSBleHRlbmRzIHN0cmluZyA/XG4gICAgTSBleHRlbmRzICdHRVQnID9cbiAgICAgIHVuZGVmaW5lZFxuICAgIDogdHJ1ZVxuICA6IHVuZGVmaW5lZDtcblxuLyoqIFJlc3RFbmRwb2ludCB0eXBlcyBzaW1wbGlmaWVkICovXG5leHBvcnQgdHlwZSBSZXN0VHlwZTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBCb2R5ID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9LFxuPiA9IElmVHlwZVNjcmlwdExvb3NlTnVsbDxcbiAgUmVzdEluc3RhbmNlPFJlc3RGZXRjaDxVcmxQYXJhbXMsIEJvZHksIFI+LCBTLCBNLCBPPixcbiAgQm9keSBleHRlbmRzIHt9ID8gUmVzdFR5cGVXaXRoQm9keTxVcmxQYXJhbXMsIFMsIE0sIEJvZHksIFIsIE8+XG4gIDogUmVzdFR5cGVOb0JvZHk8VXJsUGFyYW1zLCBTLCBNLCBSLCBPPlxuPjtcblxuZXhwb3J0IHR5cGUgUmVzdFR5cGVXaXRoQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIEJvZHkgPSBhbnksXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaFdpdGhCb2R5PFVybFBhcmFtcywgQm9keSwgUj4sIFMsIE0sIE8+O1xuXG5leHBvcnQgdHlwZSBSZXN0VHlwZU5vQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogdW5kZWZpbmVkO1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiB1bmRlZmluZWQgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaE5vQm9keTxVcmxQYXJhbXMsIFI+LCBTLCBNLCBPPjtcblxuLyoqIFNpbXBsZSBwYXJhbWV0ZXJzLCBhbmQgYm9keSBmZXRjaCBmdW5jdGlvbnMgKi9cbmV4cG9ydCB0eXBlIFJlc3RGZXRjaDxcbiAgVXJsUGFyYW1zLFxuICBCb2R5ID0ge30sXG4gIFJlc29sdmUgPSBhbnksXG4+ID0gSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuICB8IFBhcmFtRmV0Y2hXaXRoQm9keTxVcmxQYXJhbXMsIEJvZHksIFJlc29sdmU+LFxuICBCb2R5IGV4dGVuZHMge30gPyBQYXJhbUZldGNoV2l0aEJvZHk8VXJsUGFyYW1zLCBCb2R5LCBSZXNvbHZlPlxuICA6IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuPjtcblxuZXhwb3J0IHR5cGUgUGFyYW1GZXRjaFdpdGhCb2R5PFAsIEIgPSB7fSwgUiA9IGFueT4gPVxuICAvLyB3ZSBtdXN0IGFsd2F5cyBhbGxvdyB1bmRlZmluZWQgaW4gYSB1bmlvbiBhbmQgZ2l2ZSBpdCBhIHR5cGUgd2l0aG91dCBwYXJhbXNcbiAgUCBleHRlbmRzIHVuZGVmaW5lZCA/ICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+XG4gIDogLy8gZXZlbiB3aXRoIGxvb3NlIG51bGwsIHRoaXMgd2lsbCBvbmx5IGJlIHRydWUgd2hlbiBhbGwgbWVtYmVycyBhcmUgb3B0aW9uYWxcbiAge30gZXh0ZW5kcyBQID9cbiAgICAvLyB0aGlzIHNhZmVseSBoYW5kbGVzIFBhdGhBcmdzIHdpdGggbm8gbWVtYmVycyB0aGF0IHJlc3VsdHMgaW4gYSBzaW1wbGUgYHVua25vd25gIHR5cGVcbiAgICBrZXlvZiBQIGV4dGVuZHMgbmV2ZXIgP1xuICAgICAgKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIGJvZHk6IEIpID0+IFByb21pc2U8Uj5cbiAgICA6IHwgKCh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBwYXJhbXM6IFAsIGJvZHk6IEIpID0+IFByb21pc2U8Uj4pXG4gICAgICB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgYm9keTogQikgPT4gUHJvbWlzZTxSPilcbiAgOiAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBQYXJhbUZldGNoTm9Cb2R5PFAsIFIgPSBhbnk+ID1cbiAgLy8gd2UgbXVzdCBhbHdheXMgYWxsb3cgdW5kZWZpbmVkIGluIGEgdW5pb24gYW5kIGdpdmUgaXQgYSB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gIFAgZXh0ZW5kcyB1bmRlZmluZWQgPyAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSkgPT4gUHJvbWlzZTxSPlxuICA6IC8vIGV2ZW4gd2l0aCBsb29zZSBudWxsLCB0aGlzIHdpbGwgb25seSBiZSB0cnVlIHdoZW4gYWxsIG1lbWJlcnMgYXJlIG9wdGlvbmFsXG4gIHt9IGV4dGVuZHMgUCA/XG4gICAgLy8gdGhpcyBzYWZlbHkgaGFuZGxlcyBQYXRoQXJncyB3aXRoIG5vIG1lbWJlcnMgdGhhdCByZXN1bHRzIGluIGEgc2ltcGxlIGB1bmtub3duYCB0eXBlXG4gICAga2V5b2YgUCBleHRlbmRzIG5ldmVyID9cbiAgICAgICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlKSA9PiBQcm9taXNlPFI+XG4gICAgOiB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQKSA9PiBQcm9taXNlPFI+KVxuICAgICAgfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UpID0+IFByb21pc2U8Uj4pXG4gIDogKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCkgPT4gUHJvbWlzZTxSPjtcblxuLy8gc2FtZSBhbGdvcml0aG0sIGJ1dCBmb3IgQXJncyAoYWthIHJlYWRvbmx5IGFueVtdKVxuZXhwb3J0IHR5cGUgUGFyYW1Ub0FyZ3M8UD4gPVxuICBQIGV4dGVuZHMgdW5kZWZpbmVkID8gW11cbiAgOiB7fSBleHRlbmRzIFAgP1xuICAgIGtleW9mIFAgZXh0ZW5kcyBuZXZlciA/XG4gICAgICBbXVxuICAgIDogW10gfCBbUF1cbiAgOiBbUF07XG5cbnR5cGUgSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFksIE4+ID0gMSB8IHVuZGVmaW5lZCBleHRlbmRzIDEgPyBZIDogTjtcblxuZXhwb3J0IHR5cGUgS2V5b2ZSZXN0RW5kcG9pbnQgPSBrZXlvZiBSZXN0SW5zdGFuY2U7XG5cbmV4cG9ydCB0eXBlIEZyb21GYWxsQmFjazxLIGV4dGVuZHMga2V5b2YgRSwgTywgRT4gPVxuICBLIGV4dGVuZHMga2V5b2YgTyA/IE9bS10gOiBFW0tdO1xuXG5leHBvcnQgdHlwZSBGZXRjaE11dGF0ZTxcbiAgQSBleHRlbmRzIHJlYWRvbmx5IGFueVtdID0gW2FueSwge31dIHwgW3t9XSxcbiAgUiA9IGFueSxcbj4gPSAodGhpczogUmVzdEluc3RhbmNlLCAuLi5hcmdzOiBBKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBGZXRjaEdldDxBIGV4dGVuZHMgcmVhZG9ubHkgYW55W10gPSBbYW55XSwgUiA9IGFueT4gPSAoXG4gIHRoaXM6IFJlc3RJbnN0YW5jZSxcbiAgLi4uYXJnczogQVxuKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0czxPLCBEPiA9IHtcbiAgW0sgaW4ga2V5b2YgTyB8IGtleW9mIERdOiBLIGV4dGVuZHMga2V5b2YgTyA/IEV4Y2x1ZGU8T1tLXSwgdW5kZWZpbmVkPlxuICA6IERbRXh0cmFjdDxLLCBrZXlvZiBEPl07XG59O1xuXG5leHBvcnQgdHlwZSBHZXRFbmRwb2ludDxcbiAgTyBleHRlbmRzIHtcbiAgICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWE7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZU5vQm9keTxcbiAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gIDogUGF0aEFyZ3M8T1sncGF0aCddPixcbiAgT1snc2NoZW1hJ10sXG4gIHVuZGVmaW5lZCxcbiAgYW55LFxuICBPICYgeyBtZXRob2Q6ICdHRVQnIH1cbj47XG5cbmV4cG9ydCB0eXBlIE11dGF0ZUVuZHBvaW50PFxuICBPIGV4dGVuZHMge1xuICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgICByZWFkb25seSBzY2hlbWE6IFNjaGVtYTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaFBhcmFtcz86IGFueTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IGJvZHk/OiBhbnk7XG4gIH0gPSB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZVdpdGhCb2R5PFxuICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICBQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICBPWydzY2hlbWEnXSxcbiAgdHJ1ZSxcbiAgT1snYm9keSddLFxuICBhbnksXG4gIE8gJiB7IGJvZHk6IGFueTsgbWV0aG9kOiAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJyB9XG4+O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
|
package/lib/RestHelpers.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { PathFunction, ParamData } from 'path-to-regexp';
|
|
|
2
2
|
import { ShortenPath } from './pathTypes.js';
|
|
3
3
|
export declare function getUrlBase(path: string): PathFunction<ParamData>;
|
|
4
4
|
export declare function getUrlTokens(path: string): Set<string>;
|
|
5
|
+
export declare function getPathRegex(path: string): RegExp;
|
|
5
6
|
export declare function isPojo(obj: unknown): obj is Record<string, any>;
|
|
6
7
|
export declare function shortenPath<S extends string>(path: S): ShortenPath<S>;
|
|
7
8
|
//# sourceMappingURL=RestHelpers.d.ts.map
|
package/lib/RestHelpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestHelpers.d.ts","sourceRoot":"","sources":["../src/RestHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"RestHelpers.d.ts","sourceRoot":"","sources":["../src/RestHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAIZ,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAKhE;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAKtD;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAuBD,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAK/D;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAarE"}
|
package/lib/RestHelpers.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { compile, parse } from 'path-to-regexp';
|
|
1
|
+
import { compile, parse, pathToRegexp } from 'path-to-regexp';
|
|
2
2
|
const urlBaseCache = Object.create(null);
|
|
3
3
|
export function getUrlBase(path) {
|
|
4
4
|
if (!(path in urlBaseCache)) {
|
|
@@ -13,6 +13,13 @@ export function getUrlTokens(path) {
|
|
|
13
13
|
}
|
|
14
14
|
return urlTokensCache[path];
|
|
15
15
|
}
|
|
16
|
+
const pathRegexCache = Object.create(null);
|
|
17
|
+
export function getPathRegex(path) {
|
|
18
|
+
if (!(path in pathRegexCache)) {
|
|
19
|
+
pathRegexCache[path] = pathToRegexp(path).regexp;
|
|
20
|
+
}
|
|
21
|
+
return pathRegexCache[path];
|
|
22
|
+
}
|
|
16
23
|
function tokenMap(tokens) {
|
|
17
24
|
const tokenNames = new Set();
|
|
18
25
|
for (const token of tokens) {
|
|
@@ -45,4 +52,4 @@ export function shortenPath(path) {
|
|
|
45
52
|
if (shortUrlRoot[shortUrlRoot.length - 1] === '/') shortUrlRoot = shortUrlRoot.substring(0, shortUrlRoot.length - 1);
|
|
46
53
|
return shortUrlRoot;
|
|
47
54
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlIiwicGFyc2UiLCJwYXRoVG9SZWdleHAiLCJ1cmxCYXNlQ2FjaGUiLCJPYmplY3QiLCJjcmVhdGUiLCJnZXRVcmxCYXNlIiwicGF0aCIsInVybFRva2Vuc0NhY2hlIiwiZ2V0VXJsVG9rZW5zIiwidG9rZW5NYXAiLCJ0b2tlbnMiLCJwYXRoUmVnZXhDYWNoZSIsImdldFBhdGhSZWdleCIsInJlZ2V4cCIsInRva2VuTmFtZXMiLCJTZXQiLCJ0b2tlbiIsInR5cGUiLCJhZGQiLCJuYW1lIiwicHJvdG8iLCJwcm90b3R5cGUiLCJncG8iLCJnZXRQcm90b3R5cGVPZiIsImlzUG9qbyIsIm9iaiIsInNob3J0ZW5QYXRoIiwibGFzdFRva2VuSW5kZXgiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJFcnJvciIsInNob3J0VXJsUm9vdCIsInN1YnN0cmluZyIsImxlbmd0aCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9SZXN0SGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21waWxlLFxuICBQYXRoRnVuY3Rpb24sXG4gIHBhcnNlLFxuICBwYXRoVG9SZWdleHAsXG4gIFRva2VuLFxuICBQYXJhbURhdGEsXG59IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHsgU2hvcnRlblBhdGggfSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5cbmNvbnN0IHVybEJhc2VDYWNoZTogUmVjb3JkPHN0cmluZywgUGF0aEZ1bmN0aW9uPG9iamVjdD4+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxCYXNlKHBhdGg6IHN0cmluZyk6IFBhdGhGdW5jdGlvbjxQYXJhbURhdGE+IHtcbiAgaWYgKCEocGF0aCBpbiB1cmxCYXNlQ2FjaGUpKSB7XG4gICAgdXJsQmFzZUNhY2hlW3BhdGhdID0gY29tcGlsZShwYXRoKTtcbiAgfVxuICByZXR1cm4gdXJsQmFzZUNhY2hlW3BhdGhdO1xufVxuXG5jb25zdCB1cmxUb2tlbnNDYWNoZTogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxUb2tlbnMocGF0aDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICBpZiAoIShwYXRoIGluIHVybFRva2Vuc0NhY2hlKSkge1xuICAgIHVybFRva2Vuc0NhY2hlW3BhdGhdID0gdG9rZW5NYXAocGFyc2UocGF0aCkudG9rZW5zKTtcbiAgfVxuICByZXR1cm4gdXJsVG9rZW5zQ2FjaGVbcGF0aF07XG59XG5cbmNvbnN0IHBhdGhSZWdleENhY2hlOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoUmVnZXgocGF0aDogc3RyaW5nKTogUmVnRXhwIHtcbiAgaWYgKCEocGF0aCBpbiBwYXRoUmVnZXhDYWNoZSkpIHtcbiAgICBwYXRoUmVnZXhDYWNoZVtwYXRoXSA9IHBhdGhUb1JlZ2V4cChwYXRoKS5yZWdleHA7XG4gIH1cbiAgcmV0dXJuIHBhdGhSZWdleENhY2hlW3BhdGhdO1xufVxuXG5mdW5jdGlvbiB0b2tlbk1hcCh0b2tlbnM6IFRva2VuW10pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IHRva2VuTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3BhcmFtJzpcbiAgICAgIGNhc2UgJ3dpbGRjYXJkJzpcbiAgICAgICAgdG9rZW5OYW1lcy5hZGQodG9rZW4ubmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdG9rZW5NYXAodG9rZW4udG9rZW5zKSkge1xuICAgICAgICAgIHRva2VuTmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9rZW5OYW1lcztcbn1cblxuY29uc3QgcHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3QgZ3BvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQb2pvKG9iajogdW5rbm93bik6IG9iaiBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ3BvKG9iaikgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvcnRlblBhdGg8UyBleHRlbmRzIHN0cmluZz4ocGF0aDogUyk6IFNob3J0ZW5QYXRoPFM+IHtcbiAgY29uc3QgbGFzdFRva2VuSW5kZXggPSBNYXRoLm1heChwYXRoLmxhc3RJbmRleE9mKCc6JyksIHBhdGgubGFzdEluZGV4T2YoJyonKSk7XG4gIGlmIChsYXN0VG9rZW5JbmRleCA9PT0gLTEpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1Jlc291cmNlIHBhdGggcmVxdWlyZXMgYXQgbGVhc3Qgb25lIDpwYXJhbWV0ZXIgb3IgKndpbGRjYXJkJyxcbiAgICApO1xuICBsZXQgc2hvcnRVcmxSb290OiBTaG9ydGVuUGF0aDxTPiA9IHBhdGguc3Vic3RyaW5nKDAsIGxhc3RUb2tlbkluZGV4KSBhcyBhbnk7XG4gIGlmIChzaG9ydFVybFJvb3Rbc2hvcnRVcmxSb290Lmxlbmd0aCAtIDFdID09PSAnLycpXG4gICAgc2hvcnRVcmxSb290ID0gc2hvcnRVcmxSb290LnN1YnN0cmluZyhcbiAgICAgIDAsXG4gICAgICBzaG9ydFVybFJvb3QubGVuZ3RoIC0gMSxcbiAgICApIGFzIFNob3J0ZW5QYXRoPFM+O1xuICByZXR1cm4gc2hvcnRVcmxSb290O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxPQUFPLEVBRVBDLEtBQUssRUFDTEMs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
|
package/lib/pathTypes.d.ts
CHANGED
|
@@ -3,6 +3,9 @@ type KeyName<K extends string> = CleanKey<K extends `*${infer N}}` ? N : K exten
|
|
|
3
3
|
type KeyVal<K extends string> = K extends `*${string}` ? string[] : string | number;
|
|
4
4
|
/** Parameters for a given path */
|
|
5
5
|
export type PathArgs<S extends string> = unknown extends S ? any : PathKeys<S> extends never ? unknown : KeysToArgs<PathKeys<S>>;
|
|
6
|
+
/** Like {@link PathArgs} but widened `path: string` collapses to `unknown`,
|
|
7
|
+
* preventing `(params, body) | (body)` union overloads in ParamFetchWithBody. */
|
|
8
|
+
export type SoftPathArgs<P extends string> = unknown extends P ? any : string extends P ? unknown : PathArgs<P>;
|
|
6
9
|
/** Computes the union of keys for a path string */
|
|
7
10
|
export type PathKeys<S extends string> = string extends S ? string : S extends `${infer A}\\${':' | '*' | '}'}${infer B}` ? PathKeys<A> | PathKeys<B> : Splits<S, ':'> | Splits<S, '*'>;
|
|
8
11
|
type Splits<S extends string, M extends ':' | '*'> = S extends `${string}${M}${infer K}${M}${infer R}` ? Splits<`${M}${K}`, M> | Splits<`${M}${R}`, M> : S extends (`${string}${M}${infer K}${'/' | '\\' | '%' | '&' | '*' | ':' | '{' | ';' | ',' | '!' | '@'}${infer R}`) ? Splits<`${M}${K}`, M> | Splits<R, M> : S extends `${string}${M}${infer K}` ? M extends '*' ? `*${K}` : K : never;
|
package/lib/pathTypes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathTypes.d.ts","sourceRoot":"","sources":["../src/pathTypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pathTypes.d.ts","sourceRoot":"","sources":["../src/pathTypes.ts"],"names":[],"mappings":"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"}
|
package/lib/pathTypes.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3BhdGhUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIENsZWFuS2V5PFMgZXh0ZW5kcyBzdHJpbmc+ID0gUyBleHRlbmRzIGBcIiR7aW5mZXIgS31cImAgPyBLIDogUztcblxudHlwZSBLZXlOYW1lPEsgZXh0ZW5kcyBzdHJpbmc+ID0gQ2xlYW5LZXk8XG4gIEsgZXh0ZW5kcyBgKiR7aW5mZXIgTn19YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCoke2luZmVyIE59YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCR7aW5mZXIgTn19YCA/IE5cbiAgOiBLXG4+O1xuXG50eXBlIEtleVZhbDxLIGV4dGVuZHMgc3RyaW5nPiA9XG4gIEsgZXh0ZW5kcyBgKiR7c3RyaW5nfWAgPyBzdHJpbmdbXSA6IHN0cmluZyB8IG51bWJlcjtcblxuLyoqIFBhcmFtZXRlcnMgZm9yIGEgZ2l2ZW4gcGF0aCAqL1xuZXhwb3J0IHR5cGUgUGF0aEFyZ3M8UyBleHRlbmRzIHN0cmluZz4gPVxuICB1bmtub3duIGV4dGVuZHMgUyA/IGFueVxuICA6IFBhdGhLZXlzPFM+IGV4dGVuZHMgbmV2ZXIgP1xuICAgIC8vIHVua25vd24gaXMgaWRlbnRpdHkgZm9yIGludGVyc2VjdGlvbiAoJyYnKVxuICAgIHVua25vd25cbiAgOiBLZXlzVG9BcmdzPFBhdGhLZXlzPFM+
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3BhdGhUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIENsZWFuS2V5PFMgZXh0ZW5kcyBzdHJpbmc+ID0gUyBleHRlbmRzIGBcIiR7aW5mZXIgS31cImAgPyBLIDogUztcblxudHlwZSBLZXlOYW1lPEsgZXh0ZW5kcyBzdHJpbmc+ID0gQ2xlYW5LZXk8XG4gIEsgZXh0ZW5kcyBgKiR7aW5mZXIgTn19YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCoke2luZmVyIE59YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCR7aW5mZXIgTn19YCA/IE5cbiAgOiBLXG4+O1xuXG50eXBlIEtleVZhbDxLIGV4dGVuZHMgc3RyaW5nPiA9XG4gIEsgZXh0ZW5kcyBgKiR7c3RyaW5nfWAgPyBzdHJpbmdbXSA6IHN0cmluZyB8IG51bWJlcjtcblxuLyoqIFBhcmFtZXRlcnMgZm9yIGEgZ2l2ZW4gcGF0aCAqL1xuZXhwb3J0IHR5cGUgUGF0aEFyZ3M8UyBleHRlbmRzIHN0cmluZz4gPVxuICB1bmtub3duIGV4dGVuZHMgUyA/IGFueVxuICA6IFBhdGhLZXlzPFM+IGV4dGVuZHMgbmV2ZXIgP1xuICAgIC8vIHVua25vd24gaXMgaWRlbnRpdHkgZm9yIGludGVyc2VjdGlvbiAoJyYnKVxuICAgIHVua25vd25cbiAgOiBLZXlzVG9BcmdzPFBhdGhLZXlzPFM+PjtcblxuLyoqIExpa2Uge0BsaW5rIFBhdGhBcmdzfSBidXQgd2lkZW5lZCBgcGF0aDogc3RyaW5nYCBjb2xsYXBzZXMgdG8gYHVua25vd25gLFxuICogIHByZXZlbnRpbmcgYChwYXJhbXMsIGJvZHkpIHwgKGJvZHkpYCB1bmlvbiBvdmVybG9hZHMgaW4gUGFyYW1GZXRjaFdpdGhCb2R5LiAqL1xuZXhwb3J0IHR5cGUgU29mdFBhdGhBcmdzPFAgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgdW5rbm93biBleHRlbmRzIFAgPyBhbnlcbiAgOiBzdHJpbmcgZXh0ZW5kcyBQID8gdW5rbm93blxuICA6IFBhdGhBcmdzPFA+O1xuXG4vKiogQ29tcHV0ZXMgdGhlIHVuaW9uIG9mIGtleXMgZm9yIGEgcGF0aCBzdHJpbmcgKi9cbmV4cG9ydCB0eXBlIFBhdGhLZXlzPFMgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgc3RyaW5nIGV4dGVuZHMgUyA/IHN0cmluZ1xuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBBfVxcXFwkeyc6JyB8ICcqJyB8ICd9J30ke2luZmVyIEJ9YCA/XG4gICAgUGF0aEtleXM8QT4gfCBQYXRoS2V5czxCPlxuICA6IFNwbGl0czxTLCAnOic+IHwgU3BsaXRzPFMsICcqJz47XG5cbnR5cGUgU3BsaXRzPFMgZXh0ZW5kcyBzdHJpbmcsIE0gZXh0ZW5kcyAnOicgfCAnKic+ID1cbiAgUyBleHRlbmRzIGAke3N0cmluZ30ke019JHtpbmZlciBLfSR7TX0ke2luZmVyIFJ9YCA/XG4gICAgU3BsaXRzPGAke019JHtLfWAsIE0+IHwgU3BsaXRzPGAke019JHtSfWAsIE0+XG4gIDogUyBleHRlbmRzIChcbiAgICBgJHtzdHJpbmd9JHtNfSR7aW5mZXIgS30keycvJyB8ICdcXFxcJyB8ICclJyB8ICcmJyB8ICcqJyB8ICc6JyB8ICd7JyB8ICc7JyB8ICcsJyB8ICchJyB8ICdAJ30ke2luZmVyIFJ9YFxuICApID9cbiAgICBTcGxpdHM8YCR7TX0ke0t9YCwgTT4gfCBTcGxpdHM8UiwgTT5cbiAgOiBTIGV4dGVuZHMgYCR7c3RyaW5nfSR7TX0ke2luZmVyIEt9YCA/XG4gICAgTSBleHRlbmRzICcqJyA/XG4gICAgICBgKiR7S31gXG4gICAgOiBLXG4gIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIEtleXNUb0FyZ3M8S2V5IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW0sgaW4gS2V5IGFzIEsgZXh0ZW5kcyBgJHtzdHJpbmd9fWAgPyBLZXlOYW1lPEs+IDogbmV2ZXJdPzogS2V5VmFsPEs+O1xufSAmIChFeGNsdWRlPEtleSwgYCR7c3RyaW5nfX1gPiBleHRlbmRzIG5ldmVyID8gdW5rbm93blxuOiB7XG4gICAgW0sgaW4gS2V5IGFzIEsgZXh0ZW5kcyBgJHtzdHJpbmd9fWAgPyBuZXZlciA6IEtleU5hbWU8Sz5dOiBLZXlWYWw8Sz47XG4gIH0pO1xuXG5leHBvcnQgdHlwZSBQYXRoQXJnc0FuZFNlYXJjaDxTIGV4dGVuZHMgc3RyaW5nPiA9XG4gIHVua25vd24gZXh0ZW5kcyBTID8gYW55XG4gIDogRXhjbHVkZTxQYXRoS2V5czxTPiwgYCR7c3RyaW5nfX1gPiBleHRlbmRzIG5ldmVyID9cbiAgICBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuPiB8IHVuZGVmaW5lZFxuICA6IHtcbiAgICAgIFtLIGluIFBhdGhLZXlzPFM+IGFzIEsgZXh0ZW5kcyBgJHtzdHJpbmd9fWAgPyBuZXZlclxuICAgICAgOiBLZXlOYW1lPEs+XTogS2V5VmFsPEs+O1xuICAgIH0gJiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmcgfCBzdHJpbmdbXT47XG5cbi8qKiBSZW1vdmVzIHRoZSBsYXN0IDpwYXJhbSBvciAqd2lsZGNhcmQgdG9rZW4gKi9cbmV4cG9ydCB0eXBlIFNob3J0ZW5QYXRoPFMgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgc3RyaW5nIGV4dGVuZHMgUyA/IHN0cmluZ1xuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBCfToke2luZmVyIFJ9YCA/IFRyaW1Ub2tlbjxgJHtCfToke1Nob3J0ZW5QYXRoPFI+fWA+XG4gIDogUyBleHRlbmRzIGAke2luZmVyIEJ9KiR7aW5mZXIgUn1gID8gVHJpbVRva2VuPGAke0J9KiR7U2hvcnRlblBhdGg8Uj59YD5cbiAgOiAnJztcblxudHlwZSBUcmltVG9rZW48UyBleHRlbmRzIHN0cmluZz4gPVxuICBzdHJpbmcgZXh0ZW5kcyBTID8gc3RyaW5nXG4gIDogUyBleHRlbmRzIGAke2luZmVyIFJ9OmAgPyBSXG4gIDogUyBleHRlbmRzIGAke2luZmVyIFJ9KmAgPyBSXG4gIDogUztcblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VQYXRoID0gc3RyaW5nOyAvLyBgJHtzdHJpbmd9OiR7c3RyaW5nfWA7IFRPRE86IE1heWJlIGRvIHRoaXMgaW4gdGhlIGZ1dHVyZT8gU2VlbXMgdG8gaGFyZCB0byB1bmRlcnN0YW5kIGZvciBub3dcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-client/rest",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.3",
|
|
4
4
|
"description": "Quickly define typed REST resources and endpoints",
|
|
5
5
|
"homepage": "https://dataclient.io/rest",
|
|
6
6
|
"repository": {
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"license": "Apache-2.0",
|
|
136
136
|
"dependencies": {
|
|
137
137
|
"@babel/runtime": "^7.20.0",
|
|
138
|
-
"@data-client/endpoint": "^0.16.
|
|
138
|
+
"@data-client/endpoint": "^0.16.3",
|
|
139
139
|
"path-to-regexp": "^8.1.0"
|
|
140
140
|
},
|
|
141
141
|
"devDependencies": {
|
package/src/RestEndpoint.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { Endpoint } from '@data-client/endpoint';
|
|
2
|
-
import { pathToRegexp } from 'path-to-regexp';
|
|
3
2
|
|
|
4
3
|
import extractCollection from './extractCollection.js';
|
|
5
4
|
import mapCollection from './mapCollection.js';
|
|
6
5
|
import NetworkError from './NetworkError.js';
|
|
7
6
|
import { createPaginationSchema } from './paginatedCollections.js';
|
|
8
7
|
import paramsToString from './paramsToString.js';
|
|
9
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
getUrlBase,
|
|
10
|
+
getUrlTokens,
|
|
11
|
+
getPathRegex,
|
|
12
|
+
isPojo,
|
|
13
|
+
} from './RestHelpers.js';
|
|
10
14
|
|
|
11
15
|
/** Simplifies endpoint definitions that follow REST patterns
|
|
12
16
|
*
|
|
@@ -196,7 +200,7 @@ Response (first 300 characters): ${text.substring(0, 300)}`;
|
|
|
196
200
|
}
|
|
197
201
|
|
|
198
202
|
get pathRegex() {
|
|
199
|
-
return
|
|
203
|
+
return getPathRegex(this.path);
|
|
200
204
|
}
|
|
201
205
|
|
|
202
206
|
testKey(key) {
|
package/src/RestEndpointTypes.ts
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
OptionsToBodyArgument,
|
|
12
12
|
OptionsToFunction,
|
|
13
13
|
} from './OptionsToFunction.js';
|
|
14
|
-
import { PathArgs } from './pathTypes.js';
|
|
14
|
+
import { PathArgs, SoftPathArgs } from './pathTypes.js';
|
|
15
15
|
import { EndpointUpdateFunction } from './RestEndpointTypeHelp.js';
|
|
16
16
|
|
|
17
17
|
export interface RestInstanceBase<
|
|
@@ -520,6 +520,18 @@ type OptionsBodyDefault<O extends RestGenerics> =
|
|
|
520
520
|
: O['method'] extends 'POST' | 'PUT' | 'PATCH' ? O & { body: any }
|
|
521
521
|
: O & { body: undefined };
|
|
522
522
|
|
|
523
|
+
/** When `method` is omitted from `O`, infer it (must stay aligned with `OptionsToBodyArgument`). */
|
|
524
|
+
type InferRestMethodWhenOmitted<O extends RestGenerics> =
|
|
525
|
+
O extends { sideEffect: true } ? 'POST'
|
|
526
|
+
: 'body' extends keyof O ?
|
|
527
|
+
[O['body']] extends [undefined] ?
|
|
528
|
+
'GET'
|
|
529
|
+
: 'POST'
|
|
530
|
+
: 'GET';
|
|
531
|
+
|
|
532
|
+
type MethodArgForBodyInference<O extends RestGenerics> =
|
|
533
|
+
'method' extends keyof O ? O['method'] : InferRestMethodWhenOmitted<O>;
|
|
534
|
+
|
|
523
535
|
type OptionsToAdderBodyArgument<O extends { body?: any }> =
|
|
524
536
|
'body' extends keyof O ? O['body'] : any;
|
|
525
537
|
|
|
@@ -558,20 +570,21 @@ export interface RestEndpointOptions<
|
|
|
558
570
|
update?: EndpointUpdateFunction<F, S>;
|
|
559
571
|
}
|
|
560
572
|
|
|
573
|
+
// When subclassing RestEndpoint with `O extends RestGenerics = any`, O defaults
|
|
574
|
+
// to `any`. The `unknown extends O ? any` guard catches O=any before it reaches
|
|
575
|
+
// PathArgs (see #3782). SoftPathArgs collapses PathArgs<string> to `unknown`
|
|
576
|
+
// when a concrete body is present, preventing union overloads that break
|
|
577
|
+
// getOptimisticResponse callbacks. Method inference treats explicit body as POST.
|
|
561
578
|
export type RestEndpointConstructorOptions<O extends RestGenerics = any> =
|
|
562
579
|
RestEndpointOptions<
|
|
563
580
|
RestFetch<
|
|
564
|
-
|
|
581
|
+
unknown extends O ? any
|
|
582
|
+
: 'searchParams' extends keyof O ?
|
|
565
583
|
[O['searchParams']] extends [undefined] ?
|
|
566
|
-
|
|
567
|
-
: O['searchParams'] &
|
|
568
|
-
:
|
|
569
|
-
OptionsToBodyArgument<
|
|
570
|
-
O,
|
|
571
|
-
'method' extends keyof O ? O['method']
|
|
572
|
-
: O extends { sideEffect: true } ? 'POST'
|
|
573
|
-
: 'GET'
|
|
574
|
-
>,
|
|
584
|
+
SoftPathArgs<O['path']>
|
|
585
|
+
: O['searchParams'] & SoftPathArgs<O['path']>
|
|
586
|
+
: SoftPathArgs<O['path']>,
|
|
587
|
+
OptionsToBodyArgument<O, MethodArgForBodyInference<O>>,
|
|
575
588
|
O['process'] extends {} ? ReturnType<O['process']>
|
|
576
589
|
: any /*Denormalize<O['schema']>*/
|
|
577
590
|
>,
|
|
@@ -586,26 +599,22 @@ export interface RestEndpoint<
|
|
|
586
599
|
O extends RestGenerics = any,
|
|
587
600
|
> extends RestInstance<
|
|
588
601
|
RestFetch<
|
|
589
|
-
|
|
602
|
+
unknown extends O ? any
|
|
603
|
+
: 'searchParams' extends keyof O ?
|
|
590
604
|
[O['searchParams']] extends [undefined] ?
|
|
591
605
|
PathArgs<O['path']>
|
|
592
606
|
: O['searchParams'] & PathArgs<O['path']>
|
|
593
607
|
: PathArgs<O['path']>,
|
|
594
|
-
OptionsToBodyArgument<
|
|
595
|
-
O,
|
|
596
|
-
'method' extends keyof O ? O['method']
|
|
597
|
-
: O extends { sideEffect: true } ? 'POST'
|
|
598
|
-
: 'GET'
|
|
599
|
-
>,
|
|
608
|
+
OptionsToBodyArgument<O, MethodArgForBodyInference<O>>,
|
|
600
609
|
O['process'] extends {} ? ReturnType<O['process']>
|
|
601
610
|
: any /*Denormalize<O['schema']>*/
|
|
602
611
|
>,
|
|
603
612
|
'schema' extends keyof O ? O['schema'] : undefined,
|
|
604
613
|
'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined>
|
|
605
|
-
: MethodToSide<O
|
|
614
|
+
: MethodToSide<MethodArgForBodyInference<O>>,
|
|
606
615
|
'method' extends keyof O ? O
|
|
607
616
|
: O & {
|
|
608
|
-
method: O
|
|
617
|
+
method: InferRestMethodWhenOmitted<O>;
|
|
609
618
|
}
|
|
610
619
|
> {}
|
|
611
620
|
|
package/src/RestHelpers.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
compile,
|
|
3
|
+
PathFunction,
|
|
4
|
+
parse,
|
|
5
|
+
pathToRegexp,
|
|
6
|
+
Token,
|
|
7
|
+
ParamData,
|
|
8
|
+
} from 'path-to-regexp';
|
|
2
9
|
|
|
3
10
|
import { ShortenPath } from './pathTypes.js';
|
|
4
11
|
|
|
@@ -18,6 +25,14 @@ export function getUrlTokens(path: string): Set<string> {
|
|
|
18
25
|
return urlTokensCache[path];
|
|
19
26
|
}
|
|
20
27
|
|
|
28
|
+
const pathRegexCache: Record<string, RegExp> = Object.create(null);
|
|
29
|
+
export function getPathRegex(path: string): RegExp {
|
|
30
|
+
if (!(path in pathRegexCache)) {
|
|
31
|
+
pathRegexCache[path] = pathToRegexp(path).regexp;
|
|
32
|
+
}
|
|
33
|
+
return pathRegexCache[path];
|
|
34
|
+
}
|
|
35
|
+
|
|
21
36
|
function tokenMap(tokens: Token[]): Set<string> {
|
|
22
37
|
const tokenNames = new Set<string>();
|
|
23
38
|
for (const token of tokens) {
|
|
@@ -313,6 +313,20 @@ describe('RestEndpoint', () => {
|
|
|
313
313
|
() => ep.url({ id: '5', rest: 'docs/file' });
|
|
314
314
|
});
|
|
315
315
|
|
|
316
|
+
it('should handle escaped special characters in path', () => {
|
|
317
|
+
const ep = new RestEndpoint({
|
|
318
|
+
path: '/users/:login/events/public\\?per_page=50',
|
|
319
|
+
});
|
|
320
|
+
expect(ep.url({ login: 'alice' })).toBe(
|
|
321
|
+
'/users/alice/events/public?per_page=50',
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
const ep2 = new RestEndpoint({
|
|
325
|
+
path: '/search\\?q=hello\\&page=2',
|
|
326
|
+
});
|
|
327
|
+
expect(ep2.url()).toBe('/search?q=hello&page=2');
|
|
328
|
+
});
|
|
329
|
+
|
|
316
330
|
it('should allow sideEffect overrides', () => {
|
|
317
331
|
const weirdGetUser = new RestEndpoint({
|
|
318
332
|
path: 'http\\://test.com/user/:id',
|
package/src/pathTypes.ts
CHANGED
|
@@ -18,6 +18,13 @@ export type PathArgs<S extends string> =
|
|
|
18
18
|
unknown
|
|
19
19
|
: KeysToArgs<PathKeys<S>>;
|
|
20
20
|
|
|
21
|
+
/** Like {@link PathArgs} but widened `path: string` collapses to `unknown`,
|
|
22
|
+
* preventing `(params, body) | (body)` union overloads in ParamFetchWithBody. */
|
|
23
|
+
export type SoftPathArgs<P extends string> =
|
|
24
|
+
unknown extends P ? any
|
|
25
|
+
: string extends P ? unknown
|
|
26
|
+
: PathArgs<P>;
|
|
27
|
+
|
|
21
28
|
/** Computes the union of keys for a path string */
|
|
22
29
|
export type PathKeys<S extends string> =
|
|
23
30
|
string extends S ? string
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { EndpointExtraOptions, EndpointInstanceInterface, Schema, FetchFunction, ResolveType } from '@data-client/endpoint';
|
|
2
2
|
import type { ExtractCollection } from './extractCollection.js';
|
|
3
3
|
import { OptionsToBodyArgument, OptionsToFunction } from './OptionsToFunction.js';
|
|
4
|
-
import { PathArgs } from './pathTypes.js';
|
|
4
|
+
import { PathArgs, SoftPathArgs } from './pathTypes.js';
|
|
5
5
|
import { EndpointUpdateFunction } from './RestEndpointTypeHelp.js';
|
|
6
6
|
export interface RestInstanceBase<F extends FetchFunction = FetchFunction, S extends Schema | undefined = any, M extends boolean | undefined = boolean | undefined, O extends {
|
|
7
7
|
path: string;
|
|
@@ -280,6 +280,15 @@ export type MoveEndpoint<F extends FetchFunction = FetchFunction, S extends Sche
|
|
|
280
280
|
}> = RestInstanceBase<RestFetch<PathArgs<Exclude<O['path'], undefined>>, O['body'], ResolveType<F>>, S, true, Omit<O, 'method' | 'searchParams'> & {
|
|
281
281
|
method: 'PATCH';
|
|
282
282
|
}>;
|
|
283
|
+
/** When `method` is omitted from `O`, infer it (must stay aligned with `OptionsToBodyArgument`). */
|
|
284
|
+
type InferRestMethodWhenOmitted<O extends RestGenerics> = O extends {
|
|
285
|
+
sideEffect: true;
|
|
286
|
+
} ? 'POST' : 'body' extends keyof O ? [
|
|
287
|
+
O['body']
|
|
288
|
+
] extends [
|
|
289
|
+
undefined
|
|
290
|
+
] ? 'GET' : 'POST' : 'GET';
|
|
291
|
+
type MethodArgForBodyInference<O extends RestGenerics> = 'method' extends keyof O ? O['method'] : InferRestMethodWhenOmitted<O>;
|
|
283
292
|
type OptionsToAdderBodyArgument<O extends {
|
|
284
293
|
body?: any;
|
|
285
294
|
}> = 'body' extends keyof O ? O['body'] : any;
|
|
@@ -313,27 +322,21 @@ export interface RestEndpointOptions<F extends FetchFunction = FetchFunction, S
|
|
|
313
322
|
url?(...args: Parameters<F>): string;
|
|
314
323
|
update?: EndpointUpdateFunction<F, S>;
|
|
315
324
|
}
|
|
316
|
-
export type RestEndpointConstructorOptions<O extends RestGenerics = any> = RestEndpointOptions<RestFetch<'searchParams' extends keyof O ? [
|
|
325
|
+
export type RestEndpointConstructorOptions<O extends RestGenerics = any> = RestEndpointOptions<RestFetch<unknown extends O ? any : 'searchParams' extends keyof O ? [
|
|
317
326
|
O['searchParams']
|
|
318
327
|
] extends [
|
|
319
328
|
undefined
|
|
320
|
-
] ?
|
|
321
|
-
sideEffect: true;
|
|
322
|
-
} ? 'POST' : 'GET'>, O['process'] extends {} ? ReturnType<O['process']> : any>, O['schema']>;
|
|
329
|
+
] ? SoftPathArgs<O['path']> : O['searchParams'] & SoftPathArgs<O['path']> : SoftPathArgs<O['path']>, OptionsToBodyArgument<O, MethodArgForBodyInference<O>>, O['process'] extends {} ? ReturnType<O['process']> : any>, O['schema']>;
|
|
323
330
|
/** Simplifies endpoint definitions that follow REST patterns
|
|
324
331
|
*
|
|
325
332
|
* @see https://dataclient.io/rest/api/RestEndpoint
|
|
326
333
|
*/
|
|
327
|
-
export interface RestEndpoint<O extends RestGenerics = any> extends RestInstance<RestFetch<'searchParams' extends keyof O ? [
|
|
334
|
+
export interface RestEndpoint<O extends RestGenerics = any> extends RestInstance<RestFetch<unknown extends O ? any : 'searchParams' extends keyof O ? [
|
|
328
335
|
O['searchParams']
|
|
329
336
|
] extends [
|
|
330
337
|
undefined
|
|
331
|
-
] ? PathArgs<O['path']> : O['searchParams'] & PathArgs<O['path']> : PathArgs<O['path']>, OptionsToBodyArgument<O, '
|
|
332
|
-
|
|
333
|
-
} ? 'POST' : 'GET'>, O['process'] extends {} ? ReturnType<O['process']> : any>, 'schema' extends keyof O ? O['schema'] : undefined, 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : MethodToSide<O['method']>, 'method' extends keyof O ? O : O & {
|
|
334
|
-
method: O extends {
|
|
335
|
-
sideEffect: true;
|
|
336
|
-
} ? 'POST' : 'GET';
|
|
338
|
+
] ? PathArgs<O['path']> : O['searchParams'] & PathArgs<O['path']> : PathArgs<O['path']>, OptionsToBodyArgument<O, MethodArgForBodyInference<O>>, O['process'] extends {} ? ReturnType<O['process']> : any>, 'schema' extends keyof O ? O['schema'] : undefined, 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : MethodToSide<MethodArgForBodyInference<O>>, 'method' extends keyof O ? O : O & {
|
|
339
|
+
method: InferRestMethodWhenOmitted<O>;
|
|
337
340
|
}> {
|
|
338
341
|
}
|
|
339
342
|
export interface RestEndpointConstructor {
|
package/ts4.0/RestHelpers.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { PathFunction, ParamData } from 'path-to-regexp';
|
|
|
2
2
|
import { ShortenPath } from './pathTypes.js';
|
|
3
3
|
export declare function getUrlBase(path: string): PathFunction<ParamData>;
|
|
4
4
|
export declare function getUrlTokens(path: string): Set<string>;
|
|
5
|
+
export declare function getPathRegex(path: string): RegExp;
|
|
5
6
|
export declare function isPojo(obj: unknown): obj is Record<string, any>;
|
|
6
7
|
export declare function shortenPath<S extends string>(path: S): ShortenPath<S>;
|
|
7
8
|
//# sourceMappingURL=RestHelpers.d.ts.map
|
package/ts4.0/pathTypes.d.ts
CHANGED
|
@@ -6,6 +6,12 @@ export declare type PathArgs<S extends string> = PathKeys<S> extends never
|
|
|
6
6
|
? unknown
|
|
7
7
|
: KeysToArgs<PathKeys<S>>;
|
|
8
8
|
|
|
9
|
+
/** Like PathArgs but widened `path: string` collapses to `unknown` */
|
|
10
|
+
export declare type SoftPathArgs<P extends string> =
|
|
11
|
+
unknown extends P ? any
|
|
12
|
+
: string extends P ? unknown
|
|
13
|
+
: PathArgs<P>;
|
|
14
|
+
|
|
9
15
|
export declare type KeysToArgs<Key extends string> = {
|
|
10
16
|
[K in Key]?: string | number;
|
|
11
17
|
};
|