@dollhousemcp/mcp-server 2.0.9 → 2.0.10
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/dist/elements/ensembles/Ensemble.d.ts +9 -0
- package/dist/elements/ensembles/Ensemble.d.ts.map +1 -1
- package/dist/elements/ensembles/Ensemble.js +71 -4
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +3 -3
- package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts +57 -0
- package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/IntrospectionResolver.js +181 -2
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +8 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +32 -6
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +120 -8
- package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/SchemaDispatcher.js +11 -1
- package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/types.js +11 -1
- package/dist/index.js +19 -1
- package/dist/server/tools/MCPAQLTools.d.ts.map +1 -1
- package/dist/server/tools/MCPAQLTools.js +7 -1
- package/dist/web/public/app.js +118 -7
- package/dist/web/public/dollhouse-logo.png +0 -0
- package/dist/web/public/index.html +5 -2
- package/dist/web/public/logs.js +56 -1
- package/dist/web/public/metrics.js +32 -1
- package/dist/web/public/setup.css +79 -0
- package/dist/web/public/setup.js +90 -0
- package/dist/web/public/styles.css +3 -1
- package/dist/web/server.d.ts +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +14 -3
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaDispatcher.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/SchemaDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAejD;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyB3E;
|
|
1
|
+
{"version":3,"file":"SchemaDispatcher.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/SchemaDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAejD;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyB3E;AAi0BD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9C;;;;;;;;;OASG;WACU,QAAQ,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,eAAe,EACzB,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC;CAoGpB;AAMD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AAGjD,eAAO,MAAM,QAAQ;;;;CAIpB,CAAC"}
|
|
@@ -533,6 +533,13 @@ function buildArgs(params, schema, mappedParams, input) {
|
|
|
533
533
|
async function handleIntrospection(params) {
|
|
534
534
|
return IntrospectionResolver.resolve(params);
|
|
535
535
|
}
|
|
536
|
+
/**
|
|
537
|
+
* Handle get_capabilities operation (uses IntrospectionResolver directly)
|
|
538
|
+
* @see Issue #1760 - get_capabilities operation
|
|
539
|
+
*/
|
|
540
|
+
async function handleCapabilities(params) {
|
|
541
|
+
return IntrospectionResolver.getCapabilities(params);
|
|
542
|
+
}
|
|
536
543
|
/**
|
|
537
544
|
* Handle build info operation (formats output)
|
|
538
545
|
*/
|
|
@@ -794,6 +801,9 @@ export class SchemaDispatcher {
|
|
|
794
801
|
if (schema.method === '__cacheBudget__') {
|
|
795
802
|
return handleCacheBudgetReport(registry);
|
|
796
803
|
}
|
|
804
|
+
if (schema.method === '__capabilities__') {
|
|
805
|
+
return handleCapabilities(params);
|
|
806
|
+
}
|
|
797
807
|
// Map params according to schema (with input context and param style)
|
|
798
808
|
// For operations with normalizers, the normalized params ARE the mapped params
|
|
799
809
|
// (the normalizer already transforms input to handler-ready format)
|
|
@@ -836,4 +846,4 @@ export const __test__ = {
|
|
|
836
846
|
SAFE_PATH_PATTERN,
|
|
837
847
|
FORBIDDEN_PATHS,
|
|
838
848
|
};
|
|
839
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9tY3AtYXFsL1NjaGVtYURpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQzNCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsaUJBQWlCLEdBS2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELDJFQUEyRTtBQUUzRSwrRUFBK0U7QUFDL0UsbUNBQW1DO0FBQ25DLCtFQUErRTtBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLDZCQUE2QixDQUFDO0FBQ3hELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRTNFOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsR0FBNEIsRUFBRSxJQUFZO0lBQ2hFLG9EQUFvRDtJQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5Qix5Q0FBeUM7SUFDekMsS0FBSyxN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QVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRiwwQkFBMEI7UUFDMUIsdUVBQXVFO1FBQ3ZFLE9BQU8sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQsK0VBQStFO0FBQy9FLFVBQVU7QUFDViwrRUFBK0U7QUFFL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFFakQsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLGVBQWU7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NoZW1hRGlzcGF0Y2hlciAtIEdlbmVyaWMgZGlzcGF0Y2hlciBmb3Igc2NoZW1hLWRyaXZlbiBvcGVyYXRpb25zXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYXV0b21hdGljIGRpc3BhdGNoIGZyb20gb3BlcmF0aW9uIHNjaGVtYXMgdG8gaGFuZGxlciBtZXRob2RzLlxuICogSXQgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgbWFudWFsIHN3aXRjaCBzdGF0ZW1lbnRzIGluIE1DUEFRTEhhbmRsZXIgYnk6XG4gKlxuICogMS4gTG9va2luZyB1cCBvcGVyYXRpb24gaW4gc2NoZW1hXG4gKiAyLiBSZXNvbHZpbmcgaGFuZGxlciBmcm9tIHJlZ2lzdHJ5XG4gKiAzLiBCdWlsZGluZyBtZXRob2QgYXJndW1lbnRzIGZyb20gcGFyYW1zXG4gKiA0LiBDYWxsaW5nIHRoZSBoYW5kbGVyIG1ldGhvZFxuICogNS4gQXBwbHlpbmcgZmllbGQgc2VsZWN0aW9uL3RyYW5zZm9ybWF0aW9uIHRvIHJlc3BvbnNlIChJc3N1ZSAjMjAyKVxuICpcbiAqIEFSQ0hJVEVDVFVSRTpcbiAqIC0gU2NoZW1hRGlzcGF0Y2hlci5kaXNwYXRjaChvcGVyYXRpb24sIHBhcmFtcywgcmVnaXN0cnkpIOKGkiBQcm9taXNlPHVua25vd24+XG4gKiAtIFVzZXMgYXJnQnVpbGRlciB0byBkZXRlcm1pbmUgaG93IHRvIHBhc3MgcGFyYW1ldGVycyB0byBoYW5kbGVyXG4gKiAtIFZhbGlkYXRlcyByZXF1aXJlZCBwYXJhbWV0ZXJzIGJlZm9yZSBkaXNwYXRjaFxuICogLSBQcm92aWRlcyBjbGVhciBlcnJvciBtZXNzYWdlcyBmb3IgbWlzc2luZyBoYW5kbGVycy9tZXRob2RzXG4gKlxuICogSU5QVVQgTk9STUFMSVpBVElPTiAoSXNzdWUgIzI1MSk6XG4gKiAtIFBhcmFtZXRlcnMgY2FuIGhhdmUgbXVsdGlwbGUgc291cmNlcyB2aWEgYHNvdXJjZXNgIGZpZWxkXG4gKiAtIFJlc29sdXRpb24gb3JkZXI6IHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIC4uLiwgcGFyYW1zW2tleV1cbiAqIC0gU3VwcG9ydHMgZG90IG5vdGF0aW9uOiAnaW5wdXQuZWxlbWVudFR5cGUnLCAncGFyYW1zLnR5cGUnXG4gKiAtIE9wZXJhdGlvbnMgd2l0aCBgbmVlZHNGdWxsSW5wdXQ6IHRydWVgIGhhdmUgYWNjZXNzIHRvIGZ1bGwgT3BlcmF0aW9uSW5wdXRcbiAqXG4gKiBGSUVMRCBTRUxFQ1RJT04gKElzc3VlICMyMDIpOlxuICogLSBXaGVuIGBmaWVsZHNgIHBhcmFtIGlzIHByb3ZpZGVkLCBmaWx0ZXJzIHJlc3BvbnNlIHRvIHJlcXVlc3RlZCBmaWVsZHMgb25seVxuICogLSBUcmFuc2Zvcm1zIGZpZWxkIG5hbWVzIGZvciBMTE0gY29uc2lzdGVuY3kgKG5hbWUg4oaSIGVsZW1lbnRfbmFtZSlcbiAqIC0gU3VwcG9ydHMgcHJlc2V0IGZpZWxkIHNldHM6ICdtaW5pbWFsJywgJ3N0YW5kYXJkJywgJ2Z1bGwnXG4gKlxuICogQHNlZSBJc3N1ZSAjMjQ3IC0gU2NoZW1hLWRyaXZlbiBvcGVyYXRpb24gZGVmaW5pdGlvbnNcbiAqIEBzZWUgSXNzdWUgIzI1MSAtIEVsZW1lbnRDUlVEIGlucHV0IG5vcm1hbGl6YXRpb25cbiAqIEBzZWUgSXNzdWUgIzIwMiAtIEdyYXBoUUwgZmllbGQgc2VsZWN0aW9uIGZvciByZXNwb25zZSB0b2tlbiBvcHRpbWl6YXRpb25cbiAqL1xuXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7XG4gIGdldE9wZXJhdGlvblNjaGVtYSxcbiAgaXNTY2hlbWFPcGVyYXRpb24sXG4gIHR5cGUgT3BlcmF0aW9uRGVmLFxuICB0eXBlIFBhcmFtU2NoZW1hLFxuICB0eXBlIFBhcmFtRGVmLFxuICB0eXBlIEhhbmRsZXJLZXksXG59IGZyb20gJy4vT3BlcmF0aW9uU2NoZW1hLmpzJztcbmltcG9ydCB7IEludHJvc3BlY3Rpb25SZXNvbHZlciB9IGZyb20gJy4vSW50cm9zcGVjdGlvblJlc29sdmVyLmpzJztcbmltcG9ydCB7IE5vcm1hbGl6ZXJSZWdpc3RyeSB9IGZyb20gJy4vbm9ybWFsaXplcnMvaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBOb3JtYWxpemVyQ29udGV4dCB9IGZyb20gJy4vbm9ybWFsaXplcnMvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyUmVnaXN0cnkgfSBmcm9tICcuL01DUEFRTEhhbmRsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRpb25JbnB1dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuLy8gTm90ZTogRmllbGQgc2VsZWN0aW9uIGlzIG5vdyBhcHBsaWVkIGF0IE1DUEFRTEhhbmRsZXIgbGV2ZWwgKElzc3VlICMyMDIpXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElucHV0IE5vcm1hbGl6YXRpb24gKElzc3VlICMyNTEpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVmFsaWRhdGUgcHJvcGVydHkgcGF0aCB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb24gYXR0YWNrcy5cbiAqIE9ubHkgYWxsb3dzIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCB1bmRlcnNjb3JlcywgYW5kIGRvdHMuXG4gKi9cbmNvbnN0IFNBRkVfUEFUSF9QQVRURVJOID0gL15bYS16QS1aXyRdW2EtekEtWjAtOV8kLl0qJC87XG5jb25zdCBGT1JCSURERU5fUEFUSFMgPSBuZXcgU2V0KFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddKTtcblxuLyoqXG4gKiBSZXNvbHZlIGEgdmFsdWUgZnJvbSBhIGRvdC1ub3RhdGlvbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEV4YW1wbGU6IGdldE5lc3RlZFZhbHVlKHsgaW5wdXQ6IHsgZWxlbWVudFR5cGU6ICdwZXJzb25hJyB9IH0sICdpbnB1dC5lbGVtZW50VHlwZScpID0+ICdwZXJzb25hJ1xuICpcbiAqIFNlY3VyaXR5OiBWYWxpZGF0ZXMgcGF0aCBmb3JtYXQgYW5kIGJsb2NrcyBwcm90b3R5cGUgcG9sbHV0aW9uIHZlY3RvcnMuXG4gKi9cbmZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICAvLyBWYWxpZGF0ZSBwYXRoIGZvcm1hdCB0byBwcmV2ZW50IGluamVjdGlvbiBhdHRhY2tzXG4gIGlmICghU0FGRV9QQVRIX1BBVFRFUk4udGVzdChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wZXJ0eSBwYXRoIGZvcm1hdDogJHtwYXRofWApO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG5cbiAgLy8gQ2hlY2sgZm9yIHByb3RvdHlwZSBwb2xsdXRpb24gYXR0ZW1wdHNcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgaWYgKEZPUkJJRERFTl9QQVRIUy5oYXMocGFydCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yYmlkZGVuIHByb3BlcnR5IHBhdGggc2VnbWVudDogJHtwYXJ0fWApO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjdXJyZW50OiB1bmtub3duID0gb2JqO1xuXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IChjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtwYXJ0XTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwYXJhbWV0ZXIgdmFsdWUgZnJvbSBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIFRoZSByZXNvbHV0aW9uIG9yZGVyIGlzOlxuICogMS4gQ2hlY2sgZWFjaCBzb3VyY2UgaW4gYHNvdXJjZXNgIGFycmF5IChpZiBkZWZpbmVkKVxuICogMi4gRmFsbCBiYWNrIHRvIHRoZSBkaXJlY3QgcGFyYW1ldGVyIHZhbHVlXG4gKiAzLiBGYWxsIGJhY2sgdG8gZGVmYXVsdCB2YWx1ZSAoaWYgZGVmaW5lZClcbiAqXG4gKiBAcGFyYW0ga2V5IC0gUGFyYW1ldGVyIG5hbWVcbiAqIEBwYXJhbSBkZWYgLSBQYXJhbWV0ZXIgZGVmaW5pdGlvbiB3aXRoIHBvc3NpYmxlIHNvdXJjZXNcbiAqIEBwYXJhbSBjb250ZXh0IC0gUmVzb2x1dGlvbiBjb250ZXh0IGNvbnRhaW5pbmcgaW5wdXQsIHBhcmFtcywgYW5kIHJhdyBwYXJhbXNcbiAqIEByZXR1cm5zIFJlc29sdmVkIHZhbHVlIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiByZXNvbHZlUGFyYW1WYWx1ZShcbiAga2V5OiBzdHJpbmcsXG4gIGRlZjogUGFyYW1EZWYsXG4gIGNvbnRleHQ6IHtcbiAgICBpbnB1dD86IE9wZXJhdGlvbklucHV0O1xuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbik6IHVua25vd24ge1xuICAvLyBJZiBzb3VyY2VzIGFyZSBkZWZpbmVkLCBjaGVjayB0aGVtIGluIG9yZGVyXG4gIGlmIChkZWYuc291cmNlcyAmJiBkZWYuc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgZGVmLnNvdXJjZXMpIHtcbiAgICAgIC8vIEJ1aWxkIHRoZSByZXNvbHV0aW9uIGNvbnRleHQgYXMgYSBmbGF0IG9iamVjdCBmb3IgZ2V0TmVzdGVkVmFsdWVcbiAgICAgIGNvbnN0IHJlc29sdmVDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgcGFyYW1zOiBjb250ZXh0LnBhcmFtcyxcbiAgICAgIH07XG5cbiAgICAgIC8vIEFkZCBpbnB1dCBmaWVsZHMgdG8gdGhlIGNvbnRleHQgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoY29udGV4dC5pbnB1dCkge1xuICAgICAgICByZXNvbHZlQ29udGV4dC5pbnB1dCA9IGNvbnRleHQuaW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0TmVzdGVkVmFsdWUocmVzb2x2ZUNvbnRleHQsIHNvdXJjZSk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGRpcmVjdCBwYXJhbSB2YWx1ZVxuICBjb25zdCBkaXJlY3RWYWx1ZSA9IGNvbnRleHQucGFyYW1zW2tleV07XG4gIGlmIChkaXJlY3RWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRpcmVjdFZhbHVlO1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHRcbiAgcmV0dXJuIGRlZi5kZWZhdWx0O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXJhbWV0ZXIgU3R5bGUgQ29udmVyc2lvbiAoSXNzdWUgIzI1Milcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc25ha2VfY2FzZSBzdHJpbmcgdG8gY2FtZWxDYXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBzbmFrZVRvQ2FtZWwoJ2RyeV9ydW4nKSA9PiAnZHJ5UnVuJ1xuICogc25ha2VUb0NhbWVsKCdtYXhfcmVzdWx0cycpID0+ICdtYXhSZXN1bHRzJ1xuICogc25ha2VUb0NhbWVsKCdhbHJlYWR5X2NhbWVsJykgPT4gJ2FscmVhZHlDYW1lbCdcbiAqL1xuZnVuY3Rpb24gc25ha2VUb0NhbWVsKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgbGV0dGVyKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG59XG5cbi8qKlxuICogQXBwbHkgcGFyYW0gc3R5bGUgY29udmVyc2lvbiB0byBhIGtleSBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHNjaGVtYS5cbiAqIEluZGl2aWR1YWwgYG1hcFRvYCBvdmVycmlkZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgc3R5bGUgY29udmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlQYXJhbVN0eWxlKFxuICBrZXk6IHN0cmluZyxcbiAgZGVmOiBQYXJhbURlZixcbiAgcGFyYW1TdHlsZT86ICdzbmFrZVRvQ2FtZWwnXG4pOiBzdHJpbmcge1xuICAvLyBFeHBsaWNpdCBtYXBUbyB0YWtlcyBwcmVjZWRlbmNlXG4gIGlmIChkZWYubWFwVG8pIHtcbiAgICByZXR1cm4gZGVmLm1hcFRvO1xuICB9XG5cbiAgLy8gQXBwbHkgc3R5bGUgY29udmVyc2lvbiBpZiBzcGVjaWZpZWRcbiAgaWYgKHBhcmFtU3R5bGUgPT09ICdzbmFrZVRvQ2FtZWwnKSB7XG4gICAgcmV0dXJuIHNuYWtlVG9DYW1lbChrZXkpO1xuICB9XG5cbiAgLy8gRGVmYXVsdDogdXNlIG9yaWdpbmFsIGtleVxuICByZXR1cm4ga2V5O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXJhbWV0ZXIgTWFwcGluZ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE1hcCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGhhbmRsZXIgYXJndW1lbnRzIGJhc2VkIG9uIHBhcmFtIHNjaGVtYS5cbiAqIFN1cHBvcnRzIG11bHRpLXNvdXJjZSBwYXJhbWV0ZXIgcmVzb2x1dGlvbiBhbmQgcGFyYW0gc3R5bGUgY29udmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gbWFwUGFyYW1zKFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzY2hlbWE6IFBhcmFtU2NoZW1hLFxuICBpbnB1dD86IE9wZXJhdGlvbklucHV0LFxuICBwYXJhbVN0eWxlPzogJ3NuYWtlVG9DYW1lbCdcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgbWFwcGVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBjb25zdCBjb250ZXh0ID0geyBpbnB1dCwgcGFyYW1zIH07XG5cbiAgZm9yIChjb25zdCBba2V5LCBkZWZdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVQYXJhbVZhbHVlKGtleSwgZGVmLCBjb250ZXh0KTtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBhcHBseVBhcmFtU3R5bGUoa2V5LCBkZWYsIHBhcmFtU3R5bGUpO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1hcHBlZFt0YXJnZXRLZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hcHBlZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBwcmVzZW50LlxuICpcbiAqIFVzZXMgbXVsdGktc291cmNlIHJlc29sdXRpb24gdG8gY2hlY2sgYWxsIHBvc3NpYmxlIHNvdXJjZXMgZm9yIGVhY2hcbiAqIHJlcXVpcmVkIHBhcmFtZXRlci4gUHJvdmlkZXMgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMgc2hvd2luZzpcbiAqIC0gV2hpY2ggcGFyYW1ldGVyIGlzIG1pc3NpbmdcbiAqIC0gV2hpY2ggc291cmNlcyB3ZXJlIGNoZWNrZWQgKGluIG9yZGVyKVxuICogLSBXaGF0IHdhcyBhY3R1YWxseSBwcm92aWRlZCBpbiBwYXJhbXNcbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gKiBAcGFyYW0gc2NoZW1hIC0gUGFyYW1ldGVyIHNjaGVtYSBkZWZpbmluZyByZXF1aXJlbWVudHNcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBPcGVyYXRpb24gbmFtZSBmb3IgZXJyb3IgY29udGV4dFxuICogQHBhcmFtIGlucHV0IC0gT3B0aW9uYWwgZnVsbCBPcGVyYXRpb25JbnB1dCBmb3Igc291cmNlIHJlc29sdXRpb25cbiAqIEB0aHJvd3MgRXJyb3Igd2l0aCBkZWJ1Z2dpbmcgY29udGV4dCBpZiByZXF1aXJlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVpcmVkUGFyYW1zKFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzY2hlbWE6IFBhcmFtU2NoZW1hLFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgaW5wdXQ/OiBPcGVyYXRpb25JbnB1dFxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB7IGlucHV0LCBwYXJhbXMgfTtcblxuICBmb3IgKGNvbnN0IFtrZXksIGRlZl0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgIGlmIChkZWYucmVxdWlyZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZVBhcmFtVmFsdWUoa2V5LCBkZWYsIGNvbnRleHQpO1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQnVpbGQgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZSBmb3IgZGVidWdnaW5nXG4gICAgICAgIGNvbnN0IHNvdXJjZXNDaGVja2VkID0gZGVmLnNvdXJjZXNcbiAgICAgICAgICA/IGBTb3VyY2VzIGNoZWNrZWQgKGluIG9yZGVyKTogWyR7ZGVmLnNvdXJjZXMuam9pbignIOKGkiAnKX1dIOKGkiBwYXJhbXMuJHtrZXl9YFxuICAgICAgICAgIDogYFNvdXJjZTogcGFyYW1zLiR7a2V5fWA7XG5cbiAgICAgICAgY29uc3QgcHJvdmlkZWRQYXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGBQcm92aWRlZCBwYXJhbXM6IHske09iamVjdC5rZXlzKHBhcmFtcykuam9pbignLCAnKX19YFxuICAgICAgICAgIDogJ05vIHBhcmFtcyBwcm92aWRlZCc7XG5cbiAgICAgICAgLy8gSXNzdWUgIzI5MDogQ2hlY2sgYm90aCBzbmFrZV9jYXNlIGFuZCBjYW1lbENhc2UgZm9yIGVsZW1lbnRfdHlwZVxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZVZhbHVlID0gaW5wdXQ/LmVsZW1lbnRfdHlwZSB8fCBpbnB1dD8uZWxlbWVudFR5cGU7XG4gICAgICAgIGNvbnN0IGhhc0VsZW1lbnRUeXBlID0gZWxlbWVudFR5cGVWYWx1ZVxuICAgICAgICAgID8gYGlucHV0LmVsZW1lbnRfdHlwZTogJyR7ZWxlbWVudFR5cGVWYWx1ZX0nYFxuICAgICAgICAgIDogJ2lucHV0LmVsZW1lbnRfdHlwZTogdW5kZWZpbmVkJztcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyICcke2tleX0nIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScuIGAgK1xuICAgICAgICAgIGAke3NvdXJjZXNDaGVja2VkfS4gJHtwcm92aWRlZFBhcmFtc30uICR7aGFzRWxlbWVudFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUeXBlIFZhbGlkYXRpb24gKElzc3VlICMyNTUpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGEgaHVtYW4tcmVhZGFibGUgdHlwZSBkZXNjcmlwdGlvbiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0dWFsVHlwZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ2FycmF5JztcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNpbmdsZSBwYXJhbWV0ZXIgdmFsdWUgYWdhaW5zdCBpdHMgdHlwZSBkZWZpbml0aW9uXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhcmFtZXRlciB2YWx1ZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGRlZiAtIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbiBmcm9tIHNjaGVtYVxuICogQHBhcmFtIGtleSAtIFRoZSBwYXJhbWV0ZXIgbmFtZSAoZm9yIGVycm9yIG1lc3NhZ2VzKVxuICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gbmFtZSAoZm9yIGVycm9yIG1lc3NhZ2VzKVxuICogQHRocm93cyBFcnJvciBpZiB0eXBlIHZhbGlkYXRpb24gZmFpbHNcbiAqXG4gKiBAc2VlIElzc3VlICMyNTUgLSBSdW50aW1lIHR5cGUgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtVHlwZShcbiAgdmFsdWU6IHVua25vd24sXG4gIGRlZjogUGFyYW1EZWYsXG4gIGtleTogc3RyaW5nLFxuICBvcGVyYXRpb246IHN0cmluZ1xuKTogdm9pZCB7XG4gIC8vIFNraXAgdmFsaWRhdGlvbiBmb3IgdW5kZWZpbmVkIHZhbHVlcyAoaGFuZGxlZCBieSByZXF1aXJlZCBjaGVjaylcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICBjb25zdCBhY3R1YWxUeXBlID0gZ2V0QWN0dWFsVHlwZSh2YWx1ZSk7XG5cbiAgc3dpdGNoIChkZWYudHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke2FjdHVhbFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBudW1iZXIsIGdvdCAke2FjdHVhbFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBib29sZWFuLCBnb3QgJHthY3R1YWxUeXBlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUGFyYW1ldGVyICcke2tleX0nIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FjdHVhbFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhcnJheSc6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUGFyYW1ldGVyICcke2tleX0nIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScgbXVzdCBiZSBhbiBhcnJheSwgZ290ICR7YWN0dWFsVHlwZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3N0cmluZ1tdJzpcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQYXJhbWV0ZXIgJyR7a2V5fScgZm9yIG9wZXJhdGlvbiAnJHtvcGVyYXRpb259JyBtdXN0IGJlIGEgc3RyaW5nIGFycmF5LCBnb3QgJHthY3R1YWxUeXBlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFZhbGlkYXRlIGFycmF5IGVsZW1lbnRzIGFyZSBzdHJpbmdzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9WyR7aX1dJyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke2dldEFjdHVhbFR5cGUodmFsdWVbaV0pfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgLy8gQWxsb3cgYW55IHR5cGUgLSBubyB2YWxpZGF0aW9uIG5lZWRlZFxuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbGwgcGFyYW1ldGVyIHR5cGVzIGFnYWluc3Qgc2NoZW1hIGRlZmluaXRpb25zXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gc2NoZW1hIC0gVGhlIHBhcmFtZXRlciBzY2hlbWFcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIG5hbWUgKGZvciBlcnJvciBtZXNzYWdlcylcbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW55IHR5cGUgdmFsaWRhdGlvbiBmYWlsc1xuICpcbiAqIEBzZWUgSXNzdWUgIzI1NSAtIFJ1bnRpbWUgdHlwZSB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1UeXBlcyhcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2NoZW1hOiBQYXJhbVNjaGVtYSxcbiAgb3BlcmF0aW9uOiBzdHJpbmdcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtrZXksIGRlZl0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgdmFsaWRhdGVQYXJhbVR5cGUodmFsdWUsIGRlZiwga2V5LCBvcGVyYXRpb24pO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhhbmRsZXIgUmVzb2x1dGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdC5cbiAqIFVzZWQgZm9yIHNhZmUgcHJvcGVydHkgYWNjZXNzIHdpdGhvdXQgdHlwZSBhc3NlcnRpb25zLlxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgY2FsbGFibGUgbWV0aG9kLlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIG1ldGhvZCBsb29rdXAgd2l0aG91dCB1bnNhZmUgYXNzZXJ0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gT2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSAtIE5hbWUgb2YgbWV0aG9kIHRvIGxvb2sgZm9yXG4gKiBAcmV0dXJucyBUcnVlIGlmIG9iaiBoYXMgYSBmdW5jdGlvbiBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lXG4gKi9cbmZ1bmN0aW9uIGhhc01ldGhvZChcbiAgb2JqOiB1bmtub3duLFxuICBtZXRob2ROYW1lOiBzdHJpbmdcbik6IG9iaiBpcyBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPiB7XG4gIHJldHVybiBpc09iamVjdChvYmopICYmIHR5cGVvZiBvYmpbbWV0aG9kTmFtZV0gPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogR2V0IGhhbmRsZXIgZnJvbSByZWdpc3RyeSB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZy5cbiAqXG4gKiBSZXNvbHZlcyBhIGhhbmRsZXIgYnkga2V5IGZyb20gdGhlIHJlZ2lzdHJ5LCBwcm92aWRpbmcgY2xlYXIgZXJyb3IgbWVzc2FnZXNcbiAqIHdoZW4gaGFuZGxlcnMgYXJlIG1pc3NpbmcuIERpZmZlcmVudGlhdGVzIGJldHdlZW4gcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGhhbmRsZXJzLlxuICpcbiAqIEBwYXJhbSByZWdpc3RyeSAtIEhhbmRsZXIgcmVnaXN0cnkgY29udGFpbmluZyBhbGwgY29uZmlndXJlZCBoYW5kbGVyc1xuICogQHBhcmFtIGhhbmRsZXJLZXkgLSBLZXkgaWRlbnRpZnlpbmcgd2hpY2ggaGFuZGxlciB0byByZXRyaWV2ZVxuICogQHBhcmFtIG9wZXJhdGlvbiAtIE9wZXJhdGlvbiBuYW1lIGZvciBlcnJvciBjb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9uYWwgLSBXaGV0aGVyIHRoZSBoYW5kbGVyIGlzIG9wdGlvbmFsIChhZmZlY3RzIGVycm9yIG1lc3NhZ2luZylcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBoYW5kbGVyXG4gKiBAdGhyb3dzIEVycm9yIGlmIGhhbmRsZXIgaXMgbm90IGNvbmZpZ3VyZWRcbiAqL1xuZnVuY3Rpb24gZ2V0SGFuZGxlcihcbiAgcmVnaXN0cnk6IEhhbmRsZXJSZWdpc3RyeSxcbiAgaGFuZGxlcktleTogSGFuZGxlcktleSxcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIG9wdGlvbmFsOiBib29sZWFuXG4pOiB1bmtub3duIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZ2lzdHJ5W2hhbmRsZXJLZXkgYXMga2V5b2YgSGFuZGxlclJlZ2lzdHJ5XTtcblxuICBpZiAoIWhhbmRsZXIgJiYgIW9wdGlvbmFsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEhhbmRsZXIgJyR7aGFuZGxlcktleX0nIGlzIHJlcXVpcmVkIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScgYnV0IG5vdCBjb25maWd1cmVkLiBgICtcbiAgICAgIGBFbnN1cmUgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgSGFuZGxlclJlZ2lzdHJ5LmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFoYW5kbGVyICYmIG9wdGlvbmFsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7aGFuZGxlcktleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGhhbmRsZXJLZXkuc2xpY2UoMSl9IG9wZXJhdGlvbnMgbm90IGF2YWlsYWJsZTogYCArXG4gICAgICBgJHtoYW5kbGVyS2V5fSBub3QgY29uZmlndXJlZC4gVGhpcyBpcyBhbiBvcHRpb25hbCBoYW5kbGVyIHRoYXQgbWF5IG5vdCBiZSBhdmFpbGFibGUgaW4gYWxsIGNvbmZpZ3VyYXRpb25zLmBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXI7XG59XG5cbi8qKlxuICogR2V0IG1ldGhvZCBmcm9tIGhhbmRsZXIgd2l0aCB0eXBlLXNhZmUgbG9va3VwLlxuICpcbiAqIFVzZXMgdHlwZSBndWFyZHMgaW5zdGVhZCBvZiB1bnNhZmUgdHlwZSBhc3NlcnRpb25zIHRvIHZlcmlmeSB0aGUgaGFuZGxlclxuICogaGFzIHRoZSBleHBlY3RlZCBtZXRob2QuIFByb3ZpZGVzIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzIGZvciBkZWJ1Z2dpbmcuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgLSBIYW5kbGVyIG9iamVjdCB0byBnZXQgbWV0aG9kIGZyb21cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gTmFtZSBvZiB0aGUgbWV0aG9kIHRvIHJldHJpZXZlXG4gKiBAcGFyYW0gaGFuZGxlcktleSAtIEhhbmRsZXIga2V5IGZvciBlcnJvciBjb250ZXh0XG4gKiBAcGFyYW0gb3BlcmF0aW9uIC0gT3BlcmF0aW9uIG5hbWUgZm9yIGVycm9yIGNvbnRleHRcbiAqIEByZXR1cm5zIEJvdW5kIG1ldGhvZCByZWFkeSB0byBjYWxsXG4gKiBAdGhyb3dzIEVycm9yIGlmIG1ldGhvZCBpcyBub3QgZm91bmQgb3IgaXMgbm90IGNhbGxhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldE1ldGhvZChcbiAgaGFuZGxlcjogdW5rbm93bixcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBoYW5kbGVyS2V5OiBzdHJpbmcsXG4gIG9wZXJhdGlvbjogc3RyaW5nXG4pOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgLy8gVXNlIHR5cGUgZ3VhcmQgaW5zdGVhZCBvZiB1bnNhZmUgYXNzZXJ0aW9uXG4gIGlmICghaGFzTWV0aG9kKGhhbmRsZXIsIG1ldGhvZE5hbWUpKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlTWV0aG9kcyA9IGlzT2JqZWN0KGhhbmRsZXIpXG4gICAgICA/IE9iamVjdC5rZXlzKGhhbmRsZXIpLmZpbHRlcihrID0+IHR5cGVvZiBoYW5kbGVyW2tdID09PSAnZnVuY3Rpb24nKVxuICAgICAgOiBbXTtcblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNZXRob2QgJyR7bWV0aG9kTmFtZX0nIG5vdCBmb3VuZCBvbiBoYW5kbGVyICcke2hhbmRsZXJLZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nLiBgICtcbiAgICAgIGBBdmFpbGFibGUgbWV0aG9kczogWyR7YXZhaWxhYmxlTWV0aG9kcy5qb2luKCcsICcpIHx8ICdub25lJ31dYFxuICAgICk7XG4gIH1cblxuICAvLyBOb3cgVHlwZVNjcmlwdCBrbm93cyBoYW5kbGVyW21ldGhvZE5hbWVdIGlzIGEgZnVuY3Rpb25cbiAgY29uc3QgbWV0aG9kID0gaGFuZGxlclttZXRob2ROYW1lXTtcbiAgcmV0dXJuIG1ldGhvZC5iaW5kKGhhbmRsZXIpIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFyZ3VtZW50IEJ1aWxkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUGFyYW1zIHRoYXQgYXJlIGhhbmRsZWQgYXQgdGhlIGRpc3BhdGNoIGxldmVsIGFuZCBzaG91bGQgTk9UIGJlIHBhc3NlZCB0byBoYW5kbGVycy5cbiAqIFRoZXNlIGFyZSBjcm9zcy1jdXR0aW5nIGNvbmNlcm5zIHByb2Nlc3NlZCBieSBTY2hlbWFEaXNwYXRjaGVyIGl0c2VsZi5cbiAqXG4gKiBAc2VlIElzc3VlICMyMDIgLSBmaWVsZHMgaXMgdXNlZCBmb3IgcmVzcG9uc2UgZmlsdGVyaW5nLCBub3QgYnkgaGFuZGxlcnNcbiAqL1xuY29uc3QgRElTUEFUQ0hfT05MWV9QQVJBTVMgPSBuZXcgU2V0KFsnZmllbGRzJ10pO1xuXG4vKipcbiAqIEZpbHRlciBvdXQgZGlzcGF0Y2gtb25seSBwYXJhbXMgZnJvbSBhIHBhcmFtcyBvYmplY3QuXG4gKiBUaGVzZSBwYXJhbXMgYXJlIGhhbmRsZWQgYXQgdGhlIGRpc3BhdGNoIGxldmVsIChlLmcuLCBmaWVsZCBzZWxlY3Rpb24pXG4gKiBhbmQgc2hvdWxkIG5vdCBiZSBwYXNzZWQgdG8gaGFuZGxlcnMuXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckRpc3BhdGNoT25seVBhcmFtcyhcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCBmaWx0ZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgIGlmICghRElTUEFUQ0hfT05MWV9QQVJBTVMuaGFzKGtleSkpIHtcbiAgICAgIGZpbHRlcmVkW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcmVkO1xufVxuXG4vKipcbiAqIEJ1aWxkIGFyZ3VtZW50cyBmb3IgaGFuZGxlciBtZXRob2QgYmFzZWQgb24gYXJnQnVpbGRlciB0eXBlXG4gKlxuICogLSAnc2luZ2xlJzogUGFzcyBwYXJhbXMgaW4gc2NoZW1hIG9yZGVyIGFzIHBvc2l0aW9uYWwgYXJncyAoZGVmYXVsdClcbiAqIC0gJ3NwcmVhZCc6IFBhc3MgcXVlcnkgKyByZW1haW5pbmcgcGFyYW1zXG4gKiAtICduYW1lZCc6IFBhc3MgbWFwcGVkIHBhcmFtcyBhcyBuYW1lZCBvYmplY3RcbiAqIC0gJ25hbWVkV2l0aFR5cGUnOiBMaWtlICduYW1lZCcgYnV0IGVuc3VyZXMgJ3R5cGUnIGlzIGluY2x1ZGVkIGZyb20gcmVzb2x2ZWQgc291cmNlc1xuICogLSAndHlwZVdpdGhQYXJhbXMnOiBQYXNzIHJlc29sdmVkIHR5cGUgKyBmdWxsIHBhcmFtcyBvYmplY3RcbiAqXG4gKiBOb3RlOiBQYXJhbXMgaW4gRElTUEFUQ0hfT05MWV9QQVJBTVMgYXJlIGZpbHRlcmVkIG91dCBiZWZvcmUgcGFzc2luZyB0byBoYW5kbGVycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRBcmdzKFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzY2hlbWE6IE9wZXJhdGlvbkRlZixcbiAgbWFwcGVkUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgaW5wdXQ/OiBPcGVyYXRpb25JbnB1dFxuKTogdW5rbm93bltdIHtcbiAgY29uc3QgYnVpbGRlciA9IHNjaGVtYS5hcmdCdWlsZGVyID8/ICdzaW5nbGUnO1xuXG4gIHN3aXRjaCAoYnVpbGRlcikge1xuICAgIGNhc2UgJ3NwcmVhZCc6XG4gICAgICAvLyBGb3IgaGFuZGxlcnMgdGhhdCB0YWtlIChxdWVyeSwgb3B0aW9ucylcbiAgICAgIHJldHVybiBbcGFyYW1zLnF1ZXJ5LCBmaWx0ZXJEaXNwYXRjaE9ubHlQYXJhbXMocGFyYW1zKV07XG5cbiAgICBjYXNlICduYW1lZCc6IHtcbiAgICAgIC8vIEZvciBoYW5kbGVycyB0aGF0IHRha2UgYSBuYW1lZCBwYXJhbXMgb2JqZWN0XG4gICAgICAvLyBGaWx0ZXIgb3V0IGRpc3BhdGNoLW9ubHkgcGFyYW1zXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlckRpc3BhdGNoT25seVBhcmFtcyhtYXBwZWRQYXJhbXMpO1xuICAgICAgcmV0dXJuIFtmaWx0ZXJlZF07XG4gICAgfVxuXG4gICAgY2FzZSAnbmFtZWRXaXRoVHlwZSc6IHtcbiAgICAgIC8vIExpa2UgJ25hbWVkJyBidXQgZW5zdXJlcyAnZWxlbWVudFR5cGUnIGFuZCAnZWxlbWVudE5hbWUnIGFyZSBhdmFpbGFibGVcbiAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgRWxlbWVudENSVUQgcGF0dGVybiB3aGVyZSB0eXBlIGNvbWVzIGZyb20gaW5wdXQuZWxlbWVudF90eXBlIE9SIHBhcmFtcy5lbGVtZW50X3R5cGVcbiAgICAgIC8vIElzc3VlICMyOTA6IGVsZW1lbnRfbmFtZSBtYXBzIHRvIGVsZW1lbnROYW1lLCBlbGVtZW50X3R5cGUgbWFwcyB0byBlbGVtZW50VHlwZVxuICAgICAgY29uc3QgcmVzdWx0ID0geyAuLi5tYXBwZWRQYXJhbXMgfTtcblxuICAgICAgLy8gSWYgJ2VsZW1lbnRUeXBlJyB3YXNuJ3QgaW4gbWFwcGVkUGFyYW1zIGJ1dCBpcyBhdmFpbGFibGUgZnJvbSBpbnB1dC5lbGVtZW50X3R5cGUgKG9yIGxlZ2FjeSBlbGVtZW50VHlwZSksIGFkZCBpdFxuICAgICAgLy8gSXNzdWUgIzI5MDogUHJlZmVyIHNuYWtlX2Nhc2UgZWxlbWVudF90eXBlLCBmYWxsYmFjayB0byBjYW1lbENhc2UgZWxlbWVudFR5cGUgZm9yIGJhY2t3YXJkIGNvbXBhdFxuICAgICAgaWYgKCFyZXN1bHQuZWxlbWVudFR5cGUgJiYgKGlucHV0Py5lbGVtZW50X3R5cGUgfHwgaW5wdXQ/LmVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXN1bHQuZWxlbWVudFR5cGUgPSBpbnB1dC5lbGVtZW50X3R5cGUgfHwgaW5wdXQuZWxlbWVudFR5cGU7XG4gICAgICB9XG4gICAgICAvLyBTZXQgJ3R5cGUnIGZyb20gJ2VsZW1lbnRUeXBlJyBmb3IgaGFuZGxlcnMgdGhhdCBleHBlY3QgaXRcbiAgICAgIGlmICghcmVzdWx0LnR5cGUgJiYgcmVzdWx0LmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHJlc3VsdC50eXBlID0gcmVzdWx0LmVsZW1lbnRUeXBlO1xuICAgICAgfVxuICAgICAgLy8gU2V0ICduYW1lJyBmcm9tICdlbGVtZW50TmFtZScgZm9yIGhhbmRsZXJzIHRoYXQgZXhwZWN0IGl0IChJc3N1ZSAjMjkwKVxuICAgICAgaWYgKCFyZXN1bHQubmFtZSAmJiByZXN1bHQuZWxlbWVudE5hbWUpIHtcbiAgICAgICAgcmVzdWx0Lm5hbWUgPSByZXN1bHQuZWxlbWVudE5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMyNzg6IEZvciBlbnNlbWJsZXMsIG1lcmdlIHRvcC1sZXZlbCBlbGVtZW50cyBpbnRvIG1ldGFkYXRhXG4gICAgICAvLyBMTE1zIG9mdGVuIHBhc3MgZWxlbWVudHMgYXQgcGFyYW1zIGxldmVsLCBub3QgaW5zaWRlIG1ldGFkYXRhXG4gICAgICAvLyBJc3N1ZSAjMjkwOiBQcmVmZXIgc25ha2VfY2FzZSBlbGVtZW50X3R5cGUsIGZhbGxiYWNrIHRvIGNhbWVsQ2FzZSBlbGVtZW50VHlwZVxuICAgICAgY29uc3QgcmVzb2x2ZWRUeXBlID0gcmVzdWx0LmVsZW1lbnRUeXBlIHx8IHJlc3VsdC50eXBlIHx8IGlucHV0Py5lbGVtZW50X3R5cGUgfHwgaW5wdXQ/LmVsZW1lbnRUeXBlO1xuICAgICAgLy8gQ2hlY2sgZm9yIGVuc2VtYmxlIHR5cGUgKGhhbmRsZXMgYm90aCBwbHVyYWwgY29uc3RhbnQgYW5kIHNpbmd1bGFyIGZvcm0pXG4gICAgICBjb25zdCBpc0Vuc2VtYmxlID0gcmVzb2x2ZWRUeXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSB8fCByZXNvbHZlZFR5cGUgPT09ICdlbnNlbWJsZSc7XG4gICAgICBpZiAoaXNFbnNlbWJsZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHBhcmFtcy5lbGVtZW50cztcbiAgICAgICAgY29uc3QgY3VycmVudE1ldGFkYXRhID0gcmVzdWx0Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgKCFjdXJyZW50TWV0YWRhdGEgfHwgIWN1cnJlbnRNZXRhZGF0YS5lbGVtZW50cykpIHtcbiAgICAgICAgICByZXN1bHQubWV0YWRhdGEgPSB7IC4uLmN1cnJlbnRNZXRhZGF0YSwgZWxlbWVudHMgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJc3N1ZSAjNzIyOiBDb21tb24gZmllbGRzICh0YWdzLCB0cmlnZ2Vycykg4oCUIExMTXMgcGFzcyBhdCBwYXJhbXMgbGV2ZWwgZm9yIGFueSBlbGVtZW50IHR5cGUuXG4gICAgICB7XG4gICAgICAgIGxldCBjdXJyZW50TWV0YSA9IHJlc3VsdC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHVwZGF0ZWRNZXRhID0gY3VycmVudE1ldGE7XG5cbiAgICAgICAgaWYgKHBhcmFtcy50YWdzICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMudGFncykgJiYgKCF1cGRhdGVkTWV0YSB8fCB1cGRhdGVkTWV0YS50YWdzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGEgPSB7IC4uLnVwZGF0ZWRNZXRhLCB0YWdzOiBwYXJhbXMudGFncyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMudHJpZ2dlcnMgIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy50cmlnZ2VycykgJiYgKCF1cGRhdGVkTWV0YSB8fCB1cGRhdGVkTWV0YS50cmlnZ2VycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHVwZGF0ZWRNZXRhID0geyAuLi51cGRhdGVkTWV0YSwgdHJpZ2dlcnM6IHBhcmFtcy50cmlnZ2VycyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZWRNZXRhICE9PSBjdXJyZW50TWV0YSkge1xuICAgICAgICAgIHJlc3VsdC5tZXRhZGF0YSA9IHVwZGF0ZWRNZXRhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFnZW50IFYyIGZpZWxkczogZ29hbCwgYWN0aXZhdGVzLCB0b29scywgc3lzdGVtUHJvbXB0LCBhdXRvbm9teSwgcmVzaWxpZW5jZVxuICAgICAgY29uc3QgaXNBZ2VudCA9IHJlc29sdmVkVHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQgfHwgcmVzb2x2ZWRUeXBlID09PSAnYWdlbnQnO1xuICAgICAgaWYgKGlzQWdlbnQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1ldGFkYXRhID0gcmVzdWx0Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgdXBkYXRlZE1ldGFkYXRhID0gY3VycmVudE1ldGFkYXRhO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZ29hbCAhPT0gdW5kZWZpbmVkICYmICghdXBkYXRlZE1ldGFkYXRhIHx8IHVwZGF0ZWRNZXRhZGF0YS5nb2FsID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIGdvYWw6IHBhcmFtcy5nb2FsIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5hY3RpdmF0ZXMgIT09IHVuZGVmaW5lZCAmJiAoIXVwZGF0ZWRNZXRhZGF0YSB8fCB1cGRhdGVkTWV0YWRhdGEuYWN0aXZhdGVzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIGFjdGl2YXRlczogcGFyYW1zLmFjdGl2YXRlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMudG9vbHMgIT09IHVuZGVmaW5lZCAmJiAoIXVwZGF0ZWRNZXRhZGF0YSB8fCB1cGRhdGVkTWV0YWRhdGEudG9vbHMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB1cGRhdGVkTWV0YWRhdGEgPSB7IC4uLnVwZGF0ZWRNZXRhZGF0YSwgdG9vbHM6IHBhcmFtcy50b29scyB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIElzc3VlICM3MjU6IEFjY2VwdCBib3RoIHN5c3RlbVByb21wdCBhbmQgc3lzdGVtX3Byb21wdCAoTExNcyBjb21tb25seSB1c2Ugc25ha2VfY2FzZSlcbiAgICAgICAgY29uc3Qgc3lzdGVtUHJvbXB0VmFsdWUgPSBwYXJhbXMuc3lzdGVtUHJvbXB0ID8/IHBhcmFtcy5zeXN0ZW1fcHJvbXB0O1xuICAgICAgICBpZiAoc3lzdGVtUHJvbXB0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIXVwZGF0ZWRNZXRhZGF0YSB8fCB1cGRhdGVkTWV0YWRhdGEuc3lzdGVtUHJvbXB0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIHN5c3RlbVByb21wdDogc3lzdGVtUHJvbXB0VmFsdWUgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmF1dG9ub215ICE9PSB1bmRlZmluZWQgJiYgKCF1cGRhdGVkTWV0YWRhdGEgfHwgdXBkYXRlZE1ldGFkYXRhLmF1dG9ub215ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIGF1dG9ub215OiBwYXJhbXMuYXV0b25vbXkgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJc3N1ZSAjNzIyOiByZXNpbGllbmNlIHdhcyBtaXNzaW5nIGZyb20gdGhlIGFnZW50IFYyIG1lcmdlXG4gICAgICAgIGlmIChwYXJhbXMucmVzaWxpZW5jZSAhPT0gdW5kZWZpbmVkICYmICghdXBkYXRlZE1ldGFkYXRhIHx8IHVwZGF0ZWRNZXRhZGF0YS5yZXNpbGllbmNlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIHJlc2lsaWVuY2U6IHBhcmFtcy5yZXNpbGllbmNlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlZE1ldGFkYXRhICE9PSBjdXJyZW50TWV0YWRhdGEpIHtcbiAgICAgICAgICByZXN1bHQubWV0YWRhdGEgPSB1cGRhdGVkTWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSXNzdWUgIzY2NjogTExNcyBvZnRlbiBwYXNzIGdhdGVrZWVwZXIgYXQgdG9wLWxldmVsIHBhcmFtcywgbm90IGluc2lkZSBtZXRhZGF0YS5cbiAgICAgIC8vIE1lcmdlIGl0IGludG8gbWV0YWRhdGEgZm9yIGFsbCBlbGVtZW50IHR5cGVzLlxuICAgICAgaWYgKHBhcmFtcy5nYXRla2VlcGVyICYmIHR5cGVvZiBwYXJhbXMuZ2F0ZWtlZXBlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1ldGEgPSByZXN1bHQubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghY3VycmVudE1ldGEgfHwgIWN1cnJlbnRNZXRhLmdhdGVrZWVwZXIpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbU2NoZW1hRGlzcGF0Y2hlcl0gTWVyZ2luZyB0b3AtbGV2ZWwgZ2F0ZWtlZXBlciBpbnRvIG1ldGFkYXRhIGZvciBlbGVtZW50ICcke3Jlc3VsdC5uYW1lID8/ICd1bmtub3duJ30nYCk7XG4gICAgICAgICAgcmVzdWx0Lm1ldGFkYXRhID0geyAuLi5jdXJyZW50TWV0YSwgZ2F0ZWtlZXBlcjogcGFyYW1zLmdhdGVrZWVwZXIgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgb3V0IGRpc3BhdGNoLW9ubHkgcGFyYW1zIGJlZm9yZSByZXR1cm5pbmdcbiAgICAgIHJldHVybiBbZmlsdGVyRGlzcGF0Y2hPbmx5UGFyYW1zKHJlc3VsdCldO1xuICAgIH1cblxuICAgIGNhc2UgJ3R5cGVXaXRoUGFyYW1zJzoge1xuICAgICAgLy8gUGFzcyByZXNvbHZlZCB0eXBlICsgZnVsbCBwYXJhbXMgb2JqZWN0IChtaW51cyBkaXNwYXRjaC1vbmx5IHBhcmFtcylcbiAgICAgIC8vIFVzZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBsaXN0X2VsZW1lbnRzIHRoYXQgbmVlZCAodHlwZSwgcGFnaW5hdGlvblBhcmFtcylcbiAgICAgIC8vIElzc3VlICMyOTA6IGVsZW1lbnRfdHlwZSBtYXBzIHRvIGVsZW1lbnRUeXBlLCB3aXRoIGJhY2t3YXJkIGNvbXBhdCBmb3IgdHlwZVxuICAgICAgLy8gUHJlZmVyIHNuYWtlX2Nhc2UgZWxlbWVudF90eXBlLCBmYWxsYmFjayB0byBjYW1lbENhc2UgZWxlbWVudFR5cGVcbiAgICAgIGNvbnN0IHJlc29sdmVkVHlwZSA9IG1hcHBlZFBhcmFtcy5lbGVtZW50VHlwZSA/PyBtYXBwZWRQYXJhbXMudHlwZSA/PyBpbnB1dD8uZWxlbWVudF90eXBlID8/IGlucHV0Py5lbGVtZW50VHlwZTtcbiAgICAgIHJldHVybiBbcmVzb2x2ZWRUeXBlLCBmaWx0ZXJEaXNwYXRjaE9ubHlQYXJhbXMocGFyYW1zKV07XG4gICAgfVxuXG4gICAgY2FzZSAnc2luZ2xlJzpcbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBFeHRyYWN0IHBhcmFtcyBpbiBzY2hlbWEgb3JkZXIsIHVzaW5nIHJlc29sdmVkIHZhbHVlc1xuICAgICAgaWYgKCFzY2hlbWEucGFyYW1zIHx8IE9iamVjdC5rZXlzKHNjaGVtYS5wYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBzaW1wbGUgaGFuZGxlcnMsIHBhc3MgcmVzb2x2ZWQgcGFyYW1zIGluIHNjaGVtYSBvcmRlclxuICAgICAgLy8gU2tpcCBkaXNwYXRjaC1vbmx5IHBhcmFtcyAobGlrZSAnZmllbGRzJykgdGhhdCBhcmUgaGFuZGxlZCBieSBTY2hlbWFEaXNwYXRjaGVyXG4gICAgICBjb25zdCBhcmdzOiB1bmtub3duW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYS5wYXJhbXMpKSB7XG4gICAgICAgIC8vIFNraXAgZGlzcGF0Y2gtbGV2ZWwgcGFyYW1zIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCB0byBoYW5kbGVyc1xuICAgICAgICBpZiAoRElTUEFUQ0hfT05MWV9QQVJBTVMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2UgbWFwcGVkIHZhbHVlIGlmIGF2YWlsYWJsZSAoaGFuZGxlcyBzb3VyY2UgcmVzb2x1dGlvbilcbiAgICAgICAgY29uc3QgdGFyZ2V0S2V5ID0gc2NoZW1hLnBhcmFtc1trZXldLm1hcFRvID8/IGtleTtcbiAgICAgICAgYXJncy5wdXNoKG1hcHBlZFBhcmFtc1t0YXJnZXRLZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTcGVjaWFsIE9wZXJhdGlvbiBIYW5kbGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEhhbmRsZSBpbnRyb3NwZWN0aW9uIG9wZXJhdGlvbiAodXNlcyBJbnRyb3NwZWN0aW9uUmVzb2x2ZXIgZGlyZWN0bHkpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUludHJvc3BlY3Rpb24oXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gSW50cm9zcGVjdGlvblJlc29sdmVyLnJlc29sdmUocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgYnVpbGQgaW5mbyBvcGVyYXRpb24gKGZvcm1hdHMgb3V0cHV0KVxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVCdWlsZEluZm8oXG4gIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnlcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBzZXJ2aWNlID0gcmVnaXN0cnkuYnVpbGRJbmZvU2VydmljZTtcbiAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCdWlsZEluZm8gb3BlcmF0aW9ucyBub3QgYXZhaWxhYmxlOiBCdWlsZEluZm9TZXJ2aWNlIG5vdCBjb25maWd1cmVkJyk7XG4gIH1cblxuICBjb25zdCBpbmZvID0gYXdhaXQgc2VydmljZS5nZXRCdWlsZEluZm8oKTtcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBbe1xuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgdGV4dDogc2VydmljZS5mb3JtYXRCdWlsZEluZm8oaW5mbyksXG4gICAgfV0sXG4gIH07XG59XG5cbi8qKlxuICogSGFuZGxlIGNhY2hlIGJ1ZGdldCByZXBvcnQgb3BlcmF0aW9uIChmb3JtYXRzIG91dHB1dCBhcyBtYXJrZG93biB0YWJsZSlcbiAqL1xuZnVuY3Rpb24gaGFuZGxlQ2FjaGVCdWRnZXRSZXBvcnQoXG4gIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnlcbik6IHVua25vd24ge1xuICBjb25zdCBidWRnZXQgPSByZWdpc3RyeS5jYWNoZU1lbW9yeUJ1ZGdldDtcbiAgaWYgKCFidWRnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhY2hlIGJ1ZGdldCBub3QgYXZhaWxhYmxlOiBDYWNoZU1lbW9yeUJ1ZGdldCBub3QgY29uZmlndXJlZCcpO1xuICB9XG5cbiAgY29uc3QgcmVwb3J0ID0gYnVkZ2V0LmdldFJlcG9ydCgpO1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJyMgQ2FjaGUgTWVtb3J5IEJ1ZGdldCBSZXBvcnQnLFxuICAgICcnLFxuICAgIGAqKkJ1ZGdldDoqKiAke3JlcG9ydC5idWRnZXRNQn0gTUJgLFxuICAgIGAqKlVzZWQ6KiogJHtyZXBvcnQudG90YWxNZW1vcnlNQn0gTUIgKCR7cmVwb3J0LnV0aWxpemF0aW9uUGVyY2VudH0lKWAsXG4gICAgYCoqUmVnaXN0ZXJlZCBDYWNoZXM6KiogJHtyZXBvcnQuY2FjaGVzLmxlbmd0aH1gLFxuICAgICcnLFxuICBdO1xuICBpZiAocmVwb3J0LmNhY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgbGluZXMucHVzaCgnfCBDYWNoZSB8IEVudHJpZXMgfCBNZW1vcnkgKE1CKSB8IEhpdCBSYXRlIHwgTGFzdCBBY3Rpdml0eSB8Jyk7XG4gICAgbGluZXMucHVzaCgnfC0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18Jyk7XG4gICAgZm9yIChjb25zdCBjIG9mIHJlcG9ydC5jYWNoZXMpIHtcbiAgICAgIGNvbnN0IGFjdGl2aXR5ID0gYy5sYXN0QWN0aXZpdHlNcyA+IDBcbiAgICAgICAgPyBgJHsoKERhdGUubm93KCkgLSBjLmxhc3RBY3Rpdml0eU1zKSAvIDEwMDApLnRvRml4ZWQoMCl9cyBhZ29gXG4gICAgICAgIDogJ25ldmVyJztcbiAgICAgIGxpbmVzLnB1c2goYHwgJHtjLm5hbWV9IHwgJHtjLmVudHJpZXN9IHwgJHtjLm1lbW9yeU1CfSB8ICR7KGMuaGl0UmF0ZSAqIDEwMCkudG9GaXhlZCgxKX0lIHwgJHthY3Rpdml0eX0gfGApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKCdfTm8gY2FjaGVzIHJlZ2lzdGVyZWQuXycpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29udGVudDogW3tcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHRleHQ6IGxpbmVzLmpvaW4oJ1xcbicpLFxuICAgIH1dLFxuICB9O1xufVxuXG4vKipcbiAqIEV4cG9ydFBhY2thZ2UgaW50ZXJmYWNlIGZvciBlbGVtZW50IGV4cG9ydC5cbiAqIE1hdGNoZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBieSBpbXBvcnQgb3BlcmF0aW9ucy5cbiAqL1xuaW50ZXJmYWNlIEV4cG9ydFBhY2thZ2Uge1xuICBleHBvcnRWZXJzaW9uOiBzdHJpbmc7XG4gIGV4cG9ydGVkQXQ6IHN0cmluZztcbiAgZWxlbWVudFR5cGU6IHN0cmluZztcbiAgZWxlbWVudE5hbWU6IHN0cmluZztcbiAgZm9ybWF0OiAnanNvbicgfCAneWFtbCc7XG4gIGRhdGE6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kbGUgZWxlbWVudCBleHBvcnQgb3BlcmF0aW9uLlxuICogUmV0dXJucyBhbiBFeHBvcnRQYWNrYWdlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGltcG9ydCBvcGVyYXRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVFeHBvcnRFbGVtZW50KFxuICBtYXBwZWRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICByZWdpc3RyeTogSGFuZGxlclJlZ2lzdHJ5XG4pOiBQcm9taXNlPEV4cG9ydFBhY2thZ2U+IHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZ2lzdHJ5LmVsZW1lbnRDUlVEO1xuICBpZiAoIWhhbmRsZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnRDUlVEIG9wZXJhdGlvbnMgbm90IGF2YWlsYWJsZTogaGFuZGxlciBub3QgY29uZmlndXJlZCcpO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBleHBvcnRhYmxlIGRhdGEgZnJvbSB0aGUgZWxlbWVudFxuICAvLyBJc3N1ZSAjMjkwOiBVc2UgbWFwcGVkIG5hbWVzIChlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpIGZyb20gc2NoZW1hIG1hcFRvXG4gIGNvbnN0IG5hbWUgPSBtYXBwZWRQYXJhbXMuZWxlbWVudE5hbWUgYXMgc3RyaW5nO1xuICBjb25zdCB0eXBlID0gbWFwcGVkUGFyYW1zLmVsZW1lbnRUeXBlIGFzIHN0cmluZztcbiAgY29uc3QgZm9ybWF0ID0gKG1hcHBlZFBhcmFtcy5mb3JtYXQgYXMgJ2pzb24nIHwgJ3lhbWwnKSB8fCAnanNvbic7XG5cbiAgLy8gVXNlIHRoZSBlbGVtZW50IHF1ZXJ5IHNlcnZpY2UgdG8gZ2V0IGVsZW1lbnQgZGV0YWlsc1xuICBjb25zdCBlbGVtZW50RGV0YWlscyA9IGF3YWl0IGhhbmRsZXIuZ2V0RWxlbWVudERldGFpbHMobmFtZSwgdHlwZSk7XG4gIGlmICghZWxlbWVudERldGFpbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVsZW1lbnQgbm90IGZvdW5kOiAke3R5cGV9LyR7bmFtZX1gKTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGV4cG9ydCBwYWNrYWdlIChtYXRjaGVzIE1DUEFRTEhhbmRsZXIuaGFuZGxlRXhwb3J0RWxlbWVudCBmb3JtYXQpXG4gIGNvbnN0IGV4cG9ydFBhY2thZ2U6IEV4cG9ydFBhY2thZ2UgPSB7XG4gICAgZXhwb3J0VmVyc2lvbjogJzEuMCcsXG4gICAgZXhwb3J0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGVsZW1lbnRUeXBlOiB0eXBlLFxuICAgIGVsZW1lbnROYW1lOiBuYW1lLFxuICAgIGZvcm1hdCxcbiAgICBkYXRhOiAnJyxcbiAgfTtcblxuICAvLyBTZXJpYWxpemUgdG8gcmVxdWVzdGVkIGZvcm1hdFxuICBpZiAoZm9ybWF0ID09PSAneWFtbCcpIHtcbiAgICBleHBvcnRQYWNrYWdlLmRhdGEgPSB5YW1sLmR1bXAoZWxlbWVudERldGFpbHMsIHtcbiAgICAgIGluZGVudDogMixcbiAgICAgIGxpbmVXaWR0aDogMTIwLFxuICAgICAgbm9SZWZzOiB0cnVlLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydFBhY2thZ2UuZGF0YSA9IEpTT04uc3RyaW5naWZ5KGVsZW1lbnREZXRhaWxzLCBudWxsLCAyKTtcbiAgfVxuXG4gIHJldHVybiBleHBvcnRQYWNrYWdlO1xufVxuXG4vKipcbiAqIEhhbmRsZSBlbGVtZW50IGltcG9ydCBvcGVyYXRpb24uXG4gKiBQYXJzZXMgZXhwb3J0IHBhY2thZ2UgYW5kIGRlbGVnYXRlcyB0byBFbGVtZW50Q1JVRC5cbiAqXG4gKiBTdXBwb3J0cyB0d28gZXhwb3J0IHBhY2thZ2UgZm9ybWF0czpcbiAqIDEuIE1DUEFRTEhhbmRsZXIgZm9ybWF0OiB7IGV4cG9ydFZlcnNpb24sIGVsZW1lbnRUeXBlLCBlbGVtZW50TmFtZSwgZm9ybWF0LCBkYXRhIH1cbiAqIDIuIExlZ2FjeSBmb3JtYXQ6IHsgdmVyc2lvbiwgZWxlbWVudDogeyB0eXBlLCBuYW1lLCAuLi4gfSB9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUltcG9ydEVsZW1lbnQoXG4gIG1hcHBlZFBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnlcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBoYW5kbGVyID0gcmVnaXN0cnkuZWxlbWVudENSVUQ7XG4gIGlmICghaGFuZGxlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignRWxlbWVudENSVUQgb3BlcmF0aW9ucyBub3QgYXZhaWxhYmxlOiBoYW5kbGVyIG5vdCBjb25maWd1cmVkJyk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gbWFwcGVkUGFyYW1zLmRhdGE7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG1hcHBlZFBhcmFtcy5vdmVyd3JpdGUgYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvLyBQYXJzZSB0aGUgZXhwb3J0IHBhY2thZ2UgKGFjY2VwdCBzdHJpbmcgb3IgYWxyZWFkeS1wYXJzZWQgb2JqZWN0KVxuICBsZXQgZXhwb3J0UGFja2FnZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgZXhwb3J0UGFja2FnZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXhwb3J0IHBhY2thZ2U6IG5vdCB2YWxpZCBKU09OJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsKSB7XG4gICAgZXhwb3J0UGFja2FnZSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cG9ydCBwYWNrYWdlOiBkYXRhIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgZWxlbWVudCBkZXRhaWxzIGJhc2VkIG9uIHBhY2thZ2UgZm9ybWF0XG4gIGxldCBlbGVtZW50VHlwZTogc3RyaW5nO1xuICBsZXQgZWxlbWVudE5hbWU6IHN0cmluZztcbiAgbGV0IGVsZW1lbnREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAoZXhwb3J0UGFja2FnZS5lbGVtZW50VHlwZSAmJiBleHBvcnRQYWNrYWdlLmRhdGEpIHtcbiAgICAvLyBNQ1BBUUxIYW5kbGVyIGZvcm1hdDogeyBleHBvcnRWZXJzaW9uLCBlbGVtZW50VHlwZSwgZWxlbWVudE5hbWUsIGZvcm1hdCwgZGF0YSB9XG4gICAgZWxlbWVudFR5cGUgPSBleHBvcnRQYWNrYWdlLmVsZW1lbnRUeXBlIGFzIHN0cmluZztcbiAgICBlbGVtZW50TmFtZSA9IGV4cG9ydFBhY2thZ2UuZWxlbWVudE5hbWUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGZvcm1hdCA9IGV4cG9ydFBhY2thZ2UuZm9ybWF0IGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8vIFBhcnNlIHRoZSBuZXN0ZWQgZGF0YSBmaWVsZCBiYXNlZCBvbiBmb3JtYXRcbiAgICBjb25zdCBuZXN0ZWREYXRhID0gZXhwb3J0UGFja2FnZS5kYXRhO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkRGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09ICd5YW1sJykge1xuICAgICAgICAgIC8vIFVzZSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlUmF3WWFtbCBmb3Igc2FmZSBZQU1MIHBhcnNpbmcgKENPUkVfU0NIRU1BLCBzaXplIGxpbWl0cylcbiAgICAgICAgICBlbGVtZW50RGF0YSA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKG5lc3RlZERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnREYXRhID0gSlNPTi5wYXJzZShuZXN0ZWREYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBleHBvcnQgcGFja2FnZTogZGF0YSBmaWVsZCBpcyBub3QgdmFsaWQgJHtmb3JtYXQgfHwgJ0pTT04nfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5lc3RlZERhdGEgPT09ICdvYmplY3QnICYmIG5lc3RlZERhdGEgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnREYXRhID0gbmVzdGVkRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cG9ydCBwYWNrYWdlOiBkYXRhIGZpZWxkIG11c3QgYmUgc3RyaW5nIG9yIG9iamVjdCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBvcnRQYWNrYWdlLmVsZW1lbnQpIHtcbiAgICAvLyBMZWdhY3kgZm9ybWF0OiB7IHZlcnNpb24sIGVsZW1lbnQ6IHsgdHlwZSwgbmFtZSwgLi4uIH0gfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBleHBvcnRQYWNrYWdlLmVsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZWxlbWVudFR5cGUgPSBlbGVtZW50LnR5cGUgYXMgc3RyaW5nO1xuICAgIGVsZW1lbnROYW1lID0gZWxlbWVudC5uYW1lIGFzIHN0cmluZztcbiAgICBlbGVtZW50RGF0YSA9IGVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cG9ydCBwYWNrYWdlOiBtaXNzaW5nIGVsZW1lbnQgZGF0YScpO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgZWxlbWVudCBhbHJlYWR5IGV4aXN0cyB3aGVuIG92ZXJ3cml0ZSBpcyBmYWxzZVxuICBpZiAoIW92ZXJ3cml0ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IGhhbmRsZXIuZ2V0RWxlbWVudERldGFpbHMoZWxlbWVudE5hbWUsIGVsZW1lbnRUeXBlKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVsZW1lbnQgJyR7ZWxlbWVudE5hbWV9JyBhbHJlYWR5IGV4aXN0cy4gVXNlIG92ZXJ3cml0ZTogdHJ1ZSB0byByZXBsYWNlLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBFbGVtZW50IGRvZXNuJ3QgZXhpc3QsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudFxuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEVycm9yKSB8fCAhZS5tZXNzYWdlLmluY2x1ZGVzKCdub3QgZm91bmQnKSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgZWxlbWVudFxuICByZXR1cm4gaGFuZGxlci5jcmVhdGVFbGVtZW50KHtcbiAgICBuYW1lOiAoZWxlbWVudERhdGEubmFtZSBhcyBzdHJpbmcpIHx8IGVsZW1lbnROYW1lLFxuICAgIHR5cGU6IGVsZW1lbnRUeXBlLFxuICAgIGRlc2NyaXB0aW9uOiAoZWxlbWVudERhdGEuZGVzY3JpcHRpb24gYXMgc3RyaW5nKSB8fCAnJyxcbiAgICBjb250ZW50OiBlbGVtZW50RGF0YS5jb250ZW50IGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBpbnN0cnVjdGlvbnM6IGVsZW1lbnREYXRhLmluc3RydWN0aW9ucyBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgbWV0YWRhdGE6IGVsZW1lbnREYXRhLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICB9KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWFpbiBEaXNwYXRjaGVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2NoZW1hRGlzcGF0Y2hlciAtIERpc3BhdGNoIG9wZXJhdGlvbnMgdXNpbmcgc2NoZW1hIGRlZmluaXRpb25zXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgY29yZSBkaXNwYXRjaCBsb2dpYyBmb3Igc2NoZW1hLWRyaXZlbiBvcGVyYXRpb25zLlxuICogSXQgcmVwbGFjZXMgdGhlIG1hbnVhbCBkaXNwYXRjaCBtZXRob2RzIGluIE1DUEFRTEhhbmRsZXIgZm9yIG9wZXJhdGlvbnNcbiAqIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYURpc3BhdGNoZXIge1xuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb3BlcmF0aW9uIGNhbiBiZSBoYW5kbGVkIGJ5IHNjaGVtYSBkaXNwYXRjaFxuICAgKi9cbiAgc3RhdGljIGNhbkRpc3BhdGNoKG9wZXJhdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzU2NoZW1hT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYW4gb3BlcmF0aW9uIHVzaW5nIGl0cyBzY2hlbWEgZGVmaW5pdGlvblxuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gT3BlcmF0aW9uIG5hbWUgKGUuZy4sICdicm93c2VfY29sbGVjdGlvbicpXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBPcGVyYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcmVnaXN0cnkgLSBIYW5kbGVyIHJlZ2lzdHJ5IHdpdGggYWxsIGNvbmZpZ3VyZWQgaGFuZGxlcnNcbiAgICogQHBhcmFtIGlucHV0IC0gT3B0aW9uYWwgZnVsbCBPcGVyYXRpb25JbnB1dCBmb3Igc291cmNlIHJlc29sdXRpb25cbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gb3BlcmF0aW9uIHJlc3VsdFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG9wZXJhdGlvbiBub3QgZm91bmQsIGhhbmRsZXIgbWlzc2luZywgb3IgcGFyYW1zIGludmFsaWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkaXNwYXRjaChcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnksXG4gICAgaW5wdXQ/OiBPcGVyYXRpb25JbnB1dFxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAvLyBHZXQgc2NoZW1hIGRlZmluaXRpb25cbiAgICBjb25zdCBzY2hlbWEgPSBnZXRPcGVyYXRpb25TY2hlbWEob3BlcmF0aW9uKTtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzY2hlbWEgZGVmaW5pdGlvbiBmb3VuZCBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nYCk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgbm9ybWFsaXplciBpZiBzY2hlbWEgc3BlY2lmaWVzIG9uZSAoSXNzdWUgIzI0MylcbiAgICAvLyBOb3JtYWxpemVycyB0cmFuc2Zvcm0gcmF3IGlucHV0IHBhcmFtcyBiZWZvcmUgdmFsaWRhdGlvbiBhbmQgZGlzcGF0Y2hcbiAgICBpZiAoc2NoZW1hLm5vcm1hbGl6ZXIpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZXIgPSBOb3JtYWxpemVyUmVnaXN0cnkuZ2V0KHNjaGVtYS5ub3JtYWxpemVyKTtcbiAgICAgIGlmICghbm9ybWFsaXplcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE5vcm1hbGl6ZXIgJyR7c2NoZW1hLm5vcm1hbGl6ZXJ9JyBub3QgZm91bmQgZm9yIG9wZXJhdGlvbiAnJHtvcGVyYXRpb259Jy4gYCArXG4gICAgICAgICAgYFJlZ2lzdGVyZWQgbm9ybWFsaXplcnM6IFske05vcm1hbGl6ZXJSZWdpc3RyeS5saXN0KCkuam9pbignLCAnKSB8fCAnbm9uZSd9XWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgbm9ybWFsaXplciBjb250ZXh0IGZvciBkZWJ1Z2dpbmcgYW5kIGZ1dHVyZSBleHRlbnNpYmlsaXR5XG4gICAgICBjb25zdCBub3JtYWxpemVyQ29udGV4dDogTm9ybWFsaXplckNvbnRleHQgPSB7XG4gICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgZW5kcG9pbnQ6IHNjaGVtYS5lbmRwb2ludCxcbiAgICAgICAgaGFuZGxlcjogc2NoZW1hLmhhbmRsZXIsXG4gICAgICAgIG1ldGhvZDogc2NoZW1hLm1ldGhvZCxcbiAgICAgICAgZWxlbWVudFR5cGU6IGlucHV0Py5lbGVtZW50VHlwZSxcbiAgICAgIH07XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBwYXJhbXMgLSB0aGlzIG1heSB0cmFuc2Zvcm0sIHZhbGlkYXRlLCBvciBlbnJpY2ggcGFyYW1ldGVyc1xuICAgICAgY29uc3QgcmVzdWx0ID0gbm9ybWFsaXplci5ub3JtYWxpemUocGFyYW1zLCBub3JtYWxpemVyQ29udGV4dCk7XG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2Ugbm9ybWFsaXplZCBwYXJhbXMgZm9yIHRoZSByZXN0IG9mIGRpc3BhdGNoXG4gICAgICBwYXJhbXMgPSByZXN1bHQucGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSBpZiB3ZSBuZWVkIGZ1bGwgaW5wdXQgY29udGV4dCBmb3Igc291cmNlIHJlc29sdXRpb25cbiAgICBjb25zdCBuZWVkc0lucHV0ID0gc2NoZW1hLm5lZWRzRnVsbElucHV0ICYmIGlucHV0O1xuXG4gICAgLy8gSGFuZGxlIHNwZWNpYWwgb3BlcmF0aW9uc1xuICAgIGlmIChzY2hlbWEubWV0aG9kID09PSAnX19pbnRyb3NwZWN0X18nKSB7XG4gICAgICByZXR1cm4gaGFuZGxlSW50cm9zcGVjdGlvbihwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEubWV0aG9kID09PSAnX19idWlsZEluZm9fXycpIHtcbiAgICAgIHJldHVybiBoYW5kbGVCdWlsZEluZm8ocmVnaXN0cnkpO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEubWV0aG9kID09PSAnX19jYWNoZUJ1ZGdldF9fJykge1xuICAgICAgcmV0dXJuIGhhbmRsZUNhY2hlQnVkZ2V0UmVwb3J0KHJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICAvLyBNYXAgcGFyYW1zIGFjY29yZGluZyB0byBzY2hlbWEgKHdpdGggaW5wdXQgY29udGV4dCBhbmQgcGFyYW0gc3R5bGUpXG4gICAgLy8gRm9yIG9wZXJhdGlvbnMgd2l0aCBub3JtYWxpemVycywgdGhlIG5vcm1hbGl6ZWQgcGFyYW1zIEFSRSB0aGUgbWFwcGVkIHBhcmFtc1xuICAgIC8vICh0aGUgbm9ybWFsaXplciBhbHJlYWR5IHRyYW5zZm9ybXMgaW5wdXQgdG8gaGFuZGxlci1yZWFkeSBmb3JtYXQpXG4gICAgY29uc3QgbWFwcGVkUGFyYW1zID0gc2NoZW1hLm5vcm1hbGl6ZXJcbiAgICAgID8gcGFyYW1zICAvLyBOb3JtYWxpemVyIGFscmVhZHkgcHJvZHVjZWQgdGhlIGNvcnJlY3Qgb3V0cHV0IGZvcm1hdFxuICAgICAgOiBzY2hlbWEucGFyYW1zXG4gICAgICAgID8gbWFwUGFyYW1zKHBhcmFtcywgc2NoZW1hLnBhcmFtcywgbmVlZHNJbnB1dCA/IGlucHV0IDogdW5kZWZpbmVkLCBzY2hlbWEucGFyYW1TdHlsZSlcbiAgICAgICAgOiB7fTtcblxuICAgIC8vIFZhbGlkYXRlIHBhcmFtczogcmVxdWlyZWQgcGFyYW1zIGZpcnN0LCB0aGVuIHR5cGUgdmFsaWRhdGlvbiAoSXNzdWUgIzI1NSlcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gZm9yIG5vcm1hbGl6ZWQgb3BlcmF0aW9ucyAobm9ybWFsaXplciBoYW5kbGVzIHZhbGlkYXRpb24pXG4gICAgaWYgKHNjaGVtYS5wYXJhbXMgJiYgIXNjaGVtYS5ub3JtYWxpemVyKSB7XG4gICAgICB2YWxpZGF0ZVJlcXVpcmVkUGFyYW1zKHBhcmFtcywgc2NoZW1hLnBhcmFtcywgb3BlcmF0aW9uLCBuZWVkc0lucHV0ID8gaW5wdXQgOiB1bmRlZmluZWQpO1xuICAgICAgdmFsaWRhdGVQYXJhbVR5cGVzKHBhcmFtcywgc2NoZW1hLnBhcmFtcywgb3BlcmF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc3BlY2lhbCBFbGVtZW50Q1JVRCBvcGVyYXRpb25zXG4gICAgaWYgKHNjaGVtYS5tZXRob2QgPT09ICdfX2V4cG9ydF9fJykge1xuICAgICAgcmV0dXJuIGhhbmRsZUV4cG9ydEVsZW1lbnQobWFwcGVkUGFyYW1zLCByZWdpc3RyeSk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5tZXRob2QgPT09ICdfX2ltcG9ydF9fJykge1xuICAgICAgcmV0dXJuIGhhbmRsZUltcG9ydEVsZW1lbnQobWFwcGVkUGFyYW1zLCByZWdpc3RyeSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGhhbmRsZXIgZnJvbSByZWdpc3RyeVxuICAgIGNvbnN0IGhhbmRsZXIgPSBnZXRIYW5kbGVyKFxuICAgICAgcmVnaXN0cnksXG4gICAgICBzY2hlbWEuaGFuZGxlcixcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIHNjaGVtYS5vcHRpb25hbCA/PyBmYWxzZVxuICAgICk7XG5cbiAgICAvLyBHZXQgbWV0aG9kIGZyb20gaGFuZGxlclxuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1ldGhvZChoYW5kbGVyLCBzY2hlbWEubWV0aG9kLCBzY2hlbWEuaGFuZGxlciwgb3BlcmF0aW9uKTtcblxuICAgIC8vIEJ1aWxkIGFyZ3VtZW50cyBiYXNlZCBvbiBhcmdCdWlsZGVyIHR5cGUgKHdpdGggaW5wdXQgY29udGV4dCBpZiBuZWVkZWQpXG4gICAgY29uc3QgYXJncyA9IGJ1aWxkQXJncyhwYXJhbXMsIHNjaGVtYSwgbWFwcGVkUGFyYW1zLCBuZWVkc0lucHV0ID8gaW5wdXQgOiB1bmRlZmluZWQpO1xuXG4gICAgLy8gQ2FsbCB0aGUgaGFuZGxlciBtZXRob2RcbiAgICAvLyBOb3RlOiBGaWVsZCBzZWxlY3Rpb24gaXMgYXBwbGllZCBhdCBNQ1BBUUxIYW5kbGVyIGxldmVsIChJc3N1ZSAjMjAyKVxuICAgIHJldHVybiBtZXRob2QoLi4uYXJncyk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXhwb3J0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgeyBpc1NjaGVtYU9wZXJhdGlvbiwgZ2V0T3BlcmF0aW9uU2NoZW1hIH07XG5cbi8vIFRlc3QgZXhwb3J0cyBmb3Igc2VjdXJpdHkgYm91bmRhcnkgdmVyaWZpY2F0aW9uXG5leHBvcnQgY29uc3QgX190ZXN0X18gPSB7XG4gIGdldE5lc3RlZFZhbHVlLFxuICBTQUZFX1BBVEhfUEFUVEVSTixcbiAgRk9SQklEREVOX1BBVEhTLFxufTtcbiJdfQ==
|
|
849
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9tY3AtYXFsL1NjaGVtYURpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQzNCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsaUJBQWlCLEdBS2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELDJFQUEyRTtBQUUzRSwrRUFBK0U7QUFDL0UsbUNBQW1DO0FBQ25DLCtFQUErRTtBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLDZCQUE2QixDQUFDO0FBQ3hELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRTNFOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsR0FBNEIsRUFBRSxJQUFZO0lBQ2hFLG9EQUFvRDtJQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5Qix5Q0FBeUM7SUFDekMsS0FBSyxN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LEtBQUssQ0FDekIsQ0FBQztRQUVGLDBCQUEwQjtRQUMxQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU1RSwwRUFBMEU7UUFDMUUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRiwwQkFBMEI7UUFDMUIsdUVBQXVFO1FBQ3ZFLE9BQU8sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQsK0VBQStFO0FBQy9FLFVBQVU7QUFDViwrRUFBK0U7QUFFL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFFakQsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLGVBQWU7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NoZW1hRGlzcGF0Y2hlciAtIEdlbmVyaWMgZGlzcGF0Y2hlciBmb3Igc2NoZW1hLWRyaXZlbiBvcGVyYXRpb25zXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYXV0b21hdGljIGRpc3BhdGNoIGZyb20gb3BlcmF0aW9uIHNjaGVtYXMgdG8gaGFuZGxlciBtZXRob2RzLlxuICogSXQgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgbWFudWFsIHN3aXRjaCBzdGF0ZW1lbnRzIGluIE1DUEFRTEhhbmRsZXIgYnk6XG4gKlxuICogMS4gTG9va2luZyB1cCBvcGVyYXRpb24gaW4gc2NoZW1hXG4gKiAyLiBSZXNvbHZpbmcgaGFuZGxlciBmcm9tIHJlZ2lzdHJ5XG4gKiAzLiBCdWlsZGluZyBtZXRob2QgYXJndW1lbnRzIGZyb20gcGFyYW1zXG4gKiA0LiBDYWxsaW5nIHRoZSBoYW5kbGVyIG1ldGhvZFxuICogNS4gQXBwbHlpbmcgZmllbGQgc2VsZWN0aW9uL3RyYW5zZm9ybWF0aW9uIHRvIHJlc3BvbnNlIChJc3N1ZSAjMjAyKVxuICpcbiAqIEFSQ0hJVEVDVFVSRTpcbiAqIC0gU2NoZW1hRGlzcGF0Y2hlci5kaXNwYXRjaChvcGVyYXRpb24sIHBhcmFtcywgcmVnaXN0cnkpIOKGkiBQcm9taXNlPHVua25vd24+XG4gKiAtIFVzZXMgYXJnQnVpbGRlciB0byBkZXRlcm1pbmUgaG93IHRvIHBhc3MgcGFyYW1ldGVycyB0byBoYW5kbGVyXG4gKiAtIFZhbGlkYXRlcyByZXF1aXJlZCBwYXJhbWV0ZXJzIGJlZm9yZSBkaXNwYXRjaFxuICogLSBQcm92aWRlcyBjbGVhciBlcnJvciBtZXNzYWdlcyBmb3IgbWlzc2luZyBoYW5kbGVycy9tZXRob2RzXG4gKlxuICogSU5QVVQgTk9STUFMSVpBVElPTiAoSXNzdWUgIzI1MSk6XG4gKiAtIFBhcmFtZXRlcnMgY2FuIGhhdmUgbXVsdGlwbGUgc291cmNlcyB2aWEgYHNvdXJjZXNgIGZpZWxkXG4gKiAtIFJlc29sdXRpb24gb3JkZXI6IHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIC4uLiwgcGFyYW1zW2tleV1cbiAqIC0gU3VwcG9ydHMgZG90IG5vdGF0aW9uOiAnaW5wdXQuZWxlbWVudFR5cGUnLCAncGFyYW1zLnR5cGUnXG4gKiAtIE9wZXJhdGlvbnMgd2l0aCBgbmVlZHNGdWxsSW5wdXQ6IHRydWVgIGhhdmUgYWNjZXNzIHRvIGZ1bGwgT3BlcmF0aW9uSW5wdXRcbiAqXG4gKiBGSUVMRCBTRUxFQ1RJT04gKElzc3VlICMyMDIpOlxuICogLSBXaGVuIGBmaWVsZHNgIHBhcmFtIGlzIHByb3ZpZGVkLCBmaWx0ZXJzIHJlc3BvbnNlIHRvIHJlcXVlc3RlZCBmaWVsZHMgb25seVxuICogLSBUcmFuc2Zvcm1zIGZpZWxkIG5hbWVzIGZvciBMTE0gY29uc2lzdGVuY3kgKG5hbWUg4oaSIGVsZW1lbnRfbmFtZSlcbiAqIC0gU3VwcG9ydHMgcHJlc2V0IGZpZWxkIHNldHM6ICdtaW5pbWFsJywgJ3N0YW5kYXJkJywgJ2Z1bGwnXG4gKlxuICogQHNlZSBJc3N1ZSAjMjQ3IC0gU2NoZW1hLWRyaXZlbiBvcGVyYXRpb24gZGVmaW5pdGlvbnNcbiAqIEBzZWUgSXNzdWUgIzI1MSAtIEVsZW1lbnRDUlVEIGlucHV0IG5vcm1hbGl6YXRpb25cbiAqIEBzZWUgSXNzdWUgIzIwMiAtIEdyYXBoUUwgZmllbGQgc2VsZWN0aW9uIGZvciByZXNwb25zZSB0b2tlbiBvcHRpbWl6YXRpb25cbiAqL1xuXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7XG4gIGdldE9wZXJhdGlvblNjaGVtYSxcbiAgaXNTY2hlbWFPcGVyYXRpb24sXG4gIHR5cGUgT3BlcmF0aW9uRGVmLFxuICB0eXBlIFBhcmFtU2NoZW1hLFxuICB0eXBlIFBhcmFtRGVmLFxuICB0eXBlIEhhbmRsZXJLZXksXG59IGZyb20gJy4vT3BlcmF0aW9uU2NoZW1hLmpzJztcbmltcG9ydCB7IEludHJvc3BlY3Rpb25SZXNvbHZlciB9IGZyb20gJy4vSW50cm9zcGVjdGlvblJlc29sdmVyLmpzJztcbmltcG9ydCB7IE5vcm1hbGl6ZXJSZWdpc3RyeSB9IGZyb20gJy4vbm9ybWFsaXplcnMvaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBOb3JtYWxpemVyQ29udGV4dCB9IGZyb20gJy4vbm9ybWFsaXplcnMvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyUmVnaXN0cnkgfSBmcm9tICcuL01DUEFRTEhhbmRsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRpb25JbnB1dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuLy8gTm90ZTogRmllbGQgc2VsZWN0aW9uIGlzIG5vdyBhcHBsaWVkIGF0IE1DUEFRTEhhbmRsZXIgbGV2ZWwgKElzc3VlICMyMDIpXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElucHV0IE5vcm1hbGl6YXRpb24gKElzc3VlICMyNTEpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVmFsaWRhdGUgcHJvcGVydHkgcGF0aCB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb24gYXR0YWNrcy5cbiAqIE9ubHkgYWxsb3dzIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCB1bmRlcnNjb3JlcywgYW5kIGRvdHMuXG4gKi9cbmNvbnN0IFNBRkVfUEFUSF9QQVRURVJOID0gL15bYS16QS1aXyRdW2EtekEtWjAtOV8kLl0qJC87XG5jb25zdCBGT1JCSURERU5fUEFUSFMgPSBuZXcgU2V0KFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddKTtcblxuLyoqXG4gKiBSZXNvbHZlIGEgdmFsdWUgZnJvbSBhIGRvdC1ub3RhdGlvbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEV4YW1wbGU6IGdldE5lc3RlZFZhbHVlKHsgaW5wdXQ6IHsgZWxlbWVudFR5cGU6ICdwZXJzb25hJyB9IH0sICdpbnB1dC5lbGVtZW50VHlwZScpID0+ICdwZXJzb25hJ1xuICpcbiAqIFNlY3VyaXR5OiBWYWxpZGF0ZXMgcGF0aCBmb3JtYXQgYW5kIGJsb2NrcyBwcm90b3R5cGUgcG9sbHV0aW9uIHZlY3RvcnMuXG4gKi9cbmZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICAvLyBWYWxpZGF0ZSBwYXRoIGZvcm1hdCB0byBwcmV2ZW50IGluamVjdGlvbiBhdHRhY2tzXG4gIGlmICghU0FGRV9QQVRIX1BBVFRFUk4udGVzdChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wZXJ0eSBwYXRoIGZvcm1hdDogJHtwYXRofWApO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG5cbiAgLy8gQ2hlY2sgZm9yIHByb3RvdHlwZSBwb2xsdXRpb24gYXR0ZW1wdHNcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgaWYgKEZPUkJJRERFTl9QQVRIUy5oYXMocGFydCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yYmlkZGVuIHByb3BlcnR5IHBhdGggc2VnbWVudDogJHtwYXJ0fWApO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjdXJyZW50OiB1bmtub3duID0gb2JqO1xuXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IChjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtwYXJ0XTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwYXJhbWV0ZXIgdmFsdWUgZnJvbSBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIFRoZSByZXNvbHV0aW9uIG9yZGVyIGlzOlxuICogMS4gQ2hlY2sgZWFjaCBzb3VyY2UgaW4gYHNvdXJjZXNgIGFycmF5IChpZiBkZWZpbmVkKVxuICogMi4gRmFsbCBiYWNrIHRvIHRoZSBkaXJlY3QgcGFyYW1ldGVyIHZhbHVlXG4gKiAzLiBGYWxsIGJhY2sgdG8gZGVmYXVsdCB2YWx1ZSAoaWYgZGVmaW5lZClcbiAqXG4gKiBAcGFyYW0ga2V5IC0gUGFyYW1ldGVyIG5hbWVcbiAqIEBwYXJhbSBkZWYgLSBQYXJhbWV0ZXIgZGVmaW5pdGlvbiB3aXRoIHBvc3NpYmxlIHNvdXJjZXNcbiAqIEBwYXJhbSBjb250ZXh0IC0gUmVzb2x1dGlvbiBjb250ZXh0IGNvbnRhaW5pbmcgaW5wdXQsIHBhcmFtcywgYW5kIHJhdyBwYXJhbXNcbiAqIEByZXR1cm5zIFJlc29sdmVkIHZhbHVlIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiByZXNvbHZlUGFyYW1WYWx1ZShcbiAga2V5OiBzdHJpbmcsXG4gIGRlZjogUGFyYW1EZWYsXG4gIGNvbnRleHQ6IHtcbiAgICBpbnB1dD86IE9wZXJhdGlvbklucHV0O1xuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbik6IHVua25vd24ge1xuICAvLyBJZiBzb3VyY2VzIGFyZSBkZWZpbmVkLCBjaGVjayB0aGVtIGluIG9yZGVyXG4gIGlmIChkZWYuc291cmNlcyAmJiBkZWYuc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgZGVmLnNvdXJjZXMpIHtcbiAgICAgIC8vIEJ1aWxkIHRoZSByZXNvbHV0aW9uIGNvbnRleHQgYXMgYSBmbGF0IG9iamVjdCBmb3IgZ2V0TmVzdGVkVmFsdWVcbiAgICAgIGNvbnN0IHJlc29sdmVDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgcGFyYW1zOiBjb250ZXh0LnBhcmFtcyxcbiAgICAgIH07XG5cbiAgICAgIC8vIEFkZCBpbnB1dCBmaWVsZHMgdG8gdGhlIGNvbnRleHQgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoY29udGV4dC5pbnB1dCkge1xuICAgICAgICByZXNvbHZlQ29udGV4dC5pbnB1dCA9IGNvbnRleHQuaW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0TmVzdGVkVmFsdWUocmVzb2x2ZUNvbnRleHQsIHNvdXJjZSk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGRpcmVjdCBwYXJhbSB2YWx1ZVxuICBjb25zdCBkaXJlY3RWYWx1ZSA9IGNvbnRleHQucGFyYW1zW2tleV07XG4gIGlmIChkaXJlY3RWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRpcmVjdFZhbHVlO1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHRcbiAgcmV0dXJuIGRlZi5kZWZhdWx0O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXJhbWV0ZXIgU3R5bGUgQ29udmVyc2lvbiAoSXNzdWUgIzI1Milcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc25ha2VfY2FzZSBzdHJpbmcgdG8gY2FtZWxDYXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBzbmFrZVRvQ2FtZWwoJ2RyeV9ydW4nKSA9PiAnZHJ5UnVuJ1xuICogc25ha2VUb0NhbWVsKCdtYXhfcmVzdWx0cycpID0+ICdtYXhSZXN1bHRzJ1xuICogc25ha2VUb0NhbWVsKCdhbHJlYWR5X2NhbWVsJykgPT4gJ2FscmVhZHlDYW1lbCdcbiAqL1xuZnVuY3Rpb24gc25ha2VUb0NhbWVsKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgbGV0dGVyKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG59XG5cbi8qKlxuICogQXBwbHkgcGFyYW0gc3R5bGUgY29udmVyc2lvbiB0byBhIGtleSBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHNjaGVtYS5cbiAqIEluZGl2aWR1YWwgYG1hcFRvYCBvdmVycmlkZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgc3R5bGUgY29udmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlQYXJhbVN0eWxlKFxuICBrZXk6IHN0cmluZyxcbiAgZGVmOiBQYXJhbURlZixcbiAgcGFyYW1TdHlsZT86ICdzbmFrZVRvQ2FtZWwnXG4pOiBzdHJpbmcge1xuICAvLyBFeHBsaWNpdCBtYXBUbyB0YWtlcyBwcmVjZWRlbmNlXG4gIGlmIChkZWYubWFwVG8pIHtcbiAgICByZXR1cm4gZGVmLm1hcFRvO1xuICB9XG5cbiAgLy8gQXBwbHkgc3R5bGUgY29udmVyc2lvbiBpZiBzcGVjaWZpZWRcbiAgaWYgKHBhcmFtU3R5bGUgPT09ICdzbmFrZVRvQ2FtZWwnKSB7XG4gICAgcmV0dXJuIHNuYWtlVG9DYW1lbChrZXkpO1xuICB9XG5cbiAgLy8gRGVmYXVsdDogdXNlIG9yaWdpbmFsIGtleVxuICByZXR1cm4ga2V5O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXJhbWV0ZXIgTWFwcGluZ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE1hcCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGhhbmRsZXIgYXJndW1lbnRzIGJhc2VkIG9uIHBhcmFtIHNjaGVtYS5cbiAqIFN1cHBvcnRzIG11bHRpLXNvdXJjZSBwYXJhbWV0ZXIgcmVzb2x1dGlvbiBhbmQgcGFyYW0gc3R5bGUgY29udmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gbWFwUGFyYW1zKFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzY2hlbWE6IFBhcmFtU2NoZW1hLFxuICBpbnB1dD86IE9wZXJhdGlvbklucHV0LFxuICBwYXJhbVN0eWxlPzogJ3NuYWtlVG9DYW1lbCdcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgbWFwcGVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBjb25zdCBjb250ZXh0ID0geyBpbnB1dCwgcGFyYW1zIH07XG5cbiAgZm9yIChjb25zdCBba2V5LCBkZWZdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVQYXJhbVZhbHVlKGtleSwgZGVmLCBjb250ZXh0KTtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBhcHBseVBhcmFtU3R5bGUoa2V5LCBkZWYsIHBhcmFtU3R5bGUpO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1hcHBlZFt0YXJnZXRLZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hcHBlZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBwcmVzZW50LlxuICpcbiAqIFVzZXMgbXVsdGktc291cmNlIHJlc29sdXRpb24gdG8gY2hlY2sgYWxsIHBvc3NpYmxlIHNvdXJjZXMgZm9yIGVhY2hcbiAqIHJlcXVpcmVkIHBhcmFtZXRlci4gUHJvdmlkZXMgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMgc2hvd2luZzpcbiAqIC0gV2hpY2ggcGFyYW1ldGVyIGlzIG1pc3NpbmdcbiAqIC0gV2hpY2ggc291cmNlcyB3ZXJlIGNoZWNrZWQgKGluIG9yZGVyKVxuICogLSBXaGF0IHdhcyBhY3R1YWxseSBwcm92aWRlZCBpbiBwYXJhbXNcbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gKiBAcGFyYW0gc2NoZW1hIC0gUGFyYW1ldGVyIHNjaGVtYSBkZWZpbmluZyByZXF1aXJlbWVudHNcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBPcGVyYXRpb24gbmFtZSBmb3IgZXJyb3IgY29udGV4dFxuICogQHBhcmFtIGlucHV0IC0gT3B0aW9uYWwgZnVsbCBPcGVyYXRpb25JbnB1dCBmb3Igc291cmNlIHJlc29sdXRpb25cbiAqIEB0aHJvd3MgRXJyb3Igd2l0aCBkZWJ1Z2dpbmcgY29udGV4dCBpZiByZXF1aXJlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVpcmVkUGFyYW1zKFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzY2hlbWE6IFBhcmFtU2NoZW1hLFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgaW5wdXQ/OiBPcGVyYXRpb25JbnB1dFxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB7IGlucHV0LCBwYXJhbXMgfTtcblxuICBmb3IgKGNvbnN0IFtrZXksIGRlZl0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgIGlmIChkZWYucmVxdWlyZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZVBhcmFtVmFsdWUoa2V5LCBkZWYsIGNvbnRleHQpO1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQnVpbGQgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZSBmb3IgZGVidWdnaW5nXG4gICAgICAgIGNvbnN0IHNvdXJjZXNDaGVja2VkID0gZGVmLnNvdXJjZXNcbiAgICAgICAgICA/IGBTb3VyY2VzIGNoZWNrZWQgKGluIG9yZGVyKTogWyR7ZGVmLnNvdXJjZXMuam9pbignIOKGkiAnKX1dIOKGkiBwYXJhbXMuJHtrZXl9YFxuICAgICAgICAgIDogYFNvdXJjZTogcGFyYW1zLiR7a2V5fWA7XG5cbiAgICAgICAgY29uc3QgcHJvdmlkZWRQYXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGBQcm92aWRlZCBwYXJhbXM6IHske09iamVjdC5rZXlzKHBhcmFtcykuam9pbignLCAnKX19YFxuICAgICAgICAgIDogJ05vIHBhcmFtcyBwcm92aWRlZCc7XG5cbiAgICAgICAgLy8gSXNzdWUgIzI5MDogQ2hlY2sgYm90aCBzbmFrZV9jYXNlIGFuZCBjYW1lbENhc2UgZm9yIGVsZW1lbnRfdHlwZVxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZVZhbHVlID0gaW5wdXQ/LmVsZW1lbnRfdHlwZSB8fCBpbnB1dD8uZWxlbWVudFR5cGU7XG4gICAgICAgIGNvbnN0IGhhc0VsZW1lbnRUeXBlID0gZWxlbWVudFR5cGVWYWx1ZVxuICAgICAgICAgID8gYGlucHV0LmVsZW1lbnRfdHlwZTogJyR7ZWxlbWVudFR5cGVWYWx1ZX0nYFxuICAgICAgICAgIDogJ2lucHV0LmVsZW1lbnRfdHlwZTogdW5kZWZpbmVkJztcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyICcke2tleX0nIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScuIGAgK1xuICAgICAgICAgIGAke3NvdXJjZXNDaGVja2VkfS4gJHtwcm92aWRlZFBhcmFtc30uICR7aGFzRWxlbWVudFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUeXBlIFZhbGlkYXRpb24gKElzc3VlICMyNTUpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGEgaHVtYW4tcmVhZGFibGUgdHlwZSBkZXNjcmlwdGlvbiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0dWFsVHlwZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ2FycmF5JztcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNpbmdsZSBwYXJhbWV0ZXIgdmFsdWUgYWdhaW5zdCBpdHMgdHlwZSBkZWZpbml0aW9uXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhcmFtZXRlciB2YWx1ZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGRlZiAtIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbiBmcm9tIHNjaGVtYVxuICogQHBhcmFtIGtleSAtIFRoZSBwYXJhbWV0ZXIgbmFtZSAoZm9yIGVycm9yIG1lc3NhZ2VzKVxuICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gbmFtZSAoZm9yIGVycm9yIG1lc3NhZ2VzKVxuICogQHRocm93cyBFcnJvciBpZiB0eXBlIHZhbGlkYXRpb24gZmFpbHNcbiAqXG4gKiBAc2VlIElzc3VlICMyNTUgLSBSdW50aW1lIHR5cGUgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtVHlwZShcbiAgdmFsdWU6IHVua25vd24sXG4gIGRlZjogUGFyYW1EZWYsXG4gIGtleTogc3RyaW5nLFxuICBvcGVyYXRpb246IHN0cmluZ1xuKTogdm9pZCB7XG4gIC8vIFNraXAgdmFsaWRhdGlvbiBmb3IgdW5kZWZpbmVkIHZhbHVlcyAoaGFuZGxlZCBieSByZXF1aXJlZCBjaGVjaylcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICBjb25zdCBhY3R1YWxUeXBlID0gZ2V0QWN0dWFsVHlwZSh2YWx1ZSk7XG5cbiAgc3dpdGNoIChkZWYudHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke2FjdHVhbFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBudW1iZXIsIGdvdCAke2FjdHVhbFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBib29sZWFuLCBnb3QgJHthY3R1YWxUeXBlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUGFyYW1ldGVyICcke2tleX0nIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FjdHVhbFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhcnJheSc6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUGFyYW1ldGVyICcke2tleX0nIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScgbXVzdCBiZSBhbiBhcnJheSwgZ290ICR7YWN0dWFsVHlwZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3N0cmluZ1tdJzpcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQYXJhbWV0ZXIgJyR7a2V5fScgZm9yIG9wZXJhdGlvbiAnJHtvcGVyYXRpb259JyBtdXN0IGJlIGEgc3RyaW5nIGFycmF5LCBnb3QgJHthY3R1YWxUeXBlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFZhbGlkYXRlIGFycmF5IGVsZW1lbnRzIGFyZSBzdHJpbmdzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFBhcmFtZXRlciAnJHtrZXl9WyR7aX1dJyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke2dldEFjdHVhbFR5cGUodmFsdWVbaV0pfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgLy8gQWxsb3cgYW55IHR5cGUgLSBubyB2YWxpZGF0aW9uIG5lZWRlZFxuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbGwgcGFyYW1ldGVyIHR5cGVzIGFnYWluc3Qgc2NoZW1hIGRlZmluaXRpb25zXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gc2NoZW1hIC0gVGhlIHBhcmFtZXRlciBzY2hlbWFcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIG5hbWUgKGZvciBlcnJvciBtZXNzYWdlcylcbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW55IHR5cGUgdmFsaWRhdGlvbiBmYWlsc1xuICpcbiAqIEBzZWUgSXNzdWUgIzI1NSAtIFJ1bnRpbWUgdHlwZSB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1UeXBlcyhcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2NoZW1hOiBQYXJhbVNjaGVtYSxcbiAgb3BlcmF0aW9uOiBzdHJpbmdcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtrZXksIGRlZl0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgdmFsaWRhdGVQYXJhbVR5cGUodmFsdWUsIGRlZiwga2V5LCBvcGVyYXRpb24pO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhhbmRsZXIgUmVzb2x1dGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdC5cbiAqIFVzZWQgZm9yIHNhZmUgcHJvcGVydHkgYWNjZXNzIHdpdGhvdXQgdHlwZSBhc3NlcnRpb25zLlxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgY2FsbGFibGUgbWV0aG9kLlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIG1ldGhvZCBsb29rdXAgd2l0aG91dCB1bnNhZmUgYXNzZXJ0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gT2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSAtIE5hbWUgb2YgbWV0aG9kIHRvIGxvb2sgZm9yXG4gKiBAcmV0dXJucyBUcnVlIGlmIG9iaiBoYXMgYSBmdW5jdGlvbiBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lXG4gKi9cbmZ1bmN0aW9uIGhhc01ldGhvZChcbiAgb2JqOiB1bmtub3duLFxuICBtZXRob2ROYW1lOiBzdHJpbmdcbik6IG9iaiBpcyBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPiB7XG4gIHJldHVybiBpc09iamVjdChvYmopICYmIHR5cGVvZiBvYmpbbWV0aG9kTmFtZV0gPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogR2V0IGhhbmRsZXIgZnJvbSByZWdpc3RyeSB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZy5cbiAqXG4gKiBSZXNvbHZlcyBhIGhhbmRsZXIgYnkga2V5IGZyb20gdGhlIHJlZ2lzdHJ5LCBwcm92aWRpbmcgY2xlYXIgZXJyb3IgbWVzc2FnZXNcbiAqIHdoZW4gaGFuZGxlcnMgYXJlIG1pc3NpbmcuIERpZmZlcmVudGlhdGVzIGJldHdlZW4gcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGhhbmRsZXJzLlxuICpcbiAqIEBwYXJhbSByZWdpc3RyeSAtIEhhbmRsZXIgcmVnaXN0cnkgY29udGFpbmluZyBhbGwgY29uZmlndXJlZCBoYW5kbGVyc1xuICogQHBhcmFtIGhhbmRsZXJLZXkgLSBLZXkgaWRlbnRpZnlpbmcgd2hpY2ggaGFuZGxlciB0byByZXRyaWV2ZVxuICogQHBhcmFtIG9wZXJhdGlvbiAtIE9wZXJhdGlvbiBuYW1lIGZvciBlcnJvciBjb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9uYWwgLSBXaGV0aGVyIHRoZSBoYW5kbGVyIGlzIG9wdGlvbmFsIChhZmZlY3RzIGVycm9yIG1lc3NhZ2luZylcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBoYW5kbGVyXG4gKiBAdGhyb3dzIEVycm9yIGlmIGhhbmRsZXIgaXMgbm90IGNvbmZpZ3VyZWRcbiAqL1xuZnVuY3Rpb24gZ2V0SGFuZGxlcihcbiAgcmVnaXN0cnk6IEhhbmRsZXJSZWdpc3RyeSxcbiAgaGFuZGxlcktleTogSGFuZGxlcktleSxcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIG9wdGlvbmFsOiBib29sZWFuXG4pOiB1bmtub3duIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZ2lzdHJ5W2hhbmRsZXJLZXkgYXMga2V5b2YgSGFuZGxlclJlZ2lzdHJ5XTtcblxuICBpZiAoIWhhbmRsZXIgJiYgIW9wdGlvbmFsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEhhbmRsZXIgJyR7aGFuZGxlcktleX0nIGlzIHJlcXVpcmVkIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScgYnV0IG5vdCBjb25maWd1cmVkLiBgICtcbiAgICAgIGBFbnN1cmUgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgSGFuZGxlclJlZ2lzdHJ5LmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFoYW5kbGVyICYmIG9wdGlvbmFsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7aGFuZGxlcktleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGhhbmRsZXJLZXkuc2xpY2UoMSl9IG9wZXJhdGlvbnMgbm90IGF2YWlsYWJsZTogYCArXG4gICAgICBgJHtoYW5kbGVyS2V5fSBub3QgY29uZmlndXJlZC4gVGhpcyBpcyBhbiBvcHRpb25hbCBoYW5kbGVyIHRoYXQgbWF5IG5vdCBiZSBhdmFpbGFibGUgaW4gYWxsIGNvbmZpZ3VyYXRpb25zLmBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXI7XG59XG5cbi8qKlxuICogR2V0IG1ldGhvZCBmcm9tIGhhbmRsZXIgd2l0aCB0eXBlLXNhZmUgbG9va3VwLlxuICpcbiAqIFVzZXMgdHlwZSBndWFyZHMgaW5zdGVhZCBvZiB1bnNhZmUgdHlwZSBhc3NlcnRpb25zIHRvIHZlcmlmeSB0aGUgaGFuZGxlclxuICogaGFzIHRoZSBleHBlY3RlZCBtZXRob2QuIFByb3ZpZGVzIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzIGZvciBkZWJ1Z2dpbmcuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgLSBIYW5kbGVyIG9iamVjdCB0byBnZXQgbWV0aG9kIGZyb21cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gTmFtZSBvZiB0aGUgbWV0aG9kIHRvIHJldHJpZXZlXG4gKiBAcGFyYW0gaGFuZGxlcktleSAtIEhhbmRsZXIga2V5IGZvciBlcnJvciBjb250ZXh0XG4gKiBAcGFyYW0gb3BlcmF0aW9uIC0gT3BlcmF0aW9uIG5hbWUgZm9yIGVycm9yIGNvbnRleHRcbiAqIEByZXR1cm5zIEJvdW5kIG1ldGhvZCByZWFkeSB0byBjYWxsXG4gKiBAdGhyb3dzIEVycm9yIGlmIG1ldGhvZCBpcyBub3QgZm91bmQgb3IgaXMgbm90IGNhbGxhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldE1ldGhvZChcbiAgaGFuZGxlcjogdW5rbm93bixcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBoYW5kbGVyS2V5OiBzdHJpbmcsXG4gIG9wZXJhdGlvbjogc3RyaW5nXG4pOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgLy8gVXNlIHR5cGUgZ3VhcmQgaW5zdGVhZCBvZiB1bnNhZmUgYXNzZXJ0aW9uXG4gIGlmICghaGFzTWV0aG9kKGhhbmRsZXIsIG1ldGhvZE5hbWUpKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlTWV0aG9kcyA9IGlzT2JqZWN0KGhhbmRsZXIpXG4gICAgICA/IE9iamVjdC5rZXlzKGhhbmRsZXIpLmZpbHRlcihrID0+IHR5cGVvZiBoYW5kbGVyW2tdID09PSAnZnVuY3Rpb24nKVxuICAgICAgOiBbXTtcblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNZXRob2QgJyR7bWV0aG9kTmFtZX0nIG5vdCBmb3VuZCBvbiBoYW5kbGVyICcke2hhbmRsZXJLZXl9JyBmb3Igb3BlcmF0aW9uICcke29wZXJhdGlvbn0nLiBgICtcbiAgICAgIGBBdmFpbGFibGUgbWV0aG9kczogWyR7YXZhaWxhYmxlTWV0aG9kcy5qb2luKCcsICcpIHx8ICdub25lJ31dYFxuICAgICk7XG4gIH1cblxuICAvLyBOb3cgVHlwZVNjcmlwdCBrbm93cyBoYW5kbGVyW21ldGhvZE5hbWVdIGlzIGEgZnVuY3Rpb25cbiAgY29uc3QgbWV0aG9kID0gaGFuZGxlclttZXRob2ROYW1lXTtcbiAgcmV0dXJuIG1ldGhvZC5iaW5kKGhhbmRsZXIpIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFyZ3VtZW50IEJ1aWxkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUGFyYW1zIHRoYXQgYXJlIGhhbmRsZWQgYXQgdGhlIGRpc3BhdGNoIGxldmVsIGFuZCBzaG91bGQgTk9UIGJlIHBhc3NlZCB0byBoYW5kbGVycy5cbiAqIFRoZXNlIGFyZSBjcm9zcy1jdXR0aW5nIGNvbmNlcm5zIHByb2Nlc3NlZCBieSBTY2hlbWFEaXNwYXRjaGVyIGl0c2VsZi5cbiAqXG4gKiBAc2VlIElzc3VlICMyMDIgLSBmaWVsZHMgaXMgdXNlZCBmb3IgcmVzcG9uc2UgZmlsdGVyaW5nLCBub3QgYnkgaGFuZGxlcnNcbiAqL1xuY29uc3QgRElTUEFUQ0hfT05MWV9QQVJBTVMgPSBuZXcgU2V0KFsnZmllbGRzJ10pO1xuXG4vKipcbiAqIEZpbHRlciBvdXQgZGlzcGF0Y2gtb25seSBwYXJhbXMgZnJvbSBhIHBhcmFtcyBvYmplY3QuXG4gKiBUaGVzZSBwYXJhbXMgYXJlIGhhbmRsZWQgYXQgdGhlIGRpc3BhdGNoIGxldmVsIChlLmcuLCBmaWVsZCBzZWxlY3Rpb24pXG4gKiBhbmQgc2hvdWxkIG5vdCBiZSBwYXNzZWQgdG8gaGFuZGxlcnMuXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckRpc3BhdGNoT25seVBhcmFtcyhcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCBmaWx0ZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgIGlmICghRElTUEFUQ0hfT05MWV9QQVJBTVMuaGFzKGtleSkpIHtcbiAgICAgIGZpbHRlcmVkW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcmVkO1xufVxuXG4vKipcbiAqIEJ1aWxkIGFyZ3VtZW50cyBmb3IgaGFuZGxlciBtZXRob2QgYmFzZWQgb24gYXJnQnVpbGRlciB0eXBlXG4gKlxuICogLSAnc2luZ2xlJzogUGFzcyBwYXJhbXMgaW4gc2NoZW1hIG9yZGVyIGFzIHBvc2l0aW9uYWwgYXJncyAoZGVmYXVsdClcbiAqIC0gJ3NwcmVhZCc6IFBhc3MgcXVlcnkgKyByZW1haW5pbmcgcGFyYW1zXG4gKiAtICduYW1lZCc6IFBhc3MgbWFwcGVkIHBhcmFtcyBhcyBuYW1lZCBvYmplY3RcbiAqIC0gJ25hbWVkV2l0aFR5cGUnOiBMaWtlICduYW1lZCcgYnV0IGVuc3VyZXMgJ3R5cGUnIGlzIGluY2x1ZGVkIGZyb20gcmVzb2x2ZWQgc291cmNlc1xuICogLSAndHlwZVdpdGhQYXJhbXMnOiBQYXNzIHJlc29sdmVkIHR5cGUgKyBmdWxsIHBhcmFtcyBvYmplY3RcbiAqXG4gKiBOb3RlOiBQYXJhbXMgaW4gRElTUEFUQ0hfT05MWV9QQVJBTVMgYXJlIGZpbHRlcmVkIG91dCBiZWZvcmUgcGFzc2luZyB0byBoYW5kbGVycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRBcmdzKFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzY2hlbWE6IE9wZXJhdGlvbkRlZixcbiAgbWFwcGVkUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgaW5wdXQ/OiBPcGVyYXRpb25JbnB1dFxuKTogdW5rbm93bltdIHtcbiAgY29uc3QgYnVpbGRlciA9IHNjaGVtYS5hcmdCdWlsZGVyID8/ICdzaW5nbGUnO1xuXG4gIHN3aXRjaCAoYnVpbGRlcikge1xuICAgIGNhc2UgJ3NwcmVhZCc6XG4gICAgICAvLyBGb3IgaGFuZGxlcnMgdGhhdCB0YWtlIChxdWVyeSwgb3B0aW9ucylcbiAgICAgIHJldHVybiBbcGFyYW1zLnF1ZXJ5LCBmaWx0ZXJEaXNwYXRjaE9ubHlQYXJhbXMocGFyYW1zKV07XG5cbiAgICBjYXNlICduYW1lZCc6IHtcbiAgICAgIC8vIEZvciBoYW5kbGVycyB0aGF0IHRha2UgYSBuYW1lZCBwYXJhbXMgb2JqZWN0XG4gICAgICAvLyBGaWx0ZXIgb3V0IGRpc3BhdGNoLW9ubHkgcGFyYW1zXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlckRpc3BhdGNoT25seVBhcmFtcyhtYXBwZWRQYXJhbXMpO1xuICAgICAgcmV0dXJuIFtmaWx0ZXJlZF07XG4gICAgfVxuXG4gICAgY2FzZSAnbmFtZWRXaXRoVHlwZSc6IHtcbiAgICAgIC8vIExpa2UgJ25hbWVkJyBidXQgZW5zdXJlcyAnZWxlbWVudFR5cGUnIGFuZCAnZWxlbWVudE5hbWUnIGFyZSBhdmFpbGFibGVcbiAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgRWxlbWVudENSVUQgcGF0dGVybiB3aGVyZSB0eXBlIGNvbWVzIGZyb20gaW5wdXQuZWxlbWVudF90eXBlIE9SIHBhcmFtcy5lbGVtZW50X3R5cGVcbiAgICAgIC8vIElzc3VlICMyOTA6IGVsZW1lbnRfbmFtZSBtYXBzIHRvIGVsZW1lbnROYW1lLCBlbGVtZW50X3R5cGUgbWFwcyB0byBlbGVtZW50VHlwZVxuICAgICAgY29uc3QgcmVzdWx0ID0geyAuLi5tYXBwZWRQYXJhbXMgfTtcblxuICAgICAgLy8gSWYgJ2VsZW1lbnRUeXBlJyB3YXNuJ3QgaW4gbWFwcGVkUGFyYW1zIGJ1dCBpcyBhdmFpbGFibGUgZnJvbSBpbnB1dC5lbGVtZW50X3R5cGUgKG9yIGxlZ2FjeSBlbGVtZW50VHlwZSksIGFkZCBpdFxuICAgICAgLy8gSXNzdWUgIzI5MDogUHJlZmVyIHNuYWtlX2Nhc2UgZWxlbWVudF90eXBlLCBmYWxsYmFjayB0byBjYW1lbENhc2UgZWxlbWVudFR5cGUgZm9yIGJhY2t3YXJkIGNvbXBhdFxuICAgICAgaWYgKCFyZXN1bHQuZWxlbWVudFR5cGUgJiYgKGlucHV0Py5lbGVtZW50X3R5cGUgfHwgaW5wdXQ/LmVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXN1bHQuZWxlbWVudFR5cGUgPSBpbnB1dC5lbGVtZW50X3R5cGUgfHwgaW5wdXQuZWxlbWVudFR5cGU7XG4gICAgICB9XG4gICAgICAvLyBTZXQgJ3R5cGUnIGZyb20gJ2VsZW1lbnRUeXBlJyBmb3IgaGFuZGxlcnMgdGhhdCBleHBlY3QgaXRcbiAgICAgIGlmICghcmVzdWx0LnR5cGUgJiYgcmVzdWx0LmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHJlc3VsdC50eXBlID0gcmVzdWx0LmVsZW1lbnRUeXBlO1xuICAgICAgfVxuICAgICAgLy8gU2V0ICduYW1lJyBmcm9tICdlbGVtZW50TmFtZScgZm9yIGhhbmRsZXJzIHRoYXQgZXhwZWN0IGl0IChJc3N1ZSAjMjkwKVxuICAgICAgaWYgKCFyZXN1bHQubmFtZSAmJiByZXN1bHQuZWxlbWVudE5hbWUpIHtcbiAgICAgICAgcmVzdWx0Lm5hbWUgPSByZXN1bHQuZWxlbWVudE5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICMyNzg6IEZvciBlbnNlbWJsZXMsIG1lcmdlIHRvcC1sZXZlbCBlbGVtZW50cyBpbnRvIG1ldGFkYXRhXG4gICAgICAvLyBMTE1zIG9mdGVuIHBhc3MgZWxlbWVudHMgYXQgcGFyYW1zIGxldmVsLCBub3QgaW5zaWRlIG1ldGFkYXRhXG4gICAgICAvLyBJc3N1ZSAjMjkwOiBQcmVmZXIgc25ha2VfY2FzZSBlbGVtZW50X3R5cGUsIGZhbGxiYWNrIHRvIGNhbWVsQ2FzZSBlbGVtZW50VHlwZVxuICAgICAgY29uc3QgcmVzb2x2ZWRUeXBlID0gcmVzdWx0LmVsZW1lbnRUeXBlIHx8IHJlc3VsdC50eXBlIHx8IGlucHV0Py5lbGVtZW50X3R5cGUgfHwgaW5wdXQ/LmVsZW1lbnRUeXBlO1xuICAgICAgLy8gQ2hlY2sgZm9yIGVuc2VtYmxlIHR5cGUgKGhhbmRsZXMgYm90aCBwbHVyYWwgY29uc3RhbnQgYW5kIHNpbmd1bGFyIGZvcm0pXG4gICAgICBjb25zdCBpc0Vuc2VtYmxlID0gcmVzb2x2ZWRUeXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSB8fCByZXNvbHZlZFR5cGUgPT09ICdlbnNlbWJsZSc7XG4gICAgICBpZiAoaXNFbnNlbWJsZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHBhcmFtcy5lbGVtZW50cztcbiAgICAgICAgY29uc3QgY3VycmVudE1ldGFkYXRhID0gcmVzdWx0Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgKCFjdXJyZW50TWV0YWRhdGEgfHwgIWN1cnJlbnRNZXRhZGF0YS5lbGVtZW50cykpIHtcbiAgICAgICAgICByZXN1bHQubWV0YWRhdGEgPSB7IC4uLmN1cnJlbnRNZXRhZGF0YSwgZWxlbWVudHMgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJc3N1ZSAjNzIyOiBDb21tb24gZmllbGRzICh0YWdzLCB0cmlnZ2Vycykg4oCUIExMTXMgcGFzcyBhdCBwYXJhbXMgbGV2ZWwgZm9yIGFueSBlbGVtZW50IHR5cGUuXG4gICAgICB7XG4gICAgICAgIGxldCBjdXJyZW50TWV0YSA9IHJlc3VsdC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHVwZGF0ZWRNZXRhID0gY3VycmVudE1ldGE7XG5cbiAgICAgICAgaWYgKHBhcmFtcy50YWdzICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMudGFncykgJiYgKCF1cGRhdGVkTWV0YSB8fCB1cGRhdGVkTWV0YS50YWdzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGEgPSB7IC4uLnVwZGF0ZWRNZXRhLCB0YWdzOiBwYXJhbXMudGFncyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMudHJpZ2dlcnMgIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy50cmlnZ2VycykgJiYgKCF1cGRhdGVkTWV0YSB8fCB1cGRhdGVkTWV0YS50cmlnZ2VycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHVwZGF0ZWRNZXRhID0geyAuLi51cGRhdGVkTWV0YSwgdHJpZ2dlcnM6IHBhcmFtcy50cmlnZ2VycyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZWRNZXRhICE9PSBjdXJyZW50TWV0YSkge1xuICAgICAgICAgIHJlc3VsdC5tZXRhZGF0YSA9IHVwZGF0ZWRNZXRhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFnZW50IFYyIGZpZWxkczogZ29hbCwgYWN0aXZhdGVzLCB0b29scywgc3lzdGVtUHJvbXB0LCBhdXRvbm9teSwgcmVzaWxpZW5jZVxuICAgICAgY29uc3QgaXNBZ2VudCA9IHJlc29sdmVkVHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQgfHwgcmVzb2x2ZWRUeXBlID09PSAnYWdlbnQnO1xuICAgICAgaWYgKGlzQWdlbnQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1ldGFkYXRhID0gcmVzdWx0Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgdXBkYXRlZE1ldGFkYXRhID0gY3VycmVudE1ldGFkYXRhO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZ29hbCAhPT0gdW5kZWZpbmVkICYmICghdXBkYXRlZE1ldGFkYXRhIHx8IHVwZGF0ZWRNZXRhZGF0YS5nb2FsID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIGdvYWw6IHBhcmFtcy5nb2FsIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5hY3RpdmF0ZXMgIT09IHVuZGVmaW5lZCAmJiAoIXVwZGF0ZWRNZXRhZGF0YSB8fCB1cGRhdGVkTWV0YWRhdGEuYWN0aXZhdGVzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIGFjdGl2YXRlczogcGFyYW1zLmFjdGl2YXRlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMudG9vbHMgIT09IHVuZGVmaW5lZCAmJiAoIXVwZGF0ZWRNZXRhZGF0YSB8fCB1cGRhdGVkTWV0YWRhdGEudG9vbHMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB1cGRhdGVkTWV0YWRhdGEgPSB7IC4uLnVwZGF0ZWRNZXRhZGF0YSwgdG9vbHM6IHBhcmFtcy50b29scyB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIElzc3VlICM3MjU6IEFjY2VwdCBib3RoIHN5c3RlbVByb21wdCBhbmQgc3lzdGVtX3Byb21wdCAoTExNcyBjb21tb25seSB1c2Ugc25ha2VfY2FzZSlcbiAgICAgICAgY29uc3Qgc3lzdGVtUHJvbXB0VmFsdWUgPSBwYXJhbXMuc3lzdGVtUHJvbXB0ID8/IHBhcmFtcy5zeXN0ZW1fcHJvbXB0O1xuICAgICAgICBpZiAoc3lzdGVtUHJvbXB0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIXVwZGF0ZWRNZXRhZGF0YSB8fCB1cGRhdGVkTWV0YWRhdGEuc3lzdGVtUHJvbXB0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIHN5c3RlbVByb21wdDogc3lzdGVtUHJvbXB0VmFsdWUgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmF1dG9ub215ICE9PSB1bmRlZmluZWQgJiYgKCF1cGRhdGVkTWV0YWRhdGEgfHwgdXBkYXRlZE1ldGFkYXRhLmF1dG9ub215ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIGF1dG9ub215OiBwYXJhbXMuYXV0b25vbXkgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJc3N1ZSAjNzIyOiByZXNpbGllbmNlIHdhcyBtaXNzaW5nIGZyb20gdGhlIGFnZW50IFYyIG1lcmdlXG4gICAgICAgIGlmIChwYXJhbXMucmVzaWxpZW5jZSAhPT0gdW5kZWZpbmVkICYmICghdXBkYXRlZE1ldGFkYXRhIHx8IHVwZGF0ZWRNZXRhZGF0YS5yZXNpbGllbmNlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdXBkYXRlZE1ldGFkYXRhID0geyAuLi51cGRhdGVkTWV0YWRhdGEsIHJlc2lsaWVuY2U6IHBhcmFtcy5yZXNpbGllbmNlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlZE1ldGFkYXRhICE9PSBjdXJyZW50TWV0YWRhdGEpIHtcbiAgICAgICAgICByZXN1bHQubWV0YWRhdGEgPSB1cGRhdGVkTWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSXNzdWUgIzY2NjogTExNcyBvZnRlbiBwYXNzIGdhdGVrZWVwZXIgYXQgdG9wLWxldmVsIHBhcmFtcywgbm90IGluc2lkZSBtZXRhZGF0YS5cbiAgICAgIC8vIE1lcmdlIGl0IGludG8gbWV0YWRhdGEgZm9yIGFsbCBlbGVtZW50IHR5cGVzLlxuICAgICAgaWYgKHBhcmFtcy5nYXRla2VlcGVyICYmIHR5cGVvZiBwYXJhbXMuZ2F0ZWtlZXBlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1ldGEgPSByZXN1bHQubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghY3VycmVudE1ldGEgfHwgIWN1cnJlbnRNZXRhLmdhdGVrZWVwZXIpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbU2NoZW1hRGlzcGF0Y2hlcl0gTWVyZ2luZyB0b3AtbGV2ZWwgZ2F0ZWtlZXBlciBpbnRvIG1ldGFkYXRhIGZvciBlbGVtZW50ICcke3Jlc3VsdC5uYW1lID8/ICd1bmtub3duJ30nYCk7XG4gICAgICAgICAgcmVzdWx0Lm1ldGFkYXRhID0geyAuLi5jdXJyZW50TWV0YSwgZ2F0ZWtlZXBlcjogcGFyYW1zLmdhdGVrZWVwZXIgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgb3V0IGRpc3BhdGNoLW9ubHkgcGFyYW1zIGJlZm9yZSByZXR1cm5pbmdcbiAgICAgIHJldHVybiBbZmlsdGVyRGlzcGF0Y2hPbmx5UGFyYW1zKHJlc3VsdCldO1xuICAgIH1cblxuICAgIGNhc2UgJ3R5cGVXaXRoUGFyYW1zJzoge1xuICAgICAgLy8gUGFzcyByZXNvbHZlZCB0eXBlICsgZnVsbCBwYXJhbXMgb2JqZWN0IChtaW51cyBkaXNwYXRjaC1vbmx5IHBhcmFtcylcbiAgICAgIC8vIFVzZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBsaXN0X2VsZW1lbnRzIHRoYXQgbmVlZCAodHlwZSwgcGFnaW5hdGlvblBhcmFtcylcbiAgICAgIC8vIElzc3VlICMyOTA6IGVsZW1lbnRfdHlwZSBtYXBzIHRvIGVsZW1lbnRUeXBlLCB3aXRoIGJhY2t3YXJkIGNvbXBhdCBmb3IgdHlwZVxuICAgICAgLy8gUHJlZmVyIHNuYWtlX2Nhc2UgZWxlbWVudF90eXBlLCBmYWxsYmFjayB0byBjYW1lbENhc2UgZWxlbWVudFR5cGVcbiAgICAgIGNvbnN0IHJlc29sdmVkVHlwZSA9IG1hcHBlZFBhcmFtcy5lbGVtZW50VHlwZSA/PyBtYXBwZWRQYXJhbXMudHlwZSA/PyBpbnB1dD8uZWxlbWVudF90eXBlID8/IGlucHV0Py5lbGVtZW50VHlwZTtcbiAgICAgIHJldHVybiBbcmVzb2x2ZWRUeXBlLCBmaWx0ZXJEaXNwYXRjaE9ubHlQYXJhbXMocGFyYW1zKV07XG4gICAgfVxuXG4gICAgY2FzZSAnc2luZ2xlJzpcbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBFeHRyYWN0IHBhcmFtcyBpbiBzY2hlbWEgb3JkZXIsIHVzaW5nIHJlc29sdmVkIHZhbHVlc1xuICAgICAgaWYgKCFzY2hlbWEucGFyYW1zIHx8IE9iamVjdC5rZXlzKHNjaGVtYS5wYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBzaW1wbGUgaGFuZGxlcnMsIHBhc3MgcmVzb2x2ZWQgcGFyYW1zIGluIHNjaGVtYSBvcmRlclxuICAgICAgLy8gU2tpcCBkaXNwYXRjaC1vbmx5IHBhcmFtcyAobGlrZSAnZmllbGRzJykgdGhhdCBhcmUgaGFuZGxlZCBieSBTY2hlbWFEaXNwYXRjaGVyXG4gICAgICBjb25zdCBhcmdzOiB1bmtub3duW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYS5wYXJhbXMpKSB7XG4gICAgICAgIC8vIFNraXAgZGlzcGF0Y2gtbGV2ZWwgcGFyYW1zIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCB0byBoYW5kbGVyc1xuICAgICAgICBpZiAoRElTUEFUQ0hfT05MWV9QQVJBTVMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2UgbWFwcGVkIHZhbHVlIGlmIGF2YWlsYWJsZSAoaGFuZGxlcyBzb3VyY2UgcmVzb2x1dGlvbilcbiAgICAgICAgY29uc3QgdGFyZ2V0S2V5ID0gc2NoZW1hLnBhcmFtc1trZXldLm1hcFRvID8/IGtleTtcbiAgICAgICAgYXJncy5wdXNoKG1hcHBlZFBhcmFtc1t0YXJnZXRLZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTcGVjaWFsIE9wZXJhdGlvbiBIYW5kbGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEhhbmRsZSBpbnRyb3NwZWN0aW9uIG9wZXJhdGlvbiAodXNlcyBJbnRyb3NwZWN0aW9uUmVzb2x2ZXIgZGlyZWN0bHkpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUludHJvc3BlY3Rpb24oXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gSW50cm9zcGVjdGlvblJlc29sdmVyLnJlc29sdmUocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgZ2V0X2NhcGFiaWxpdGllcyBvcGVyYXRpb24gKHVzZXMgSW50cm9zcGVjdGlvblJlc29sdmVyIGRpcmVjdGx5KVxuICogQHNlZSBJc3N1ZSAjMTc2MCAtIGdldF9jYXBhYmlsaXRpZXMgb3BlcmF0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNhcGFiaWxpdGllcyhcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiBJbnRyb3NwZWN0aW9uUmVzb2x2ZXIuZ2V0Q2FwYWJpbGl0aWVzKHBhcmFtcyk7XG59XG5cbi8qKlxuICogSGFuZGxlIGJ1aWxkIGluZm8gb3BlcmF0aW9uIChmb3JtYXRzIG91dHB1dClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQnVpbGRJbmZvKFxuICByZWdpc3RyeTogSGFuZGxlclJlZ2lzdHJ5XG4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3Qgc2VydmljZSA9IHJlZ2lzdHJ5LmJ1aWxkSW5mb1NlcnZpY2U7XG4gIGlmICghc2VydmljZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQnVpbGRJbmZvIG9wZXJhdGlvbnMgbm90IGF2YWlsYWJsZTogQnVpbGRJbmZvU2VydmljZSBub3QgY29uZmlndXJlZCcpO1xuICB9XG5cbiAgY29uc3QgaW5mbyA9IGF3YWl0IHNlcnZpY2UuZ2V0QnVpbGRJbmZvKCk7XG4gIHJldHVybiB7XG4gICAgY29udGVudDogW3tcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHRleHQ6IHNlcnZpY2UuZm9ybWF0QnVpbGRJbmZvKGluZm8pLFxuICAgIH1dLFxuICB9O1xufVxuXG4vKipcbiAqIEhhbmRsZSBjYWNoZSBidWRnZXQgcmVwb3J0IG9wZXJhdGlvbiAoZm9ybWF0cyBvdXRwdXQgYXMgbWFya2Rvd24gdGFibGUpXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUNhY2hlQnVkZ2V0UmVwb3J0KFxuICByZWdpc3RyeTogSGFuZGxlclJlZ2lzdHJ5XG4pOiB1bmtub3duIHtcbiAgY29uc3QgYnVkZ2V0ID0gcmVnaXN0cnkuY2FjaGVNZW1vcnlCdWRnZXQ7XG4gIGlmICghYnVkZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWNoZSBidWRnZXQgbm90IGF2YWlsYWJsZTogQ2FjaGVNZW1vcnlCdWRnZXQgbm90IGNvbmZpZ3VyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHJlcG9ydCA9IGJ1ZGdldC5nZXRSZXBvcnQoKTtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICcjIENhY2hlIE1lbW9yeSBCdWRnZXQgUmVwb3J0JyxcbiAgICAnJyxcbiAgICBgKipCdWRnZXQ6KiogJHtyZXBvcnQuYnVkZ2V0TUJ9IE1CYCxcbiAgICBgKipVc2VkOioqICR7cmVwb3J0LnRvdGFsTWVtb3J5TUJ9IE1CICgke3JlcG9ydC51dGlsaXphdGlvblBlcmNlbnR9JSlgLFxuICAgIGAqKlJlZ2lzdGVyZWQgQ2FjaGVzOioqICR7cmVwb3J0LmNhY2hlcy5sZW5ndGh9YCxcbiAgICAnJyxcbiAgXTtcbiAgaWYgKHJlcG9ydC5jYWNoZXMubGVuZ3RoID4gMCkge1xuICAgIGxpbmVzLnB1c2goJ3wgQ2FjaGUgfCBFbnRyaWVzIHwgTWVtb3J5IChNQikgfCBIaXQgUmF0ZSB8IExhc3QgQWN0aXZpdHkgfCcpO1xuICAgIGxpbmVzLnB1c2goJ3wtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfCcpO1xuICAgIGZvciAoY29uc3QgYyBvZiByZXBvcnQuY2FjaGVzKSB7XG4gICAgICBjb25zdCBhY3Rpdml0eSA9IGMubGFzdEFjdGl2aXR5TXMgPiAwXG4gICAgICAgID8gYCR7KChEYXRlLm5vdygpIC0gYy5sYXN0QWN0aXZpdHlNcykgLyAxMDAwKS50b0ZpeGVkKDApfXMgYWdvYFxuICAgICAgICA6ICduZXZlcic7XG4gICAgICBsaW5lcy5wdXNoKGB8ICR7Yy5uYW1lfSB8ICR7Yy5lbnRyaWVzfSB8ICR7Yy5tZW1vcnlNQn0gfCAkeyhjLmhpdFJhdGUgKiAxMDApLnRvRml4ZWQoMSl9JSB8ICR7YWN0aXZpdHl9IHxgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaCgnX05vIGNhY2hlcyByZWdpc3RlcmVkLl8nKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbnRlbnQ6IFt7XG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICB0ZXh0OiBsaW5lcy5qb2luKCdcXG4nKSxcbiAgICB9XSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHBvcnRQYWNrYWdlIGludGVyZmFjZSBmb3IgZWxlbWVudCBleHBvcnQuXG4gKiBNYXRjaGVzIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgaW1wb3J0IG9wZXJhdGlvbnMuXG4gKi9cbmludGVyZmFjZSBFeHBvcnRQYWNrYWdlIHtcbiAgZXhwb3J0VmVyc2lvbjogc3RyaW5nO1xuICBleHBvcnRlZEF0OiBzdHJpbmc7XG4gIGVsZW1lbnRUeXBlOiBzdHJpbmc7XG4gIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gIGZvcm1hdDogJ2pzb24nIHwgJ3lhbWwnO1xuICBkYXRhOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGFuZGxlIGVsZW1lbnQgZXhwb3J0IG9wZXJhdGlvbi5cbiAqIFJldHVybnMgYW4gRXhwb3J0UGFja2FnZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBpbXBvcnQgb3BlcmF0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlRXhwb3J0RWxlbWVudChcbiAgbWFwcGVkUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcmVnaXN0cnk6IEhhbmRsZXJSZWdpc3RyeVxuKTogUHJvbWlzZTxFeHBvcnRQYWNrYWdlPiB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWdpc3RyeS5lbGVtZW50Q1JVRDtcbiAgaWYgKCFoYW5kbGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbGVtZW50Q1JVRCBvcGVyYXRpb25zIG5vdCBhdmFpbGFibGU6IGhhbmRsZXIgbm90IGNvbmZpZ3VyZWQnKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZXhwb3J0YWJsZSBkYXRhIGZyb20gdGhlIGVsZW1lbnRcbiAgLy8gSXNzdWUgIzI5MDogVXNlIG1hcHBlZCBuYW1lcyAoZWxlbWVudE5hbWUsIGVsZW1lbnRUeXBlKSBmcm9tIHNjaGVtYSBtYXBUb1xuICBjb25zdCBuYW1lID0gbWFwcGVkUGFyYW1zLmVsZW1lbnROYW1lIGFzIHN0cmluZztcbiAgY29uc3QgdHlwZSA9IG1hcHBlZFBhcmFtcy5lbGVtZW50VHlwZSBhcyBzdHJpbmc7XG4gIGNvbnN0IGZvcm1hdCA9IChtYXBwZWRQYXJhbXMuZm9ybWF0IGFzICdqc29uJyB8ICd5YW1sJykgfHwgJ2pzb24nO1xuXG4gIC8vIFVzZSB0aGUgZWxlbWVudCBxdWVyeSBzZXJ2aWNlIHRvIGdldCBlbGVtZW50IGRldGFpbHNcbiAgY29uc3QgZWxlbWVudERldGFpbHMgPSBhd2FpdCBoYW5kbGVyLmdldEVsZW1lbnREZXRhaWxzKG5hbWUsIHR5cGUpO1xuICBpZiAoIWVsZW1lbnREZXRhaWxzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFbGVtZW50IG5vdCBmb3VuZDogJHt0eXBlfS8ke25hbWV9YCk7XG4gIH1cblxuICAvLyBCdWlsZCBleHBvcnQgcGFja2FnZSAobWF0Y2hlcyBNQ1BBUUxIYW5kbGVyLmhhbmRsZUV4cG9ydEVsZW1lbnQgZm9ybWF0KVxuICBjb25zdCBleHBvcnRQYWNrYWdlOiBFeHBvcnRQYWNrYWdlID0ge1xuICAgIGV4cG9ydFZlcnNpb246ICcxLjAnLFxuICAgIGV4cG9ydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBlbGVtZW50VHlwZTogdHlwZSxcbiAgICBlbGVtZW50TmFtZTogbmFtZSxcbiAgICBmb3JtYXQsXG4gICAgZGF0YTogJycsXG4gIH07XG5cbiAgLy8gU2VyaWFsaXplIHRvIHJlcXVlc3RlZCBmb3JtYXRcbiAgaWYgKGZvcm1hdCA9PT0gJ3lhbWwnKSB7XG4gICAgZXhwb3J0UGFja2FnZS5kYXRhID0geWFtbC5kdW1wKGVsZW1lbnREZXRhaWxzLCB7XG4gICAgICBpbmRlbnQ6IDIsXG4gICAgICBsaW5lV2lkdGg6IDEyMCxcbiAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBleHBvcnRQYWNrYWdlLmRhdGEgPSBKU09OLnN0cmluZ2lmeShlbGVtZW50RGV0YWlscywgbnVsbCwgMik7XG4gIH1cblxuICByZXR1cm4gZXhwb3J0UGFja2FnZTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgZWxlbWVudCBpbXBvcnQgb3BlcmF0aW9uLlxuICogUGFyc2VzIGV4cG9ydCBwYWNrYWdlIGFuZCBkZWxlZ2F0ZXMgdG8gRWxlbWVudENSVUQuXG4gKlxuICogU3VwcG9ydHMgdHdvIGV4cG9ydCBwYWNrYWdlIGZvcm1hdHM6XG4gKiAxLiBNQ1BBUUxIYW5kbGVyIGZvcm1hdDogeyBleHBvcnRWZXJzaW9uLCBlbGVtZW50VHlwZSwgZWxlbWVudE5hbWUsIGZvcm1hdCwgZGF0YSB9XG4gKiAyLiBMZWdhY3kgZm9ybWF0OiB7IHZlcnNpb24sIGVsZW1lbnQ6IHsgdHlwZSwgbmFtZSwgLi4uIH0gfVxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVJbXBvcnRFbGVtZW50KFxuICBtYXBwZWRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICByZWdpc3RyeTogSGFuZGxlclJlZ2lzdHJ5XG4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZ2lzdHJ5LmVsZW1lbnRDUlVEO1xuICBpZiAoIWhhbmRsZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnRDUlVEIG9wZXJhdGlvbnMgbm90IGF2YWlsYWJsZTogaGFuZGxlciBub3QgY29uZmlndXJlZCcpO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IG1hcHBlZFBhcmFtcy5kYXRhO1xuICBjb25zdCBvdmVyd3JpdGUgPSBtYXBwZWRQYXJhbXMub3ZlcndyaXRlIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLy8gUGFyc2UgdGhlIGV4cG9ydCBwYWNrYWdlIChhY2NlcHQgc3RyaW5nIG9yIGFscmVhZHktcGFyc2VkIG9iamVjdClcbiAgbGV0IGV4cG9ydFBhY2thZ2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4cG9ydFBhY2thZ2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cG9ydCBwYWNrYWdlOiBub3QgdmFsaWQgSlNPTicpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgIGV4cG9ydFBhY2thZ2UgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHBvcnQgcGFja2FnZTogZGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIGVsZW1lbnQgZGV0YWlscyBiYXNlZCBvbiBwYWNrYWdlIGZvcm1hdFxuICBsZXQgZWxlbWVudFR5cGU6IHN0cmluZztcbiAgbGV0IGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gIGxldCBlbGVtZW50RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgaWYgKGV4cG9ydFBhY2thZ2UuZWxlbWVudFR5cGUgJiYgZXhwb3J0UGFja2FnZS5kYXRhKSB7XG4gICAgLy8gTUNQQVFMSGFuZGxlciBmb3JtYXQ6IHsgZXhwb3J0VmVyc2lvbiwgZWxlbWVudFR5cGUsIGVsZW1lbnROYW1lLCBmb3JtYXQsIGRhdGEgfVxuICAgIGVsZW1lbnRUeXBlID0gZXhwb3J0UGFja2FnZS5lbGVtZW50VHlwZSBhcyBzdHJpbmc7XG4gICAgZWxlbWVudE5hbWUgPSBleHBvcnRQYWNrYWdlLmVsZW1lbnROYW1lIGFzIHN0cmluZztcbiAgICBjb25zdCBmb3JtYXQgPSBleHBvcnRQYWNrYWdlLmZvcm1hdCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBQYXJzZSB0aGUgbmVzdGVkIGRhdGEgZmllbGQgYmFzZWQgb24gZm9ybWF0XG4gICAgY29uc3QgbmVzdGVkRGF0YSA9IGV4cG9ydFBhY2thZ2UuZGF0YTtcbiAgICBpZiAodHlwZW9mIG5lc3RlZERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAneWFtbCcpIHtcbiAgICAgICAgICAvLyBVc2UgU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwgZm9yIHNhZmUgWUFNTCBwYXJzaW5nIChDT1JFX1NDSEVNQSwgc2l6ZSBsaW1pdHMpXG4gICAgICAgICAgZWxlbWVudERhdGEgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlUmF3WWFtbChuZXN0ZWREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50RGF0YSA9IEpTT04ucGFyc2UobmVzdGVkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZXhwb3J0IHBhY2thZ2U6IGRhdGEgZmllbGQgaXMgbm90IHZhbGlkICR7Zm9ybWF0IHx8ICdKU09OJ31gKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXN0ZWREYXRhID09PSAnb2JqZWN0JyAmJiBuZXN0ZWREYXRhICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50RGF0YSA9IG5lc3RlZERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHBvcnQgcGFja2FnZTogZGF0YSBmaWVsZCBtdXN0IGJlIHN0cmluZyBvciBvYmplY3QnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwb3J0UGFja2FnZS5lbGVtZW50KSB7XG4gICAgLy8gTGVnYWN5IGZvcm1hdDogeyB2ZXJzaW9uLCBlbGVtZW50OiB7IHR5cGUsIG5hbWUsIC4uLiB9IH1cbiAgICBjb25zdCBlbGVtZW50ID0gZXhwb3J0UGFja2FnZS5lbGVtZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGVsZW1lbnRUeXBlID0gZWxlbWVudC50eXBlIGFzIHN0cmluZztcbiAgICBlbGVtZW50TmFtZSA9IGVsZW1lbnQubmFtZSBhcyBzdHJpbmc7XG4gICAgZWxlbWVudERhdGEgPSBlbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHBvcnQgcGFja2FnZTogbWlzc2luZyBlbGVtZW50IGRhdGEnKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMgd2hlbiBvdmVyd3JpdGUgaXMgZmFsc2VcbiAgaWYgKCFvdmVyd3JpdGUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBoYW5kbGVyLmdldEVsZW1lbnREZXRhaWxzKGVsZW1lbnROYW1lLCBlbGVtZW50VHlwZSk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFbGVtZW50ICcke2VsZW1lbnROYW1lfScgYWxyZWFkeSBleGlzdHMuIFVzZSBvdmVyd3JpdGU6IHRydWUgdG8gcmVwbGFjZS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gRWxlbWVudCBkb2Vzbid0IGV4aXN0LCB3aGljaCBpcyB3aGF0IHdlIHdhbnRcbiAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBFcnJvcikgfHwgIWUubWVzc2FnZS5pbmNsdWRlcygnbm90IGZvdW5kJykpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIGVsZW1lbnRcbiAgcmV0dXJuIGhhbmRsZXIuY3JlYXRlRWxlbWVudCh7XG4gICAgbmFtZTogKGVsZW1lbnREYXRhLm5hbWUgYXMgc3RyaW5nKSB8fCBlbGVtZW50TmFtZSxcbiAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICBkZXNjcmlwdGlvbjogKGVsZW1lbnREYXRhLmRlc2NyaXB0aW9uIGFzIHN0cmluZykgfHwgJycsXG4gICAgY29udGVudDogZWxlbWVudERhdGEuY29udGVudCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgaW5zdHJ1Y3Rpb25zOiBlbGVtZW50RGF0YS5pbnN0cnVjdGlvbnMgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG1ldGFkYXRhOiBlbGVtZW50RGF0YS5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1haW4gRGlzcGF0Y2hlclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNjaGVtYURpc3BhdGNoZXIgLSBEaXNwYXRjaCBvcGVyYXRpb25zIHVzaW5nIHNjaGVtYSBkZWZpbml0aW9uc1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIGNvcmUgZGlzcGF0Y2ggbG9naWMgZm9yIHNjaGVtYS1kcml2ZW4gb3BlcmF0aW9ucy5cbiAqIEl0IHJlcGxhY2VzIHRoZSBtYW51YWwgZGlzcGF0Y2ggbWV0aG9kcyBpbiBNQ1BBUUxIYW5kbGVyIGZvciBvcGVyYXRpb25zXG4gKiB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFEaXNwYXRjaGVyIHtcbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9wZXJhdGlvbiBjYW4gYmUgaGFuZGxlZCBieSBzY2hlbWEgZGlzcGF0Y2hcbiAgICovXG4gIHN0YXRpYyBjYW5EaXNwYXRjaChvcGVyYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1NjaGVtYU9wZXJhdGlvbihvcGVyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFuIG9wZXJhdGlvbiB1c2luZyBpdHMgc2NoZW1hIGRlZmluaXRpb25cbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbiAtIE9wZXJhdGlvbiBuYW1lIChlLmcuLCAnYnJvd3NlX2NvbGxlY3Rpb24nKVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gT3BlcmF0aW9uIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHJlZ2lzdHJ5IC0gSGFuZGxlciByZWdpc3RyeSB3aXRoIGFsbCBjb25maWd1cmVkIGhhbmRsZXJzXG4gICAqIEBwYXJhbSBpbnB1dCAtIE9wdGlvbmFsIGZ1bGwgT3BlcmF0aW9uSW5wdXQgZm9yIHNvdXJjZSByZXNvbHV0aW9uXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIG9wZXJhdGlvbiByZXN1bHRcbiAgICogQHRocm93cyBFcnJvciBpZiBvcGVyYXRpb24gbm90IGZvdW5kLCBoYW5kbGVyIG1pc3NpbmcsIG9yIHBhcmFtcyBpbnZhbGlkXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZGlzcGF0Y2goXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICByZWdpc3RyeTogSGFuZGxlclJlZ2lzdHJ5LFxuICAgIGlucHV0PzogT3BlcmF0aW9uSW5wdXRcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLy8gR2V0IHNjaGVtYSBkZWZpbml0aW9uXG4gICAgY29uc3Qgc2NoZW1hID0gZ2V0T3BlcmF0aW9uU2NoZW1hKG9wZXJhdGlvbik7XG4gICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc2NoZW1hIGRlZmluaXRpb24gZm91bmQgZm9yIG9wZXJhdGlvbiAnJHtvcGVyYXRpb259J2ApO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IG5vcm1hbGl6ZXIgaWYgc2NoZW1hIHNwZWNpZmllcyBvbmUgKElzc3VlICMyNDMpXG4gICAgLy8gTm9ybWFsaXplcnMgdHJhbnNmb3JtIHJhdyBpbnB1dCBwYXJhbXMgYmVmb3JlIHZhbGlkYXRpb24gYW5kIGRpc3BhdGNoXG4gICAgaWYgKHNjaGVtYS5ub3JtYWxpemVyKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVyID0gTm9ybWFsaXplclJlZ2lzdHJ5LmdldChzY2hlbWEubm9ybWFsaXplcik7XG4gICAgICBpZiAoIW5vcm1hbGl6ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBOb3JtYWxpemVyICcke3NjaGVtYS5ub3JtYWxpemVyfScgbm90IGZvdW5kIGZvciBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScuIGAgK1xuICAgICAgICAgIGBSZWdpc3RlcmVkIG5vcm1hbGl6ZXJzOiBbJHtOb3JtYWxpemVyUmVnaXN0cnkubGlzdCgpLmpvaW4oJywgJykgfHwgJ25vbmUnfV1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIG5vcm1hbGl6ZXIgY29udGV4dCBmb3IgZGVidWdnaW5nIGFuZCBmdXR1cmUgZXh0ZW5zaWJpbGl0eVxuICAgICAgY29uc3Qgbm9ybWFsaXplckNvbnRleHQ6IE5vcm1hbGl6ZXJDb250ZXh0ID0ge1xuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIGVuZHBvaW50OiBzY2hlbWEuZW5kcG9pbnQsXG4gICAgICAgIGhhbmRsZXI6IHNjaGVtYS5oYW5kbGVyLFxuICAgICAgICBtZXRob2Q6IHNjaGVtYS5tZXRob2QsXG4gICAgICAgIGVsZW1lbnRUeXBlOiBpbnB1dD8uZWxlbWVudFR5cGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBOb3JtYWxpemUgcGFyYW1zIC0gdGhpcyBtYXkgdHJhbnNmb3JtLCB2YWxpZGF0ZSwgb3IgZW5yaWNoIHBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5vcm1hbGl6ZXIubm9ybWFsaXplKHBhcmFtcywgbm9ybWFsaXplckNvbnRleHQpO1xuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIG5vcm1hbGl6ZWQgcGFyYW1zIGZvciB0aGUgcmVzdCBvZiBkaXNwYXRjaFxuICAgICAgcGFyYW1zID0gcmVzdWx0LnBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCBmdWxsIGlucHV0IGNvbnRleHQgZm9yIHNvdXJjZSByZXNvbHV0aW9uXG4gICAgY29uc3QgbmVlZHNJbnB1dCA9IHNjaGVtYS5uZWVkc0Z1bGxJbnB1dCAmJiBpbnB1dDtcblxuICAgIC8vIEhhbmRsZSBzcGVjaWFsIG9wZXJhdGlvbnNcbiAgICBpZiAoc2NoZW1hLm1ldGhvZCA9PT0gJ19faW50cm9zcGVjdF9fJykge1xuICAgICAgcmV0dXJuIGhhbmRsZUludHJvc3BlY3Rpb24ocGFyYW1zKTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLm1ldGhvZCA9PT0gJ19fYnVpbGRJbmZvX18nKSB7XG4gICAgICByZXR1cm4gaGFuZGxlQnVpbGRJbmZvKHJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLm1ldGhvZCA9PT0gJ19fY2FjaGVCdWRnZXRfXycpIHtcbiAgICAgIHJldHVybiBoYW5kbGVDYWNoZUJ1ZGdldFJlcG9ydChyZWdpc3RyeSk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5tZXRob2QgPT09ICdfX2NhcGFiaWxpdGllc19fJykge1xuICAgICAgcmV0dXJuIGhhbmRsZUNhcGFiaWxpdGllcyhwYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIE1hcCBwYXJhbXMgYWNjb3JkaW5nIHRvIHNjaGVtYSAod2l0aCBpbnB1dCBjb250ZXh0IGFuZCBwYXJhbSBzdHlsZSlcbiAgICAvLyBGb3Igb3BlcmF0aW9ucyB3aXRoIG5vcm1hbGl6ZXJzLCB0aGUgbm9ybWFsaXplZCBwYXJhbXMgQVJFIHRoZSBtYXBwZWQgcGFyYW1zXG4gICAgLy8gKHRoZSBub3JtYWxpemVyIGFscmVhZHkgdHJhbnNmb3JtcyBpbnB1dCB0byBoYW5kbGVyLXJlYWR5IGZvcm1hdClcbiAgICBjb25zdCBtYXBwZWRQYXJhbXMgPSBzY2hlbWEubm9ybWFsaXplclxuICAgICAgPyBwYXJhbXMgIC8vIE5vcm1hbGl6ZXIgYWxyZWFkeSBwcm9kdWNlZCB0aGUgY29ycmVjdCBvdXRwdXQgZm9ybWF0XG4gICAgICA6IHNjaGVtYS5wYXJhbXNcbiAgICAgICAgPyBtYXBQYXJhbXMocGFyYW1zLCBzY2hlbWEucGFyYW1zLCBuZWVkc0lucHV0ID8gaW5wdXQgOiB1bmRlZmluZWQsIHNjaGVtYS5wYXJhbVN0eWxlKVxuICAgICAgICA6IHt9O1xuXG4gICAgLy8gVmFsaWRhdGUgcGFyYW1zOiByZXF1aXJlZCBwYXJhbXMgZmlyc3QsIHRoZW4gdHlwZSB2YWxpZGF0aW9uIChJc3N1ZSAjMjU1KVxuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBmb3Igbm9ybWFsaXplZCBvcGVyYXRpb25zIChub3JtYWxpemVyIGhhbmRsZXMgdmFsaWRhdGlvbilcbiAgICBpZiAoc2NoZW1hLnBhcmFtcyAmJiAhc2NoZW1hLm5vcm1hbGl6ZXIpIHtcbiAgICAgIHZhbGlkYXRlUmVxdWlyZWRQYXJhbXMocGFyYW1zLCBzY2hlbWEucGFyYW1zLCBvcGVyYXRpb24sIG5lZWRzSW5wdXQgPyBpbnB1dCA6IHVuZGVmaW5lZCk7XG4gICAgICB2YWxpZGF0ZVBhcmFtVHlwZXMocGFyYW1zLCBzY2hlbWEucGFyYW1zLCBvcGVyYXRpb24pO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzcGVjaWFsIEVsZW1lbnRDUlVEIG9wZXJhdGlvbnNcbiAgICBpZiAoc2NoZW1hLm1ldGhvZCA9PT0gJ19fZXhwb3J0X18nKSB7XG4gICAgICByZXR1cm4gaGFuZGxlRXhwb3J0RWxlbWVudChtYXBwZWRQYXJhbXMsIHJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLm1ldGhvZCA9PT0gJ19faW1wb3J0X18nKSB7XG4gICAgICByZXR1cm4gaGFuZGxlSW1wb3J0RWxlbWVudChtYXBwZWRQYXJhbXMsIHJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICAvLyBHZXQgaGFuZGxlciBmcm9tIHJlZ2lzdHJ5XG4gICAgY29uc3QgaGFuZGxlciA9IGdldEhhbmRsZXIoXG4gICAgICByZWdpc3RyeSxcbiAgICAgIHNjaGVtYS5oYW5kbGVyLFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgc2NoZW1hLm9wdGlvbmFsID8/IGZhbHNlXG4gICAgKTtcblxuICAgIC8vIEdldCBtZXRob2QgZnJvbSBoYW5kbGVyXG4gICAgY29uc3QgbWV0aG9kID0gZ2V0TWV0aG9kKGhhbmRsZXIsIHNjaGVtYS5tZXRob2QsIHNjaGVtYS5oYW5kbGVyLCBvcGVyYXRpb24pO1xuXG4gICAgLy8gQnVpbGQgYXJndW1lbnRzIGJhc2VkIG9uIGFyZ0J1aWxkZXIgdHlwZSAod2l0aCBpbnB1dCBjb250ZXh0IGlmIG5lZWRlZClcbiAgICBjb25zdCBhcmdzID0gYnVpbGRBcmdzKHBhcmFtcywgc2NoZW1hLCBtYXBwZWRQYXJhbXMsIG5lZWRzSW5wdXQgPyBpbnB1dCA6IHVuZGVmaW5lZCk7XG5cbiAgICAvLyBDYWxsIHRoZSBoYW5kbGVyIG1ldGhvZFxuICAgIC8vIE5vdGU6IEZpZWxkIHNlbGVjdGlvbiBpcyBhcHBsaWVkIGF0IE1DUEFRTEhhbmRsZXIgbGV2ZWwgKElzc3VlICMyMDIpXG4gICAgcmV0dXJuIG1ldGhvZCguLi5hcmdzKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFeHBvcnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB7IGlzU2NoZW1hT3BlcmF0aW9uLCBnZXRPcGVyYXRpb25TY2hlbWEgfTtcblxuLy8gVGVzdCBleHBvcnRzIGZvciBzZWN1cml0eSBib3VuZGFyeSB2ZXJpZmljYXRpb25cbmV4cG9ydCBjb25zdCBfX3Rlc3RfXyA9IHtcbiAgZ2V0TmVzdGVkVmFsdWUsXG4gIFNBRkVfUEFUSF9QQVRURVJOLFxuICBGT1JCSURERU5fUEFUSFMsXG59O1xuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -369,7 +369,17 @@ export function describeInvalidInput(input) {
|
|
|
369
369
|
else if (typeof obj.operation !== 'string') {
|
|
370
370
|
hints.push(`"operation" is ${typeof obj.operation}, expected string`);
|
|
371
371
|
}
|
|
372
|
+
// Check for content that may have caused parsing issues.
|
|
373
|
+
// Threshold: content over this length is more likely to have JSON-encoding
|
|
374
|
+
// issues with markdown/special characters. Not a limit — just a diagnostic signal.
|
|
375
|
+
const CONTENT_DIAGNOSTIC_THRESHOLD = 80;
|
|
376
|
+
if (obj.params && typeof obj.params === 'object') {
|
|
377
|
+
const params = obj.params;
|
|
378
|
+
if (typeof params.content === 'string' && params.content.length > CONTENT_DIAGNOSTIC_THRESHOLD) {
|
|
379
|
+
hints.push(`content field is ${params.content.length} chars — if content contains markdown or special characters, ensure it is properly JSON-encoded`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
372
382
|
const hintStr = hints.length > 0 ? ` (${hints.join('; ')})` : '';
|
|
373
383
|
return `Received: { ${keyPreview} }${hintStr}`;
|
|
374
384
|
}
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvbWNwLWFxbC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLENBQU4sSUFBWSxXQU9YO0FBUEQsV0FBWSxXQUFXO0lBQ3JCLGtDQUFtQixDQUFBO0lBQ25CLDhCQUFlLENBQUE7SUFDZixvQ0FBcUIsQ0FBQTtJQUNyQiw4QkFBZSxDQUFBO0lBQ2YsZ0NBQWlCLENBQUE7SUFDakIsb0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVBXLFdBQVcsS0FBWCxXQUFXLFFBT3RCO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sZUFBZSxHQUFnQztJQUNuRCxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLE9BQU87SUFDM0QsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLO0lBQ25ELFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsUUFBUTtJQUMvRCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUs7SUFDbkQsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNO0lBQ3hELFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsUUFBUTtDQUNoRSxDQUFDO0FBRUYsK0VBQStFO0FBQy9FLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVB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SUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxJQUFJLENBQUMsTUFBTSxjQUFjO1FBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMxQyxDQUFDO1NBQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsT0FBTyxHQUFHLENBQUMsU0FBUyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNqRSxPQUFPLGVBQWUsVUFBVSxLQUFLLE9BQU8sRUFBRSxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyBmb3IgTUNQLUFRTCAoTUNQIEFnZW50IFF1ZXJ5IExhbmd1YWdlKVxuICogVGhlc2UgdHlwZXMgbWF0Y2ggdGhlIEdyYXBoUUwgc2NoZW1hIGRlZmluZWQgaW4gc2NoZW1hLmdyYXBocWxcbiAqL1xuXG5pbXBvcnQgeyBFTEVNRU5UX1RZUEVfTUFQIH0gZnJvbSAnLi4vLi4vdXRpbHMvZWxlbWVudFR5cGVOb3JtYWxpemF0aW9uLmpzJztcblxuLyoqXG4gKiBFbGVtZW50IHR5cGVzIHN1cHBvcnRlZCBieSBEb2xsaG91c2VNQ1AuXG4gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSA2IGNvcmUgZWxlbWVudCB0eXBlcyBpbiB0aGUgc3lzdGVtLlxuICovXG5leHBvcnQgZW51bSBFbGVtZW50VHlwZSB7XG4gIFBlcnNvbmEgPSAncGVyc29uYScsXG4gIFNraWxsID0gJ3NraWxsJyxcbiAgVGVtcGxhdGUgPSAndGVtcGxhdGUnLFxuICBBZ2VudCA9ICdhZ2VudCcsXG4gIE1lbW9yeSA9ICdtZW1vcnknLFxuICBFbnNlbWJsZSA9ICdlbnNlbWJsZScsXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFueSBlbGVtZW50IHR5cGUgc3RyaW5nIChzaW5ndWxhciBvciBwbHVyYWwpIHRvIGFuIE1DUC1BUUwgRWxlbWVudFR5cGUgdmFsdWUuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBmb3IgdW5yZWNvZ25pc2VkIGlucHV0LlxuICogSXNzdWUgIzQzMzogQWNjZXB0IGJvdGggXCJtZW1vcnlcIiBhbmQgXCJtZW1vcmllc1wiIGF0IHRoZSBpbnB1dCBwYXJzaW5nIGxheWVyLlxuICovXG5jb25zdCBNQ1BBUUxfVFlQRV9NQVA6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnRUeXBlPiA9IHtcbiAgcGVyc29uYTogRWxlbWVudFR5cGUuUGVyc29uYSwgcGVyc29uYXM6IEVsZW1lbnRUeXBlLlBlcnNvbmEsXG4gIHNraWxsOiBFbGVtZW50VHlwZS5Ta2lsbCwgc2tpbGxzOiBFbGVtZW50VHlwZS5Ta2lsbCxcbiAgdGVtcGxhdGU6IEVsZW1lbnRUeXBlLlRlbXBsYXRlLCB0ZW1wbGF0ZXM6IEVsZW1lbnRUeXBlLlRlbXBsYXRlLFxuICBhZ2VudDogRWxlbWVudFR5cGUuQWdlbnQsIGFnZW50czogRWxlbWVudFR5cGUuQWdlbnQsXG4gIG1lbW9yeTogRWxlbWVudFR5cGUuTWVtb3J5LCBtZW1vcmllczogRWxlbWVudFR5cGUuTWVtb3J5LFxuICBlbnNlbWJsZTogRWxlbWVudFR5cGUuRW5zZW1ibGUsIGVuc2VtYmxlczogRWxlbWVudFR5cGUuRW5zZW1ibGUsXG59O1xuXG4vLyBSdW50aW1lIHZhbGlkYXRpb246IGV2ZXJ5IE1DUC1BUUwgRWxlbWVudFR5cGUgbXVzdCBhcHBlYXIgaW4gTUNQQVFMX1RZUEVfTUFQXG5mb3IgKGNvbnN0IGVudW1WYWx1ZSBvZiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSkge1xuICBpZiAoIU9iamVjdC52YWx1ZXMoTUNQQVFMX1RZUEVfTUFQKS5pbmNsdWRlcyhlbnVtVmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1DUC1BUUwgdHlwZXM6IEVsZW1lbnRUeXBlICcke2VudW1WYWx1ZX0nIGlzIG1pc3NpbmcgZnJvbSBNQ1BBUUxfVFlQRV9NQVAuIGAgK1xuICAgICAgYFVwZGF0ZSBNQ1BBUUxfVFlQRV9NQVAgdG8gaW5jbHVkZSBib3RoIHNpbmd1bGFyIGFuZCBwbHVyYWwgZW50cmllcyBmb3IgdGhpcyB0eXBlLmBcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVNQ1BBUUxFbGVtZW50VHlwZSh2YWx1ZTogc3RyaW5nKTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gTUNQQVFMX1RZUEVfTUFQW3ZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXTtcbn1cblxuLyoqXG4gKiBJbnB1dCBmb3IgYWxsIE1DUC1BUUwgb3BlcmF0aW9ucy5cbiAqIFRoZSBvcGVyYXRpb24gZmllbGQgZGV0ZXJtaW5lcyB3aGljaCBoYW5kbGVyIGZ1bmN0aW9uIGlzIGludm9rZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uSW5wdXQge1xuICAvKipcbiAgICogVGhlIG9wZXJhdGlvbiB0byBwZXJmb3JtIChlLmcuLCAnY3JlYXRlX2VsZW1lbnQnLCAnbGlzdF9lbGVtZW50cycpXG4gICAqL1xuICBvcGVyYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogRWxlbWVudCB0eXBlIGZvciBlbGVtZW50IG9wZXJhdGlvbnMgKHNuYWtlX2Nhc2UsIElzc3VlICMyOTApXG4gICAqL1xuICBlbGVtZW50X3R5cGU/OiBFbGVtZW50VHlwZTtcblxuICAvKipcbiAgICogRWxlbWVudCB0eXBlIGZvciBlbGVtZW50IG9wZXJhdGlvbnMgKGNhbWVsQ2FzZSwgbGVnYWN5KVxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZWxlbWVudF90eXBlIGluc3RlYWRcbiAgICovXG4gIGVsZW1lbnRUeXBlPzogRWxlbWVudFR5cGU7XG5cbiAgLyoqXG4gICAqIE9wZXJhdGlvbi1zcGVjaWZpYyBwYXJhbWV0ZXJzIGFzIGEgSlNPTiBvYmplY3RcbiAgICovXG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEJhdGNoIHJlcXVlc3QgY29udGFpbmluZyBtdWx0aXBsZSBvcGVyYXRpb25zIHRvIGV4ZWN1dGUgaW4gc2VxdWVuY2UuXG4gKiBPcGVyYXRpb25zIGFyZSBleGVjdXRlZCBpbiBvcmRlciwgYW5kIGZhaWx1cmVzIGRvIG5vdCBzdG9wIGV4ZWN1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXRjaFJlcXVlc3Qge1xuICAvKipcbiAgICogQXJyYXkgb2Ygb3BlcmF0aW9ucyB0byBleGVjdXRlIGluIHNlcXVlbmNlXG4gICAqL1xuICBvcGVyYXRpb25zOiBBcnJheTx7XG4gICAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gICAgZWxlbWVudF90eXBlPzogRWxlbWVudFR5cGU7XG4gICAgZWxlbWVudFR5cGU/OiBFbGVtZW50VHlwZTtcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT47XG59XG5cbi8qKlxuICogSW5kaXZpZHVhbCByZXN1bHQgaW4gYSBiYXRjaCBvcGVyYXRpb24gcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXRjaE9wZXJhdGlvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBJbmRleCBvZiB0aGUgb3BlcmF0aW9uIGluIHRoZSBiYXRjaCAoMC1iYXNlZClcbiAgICovXG4gIGluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE9wZXJhdGlvbiB0aGF0IHdhcyBleGVjdXRlZFxuICAgKi9cbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqL1xuICByZXN1bHQ6IE9wZXJhdGlvblJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBiYXRjaCBvcGVyYXRpb24gcmVxdWVzdC5cbiAqIHN1Y2Nlc3M9ZmFsc2Ugd2hlbiB0aGUgYmF0Y2ggaXRzZWxmIGlzIHJlamVjdGVkIChlLmcuIGV4Y2VlZHMgc2l6ZSBsaW1pdCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBpbmRpdmlkdWFsIG9wZXJhdGlvbiByZXN1bHRzXG4gICAqL1xuICByZXN1bHRzOiBCYXRjaE9wZXJhdGlvblJlc3VsdFtdO1xuXG4gIC8qKlxuICAgKiBTdW1tYXJ5IHN0YXRpc3RpY3NcbiAgICovXG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHN1Y2NlZWRlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICB9O1xuXG4gIC8qKiBCYXRjaC1sZXZlbCBlcnJvciBtZXNzYWdlIChwcmVzZW50IHdoZW4gc3VjY2Vzcz1mYWxzZSkgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG5cbiAgLyoqIFJlcXVlc3QgY29ycmVsYXRpb24gYW5kIHRpbWluZyBtZXRhZGF0YSBmb3IgdGhlIG92ZXJhbGwgYmF0Y2ggKElzc3VlICMzMDEpICovXG4gIF9tZXRhOiBSZXNwb25zZU1ldGE7XG59XG5cbi8qKlxuICogU3VjY2Vzc2Z1bCBvcGVyYXRpb24gcmVzdWx0LlxuICogRGF0YSBjb250YWlucyB0aGUgb3BlcmF0aW9uLXNwZWNpZmljIHJlc3VsdCBwYXlsb2FkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvblN1Y2Nlc3Mge1xuICBzdWNjZXNzOiB0cnVlO1xuICAvKiogT3BlcmF0aW9uLXNwZWNpZmljIHJlc3VsdCBwYXlsb2FkICovXG4gIGRhdGE6IHVua25vd247XG4gIC8qKiBSZXF1ZXN0IGNvcnJlbGF0aW9uIGFuZCB0aW1pbmcgbWV0YWRhdGEgKElzc3VlICMzMDEpICovXG4gIF9tZXRhOiBSZXNwb25zZU1ldGE7XG4gIGVycm9yPzogbmV2ZXI7XG59XG5cbi8qKlxuICogRmFpbGVkIG9wZXJhdGlvbiByZXN1bHQuXG4gKiBFcnJvciBjb250YWlucyBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uRmFpbHVyZSB7XG4gIHN1Y2Nlc3M6IGZhbHNlO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZSAqL1xuICBlcnJvcjogc3RyaW5nO1xuICAvKiogUmVxdWVzdCBjb3JyZWxhdGlvbiBhbmQgdGltaW5nIG1ldGFkYXRhIChJc3N1ZSAjMzAxKSAqL1xuICBfbWV0YTogUmVzcG9uc2VNZXRhO1xuICBkYXRhPzogbmV2ZXI7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgcmVzdWx0IHR5cGUgZm9yIGFsbCBNQ1AtQVFMIG9wZXJhdGlvbnMuXG4gKiBEaXNjcmltaW5hdGVkIHVuaW9uIGVuc3VyZXMgdHlwZSBzYWZldHk6XG4gKiAtIHN1Y2Nlc3M6IHRydWUg4oaSIGRhdGEgaXMgcHJlc2VudCwgZXJyb3IgaXMgYWJzZW50XG4gKiAtIHN1Y2Nlc3M6IGZhbHNlIOKGkiBlcnJvciBpcyBwcmVzZW50LCBkYXRhIGlzIGFic2VudFxuICovXG5leHBvcnQgdHlwZSBPcGVyYXRpb25SZXN1bHQgPSBPcGVyYXRpb25TdWNjZXNzIHwgT3BlcmF0aW9uRmFpbHVyZTtcblxuLyoqXG4gKiBSZXNwb25zZSBtZXRhZGF0YSBmb3IgcmVxdWVzdCBjb3JyZWxhdGlvbiBhbmQgdGltaW5nLlxuICogSW5jbHVkZWQgaW4gZXZlcnkgb3BlcmF0aW9uIHJlc3BvbnNlIHRvIGVuYWJsZSBsb2cgY29ycmVsYXRpb24gYW5kIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuXG4gKiBJc3N1ZSAjMzAxOiBSZXF1ZXN0IElEcyBhbmQgZGlzdHJpYnV0ZWQgdHJhY2luZyBzdXBwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlTWV0YSB7XG4gIC8qKiBDb3JyZWxhdGlvbiBJRCBmcm9tIENvbnRleHRUcmFja2VyIChtYXRjaGVzIGNvcnJlbGF0aW9uSWQgaW4gbG9nIGVudHJpZXMpICovXG4gIHJlcXVlc3RJZDogc3RyaW5nO1xuICAvKiogV2FsbC1jbG9jayBtaWxsaXNlY29uZHMgZm9yIHRoZSBvcGVyYXRpb24gKi9cbiAgZHVyYXRpb25NczogbnVtYmVyO1xuICAvKiogSVNPIDg2MDEgcmVzcG9uc2UgdGltZXN0YW1wICovXG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wZXJhdGlvbiBjYXRlZ29yaWVzIG1hcHBlZCB0byB0aGVpciBzYWZldHkgYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25TYWZldHkge1xuICByZWFkT25seTogYm9vbGVhbjtcbiAgZGVzdHJ1Y3RpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWFwIG9mIGVuZHBvaW50IG5hbWVzIHRvIHRoZWlyIHNhZmV0eSBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgY29uc3QgRU5EUE9JTlRfU0FGRVRZOiBSZWNvcmQ8c3RyaW5nLCBPcGVyYXRpb25TYWZldHk+ID0ge1xuICBtY3BfYXFsX2NyZWF0ZToge1xuICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICBkZXN0cnVjdGl2ZTogZmFsc2UsXG4gIH0sXG4gIG1jcF9hcWxfcmVhZDoge1xuICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIGRlc3RydWN0aXZlOiBmYWxzZSxcbiAgfSxcbiAgbWNwX2FxbF91cGRhdGU6IHtcbiAgICByZWFkT25seTogZmFsc2UsXG4gICAgZGVzdHJ1Y3RpdmU6IHRydWUsXG4gIH0sXG4gIG1jcF9hcWxfZGVsZXRlOiB7XG4gICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgIGRlc3RydWN0aXZlOiB0cnVlLFxuICB9LFxufTtcblxuLyoqXG4gKiBPcGVyYXRpb24gbmFtZXMgZ3JvdXBlZCBieSBlbmRwb2ludFxuICovXG5leHBvcnQgY29uc3QgRU5EUE9JTlRfT1BFUkFUSU9OUyA9IHtcbiAgY3JlYXRlOiBbJ2NyZWF0ZV9lbGVtZW50JywgJ2ltcG9ydF9lbGVtZW50JywgJ2FkZEVudHJ5JywgJ2FjdGl2YXRlX2VsZW1lbnQnXSxcbiAgcmVhZDogW1xuICAgICdsaXN0X2VsZW1lbnRzJyxcbiAgICAnZ2V0X2VsZW1lbnQnLFxuICAgICdzZWFyY2hfZWxlbWVudHMnLFxuICAgICdxdWVyeV9lbGVtZW50cycsXG4gICAgJ2dldF9hY3RpdmVfZWxlbWVudHMnLFxuICAgICd2YWxpZGF0ZV9lbGVtZW50JyxcbiAgICAncmVuZGVyJyxcbiAgICAnZXhwb3J0X2VsZW1lbnQnLFxuICAgICdkZWFjdGl2YXRlX2VsZW1lbnQnLFxuICAgICdpbnRyb3NwZWN0JyxcbiAgXSxcbiAgdXBkYXRlOiBbJ2VkaXRfZWxlbWVudCddLFxuICBkZWxldGU6IFsnZGVsZXRlX2VsZW1lbnQnLCAnZXhlY3V0ZV9hZ2VudCcsICdjbGVhciddLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgRWxlbWVudFR5cGUuXG4gKiBBY2NlcHRzIGJvdGggc2luZ3VsYXIgKFwibWVtb3J5XCIpIGFuZCBwbHVyYWwgKFwibWVtb3JpZXNcIikgZm9ybXMuXG4gKiBJc3N1ZSAjNDMzOiBVc2VycyBhbmQgTExNcyBuYXR1cmFsbHkgdXNlIGVpdGhlciBmb3JtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50VHlwZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVsZW1lbnRUeXBlIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgLy8gQWNjZXB0IGNhbm9uaWNhbCBNQ1AtQVFMIHNpbmd1bGFyIHZhbHVlc1xuICBpZiAoT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModmFsdWUgYXMgRWxlbWVudFR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gQWxzbyBhY2NlcHQgcGx1cmFsIHBvcnRmb2xpby1sYXllciB2YWx1ZXMgKElzc3VlICM0MzMpXG4gIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpIGluIEVMRU1FTlRfVFlQRV9NQVA7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCBPcGVyYXRpb25JbnB1dFxuICogSXNzdWUgIzI5MDogQWNjZXB0cyBib3RoIGVsZW1lbnRfdHlwZSAoc25ha2VfY2FzZSkgYW5kIGVsZW1lbnRUeXBlIChjYW1lbENhc2UpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09wZXJhdGlvbklucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgT3BlcmF0aW9uSW5wdXQge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0ID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gb3BlcmF0aW9uIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nXG4gIGlmICh0eXBlb2YgaW5wdXQub3BlcmF0aW9uICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElzc3VlICMyOTA6IEFjY2VwdCBib3RoIGVsZW1lbnRfdHlwZSBhbmQgZWxlbWVudFR5cGVcbiAgLy8gZWxlbWVudFR5cGUvZWxlbWVudF90eXBlIGlzIG9wdGlvbmFsIGJ1dCBtdXN0IGJlIGEgdmFsaWQgRWxlbWVudFR5cGUgaWYgcHJlc2VudFxuICBjb25zdCBlbGVtZW50VHlwZVZhbHVlID0gaW5wdXQuZWxlbWVudF90eXBlID8/IGlucHV0LmVsZW1lbnRUeXBlO1xuICBpZiAoZWxlbWVudFR5cGVWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFpc0VsZW1lbnRUeXBlKGVsZW1lbnRUeXBlVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gcGFyYW1zIGlzIG9wdGlvbmFsIGJ1dCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IChub3QgYXJyYXksIG5vdCBudWxsKSBpZiBwcmVzZW50XG4gIGlmIChcbiAgICBpbnB1dC5wYXJhbXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICh0eXBlb2YgaW5wdXQucGFyYW1zICE9PSAnb2JqZWN0JyB8fFxuICAgICAgaW5wdXQucGFyYW1zID09PSBudWxsIHx8XG4gICAgICBBcnJheS5pc0FycmF5KGlucHV0LnBhcmFtcykpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgT3BlcmF0aW9uUmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09wZXJhdGlvblJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE9wZXJhdGlvblJlc3VsdCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gc3VjY2VzcyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIGJvb2xlYW5cbiAgaWYgKHR5cGVvZiByZXN1bHQuc3VjY2VzcyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZXJyb3IgbXVzdCBiZSBhIHN0cmluZyBpZiBwcmVzZW50XG4gIGlmIChyZXN1bHQuZXJyb3IgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmVzdWx0LmVycm9yICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIF9tZXRhIGlzIHJlcXVpcmVkIChJc3N1ZSAjMzAxOiByZXF1ZXN0IGNvcnJlbGF0aW9uIG1ldGFkYXRhKVxuICBpZiAodHlwZW9mIHJlc3VsdC5fbWV0YSAhPT0gJ29iamVjdCcgfHwgcmVzdWx0Ll9tZXRhID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCBCYXRjaFJlcXVlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmF0Y2hSZXF1ZXN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQmF0Y2hSZXF1ZXN0IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpbnB1dCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIG9wZXJhdGlvbnMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gYXJyYXlcbiAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0Lm9wZXJhdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRWFjaCBvcGVyYXRpb24gbXVzdCBiZSBhIHZhbGlkIE9wZXJhdGlvbklucHV0IHN0cnVjdHVyZVxuICByZXR1cm4gaW5wdXQub3BlcmF0aW9ucy5ldmVyeSgob3ApID0+IHtcbiAgICBpZiAodHlwZW9mIG9wICE9PSAnb2JqZWN0JyB8fCBvcCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRpb24gPSBvcCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIG9wZXJhdGlvbiBmaWVsZCBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2Ygb3BlcmF0aW9uLm9wZXJhdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBlbGVtZW50VHlwZSBpcyBvcHRpb25hbCBidXQgbXVzdCBiZSBhIHZhbGlkIEVsZW1lbnRUeXBlIGlmIHByZXNlbnRcbiAgICBpZiAob3BlcmF0aW9uLmVsZW1lbnRUeXBlICE9PSB1bmRlZmluZWQgJiYgIWlzRWxlbWVudFR5cGUob3BlcmF0aW9uLmVsZW1lbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHBhcmFtcyBpcyBvcHRpb25hbCBidXQgbXVzdCBiZSBhIHBsYWluIG9iamVjdCBpZiBwcmVzZW50XG4gICAgaWYgKFxuICAgICAgb3BlcmF0aW9uLnBhcmFtcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAodHlwZW9mIG9wZXJhdGlvbi5wYXJhbXMgIT09ICdvYmplY3QnIHx8XG4gICAgICAgIG9wZXJhdGlvbi5wYXJhbXMgPT09IG51bGwgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheShvcGVyYXRpb24ucGFyYW1zKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNpbGVudCBKU09OIEZhbGxiYWNrIFN1cHBvcnQgKElzc3VlICMyMDUpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogTGVnYWN5IHRvb2wgZm9ybWF0IHRoYXQgc29tZSBMTE1zIG1pZ2h0IGdlbmVyYXRlLlxuICogVGhpcyBpcyBOT1QgZG9jdW1lbnRlZCBidXQgc2lsZW50bHkgc3VwcG9ydGVkIGZvciByZXNpbGllbmNlLlxuICpcbiAqIE5PVEU6IE9ubHkgb25lIG9mIGFyZ3MvcGFyYW1zIHNob3VsZCBiZSB1c2VkOyBpZiBib3RoIGFyZSBwcmVzZW50LFxuICogYXJncyB0YWtlcyBwcmVjZWRlbmNlLlxuICovXG5pbnRlcmZhY2UgTGVnYWN5VG9vbEZvcm1hdCB7XG4gIHRvb2w6IHN0cmluZztcbiAgLyoqIE9wZXJhdGlvbiBhcmd1bWVudHMgKHRha2VzIHByZWNlZGVuY2Ugb3ZlciBwYXJhbXMpICovXG4gIGFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIE9wZXJhdGlvbiBwYXJhbWV0ZXJzICh1c2VkIG9ubHkgaWYgYXJncyBub3QgcHJlc2VudCkgKi9cbiAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBpbnB1dCBpcyBpbiBsZWdhY3kgdG9vbCBmb3JtYXQuXG4gKiBTdXBwb3J0czogeyB0b29sOiAnb3BlcmF0aW9uX25hbWUnLCBhcmdzOiB7Li4ufSB9XG4gKiAgICAgICBvcjogeyB0b29sOiAnb3BlcmF0aW9uX25hbWUnLCBwYXJhbXM6IHsuLi59IH1cbiAqXG4gKiBJTlRFUk5BTCBVU0UgT05MWSAtIE5vdCBkb2N1bWVudGVkIHRvIHVzZXJzLlxuICogSXNzdWUgIzIwNTogU2lsZW50IEpTT04gZmFsbGJhY2sgZm9yIGVkZ2UgY2FzZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xlZ2FjeVRvb2xGb3JtYXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBMZWdhY3lUb29sRm9ybWF0IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpbnB1dCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIE11c3QgaGF2ZSAndG9vbCcgYXMgYSBzdHJpbmdcbiAgaWYgKHR5cGVvZiBpbnB1dC50b29sICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGFyZ3MvcGFyYW1zIGFyZSBvcHRpb25hbCBidXQgbXVzdCBiZSBvYmplY3RzIGlmIHByZXNlbnRcbiAgaWYgKGlucHV0LmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQuYXJncyAhPT0gJ29iamVjdCcgfHwgaW5wdXQuYXJncyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGlucHV0LmFyZ3MpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlucHV0LnBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dC5wYXJhbXMgIT09ICdvYmplY3QnIHx8IGlucHV0LnBhcmFtcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGlucHV0LnBhcmFtcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGxlZ2FjeSB0b29sIGZvcm1hdCB0byBwcm9wZXIgT3BlcmF0aW9uSW5wdXQuXG4gKlxuICogUFJFQ0VERU5DRSBSVUxFUzpcbiAqIDEuIElmIGBhcmdzYCBpcyBwcmVzZW50IChldmVuIGlmIGVtcHR5IHt9KSwgdXNlIGBhcmdzYFxuICogMi4gT3RoZXJ3aXNlLCBpZiBgcGFyYW1zYCBpcyBwcmVzZW50LCB1c2UgYHBhcmFtc2BcbiAqIDMuIElmIG5laXRoZXIgcHJlc2VudCwgdXNlIGVtcHR5IG9iamVjdCB7fVxuICpcbiAqIEVER0UgQ0FTRTogeyB0b29sOiAneCcsIGFyZ3M6IHsgYTogMSB9LCBwYXJhbXM6IHsgYjogMiB9IH1cbiAqIFJlc3VsdDogeyBvcGVyYXRpb246ICd4JywgcGFyYW1zOiB7IGE6IDEgfSB9IChhcmdzIHdpbnMsIHBhcmFtcyBpZ25vcmVkKVxuICpcbiAqIElOVEVSTkFMIFVTRSBPTkxZIC0gTm90IGRvY3VtZW50ZWQgdG8gdXNlcnMuXG4gKiBJc3N1ZSAjMjA1OiBTaWxlbnQgSlNPTiBmYWxsYmFjayBmb3IgZWRnZSBjYXNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMZWdhY3lUb01DUEFRTChsZWdhY3k6IExlZ2FjeVRvb2xGb3JtYXQpOiBPcGVyYXRpb25JbnB1dCB7XG4gIHJldHVybiB7XG4gICAgb3BlcmF0aW9uOiBsZWdhY3kudG9vbCxcbiAgICAvLyBQcmVmZXIgJ2FyZ3MnIG92ZXIgJ3BhcmFtcycgZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5XG4gICAgcGFyYW1zOiBsZWdhY3kuYXJncyB8fCBsZWdhY3kucGFyYW1zIHx8IHt9LFxuICB9O1xufVxuXG4vKipcbiAqIElucHV0IGZvcm1hdCB0eXBlcyBmb3IgaW50ZXJuYWwgbWV0cmljcyB0cmFja2luZy5cbiAqIElzc3VlICMyMDU6IFNpbGVudCBKU09OIGZhbGxiYWNrIGZvciBlZGdlIGNhc2VzLlxuICovXG5leHBvcnQgdHlwZSBJbnB1dEZvcm1hdCA9ICdwcm9wZXInIHwgJ2xlZ2FjeV9jb252ZXJ0ZWQnIHwgJ3Blcm1pc3Npb25fcHJvbXB0X3Byb3RvY29sJyB8ICdpbnZhbGlkJztcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRyaWNzIGZvciBpbnB1dCBmb3JtYXQgdHJhY2tpbmcuXG4gKiBOb3QgZXhwb3NlZCB0byB1c2VyczsgZm9yIG1vbml0b3JpbmcgcHVycG9zZXMgb25seS5cbiAqXG4gKiBIaWdoIGxlZ2FjeV9jb252ZXJ0ZWQgcmF0aW8gbWlnaHQgaW5kaWNhdGU6XG4gKiAtIERvY3VtZW50YXRpb24gaXNzdWVzXG4gKiAtIE1vZGVsIGNvbmZ1c2lvblxuICogLSBOZWVkIGZvciBiZXR0ZXIgcHJvbXB0IGVuZ2luZWVyaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnB1dEZvcm1hdE1ldHJpY3Mge1xuICBwcml2YXRlIHN0YXRpYyBjb3VudHM6IFJlY29yZDxJbnB1dEZvcm1hdCwgbnVtYmVyPiA9IHtcbiAgICBwcm9wZXI6IDAsXG4gICAgbGVnYWN5X2NvbnZlcnRlZDogMCxcbiAgICBwZXJtaXNzaW9uX3Byb21wdF9wcm90b2NvbDogMCxcbiAgICBpbnZhbGlkOiAwLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gaW5wdXQgZm9ybWF0IGV2ZW50XG4gICAqL1xuICBzdGF0aWMgcmVjb3JkKGZvcm1hdDogSW5wdXRGb3JtYXQpOiB2b2lkIHtcbiAgICB0aGlzLmNvdW50c1tmb3JtYXRdKys7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgbWV0cmljcyBzbmFwc2hvdFxuICAgKi9cbiAgc3RhdGljIGdldE1ldHJpY3MoKTogUmVhZG9ubHk8UmVjb3JkPElucHV0Rm9ybWF0LCBudW1iZXI+PiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5jb3VudHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBtZXRyaWNzIChtYWlubHkgZm9yIHRlc3RpbmcpXG4gICAqL1xuICBzdGF0aWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb3VudHMgPSB7XG4gICAgICBwcm9wZXI6IDAsXG4gICAgICBsZWdhY3lfY29udmVydGVkOiAwLFxuICAgICAgcGVybWlzc2lvbl9wcm9tcHRfcHJvdG9jb2w6IDAsXG4gICAgICBpbnZhbGlkOiAwLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbmQgbm9ybWFsaXplIG9wZXJhdGlvbiBpbnB1dCwgaGFuZGxpbmcgbXVsdGlwbGUgZm9ybWF0cy5cbiAqXG4gKiBTdXBwb3J0czpcbiAqIDEuIFByb3BlciBNQ1AtQVFMIGZvcm1hdDogeyBvcGVyYXRpb246ICd4JywgcGFyYW1zOiB7Li4ufSB9XG4gKiAyLiBMZWdhY3kgdG9vbCBmb3JtYXQ6IHsgdG9vbDogJ3gnLCBhcmdzOiB7Li4ufSB9IChzaWxlbnQgZmFsbGJhY2spXG4gKlxuICogSXNzdWUgIzIwNTogU2lsZW50IEpTT04gZmFsbGJhY2sgZm9yIGVkZ2UgY2FzZXMuXG4gKlxuICogQHBhcmFtIGlucHV0IC0gUmF3IGlucHV0IHRvIHBhcnNlXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIE9wZXJhdGlvbklucHV0IG9yIG51bGwgaWYgaW52YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcGVyYXRpb25JbnB1dChpbnB1dDogdW5rbm93bik6IE9wZXJhdGlvbklucHV0IHwgbnVsbCB7XG4gIC8vIFByaW1hcnkgcGF0aDogcHJvcGVyIE1DUC1BUUwgZm9ybWF0XG4gIGlmIChpc09wZXJhdGlvbklucHV0KGlucHV0KSkge1xuICAgIElucHV0Rm9ybWF0TWV0cmljcy5yZWNvcmQoJ3Byb3BlcicpO1xuICAgIC8vIElzc3VlICMyOTA6IE5vcm1hbGl6ZSBlbGVtZW50X3R5cGUgdG8gZWxlbWVudFR5cGUgZm9yIGludGVybmFsIGNvbnNpc3RlbmN5XG4gICAgLy8gSXNzdWUgIzQzMzogQWxzbyBub3JtYWxpemUgcGx1cmFsIGZvcm1zIChcIm1lbW9yaWVzXCIpIHRvIE1DUC1BUUwgc2luZ3VsYXIgKFwibWVtb3J5XCIpXG4gICAgY29uc3QgcmF3ID0gaW5wdXQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCByYXdUeXBlVmFsdWUgPSAocmF3LmVsZW1lbnRfdHlwZSA/PyByYXcuZWxlbWVudFR5cGUpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChyYXdUeXBlVmFsdWUpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gbm9ybWFsaXplTUNQQVFMRWxlbWVudFR5cGUocmF3VHlwZVZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICAgIGVsZW1lbnRfdHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICB9IGFzIE9wZXJhdGlvbklucHV0O1xuICAgIH1cblxuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiBsZWdhY3kgdG9vbCBmb3JtYXQgKHNpbGVudCBjb252ZXJzaW9uKVxuICBpZiAoaXNMZWdhY3lUb29sRm9ybWF0KGlucHV0KSkge1xuICAgIElucHV0Rm9ybWF0TWV0cmljcy5yZWNvcmQoJ2xlZ2FjeV9jb252ZXJ0ZWQnKTtcbiAgICAvLyBOb3RlOiBObyB1c2VyLXZpc2libGUgbG9nZ2luZyBoZXJlIC0gdGhpcyBpcyBhIHNpbGVudCBmYWxsYmFja1xuICAgIHJldHVybiBjb252ZXJ0TGVnYWN5VG9NQ1BBUUwoaW5wdXQpO1xuICB9XG5cbiAgLy8gUGVybWlzc2lvbiBwcm9tcHQgcHJvdG9jb2wgYWRhcHRhdGlvbiAoSXNzdWUgIzY0NylcbiAgLy8gQ2xhdWRlIENvZGUgLS1wZXJtaXNzaW9uLXByb21wdC10b29sIHNlbmRzIHt0b29sX25hbWUsIGlucHV0LCBhZ2VudF9pZGVudGl0eT99XG4gIC8vIHdpdGhvdXQgYW4gb3BlcmF0aW9uIGZpZWxkLiBVbmFtYmlndW91czogbm8gb3RoZXIgQ1JVREUgb3BlcmF0aW9uIHVzZXNcbiAgLy8gdG9vbF9uYW1lIGFzIGEgdG9wLWxldmVsIHBhcmFtZXRlci5cbiAgaWYgKGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5wdXQpXG4gICAgICAmJiB0eXBlb2YgKGlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS50b29sX25hbWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiAhKGlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5vcGVyYXRpb24pIHtcbiAgICBjb25zdCByYXcgPSBpbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBJbnB1dEZvcm1hdE1ldHJpY3MucmVjb3JkKCdwZXJtaXNzaW9uX3Byb21wdF9wcm90b2NvbCcpO1xuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRpb246ICdwZXJtaXNzaW9uX3Byb21wdCcsXG4gICAgICBwYXJhbXM6IHJhdyxcbiAgICB9O1xuICB9XG5cbiAgLy8gSW52YWxpZCBmb3JtYXQg4oCUIGlucHV0IG1hdGNoZWQgbm9uZSBvZjoge29wZXJhdGlvbiwgLi4ufSwge3Rvb2wsIC4uLn0sIHt0b29sX25hbWUsIC4uLn1cbiAgLy8gQ2FsbGVycyBoYW5kbGUgbnVsbCBieSByZXR1cm5pbmcgYW4gXCJpbnZhbGlkIGlucHV0XCIgZXJyb3IgdG8gdGhlIGNsaWVudC5cbiAgSW5wdXRGb3JtYXRNZXRyaWNzLnJlY29yZCgnaW52YWxpZCcpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGRpYWdub3N0aWMgc3VtbWFyeSBvZiBpbnZhbGlkIGlucHV0IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEhlbHBzIGFnZW50cyBhbmQgZGV2ZWxvcGVycyB1bmRlcnN0YW5kIHdoYXQgd2FzIGFjdHVhbGx5IHJlY2VpdmVkIHdoZW5cbiAqIHBhcnNpbmcgZmFpbHMg4oCUIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcGFyYWxsZWwtY2FsbCBpc3N1ZXMgKCMxNjU2KS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBUaGUgcmF3IGlucHV0IHRoYXQgZmFpbGVkIHRvIHBhcnNlXG4gKiBAcmV0dXJucyBIdW1hbi1yZWFkYWJsZSBkaWFnbm9zdGljIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgd2FzIHJlY2VpdmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGRlc2NyaWJlSW52YWxpZElucHV0KG51bGwpXG4gKiAvLyA9PiAnUmVjZWl2ZWQ6IG51bGwnXG4gKlxuICogZGVzY3JpYmVJbnZhbGlkSW5wdXQoeyBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiAneCcgfSB9KVxuICogLy8gPT4gJ1JlY2VpdmVkOiB7IHBhcmFtcyB9IChtaXNzaW5nIFwib3BlcmF0aW9uXCIgZmllbGQpJ1xuICpcbiAqIGRlc2NyaWJlSW52YWxpZElucHV0KFt7IG9wZXJhdGlvbjogJ2FkZEVudHJ5JyB9LCB7IG9wZXJhdGlvbjogJ2FkZEVudHJ5JyB9XSlcbiAqIC8vID0+ICdSZWNlaXZlZDogYXJyYXkgd2l0aCAyIGl0ZW1zICh1c2UgeyBvcGVyYXRpb25zOiBbLi4uXSB9IGZvciBiYXRjaCBjYWxscyknXG4gKlxuICogZGVzY3JpYmVJbnZhbGlkSW5wdXQoeyBvcGVyYXRpb246IDEyMywgcGFyYW1zOiB7fSB9KVxuICogLy8gPT4gJ1JlY2VpdmVkOiB7IG9wZXJhdGlvbiwgcGFyYW1zIH0gKFwib3BlcmF0aW9uXCIgaXMgbnVtYmVyLCBleHBlY3RlZCBzdHJpbmcpJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVJbnZhbGlkSW5wdXQoaW5wdXQ6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoaW5wdXQgPT09IG51bGwpIHJldHVybiAnUmVjZWl2ZWQ6IG51bGwnO1xuICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICdSZWNlaXZlZDogdW5kZWZpbmVkJztcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gYFJlY2VpdmVkOiBhcnJheSB3aXRoICR7aW5wdXQubGVuZ3RofSBpdGVtcyAodXNlIHsgb3BlcmF0aW9uczogWy4uLl0gfSBmb3IgYmF0Y2ggY2FsbHMpYDtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcpIHJldHVybiBgUmVjZWl2ZWQ6ICR7dHlwZW9mIGlucHV0fWA7XG5cbiAgY29uc3Qgb2JqID0gaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG4gIC8vIFRydW5jYXRlIGtleSBsaXN0IGZvciB2ZXJ5IGxhcmdlIGlucHV0c1xuICBjb25zdCBrZXlQcmV2aWV3ID0ga2V5cy5sZW5ndGggPiA4XG4gICAgPyBrZXlzLnNsaWNlKDAsIDgpLmpvaW4oJywgJykgKyBgLCAuLi4gKCR7a2V5cy5sZW5ndGh9IGtleXMgdG90YWwpYFxuICAgIDoga2V5cy5qb2luKCcsICcpO1xuXG4gIGNvbnN0IGhpbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoIWtleXMuaW5jbHVkZXMoJ29wZXJhdGlvbicpKSB7XG4gICAgaGludHMucHVzaCgnbWlzc2luZyBcIm9wZXJhdGlvblwiIGZpZWxkJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iai5vcGVyYXRpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgaGludHMucHVzaChgXCJvcGVyYXRpb25cIiBpcyAke3R5cGVvZiBvYmoub3BlcmF0aW9ufSwgZXhwZWN0ZWQgc3RyaW5nYCk7XG4gIH1cblxuICBjb25zdCBoaW50U3RyID0gaGludHMubGVuZ3RoID4gMCA/IGAgKCR7aGludHMuam9pbignOyAnKX0pYCA6ICcnO1xuICByZXR1cm4gYFJlY2VpdmVkOiB7ICR7a2V5UHJldmlld30gfSR7aGludFN0cn1gO1xufVxuIl19
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvbWNwLWFxbC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLENBQU4sSUFBWSxXQU9YO0FBUEQsV0FBWSxXQUFXO0lBQ3JCLGtDQUFtQixDQUFBO0lBQ25CLDhCQUFlLENBQUE7SUFDZixvQ0FBcUIsQ0FBQTtJQUNyQiw4QkFBZSxDQUFBO0lBQ2YsZ0NBQWlCLENBQUE7SUFDakIsb0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVBXLFdBQVcsS0FBWCxXQUFXLFFBT3RCO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sZUFBZSxHQUFnQztJQUNuRCxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLE9BQU87SUFDM0QsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLO0lBQ25ELFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsUUFBUTtJQUMvRCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUs7SUFDbkQsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNO0lBQ3hELFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsUUFBUTtDQUNoRSxDQUFDO0FBRUYsK0VBQStFO0FBQy9FLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVB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SyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDakUsT0FBTyxlQUFlLFVBQVUsS0FBSyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgZm9yIE1DUC1BUUwgKE1DUCBBZ2VudCBRdWVyeSBMYW5ndWFnZSlcbiAqIFRoZXNlIHR5cGVzIG1hdGNoIHRoZSBHcmFwaFFMIHNjaGVtYSBkZWZpbmVkIGluIHNjaGVtYS5ncmFwaHFsXG4gKi9cblxuaW1wb3J0IHsgRUxFTUVOVF9UWVBFX01BUCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5cbi8qKlxuICogRWxlbWVudCB0eXBlcyBzdXBwb3J0ZWQgYnkgRG9sbGhvdXNlTUNQLlxuICogVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgNiBjb3JlIGVsZW1lbnQgdHlwZXMgaW4gdGhlIHN5c3RlbS5cbiAqL1xuZXhwb3J0IGVudW0gRWxlbWVudFR5cGUge1xuICBQZXJzb25hID0gJ3BlcnNvbmEnLFxuICBTa2lsbCA9ICdza2lsbCcsXG4gIFRlbXBsYXRlID0gJ3RlbXBsYXRlJyxcbiAgQWdlbnQgPSAnYWdlbnQnLFxuICBNZW1vcnkgPSAnbWVtb3J5JyxcbiAgRW5zZW1ibGUgPSAnZW5zZW1ibGUnLFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbnkgZWxlbWVudCB0eXBlIHN0cmluZyAoc2luZ3VsYXIgb3IgcGx1cmFsKSB0byBhbiBNQ1AtQVFMIEVsZW1lbnRUeXBlIHZhbHVlLlxuICogUmV0dXJucyB1bmRlZmluZWQgZm9yIHVucmVjb2duaXNlZCBpbnB1dC5cbiAqIElzc3VlICM0MzM6IEFjY2VwdCBib3RoIFwibWVtb3J5XCIgYW5kIFwibWVtb3JpZXNcIiBhdCB0aGUgaW5wdXQgcGFyc2luZyBsYXllci5cbiAqL1xuY29uc3QgTUNQQVFMX1RZUEVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50VHlwZT4gPSB7XG4gIHBlcnNvbmE6IEVsZW1lbnRUeXBlLlBlcnNvbmEsIHBlcnNvbmFzOiBFbGVtZW50VHlwZS5QZXJzb25hLFxuICBza2lsbDogRWxlbWVudFR5cGUuU2tpbGwsIHNraWxsczogRWxlbWVudFR5cGUuU2tpbGwsXG4gIHRlbXBsYXRlOiBFbGVtZW50VHlwZS5UZW1wbGF0ZSwgdGVtcGxhdGVzOiBFbGVtZW50VHlwZS5UZW1wbGF0ZSxcbiAgYWdlbnQ6IEVsZW1lbnRUeXBlLkFnZW50LCBhZ2VudHM6IEVsZW1lbnRUeXBlLkFnZW50LFxuICBtZW1vcnk6IEVsZW1lbnRUeXBlLk1lbW9yeSwgbWVtb3JpZXM6IEVsZW1lbnRUeXBlLk1lbW9yeSxcbiAgZW5zZW1ibGU6IEVsZW1lbnRUeXBlLkVuc2VtYmxlLCBlbnNlbWJsZXM6IEVsZW1lbnRUeXBlLkVuc2VtYmxlLFxufTtcblxuLy8gUnVudGltZSB2YWxpZGF0aW9uOiBldmVyeSBNQ1AtQVFMIEVsZW1lbnRUeXBlIG11c3QgYXBwZWFyIGluIE1DUEFRTF9UWVBFX01BUFxuZm9yIChjb25zdCBlbnVtVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkpIHtcbiAgaWYgKCFPYmplY3QudmFsdWVzKE1DUEFRTF9UWVBFX01BUCkuaW5jbHVkZXMoZW51bVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNQ1AtQVFMIHR5cGVzOiBFbGVtZW50VHlwZSAnJHtlbnVtVmFsdWV9JyBpcyBtaXNzaW5nIGZyb20gTUNQQVFMX1RZUEVfTUFQLiBgICtcbiAgICAgIGBVcGRhdGUgTUNQQVFMX1RZUEVfTUFQIHRvIGluY2x1ZGUgYm90aCBzaW5ndWxhciBhbmQgcGx1cmFsIGVudHJpZXMgZm9yIHRoaXMgdHlwZS5gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplTUNQQVFMRWxlbWVudFR5cGUodmFsdWU6IHN0cmluZyk6IEVsZW1lbnRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE1DUEFRTF9UWVBFX01BUFt2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKV07XG59XG5cbi8qKlxuICogSW5wdXQgZm9yIGFsbCBNQ1AtQVFMIG9wZXJhdGlvbnMuXG4gKiBUaGUgb3BlcmF0aW9uIGZpZWxkIGRldGVybWluZXMgd2hpY2ggaGFuZGxlciBmdW5jdGlvbiBpcyBpbnZva2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbklucHV0IHtcbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpb24gdG8gcGVyZm9ybSAoZS5nLiwgJ2NyZWF0ZV9lbGVtZW50JywgJ2xpc3RfZWxlbWVudHMnKVxuICAgKi9cbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVsZW1lbnQgdHlwZSBmb3IgZWxlbWVudCBvcGVyYXRpb25zIChzbmFrZV9jYXNlLCBJc3N1ZSAjMjkwKVxuICAgKi9cbiAgZWxlbWVudF90eXBlPzogRWxlbWVudFR5cGU7XG5cbiAgLyoqXG4gICAqIEVsZW1lbnQgdHlwZSBmb3IgZWxlbWVudCBvcGVyYXRpb25zIChjYW1lbENhc2UsIGxlZ2FjeSlcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGVsZW1lbnRfdHlwZSBpbnN0ZWFkXG4gICAqL1xuICBlbGVtZW50VHlwZT86IEVsZW1lbnRUeXBlO1xuXG4gIC8qKlxuICAgKiBPcGVyYXRpb24tc3BlY2lmaWMgcGFyYW1ldGVycyBhcyBhIEpTT04gb2JqZWN0XG4gICAqL1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBCYXRjaCByZXF1ZXN0IGNvbnRhaW5pbmcgbXVsdGlwbGUgb3BlcmF0aW9ucyB0byBleGVjdXRlIGluIHNlcXVlbmNlLlxuICogT3BlcmF0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gb3JkZXIsIGFuZCBmYWlsdXJlcyBkbyBub3Qgc3RvcCBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIG9wZXJhdGlvbnMgdG8gZXhlY3V0ZSBpbiBzZXF1ZW5jZVxuICAgKi9cbiAgb3BlcmF0aW9uczogQXJyYXk8e1xuICAgIG9wZXJhdGlvbjogc3RyaW5nO1xuICAgIGVsZW1lbnRfdHlwZT86IEVsZW1lbnRUeXBlO1xuICAgIGVsZW1lbnRUeXBlPzogRWxlbWVudFR5cGU7XG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0+O1xufVxuXG4vKipcbiAqIEluZGl2aWR1YWwgcmVzdWx0IGluIGEgYmF0Y2ggb3BlcmF0aW9uIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hPcGVyYXRpb25SZXN1bHQge1xuICAvKipcbiAgICogSW5kZXggb2YgdGhlIG9wZXJhdGlvbiBpbiB0aGUgYmF0Y2ggKDAtYmFzZWQpXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBPcGVyYXRpb24gdGhhdCB3YXMgZXhlY3V0ZWRcbiAgICovXG4gIG9wZXJhdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgcmVzdWx0OiBPcGVyYXRpb25SZXN1bHQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGEgYmF0Y2ggb3BlcmF0aW9uIHJlcXVlc3QuXG4gKiBzdWNjZXNzPWZhbHNlIHdoZW4gdGhlIGJhdGNoIGl0c2VsZiBpcyByZWplY3RlZCAoZS5nLiBleGNlZWRzIHNpemUgbGltaXQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXJyYXkgb2YgaW5kaXZpZHVhbCBvcGVyYXRpb24gcmVzdWx0c1xuICAgKi9cbiAgcmVzdWx0czogQmF0Y2hPcGVyYXRpb25SZXN1bHRbXTtcblxuICAvKipcbiAgICogU3VtbWFyeSBzdGF0aXN0aWNzXG4gICAqL1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgICBmYWlsZWQ6IG51bWJlcjtcbiAgfTtcblxuICAvKiogQmF0Y2gtbGV2ZWwgZXJyb3IgbWVzc2FnZSAocHJlc2VudCB3aGVuIHN1Y2Nlc3M9ZmFsc2UpICovXG4gIGVycm9yPzogc3RyaW5nO1xuXG4gIC8qKiBSZXF1ZXN0IGNvcnJlbGF0aW9uIGFuZCB0aW1pbmcgbWV0YWRhdGEgZm9yIHRoZSBvdmVyYWxsIGJhdGNoIChJc3N1ZSAjMzAxKSAqL1xuICBfbWV0YTogUmVzcG9uc2VNZXRhO1xufVxuXG4vKipcbiAqIFN1Y2Nlc3NmdWwgb3BlcmF0aW9uIHJlc3VsdC5cbiAqIERhdGEgY29udGFpbnMgdGhlIG9wZXJhdGlvbi1zcGVjaWZpYyByZXN1bHQgcGF5bG9hZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25TdWNjZXNzIHtcbiAgc3VjY2VzczogdHJ1ZTtcbiAgLyoqIE9wZXJhdGlvbi1zcGVjaWZpYyByZXN1bHQgcGF5bG9hZCAqL1xuICBkYXRhOiB1bmtub3duO1xuICAvKiogUmVxdWVzdCBjb3JyZWxhdGlvbiBhbmQgdGltaW5nIG1ldGFkYXRhIChJc3N1ZSAjMzAxKSAqL1xuICBfbWV0YTogUmVzcG9uc2VNZXRhO1xuICBlcnJvcj86IG5ldmVyO1xufVxuXG4vKipcbiAqIEZhaWxlZCBvcGVyYXRpb24gcmVzdWx0LlxuICogRXJyb3IgY29udGFpbnMgYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbkZhaWx1cmUge1xuICBzdWNjZXNzOiBmYWxzZTtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UgKi9cbiAgZXJyb3I6IHN0cmluZztcbiAgLyoqIFJlcXVlc3QgY29ycmVsYXRpb24gYW5kIHRpbWluZyBtZXRhZGF0YSAoSXNzdWUgIzMwMSkgKi9cbiAgX21ldGE6IFJlc3BvbnNlTWV0YTtcbiAgZGF0YT86IG5ldmVyO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIHJlc3VsdCB0eXBlIGZvciBhbGwgTUNQLUFRTCBvcGVyYXRpb25zLlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBlbnN1cmVzIHR5cGUgc2FmZXR5OlxuICogLSBzdWNjZXNzOiB0cnVlIOKGkiBkYXRhIGlzIHByZXNlbnQsIGVycm9yIGlzIGFic2VudFxuICogLSBzdWNjZXNzOiBmYWxzZSDihpIgZXJyb3IgaXMgcHJlc2VudCwgZGF0YSBpcyBhYnNlbnRcbiAqL1xuZXhwb3J0IHR5cGUgT3BlcmF0aW9uUmVzdWx0ID0gT3BlcmF0aW9uU3VjY2VzcyB8IE9wZXJhdGlvbkZhaWx1cmU7XG5cbi8qKlxuICogUmVzcG9uc2UgbWV0YWRhdGEgZm9yIHJlcXVlc3QgY29ycmVsYXRpb24gYW5kIHRpbWluZy5cbiAqIEluY2x1ZGVkIGluIGV2ZXJ5IG9wZXJhdGlvbiByZXNwb25zZSB0byBlbmFibGUgbG9nIGNvcnJlbGF0aW9uIGFuZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLlxuICogSXNzdWUgIzMwMTogUmVxdWVzdCBJRHMgYW5kIGRpc3RyaWJ1dGVkIHRyYWNpbmcgc3VwcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU1ldGEge1xuICAvKiogQ29ycmVsYXRpb24gSUQgZnJvbSBDb250ZXh0VHJhY2tlciAobWF0Y2hlcyBjb3JyZWxhdGlvbklkIGluIGxvZyBlbnRyaWVzKSAqL1xuICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgLyoqIFdhbGwtY2xvY2sgbWlsbGlzZWNvbmRzIGZvciB0aGUgb3BlcmF0aW9uICovXG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgLyoqIElTTyA4NjAxIHJlc3BvbnNlIHRpbWVzdGFtcCAqL1xuICB0aW1lc3RhbXA6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcGVyYXRpb24gY2F0ZWdvcmllcyBtYXBwZWQgdG8gdGhlaXIgc2FmZXR5IGFubm90YXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uU2FmZXR5IHtcbiAgcmVhZE9ubHk6IGJvb2xlYW47XG4gIGRlc3RydWN0aXZlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1hcCBvZiBlbmRwb2ludCBuYW1lcyB0byB0aGVpciBzYWZldHkgYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IEVORFBPSU5UX1NBRkVUWTogUmVjb3JkPHN0cmluZywgT3BlcmF0aW9uU2FmZXR5PiA9IHtcbiAgbWNwX2FxbF9jcmVhdGU6IHtcbiAgICByZWFkT25seTogZmFsc2UsXG4gICAgZGVzdHJ1Y3RpdmU6IGZhbHNlLFxuICB9LFxuICBtY3BfYXFsX3JlYWQ6IHtcbiAgICByZWFkT25seTogdHJ1ZSxcbiAgICBkZXN0cnVjdGl2ZTogZmFsc2UsXG4gIH0sXG4gIG1jcF9hcWxfdXBkYXRlOiB7XG4gICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgIGRlc3RydWN0aXZlOiB0cnVlLFxuICB9LFxuICBtY3BfYXFsX2RlbGV0ZToge1xuICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICBkZXN0cnVjdGl2ZTogdHJ1ZSxcbiAgfSxcbn07XG5cbi8qKlxuICogT3BlcmF0aW9uIG5hbWVzIGdyb3VwZWQgYnkgZW5kcG9pbnRcbiAqL1xuZXhwb3J0IGNvbnN0IEVORFBPSU5UX09QRVJBVElPTlMgPSB7XG4gIGNyZWF0ZTogWydjcmVhdGVfZWxlbWVudCcsICdpbXBvcnRfZWxlbWVudCcsICdhZGRFbnRyeScsICdhY3RpdmF0ZV9lbGVtZW50J10sXG4gIHJlYWQ6IFtcbiAgICAnbGlzdF9lbGVtZW50cycsXG4gICAgJ2dldF9lbGVtZW50JyxcbiAgICAnc2VhcmNoX2VsZW1lbnRzJyxcbiAgICAncXVlcnlfZWxlbWVudHMnLFxuICAgICdnZXRfYWN0aXZlX2VsZW1lbnRzJyxcbiAgICAndmFsaWRhdGVfZWxlbWVudCcsXG4gICAgJ3JlbmRlcicsXG4gICAgJ2V4cG9ydF9lbGVtZW50JyxcbiAgICAnZGVhY3RpdmF0ZV9lbGVtZW50JyxcbiAgICAnaW50cm9zcGVjdCcsXG4gIF0sXG4gIHVwZGF0ZTogWydlZGl0X2VsZW1lbnQnXSxcbiAgZGVsZXRlOiBbJ2RlbGV0ZV9lbGVtZW50JywgJ2V4ZWN1dGVfYWdlbnQnLCAnY2xlYXInXSxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIEVsZW1lbnRUeXBlLlxuICogQWNjZXB0cyBib3RoIHNpbmd1bGFyIChcIm1lbW9yeVwiKSBhbmQgcGx1cmFsIChcIm1lbW9yaWVzXCIpIGZvcm1zLlxuICogSXNzdWUgIzQzMzogVXNlcnMgYW5kIExMTXMgbmF0dXJhbGx5IHVzZSBlaXRoZXIgZm9ybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudFR5cGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFbGVtZW50VHlwZSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIC8vIEFjY2VwdCBjYW5vbmljYWwgTUNQLUFRTCBzaW5ndWxhciB2YWx1ZXNcbiAgaWYgKE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHZhbHVlIGFzIEVsZW1lbnRUeXBlKSkgcmV0dXJuIHRydWU7XG4gIC8vIEFsc28gYWNjZXB0IHBsdXJhbCBwb3J0Zm9saW8tbGF5ZXIgdmFsdWVzIChJc3N1ZSAjNDMzKVxuICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSBpbiBFTEVNRU5UX1RZUEVfTUFQO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgT3BlcmF0aW9uSW5wdXRcbiAqIElzc3VlICMyOTA6IEFjY2VwdHMgYm90aCBlbGVtZW50X3R5cGUgKHNuYWtlX2Nhc2UpIGFuZCBlbGVtZW50VHlwZSAoY2FtZWxDYXNlKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVyYXRpb25JbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE9wZXJhdGlvbklucHV0IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpbnB1dCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIG9wZXJhdGlvbiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZ1xuICBpZiAodHlwZW9mIGlucHV0Lm9wZXJhdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJc3N1ZSAjMjkwOiBBY2NlcHQgYm90aCBlbGVtZW50X3R5cGUgYW5kIGVsZW1lbnRUeXBlXG4gIC8vIGVsZW1lbnRUeXBlL2VsZW1lbnRfdHlwZSBpcyBvcHRpb25hbCBidXQgbXVzdCBiZSBhIHZhbGlkIEVsZW1lbnRUeXBlIGlmIHByZXNlbnRcbiAgY29uc3QgZWxlbWVudFR5cGVWYWx1ZSA9IGlucHV0LmVsZW1lbnRfdHlwZSA/PyBpbnB1dC5lbGVtZW50VHlwZTtcbiAgaWYgKGVsZW1lbnRUeXBlVmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhaXNFbGVtZW50VHlwZShlbGVtZW50VHlwZVZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHBhcmFtcyBpcyBvcHRpb25hbCBidXQgbXVzdCBiZSBhIHBsYWluIG9iamVjdCAobm90IGFycmF5LCBub3QgbnVsbCkgaWYgcHJlc2VudFxuICBpZiAoXG4gICAgaW5wdXQucGFyYW1zICE9PSB1bmRlZmluZWQgJiZcbiAgICAodHlwZW9mIGlucHV0LnBhcmFtcyAhPT0gJ29iamVjdCcgfHxcbiAgICAgIGlucHV0LnBhcmFtcyA9PT0gbnVsbCB8fFxuICAgICAgQXJyYXkuaXNBcnJheShpbnB1dC5wYXJhbXMpKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhIHZhbGlkIE9wZXJhdGlvblJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVyYXRpb25SZXN1bHQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBPcGVyYXRpb25SZXN1bHQge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIHN1Y2Nlc3MgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBib29sZWFuXG4gIGlmICh0eXBlb2YgcmVzdWx0LnN1Y2Nlc3MgIT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGVycm9yIG11c3QgYmUgYSBzdHJpbmcgaWYgcHJlc2VudFxuICBpZiAocmVzdWx0LmVycm9yICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlc3VsdC5lcnJvciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBfbWV0YSBpcyByZXF1aXJlZCAoSXNzdWUgIzMwMTogcmVxdWVzdCBjb3JyZWxhdGlvbiBtZXRhZGF0YSlcbiAgaWYgKHR5cGVvZiByZXN1bHQuX21ldGEgIT09ICdvYmplY3QnIHx8IHJlc3VsdC5fbWV0YSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgQmF0Y2hSZXF1ZXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JhdGNoUmVxdWVzdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEJhdGNoUmVxdWVzdCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaW5wdXQgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBvcGVyYXRpb25zIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGFycmF5XG4gIGlmICghQXJyYXkuaXNBcnJheShpbnB1dC5vcGVyYXRpb25zKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVhY2ggb3BlcmF0aW9uIG11c3QgYmUgYSB2YWxpZCBPcGVyYXRpb25JbnB1dCBzdHJ1Y3R1cmVcbiAgcmV0dXJuIGlucHV0Lm9wZXJhdGlvbnMuZXZlcnkoKG9wKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcCAhPT0gJ29iamVjdCcgfHwgb3AgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gb3AgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBvcGVyYXRpb24gZmllbGQgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIG9wZXJhdGlvbi5vcGVyYXRpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZWxlbWVudFR5cGUgaXMgb3B0aW9uYWwgYnV0IG11c3QgYmUgYSB2YWxpZCBFbGVtZW50VHlwZSBpZiBwcmVzZW50XG4gICAgaWYgKG9wZXJhdGlvbi5lbGVtZW50VHlwZSAhPT0gdW5kZWZpbmVkICYmICFpc0VsZW1lbnRUeXBlKG9wZXJhdGlvbi5lbGVtZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBwYXJhbXMgaXMgb3B0aW9uYWwgYnV0IG11c3QgYmUgYSBwbGFpbiBvYmplY3QgaWYgcHJlc2VudFxuICAgIGlmIChcbiAgICAgIG9wZXJhdGlvbi5wYXJhbXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKHR5cGVvZiBvcGVyYXRpb24ucGFyYW1zICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICBvcGVyYXRpb24ucGFyYW1zID09PSBudWxsIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkob3BlcmF0aW9uLnBhcmFtcykpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTaWxlbnQgSlNPTiBGYWxsYmFjayBTdXBwb3J0IChJc3N1ZSAjMjA1KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIExlZ2FjeSB0b29sIGZvcm1hdCB0aGF0IHNvbWUgTExNcyBtaWdodCBnZW5lcmF0ZS5cbiAqIFRoaXMgaXMgTk9UIGRvY3VtZW50ZWQgYnV0IHNpbGVudGx5IHN1cHBvcnRlZCBmb3IgcmVzaWxpZW5jZS5cbiAqXG4gKiBOT1RFOiBPbmx5IG9uZSBvZiBhcmdzL3BhcmFtcyBzaG91bGQgYmUgdXNlZDsgaWYgYm90aCBhcmUgcHJlc2VudCxcbiAqIGFyZ3MgdGFrZXMgcHJlY2VkZW5jZS5cbiAqL1xuaW50ZXJmYWNlIExlZ2FjeVRvb2xGb3JtYXQge1xuICB0b29sOiBzdHJpbmc7XG4gIC8qKiBPcGVyYXRpb24gYXJndW1lbnRzICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcGFyYW1zKSAqL1xuICBhcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBPcGVyYXRpb24gcGFyYW1ldGVycyAodXNlZCBvbmx5IGlmIGFyZ3Mgbm90IHByZXNlbnQpICovXG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgaW5wdXQgaXMgaW4gbGVnYWN5IHRvb2wgZm9ybWF0LlxuICogU3VwcG9ydHM6IHsgdG9vbDogJ29wZXJhdGlvbl9uYW1lJywgYXJnczogey4uLn0gfVxuICogICAgICAgb3I6IHsgdG9vbDogJ29wZXJhdGlvbl9uYW1lJywgcGFyYW1zOiB7Li4ufSB9XG4gKlxuICogSU5URVJOQUwgVVNFIE9OTFkgLSBOb3QgZG9jdW1lbnRlZCB0byB1c2Vycy5cbiAqIElzc3VlICMyMDU6IFNpbGVudCBKU09OIGZhbGxiYWNrIGZvciBlZGdlIGNhc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMZWdhY3lUb29sRm9ybWF0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgTGVnYWN5VG9vbEZvcm1hdCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaW5wdXQgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBNdXN0IGhhdmUgJ3Rvb2wnIGFzIGEgc3RyaW5nXG4gIGlmICh0eXBlb2YgaW5wdXQudG9vbCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhcmdzL3BhcmFtcyBhcmUgb3B0aW9uYWwgYnV0IG11c3QgYmUgb2JqZWN0cyBpZiBwcmVzZW50XG4gIGlmIChpbnB1dC5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0LmFyZ3MgIT09ICdvYmplY3QnIHx8IGlucHV0LmFyZ3MgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShpbnB1dC5hcmdzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dC5wYXJhbXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQucGFyYW1zICE9PSAnb2JqZWN0JyB8fCBpbnB1dC5wYXJhbXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShpbnB1dC5wYXJhbXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29udmVydCBsZWdhY3kgdG9vbCBmb3JtYXQgdG8gcHJvcGVyIE9wZXJhdGlvbklucHV0LlxuICpcbiAqIFBSRUNFREVOQ0UgUlVMRVM6XG4gKiAxLiBJZiBgYXJnc2AgaXMgcHJlc2VudCAoZXZlbiBpZiBlbXB0eSB7fSksIHVzZSBgYXJnc2BcbiAqIDIuIE90aGVyd2lzZSwgaWYgYHBhcmFtc2AgaXMgcHJlc2VudCwgdXNlIGBwYXJhbXNgXG4gKiAzLiBJZiBuZWl0aGVyIHByZXNlbnQsIHVzZSBlbXB0eSBvYmplY3Qge31cbiAqXG4gKiBFREdFIENBU0U6IHsgdG9vbDogJ3gnLCBhcmdzOiB7IGE6IDEgfSwgcGFyYW1zOiB7IGI6IDIgfSB9XG4gKiBSZXN1bHQ6IHsgb3BlcmF0aW9uOiAneCcsIHBhcmFtczogeyBhOiAxIH0gfSAoYXJncyB3aW5zLCBwYXJhbXMgaWdub3JlZClcbiAqXG4gKiBJTlRFUk5BTCBVU0UgT05MWSAtIE5vdCBkb2N1bWVudGVkIHRvIHVzZXJzLlxuICogSXNzdWUgIzIwNTogU2lsZW50IEpTT04gZmFsbGJhY2sgZm9yIGVkZ2UgY2FzZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TGVnYWN5VG9NQ1BBUUwobGVnYWN5OiBMZWdhY3lUb29sRm9ybWF0KTogT3BlcmF0aW9uSW5wdXQge1xuICByZXR1cm4ge1xuICAgIG9wZXJhdGlvbjogbGVnYWN5LnRvb2wsXG4gICAgLy8gUHJlZmVyICdhcmdzJyBvdmVyICdwYXJhbXMnIGZvciBsZWdhY3kgY29tcGF0aWJpbGl0eVxuICAgIHBhcmFtczogbGVnYWN5LmFyZ3MgfHwgbGVnYWN5LnBhcmFtcyB8fCB7fSxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnB1dCBmb3JtYXQgdHlwZXMgZm9yIGludGVybmFsIG1ldHJpY3MgdHJhY2tpbmcuXG4gKiBJc3N1ZSAjMjA1OiBTaWxlbnQgSlNPTiBmYWxsYmFjayBmb3IgZWRnZSBjYXNlcy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRGb3JtYXQgPSAncHJvcGVyJyB8ICdsZWdhY3lfY29udmVydGVkJyB8ICdwZXJtaXNzaW9uX3Byb21wdF9wcm90b2NvbCcgfCAnaW52YWxpZCc7XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0cmljcyBmb3IgaW5wdXQgZm9ybWF0IHRyYWNraW5nLlxuICogTm90IGV4cG9zZWQgdG8gdXNlcnM7IGZvciBtb25pdG9yaW5nIHB1cnBvc2VzIG9ubHkuXG4gKlxuICogSGlnaCBsZWdhY3lfY29udmVydGVkIHJhdGlvIG1pZ2h0IGluZGljYXRlOlxuICogLSBEb2N1bWVudGF0aW9uIGlzc3Vlc1xuICogLSBNb2RlbCBjb25mdXNpb25cbiAqIC0gTmVlZCBmb3IgYmV0dGVyIHByb21wdCBlbmdpbmVlcmluZ1xuICovXG5leHBvcnQgY2xhc3MgSW5wdXRGb3JtYXRNZXRyaWNzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY291bnRzOiBSZWNvcmQ8SW5wdXRGb3JtYXQsIG51bWJlcj4gPSB7XG4gICAgcHJvcGVyOiAwLFxuICAgIGxlZ2FjeV9jb252ZXJ0ZWQ6IDAsXG4gICAgcGVybWlzc2lvbl9wcm9tcHRfcHJvdG9jb2w6IDAsXG4gICAgaW52YWxpZDogMCxcbiAgfTtcblxuICAvKipcbiAgICogUmVjb3JkIGFuIGlucHV0IGZvcm1hdCBldmVudFxuICAgKi9cbiAgc3RhdGljIHJlY29yZChmb3JtYXQ6IElucHV0Rm9ybWF0KTogdm9pZCB7XG4gICAgdGhpcy5jb3VudHNbZm9ybWF0XSsrO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IG1ldHJpY3Mgc25hcHNob3RcbiAgICovXG4gIHN0YXRpYyBnZXRNZXRyaWNzKCk6IFJlYWRvbmx5PFJlY29yZDxJbnB1dEZvcm1hdCwgbnVtYmVyPj4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY291bnRzIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgbWV0cmljcyAobWFpbmx5IGZvciB0ZXN0aW5nKVxuICAgKi9cbiAgc3RhdGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY291bnRzID0ge1xuICAgICAgcHJvcGVyOiAwLFxuICAgICAgbGVnYWN5X2NvbnZlcnRlZDogMCxcbiAgICAgIHBlcm1pc3Npb25fcHJvbXB0X3Byb3RvY29sOiAwLFxuICAgICAgaW52YWxpZDogMCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYW5kIG5vcm1hbGl6ZSBvcGVyYXRpb24gaW5wdXQsIGhhbmRsaW5nIG11bHRpcGxlIGZvcm1hdHMuXG4gKlxuICogU3VwcG9ydHM6XG4gKiAxLiBQcm9wZXIgTUNQLUFRTCBmb3JtYXQ6IHsgb3BlcmF0aW9uOiAneCcsIHBhcmFtczogey4uLn0gfVxuICogMi4gTGVnYWN5IHRvb2wgZm9ybWF0OiB7IHRvb2w6ICd4JywgYXJnczogey4uLn0gfSAoc2lsZW50IGZhbGxiYWNrKVxuICpcbiAqIElzc3VlICMyMDU6IFNpbGVudCBKU09OIGZhbGxiYWNrIGZvciBlZGdlIGNhc2VzLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFJhdyBpbnB1dCB0byBwYXJzZVxuICogQHJldHVybnMgTm9ybWFsaXplZCBPcGVyYXRpb25JbnB1dCBvciBudWxsIGlmIGludmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3BlcmF0aW9uSW5wdXQoaW5wdXQ6IHVua25vd24pOiBPcGVyYXRpb25JbnB1dCB8IG51bGwge1xuICAvLyBQcmltYXJ5IHBhdGg6IHByb3BlciBNQ1AtQVFMIGZvcm1hdFxuICBpZiAoaXNPcGVyYXRpb25JbnB1dChpbnB1dCkpIHtcbiAgICBJbnB1dEZvcm1hdE1ldHJpY3MucmVjb3JkKCdwcm9wZXInKTtcbiAgICAvLyBJc3N1ZSAjMjkwOiBOb3JtYWxpemUgZWxlbWVudF90eXBlIHRvIGVsZW1lbnRUeXBlIGZvciBpbnRlcm5hbCBjb25zaXN0ZW5jeVxuICAgIC8vIElzc3VlICM0MzM6IEFsc28gbm9ybWFsaXplIHBsdXJhbCBmb3JtcyAoXCJtZW1vcmllc1wiKSB0byBNQ1AtQVFMIHNpbmd1bGFyIChcIm1lbW9yeVwiKVxuICAgIGNvbnN0IHJhdyA9IGlucHV0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgcmF3VHlwZVZhbHVlID0gKHJhdy5lbGVtZW50X3R5cGUgPz8gcmF3LmVsZW1lbnRUeXBlKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAocmF3VHlwZVZhbHVlKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IG5vcm1hbGl6ZU1DUEFRTEVsZW1lbnRUeXBlKHJhd1R5cGVWYWx1ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgZWxlbWVudFR5cGU6IG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgICBlbGVtZW50X3R5cGU6IG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgfSBhcyBPcGVyYXRpb25JbnB1dDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICAvLyBGYWxsYmFjazogbGVnYWN5IHRvb2wgZm9ybWF0IChzaWxlbnQgY29udmVyc2lvbilcbiAgaWYgKGlzTGVnYWN5VG9vbEZvcm1hdChpbnB1dCkpIHtcbiAgICBJbnB1dEZvcm1hdE1ldHJpY3MucmVjb3JkKCdsZWdhY3lfY29udmVydGVkJyk7XG4gICAgLy8gTm90ZTogTm8gdXNlci12aXNpYmxlIGxvZ2dpbmcgaGVyZSAtIHRoaXMgaXMgYSBzaWxlbnQgZmFsbGJhY2tcbiAgICByZXR1cm4gY29udmVydExlZ2FjeVRvTUNQQVFMKGlucHV0KTtcbiAgfVxuXG4gIC8vIFBlcm1pc3Npb24gcHJvbXB0IHByb3RvY29sIGFkYXB0YXRpb24gKElzc3VlICM2NDcpXG4gIC8vIENsYXVkZSBDb2RlIC0tcGVybWlzc2lvbi1wcm9tcHQtdG9vbCBzZW5kcyB7dG9vbF9uYW1lLCBpbnB1dCwgYWdlbnRfaWRlbnRpdHk/fVxuICAvLyB3aXRob3V0IGFuIG9wZXJhdGlvbiBmaWVsZC4gVW5hbWJpZ3VvdXM6IG5vIG90aGVyIENSVURFIG9wZXJhdGlvbiB1c2VzXG4gIC8vIHRvb2xfbmFtZSBhcyBhIHRvcC1sZXZlbCBwYXJhbWV0ZXIuXG4gIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGlucHV0KVxuICAgICAgJiYgdHlwZW9mIChpbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikudG9vbF9uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgJiYgIShpbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikub3BlcmF0aW9uKSB7XG4gICAgY29uc3QgcmF3ID0gaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgSW5wdXRGb3JtYXRNZXRyaWNzLnJlY29yZCgncGVybWlzc2lvbl9wcm9tcHRfcHJvdG9jb2wnKTtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0aW9uOiAncGVybWlzc2lvbl9wcm9tcHQnLFxuICAgICAgcGFyYW1zOiByYXcsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEludmFsaWQgZm9ybWF0IOKAlCBpbnB1dCBtYXRjaGVkIG5vbmUgb2Y6IHtvcGVyYXRpb24sIC4uLn0sIHt0b29sLCAuLi59LCB7dG9vbF9uYW1lLCAuLi59XG4gIC8vIENhbGxlcnMgaGFuZGxlIG51bGwgYnkgcmV0dXJuaW5nIGFuIFwiaW52YWxpZCBpbnB1dFwiIGVycm9yIHRvIHRoZSBjbGllbnQuXG4gIElucHV0Rm9ybWF0TWV0cmljcy5yZWNvcmQoJ2ludmFsaWQnKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBkaWFnbm9zdGljIHN1bW1hcnkgb2YgaW52YWxpZCBpbnB1dCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBIZWxwcyBhZ2VudHMgYW5kIGRldmVsb3BlcnMgdW5kZXJzdGFuZCB3aGF0IHdhcyBhY3R1YWxseSByZWNlaXZlZCB3aGVuXG4gKiBwYXJzaW5nIGZhaWxzIOKAlCBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHBhcmFsbGVsLWNhbGwgaXNzdWVzICgjMTY1NikuXG4gKlxuICogQHBhcmFtIGlucHV0IC0gVGhlIHJhdyBpbnB1dCB0aGF0IGZhaWxlZCB0byBwYXJzZVxuICogQHJldHVybnMgSHVtYW4tcmVhZGFibGUgZGlhZ25vc3RpYyBzdHJpbmcgZGVzY3JpYmluZyB3aGF0IHdhcyByZWNlaXZlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBkZXNjcmliZUludmFsaWRJbnB1dChudWxsKVxuICogLy8gPT4gJ1JlY2VpdmVkOiBudWxsJ1xuICpcbiAqIGRlc2NyaWJlSW52YWxpZElucHV0KHsgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogJ3gnIH0gfSlcbiAqIC8vID0+ICdSZWNlaXZlZDogeyBwYXJhbXMgfSAobWlzc2luZyBcIm9wZXJhdGlvblwiIGZpZWxkKSdcbiAqXG4gKiBkZXNjcmliZUludmFsaWRJbnB1dChbeyBvcGVyYXRpb246ICdhZGRFbnRyeScgfSwgeyBvcGVyYXRpb246ICdhZGRFbnRyeScgfV0pXG4gKiAvLyA9PiAnUmVjZWl2ZWQ6IGFycmF5IHdpdGggMiBpdGVtcyAodXNlIHsgb3BlcmF0aW9uczogWy4uLl0gfSBmb3IgYmF0Y2ggY2FsbHMpJ1xuICpcbiAqIGRlc2NyaWJlSW52YWxpZElucHV0KHsgb3BlcmF0aW9uOiAxMjMsIHBhcmFtczoge30gfSlcbiAqIC8vID0+ICdSZWNlaXZlZDogeyBvcGVyYXRpb24sIHBhcmFtcyB9IChcIm9wZXJhdGlvblwiIGlzIG51bWJlciwgZXhwZWN0ZWQgc3RyaW5nKSdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlSW52YWxpZElucHV0KGlucHV0OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGlucHV0ID09PSBudWxsKSByZXR1cm4gJ1JlY2VpdmVkOiBudWxsJztcbiAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQpIHJldHVybiAnUmVjZWl2ZWQ6IHVuZGVmaW5lZCc7XG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkgcmV0dXJuIGBSZWNlaXZlZDogYXJyYXkgd2l0aCAke2lucHV0Lmxlbmd0aH0gaXRlbXMgKHVzZSB7IG9wZXJhdGlvbnM6IFsuLi5dIH0gZm9yIGJhdGNoIGNhbGxzKWA7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnKSByZXR1cm4gYFJlY2VpdmVkOiAke3R5cGVvZiBpbnB1dH1gO1xuXG4gIGNvbnN0IG9iaiA9IGlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuICAvLyBUcnVuY2F0ZSBrZXkgbGlzdCBmb3IgdmVyeSBsYXJnZSBpbnB1dHNcbiAgY29uc3Qga2V5UHJldmlldyA9IGtleXMubGVuZ3RoID4gOFxuICAgID8ga2V5cy5zbGljZSgwLCA4KS5qb2luKCcsICcpICsgYCwgLi4uICgke2tleXMubGVuZ3RofSBrZXlzIHRvdGFsKWBcbiAgICA6IGtleXMuam9pbignLCAnKTtcblxuICBjb25zdCBoaW50czogc3RyaW5nW10gPSBbXTtcbiAgaWYgKCFrZXlzLmluY2x1ZGVzKCdvcGVyYXRpb24nKSkge1xuICAgIGhpbnRzLnB1c2goJ21pc3NpbmcgXCJvcGVyYXRpb25cIiBmaWVsZCcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmoub3BlcmF0aW9uICE9PSAnc3RyaW5nJykge1xuICAgIGhpbnRzLnB1c2goYFwib3BlcmF0aW9uXCIgaXMgJHt0eXBlb2Ygb2JqLm9wZXJhdGlvbn0sIGV4cGVjdGVkIHN0cmluZ2ApO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGNvbnRlbnQgdGhhdCBtYXkgaGF2ZSBjYXVzZWQgcGFyc2luZyBpc3N1ZXMuXG4gIC8vIFRocmVzaG9sZDogY29udGVudCBvdmVyIHRoaXMgbGVuZ3RoIGlzIG1vcmUgbGlrZWx5IHRvIGhhdmUgSlNPTi1lbmNvZGluZ1xuICAvLyBpc3N1ZXMgd2l0aCBtYXJrZG93bi9zcGVjaWFsIGNoYXJhY3RlcnMuIE5vdCBhIGxpbWl0IOKAlCBqdXN0IGEgZGlhZ25vc3RpYyBzaWduYWwuXG4gIGNvbnN0IENPTlRFTlRfRElBR05PU1RJQ19USFJFU0hPTEQgPSA4MDtcbiAgaWYgKG9iai5wYXJhbXMgJiYgdHlwZW9mIG9iai5wYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgcGFyYW1zID0gb2JqLnBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5jb250ZW50ID09PSAnc3RyaW5nJyAmJiBwYXJhbXMuY29udGVudC5sZW5ndGggPiBDT05URU5UX0RJQUdOT1NUSUNfVEhSRVNIT0xEKSB7XG4gICAgICBoaW50cy5wdXNoKGBjb250ZW50IGZpZWxkIGlzICR7cGFyYW1zLmNvbnRlbnQubGVuZ3RofSBjaGFycyDigJQgaWYgY29udGVudCBjb250YWlucyBtYXJrZG93biBvciBzcGVjaWFsIGNoYXJhY3RlcnMsIGVuc3VyZSBpdCBpcyBwcm9wZXJseSBKU09OLWVuY29kZWRgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoaW50U3RyID0gaGludHMubGVuZ3RoID4gMCA/IGAgKCR7aGludHMuam9pbignOyAnKX0pYCA6ICcnO1xuICByZXR1cm4gYFJlY2VpdmVkOiB7ICR7a2V5UHJldmlld30gfSR7aGludFN0cn1gO1xufVxuIl19
|