@bitgo/sdk-api 1.76.3 → 1.77.0
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/package.json +3 -3
- package/dist/src/api.d.ts.map +1 -1
- package/dist/src/api.js +3 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/sdk-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.77.0",
|
|
4
4
|
"description": "REST wrapper for BitGoJS",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo/sdk-core": "^36.
|
|
43
|
+
"@bitgo/sdk-core": "^36.40.0",
|
|
44
44
|
"@bitgo/sdk-hmac": "^1.9.0",
|
|
45
45
|
"@bitgo/sjcl": "^1.1.0",
|
|
46
46
|
"@bitgo/unspents": "^0.51.3",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"resolutions": {
|
|
63
63
|
"degenerator": "5.0.0"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "2f817ccd7fa1e6a5f8bf6802879a3fa8e1b717f3",
|
|
66
66
|
"files": [
|
|
67
67
|
"dist"
|
|
68
68
|
]
|
package/dist/src/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,OAAO,EAAoB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAsB,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,kBAAkB,GAAG,GAAG,EACrD,GAAG,EAAE,UAAU,CAAC,iBAAiB,GAChC,YAAY,CAAC,kBAAkB,CAAC,CASlC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,kBAAkB,EACrD,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,KAAK,kBAAkB,CAalD;AAkBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,GAAG;IAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAA;CAAE,GAAG,KAAK,CAKxF;AAgCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS,CAsDhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAwB7E;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,OAAO,EAAoB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAsB,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,kBAAkB,GAAG,GAAG,EACrD,GAAG,EAAE,UAAU,CAAC,iBAAiB,GAChC,YAAY,CAAC,kBAAkB,CAAC,CASlC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,kBAAkB,EACrD,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,KAAK,kBAAkB,CAalD;AAkBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,GAAG;IAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAA;CAAE,GAAG,KAAK,CAKxF;AAgCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS,CAsDhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAwB7E;AAqCD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EACvC,GAAG,EAAE,UAAU,CAAC,iBAAiB,EACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAC7B,WAAW,EAAE,WAAW,GACvB,UAAU,CAAC,QAAQ,CAkBrB;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EACvC,GAAG,EAAE,UAAU,CAAC,iBAAiB,EACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAC7B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAkB9B"}
|
package/dist/src/api.js
CHANGED
|
@@ -216,7 +216,7 @@ function assertVerificationResponse(bitgo, token, req, response, verificationRes
|
|
|
216
216
|
bitgoToken: partialBitgoToken,
|
|
217
217
|
};
|
|
218
218
|
debug('Invalid response HMAC: %O', errorDetails);
|
|
219
|
-
throw new sdk_core_1.ApiResponseError('invalid response HMAC
|
|
219
|
+
throw new sdk_core_1.ApiResponseError('invalid response HMAC', 511, errorDetails);
|
|
220
220
|
}
|
|
221
221
|
if (bitgo.getAuthVersion() === 3 && !verificationResponse.isInResponseValidityWindow) {
|
|
222
222
|
const errorDetails = {
|
|
@@ -224,7 +224,7 @@ function assertVerificationResponse(bitgo, token, req, response, verificationRes
|
|
|
224
224
|
verificationTime: verificationResponse.verificationTime,
|
|
225
225
|
};
|
|
226
226
|
debug('Server response outside response validity time window: %O', errorDetails);
|
|
227
|
-
throw new sdk_core_1.ApiResponseError('server response outside response validity time window
|
|
227
|
+
throw new sdk_core_1.ApiResponseError('server response outside response validity time window', 511, errorDetails);
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
230
|
/**
|
|
@@ -265,4 +265,4 @@ async function verifyResponseAsync(bitgo, token, method, req, response, authVers
|
|
|
265
265
|
assertVerificationResponse(bitgo, token, req, response, verificationResponse);
|
|
266
266
|
return response;
|
|
267
267
|
}
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTZCQSx3Q0FXQztBQU9ELG9EQWVDO0FBdUJELGtEQUtDO0FBdUNELG9EQXNEQztBQU1ELHNEQXdCQztBQTZDRCx3Q0F5QkM7QUFFRCxrREF5QkM7QUF0VEQ7O0dBRUc7QUFDSCxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLG9EQUF1QjtBQUN2QixrRUFBeUM7QUFDekMsNERBQW9DO0FBQ3BDLDhDQUF5QjtBQUN6Qiw4REFBc0M7QUFFdEMsOENBQWlFO0FBS2pFLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLEdBQWlDO0lBRWpDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDeEIsTUFBTSxDQUFDLGFBQXNCO1lBQzNCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FDYixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQXFCLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUMvRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQ3RDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FDbEMsYUFBc0I7SUFFdEIsT0FBTyxVQUFVLEdBQXdCO1FBQ3ZDLElBQUksZ0JBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDcEUsT0FBTztZQUNMLDBGQUEwRjtZQUMxRixnSEFBZ0g7WUFDaEgsQ0FBQyxhQUFhLElB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LEVBQUUsR0FBRyxDQUFDLG1CQUFtQjtRQUM5QixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUMsQ0FBQztJQUVILDBCQUEwQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzlFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLEtBQWUsRUFDZixLQUF5QixFQUN6QixNQUF1QyxFQUN2QyxHQUFpQyxFQUNqQyxRQUE2QixFQUM3QixXQUF3QjtJQUV4QixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdkQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDM0QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO1FBQ1osSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUMxQixVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1FBQ25CLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVM7UUFDcEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7UUFDOUIsTUFBTTtRQUNOLFdBQVc7S0FDWixDQUFDLENBQUM7SUFFSCwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUM5RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBlb2wgZnJvbSAnZW9sJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2FuaXRpemVIdG1sIGZyb20gJ3Nhbml0aXplLWh0bWwnO1xuaW1wb3J0IHN1cGVyYWdlbnQgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgdXJsTGliIGZyb20gJ3VybCc7XG5pbXBvcnQgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuXG5pbXBvcnQgeyBBcGlSZXNwb25zZUVycm9yLCBCaXRHb1JlcXVlc3QgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBdXRoVmVyc2lvbiwgVmVyaWZ5UmVzcG9uc2VJbmZvLCBWZXJpZnlSZXNwb25zZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnLi9iaXRnb0FQSSc7XG5cbmNvbnN0IGRlYnVnID0gRGVidWcoJ2JpdGdvOmFwaScpO1xuXG4vKipcbiAqIEFkZCB0aGUgYml0Z28tc3BlY2lmaWMgcmVzdWx0KCkgZnVuY3Rpb24gb24gYSBzdXBlcmFnZW50IHJlcXVlc3QuXG4gKlxuICogSWYgdGhlIHNlcnZlciByZXNwb25zZSBpcyBzdWNjZXNzZnVsLCB0aGUgYHJlc3VsdCgpYCBmdW5jdGlvbiB3aWxsIHJldHVybiBlaXRoZXIgdGhlIGVudGlyZSByZXNwb25zZSBib2R5LFxuICogb3IgdGhlIGZpZWxkIGZyb20gdGhlIHJlc3BvbnNlIGJvZHkgc3BlY2lmaWVkIGJ5IHRoZSBgb3B0aW9uYWxGaWVsZGAgcGFyYW1ldGVyIGlmIGl0IGlzIHByb3ZpZGVkLlxuICpcbiAqIElmIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugd2l0aCBhbiBlcnJvciwgYHJlc3VsdCgpYCB3aWxsIGhhbmRsZSBIVFRQIGVycm9ycyBhcHByb3ByaWF0ZWx5IGJ5XG4gKiByZXRocm93aW5nIHRoZW0gYXMgYW4gYEFwaVJlc3BvbnNlRXJyb3JgIGlmIHBvc3NpYmxlLCBhbmQgb3RoZXJ3aXNlIHJldGhyb3dpbmcgdGhlIHVuZGVybHlpbmcgcmVzcG9uc2UgZXJyb3IuXG4gKlxuICogQHBhcmFtIHJlcVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9CaXRnb1JlcXVlc3Q8UmVzcG9uc2VSZXN1bHRUeXBlID0gYW55PihcbiAgcmVxOiBzdXBlcmFnZW50LlN1cGVyQWdlbnRSZXF1ZXN0XG4pOiBCaXRHb1JlcXVlc3Q8UmVzcG9uc2VSZXN1bHRUeXBlPiB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHJlcSwge1xuICAgIHJlc3VsdChvcHRpb25hbEZpZWxkPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gcmVxLnRoZW4oXG4gICAgICAgIChyZXNwb25zZSkgPT4gaGFuZGxlUmVzcG9uc2VSZXN1bHQ8UmVzcG9uc2VSZXN1bHRUeXBlPihvcHRpb25hbEZpZWxkKShyZXNwb25zZSksXG4gICAgICAgIChlcnJvcikgPT4gaGFuZGxlUmVzcG9uc2VFcnJvcihlcnJvcilcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggZXh0cmFjdHMgdGhlIHNwZWNpZmllZCByZXNwb25zZSBib2R5IHByb3BlcnR5IGZyb20gdGhlIHJlc3BvbnNlIGlmIHN1Y2Nlc3NmdWwsXG4gKiBvdGhlcndpc2UgdGhyb3cgYW4gYEFwaUVycm9yUmVzcG9uc2VgIHBhcnNlZCBmcm9tIHRoZSByZXNwb25zZSBib2R5LlxuICogQHBhcmFtIG9wdGlvbmFsRmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlUmVzdWx0PFJlc3BvbnNlUmVzdWx0VHlwZT4oXG4gIG9wdGlvbmFsRmllbGQ/OiBzdHJpbmdcbik6IChyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UpID0+IFJlc3BvbnNlUmVzdWx0VHlwZSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzOiBzdXBlcmFnZW50LlJlc3BvbnNlKTogUmVzcG9uc2VSZXN1bHRUeXBlIHtcbiAgICBpZiAoXy5pc051bWJlcihyZXMuc3RhdHVzKSAmJiByZXMuc3RhdHVzID49IDIwMCAmJiByZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG9wdGlvbmFsIGZpZWxkIGFuZCB0aGUgYm9keSBpcyBub24tbnVsbGlzaCB3aXRoIHRoYXQgcHJvcGVydHksIHJldHVybiBpdDtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHJldHVybiB0aGUgYm9keSBpZiBhdmFpbGFibGU7IGlmIG5vdCwgcmV0dXJuIHRoZSB0ZXh0OyBhbmQgZmluYWxseSBmYWxsYmFjayB0byB0aGUgZW50aXJlIHJlc3BvbnNlLlxuICAgICAgICAob3B0aW9uYWxGaWVsZCAmJiByZXMuYm9keSAmJiByZXMuYm9keVtvcHRpb25hbEZpZWxkXSAhPT0gdW5kZWZpbmVkID8gcmVzLmJvZHlbb3B0aW9uYWxGaWVsZF0gOiByZXMuYm9keSkgPz9cbiAgICAgICAgcmVzLnRleHQgPz9cbiAgICAgICAgcmVzXG4gICAgICApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJGcm9tUmVzcG9uc2UocmVzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gYSBzdWNjZXNzZnVsIHJlc3BvbnNlICh0aGF0IGlzLCBhIHJlc3BvbnNlIHdpdGggYW4gSFRUUCBzdGF0dXMgY29kZVxuICogYmV0d2VlbiAyMDAgYW5kIDI5OSksIGJ1dCB3aGljaCByZXN1bHRlZCBpbiBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBlcnJvciBhbmQgdXNlIGl0IHRvIGNvbnN0cnVjdCBhbmRcbiAqIHRocm93IGFuIGBBcGlFcnJvclJlc3BvbnNlYC5cbiAqXG4gKiBAcGFyYW0gcmVzXG4gKi9cbmZ1bmN0aW9uIGVyckZyb21SZXNwb25zZTxSZXNwb25zZUJvZHlUeXBlPihyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UpOiBBcGlSZXNwb25zZUVycm9yIHtcbiAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZVJlc3BvbnNlRXJyb3JTdHJpbmcocmVzKTtcbiAgY29uc3Qgc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgY29uc3QgcmVzdWx0ID0gcmVzLmJvZHkgYXMgUmVzcG9uc2VCb2R5VHlwZTtcbiAgY29uc3QgaW52YWxpZFRva2VuID0gXy5oYXMocmVzLmhlYWRlciwgJ3gtYXV0aC1yZXF1aXJlZCcpICYmIHJlcy5oZWFkZXJbJ3gtYXV0aC1yZXF1aXJlZCddID09PSAndHJ1ZSc7XG4gIGNvbnN0IG5lZWRzT3RwID0gcmVzLmJvZHk/Lm5lZWRzT1RQICE9PSB1bmRlZmluZWQ7XG4gIHJldHVybiBuZXcgQXBpUmVzcG9uc2VFcnJvcihtZXNzYWdlLCBzdGF0dXMsIHJlc3VsdCwgaW52YWxpZFRva2VuLCBuZWVkc090cCk7XG59XG5cbi8qKlxuICogSGFuZGxlIGFuIGVycm9yIG9yIGFuIGVycm9yIGNvbnRhaW5pbmcgYW4gSFRUUCByZXNwb25zZSBhbmQgdXNlIGl0IHRvIHRocm93IGEgd2VsbC1mb3JtZWQgZXJyb3Igb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZUVycm9yKGU6IEVycm9yICYgeyByZXNwb25zZT86IHN1cGVyYWdlbnQuUmVzcG9uc2UgfSk6IG5ldmVyIHtcbiAgaWYgKGUucmVzcG9uc2UpIHtcbiAgICB0aHJvdyBlcnJGcm9tUmVzcG9uc2UoZS5yZXNwb25zZSk7XG4gIH1cbiAgdGhyb3cgZTtcbn1cblxuLyoqXG4gKiBUaGVyZSBhcmUgbWFueSB3YXlzIGEgcmVxdWVzdCBjYW4gZmFpbCwgYW5kIG1heSB3YXlzIGluZm9ybWF0aW9uIG9uIHRoYXQgZmFpbHVyZSBjYW4gYmVcbiAqIGNvbW11bmljYXRlZCB0byB0aGUgY2xpZW50LiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGhhbmRsZSB0aG9zZSBjYXNlcyBhbmQgY3JlYXRlIGEgc2FuZSBlcnJvciBzdHJpbmdcbiAqIEBwYXJhbSByZXMgUmVzcG9uc2UgZnJvbSBhbiBIVFRQIHJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2VFcnJvclN0cmluZyhyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UpOiBzdHJpbmcge1xuICBsZXQgZXJyU3RyaW5nID0gcmVzLnN0YXR1cy50b1N0cmluZygpOyAvLyBhdCB0aGUgdmVyeSBsZWFzdCB3ZSdsbCBoYXZlIHRoZSBzdGF0dXMgY29kZVxuICBpZiAocmVzLmJvZHk/LmVycm9yKSB7XG4gICAgLy8gdGhpcyBpcyB0aGUgY2FzZSB3ZSBob3BlIGZvciwgd2hlcmUgdGhlIHNlcnZlciBnaXZlcyB1cyBhIG5pY2UgZXJyb3IgZnJvbSB0aGUgSlNPTiBib2R5XG4gICAgZXJyU3RyaW5nID0gcmVzLmJvZHkuZXJyb3I7XG4gIH0gZWxzZSBpZiAocmVzLnRleHQpIHtcbiAgICAvLyBpZiB0aGUgcmVzcG9uc2UgY2FtZSBiYWNrIGFzIHRleHQsIHdlIHRyeSB0byBwYXJzZSBpdCBhcyBIVE1MIGFuZCByZW1vdmUgYWxsIHRhZ3MsIGxlYXZpbmcgdXNcbiAgICAvLyBqdXN0IHRoZSBiYXJlIHRleHQsIHdoaWNoIHdlIHRoZW4gdHJpbSBvZiBleGNlc3NpdmUgbmV3bGluZXMgYW5kIGxpbWl0IHRvIGEgY2VydGFpbiBsZW5ndGhcbiAgICB0cnkge1xuICAgICAgbGV0IHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZUh0bWwocmVzLnRleHQsIHsgYWxsb3dlZFRhZ3M6IFtdIH0pO1xuICAgICAgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplZFRleHQudHJpbSgpO1xuICAgICAgc2FuaXRpemVkVGV4dCA9IGVvbC5sZihzYW5pdGl6ZWRUZXh0KTsgLy8gdXNlICdcXG4nIGZvciBhbGwgbmV3bGluZXNcbiAgICAgIHNhbml0aXplZFRleHQgPSBfLnJlcGxhY2Uoc2FuaXRpemVkVGV4dCwgL1xcblsgfFxcdF17MSx9XFxuL2csICdcXG5cXG4nKTsgLy8gcmVtb3ZlIHRoZSBzcGFjZXMvdGFicyBiZXR3ZWVuIG5ld2xpbmVzXG4gICAgICBzYW5pdGl6ZWRUZXh0ID0gXy5yZXBsYWNlKHNhbml0aXplZFRleHQsIC9bXFxuXXszLH0vZywgJ1xcblxcbicpOyAvLyBoYXZlIGF0IG1vc3QgMiBjb25zZWN1dGl2ZSBuZXdsaW5lc1xuICAgICAgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplZFRleHQuc3Vic3RyaW5nKDAsIDUwMDApOyAvLyBwcmV2ZW50IG1lc3NhZ2UgZnJvbSBnZXR0aW5nIHRvbyBsYXJnZVxuICAgICAgZXJyU3RyaW5nID0gZXJyU3RyaW5nICsgJ1xcbicgKyBzYW5pdGl6ZWRUZXh0OyAvLyBhZGQgaXQgdG8gb3VyIGV4aXN0aW5nIGVyclN0cmluZyAoYXQgdGhpcyBwb2ludCB0aGUgbW9yZSBpbmZvIHRoZSBiZXR0ZXIhKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmcsIHRoZSByZXNwb25zZSdzIEhUTUwgd2FzIHRvbyB3YWNreSB0byBiZSBwYXJzZWQgY2xlYW5seVxuICAgICAgZGVidWcoJ2dvdCBlcnJvciB3aXRoIG1lc3NhZ2UgXCIlc1wiIHdoaWxlIGNyZWF0aW5nIHJlc3BvbnNlIGVycm9yIHN0cmluZyBmcm9tIHJlc3BvbnNlOiAlcycsIGUubWVzc2FnZSwgcmVzLnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJTdHJpbmc7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIHJlcXVlc3QgZGF0YSBiYXNlZCBvbiB0aGUgcmVxdWVzdCBjb250ZW50IHR5cGUuXG4gKiBJZiBkYXRhIGlzIGFscmVhZHkgYSBzdHJpbmcsIHJldHVybnMgaXQgYXMtaXMgdG8gcHJlc2VydmUgZXhhY3QgYnl0ZXMgZm9yIEhNQUMuXG4gKiBJZiBkYXRhIGlzIGEgQnVmZmVyLCBjb252ZXJ0cyB0byBVVEYtOCBzdHJpbmcuXG4gKiBJZiBkYXRhIGlzIGFuIG9iamVjdCwgc2VyaWFsaXplcyBpdCBiYXNlZCBvbiBDb250ZW50LVR5cGUuXG4gKiBAcGFyYW0gcmVxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSZXF1ZXN0RGF0YShyZXE6IHN1cGVyYWdlbnQuUmVxdWVzdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRhdGE6IHN0cmluZyB8IEJ1ZmZlciB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0gKHJlcSBhcyBhbnkpLl9kYXRhO1xuXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAvLyBDb252ZXJ0IEJ1ZmZlciB0byBVVEYtOCBzdHJpbmcgYW5kIG11dGF0ZSBfZGF0YSB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gICAgLy8gVGhpcyBpcyBjcml0aWNhbDogaWYgX2RhdGEgc3RheXMgYXMgYSBCdWZmZXIsIHN1cGVyYWdlbnQgd2lsbCBzZXJpYWxpemUgaXRcbiAgICAvLyBhcyBKU09OICh7XCJ0eXBlXCI6XCJCdWZmZXJcIixcImRhdGFcIjpbLi4uXX0pLCB3aGljaCB3b24ndCBtYXRjaCB0aGUgSE1BQy5cbiAgICAvLyBCeSBtdXRhdGluZyB0byBzdHJpbmcsIHN1cGVyYWdlbnQgc2VuZHMgdGhlIGV4YWN0IGJ5dGVzIHdlIGhhc2guXG4gICAgLy8gVGhpcyBpcyBzYWZlIGZvciByZXRyaWVzOiBjYWxsaW5nIGFnYWluIHdpdGggYSBzdHJpbmcgd2lsbCBoaXQgdGhlIGVhcmx5IHJldHVybiBhYm92ZS5cbiAgICBjb25zdCBzdHJpbmdEYXRhID0gZGF0YS50b1N0cmluZygndXRmOCcpO1xuICAgIChyZXEgYXMgYW55KS5fZGF0YSA9IHN0cmluZ0RhdGE7XG4gICAgcmV0dXJuIHN0cmluZ0RhdGE7XG4gIH1cblxuICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIG9iamVjdCBkYXRhIGJhc2VkIG9uIENvbnRlbnQtVHlwZVxuICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgLy8gUGFyc2Ugb3V0IGp1c3QgdGhlIGNvbnRlbnQgdHlwZSBmcm9tIHRoZSBoZWFkZXIgKGlnbm9yZSB0aGUgY2hhcnNldClcbiAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdLnRyaW0oKTtcbiAgfVxuICBsZXQgc2VyaWFsaXplOiAoKGJvZHk6IHVua25vd24pID0+IHN0cmluZykgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNlcmlhbGl6ZXJzID0gc3VwZXJhZ2VudC5zZXJpYWxpemUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmIChjb250ZW50VHlwZSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VyaWFsaXplcnMsIGNvbnRlbnRUeXBlKSkge1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gc2VyaWFsaXplcnNbY29udGVudFR5cGVdO1xuICAgICAgaWYgKHR5cGVvZiBjYW5kaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2VyaWFsaXplID0gY2FuZGlkYXRlIGFzIChib2R5OiB1bmtub3duKSA9PiBzdHJpbmc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgvW1xcLytdanNvblxcYi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgYnVpbHQtaW4gSlNPTiBzZXJpYWxpemVyIGZvciBKU09OLWxpa2UgY29udGVudCB0eXBlc1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXJpYWxpemVycywgJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICBjb25zdCBqc29uU2VyaWFsaXplciA9IHNlcmlhbGl6ZXJzWydhcHBsaWNhdGlvbi9qc29uJ107XG4gICAgICAgIGlmICh0eXBlb2YganNvblNlcmlhbGl6ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzZXJpYWxpemUgPSBqc29uU2VyaWFsaXplciBhcyAoYm9keTogdW5rbm93bikgPT4gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZSkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemUoZGF0YSk7XG4gICAgKHJlcSBhcyBhbnkpLl9kYXRhID0gc2VyaWFsaXplZDtcbiAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2V0IHRoZSBzdXBlcmFnZW50IHF1ZXJ5IHN0cmluZyBjb3JyZWN0bHkgZm9yIGJyb3dzZXJzIG9yIG5vZGUuXG4gKiBAcGFyYW0gcmVxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRSZXF1ZXN0UXVlcnlTdHJpbmcocmVxOiBzdXBlcmFnZW50LlN1cGVyQWdlbnRSZXF1ZXN0KTogdm9pZCB7XG4gIGNvbnN0IHVybERldGFpbHMgPSB1cmxMaWIucGFyc2UocmVxLnVybCk7XG5cbiAgbGV0IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmdbXSA9IChyZXEgYXMgYW55KS5fcXVlcnk7XG4gIGNvbnN0IHFzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0gKHJlcSBhcyBhbnkpLnFzO1xuICBpZiAocXVlcnkgJiYgcXVlcnkubGVuZ3RoID4gMCkge1xuICAgIC8vIGJyb3dzZXIgdmVyc2lvblxuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnkuam9pbignJicpO1xuICAgIChyZXEgYXMgYW55KS5fcXVlcnkgPSBbXTtcbiAgfSBlbHNlIGlmIChxcykge1xuICAgIC8vIG5vZGUgdmVyc2lvblxuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHFzKTtcbiAgICAocmVxIGFzIGFueSkucXMgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgaWYgKHVybERldGFpbHMuc2VhcmNoKSB7XG4gICAgICB1cmxEZXRhaWxzLnNlYXJjaCArPSAnJicgKyBxdWVyeVN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsRGV0YWlscy5zZWFyY2ggPSAnPycgKyBxdWVyeVN0cmluZztcbiAgICB9XG4gICAgcmVxLnVybCA9IHVybExpYi5mb3JtYXQodXJsRGV0YWlscyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGNvbXBsZXRlZCB2ZXJpZmljYXRpb24gcmVzcG9uc2UgYW5kIHRocm93IGEgZGVzY3JpcHRpdmUgYEFwaVJlc3BvbnNlRXJyb3JgIGlmIGl0XG4gKiBpbmRpY2F0ZXMgdGhlIHJlc3BvbnNlIGlzIGludmFsaWQgb3Igb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSB0aW1lIHdpbmRvdy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0VmVyaWZpY2F0aW9uUmVzcG9uc2UoXG4gIGJpdGdvOiBCaXRHb0FQSSxcbiAgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcmVxOiBzdXBlcmFnZW50LlN1cGVyQWdlbnRSZXF1ZXN0LFxuICByZXNwb25zZTogc3VwZXJhZ2VudC5SZXNwb25zZSxcbiAgdmVyaWZpY2F0aW9uUmVzcG9uc2U6IFZlcmlmeVJlc3BvbnNlSW5mb1xuKTogdm9pZCB7XG4gIGlmICghdmVyaWZpY2F0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgIC8vIExvZyBvbmx5IHRoZSBmaXJzdCAxMCBjaGFyYWN0ZXJzIG9mIHRoZSB0b2tlbiB0byBlbnN1cmUgdGhlIGZ1bGwgdG9rZW4gaXNuJ3QgbG9nZ2VkLlxuICAgIGNvbnN0IHBhcnRpYWxCaXRnb1Rva2VuID0gdG9rZW4gPyB0b2tlbi5zdWJzdHJpbmcoMCwgMTApIDogJyc7XG4gICAgY29uc3QgZXJyb3JEZXRhaWxzID0ge1xuICAgICAgZXhwZWN0ZWRIbWFjOiB2ZXJpZmljYXRpb25SZXNwb25zZS5leHBlY3RlZEhtYWMsXG4gICAgICByZWNlaXZlZEhtYWM6IHJlc3BvbnNlLmhlYWRlci5obWFjLFxuICAgICAgaG1hY0lucHV0OiB2ZXJpZmljYXRpb25SZXNwb25zZS5zaWduYXR1cmVTdWJqZWN0LFxuICAgICAgcmVxdWVzdFRva2VuOiByZXEuYXV0aGVudGljYXRpb25Ub2tlbixcbiAgICAgIGJpdGdvVG9rZW46IHBhcnRpYWxCaXRnb1Rva2VuLFxuICAgIH07XG4gICAgZGVidWcoJ0ludmFsaWQgcmVzcG9uc2UgSE1BQzogJU8nLCBlcnJvckRldGFpbHMpO1xuICAgIHRocm93IG5ldyBBcGlSZXNwb25zZUVycm9yKCdpbnZhbGlkIHJlc3BvbnNlIEhNQUMsIHBvc3NpYmxlIG1hbi1pbi10aGUtbWlkZGxlLWF0dGFjaycsIDUxMSwgZXJyb3JEZXRhaWxzKTtcbiAgfVxuXG4gIGlmIChiaXRnby5nZXRBdXRoVmVyc2lvbigpID09PSAzICYmICF2ZXJpZmljYXRpb25SZXNwb25zZS5pc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdykge1xuICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IHtcbiAgICAgIHRpbWVzdGFtcDogcmVzcG9uc2UuaGVhZGVyLnRpbWVzdGFtcCxcbiAgICAgIHZlcmlmaWNhdGlvblRpbWU6IHZlcmlmaWNhdGlvblJlc3BvbnNlLnZlcmlmaWNhdGlvblRpbWUsXG4gICAgfTtcbiAgICBkZWJ1ZygnU2VydmVyIHJlc3BvbnNlIG91dHNpZGUgcmVzcG9uc2UgdmFsaWRpdHkgdGltZSB3aW5kb3c6ICVPJywgZXJyb3JEZXRhaWxzKTtcbiAgICB0aHJvdyBuZXcgQXBpUmVzcG9uc2VFcnJvcihcbiAgICAgICdzZXJ2ZXIgcmVzcG9uc2Ugb3V0c2lkZSByZXNwb25zZSB2YWxpZGl0eSB0aW1lIHdpbmRvdywgcG9zc2libGUgbWFuLWluLXRoZS1taWRkbGUtYXR0YWNrJyxcbiAgICAgIDUxMSxcbiAgICAgIGVycm9yRGV0YWlsc1xuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZnkgdGhhdCB0aGUgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGlzIHNpZ25lZCBjb3JyZWN0bHkuXG4gKiBSaWdodCBub3csIGl0IGlzIHZlcnkgcGVybWlzc2l2ZSB3aXRoIHRoZSB0aW1lc3RhbXAgdmFyaWFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZXNwb25zZShcbiAgYml0Z286IEJpdEdvQVBJLFxuICB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBtZXRob2Q6IFZlcmlmeVJlc3BvbnNlT3B0aW9uc1snbWV0aG9kJ10sXG4gIHJlcTogc3VwZXJhZ2VudC5TdXBlckFnZW50UmVxdWVzdCxcbiAgcmVzcG9uc2U6IHN1cGVyYWdlbnQuUmVzcG9uc2UsXG4gIGF1dGhWZXJzaW9uOiBBdXRoVmVyc2lvblxuKTogc3VwZXJhZ2VudC5SZXNwb25zZSB7XG4gIGlmICghcmVxLmlzVjJBdXRoZW50aWNhdGVkIHx8ICFyZXEuYXV0aGVudGljYXRpb25Ub2tlbikge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IHZlcmlmaWNhdGlvblJlc3BvbnNlID0gYml0Z28udmVyaWZ5UmVzcG9uc2Uoe1xuICAgIHVybDogcmVxLnVybCxcbiAgICBobWFjOiByZXNwb25zZS5oZWFkZXIuaG1hYyxcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgdGV4dDogcmVzcG9uc2UudGV4dCxcbiAgICB0aW1lc3RhbXA6IHJlc3BvbnNlLmhlYWRlci50aW1lc3RhbXAsXG4gICAgdG9rZW46IHJlcS5hdXRoZW50aWNhdGlvblRva2VuLFxuICAgIG1ldGhvZCxcbiAgICBhdXRoVmVyc2lvbixcbiAgfSk7XG5cbiAgYXNzZXJ0VmVyaWZpY2F0aW9uUmVzcG9uc2UoYml0Z28sIHRva2VuLCByZXEsIHJlc3BvbnNlLCB2ZXJpZmljYXRpb25SZXNwb25zZSk7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVJlc3BvbnNlQXN5bmMoXG4gIGJpdGdvOiBCaXRHb0FQSSxcbiAgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgbWV0aG9kOiBWZXJpZnlSZXNwb25zZU9wdGlvbnNbJ21ldGhvZCddLFxuICByZXE6IHN1cGVyYWdlbnQuU3VwZXJBZ2VudFJlcXVlc3QsXG4gIHJlc3BvbnNlOiBzdXBlcmFnZW50LlJlc3BvbnNlLFxuICBhdXRoVmVyc2lvbjogQXV0aFZlcnNpb25cbik6IFByb21pc2U8c3VwZXJhZ2VudC5SZXNwb25zZT4ge1xuICBpZiAoIXJlcS5pc1YyQXV0aGVudGljYXRlZCB8fCAhcmVxLmF1dGhlbnRpY2F0aW9uVG9rZW4pIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBjb25zdCB2ZXJpZmljYXRpb25SZXNwb25zZSA9IGF3YWl0IGJpdGdvLnZlcmlmeVJlc3BvbnNlQXN5bmMoe1xuICAgIHVybDogcmVxLnVybCxcbiAgICBobWFjOiByZXNwb25zZS5oZWFkZXIuaG1hYyxcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgdGV4dDogcmVzcG9uc2UudGV4dCxcbiAgICB0aW1lc3RhbXA6IHJlc3BvbnNlLmhlYWRlci50aW1lc3RhbXAsXG4gICAgdG9rZW46IHJlcS5hdXRoZW50aWNhdGlvblRva2VuLFxuICAgIG1ldGhvZCxcbiAgICBhdXRoVmVyc2lvbixcbiAgfSk7XG5cbiAgYXNzZXJ0VmVyaWZpY2F0aW9uUmVzcG9uc2UoYml0Z28sIHRva2VuLCByZXEsIHJlc3BvbnNlLCB2ZXJpZmljYXRpb25SZXNwb25zZSk7XG4gIHJldHVybiByZXNwb25zZTtcbn1cbiJdfQ==
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTZCQSx3Q0FXQztBQU9ELG9EQWVDO0FBdUJELGtEQUtDO0FBdUNELG9EQXNEQztBQU1ELHNEQXdCQztBQXlDRCx3Q0F5QkM7QUFFRCxrREF5QkM7QUFsVEQ7O0dBRUc7QUFDSCxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLG9EQUF1QjtBQUN2QixrRUFBeUM7QUFDekMsNERBQW9DO0FBQ3BDLDhDQUF5QjtBQUN6Qiw4REFBc0M7QUFFdEMsOENBQWlFO0FBS2pFLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLEdBQWlDO0lBRWpDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDeEIsTUFBTSxDQUFDLGFBQXNCO1lBQzNCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FDYixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQXFCLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUMvRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQ3RDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FDbEMsYUFBc0I7SUFFdEIsT0FBTyxVQUFVLEdBQXdCO1FBQ3ZDLElBQUksZ0JBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDcEUsT0FBTztZQUNMLDBGQUEwRjtZQUMxRixnSEFBZ0g7WUFDaEgsQ0FBQyxhQUFhLElB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RUFBRSxHQUFHLENBQUMsbUJBQW1CO1FBQzlCLE1BQU07UUFDTixXQUFXO0tBQ1osQ0FBQyxDQUFDO0lBRUgsMEJBQTBCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVNLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsS0FBZSxFQUNmLEtBQXlCLEVBQ3pCLE1BQXVDLEVBQ3ZDLEdBQWlDLEVBQ2pDLFFBQTZCLEVBQzdCLFdBQXdCO0lBRXhCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN2RCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztRQUMzRCxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7UUFDWixJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQzFCLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTTtRQUMzQixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDbkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUztRQUNwQyxLQUFLLEVBQUUsR0FBRyxDQUFDLG1CQUFtQjtRQUM5QixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUMsQ0FBQztJQUVILDBCQUEwQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzlFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGVvbCBmcm9tICdlb2wnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBzYW5pdGl6ZUh0bWwgZnJvbSAnc2FuaXRpemUtaHRtbCc7XG5pbXBvcnQgc3VwZXJhZ2VudCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCB1cmxMaWIgZnJvbSAndXJsJztcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmltcG9ydCB7IEFwaVJlc3BvbnNlRXJyb3IsIEJpdEdvUmVxdWVzdCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEF1dGhWZXJzaW9uLCBWZXJpZnlSZXNwb25zZUluZm8sIFZlcmlmeVJlc3BvbnNlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICcuL2JpdGdvQVBJJztcblxuY29uc3QgZGVidWcgPSBEZWJ1ZygnYml0Z286YXBpJyk7XG5cbi8qKlxuICogQWRkIHRoZSBiaXRnby1zcGVjaWZpYyByZXN1bHQoKSBmdW5jdGlvbiBvbiBhIHN1cGVyYWdlbnQgcmVxdWVzdC5cbiAqXG4gKiBJZiB0aGUgc2VydmVyIHJlc3BvbnNlIGlzIHN1Y2Nlc3NmdWwsIHRoZSBgcmVzdWx0KClgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGVpdGhlciB0aGUgZW50aXJlIHJlc3BvbnNlIGJvZHksXG4gKiBvciB0aGUgZmllbGQgZnJvbSB0aGUgcmVzcG9uc2UgYm9keSBzcGVjaWZpZWQgYnkgdGhlIGBvcHRpb25hbEZpZWxkYCBwYXJhbWV0ZXIgaWYgaXQgaXMgcHJvdmlkZWQuXG4gKlxuICogSWYgdGhlIHNlcnZlciByZXNwb25zZSB3aXRoIGFuIGVycm9yLCBgcmVzdWx0KClgIHdpbGwgaGFuZGxlIEhUVFAgZXJyb3JzIGFwcHJvcHJpYXRlbHkgYnlcbiAqIHJldGhyb3dpbmcgdGhlbSBhcyBhbiBgQXBpUmVzcG9uc2VFcnJvcmAgaWYgcG9zc2libGUsIGFuZCBvdGhlcndpc2UgcmV0aHJvd2luZyB0aGUgdW5kZXJseWluZyByZXNwb25zZSBlcnJvci5cbiAqXG4gKiBAcGFyYW0gcmVxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0JpdGdvUmVxdWVzdDxSZXNwb25zZVJlc3VsdFR5cGUgPSBhbnk+KFxuICByZXE6IHN1cGVyYWdlbnQuU3VwZXJBZ2VudFJlcXVlc3Rcbik6IEJpdEdvUmVxdWVzdDxSZXNwb25zZVJlc3VsdFR5cGU+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocmVxLCB7XG4gICAgcmVzdWx0KG9wdGlvbmFsRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiByZXEudGhlbihcbiAgICAgICAgKHJlc3BvbnNlKSA9PiBoYW5kbGVSZXNwb25zZVJlc3VsdDxSZXNwb25zZVJlc3VsdFR5cGU+KG9wdGlvbmFsRmllbGQpKHJlc3BvbnNlKSxcbiAgICAgICAgKGVycm9yKSA9PiBoYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKVxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgc3BlY2lmaWVkIHJlc3BvbnNlIGJvZHkgcHJvcGVydHkgZnJvbSB0aGUgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bCxcbiAqIG90aGVyd2lzZSB0aHJvdyBhbiBgQXBpRXJyb3JSZXNwb25zZWAgcGFyc2VkIGZyb20gdGhlIHJlc3BvbnNlIGJvZHkuXG4gKiBAcGFyYW0gb3B0aW9uYWxGaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2VSZXN1bHQ8UmVzcG9uc2VSZXN1bHRUeXBlPihcbiAgb3B0aW9uYWxGaWVsZD86IHN0cmluZ1xuKTogKHJlczogc3VwZXJhZ2VudC5SZXNwb25zZSkgPT4gUmVzcG9uc2VSZXN1bHRUeXBlIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UpOiBSZXNwb25zZVJlc3VsdFR5cGUge1xuICAgIGlmIChfLmlzTnVtYmVyKHJlcy5zdGF0dXMpICYmIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDApIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gb3B0aW9uYWwgZmllbGQgYW5kIHRoZSBib2R5IGlzIG5vbi1udWxsaXNoIHdpdGggdGhhdCBwcm9wZXJ0eSwgcmV0dXJuIGl0O1xuICAgICAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBib2R5IGlmIGF2YWlsYWJsZTsgaWYgbm90LCByZXR1cm4gdGhlIHRleHQ7IGFuZCBmaW5hbGx5IGZhbGxiYWNrIHRvIHRoZSBlbnRpcmUgcmVzcG9uc2UuXG4gICAgICAgIChvcHRpb25hbEZpZWxkICYmIHJlcy5ib2R5ICYmIHJlcy5ib2R5W29wdGlvbmFsRmllbGRdICE9PSB1bmRlZmluZWQgPyByZXMuYm9keVtvcHRpb25hbEZpZWxkXSA6IHJlcy5ib2R5KSA/P1xuICAgICAgICByZXMudGV4dCA/P1xuICAgICAgICByZXNcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVyckZyb21SZXNwb25zZShyZXMpO1xuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcmVsZXZhbnQgaW5mb3JtYXRpb24gZnJvbSBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgKHRoYXQgaXMsIGEgcmVzcG9uc2Ugd2l0aCBhbiBIVFRQIHN0YXR1cyBjb2RlXG4gKiBiZXR3ZWVuIDIwMCBhbmQgMjk5KSwgYnV0IHdoaWNoIHJlc3VsdGVkIGluIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmljIGVycm9yIGFuZCB1c2UgaXQgdG8gY29uc3RydWN0IGFuZFxuICogdGhyb3cgYW4gYEFwaUVycm9yUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSByZXNcbiAqL1xuZnVuY3Rpb24gZXJyRnJvbVJlc3BvbnNlPFJlc3BvbnNlQm9keVR5cGU+KHJlczogc3VwZXJhZ2VudC5SZXNwb25zZSk6IEFwaVJlc3BvbnNlRXJyb3Ige1xuICBjb25zdCBtZXNzYWdlID0gY3JlYXRlUmVzcG9uc2VFcnJvclN0cmluZyhyZXMpO1xuICBjb25zdCBzdGF0dXMgPSByZXMuc3RhdHVzO1xuICBjb25zdCByZXN1bHQgPSByZXMuYm9keSBhcyBSZXNwb25zZUJvZHlUeXBlO1xuICBjb25zdCBpbnZhbGlkVG9rZW4gPSBfLmhhcyhyZXMuaGVhZGVyLCAneC1hdXRoLXJlcXVpcmVkJykgJiYgcmVzLmhlYWRlclsneC1hdXRoLXJlcXVpcmVkJ10gPT09ICd0cnVlJztcbiAgY29uc3QgbmVlZHNPdHAgPSByZXMuYm9keT8ubmVlZHNPVFAgIT09IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5ldyBBcGlSZXNwb25zZUVycm9yKG1lc3NhZ2UsIHN0YXR1cywgcmVzdWx0LCBpbnZhbGlkVG9rZW4sIG5lZWRzT3RwKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgYW4gZXJyb3Igb3IgYW4gZXJyb3IgY29udGFpbmluZyBhbiBIVFRQIHJlc3BvbnNlIGFuZCB1c2UgaXQgdG8gdGhyb3cgYSB3ZWxsLWZvcm1lZCBlcnJvciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlRXJyb3IoZTogRXJyb3IgJiB7IHJlc3BvbnNlPzogc3VwZXJhZ2VudC5SZXNwb25zZSB9KTogbmV2ZXIge1xuICBpZiAoZS5yZXNwb25zZSkge1xuICAgIHRocm93IGVyckZyb21SZXNwb25zZShlLnJlc3BvbnNlKTtcbiAgfVxuICB0aHJvdyBlO1xufVxuXG4vKipcbiAqIFRoZXJlIGFyZSBtYW55IHdheXMgYSByZXF1ZXN0IGNhbiBmYWlsLCBhbmQgbWF5IHdheXMgaW5mb3JtYXRpb24gb24gdGhhdCBmYWlsdXJlIGNhbiBiZVxuICogY29tbXVuaWNhdGVkIHRvIHRoZSBjbGllbnQuIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gaGFuZGxlIHRob3NlIGNhc2VzIGFuZCBjcmVhdGUgYSBzYW5lIGVycm9yIHN0cmluZ1xuICogQHBhcmFtIHJlcyBSZXNwb25zZSBmcm9tIGFuIEhUVFAgcmVxdWVzdFxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXNwb25zZUVycm9yU3RyaW5nKHJlczogc3VwZXJhZ2VudC5SZXNwb25zZSk6IHN0cmluZyB7XG4gIGxldCBlcnJTdHJpbmcgPSByZXMuc3RhdHVzLnRvU3RyaW5nKCk7IC8vIGF0IHRoZSB2ZXJ5IGxlYXN0IHdlJ2xsIGhhdmUgdGhlIHN0YXR1cyBjb2RlXG4gIGlmIChyZXMuYm9keT8uZXJyb3IpIHtcbiAgICAvLyB0aGlzIGlzIHRoZSBjYXNlIHdlIGhvcGUgZm9yLCB3aGVyZSB0aGUgc2VydmVyIGdpdmVzIHVzIGEgbmljZSBlcnJvciBmcm9tIHRoZSBKU09OIGJvZHlcbiAgICBlcnJTdHJpbmcgPSByZXMuYm9keS5lcnJvcjtcbiAgfSBlbHNlIGlmIChyZXMudGV4dCkge1xuICAgIC8vIGlmIHRoZSByZXNwb25zZSBjYW1lIGJhY2sgYXMgdGV4dCwgd2UgdHJ5IHRvIHBhcnNlIGl0IGFzIEhUTUwgYW5kIHJlbW92ZSBhbGwgdGFncywgbGVhdmluZyB1c1xuICAgIC8vIGp1c3QgdGhlIGJhcmUgdGV4dCwgd2hpY2ggd2UgdGhlbiB0cmltIG9mIGV4Y2Vzc2l2ZSBuZXdsaW5lcyBhbmQgbGltaXQgdG8gYSBjZXJ0YWluIGxlbmd0aFxuICAgIHRyeSB7XG4gICAgICBsZXQgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplSHRtbChyZXMudGV4dCwgeyBhbGxvd2VkVGFnczogW10gfSk7XG4gICAgICBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVkVGV4dC50cmltKCk7XG4gICAgICBzYW5pdGl6ZWRUZXh0ID0gZW9sLmxmKHNhbml0aXplZFRleHQpOyAvLyB1c2UgJ1xcbicgZm9yIGFsbCBuZXdsaW5lc1xuICAgICAgc2FuaXRpemVkVGV4dCA9IF8ucmVwbGFjZShzYW5pdGl6ZWRUZXh0LCAvXFxuWyB8XFx0XXsxLH1cXG4vZywgJ1xcblxcbicpOyAvLyByZW1vdmUgdGhlIHNwYWNlcy90YWJzIGJldHdlZW4gbmV3bGluZXNcbiAgICAgIHNhbml0aXplZFRleHQgPSBfLnJlcGxhY2Uoc2FuaXRpemVkVGV4dCwgL1tcXG5dezMsfS9nLCAnXFxuXFxuJyk7IC8vIGhhdmUgYXQgbW9zdCAyIGNvbnNlY3V0aXZlIG5ld2xpbmVzXG4gICAgICBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVkVGV4dC5zdWJzdHJpbmcoMCwgNTAwMCk7IC8vIHByZXZlbnQgbWVzc2FnZSBmcm9tIGdldHRpbmcgdG9vIGxhcmdlXG4gICAgICBlcnJTdHJpbmcgPSBlcnJTdHJpbmcgKyAnXFxuJyArIHNhbml0aXplZFRleHQ7IC8vIGFkZCBpdCB0byBvdXIgZXhpc3RpbmcgZXJyU3RyaW5nIChhdCB0aGlzIHBvaW50IHRoZSBtb3JlIGluZm8gdGhlIGJldHRlciEpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZywgdGhlIHJlc3BvbnNlJ3MgSFRNTCB3YXMgdG9vIHdhY2t5IHRvIGJlIHBhcnNlZCBjbGVhbmx5XG4gICAgICBkZWJ1ZygnZ290IGVycm9yIHdpdGggbWVzc2FnZSBcIiVzXCIgd2hpbGUgY3JlYXRpbmcgcmVzcG9uc2UgZXJyb3Igc3RyaW5nIGZyb20gcmVzcG9uc2U6ICVzJywgZS5tZXNzYWdlLCByZXMudGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVyclN0cmluZztcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgcmVxdWVzdCBkYXRhIGJhc2VkIG9uIHRoZSByZXF1ZXN0IGNvbnRlbnQgdHlwZS5cbiAqIElmIGRhdGEgaXMgYWxyZWFkeSBhIHN0cmluZywgcmV0dXJucyBpdCBhcy1pcyB0byBwcmVzZXJ2ZSBleGFjdCBieXRlcyBmb3IgSE1BQy5cbiAqIElmIGRhdGEgaXMgYSBCdWZmZXIsIGNvbnZlcnRzIHRvIFVURi04IHN0cmluZy5cbiAqIElmIGRhdGEgaXMgYW4gb2JqZWN0LCBzZXJpYWxpemVzIGl0IGJhc2VkIG9uIENvbnRlbnQtVHlwZS5cbiAqIEBwYXJhbSByZXFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVJlcXVlc3REYXRhKHJlcTogc3VwZXJhZ2VudC5SZXF1ZXN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGF0YTogc3RyaW5nIHwgQnVmZmVyIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPSAocmVxIGFzIGFueSkuX2RhdGE7XG5cbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIC8vIENvbnZlcnQgQnVmZmVyIHRvIFVURi04IHN0cmluZyBhbmQgbXV0YXRlIF9kYXRhIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cbiAgICAvLyBUaGlzIGlzIGNyaXRpY2FsOiBpZiBfZGF0YSBzdGF5cyBhcyBhIEJ1ZmZlciwgc3VwZXJhZ2VudCB3aWxsIHNlcmlhbGl6ZSBpdFxuICAgIC8vIGFzIEpTT04gKHtcInR5cGVcIjpcIkJ1ZmZlclwiLFwiZGF0YVwiOlsuLi5dfSksIHdoaWNoIHdvbid0IG1hdGNoIHRoZSBITUFDLlxuICAgIC8vIEJ5IG11dGF0aW5nIHRvIHN0cmluZywgc3VwZXJhZ2VudCBzZW5kcyB0aGUgZXhhY3QgYnl0ZXMgd2UgaGFzaC5cbiAgICAvLyBUaGlzIGlzIHNhZmUgZm9yIHJldHJpZXM6IGNhbGxpbmcgYWdhaW4gd2l0aCBhIHN0cmluZyB3aWxsIGhpdCB0aGUgZWFybHkgcmV0dXJuIGFib3ZlLlxuICAgIGNvbnN0IHN0cmluZ0RhdGEgPSBkYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgKHJlcSBhcyBhbnkpLl9kYXRhID0gc3RyaW5nRGF0YTtcbiAgICByZXR1cm4gc3RyaW5nRGF0YTtcbiAgfVxuXG4gIGlmIChkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgb2JqZWN0IGRhdGEgYmFzZWQgb24gQ29udGVudC1UeXBlXG4gIGxldCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtVHlwZScpO1xuICAvLyBQYXJzZSBvdXQganVzdCB0aGUgY29udGVudCB0eXBlIGZyb20gdGhlIGhlYWRlciAoaWdub3JlIHRoZSBjaGFyc2V0KVxuICBpZiAoY29udGVudFR5cGUpIHtcbiAgICBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLnNwbGl0KCc7JylbMF0udHJpbSgpO1xuICB9XG4gIGxldCBzZXJpYWxpemU6ICgoYm9keTogdW5rbm93bikgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2VyaWFsaXplcnMgPSBzdXBlcmFnZW50LnNlcmlhbGl6ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXJpYWxpemVycywgY29udGVudFR5cGUpKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSBzZXJpYWxpemVyc1tjb250ZW50VHlwZV07XG4gICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzZXJpYWxpemUgPSBjYW5kaWRhdGUgYXMgKGJvZHk6IHVua25vd24pID0+IHN0cmluZztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC9bXFwvK11qc29uXFxiLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBidWlsdC1pbiBKU09OIHNlcmlhbGl6ZXIgZm9yIEpTT04tbGlrZSBjb250ZW50IHR5cGVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlcmlhbGl6ZXJzLCAnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICAgIGNvbnN0IGpzb25TZXJpYWxpemVyID0gc2VyaWFsaXplcnNbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uU2VyaWFsaXplciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNlcmlhbGl6ZSA9IGpzb25TZXJpYWxpemVyIGFzIChib2R5OiB1bmtub3duKSA9PiBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc2VyaWFsaXplKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZShkYXRhKTtcbiAgICAocmVxIGFzIGFueSkuX2RhdGEgPSBzZXJpYWxpemVkO1xuICAgIHJldHVybiBzZXJpYWxpemVkO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHN1cGVyYWdlbnQgcXVlcnkgc3RyaW5nIGNvcnJlY3RseSBmb3IgYnJvd3NlcnMgb3Igbm9kZS5cbiAqIEBwYXJhbSByZXFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFJlcXVlc3RRdWVyeVN0cmluZyhyZXE6IHN1cGVyYWdlbnQuU3VwZXJBZ2VudFJlcXVlc3QpOiB2b2lkIHtcbiAgY29uc3QgdXJsRGV0YWlscyA9IHVybExpYi5wYXJzZShyZXEudXJsKTtcblxuICBsZXQgcXVlcnlTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcXVlcnk6IHN0cmluZ1tdID0gKHJlcSBhcyBhbnkpLl9xdWVyeTtcbiAgY29uc3QgcXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSAocmVxIGFzIGFueSkucXM7XG4gIGlmIChxdWVyeSAmJiBxdWVyeS5sZW5ndGggPiAwKSB7XG4gICAgLy8gYnJvd3NlciB2ZXJzaW9uXG4gICAgcXVlcnlTdHJpbmcgPSBxdWVyeS5qb2luKCcmJyk7XG4gICAgKHJlcSBhcyBhbnkpLl9xdWVyeSA9IFtdO1xuICB9IGVsc2UgaWYgKHFzKSB7XG4gICAgLy8gbm9kZSB2ZXJzaW9uXG4gICAgcXVlcnlTdHJpbmcgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkocXMpO1xuICAgIChyZXEgYXMgYW55KS5xcyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICBpZiAodXJsRGV0YWlscy5zZWFyY2gpIHtcbiAgICAgIHVybERldGFpbHMuc2VhcmNoICs9ICcmJyArIHF1ZXJ5U3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmxEZXRhaWxzLnNlYXJjaCA9ICc/JyArIHF1ZXJ5U3RyaW5nO1xuICAgIH1cbiAgICByZXEudXJsID0gdXJsTGliLmZvcm1hdCh1cmxEZXRhaWxzKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgY29tcGxldGVkIHZlcmlmaWNhdGlvbiByZXNwb25zZSBhbmQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBgQXBpUmVzcG9uc2VFcnJvcmAgaWYgaXRcbiAqIGluZGljYXRlcyB0aGUgcmVzcG9uc2UgaXMgaW52YWxpZCBvciBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHRpbWUgd2luZG93LlxuICovXG5mdW5jdGlvbiBhc3NlcnRWZXJpZmljYXRpb25SZXNwb25zZShcbiAgYml0Z286IEJpdEdvQVBJLFxuICB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICByZXE6IHN1cGVyYWdlbnQuU3VwZXJBZ2VudFJlcXVlc3QsXG4gIHJlc3BvbnNlOiBzdXBlcmFnZW50LlJlc3BvbnNlLFxuICB2ZXJpZmljYXRpb25SZXNwb25zZTogVmVyaWZ5UmVzcG9uc2VJbmZvXG4pOiB2b2lkIHtcbiAgaWYgKCF2ZXJpZmljYXRpb25SZXNwb25zZS5pc1ZhbGlkKSB7XG4gICAgLy8gTG9nIG9ubHkgdGhlIGZpcnN0IDEwIGNoYXJhY3RlcnMgb2YgdGhlIHRva2VuIHRvIGVuc3VyZSB0aGUgZnVsbCB0b2tlbiBpc24ndCBsb2dnZWQuXG4gICAgY29uc3QgcGFydGlhbEJpdGdvVG9rZW4gPSB0b2tlbiA/IHRva2VuLnN1YnN0cmluZygwLCAxMCkgOiAnJztcbiAgICBjb25zdCBlcnJvckRldGFpbHMgPSB7XG4gICAgICBleHBlY3RlZEhtYWM6IHZlcmlmaWNhdGlvblJlc3BvbnNlLmV4cGVjdGVkSG1hYyxcbiAgICAgIHJlY2VpdmVkSG1hYzogcmVzcG9uc2UuaGVhZGVyLmhtYWMsXG4gICAgICBobWFjSW5wdXQ6IHZlcmlmaWNhdGlvblJlc3BvbnNlLnNpZ25hdHVyZVN1YmplY3QsXG4gICAgICByZXF1ZXN0VG9rZW46IHJlcS5hdXRoZW50aWNhdGlvblRva2VuLFxuICAgICAgYml0Z29Ub2tlbjogcGFydGlhbEJpdGdvVG9rZW4sXG4gICAgfTtcbiAgICBkZWJ1ZygnSW52YWxpZCByZXNwb25zZSBITUFDOiAlTycsIGVycm9yRGV0YWlscyk7XG4gICAgdGhyb3cgbmV3IEFwaVJlc3BvbnNlRXJyb3IoJ2ludmFsaWQgcmVzcG9uc2UgSE1BQycsIDUxMSwgZXJyb3JEZXRhaWxzKTtcbiAgfVxuXG4gIGlmIChiaXRnby5nZXRBdXRoVmVyc2lvbigpID09PSAzICYmICF2ZXJpZmljYXRpb25SZXNwb25zZS5pc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdykge1xuICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IHtcbiAgICAgIHRpbWVzdGFtcDogcmVzcG9uc2UuaGVhZGVyLnRpbWVzdGFtcCxcbiAgICAgIHZlcmlmaWNhdGlvblRpbWU6IHZlcmlmaWNhdGlvblJlc3BvbnNlLnZlcmlmaWNhdGlvblRpbWUsXG4gICAgfTtcbiAgICBkZWJ1ZygnU2VydmVyIHJlc3BvbnNlIG91dHNpZGUgcmVzcG9uc2UgdmFsaWRpdHkgdGltZSB3aW5kb3c6ICVPJywgZXJyb3JEZXRhaWxzKTtcbiAgICB0aHJvdyBuZXcgQXBpUmVzcG9uc2VFcnJvcignc2VydmVyIHJlc3BvbnNlIG91dHNpZGUgcmVzcG9uc2UgdmFsaWRpdHkgdGltZSB3aW5kb3cnLCA1MTEsIGVycm9yRGV0YWlscyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZnkgdGhhdCB0aGUgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGlzIHNpZ25lZCBjb3JyZWN0bHkuXG4gKiBSaWdodCBub3csIGl0IGlzIHZlcnkgcGVybWlzc2l2ZSB3aXRoIHRoZSB0aW1lc3RhbXAgdmFyaWFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZXNwb25zZShcbiAgYml0Z286IEJpdEdvQVBJLFxuICB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBtZXRob2Q6IFZlcmlmeVJlc3BvbnNlT3B0aW9uc1snbWV0aG9kJ10sXG4gIHJlcTogc3VwZXJhZ2VudC5TdXBlckFnZW50UmVxdWVzdCxcbiAgcmVzcG9uc2U6IHN1cGVyYWdlbnQuUmVzcG9uc2UsXG4gIGF1dGhWZXJzaW9uOiBBdXRoVmVyc2lvblxuKTogc3VwZXJhZ2VudC5SZXNwb25zZSB7XG4gIGlmICghcmVxLmlzVjJBdXRoZW50aWNhdGVkIHx8ICFyZXEuYXV0aGVudGljYXRpb25Ub2tlbikge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IHZlcmlmaWNhdGlvblJlc3BvbnNlID0gYml0Z28udmVyaWZ5UmVzcG9uc2Uoe1xuICAgIHVybDogcmVxLnVybCxcbiAgICBobWFjOiByZXNwb25zZS5oZWFkZXIuaG1hYyxcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgdGV4dDogcmVzcG9uc2UudGV4dCxcbiAgICB0aW1lc3RhbXA6IHJlc3BvbnNlLmhlYWRlci50aW1lc3RhbXAsXG4gICAgdG9rZW46IHJlcS5hdXRoZW50aWNhdGlvblRva2VuLFxuICAgIG1ldGhvZCxcbiAgICBhdXRoVmVyc2lvbixcbiAgfSk7XG5cbiAgYXNzZXJ0VmVyaWZpY2F0aW9uUmVzcG9uc2UoYml0Z28sIHRva2VuLCByZXEsIHJlc3BvbnNlLCB2ZXJpZmljYXRpb25SZXNwb25zZSk7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVJlc3BvbnNlQXN5bmMoXG4gIGJpdGdvOiBCaXRHb0FQSSxcbiAgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgbWV0aG9kOiBWZXJpZnlSZXNwb25zZU9wdGlvbnNbJ21ldGhvZCddLFxuICByZXE6IHN1cGVyYWdlbnQuU3VwZXJBZ2VudFJlcXVlc3QsXG4gIHJlc3BvbnNlOiBzdXBlcmFnZW50LlJlc3BvbnNlLFxuICBhdXRoVmVyc2lvbjogQXV0aFZlcnNpb25cbik6IFByb21pc2U8c3VwZXJhZ2VudC5SZXNwb25zZT4ge1xuICBpZiAoIXJlcS5pc1YyQXV0aGVudGljYXRlZCB8fCAhcmVxLmF1dGhlbnRpY2F0aW9uVG9rZW4pIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBjb25zdCB2ZXJpZmljYXRpb25SZXNwb25zZSA9IGF3YWl0IGJpdGdvLnZlcmlmeVJlc3BvbnNlQXN5bmMoe1xuICAgIHVybDogcmVxLnVybCxcbiAgICBobWFjOiByZXNwb25zZS5oZWFkZXIuaG1hYyxcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgdGV4dDogcmVzcG9uc2UudGV4dCxcbiAgICB0aW1lc3RhbXA6IHJlc3BvbnNlLmhlYWRlci50aW1lc3RhbXAsXG4gICAgdG9rZW46IHJlcS5hdXRoZW50aWNhdGlvblRva2VuLFxuICAgIG1ldGhvZCxcbiAgICBhdXRoVmVyc2lvbixcbiAgfSk7XG5cbiAgYXNzZXJ0VmVyaWZpY2F0aW9uUmVzcG9uc2UoYml0Z28sIHRva2VuLCByZXEsIHJlc3BvbnNlLCB2ZXJpZmljYXRpb25SZXNwb25zZSk7XG4gIHJldHVybiByZXNwb25zZTtcbn1cbiJdfQ==
|