@appium/base-driver 8.5.2 → 8.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/basedriver/capabilities.js +1 -1
- package/build/lib/basedriver/commands/event.js +1 -1
- package/build/lib/basedriver/commands/find.js +1 -1
- package/build/lib/basedriver/commands/index.js +1 -1
- package/build/lib/basedriver/commands/log.js +1 -1
- package/build/lib/basedriver/commands/session.js +1 -1
- package/build/lib/basedriver/commands/settings.js +1 -1
- package/build/lib/basedriver/commands/timeout.js +1 -1
- package/build/lib/basedriver/core.js +1 -1
- package/build/lib/basedriver/desired-caps.js +1 -1
- package/build/lib/basedriver/device-settings.js +1 -1
- package/build/lib/basedriver/driver.js +1 -1
- package/build/lib/basedriver/helpers.js +1 -1
- package/build/lib/basedriver/logger.js +1 -1
- package/build/lib/constants.js +1 -1
- package/build/lib/express/crash.js +1 -1
- package/build/lib/express/express-logging.js +1 -1
- package/build/lib/express/idempotency.js +1 -1
- package/build/lib/express/logger.js +1 -1
- package/build/lib/express/middleware.js +1 -1
- package/build/lib/express/server.js +1 -1
- package/build/lib/express/static.js +1 -1
- package/build/lib/express/websocket.js +1 -1
- package/build/lib/helpers/capabilities.js +1 -1
- package/build/lib/index.js +1 -1
- package/build/lib/jsonwp-proxy/protocol-converter.js +1 -1
- package/build/lib/jsonwp-proxy/proxy.js +1 -1
- package/build/lib/jsonwp-status/status.js +1 -1
- package/build/lib/protocol/errors.js +1 -1
- package/build/lib/protocol/helpers.js +1 -1
- package/build/lib/protocol/index.js +1 -1
- package/build/lib/protocol/protocol.js +1 -1
- package/build/lib/protocol/routes.js +1 -1
- package/build/lib/protocol/validators.js +1 -1
- package/build/test/basedriver/driver-e2e-tests.js +1 -1
- package/build/test/basedriver/driver-tests.js +1 -1
- package/build/test/basedriver/index.js +1 -1
- package/build/test/e2e/basedriver/driver.e2e.spec.js +1 -1
- package/build/test/e2e/basedriver/helpers.e2e.spec.js +1 -1
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +1 -1
- package/build/test/e2e/express/server.e2e.spec.js +1 -1
- package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +1 -1
- package/build/test/e2e/protocol/fake-driver.js +1 -1
- package/build/test/e2e/protocol/helpers.js +1 -1
- package/build/test/e2e/protocol/protocol.e2e.spec.js +1 -1
- package/build/test/helpers.js +1 -1
- package/build/test/unit/basedriver/capabilities.spec.js +1 -1
- package/build/test/unit/basedriver/capability.spec.js +1 -1
- package/build/test/unit/basedriver/commands/event.spec.js +1 -1
- package/build/test/unit/basedriver/commands/log.spec.js +1 -1
- package/build/test/unit/basedriver/device-settings.spec.js +1 -1
- package/build/test/unit/basedriver/driver.spec.js +1 -1
- package/build/test/unit/basedriver/helpers.spec.js +1 -1
- package/build/test/unit/basedriver/timeout.spec.js +1 -1
- package/build/test/unit/express/server.spec.js +1 -1
- package/build/test/unit/express/static.spec.js +1 -1
- package/build/test/unit/jsonwp-proxy/mock-request.js +1 -1
- package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +1 -1
- package/build/test/unit/jsonwp-proxy/proxy.spec.js +1 -1
- package/build/test/unit/jsonwp-proxy/url.spec.js +1 -1
- package/build/test/unit/jsonwp-status/status.spec.js +1 -1
- package/build/test/unit/protocol/errors.spec.js +1 -1
- package/build/test/unit/protocol/routes.spec.js +1 -1
- package/build/test/unit/protocol/validator.spec.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -8
|
@@ -1011,4 +1011,4 @@ function getResponseForJsonwpError(err) {
|
|
|
1011
1011
|
|
|
1012
1012
|
return [httpStatus, httpResBody];
|
|
1013
1013
|
}
|
|
1014
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9wcm90b2NvbC9lcnJvcnMuanMiXSwibmFtZXMiOlsibWpzb253cExvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInczY0xvZyIsIlczQ19VTktOT1dOX0VSUk9SIiwiUHJvdG9jb2xFcnJvciIsIkVTNkVycm9yIiwiY29uc3RydWN0b3IiLCJtc2ciLCJqc29ud3BDb2RlIiwidzNjU3RhdHVzIiwiZXJyb3IiLCJIVFRQU3RhdHVzQ29kZXMiLCJCQURfUkVRVUVTVCIsIl9zdGFja3RyYWNlIiwic3RhY2t0cmFjZSIsInN0YWNrIiwidmFsdWUiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImNvZGUiLCJOT1RfRk9VTkQiLCJlcnIiLCJOb1N1Y2hFbGVtZW50RXJyb3IiLCJOb1N1Y2hGcmFtZUVycm9yIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRWxlbWVudE5vdFZpc2libGVFcnJvciIsIkludmFsaWRFbGVtZW50U3RhdGVFcnJvciIsIlVua25vd25FcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImVycm9yT3JNZXNzYWdlIiwib3JpZ01lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJtZXNzYWdlIiwiVW5rbm93bk1ldGhvZEVycm9yIiwiTUVUSE9EX05PVF9BTExPV0VEIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsIkVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciIsIkVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IiLCJFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IiLCJJbnNlY3VyZUNlcnRpZmljYXRlRXJyb3IiLCJKYXZhU2NyaXB0RXJyb3IiLCJYUGF0aExvb2t1cEVycm9yIiwiVGltZW91dEVycm9yIiwiUkVRVUVTVF9USU1FT1VUIiwiTm9TdWNoV2luZG93RXJyb3IiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkludmFsaWRDb29raWVEb21haW5FcnJvciIsIk5vU3VjaENvb2tpZUVycm9yIiwiVW5hYmxlVG9TZXRDb29raWVFcnJvciIsIlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciIsIk5vQWxlcnRPcGVuRXJyb3IiLCJOb1N1Y2hBbGVydEVycm9yIiwiU2NyaXB0VGltZW91dEVycm9yIiwiSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIiwiSW52YWxpZENvb3JkaW5hdGVzRXJyb3IiLCJJTUVOb3RBdmFpbGFibGVFcnJvciIsIklNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciIsIkludmFsaWRTZWxlY3RvckVycm9yIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImRldGFpbHMiLCJNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciIsIk5vU3VjaENvbnRleHRFcnJvciIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIlVuYWJsZVRvQ2FwdHVyZVNjcmVlbiIsIkJhZFBhcmFtZXRlcnNFcnJvciIsInJlcXVpcmVkUGFyYW1zIiwiYWN0dWFsUGFyYW1zIiwiZXJyTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJQcm94eVJlcXVlc3RFcnJvciIsInJlc3BvbnNlRXJyb3IiLCJodHRwU3RhdHVzIiwicmVzcG9uc2VFcnJvck9iaiIsInV0aWwiLCJzYWZlSnNvblBhcnNlIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHkiLCJoYXMiLCJ3M2MiLCJqc29ud3AiLCJnZXRBY3R1YWxFcnJvciIsImhhc1ZhbHVlIiwic3RhdHVzIiwiZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUiLCJpc051bWJlciIsImVycm9yRnJvbVczQ0pzb25Db2RlIiwiZXJyb3JzIiwianNvbndwRXJyb3JDb2RlTWFwIiwiRXJyb3JDbGFzcyIsInZhbHVlcyIsInczY0Vycm9yQ29kZU1hcCIsImlzVW5rbm93bkVycm9yIiwibmFtZSIsImZpbmQiLCJlcXVhbE5hbWVzIiwiaXNFcnJvclR5cGUiLCJ0eXBlIiwiZGVidWciLCJ0b0xvd2VyQ2FzZSIsInJlc3VsdEVycm9yIiwiZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciIsInczY0Vycm9yU3RyaW5nIiwiaHR0cFJlc0JvZHkiLCJnZXRSZXNwb25zZUZvckpzb253cEVycm9yIiwiTk9UX0lNUExFTUVOVEVEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZ0JBQU9DLFNBQVAsQ0FBaUIsS0FBakIsQ0FBZjs7QUFFQSxNQUFNRSxpQkFBaUIsR0FBRyxlQUExQjs7QUFHTyxNQUFNQyxhQUFOLFNBQTRCQyxpQkFBNUIsQ0FBcUM7QUFDMUNDLEVBQUFBLFdBQVcsQ0FBRUMsR0FBRixFQUFPQyxVQUFQLEVBQW1CQyxTQUFuQixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDOUMsVUFBTUgsR0FBTjtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0UsS0FBTCxHQUFhQSxLQUFLLElBQUlQLGlCQUF0Qjs7QUFDQSxRQUFJLEtBQUtLLFVBQUwsS0FBb0IsSUFBeEIsRUFBOEI7QUFDNUIsV0FBS0EsVUFBTCxHQUFrQixFQUFsQjtBQUNEOztBQUNELFNBQUtDLFNBQUwsR0FBaUJBLFNBQVMsSUFBSUUsNkJBQWdCQyxXQUE5QztBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDRDs7QUFFYSxNQUFWQyxVQUFVLEdBQUk7QUFDaEIsV0FBTyxLQUFLRCxXQUFMLElBQW9CLEtBQUtFLEtBQWhDO0FBQ0Q7O0FBRWEsTUFBVkQsVUFBVSxDQUFFRSxLQUFGLEVBQVM7QUFDckIsU0FBS0gsV0FBTCxHQUFtQkcsS0FBbkI7QUFDRDs7QUFsQnlDOzs7O0FBeUJyQyxNQUFNQyxpQkFBTixTQUFnQ2IsYUFBaEMsQ0FBOEM7QUFDeEMsU0FBSmMsSUFBSSxHQUFJO0FBQ2IsV0FBTyxDQUFQ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QVcsQ0FBQy9FLEdBQUQsRUFBTXNFLE1BQU0sQ0FBQ3pCLG1CQUFiLENBRGYsRUFDa0Q7QUFFdkRVLElBQUFBLFVBQVUsR0FBR2hFLDZCQUFnQmlHLGVBQTdCO0FBQ0QsR0FKTSxNQUlBLElBQUlULFdBQVcsQ0FBQy9FLEdBQUQsRUFBTXNFLE1BQU0sQ0FBQ3pFLGlCQUFiLENBQWYsRUFBZ0Q7QUFFckQwRCxJQUFBQSxVQUFVLEdBQUdoRSw2QkFBZ0JRLFNBQTdCO0FBQ0Q7O0FBR0QsU0FBTyxDQUFDd0QsVUFBRCxFQUFhK0IsV0FBYixDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRVM2RXJyb3IgZnJvbSAnZXM2LWVycm9yJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsLCBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgYXMgSFRUUFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuXG5jb25zdCBtanNvbndwTG9nID0gbG9nZ2VyLmdldExvZ2dlcignTUpTT05XUCcpO1xuY29uc3QgdzNjTG9nID0gbG9nZ2VyLmdldExvZ2dlcignVzNDJyk7XG5cbmNvbnN0IFczQ19VTktOT1dOX0VSUk9SID0gJ3Vua25vd24gZXJyb3InO1xuXG4vLyBiYXNlIGVycm9yIGNsYXNzIGZvciBhbGwgb2Ygb3VyIGVycm9yc1xuZXhwb3J0IGNsYXNzIFByb3RvY29sRXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtc2csIGpzb253cENvZGUsIHczY1N0YXR1cywgZXJyb3IpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuanNvbndwQ29kZSA9IGpzb253cENvZGU7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yIHx8IFczQ19VTktOT1dOX0VSUk9SO1xuICAgIGlmICh0aGlzLmpzb253cENvZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuanNvbndwQ29kZSA9IDEzO1xuICAgIH1cbiAgICB0aGlzLnczY1N0YXR1cyA9IHczY1N0YXR1cyB8fCBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IG51bGw7XG4gIH1cblxuICBnZXQgc3RhY2t0cmFjZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrdHJhY2UgfHwgdGhpcy5zdGFjaztcbiAgfVxuXG4gIHNldCBzdGFja3RyYWNlICh2YWx1ZSkge1xuICAgIHRoaXMuX3N0YWNrdHJhY2UgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vU2VsZW5pdW1IUS9zZWxlbml1bS9ibG9iLzE3NmI0YTllMzA4MmFjMTkyNmYyYTQzNmViMzQ2NzYwYzM3YTU5OTgvamF2YS9jbGllbnQvc3JjL29yZy9vcGVucWEvc2VsZW5pdW0vcmVtb3RlL0Vycm9yQ29kZXMuamF2YSNMMjE1XG4vLyBodHRwczovL2dpdGh1Yi5jb20vU2VsZW5pdW1IUS9zZWxlbml1bS9pc3N1ZXMvNTU2MiNpc3N1ZWNvbW1lbnQtMzcwMzc5NDcwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLWVycm9yLWNvZGVcblxuZXhwb3J0IGNsYXNzIE5vU3VjaERyaXZlckVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjtcbiAgfVxuICAvLyBXM0MgRXJyb3IgaXMgY2FsbGVkIEludmFsaWRTZXNzaW9uSURcbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2Vzc2lvbiBpZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSBzZXNzaW9uIGlzIGVpdGhlciB0ZXJtaW5hdGVkIG9yIG5vdCBzdGFydGVkJywgTm9TdWNoRHJpdmVyRXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaERyaXZlckVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hEcml2ZXJFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRWxlbWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBlbGVtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvdWxkIG5vdCBiZSBsb2NhdGVkIG9uIHRoZSBwYWdlIHVzaW5nIHRoZSBnaXZlbiAnICtcbiAgICAgICAgICAnc2VhcmNoIHBhcmFtZXRlcnMuJywgTm9TdWNoRWxlbWVudEVycm9yLmNvZGUoKSwgTm9TdWNoRWxlbWVudEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRnJhbWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDg7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggZnJhbWUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBmcmFtZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkIGJlY2F1c2UgJyArXG4gICAgICAgICAgJ3RoZSBmcmFtZSBjb3VsZCBub3QgYmUgZm91bmQuJywgTm9TdWNoRnJhbWVFcnJvci5jb2RlKCksXG4gICAgICAgICAgTm9TdWNoRnJhbWVFcnJvci53M2NTdGF0dXMoKSwgTm9TdWNoRnJhbWVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bkNvbW1hbmRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gY29tbWFuZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGEgcmVxdWVzdCB3YXMgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkIHVzaW5nIGFuIEhUVFAgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFwcGVkICcgK1xuICAgICAgICAgICdyZXNvdXJjZS4nLCBVbmtub3duQ29tbWFuZEVycm9yLmNvZGUoKSwgVW5rbm93bkNvbW1hbmRFcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bkNvbW1hbmRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY29tbWFuZCBmYWlsZWQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzIG5vICcgK1xuICAgICAgICAgICdsb25nZXIgYXR0YWNoZWQgdG8gdGhlIERPTS4nLCBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci5jb2RlKCksXG4gICAgICAgICAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IudzNjU3RhdHVzKCksIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Tm90VmlzaWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBub3QgdmlzaWJsZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZWxlbWVudCBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyAnICtcbiAgICAgICAgICAnbm90IHZpc2libGUgb24gdGhlIHBhZ2UuJywgRWxlbWVudE5vdFZpc2libGVFcnJvci5jb2RlKCksXG4gICAgICAgICAgRWxlbWVudE5vdFZpc2libGVFcnJvci53M2NTdGF0dXMoKSwgRWxlbWVudE5vdFZpc2libGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBlbGVtZW50IHN0YXRlJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzICcgK1xuICAgICAgICAgICdpbiBhbiBpbnZhbGlkIHN0YXRlIChlLmcuIGF0dGVtcHRpbmcgdG8gY2xpY2sgYSBkaXNhYmxlZCBlbGVtZW50KS4nLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci5jb2RlKCksIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVua25vd25FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuIFczQ19VTktOT1dOX0VSUk9SO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnJvck9yTWVzc2FnZSkge1xuICAgIGNvbnN0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZygoZXJyb3JPck1lc3NhZ2UgfHwge30pLm1lc3NhZ2UpXG4gICAgICA/IGVycm9yT3JNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIDogZXJyb3JPck1lc3NhZ2U7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdBbiB1bmtub3duIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQuJyArXG4gICAgICAob3JpZ01lc3NhZ2UgPyBgIE9yaWdpbmFsIGVycm9yOiAke29yaWdNZXNzYWdlfWAgOiAnJyk7XG4gICAgc3VwZXIobWVzc2FnZSwgVW5rbm93bkVycm9yLmNvZGUoKSwgVW5rbm93bkVycm9yLnczY1N0YXR1cygpLCBVbmtub3duRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVua25vd25NZXRob2RFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDQwNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk1FVEhPRF9OT1RfQUxMT1dFRDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5rbm93biBtZXRob2QnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSByZXF1ZXN0ZWQgY29tbWFuZCBtYXRjaGVkIGEga25vd24gVVJMIGJ1dCBkaWQgbm90IG1hdGNoIGFuIG1ldGhvZCBmb3IgdGhhdCBVUkwnLFxuICAgICAgICAgIFVua25vd25NZXRob2RFcnJvci5jb2RlKCksIFVua25vd25NZXRob2RFcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bk1ldGhvZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNDA1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQuIENvbW1hbmQgY2Fubm90IGJlIHN1cHBvcnRlZC4nLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuY29kZSgpLCBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE1O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCBzZWxlY3RhYmxlJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBjYW5ub3QgYmUgc2VsZWN0ZWQuJyxcbiAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuY29kZSgpLCBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgY2xpY2sgaW50ZXJjZXB0ZWQnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIEVsZW1lbnQgQ2xpY2sgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgcmVjZWl2aW5nICcgK1xuICAgICAgICAgICd0aGUgZXZlbnRzIGlzIG9ic2N1cmluZyB0aGUgZWxlbWVudCB0aGF0IHdhcyByZXF1ZXN0ZWQgY2xpY2tlZCcsXG4gICAgICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5jb2RlKCksIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjA7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IGludGVyYWN0YWJsZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIG5vdCBwb2ludGVyLSBvciBrZXlib2FyZCBpbnRlcmFjdGFibGUnLFxuICAgICAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW5zZWN1cmUgY2VydGlmaWNhdGUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05hdmlnYXRpb24gY2F1c2VkIHRoZSB1c2VyIGFnZW50IHRvIGhpdCBhIGNlcnRpZmljYXRlIHdhcm5pbmcsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIHJlc3VsdCBvZiBhbiBleHBpcmVkIG9yIGludmFsaWQgVExTIGNlcnRpZmljYXRlJyxcbiAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksIG51bGwsIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSmF2YVNjcmlwdEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2phdmFzY3JpcHQgZXJyb3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB1c2VyIHN1cHBsaWVkIEphdmFTY3JpcHQuJyxcbiAgICAgICAgICBKYXZhU2NyaXB0RXJyb3IuY29kZSgpLCBKYXZhU2NyaXB0RXJyb3IudzNjU3RhdHVzKCksIEphdmFTY3JpcHRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgWFBhdGhMb29rdXBFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlYXJjaGluZyBmb3IgYW4gZWxlbWVudCBieSBYUGF0aC4nLFxuICAgICAgICAgIFhQYXRoTG9va3VwRXJyb3IuY29kZSgpLCBYUGF0aExvb2t1cEVycm9yLnczY1N0YXR1cygpLCBYUGF0aExvb2t1cEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLlJFUVVFU1RfVElNRU9VVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndGltZW91dCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgICAgICAgICBUaW1lb3V0RXJyb3IuY29kZSgpLCBUaW1lb3V0RXJyb3IudzNjU3RhdHVzKCksIFRpbWVvdXRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoV2luZG93RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyMztcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCB3aW5kb3cnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgd2luZG93IGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgJyArXG4gICAgICAgICAgJ2JlY2F1c2UgdGhlIHdpbmRvdyBjb3VsZCBub3QgYmUgZm91bmQuJywgTm9TdWNoV2luZG93RXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hXaW5kb3dFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MTtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBhcmd1bWVudCc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgY29tbWFuZCBhcmUgZWl0aGVyIGludmFsaWQgb3IgbWFsZm9ybWVkJyxcbiAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5jb2RlKCksIEludmFsaWRBcmd1bWVudEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBjb29raWUgZG9tYWluJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGlsbGVnYWwgYXR0ZW1wdCB3YXMgbWFkZSB0byBzZXQgYSBjb29raWUgdW5kZXIgYSBkaWZmZXJlbnQgJyArXG4gICAgICAgICAgJ2RvbWFpbiB0aGFuIHRoZSBjdXJyZW50IHBhZ2UuJywgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmNvZGUoKSxcbiAgICAgICAgICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IudzNjU3RhdHVzKCksIEludmFsaWRDb29raWVEb21haW5FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoQ29va2llRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBjb29raWUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05vIGNvb2tpZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCBuYW1lIHdhcyBmb3VuZCBhbW9uZ3N0IHRoZSBhc3NvY2lhdGVkIGNvb2tpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3NpbmcgY29udGV4dOKAmXMgYWN0aXZlIGRvY3VtZW50JyxcbiAgICAgICAgICBOb1N1Y2hDb29raWVFcnJvci5jb2RlKCksIE5vU3VjaENvb2tpZUVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hDb29raWVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hYmxlVG9TZXRDb29raWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gc2V0IGNvb2tpZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHNldCBhIGNvb2tpZVxcJ3MgdmFsdWUgY291bGQgbm90IGJlIHNhdGlzZmllZC4nLFxuICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IuY29kZSgpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLnczY1N0YXR1cygpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5leHBlY3RlZCBhbGVydCBvcGVuJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIG1vZGFsIGRpYWxvZyB3YXMgb3BlbiwgYmxvY2tpbmcgdGhpcyBvcGVyYXRpb24nLFxuICAgICAgICAgIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvci5jb2RlKCksIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSwgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb0FsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggYWxlcnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gb3BlcmF0ZSBvbiBhIG1vZGFsIGRpYWxvZyB3aGVuIG9uZSAnICtcbiAgICAgICAgICAnd2FzIG5vdCBvcGVuLicsIE5vQWxlcnRPcGVuRXJyb3IuY29kZSgpLCBOb0FsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLCBOb0FsZXJ0T3BlbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hBbGVydEVycm9yIGV4dGVuZHMgTm9BbGVydE9wZW5FcnJvciB7fVxuXG5leHBvcnQgY2xhc3MgU2NyaXB0VGltZW91dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjg7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3NjcmlwdCB0aW1lb3V0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNjcmlwdCBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICAgICAgU2NyaXB0VGltZW91dEVycm9yLmNvZGUoKSwgU2NyaXB0VGltZW91dEVycm9yLnczY1N0YXR1cygpLCBTY3JpcHRUaW1lb3V0RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgY29vcmRpbmF0ZXMnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSBjb29yZGluYXRlcyBwcm92aWRlZCB0byBhbiBpbnRlcmFjdGlvbnMgb3BlcmF0aW9uIGFyZSBpbnZhbGlkLicsXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLmNvZGUoKSwgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3Ige31cblxuZXhwb3J0IGNsYXNzIElNRU5vdEF2YWlsYWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnSU1FIHdhcyBub3QgYXZhaWxhYmxlLicsIElNRU5vdEF2YWlsYWJsZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBJTUVOb3RBdmFpbGFibGVFcnJvci53M2NTdGF0dXMoKSwgSU1FTm90QXZhaWxhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDMxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIElNRSBlbmdpbmUgY291bGQgbm90IGJlIHN0YXJ0ZWQuJyxcbiAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuY29kZSgpLCBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkU2VsZWN0b3JFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FyZ3VtZW50IHdhcyBhbiBpbnZhbGlkIHNlbGVjdG9yIChlLmcuIFhQYXRoL0NTUykuJyxcbiAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5jb2RlKCksIEludmFsaWRTZWxlY3RvckVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTm90Q3JlYXRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzM7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Nlc3Npb24gbm90IGNyZWF0ZWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChkZXRhaWxzKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnQSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgY3JlYXRlZC4nO1xuICAgIGlmIChkZXRhaWxzKSB7XG4gICAgICBtZXNzYWdlICs9IGAgRGV0YWlsczogJHtkZXRhaWxzfWA7XG4gICAgfVxuXG4gICAgc3VwZXIobWVzc2FnZSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci5jb2RlKCksIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IudzNjU3RhdHVzKCksIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzQ7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ21vdmUgdGFyZ2V0IG91dCBvZiBib3VuZHMnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RhcmdldCBwcm92aWRlZCBmb3IgYSBtb3ZlIGFjdGlvbiBpcyBvdXQgb2YgYm91bmRzLicsXG4gICAgICAgICAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IuY29kZSgpLCBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci53M2NTdGF0dXMoKSwgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM1O1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05vIHN1Y2ggY29udGV4dCBmb3VuZC4nLCBOb1N1Y2hDb250ZXh0RXJyb3IuY29kZSgpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM2O1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoYXQgY29tbWFuZCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4nLFxuICAgICAgICAgIEludmFsaWRDb250ZXh0RXJyb3IuY29kZSgpKTtcbiAgfVxufVxuXG4vLyBUaGVzZSBhcmUgYWxpYXNlcyBmb3IgVW5rbm93bk1ldGhvZEVycm9yXG5leHBvcnQgY2xhc3MgTm90WWV0SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIFVua25vd25NZXRob2RFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ01ldGhvZCBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkJyk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgVW5rbm93bk1ldGhvZEVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFibGVUb0NhcHR1cmVTY3JlZW4gZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5hYmxlIHRvIGNhcHR1cmUgc2NyZWVuJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNjcmVlbiBjYXB0dXJlIHdhcyBtYWRlIGltcG9zc2libGUnLFxuICAgICAgICAgIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbi5jb2RlKCksIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbi53M2NTdGF0dXMoKSwgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmVycm9yKCkpO1xuICB9XG59XG5cblxuLy8gRXF1aXZhbGVudCB0byBXM0MgSW52YWxpZEFyZ3VtZW50RXJyb3JcbmV4cG9ydCBjbGFzcyBCYWRQYXJhbWV0ZXJzRXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvciAocmVxdWlyZWRQYXJhbXMsIGFjdHVhbFBhcmFtcywgZXJyTWVzc2FnZSkge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGlmICghZXJyTWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGBQYXJhbWV0ZXJzIHdlcmUgaW5jb3JyZWN0LiBXZSB3YW50ZWQgYCArXG4gICAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkocmVxdWlyZWRQYXJhbXMpfSBhbmQgeW91IGAgK1xuICAgICAgICAgIGBzZW50ICR7SlNPTi5zdHJpbmdpZnkoYWN0dWFsUGFyYW1zKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFlvdSBzZW50ICR7SlNPTi5zdHJpbmdpZnkoYWN0dWFsUGFyYW1zKX0sICR7ZXJyTWVzc2FnZX1gO1xuICAgIH1cbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxufVxuXG4vKipcbiAqIFByb3h5UmVxdWVzdEVycm9yIGlzIGEgY3VzdG9tIGVycm9yIGFuZCB3aWxsIGJlIHRocm93biB1cCBvbiB1bnN1Y2Nlc3NmdWwgcHJveHkgcmVxdWVzdCBhbmRcbiAqIHdpbGwgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJveHkgZmFpbHVyZS5cbiAqIEluIGNhc2Ugb2YgUHJveHlSZXF1ZXN0RXJyb3Igc2hvdWxkIGZldGNoIHRoZSBhY3R1YWwgZXJyb3IgYnkgY2FsbGluZyBgZ2V0QWN0dWFsRXJyb3IoKWBcbiAqIGZvciBwcm94eSBmYWlsdXJlIHRvIGdlbmVyYXRlIHRoZSBjbGllbnQgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm94eVJlcXVlc3RFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVyciwgcmVzcG9uc2VFcnJvciwgaHR0cFN0YXR1cykge1xuICAgIGxldCByZXNwb25zZUVycm9yT2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKHJlc3BvbnNlRXJyb3IpO1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICByZXNwb25zZUVycm9yT2JqID0ge307XG4gICAgfVxuICAgIGxldCBvcmlnTWVzc2FnZSA9IF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvcikgPyByZXNwb25zZUVycm9yIDogJyc7XG4gICAgaWYgKCFfLmlzRW1wdHkocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvck9iai52YWx1ZS5tZXNzYWdlKSkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoXy5pc0VtcHR5KGVycikgPyBgUHJveHkgcmVxdWVzdCB1bnN1Y2Nlc3NmdWwuICR7b3JpZ01lc3NhZ2V9YCA6IGVycik7XG5cbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcblxuICAgIC8vIElmIHRoZSByZXNwb25zZSBlcnJvciBpcyBhbiBvYmplY3QgYW5kIHZhbHVlIGlzIGFuIG9iamVjdCwgaXQncyBhIFczQyBlcnJvciAoZm9yIEpTT05XUCB2YWx1ZSBpcyBhIHN0cmluZylcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaGFzKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUsICdlcnJvcicpKSB7XG4gICAgICB0aGlzLnczYyA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB0aGlzLnczY1N0YXR1cyA9IGh0dHBTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpzb253cCA9IHJlc3BvbnNlRXJyb3JPYmo7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0dWFsRXJyb3IgKCkge1xuICAgIC8vIElmIGl0J3MgTUpTT05XUCBlcnJvciwgcmV0dXJucyBhY3R1YWwgZXJyb3IgY2F1c2UgZm9yIHJlcXVlc3QgZmFpbHVyZSBiYXNlZCBvbiBganNvbndwLnN0YXR1c2BcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmpzb253cD8uc3RhdHVzKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSh0aGlzLmpzb253cC5zdGF0dXMsIHRoaXMuanNvbndwLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy53M2MpICYmIF8uaXNOdW1iZXIodGhpcy53M2NTdGF0dXMpICYmIHRoaXMudzNjU3RhdHVzID49IDMwMCkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbVczQ0pzb25Db2RlKHRoaXMudzNjLmVycm9yLCB0aGlzLnczYy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgdGhpcy53M2Muc3RhY2t0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVW5rbm93bkVycm9yKHRoaXMubWVzc2FnZSk7XG4gIH1cbn1cbi8vIG1hcCBvZiBlcnJvciBjbGFzcyBuYW1lIHRvIGVycm9yIGNsYXNzXG5jb25zdCBlcnJvcnMgPSB7Tm90WWV0SW1wbGVtZW50ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICAgICAgICAgIEJhZFBhcmFtZXRlcnNFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hEcml2ZXJFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hFbGVtZW50RXJyb3IsXG4gICAgICAgICAgICAgICAgVW5rbm93bkNvbW1hbmRFcnJvcixcbiAgICAgICAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50Tm90VmlzaWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmtub3duRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0RXJyb3IsXG4gICAgICAgICAgICAgICAgWFBhdGhMb29rdXBFcnJvcixcbiAgICAgICAgICAgICAgICBUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoV2luZG93RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoQ29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRDb29yZGluYXRlc0Vycm9yLFxuICAgICAgICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLFxuICAgICAgICAgICAgICAgIE5vQWxlcnRPcGVuRXJyb3IsXG4gICAgICAgICAgICAgICAgU2NyaXB0VGltZW91dEVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVOb3RBdmFpbGFibGVFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZFNlbGVjdG9yRXJyb3IsXG4gICAgICAgICAgICAgICAgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hBbGVydEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaENvbnRleHRFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQ29udGV4dEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEZyYW1lRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLFxuICAgICAgICAgICAgICAgIFVua25vd25NZXRob2RFcnJvcixcbiAgICAgICAgICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgIFByb3h5UmVxdWVzdEVycm9yfTtcblxuLy8gbWFwIG9mIGVycm9yIGNvZGUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGpzb253cEVycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmIChFcnJvckNsYXNzLmNvZGUpIHtcbiAgICBqc29ud3BFcnJvckNvZGVNYXBbRXJyb3JDbGFzcy5jb2RlKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5jb25zdCB3M2NFcnJvckNvZGVNYXAgPSB7fTtcbmZvciAobGV0IEVycm9yQ2xhc3Mgb2YgXy52YWx1ZXMoZXJyb3JzKSkge1xuICBpZiAoRXJyb3JDbGFzcy5lcnJvcikge1xuICAgIHczY0Vycm9yQ29kZU1hcFtFcnJvckNsYXNzLmVycm9yKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1Vua25vd25FcnJvciAoZXJyKSB7XG4gIHJldHVybiAhZXJyLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICFfLnZhbHVlcyhlcnJvcnMpLmZpbmQoZnVuY3Rpb24gZXF1YWxOYW1lcyAoZXJyb3IpIHtcbiAgICAgICAgICAgcmV0dXJuIGVycm9yLm5hbWUgPT09IGVyci5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JUeXBlIChlcnIsIHR5cGUpIHtcbiAgLy8gYG5hbWVgIHByb3BlcnR5IGlzIHRoZSBjb25zdHJ1Y3RvciBuYW1lXG4gIGlmICh0eXBlLm5hbWUgPT09IFByb3RvY29sRXJyb3IubmFtZSkge1xuICAgIC8vIGBqc29ud3BDb2RlYCBpcyBgMGAgb24gc3VjY2Vzc1xuICAgIHJldHVybiAhIWVyci5qc29ud3BDb2RlO1xuICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gUHJveHlSZXF1ZXN0RXJyb3IubmFtZSkge1xuICAgIC8vIGBzdGF0dXNgIGlzIGAwYCBvbiBzdWNjZXNzXG4gICAgaWYgKGVyci5qc29ud3ApIHtcbiAgICAgIHJldHVybiAhIWVyci5qc29ud3Auc3RhdHVzO1xuICAgIH1cblxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZXJyLnczYykpIHtcbiAgICAgIHJldHVybiBfLmlzTnVtYmVyKGVyci53M2NTdGF0dXMpICYmIGVyci53M2NTdGF0dXMgPj0gMzAwO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZXJyLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gTUpTT05XUCBzdGF0dXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIEpTT05XUCBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSB2YWx1ZSBUaGUgZXJyb3IgbWVzc2FnZSwgb3IgYW4gb2JqZWN0IHdpdGggYSBgbWVzc2FnZWAgcHJvcGVydHlcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9IFRoZSBlcnJvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlZCBKU09OV1Agc3RhdHVzIGNvZGVcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUgKGNvZGUsIHZhbHVlID0gJycpIHtcbiAgLy8gaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIHB1bGwgbWVzc2FnZSBmcm9tIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBwbGFpblxuICAvLyB2YWx1ZSwgb3IgZGVmYXVsdCB0byBhbiBlbXB0eSBzdHJpbmcsIGlmIG51bGxcbiAgY29uc3QgbWVzc2FnZSA9ICh2YWx1ZSB8fCB7fSkubWVzc2FnZSB8fCB2YWx1ZSB8fCAnJztcbiAgaWYgKGNvZGUgIT09IFVua25vd25FcnJvci5jb2RlKCkgJiYganNvbndwRXJyb3JDb2RlTWFwW2NvZGVdKSB7XG4gICAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvICR7anNvbndwRXJyb3JDb2RlTWFwW2NvZGVdLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0obWVzc2FnZSk7XG4gIH1cbiAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvIFVua25vd25FcnJvcmApO1xuICByZXR1cm4gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gVzNDIEpTT04gQ29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVzNDIGVycm9yIHN0cmluZyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2hhbmRsaW5nLWVycm9ycyBgSlNPTiBFcnJvciBDb2RlYCBjb2x1bW4pXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHs/c3RyaW5nfSBzdGFja3RyYWNlIGFuIG9wdGlvbmFsIGVycm9yIHN0YWNrdHJhY2VcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9ICBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFczQyBlcnJvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tVzNDSnNvbkNvZGUgKGNvZGUsIG1lc3NhZ2UsIHN0YWNrdHJhY2UgPSBudWxsKSB7XG4gIGlmIChjb2RlICYmIHczY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byAke3czY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldLm5hbWV9YCk7XG4gICAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0obWVzc2FnZSk7XG4gICAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gICAgcmV0dXJuIHJlc3VsdEVycm9yO1xuICB9XG4gIHczY0xvZy5kZWJ1ZyhgTWF0Y2hlZCBXM0MgZXJyb3IgY29kZSAnJHtjb2RlfScgdG8gVW5rbm93bkVycm9yYCk7XG4gIGNvbnN0IHJlc3VsdEVycm9yID0gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbiAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gIHJldHVybiByZXN1bHRFcnJvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBwcm9wZXIgVzNDIEhUVFAgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0aGF0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciAoZXJyKSB7XG4gIGxldCBodHRwU3RhdHVzO1xuXG4gIC8vIFczQyBkZWZpbmVkIGVycm9yIG1lc3NhZ2UgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1lcnJvci1jb2RlKVxuICBsZXQgdzNjRXJyb3JTdHJpbmc7XG5cbiAgaWYgKCFlcnIudzNjU3RhdHVzKSB7XG4gICAgZXJyID0gdXRpbC5oYXNWYWx1ZShlcnIuc3RhdHVzKVxuICAgICAgLy8gSWYgaXQncyBhIEpTT05XUCBlcnJvciwgZmluZCBjb3JyZXNwb25kaW5nIGVycm9yXG4gICAgICA/IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGVyci5zdGF0dXMsIGVyci52YWx1ZSlcbiAgICAgIDogbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIHczY0xvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIHczY0Vycm9yU3RyaW5nID0gQmFkUGFyYW1ldGVyc0Vycm9yLmVycm9yKCk7XG4gIH0gZWxzZSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBlcnIuZXJyb3I7XG4gIH1cblxuICBodHRwU3RhdHVzID0gZXJyLnczY1N0YXR1cztcblxuICBpZiAoIXczY0Vycm9yU3RyaW5nKSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBVbmtub3duRXJyb3IuZXJyb3IoKTtcbiAgfVxuXG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgZXJyb3I6IHczY0Vycm9yU3RyaW5nLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2ssXG4gICAgfVxuICB9O1xuICByZXR1cm4gW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBhIHByb3BlciBKU09OV1AgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0byBiZSBjb252ZXJ0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvciAoZXJyKSB7XG4gIGlmIChpc1Vua25vd25FcnJvcihlcnIpKSB7XG4gICAgZXJyID0gbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyKTtcbiAgfVxuICAvLyBNSlNPTldQIGVycm9ycyBhcmUgdXN1YWxseSA1MDAgc3RhdHVzIGNvZGUgc28gc2V0IGl0IHRvIHRoYXQgYnkgZGVmYXVsdFxuICBsZXQgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICBzdGF0dXM6IGVyci5qc29ud3BDb2RlLFxuICAgIHZhbHVlOiB7XG4gICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZVxuICAgIH1cbiAgfTtcblxuICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKSkge1xuICAgIC8vIHJlc3BvbmQgd2l0aCBhIDQwMCBpZiB3ZSBoYXZlIGJhZCBwYXJhbWV0ZXJzXG4gICAgbWpzb253cExvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgaHR0cFJlc0JvZHkgPSBlcnIubWVzc2FnZTtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKSB8fFxuICAgICAgICAgICAgIGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNTAxIGlmIHRoZSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXG4gICAgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5OT1RfSU1QTEVNRU5URUQ7XG4gIH0gZWxzZSBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNDA0IGlmIHRoZXJlIGlzIG5vIGRyaXZlciBmb3IgdGhlIHNlc3Npb25cbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuXG5cbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbmV4cG9ydCB7XG4gIGVycm9ycywgaXNFcnJvclR5cGUsIGlzVW5rbm93bkVycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG4gIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG59O1xuIl19
|
|
1014
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtanNvbndwTG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidzNjTG9nIiwiVzNDX1VOS05PV05fRVJST1IiLCJQcm90b2NvbEVycm9yIiwiRVM2RXJyb3IiLCJjb25zdHJ1Y3RvciIsIm1zZyIsImpzb253cENvZGUiLCJ3M2NTdGF0dXMiLCJlcnJvciIsIkhUVFBTdGF0dXNDb2RlcyIsIkJBRF9SRVFVRVNUIiwiX3N0YWNrdHJhY2UiLCJzdGFja3RyYWNlIiwic3RhY2siLCJ2YWx1ZSIsIk5vU3VjaERyaXZlckVycm9yIiwiY29kZSIsIk5PVF9GT1VORCIsImVyciIsIk5vU3VjaEVsZW1lbnRFcnJvciIsIk5vU3VjaEZyYW1lRXJyb3IiLCJVbmtub3duQ29tbWFuZEVycm9yIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IiLCJFbGVtZW50Tm90VmlzaWJsZUVycm9yIiwiSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIiwiVW5rbm93bkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiZXJyb3JPck1lc3NhZ2UiLCJvcmlnTWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsIm1lc3NhZ2UiLCJVbmtub3duTWV0aG9kRXJyb3IiLCJNRVRIT0RfTk9UX0FMTE9XRUQiLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIiwiRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIiwiRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciIsIkVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciIsIkluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciIsIkphdmFTY3JpcHRFcnJvciIsIlhQYXRoTG9va3VwRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJSRVFVRVNUX1RJTUVPVVQiLCJOb1N1Y2hXaW5kb3dFcnJvciIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiSW52YWxpZENvb2tpZURvbWFpbkVycm9yIiwiTm9TdWNoQ29va2llRXJyb3IiLCJVbmFibGVUb1NldENvb2tpZUVycm9yIiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwiTm9BbGVydE9wZW5FcnJvciIsIk5vU3VjaEFsZXJ0RXJyb3IiLCJTY3JpcHRUaW1lb3V0RXJyb3IiLCJJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IiLCJJbnZhbGlkQ29vcmRpbmF0ZXNFcnJvciIsIklNRU5vdEF2YWlsYWJsZUVycm9yIiwiSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZGV0YWlscyIsIk1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yIiwiTm9TdWNoQ29udGV4dEVycm9yIiwiSW52YWxpZENvbnRleHRFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiVW5hYmxlVG9DYXB0dXJlU2NyZWVuIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwicmVxdWlyZWRQYXJhbXMiLCJhY3R1YWxQYXJhbXMiLCJlcnJNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlByb3h5UmVxdWVzdEVycm9yIiwicmVzcG9uc2VFcnJvciIsImh0dHBTdGF0dXMiLCJyZXNwb25zZUVycm9yT2JqIiwidXRpbCIsInNhZmVKc29uUGFyc2UiLCJpc1BsYWluT2JqZWN0IiwiaXNFbXB0eSIsImhhcyIsInczYyIsImpzb253cCIsImdldEFjdHVhbEVycm9yIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSIsImlzTnVtYmVyIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJlcnJvcnMiLCJqc29ud3BFcnJvckNvZGVNYXAiLCJFcnJvckNsYXNzIiwidmFsdWVzIiwidzNjRXJyb3JDb2RlTWFwIiwiaXNVbmtub3duRXJyb3IiLCJuYW1lIiwiZmluZCIsImVxdWFsTmFtZXMiLCJpc0Vycm9yVHlwZSIsInR5cGUiLCJkZWJ1ZyIsInRvTG93ZXJDYXNlIiwicmVzdWx0RXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwidzNjRXJyb3JTdHJpbmciLCJodHRwUmVzQm9keSIsImdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IiLCJOT1RfSU1QTEVNRU5URUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFUzZFcnJvciBmcm9tICdlczYtZXJyb3InO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyBhcyBIVFRQU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5cbmNvbnN0IG1qc29ud3BMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdNSlNPTldQJyk7XG5jb25zdCB3M2NMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXM0MnKTtcblxuY29uc3QgVzNDX1VOS05PV05fRVJST1IgPSAndW5rbm93biBlcnJvcic7XG5cbi8vIGJhc2UgZXJyb3IgY2xhc3MgZm9yIGFsbCBvZiBvdXIgZXJyb3JzXG5leHBvcnQgY2xhc3MgUHJvdG9jb2xFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1zZywganNvbndwQ29kZSwgdzNjU3RhdHVzLCBlcnJvcikge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy5qc29ud3BDb2RlID0ganNvbndwQ29kZTtcbiAgICB0aGlzLmVycm9yID0gZXJyb3IgfHwgVzNDX1VOS05PV05fRVJST1I7XG4gICAgaWYgKHRoaXMuanNvbndwQ29kZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5qc29ud3BDb2RlID0gMTM7XG4gICAgfVxuICAgIHRoaXMudzNjU3RhdHVzID0gdzNjU3RhdHVzIHx8IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBzdGFja3RyYWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2t0cmFjZSB8fCB0aGlzLnN0YWNrO1xuICB9XG5cbiAgc2V0IHN0YWNrdHJhY2UgKHZhbHVlKSB7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IHZhbHVlO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2Jsb2IvMTc2YjRhOWUzMDgyYWMxOTI2ZjJhNDM2ZWIzNDY3NjBjMzdhNTk5OC9qYXZhL2NsaWVudC9zcmMvb3JnL29wZW5xYS9zZWxlbml1bS9yZW1vdGUvRXJyb3JDb2Rlcy5qYXZhI0wyMTVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2lzc3Vlcy81NTYyI2lzc3VlY29tbWVudC0zNzAzNzk0NzBcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNkZm4tZXJyb3ItY29kZVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRHJpdmVyRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2O1xuICB9XG4gIC8vIFczQyBFcnJvciBpcyBjYWxsZWQgSW52YWxpZFNlc3Npb25JRFxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBzZXNzaW9uIGlkJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNlc3Npb24gaXMgZWl0aGVyIHRlcm1pbmF0ZWQgb3Igbm90IHN0YXJ0ZWQnLCBOb1N1Y2hEcml2ZXJFcnJvci5jb2RlKCksXG4gICAgICAgICAgTm9TdWNoRHJpdmVyRXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaERyaXZlckVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hFbGVtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGVsZW1lbnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQgb24gdGhlIHBhZ2UgdXNpbmcgdGhlIGdpdmVuICcgK1xuICAgICAgICAgICdzZWFyY2ggcGFyYW1ldGVycy4nLCBOb1N1Y2hFbGVtZW50RXJyb3IuY29kZSgpLCBOb1N1Y2hFbGVtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgTm9TdWNoRWxlbWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hGcmFtZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBmcmFtZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHN3aXRjaCB0byBhIGZyYW1lIGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgYmVjYXVzZSAnICtcbiAgICAgICAgICAndGhlIGZyYW1lIGNvdWxkIG5vdCBiZSBmb3VuZC4nLCBOb1N1Y2hGcmFtZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBOb1N1Y2hGcmFtZUVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hGcmFtZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29tbWFuZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gOTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5rbm93biBjb21tYW5kJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgb3IgYSByZXF1ZXN0IHdhcyAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgdXNpbmcgYW4gSFRUUCBtZXRob2QgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBtYXBwZWQgJyArXG4gICAgICAgICAgJ3Jlc291cmNlLicsIFVua25vd25Db21tYW5kRXJyb3IuY29kZSgpLCBVbmtub3duQ29tbWFuZEVycm9yLnczY1N0YXR1cygpLCBVbmtub3duQ29tbWFuZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZWxlbWVudCBjb21tYW5kIGZhaWxlZCBiZWNhdXNlIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgaXMgbm8gJyArXG4gICAgICAgICAgJ2xvbmdlciBhdHRhY2hlZCB0byB0aGUgRE9NLicsIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci53M2NTdGF0dXMoKSwgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCB2aXNpYmxlJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzICcgK1xuICAgICAgICAgICdub3QgdmlzaWJsZSBvbiB0aGUgcGFnZS4nLCBFbGVtZW50Tm90VmlzaWJsZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBFbGVtZW50Tm90VmlzaWJsZUVycm9yLnczY1N0YXR1cygpLCBFbGVtZW50Tm90VmlzaWJsZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGVsZW1lbnQgc3RhdGUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgJyArXG4gICAgICAgICAgJ2luIGFuIGludmFsaWQgc3RhdGUgKGUuZy4gYXR0ZW1wdGluZyB0byBjbGljayBhIGRpc2FibGVkIGVsZW1lbnQpLicsXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLmNvZGUoKSwgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTM7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gVzNDX1VOS05PV05fRVJST1I7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycm9yT3JNZXNzYWdlKSB7XG4gICAgY29uc3Qgb3JpZ01lc3NhZ2UgPSBfLmlzU3RyaW5nKChlcnJvck9yTWVzc2FnZSB8fCB7fSkubWVzc2FnZSlcbiAgICAgID8gZXJyb3JPck1lc3NhZ2UubWVzc2FnZVxuICAgICAgOiBlcnJvck9yTWVzc2FnZTtcbiAgICBjb25zdCBtZXNzYWdlID0gJ0FuIHVua25vd24gc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4nICtcbiAgICAgIChvcmlnTWVzc2FnZSA/IGAgT3JpZ2luYWwgZXJyb3I6ICR7b3JpZ01lc3NhZ2V9YCA6ICcnKTtcbiAgICBzdXBlcihtZXNzYWdlLCBVbmtub3duRXJyb3IuY29kZSgpLCBVbmtub3duRXJyb3IudzNjU3RhdHVzKCksIFVua25vd25FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bk1ldGhvZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNDA1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTUVUSE9EX05PVF9BTExPV0VEO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmtub3duIG1ldGhvZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIHJlcXVlc3RlZCBjb21tYW5kIG1hdGNoZWQgYSBrbm93biBVUkwgYnV0IGRpZCBub3QgbWF0Y2ggYW4gbWV0aG9kIGZvciB0aGF0IFVSTCcsXG4gICAgICAgICAgVW5rbm93bk1ldGhvZEVycm9yLmNvZGUoKSwgVW5rbm93bk1ldGhvZEVycm9yLnczY1N0YXR1cygpLCBVbmtub3duTWV0aG9kRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA0MDU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSBzZXJ2ZXItc2lkZSBlcnJvciBvY2N1cnJlZC4gQ29tbWFuZCBjYW5ub3QgYmUgc3VwcG9ydGVkLicsXG4gICAgICAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci5jb2RlKCksIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTU7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IHNlbGVjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBzZWxlY3QgYW4gZWxlbWVudCB0aGF0IGNhbm5vdCBiZSBzZWxlY3RlZC4nLFxuICAgICAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2NDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZCc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgRWxlbWVudCBDbGljayBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCByZWNlaXZpbmcgJyArXG4gICAgICAgICAgJ3RoZSBldmVudHMgaXMgb2JzY3VyaW5nIHRoZSBlbGVtZW50IHRoYXQgd2FzIHJlcXVlc3RlZCBjbGlja2VkJyxcbiAgICAgICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLmNvZGUoKSwgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBub3QgaW50ZXJhY3RhYmxlJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgbm90IHBvaW50ZXItIG9yIGtleWJvYXJkIGludGVyYWN0YWJsZScsXG4gICAgICAgICAgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLmNvZGUoKSwgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnNlY3VyZSBjZXJ0aWZpY2F0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTmF2aWdhdGlvbiBjYXVzZWQgdGhlIHVzZXIgYWdlbnQgdG8gaGl0IGEgY2VydGlmaWNhdGUgd2FybmluZywgd2hpY2ggaXMgdXN1YWxseSB0aGUgcmVzdWx0IG9mIGFuIGV4cGlyZWQgb3IgaW52YWxpZCBUTFMgY2VydGlmaWNhdGUnLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmNvZGUoKSwgbnVsbCwgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKYXZhU2NyaXB0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnamF2YXNjcmlwdCBlcnJvcic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHVzZXIgc3VwcGxpZWQgSmF2YVNjcmlwdC4nLFxuICAgICAgICAgIEphdmFTY3JpcHRFcnJvci5jb2RlKCksIEphdmFTY3JpcHRFcnJvci53M2NTdGF0dXMoKSwgSmF2YVNjcmlwdEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBYUGF0aExvb2t1cEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBzZWxlY3Rvcic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VhcmNoaW5nIGZvciBhbiBlbGVtZW50IGJ5IFhQYXRoLicsXG4gICAgICAgICAgWFBhdGhMb29rdXBFcnJvci5jb2RlKCksIFhQYXRoTG9va3VwRXJyb3IudzNjU3RhdHVzKCksIFhQYXRoTG9va3VwRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDIxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuUkVRVUVTVF9USU1FT1VUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd0aW1lb3V0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBiZWZvcmUgaXRzIHRpbWVvdXQgZXhwaXJlZC4nLFxuICAgICAgICAgIFRpbWVvdXRFcnJvci5jb2RlKCksIFRpbWVvdXRFcnJvci53M2NTdGF0dXMoKSwgVGltZW91dEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hXaW5kb3dFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDIzO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIHdpbmRvdyc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCB3aW5kb3cgY291bGQgbm90IGJlIHNhdGlzZmllZCAnICtcbiAgICAgICAgICAnYmVjYXVzZSB0aGUgd2luZG93IGNvdWxkIG5vdCBiZSBmb3VuZC4nLCBOb1N1Y2hXaW5kb3dFcnJvci5jb2RlKCksXG4gICAgICAgICAgTm9TdWNoV2luZG93RXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaFdpbmRvd0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYxO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGFyZSBlaXRoZXIgaW52YWxpZCBvciBtYWxmb3JtZWQnLFxuICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLmNvZGUoKSwgSW52YWxpZEFyZ3VtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb29raWVEb21haW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI0O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb2tpZSBkb21haW4nO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gaWxsZWdhbCBhdHRlbXB0IHdhcyBtYWRlIHRvIHNldCBhIGNvb2tpZSB1bmRlciBhIGRpZmZlcmVudCAnICtcbiAgICAgICAgICAnZG9tYWluIHRoYW4gdGhlIGN1cnJlbnQgcGFnZS4nLCBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IuY29kZSgpLFxuICAgICAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci53M2NTdGF0dXMoKSwgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hDb29raWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGNvb2tpZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTm8gY29va2llIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIG5hbWUgd2FzIGZvdW5kIGFtb25nc3QgdGhlIGFzc29jaWF0ZWQgY29va2llcyBvZiB0aGUgY3VycmVudCBicm93c2luZyBjb250ZXh04oCZcyBhY3RpdmUgZG9jdW1lbnQnLFxuICAgICAgICAgIE5vU3VjaENvb2tpZUVycm9yLmNvZGUoKSwgTm9TdWNoQ29va2llRXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaENvb2tpZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFibGVUb1NldENvb2tpZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBzZXQgY29va2llJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHJlcXVlc3QgdG8gc2V0IGEgY29va2llXFwncyB2YWx1ZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkLicsXG4gICAgICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5jb2RlKCksIFVuYWJsZVRvU2V0Q29va2llRXJyb3IudzNjU3RhdHVzKCksIFVuYWJsZVRvU2V0Q29va2llRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI2O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmV4cGVjdGVkIGFsZXJ0IG9wZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmNvZGUoKSwgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLCBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vQWxlcnRPcGVuRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBhbGVydCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBvcGVyYXRlIG9uIGEgbW9kYWwgZGlhbG9nIHdoZW4gb25lICcgK1xuICAgICAgICAgICd3YXMgbm90IG9wZW4uJywgTm9BbGVydE9wZW5FcnJvci5jb2RlKCksIE5vQWxlcnRPcGVuRXJyb3IudzNjU3RhdHVzKCksIE5vQWxlcnRPcGVuRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaEFsZXJ0RXJyb3IgZXh0ZW5kcyBOb0FsZXJ0T3BlbkVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyODtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLlJFUVVFU1RfVElNRU9VVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2NyaXB0IHRpbWVvdXQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyaXB0IGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgICAgICAgICBTY3JpcHRUaW1lb3V0RXJyb3IuY29kZSgpLCBTY3JpcHRUaW1lb3V0RXJyb3IudzNjU3RhdHVzKCksIFNjcmlwdFRpbWVvdXRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBjb29yZGluYXRlcyc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkIHRvIGFuIGludGVyYWN0aW9ucyBvcGVyYXRpb24gYXJlIGludmFsaWQuJyxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuY29kZSgpLCBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ29vcmRpbmF0ZXNFcnJvciBleHRlbmRzIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvciB7fVxuXG5leHBvcnQgY2xhc3MgSU1FTm90QXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQgb3BlcmF0aW9uJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdJTUUgd2FzIG5vdCBhdmFpbGFibGUuJywgSU1FTm90QXZhaWxhYmxlRXJyb3IuY29kZSgpLFxuICAgICAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLnczY1N0YXR1cygpLCBJTUVOb3RBdmFpbGFibGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gSU1FIGVuZ2luZSBjb3VsZCBub3QgYmUgc3RhcnRlZC4nLFxuICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci5jb2RlKCksIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRTZWxlY3RvckVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBzZWxlY3Rvcic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQXJndW1lbnQgd2FzIGFuIGludmFsaWQgc2VsZWN0b3IgKGUuZy4gWFBhdGgvQ1NTKS4nLFxuICAgICAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmNvZGUoKSwgSW52YWxpZFNlbGVjdG9yRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZFNlbGVjdG9yRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2Vzc2lvbiBub3QgY3JlYXRlZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGRldGFpbHMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLic7XG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBEZXRhaWxzOiAke2RldGFpbHN9YDtcbiAgICB9XG5cbiAgICBzdXBlcihtZXNzYWdlLCBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmNvZGUoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci53M2NTdGF0dXMoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzNDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbW92ZSB0YXJnZXQgb3V0IG9mIGJvdW5kcyc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGFyZ2V0IHByb3ZpZGVkIGZvciBhIG1vdmUgYWN0aW9uIGlzIG91dCBvZiBib3VuZHMuJyxcbiAgICAgICAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci5jb2RlKCksIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLnczY1N0YXR1cygpLCBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoQ29udGV4dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzU7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTm8gc3VjaCBjb250ZXh0IGZvdW5kLicsIE5vU3VjaENvbnRleHRFcnJvci5jb2RlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ29udGV4dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzY7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhhdCBjb21tYW5kIGNvdWxkIG5vdCBiZSBleGVjdXRlZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LicsXG4gICAgICAgICAgSW52YWxpZENvbnRleHRFcnJvci5jb2RlKCkpO1xuICB9XG59XG5cbi8vIFRoZXNlIGFyZSBhbGlhc2VzIGZvciBVbmtub3duTWV0aG9kRXJyb3JcbmV4cG9ydCBjbGFzcyBOb3RZZXRJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgVW5rbm93bk1ldGhvZEVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBVbmtub3duTWV0aG9kRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdNZXRob2QgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbiBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gY2FwdHVyZSBzY3JlZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyZWVuIGNhcHR1cmUgd2FzIG1hZGUgaW1wb3NzaWJsZScsXG4gICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmNvZGUoKSwgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLnczY1N0YXR1cygpLCBVbmFibGVUb0NhcHR1cmVTY3JlZW4uZXJyb3IoKSk7XG4gIH1cbn1cblxuXG4vLyBFcXVpdmFsZW50IHRvIFczQyBJbnZhbGlkQXJndW1lbnRFcnJvclxuZXhwb3J0IGNsYXNzIEJhZFBhcmFtZXRlcnNFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgYXJndW1lbnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChyZXF1aXJlZFBhcmFtcywgYWN0dWFsUGFyYW1zLCBlcnJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKCFlcnJNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFdlIHdhbnRlZCBgICtcbiAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShyZXF1aXJlZFBhcmFtcyl9IGFuZCB5b3UgYCArXG4gICAgICAgICAgYHNlbnQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWxQYXJhbXMpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBgUGFyYW1ldGVycyB3ZXJlIGluY29ycmVjdC4gWW91IHNlbnQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWxQYXJhbXMpfSwgJHtlcnJNZXNzYWdlfWA7XG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMudzNjU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG59XG5cbi8qKlxuICogUHJveHlSZXF1ZXN0RXJyb3IgaXMgYSBjdXN0b20gZXJyb3IgYW5kIHdpbGwgYmUgdGhyb3duIHVwIG9uIHVuc3VjY2Vzc2Z1bCBwcm94eSByZXF1ZXN0IGFuZFxuICogd2lsbCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm94eSBmYWlsdXJlLlxuICogSW4gY2FzZSBvZiBQcm94eVJlcXVlc3RFcnJvciBzaG91bGQgZmV0Y2ggdGhlIGFjdHVhbCBlcnJvciBieSBjYWxsaW5nIGBnZXRBY3R1YWxFcnJvcigpYFxuICogZm9yIHByb3h5IGZhaWx1cmUgdG8gZ2VuZXJhdGUgdGhlIGNsaWVudCByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb3h5UmVxdWVzdEVycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZXJyLCByZXNwb25zZUVycm9yLCBodHRwU3RhdHVzKSB7XG4gICAgbGV0IHJlc3BvbnNlRXJyb3JPYmogPSB1dGlsLnNhZmVKc29uUGFyc2UocmVzcG9uc2VFcnJvcik7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3JPYmogPSB7fTtcbiAgICB9XG4gICAgbGV0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZyhyZXNwb25zZUVycm9yKSA/IHJlc3BvbnNlRXJyb3IgOiAnJztcbiAgICBpZiAoIV8uaXNFbXB0eShyZXNwb25zZUVycm9yT2JqKSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvck9iai52YWx1ZSkpIHtcbiAgICAgICAgb3JpZ01lc3NhZ2UgPSByZXNwb25zZUVycm9yT2JqLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QocmVzcG9uc2VFcnJvck9iai52YWx1ZSkgJiYgXy5pc1N0cmluZyhyZXNwb25zZUVycm9yT2JqLnZhbHVlLm1lc3NhZ2UpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlcihfLmlzRW1wdHkoZXJyKSA/IGBQcm94eSByZXF1ZXN0IHVuc3VjY2Vzc2Z1bC4gJHtvcmlnTWVzc2FnZX1gIDogZXJyKTtcblxuICAgIHRoaXMudzNjU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuXG4gICAgLy8gSWYgdGhlIHJlc3BvbnNlIGVycm9yIGlzIGFuIG9iamVjdCBhbmQgdmFsdWUgaXMgYW4gb2JqZWN0LCBpdCdzIGEgVzNDIGVycm9yIChmb3IgSlNPTldQIHZhbHVlIGlzIGEgc3RyaW5nKVxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QocmVzcG9uc2VFcnJvck9iai52YWx1ZSkgJiYgXy5oYXMocmVzcG9uc2VFcnJvck9iai52YWx1ZSwgJ2Vycm9yJykpIHtcbiAgICAgIHRoaXMudzNjID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIHRoaXMudzNjU3RhdHVzID0gaHR0cFN0YXR1cyB8fCBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuanNvbndwID0gcmVzcG9uc2VFcnJvck9iajtcbiAgICB9XG4gIH1cblxuICBnZXRBY3R1YWxFcnJvciAoKSB7XG4gICAgLy8gSWYgaXQncyBNSlNPTldQIGVycm9yLCByZXR1cm5zIGFjdHVhbCBlcnJvciBjYXVzZSBmb3IgcmVxdWVzdCBmYWlsdXJlIGJhc2VkIG9uIGBqc29ud3Auc3RhdHVzYFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy5zdGF0dXMpICYmIHV0aWwuaGFzVmFsdWUodGhpcy5qc29ud3A/LnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKHRoaXMuanNvbndwLnN0YXR1cywgdGhpcy5qc29ud3AudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLnczYykgJiYgXy5pc051bWJlcih0aGlzLnczY1N0YXR1cykgJiYgdGhpcy53M2NTdGF0dXMgPj0gMzAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JGcm9tVzNDSnNvbkNvZGUodGhpcy53M2MuZXJyb3IsIHRoaXMudzNjLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlLCB0aGlzLnczYy5zdGFja3RyYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgfVxufVxuLy8gbWFwIG9mIGVycm9yIGNsYXNzIG5hbWUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGVycm9ycyA9IHtOb3RZZXRJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgQmFkUGFyYW1ldGVyc0Vycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaERyaXZlckVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEVsZW1lbnRFcnJvcixcbiAgICAgICAgICAgICAgICBVbmtub3duQ29tbWFuZEVycm9yLFxuICAgICAgICAgICAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLFxuICAgICAgICAgICAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLFxuICAgICAgICAgICAgICAgIFVua25vd25FcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLFxuICAgICAgICAgICAgICAgIEphdmFTY3JpcHRFcnJvcixcbiAgICAgICAgICAgICAgICBYUGF0aExvb2t1cEVycm9yLFxuICAgICAgICAgICAgICAgIFRpbWVvdXRFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hXaW5kb3dFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hDb29raWVFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZENvb3JkaW5hdGVzRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IsXG4gICAgICAgICAgICAgICAgTm9BbGVydE9wZW5FcnJvcixcbiAgICAgICAgICAgICAgICBTY3JpcHRUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLFxuICAgICAgICAgICAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvcixcbiAgICAgICAgICAgICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLFxuICAgICAgICAgICAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEFsZXJ0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoQ29udGV4dEVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRDb250ZXh0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoRnJhbWVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmFibGVUb0NhcHR1cmVTY3JlZW4sXG4gICAgICAgICAgICAgICAgVW5rbm93bk1ldGhvZEVycm9yLFxuICAgICAgICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgICAgICAgICAgUHJveHlSZXF1ZXN0RXJyb3J9O1xuXG4vLyBtYXAgb2YgZXJyb3IgY29kZSB0byBlcnJvciBjbGFzc1xuY29uc3QganNvbndwRXJyb3JDb2RlTWFwID0ge307XG5mb3IgKGxldCBFcnJvckNsYXNzIG9mIF8udmFsdWVzKGVycm9ycykpIHtcbiAgaWYgKEVycm9yQ2xhc3MuY29kZSkge1xuICAgIGpzb253cEVycm9yQ29kZU1hcFtFcnJvckNsYXNzLmNvZGUoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmNvbnN0IHczY0Vycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmIChFcnJvckNsYXNzLmVycm9yKSB7XG4gICAgdzNjRXJyb3JDb2RlTWFwW0Vycm9yQ2xhc3MuZXJyb3IoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5rbm93bkVycm9yIChlcnIpIHtcbiAgcmV0dXJuICFlcnIuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIV8udmFsdWVzKGVycm9ycykuZmluZChmdW5jdGlvbiBlcXVhbE5hbWVzIChlcnJvcikge1xuICAgICAgICAgICByZXR1cm4gZXJyb3IubmFtZSA9PT0gZXJyLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNFcnJvclR5cGUgKGVyciwgdHlwZSkge1xuICAvLyBgbmFtZWAgcHJvcGVydHkgaXMgdGhlIGNvbnN0cnVjdG9yIG5hbWVcbiAgaWYgKHR5cGUubmFtZSA9PT0gUHJvdG9jb2xFcnJvci5uYW1lKSB7XG4gICAgLy8gYGpzb253cENvZGVgIGlzIGAwYCBvbiBzdWNjZXNzXG4gICAgcmV0dXJuICEhZXJyLmpzb253cENvZGU7XG4gIH0gZWxzZSBpZiAodHlwZS5uYW1lID09PSBQcm94eVJlcXVlc3RFcnJvci5uYW1lKSB7XG4gICAgLy8gYHN0YXR1c2AgaXMgYDBgIG9uIHN1Y2Nlc3NcbiAgICBpZiAoZXJyLmpzb253cCkge1xuICAgICAgcmV0dXJuICEhZXJyLmpzb253cC5zdGF0dXM7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChlcnIudzNjKSkge1xuICAgICAgcmV0dXJuIF8uaXNOdW1iZXIoZXJyLnczY1N0YXR1cykgJiYgZXJyLnczY1N0YXR1cyA+PSAzMDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBlcnIuY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGFuIGVycm9yIGRlcml2ZWQgZnJvbSBNSlNPTldQIHN0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IGNvZGUgSlNPTldQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IHZhbHVlIFRoZSBlcnJvciBtZXNzYWdlLCBvciBhbiBvYmplY3Qgd2l0aCBhIGBtZXNzYWdlYCBwcm9wZXJ0eVxuICogQHJldHVybiB7UHJvdG9jb2xFcnJvcn0gVGhlIGVycm9yIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIEpTT05XUCBzdGF0dXMgY29kZVxuICovXG5mdW5jdGlvbiBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSAoY29kZSwgdmFsdWUgPSAnJykge1xuICAvLyBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgcHVsbCBtZXNzYWdlIGZyb20gaXQsIG90aGVyd2lzZSB1c2UgdGhlIHBsYWluXG4gIC8vIHZhbHVlLCBvciBkZWZhdWx0IHRvIGFuIGVtcHR5IHN0cmluZywgaWYgbnVsbFxuICBjb25zdCBtZXNzYWdlID0gKHZhbHVlIHx8IHt9KS5tZXNzYWdlIHx8IHZhbHVlIHx8ICcnO1xuICBpZiAoY29kZSAhPT0gVW5rbm93bkVycm9yLmNvZGUoKSAmJiBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0pIHtcbiAgICBtanNvbndwTG9nLmRlYnVnKGBNYXRjaGVkIEpTT05XUCBlcnJvciBjb2RlICR7Y29kZX0gdG8gJHtqc29ud3BFcnJvckNvZGVNYXBbY29kZV0ubmFtZX1gKTtcbiAgICByZXR1cm4gbmV3IGpzb253cEVycm9yQ29kZU1hcFtjb2RlXShtZXNzYWdlKTtcbiAgfVxuICBtanNvbndwTG9nLmRlYnVnKGBNYXRjaGVkIEpTT05XUCBlcnJvciBjb2RlICR7Y29kZX0gdG8gVW5rbm93bkVycm9yYCk7XG4gIHJldHVybiBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGFuIGVycm9yIGRlcml2ZWQgZnJvbSBXM0MgSlNPTiBDb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSBXM0MgZXJyb3Igc3RyaW5nIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jaGFuZGxpbmctZXJyb3JzIGBKU09OIEVycm9yIENvZGVgIGNvbHVtbilcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBAcGFyYW0gez9zdHJpbmd9IHN0YWNrdHJhY2UgYW4gb3B0aW9uYWwgZXJyb3Igc3RhY2t0cmFjZVxuICogQHJldHVybiB7UHJvdG9jb2xFcnJvcn0gIFRoZSBlcnJvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVzNDIGVycm9yIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlcnJvckZyb21XM0NKc29uQ29kZSAoY29kZSwgbWVzc2FnZSwgc3RhY2t0cmFjZSA9IG51bGwpIHtcbiAgaWYgKGNvZGUgJiYgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICB3M2NMb2cuZGVidWcoYE1hdGNoZWQgVzNDIGVycm9yIGNvZGUgJyR7Y29kZX0nIHRvICR7dzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0ubmFtZX1gKTtcbiAgICBjb25zdCByZXN1bHRFcnJvciA9IG5ldyB3M2NFcnJvckNvZGVNYXBbY29kZS50b0xvd2VyQ2FzZSgpXShtZXNzYWdlKTtcbiAgICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgICByZXR1cm4gcmVzdWx0RXJyb3I7XG4gIH1cbiAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byBVbmtub3duRXJyb3JgKTtcbiAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xuICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgcmV0dXJuIHJlc3VsdEVycm9yO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gQXBwaXVtIGVycm9yIHRvIHByb3BlciBXM0MgSFRUUCByZXNwb25zZVxuICogQHBhcmFtIHtQcm90b2NvbEVycm9yfSBlcnIgVGhlIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZFxuICovXG5mdW5jdGlvbiBnZXRSZXNwb25zZUZvclczQ0Vycm9yIChlcnIpIHtcbiAgbGV0IGh0dHBTdGF0dXM7XG5cbiAgLy8gVzNDIGRlZmluZWQgZXJyb3IgbWVzc2FnZSAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLWVycm9yLWNvZGUpXG4gIGxldCB3M2NFcnJvclN0cmluZztcblxuICBpZiAoIWVyci53M2NTdGF0dXMpIHtcbiAgICBlcnIgPSB1dGlsLmhhc1ZhbHVlKGVyci5zdGF0dXMpXG4gICAgICAvLyBJZiBpdCdzIGEgSlNPTldQIGVycm9yLCBmaW5kIGNvcnJlc3BvbmRpbmcgZXJyb3JcbiAgICAgID8gZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUoZXJyLnN0YXR1cywgZXJyLnZhbHVlKVxuICAgICAgOiBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cblxuICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKSkge1xuICAgIC8vIHJlc3BvbmQgd2l0aCBhIDQwMCBpZiB3ZSBoYXZlIGJhZCBwYXJhbWV0ZXJzXG4gICAgdzNjTG9nLmRlYnVnKGBCYWQgcGFyYW1ldGVyczogJHtlcnJ9YCk7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBCYWRQYXJhbWV0ZXJzRXJyb3IuZXJyb3IoKTtcbiAgfSBlbHNlIHtcbiAgICB3M2NFcnJvclN0cmluZyA9IGVyci5lcnJvcjtcbiAgfVxuXG4gIGh0dHBTdGF0dXMgPSBlcnIudzNjU3RhdHVzO1xuXG4gIGlmICghdzNjRXJyb3JTdHJpbmcpIHtcbiAgICB3M2NFcnJvclN0cmluZyA9IFVua25vd25FcnJvci5lcnJvcigpO1xuICB9XG5cbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHZhbHVlOiB7XG4gICAgICBlcnJvcjogdzNjRXJyb3JTdHJpbmcsXG4gICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgIHN0YWNrdHJhY2U6IGVyci5zdGFja3RyYWNlIHx8IGVyci5zdGFjayxcbiAgICB9XG4gIH07XG4gIHJldHVybiBbaHR0cFN0YXR1cywgaHR0cFJlc0JvZHldO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gQXBwaXVtIGVycm9yIHRvIGEgcHJvcGVyIEpTT05XUCByZXNwb25zZVxuICogQHBhcmFtIHtQcm90b2NvbEVycm9yfSBlcnIgVGhlIGVycm9yIHRvIGJlIGNvbnZlcnRlZFxuICovXG5mdW5jdGlvbiBnZXRSZXNwb25zZUZvckpzb253cEVycm9yIChlcnIpIHtcbiAgaWYgKGlzVW5rbm93bkVycm9yKGVycikpIHtcbiAgICBlcnIgPSBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIpO1xuICB9XG4gIC8vIE1KU09OV1AgZXJyb3JzIGFyZSB1c3VhbGx5IDUwMCBzdGF0dXMgY29kZSBzbyBzZXQgaXQgdG8gdGhhdCBieSBkZWZhdWx0XG4gIGxldCBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHN0YXR1czogZXJyLmpzb253cENvZGUsXG4gICAgdmFsdWU6IHtcbiAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlXG4gICAgfVxuICB9O1xuXG4gIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNDAwIGlmIHdlIGhhdmUgYmFkIHBhcmFtZXRlcnNcbiAgICBtanNvbndwTG9nLmRlYnVnKGBCYWQgcGFyYW1ldGVyczogJHtlcnJ9YCk7XG4gICAgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgICBodHRwUmVzQm9keSA9IGVyci5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IpIHx8XG4gICAgICAgICAgICAgaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA1MDEgaWYgdGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWRcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9JTVBMRU1FTlRFRDtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyIGZvciB0aGUgc2Vzc2lvblxuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG5cblxuICByZXR1cm4gW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XTtcbn1cblxuZXhwb3J0IHtcbiAgZXJyb3JzLCBpc0Vycm9yVHlwZSwgaXNVbmtub3duRXJyb3IsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZSxcbiAgZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciwgZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvcixcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsU0FBakIsQ0FBbkI7O0FBQ0EsTUFBTUMsTUFBTSxHQUFHRixnQkFBT0MsU0FBUCxDQUFpQixLQUFqQixDQUFmOztBQUVBLE1BQU1FLGlCQUFpQixHQUFHLGVBQTFCOztBQUdPLE1BQU1DLGFBQU4sU0FBNEJDLGlCQUE1QixDQUFxQztFQUMxQ0MsV0FBVyxDQUFFQyxHQUFGLEVBQU9DLFVBQVAsRUFBbUJDLFNBQW5CLEVBQThCQyxLQUE5QixFQUFxQztJQUM5QyxNQUFNSCxHQUFOO0lBQ0EsS0FBS0MsVUFBTCxHQUFrQkEsVUFBbEI7SUFDQSxLQUFLRSxLQUFMLEdBQWFBLEtBQUssSUFBSVAsaUJBQXRCOztJQUNBLElBQUksS0FBS0ssVUFBTCxL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
|
|
@@ -39,4 +39,4 @@ function formatResponseValue(resValue) {
|
|
|
39
39
|
function formatStatus(responseBody) {
|
|
40
40
|
return _lodash.default.isPlainObject(responseBody) ? _lodash.default.omit(responseBody, ['status']) : responseBody;
|
|
41
41
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRSZXNwb25zZVZhbHVlIiwicmVzVmFsdWUiLCJfIiwiaXNVbmRlZmluZWQiLCJNSlNPTldQX0VMRU1FTlRfS0VZIiwiVzNDX0VMRU1FTlRfS0VZIiwiZm9ybWF0U3RhdHVzIiwicmVzcG9uc2VCb2R5IiwiaXNQbGFpbk9iamVjdCIsIm9taXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZHVwbGljYXRlS2V5cyB9IGZyb20gJy4uL2Jhc2Vkcml2ZXIvaGVscGVycyc7XG5pbXBvcnQgeyBNSlNPTldQX0VMRU1FTlRfS0VZLCBXM0NfRUxFTUVOVF9LRVkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByZXByb2Nlc3NlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIGZvciBBUEkgcmVzcG9uc2VzLFxuICogc28gdGhleSBoYXZlIGtleXMgZm9yIGJvdGggVzNDIGFuZCBKU09OV1AgcHJvdG9jb2xzLlxuICogVGhlIGFyZ3VtZW50IHZhbHVlIGlzIE5PVCBtdXRhdGVkXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSByZXNWYWx1ZSBUaGUgYWN0dWFsIHJlc3BvbnNlIHZhbHVlXG4gKiBAcmV0dXJucyB7P09iamVjdH0gRWl0aGVyIG1vZGlmaWVkIHZhbHVlIG9yIHRoZSBzYW1lIG9uZSBpZlxuICogbm90aGluZyBoYXMgYmVlbiBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBmb3JtYXRSZXNwb25zZVZhbHVlIChyZXNWYWx1ZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChyZXNWYWx1ZSkpIHtcbiAgICAvLyBjb252ZXJ0IHVuZGVmaW5lZCB0byBudWxsXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gSWYgdGhlIE1KU09OV1AgZWxlbWVudCBrZXkgZm9ybWF0IChFTEVNRU5UKSB3YXMgcHJvdmlkZWQsIGFkZCBhIGR1cGxpY2F0ZSBrZXkgKGVsZW1lbnQtNjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmKVxuICAvLyBJZiB0aGUgVzNDIGVsZW1lbnQga2V5IGZvcm1hdCAoZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YpIHdhcyBwcm92aWRlZCwgYWRkIGEgZHVwbGljYXRlIGtleSAoRUxFTUVOVClcbiAgcmV0dXJuIGR1cGxpY2F0ZUtleXMocmVzVmFsdWUsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSk7XG59XG5cbi8qKlxuICogUHJvcGVybHkgZm9ybWF0cyB0aGUgc3RhdHVzIGZvciBBUEkgcmVzcG9uc2VzLFxuICogc28gdGhleSBhcmUgY29ycmVjdCBmb3IgdGhlIFczQyBwcm90b2NvbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2VCb2R5XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZml4ZWQgcmVzcG9uc2UgYm9keVxuICovXG5mdW5jdGlvbiBmb3JtYXRTdGF0dXMgKHJlc3BvbnNlQm9keSkge1xuICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlQm9keSkgPyBfLm9taXQocmVzcG9uc2VCb2R5LCBbJ3N0YXR1cyddKSA6IHJlc3BvbnNlQm9keTtcbn1cblxuXG5leHBvcnQge1xuICBNSlNPTldQX0VMRU1FTlRfS0VZLCBXM0NfRUxFTUVOVF9LRVksIGZvcm1hdFJlc3BvbnNlVmFsdWUsIGZvcm1hdFN0YXR1c1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBV0EsU0FBU0EsbUJBQVQsQ0FBOEJDLFFBQTlCLEVBQXdDO0VBQ3RDLElBQUlDLGdCQUFFQyxXQUFGLENBQWNGLFFBQWQsQ0FBSixFQUE2QjtJQUUzQixPQUFPLElBQVA7RUFDRDs7RUFHRCxPQUFPLDRCQUFjQSxRQUFkLEVBQXdCRyw4QkFBeEIsRUFBNkNDLDBCQUE3QyxDQUFQO0FBQ0Q7O0FBU0QsU0FBU0MsWUFBVCxDQUF1QkMsWUFBdkIsRUFBcUM7RUFDbkMsT0FBT0wsZ0JBQUVNLGFBQUYsQ0FBZ0JELFlBQWhCLElBQWdDTCxnQkFBRU8sSUFBRixDQUFPRixZQUFQLEVBQXFCLENBQUMsUUFBRCxDQUFyQixDQUFoQyxHQUFtRUEsWUFBMUU7QUFDRCJ9
|
|
@@ -95,4 +95,4 @@ var _protocol = require("./protocol");
|
|
|
95
95
|
var _routes = require("./routes");
|
|
96
96
|
|
|
97
97
|
var _errors = require("./errors");
|
|
98
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCB7XG4gIGlzU2Vzc2lvbkNvbW1hbmQsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgZGV0ZXJtaW5lUHJvdG9jb2wsXG4gIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsIEdFVF9TVEFUVVNfQ09NTUFORFxufSBmcm9tICcuL3Byb3RvY29sJztcbmltcG9ydCB7XG4gIE5PX1NFU1NJT05fSURfQ09NTUFORFMsIEFMTF9DT01NQU5EUywgTUVUSE9EX01BUCxcbiAgcm91dGVUb0NvbW1hbmROYW1lXG59IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCB7XG4gIGVycm9ycywgaXNFcnJvclR5cGUsIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICcuL2Vycm9ycyc7XG5cbmV4cG9ydCB7XG4gIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgZXJyb3JzLCBpc0Vycm9yVHlwZSxcbiAgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlLCBBTExfQ09NTUFORFMsIE1FVEhPRF9NQVAsXG4gIHJvdXRlVG9Db21tYW5kTmFtZSwgTk9fU0VTU0lPTl9JRF9DT01NQU5EUywgaXNTZXNzaW9uQ29tbWFuZCwgZGV0ZXJtaW5lUHJvdG9jb2wsXG4gIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsIEdFVF9TVEFUVVNfQ09NTUFORFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFJQTs7QUFJQSJ9
|
|
@@ -391,4 +391,4 @@ async function doJwpProxy(driver, req, res) {
|
|
|
391
391
|
}
|
|
392
392
|
}
|
|
393
393
|
}
|
|
394
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9wcm90b2NvbC9wcm90b2NvbC5qcyJdLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIkdFVF9TVEFUVVNfQ09NTUFORCIsImRldGVybWluZVByb3RvY29sIiwiY3JlYXRlU2Vzc2lvbkFyZ3MiLCJfIiwic29tZSIsImlzVzNjQ2FwcyIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiaXNTZXNzaW9uQ29tbWFuZCIsImNvbW1hbmQiLCJpbmNsdWRlcyIsIk5PX1NFU1NJT05fSURfQ09NTUFORFMiLCJnZXRMb2dnZXIiLCJsb2ciLCJpbmZvIiwibG9nUHJlZml4IiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIiwic3Vic3RyaW5nIiwibG9nZ2VyIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImVycm9yIiwidmFsdWUiLCJjYXBhYmlsaXRpZXMiLCJ1dGlsIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJpc05hTiIsInBhcnNlSW50Iiwic3RhY2t0cmFjZSIsImVyciIsImFjdHVhbEVyciIsImVyck1zZyIsInN0YWNrIiwiUHJveHlSZXF1ZXN0RXJyb3IiLCJnZXRBY3R1YWxFcnJvciIsImlzU3RyaW5nIiwic2VuZCIsImpzb24iLCJ0b0xvd2VyQ2FzZSIsIkIiLCJyZXNvbHZlIiwiZG9uZSIsInByb3h5QWN0aXZlIiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsIm9yaWdpbmFsVXJsIiwiY2FuUHJveHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztB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REFBVixDQUFOO0FBQ0Q7O0FBQ0QsTUFBSTtBQUNGLFVBQU01RCxNQUFNLENBQUM2RCxjQUFQLENBQXNCLGFBQXRCLEVBQXFDaUIsR0FBckMsRUFBMEN2RCxHQUExQyxFQUErQ3VELEdBQUcsQ0FBQ2xDLE1BQUosQ0FBVzNDLFNBQTFELENBQU47QUFDRCxHQUZELENBRUUsT0FBTzZHLEdBQVAsRUFBWTtBQUNaLFFBQUkseUJBQVlBLEdBQVosRUFBaUJ2RSxlQUFPMkUsaUJBQXhCLENBQUosRUFBZ0Q7QUFDOUMsWUFBTUosR0FBTjtBQUNELEtBRkQsTUFFTztBQUNMLFlBQU0sSUFBSWxELEtBQUosQ0FBVyxpQ0FBZ0NrRCxHQUFHLENBQUN4RSxPQUFRLEVBQXZELENBQU47QUFDRDtBQUNGO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgbG9nZ2VyLCBub2RlIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHZhbGlkYXRvcnMgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBpc0Vycm9yVHlwZSwgZ2V0UmVzcG9uc2VGb3JXM0NFcnJvcixcbiAgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlLFxufSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBNRVRIT0RfTUFQLCBOT19TRVNTSU9OX0lEX0NPTU1BTkRTIH0gZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZm9ybWF0UmVzcG9uc2VWYWx1ZSwgZm9ybWF0U3RhdHVzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IE1BWF9MT0dfQk9EWV9MRU5HVEgsIFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNXM2NDYXBzIH0gZnJvbSAnLi4vaGVscGVycy9jYXBhYmlsaXRpZXMnO1xuXG5cbmNvbnN0IENSRUFURV9TRVNTSU9OX0NPTU1BTkQgPSAnY3JlYXRlU2Vzc2lvbic7XG5jb25zdCBERUxFVEVfU0VTU0lPTl9DT01NQU5EID0gJ2RlbGV0ZVNlc3Npb24nO1xuY29uc3QgR0VUX1NUQVRVU19DT01NQU5EID0gJ2dldFN0YXR1cyc7XG5cbmZ1bmN0aW9uIGRldGVybWluZVByb3RvY29sIChjcmVhdGVTZXNzaW9uQXJncykge1xuICByZXR1cm4gXy5zb21lKGNyZWF0ZVNlc3Npb25BcmdzLCBpc1czY0NhcHMpID8gUFJPVE9DT0xTLlczQyA6IFBST1RPQ09MUy5NSlNPTldQO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2wgKGRyaXZlciwgc2Vzc2lvbklkID0gbnVsbCkge1xuICBjb25zdCBkc3REcml2ZXIgPSBfLmlzRnVuY3Rpb24oZHJpdmVyLmRyaXZlckZvclNlc3Npb24pXG4gICAgPyBkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgOiBkcml2ZXI7XG4gIGlmIChkc3REcml2ZXIgPT09IGRyaXZlcikge1xuICAgIC8vIFNob3J0Y2lyY3VpdCBpZiB0aGUgZHJpdmVyIGluc3RhbmNlIGlzIG5vdCBhbiB1bWJyZWxsYSBkcml2ZXJcbiAgICAvLyBvciBpdCBpcyBGYWtlIGRyaXZlciBpbnN0YW5jZSwgd2hlcmUgYGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uYFxuICAgIC8vIGFsd2F5cyByZXR1cm5zIHNlbGYgaW5zdGFuY2VcbiAgICByZXR1cm4gZHJpdmVyLnByb3RvY29sO1xuICB9XG5cbiAgLy8gRXh0cmFjdCB0aGUgcHJvdG9jb2wgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24gaWYgdGhlIGdpdmVuIGRyaXZlciBpcyB0aGUgdW1icmVsbGEgb25lXG4gIHJldHVybiBkc3REcml2ZXI/LnByb3RvY29sID8/IFBST1RPQ09MUy5XM0M7XG59XG5cbmZ1bmN0aW9uIGlzU2Vzc2lvbkNvbW1hbmQgKGNvbW1hbmQpIHtcbiAgcmV0dXJuICFfLmluY2x1ZGVzKE5PX1NFU1NJT05fSURfQ09NTUFORFMsIGNvbW1hbmQpO1xufVxuXG5mdW5jdGlvbiBnZXRMb2dnZXIgKGRyaXZlciwgc2Vzc2lvbklkID0gbnVsbCkge1xuICBjb25zdCBkc3REcml2ZXIgPSBzZXNzaW9uSWQgJiYgXy5pc0Z1bmN0aW9uKGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKVxuICAgID8gKGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZCkgPz8gZHJpdmVyKVxuICAgIDogZHJpdmVyO1xuICBpZiAoXy5pc0Z1bmN0aW9uKGRzdERyaXZlci5sb2c/LmluZm8pKSB7XG4gICAgcmV0dXJuIGRzdERyaXZlci5sb2c7XG4gIH1cblxuICBsZXQgbG9nUHJlZml4ID0gZHN0RHJpdmVyLmNvbnN0cnVjdG9yXG4gICAgPyBgJHtkc3REcml2ZXIuY29uc3RydWN0b3IubmFtZX1AJHtub2RlLmdldE9iamVjdElkKGRzdERyaXZlcikuc3Vic3RyaW5nKDAsIDgpfWBcbiAgICA6ICdBcHBpdW1Ecml2ZXInO1xuICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgbG9nUHJlZml4ICs9IGAgKCR7c2Vzc2lvbklkLnN1YnN0cmluZygwLCA4KX0pYDtcbiAgfVxuICByZXR1cm4gbG9nZ2VyLmdldExvZ2dlcihsb2dQcmVmaXgpO1xufVxuXG5mdW5jdGlvbiB3cmFwUGFyYW1zIChwYXJhbVNldHMsIGpzb25PYmopIHtcbiAgLyogVGhlcmUgYXJlIGNvbW1hbmRzIGxpa2UgcGVyZm9ybVRvdWNoIHdoaWNoIHRha2UgYSBzaW5nbGUgcGFyYW1ldGVyIChwcmltaXRpdmUgdHlwZSBvciBhcnJheSkuXG4gICAqIFNvbWUgZHJpdmVycyBjaG9vc2UgdG8gcGFzcyB0aGlzIHBhcmFtZXRlciBhcyBhIHZhbHVlIChlZy4gW2FjdGlvbjEsIGFjdGlvbjIuLi5dKSB3aGlsZSBvdGhlcnMgdG9cbiAgICogd3JhcCBpdCB3aXRoaW4gYW4gb2JqZWN0KGVnJyB7Z2VzdHVyZTogIFthY3Rpb24xLCBhY3Rpb24yLi4uXX0pLCB3aGljaCBtYWtlcyBpdCBoYXJkIHRvIHZhbGlkYXRlLlxuICAgKiBUaGUgd3JhcCBvcHRpb24gaW4gdGhlIHNwZWMgZW5mb3JjZSB3cmFwcGluZyBiZWZvcmUgdmFsaWRhdGlvbiwgc28gdGhhdCBhbGwgcGFyYW1zIGFyZSB3cmFwcGVkIGF0XG4gICAqIHRoZSB0aW1lIHRoZXkgYXJlIHZhbGlkYXRlZCBhbmQgbGF0ZXIgcGFzc2VkIHRvIHRoZSBjb21tYW5kcy5cbiAgICovXG4gIGxldCByZXMgPSBqc29uT2JqO1xuICBpZiAoXy5pc0FycmF5KGpzb25PYmopIHx8ICFfLmlzT2JqZWN0KGpzb25PYmopKSB7XG4gICAgcmVzID0ge307XG4gICAgcmVzW3BhcmFtU2V0cy53cmFwXSA9IGpzb25PYmo7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gdW53cmFwUGFyYW1zIChwYXJhbVNldHMsIGpzb25PYmopIHtcbiAgLyogVGhlcmUgYXJlIGNvbW1hbmRzIGxpa2Ugc2V0TmV0d29ya0Nvbm5lY3Rpb24gd2hpY2ggc2VuZCBwYXJhbWV0ZXJzIHdyYXBwZWQgaW5zaWRlIGEga2V5IHN1Y2ggYXNcbiAgICogXCJwYXJhbWV0ZXJzXCIuIFRoaXMgZnVuY3Rpb24gdW53cmFwcyB0aGVtIChlZy4ge1wicGFyYW1ldGVyc1wiOiB7XCJ0eXBlXCI6IDF9fSBiZWNvbWVzIHtcInR5cGVcIjogMX0pLlxuICAgKi9cbiAgbGV0IHJlcyA9IGpzb25PYmo7XG4gIGlmIChfLmlzT2JqZWN0KGpzb25PYmopKSB7XG4gICAgLy8gc29tZSBjbGllbnRzLCBsaWtlIHJ1YnksIGRvbid0IHdyYXBcbiAgICBpZiAoanNvbk9ialtwYXJhbVNldHMudW53cmFwXSkge1xuICAgICAgcmVzID0ganNvbk9ialtwYXJhbVNldHMudW53cmFwXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXJhbXMgKHBhcmFtU2V0cywganNvbk9iaiwgcHJvdG9jb2wpIHtcbiAgbGV0IHJlcXVpcmVkUGFyYW1zID0gW107XG4gIGxldCBvcHRpb25hbFBhcmFtcyA9IFtdO1xuICBsZXQgcmVjZWl2ZWRQYXJhbXMgPSBfLmtleXMoanNvbk9iaik7XG5cbiAgaWYgKHBhcmFtU2V0cykge1xuICAgIGlmIChwYXJhbVNldHMucmVxdWlyZWQpIHtcbiAgICAgIC8vIHdlIG1pZ2h0IGhhdmUgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyxcbiAgICAgIC8vIG9yIGFuIGFycmF5IG9mIGFycmF5cyBvZiBwYXJhbWV0ZXJzLCBzbyBzdGFuZGFyZGl6ZVxuICAgICAgaWYgKCFfLmlzQXJyYXkoXy5maXJzdChwYXJhbVNldHMucmVxdWlyZWQpKSkge1xuICAgICAgICByZXF1aXJlZFBhcmFtcyA9IFtwYXJhbVNldHMucmVxdWlyZWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBwYXJhbVNldHMucmVxdWlyZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGp1c3QgYW4gYXJyYXlcbiAgICBpZiAocGFyYW1TZXRzLm9wdGlvbmFsKSB7XG4gICAgICBvcHRpb25hbFBhcmFtcyA9IHBhcmFtU2V0cy5vcHRpb25hbDtcbiAgICB9XG5cbiAgICAvLyBJZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCBhcyB0aGUgJ3ZhbGlkYXRlJyBrZXksIGl0IHdpbGwgaGVyZSBiZSBjYWxsZWQgd2l0aFxuICAgIC8vIGpzb25PYmogYXMgdGhlIHBhcmFtLiBJZiBpdCByZXR1cm5zIHNvbWV0aGluZyBmYWxzeSwgdmVyaWZpY2F0aW9uIHdpbGwgYmVcbiAgICAvLyBjb25zaWRlcmVkIHRvIGhhdmUgcGFzc2VkLiBJZiBpdCByZXR1cm5zIHNvbWV0aGluZyBlbHNlLCB0aGF0IHdpbGwgYmUgdGhlXG4gICAgLy8gYXJndW1lbnQgdG8gYW4gZXJyb3Igd2hpY2ggaXMgdGhyb3duIHRvIHRoZSB1c2VyXG4gICAgaWYgKHBhcmFtU2V0cy52YWxpZGF0ZSkge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBwYXJhbVNldHMudmFsaWRhdGUoanNvbk9iaiwgcHJvdG9jb2wpO1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IobWVzc2FnZSwganNvbk9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgd2UgaGF2ZSBubyByZXF1aXJlZCBwYXJhbWV0ZXJzLCBhbGwgaXMgd2VsbFxuICBpZiAocmVxdWlyZWRQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc29tZSBjbGllbnRzIHBhc3MgaW4gdGhlIHNlc3Npb24gaWQgaW4gdGhlIHBhcmFtc1xuICBpZiAob3B0aW9uYWxQYXJhbXMuaW5kZXhPZignc2Vzc2lvbklkJykgPT09IC0xKSB7XG4gICAgb3B0aW9uYWxQYXJhbXMucHVzaCgnc2Vzc2lvbklkJyk7XG4gIH1cblxuICAvLyBzb21lIGNsaWVudHMgcGFzcyBpbiBhbiBlbGVtZW50IGlkIGluIHRoZSBwYXJhbXNcbiAgaWYgKG9wdGlvbmFsUGFyYW1zLmluZGV4T2YoJ2lkJykgPT09IC0xKSB7XG4gICAgb3B0aW9uYWxQYXJhbXMucHVzaCgnaWQnKTtcbiAgfVxuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgYW5kIGNoZWNrIGFnYWluc3Qgb3VyIGFyZ3VtZW50c1xuICBmb3IgKGxldCBwYXJhbXMgb2YgcmVxdWlyZWRQYXJhbXMpIHtcbiAgICBpZiAoXy5kaWZmZXJlbmNlKHJlY2VpdmVkUGFyYW1zLCBwYXJhbXMsIG9wdGlvbmFsUGFyYW1zKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgXy5kaWZmZXJlbmNlKHBhcmFtcywgcmVjZWl2ZWRQYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gd2UgaGF2ZSBhIHNldCBvZiBwYXJhbWV0ZXJzIHRoYXQgaXMgY29ycmVjdFxuICAgICAgLy8gc28gc2hvcnQtY2lyY3VpdFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcihwYXJhbVNldHMsIHJlY2VpdmVkUGFyYW1zKTtcbn1cblxuLypcbiAqIFRoaXMgbWV0aG9kIHRha2VzIDMgcGllY2VzIG9mIGRhdGE6IHJlcXVlc3QgcGFyYW1ldGVycyAoJ3JlcXVlc3RQYXJhbXMnKSxcbiAqIGEgcmVxdWVzdCBKU09OIGJvZHkgKCdqc29uT2JqJyksIGFuZCAncGF5bG9hZFBhcmFtcycsIHdoaWNoIGlzIHRoZSBzZWN0aW9uXG4gKiBmcm9tIHRoZSByb3V0ZSBkZWZpbml0aW9uIGZvciBhIHBhcnRpY3VsYXIgZW5kcG9pbnQgd2hpY2ggaGFzIGluc3RydWN0aW9uc1xuICogb24gaGFuZGxpbmcgcGFyYW1ldGVycy4gVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBhcmd1bWVudHMgd2hpY2ggd2lsbFxuICogYmUgYXBwbGllZCB0byBhIGNvbW1hbmQuXG4gKi9cbmZ1bmN0aW9uIG1ha2VBcmdzIChyZXF1ZXN0UGFyYW1zLCBqc29uT2JqLCBwYXlsb2FkUGFyYW1zLCBwcm90b2NvbCkge1xuICAvLyBXZSB3YW50IHRvIHBhc3MgdGhlIFwidXJsXCIgcGFyYW1ldGVycyB0byB0aGUgY29tbWFuZHMgaW4gcmV2ZXJzZSBvcmRlclxuICAvLyBzaW5jZSB0aGUgY29tbWFuZCB3aWxsIHNvbWV0aW1lcyB3YW50IHRvIGlnbm9yZSwgc2F5LCB0aGUgc2Vzc2lvbklkLlxuICAvLyBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHB1dHRpbmcgc2Vzc2lvbklkIGxhc3QsIHdoaWNoIG1lYW5zIGluIEpTIHdlIGNhblxuICAvLyBvbWl0IGl0IGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpZiB3ZSdyZSBub3QgZ29pbmcgdG8gdXNlIGl0LlxuICBsZXQgdXJsUGFyYW1zID0gXy5rZXlzKHJlcXVlc3RQYXJhbXMpLnJldmVyc2UoKTtcblxuICAvLyBJbiB0aGUgc2ltcGxlIGNhc2UsIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBhIGJhc2ljIGFycmF5IGluXG4gIC8vIHBheWxvYWRQYXJhbXMucmVxdWlyZWQsIHNvIHN0YXJ0IHRoZXJlLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlXG4gIC8vIG11bHRpcGxlIG9wdGlvbmFsIHNldHMgb2YgcmVxdWlyZWQgcGFyYW1zLCB0aG91Z2gsIHNvIGhhbmRsZSB0aGF0IGNhc2VcbiAgLy8gdG9vLlxuICBsZXQgcmVxdWlyZWRQYXJhbXMgPSBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkO1xuICBpZiAoXy5pc0FycmF5KF8uZmlyc3QocGF5bG9hZFBhcmFtcy5yZXF1aXJlZCkpKSB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG9wdGlvbmFsIHNldHMgb2YgcmVxdWlyZWQgcGFyYW1zLCB0aGVuIHdlIHdpbGwgaGF2ZSBhblxuICAgIC8vIGFycmF5IG9mIGFycmF5cyBpbiBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkLCBzbyBsb29wIHRocm91Z2ggZWFjaCBzZXQgYW5kXG4gICAgLy8gcGljayB0aGUgb25lIHRoYXQgbWF0Y2hlcyB3aGljaCBKU09OIHBhcmFtcyB3ZXJlIGFjdHVhbGx5IHNlbnQuIFdlJ3ZlXG4gICAgLy8gYWxyZWFkeSBiZWVuIHRocm91Z2ggdmFsaWRhdGlvbiBzbyB3ZSdyZSBndWFyYW50ZWVkIHRvIGZpbmQgYSBtYXRjaC5cbiAgICBsZXQga2V5cyA9IF8ua2V5cyhqc29uT2JqKTtcbiAgICBmb3IgKGxldCBwYXJhbXMgb2YgcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCkge1xuICAgICAgaWYgKF8ud2l0aG91dChwYXJhbXMsIC4uLmtleXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXF1aXJlZFBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm93IHdlIGNvbnN0cnVjdCBvdXIgbGlzdCBvZiBhcmd1bWVudHMgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbW1hbmRcbiAgbGV0IGFyZ3M7XG4gIGlmIChfLmlzRnVuY3Rpb24ocGF5bG9hZFBhcmFtcy5tYWtlQXJncykpIHtcbiAgICAvLyBJbiB0aGUgcm91dGUgc3BlYywgYSBwYXJ0aWN1bGFyIHJvdXRlIG1pZ2h0IGRlZmluZSBhICdtYWtlQXJncycgZnVuY3Rpb25cbiAgICAvLyBpZiBpdCB3YW50cyBmdWxsIGNvbnRyb2wgb3ZlciBob3cgdG8gdHVybiBKU09OIHBhcmFtZXRlcnMgaW50byBjb21tYW5kXG4gICAgLy8gYXJndW1lbnRzLiBTbyB3ZSBwYXNzIGl0IHRoZSBKU09OIHBhcmFtZXRlcnMgYW5kIGl0IHJldHVybnMgYW4gYXJyYXlcbiAgICAvLyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGhhbmRsaW5nIGNvbW1hbmQuIEZvciBleGFtcGxlIGlmIGl0IHJldHVybnNcbiAgICAvLyBbMSwgMiwgM10sIHdlIHdpbGwgY2FsbCBgY29tbWFuZCgxLCAyLCAzLCAuLi4pYCAodXJsIHBhcmFtcyBhcmUgc2VwYXJhdGVcbiAgICAvLyBmcm9tIEpTT04gcGFyYW1zIGFuZCBnZXQgY29uY2F0ZW5hdGVkIGJlbG93KS5cbiAgICBhcmdzID0gcGF5bG9hZFBhcmFtcy5tYWtlQXJncyhqc29uT2JqLCBwcm90b2NvbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlLCBjb2xsZWN0IGFsbCB0aGUgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIHBhcmFtcyBhbmQgZmxhdHRlbiB0aGVtXG4gICAgLy8gaW50byBhbiBhcmd1bWVudCBhcnJheVxuICAgIGFyZ3MgPSBfLmZsYXR0ZW4ocmVxdWlyZWRQYXJhbXMpLm1hcCgocCkgPT4ganNvbk9ialtwXSk7XG4gICAgaWYgKHBheWxvYWRQYXJhbXMub3B0aW9uYWwpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChfLmZsYXR0ZW4ocGF5bG9hZFBhcmFtcy5vcHRpb25hbCkubWFwKChwKSA9PiBqc29uT2JqW3BdKSk7XG4gICAgfVxuICB9XG4gIC8vIEZpbmFsbHksIGdldCBvdXIgdXJsIHBhcmFtcyAoc2Vzc2lvbiBpZCwgZWxlbWVudCBpZCwgZXRjLi4uKSBvbiB0aGUgZW5kIG9mXG4gIC8vIHRoZSBsaXN0XG4gIGFyZ3MgPSBhcmdzLmNvbmNhdCh1cmxQYXJhbXMubWFwKCh1KSA9PiByZXF1ZXN0UGFyYW1zW3VdKSk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5mdW5jdGlvbiByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gKGRyaXZlcikge1xuICBpZiAoIWRyaXZlci5zZXNzaW9uRXhpc3RzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEcml2ZXJzIG11c3QgaW1wbGVtZW50IGBzZXNzaW9uRXhpc3RzYCBwcm9wZXJ0eScpO1xuICB9XG5cbiAgaWYgKCEoZHJpdmVyLmV4ZWN1dGVDb21tYW5kIHx8IGRyaXZlci5leGVjdXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRHJpdmVycyBtdXN0IGltcGxlbWVudCBgZXhlY3V0ZUNvbW1hbmRgIG9yIGBleGVjdXRlYCBtZXRob2QnKTtcbiAgfVxuXG4gIC8vIHJldHVybiBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYWRkIGFsbCB0aGUgcm91dGVzIHRvIHRoZSBkcml2ZXIuIEhlcmUgZXh0cmFNZXRob2RzIG1pZ2h0IGJlXG4gIC8vIHBhc3NlZCBpbiBhcyBkZWZpbmVkIGJ5IEFwcGl1bSBwbHVnaW5zLCBzbyB3ZSBuZWVkIHRvIGFkZCB0aG9zZSB0byB0aGUgZGVmYXVsdCBsaXN0XG4gIHJldHVybiBmdW5jdGlvbiBhZGRSb3V0ZXMgKGFwcCwge2Jhc2VQYXRoID0gREVGQVVMVF9CQVNFX1BBVEgsIGV4dHJhTWV0aG9kTWFwID0ge319KSB7XG4gICAgLy8gc3RvcmUgYmFzZVBhdGggb24gdGhlIGRyaXZlciBpbnN0YW5jZSBzbyBpdCBjYW4gdXNlIGl0IGlmIG5lY2Vzc2FyeVxuICAgIC8vIGZvciBleGFtcGxlIGluIGRldGVybWluaW5nIHByb3h5IGF2b2lkYW5jZVxuICAgIGRyaXZlci5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuXG4gICAgY29uc3QgYWxsTWV0aG9kcyA9IHsuLi5NRVRIT0RfTUFQLCAuLi5leHRyYU1ldGhvZE1hcH07XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBtZXRob2RzXSBvZiBfLnRvUGFpcnMoYWxsTWV0aG9kcykpIHtcbiAgICAgIGZvciAoY29uc3QgW21ldGhvZCwgc3BlY10gb2YgXy50b1BhaXJzKG1ldGhvZHMpKSB7XG4gICAgICAgIC8vIHNldCB1cCB0aGUgZXhwcmVzcyByb3V0ZSBoYW5kbGVyXG4gICAgICAgIGJ1aWxkSGFuZGxlcihhcHAsIG1ldGhvZCwgYCR7YmFzZVBhdGh9JHtwYXRofWAsIHNwZWMsIGRyaXZlciwgaXNTZXNzaW9uQ29tbWFuZChzcGVjLmNvbW1hbmQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSGFuZGxlciAoYXBwLCBtZXRob2QsIHBhdGgsIHNwZWMsIGRyaXZlciwgaXNTZXNzQ21kKSB7XG4gIGxldCBhc3luY0hhbmRsZXIgPSBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBsZXQganNvbk9iaiA9IHJlcS5ib2R5O1xuICAgIGxldCBodHRwUmVzQm9keSA9IHt9O1xuICAgIGxldCBodHRwU3RhdHVzID0gMjAwO1xuICAgIGxldCBuZXdTZXNzaW9uSWQ7XG4gICAgbGV0IGN1cnJlbnRQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBpZiB0aGlzIGlzIGEgc2Vzc2lvbiBjb21tYW5kIGJ1dCB3ZSBkb24ndCBoYXZlIGEgc2Vzc2lvbixcbiAgICAgIC8vIGVycm9yIG91dCBlYXJseSAoZXNwZWNpYWxseSBiZWZvcmUgcHJveHlpbmcpXG4gICAgICBpZiAoaXNTZXNzQ21kICYmICFkcml2ZXIuc2Vzc2lvbkV4aXN0cyhyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgZHJpdmVyIGlzIGN1cnJlbnRseSBwcm94eWluZyBjb21tYW5kcyB0byBhbm90aGVyIEpTT05XUCBzZXJ2ZXIsIGJ5cGFzcyBhbGwgb3VyXG4gICAgICAvLyBjaGVja3MgYW5kIGFzc3VtZSB0aGUgdXBzdHJlYW0gc2VydmVyIGtub3dzIHdoYXQgaXQncyBkb2luZy4gQnV0IGtlZXAgdGhpcyBpbiB0aGVcbiAgICAgIC8vIHRyeS9jYXRjaCBibG9jayBzbyBpZiBwcm94eWluZyBpdHNlbGYgZmFpbHMsIHdlIGdpdmUgYSBtZXNzYWdlIHRvIHRoZSBjbGllbnQuIE9mIGNvdXJzZSB3ZVxuICAgICAgLy8gb25seSB3YW50IHRvIGRvIHRoZXNlIHdoZW4gd2UgaGF2ZSBhIHNlc3Npb24gY29tbWFuZDsgdGhlIEFwcGl1bSBkcml2ZXIgbXVzdCBiZVxuICAgICAgLy8gcmVzcG9uc2libGUgZm9yIHN0YXJ0L3N0b3Agc2Vzc2lvbiwgZXRjLi4uIFdlIGFsc28gYWxsb3cgdGhlIGNvbW1hbmQgc3BlYyB0byBkZWNsYXJlIHRoYXRcbiAgICAgIC8vIHRoaXMgY29tbWFuZCBzaG91bGQgbmV2ZXIgYmUgcHJveGllZCAod2hpY2ggaXMgdXNlZnVsIGZvciBwbHVnaW4gZGV2ZWxvcGVycyB3aG8gYWRkXG4gICAgICAvLyBjb21tYW5kcyBhbmQgZ2VuZXJhbGx5IHdvdWxkIG5vdCB3YW50IHRoYXQgY29tbWFuZCB0byBiZSBwcm94aWVkIGluc3RlYWQgb2YgaGFuZGxlZCBieSB0aGVcbiAgICAgIC8vIHBsdWdpbilcbiAgICAgIGxldCBkaWRQbHVnaW5PdmVycmlkZVByb3h5ID0gZmFsc2U7XG4gICAgICBpZiAoaXNTZXNzQ21kICYmICFzcGVjLm5ldmVyUHJveHkgJiYgZHJpdmVyU2hvdWxkRG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgc3BlYy5jb21tYW5kKSkge1xuICAgICAgICBpZiAoIWRyaXZlci5wbHVnaW5zVG9IYW5kbGVDbWQgfHxcbiAgICAgICAgICAgIGRyaXZlci5wbHVnaW5zVG9IYW5kbGVDbWQoc3BlYy5jb21tYW5kLCByZXEucGFyYW1zLnNlc3Npb25JZCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYXdhaXQgZG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgcmVzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmRlYnVnKGBXb3VsZCBoYXZlIHByb3hpZWQgYCArXG4gICAgICAgICAgYGNvbW1hbmQgZGlyZWN0bHksIGJ1dCBhIHBsdWdpbiBleGlzdHMgd2hpY2ggbWlnaHQgcmVxdWlyZSBpdHMgdmFsdWUsIHNvIHdpbGwgbGV0IGAgK1xuICAgICAgICAgIGBpdHMgdmFsdWUgYmUgY29sbGVjdGVkIGludGVybmFsbHkgYW5kIG1hZGUgcGFydCBvZiBwbHVnaW4gY2hhaW5gKTtcbiAgICAgICAgZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGEgY29tbWFuZCBpcyBub3QgaW4gb3VyIG1ldGhvZCBtYXAsIGl0J3MgYmVjYXVzZSB3ZVxuICAgICAgLy8gaGF2ZSBubyBwbGFucyB0byBldmVyIGltcGxlbWVudCBpdFxuICAgICAgaWYgKCFzcGVjLmNvbW1hbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdyYXAgcGFyYW1zIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHNwZWMucGF5bG9hZFBhcmFtcyAmJiBzcGVjLnBheWxvYWRQYXJhbXMud3JhcCkge1xuICAgICAgICBqc29uT2JqID0gd3JhcFBhcmFtcyhzcGVjLnBheWxvYWRQYXJhbXMsIGpzb25PYmopO1xuICAgICAgfVxuXG4gICAgICAvLyB1bndyYXAgcGFyYW1zIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHNwZWMucGF5bG9hZFBhcmFtcyAmJiBzcGVjLnBheWxvYWRQYXJhbXMudW53cmFwKSB7XG4gICAgICAgIGpzb25PYmogPSB1bndyYXBQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICAvLyB0cnkgdG8gZGV0ZXJtaW5lIHByb3RvY29sIGJ5IHNlc3Npb24gY3JlYXRpb24gYXJncywgc28gd2UgY2FuIHRocm93IGFcbiAgICAgICAgLy8gcHJvcGVybHkgZm9ybWF0dGVkIGVycm9yIGlmIGFyZ3VtZW50cyB2YWxpZGF0aW9uIGZhaWxzXG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGRldGVybWluZVByb3RvY29sKG1ha2VBcmdzKHJlcS5wYXJhbXMsIGpzb25PYmosIHNwZWMucGF5bG9hZFBhcmFtcyB8fCB7fSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUganNvbiBwYXlsb2FkIGNvbmZvcm1zIHRvIHRoZSBzcGVjXG4gICAgICBjaGVja1BhcmFtcyhzcGVjLnBheWxvYWRQYXJhbXMsIGpzb25PYmosIGN1cnJlbnRQcm90b2NvbCk7XG5cbiAgICAgIC8vIHR1cm4gdGhlIGNvbW1hbmQgYW5kIGpzb24gcGF5bG9hZCBpbnRvIGFuIGFyZ3VtZW50IGxpc3QgZm9yXG4gICAgICAvLyB0aGUgZHJpdmVyIG1ldGhvZHNcbiAgICAgIGxldCBhcmdzID0gbWFrZUFyZ3MocmVxLnBhcmFtcywganNvbk9iaiwgc3BlYy5wYXlsb2FkUGFyYW1zIHx8IHt9LCBjdXJyZW50UHJvdG9jb2wpO1xuICAgICAgbGV0IGRyaXZlclJlcztcbiAgICAgIC8vIHZhbGlkYXRlIGNvbW1hbmQgYXJncyBhY2NvcmRpbmcgdG8gTUpTT05XUFxuICAgICAgaWYgKHZhbGlkYXRvcnNbc3BlYy5jb21tYW5kXSkge1xuICAgICAgICB2YWxpZGF0b3JzW3NwZWMuY29tbWFuZF0oLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJ1biB0aGUgZHJpdmVyIGNvbW1hbmQgd3JhcHBlZCBpbnNpZGUgdGhlIGFyZ3VtZW50IHZhbGlkYXRvcnNcbiAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5kZWJ1ZyhgQ2FsbGluZyBgICtcbiAgICAgICAgYCR7ZHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9LiR7c3BlYy5jb21tYW5kfSgpIHdpdGggYXJnczogYCArXG4gICAgICAgIF8udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIHtsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEh9KSk7XG5cbiAgICAgIGlmIChkaWRQbHVnaW5PdmVycmlkZVByb3h5KSB7XG4gICAgICAgIC8vIFRPRE8gZm9yIG5vdyB3ZSBhZGQgdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgYXJncyBsaXN0LCBidXQgdGhhdCdzIG1peGluZyBwdXJwb3NlcyBoZXJlLlxuICAgICAgICAvLyBXZSByZWFsbHkgc2hvdWxkIGFkZCBhbm90aGVyICdvcHRpb25zJyBwYXJhbWV0ZXIgdG8gJ2V4ZWN1dGVDb21tYW5kJywgYnV0IHRoaXMgd291bGQgYmVcbiAgICAgICAgLy8gYSBicmVha2luZyBjaGFuZ2UgZm9yIGFsbCBkcml2ZXJzIHNvIHdvdWxkIG5lZWQgdG8gYmUgaGFuZGxlZCBjYXJlZnVsbHkuXG4gICAgICAgIGFyZ3MucHVzaCh7cmVxRm9yUHJveHk6IHJlcX0pO1xuICAgICAgfVxuXG4gICAgICBkcml2ZXJSZXMgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUNvbW1hbmQoc3BlYy5jb21tYW5kLCAuLi5hcmdzKTtcblxuICAgICAgLy8gR2V0IHRoZSBwcm90b2NvbCBhZnRlciBleGVjdXRlQ29tbWFuZFxuICAgICAgY3VycmVudFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpIHx8IGN1cnJlbnRQcm90b2NvbDtcblxuICAgICAgLy8gSWYgYGV4ZWN1dGVDb21tYW5kYCB3YXMgb3ZlcnJpZGRlbiBhbmQgdGhlIG1ldGhvZCByZXR1cm5zIGFuIG9iamVjdFxuICAgICAgLy8gd2l0aCBhIHByb3RvY29sIGFuZCB2YWx1ZS9lcnJvciBwcm9wZXJ0eSwgcmUtYXNzaWduIHRoZSBwcm90b2NvbFxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChkcml2ZXJSZXMpICYmIF8uaGFzKGRyaXZlclJlcywgJ3Byb3RvY29sJykpIHtcbiAgICAgICAgY3VycmVudFByb3RvY29sID0gZHJpdmVyUmVzLnByb3RvY29sIHx8IGN1cnJlbnRQcm90b2NvbDtcbiAgICAgICAgaWYgKGRyaXZlclJlcy5lcnJvcikge1xuICAgICAgICAgIHRocm93IGRyaXZlclJlcy5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBkcml2ZXJSZXMgPSBkcml2ZXJSZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHVucGFjayBjcmVhdGVTZXNzaW9uIHJlc3BvbnNlXG4gICAgICBpZiAoc3BlYy5jb21tYW5kID09PSBDUkVBVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAgIG5ld1Nlc3Npb25JZCA9IGRyaXZlclJlc1swXTtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgbmV3U2Vzc2lvbklkKVxuICAgICAgICAgIC5kZWJ1ZyhgQ2FjaGVkIHRoZSBwcm90b2NvbCB2YWx1ZSAnJHtjdXJyZW50UHJvdG9jb2x9JyBmb3IgdGhlIG5ldyBzZXNzaW9uICR7bmV3U2Vzc2lvbklkfWApO1xuICAgICAgICBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUCkge1xuICAgICAgICAgIGRyaXZlclJlcyA9IGRyaXZlclJlc1sxXTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgICBkcml2ZXJSZXMgPSB7XG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IGRyaXZlclJlc1sxXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRyaXZlclJlcyA9IGZvcm1hdFJlc3BvbnNlVmFsdWUoZHJpdmVyUmVzKTtcblxuICAgICAgLy8gZGVsZXRlIHNob3VsZCBub3QgcmV0dXJuIGFueXRoaW5nIGV2ZW4gaWYgc3VjY2Vzc2Z1bFxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZClcbiAgICAgICAgICAuZGVidWcoYFJlY2VpdmVkIHJlc3BvbnNlOiAke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoZHJpdmVyUmVzKSwge2xlbmd0aDogTUFYX0xPR19CT0RZX0xFTkdUSH0pfWApO1xuICAgICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuZGVidWcoJ0J1dCBkZWxldGluZyBzZXNzaW9uLCBzbyBub3QgcmV0dXJuaW5nJyk7XG4gICAgICAgIGRyaXZlclJlcyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBzdGF0dXMgaXMgbm90IDAsICB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgZm9yIHN0YXR1cyBjb2RlLlxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUoZHJpdmVyUmVzKSkge1xuICAgICAgICBpZiAodXRpbC5oYXNWYWx1ZShkcml2ZXJSZXMuc3RhdHVzKSAmJiAhaXNOYU4oZHJpdmVyUmVzLnN0YXR1cykgJiYgcGFyc2VJbnQoZHJpdmVyUmVzLnN0YXR1cywgMTApICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUoZHJpdmVyUmVzLnN0YXR1cywgZHJpdmVyUmVzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoZHJpdmVyUmVzLnZhbHVlKSAmJiBkcml2ZXJSZXMudmFsdWUuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvckZyb21XM0NKc29uQ29kZShkcml2ZXJSZXMudmFsdWUuZXJyb3IsIGRyaXZlclJlcy52YWx1ZS5tZXNzYWdlLCBkcml2ZXJSZXMudmFsdWUuc3RhY2t0cmFjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaHR0cFJlc0JvZHkudmFsdWUgPSBkcml2ZXJSZXM7XG4gICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBuZXdTZXNzaW9uSWQpLmRlYnVnKGBSZXNwb25kaW5nIGAgK1xuICAgICAgICBgdG8gY2xpZW50IHdpdGggZHJpdmVyLiR7c3BlYy5jb21tYW5kfSgpIHJlc3VsdDogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGRyaXZlclJlcyksIHtsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEh9KX1gKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIGFueXRoaW5nIGdvZXMgd3JvbmcsIGZpZ3VyZSBvdXQgd2hhdCBvdXIgcmVzcG9uc2Ugc2hvdWxkIGJlXG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IHdlIGVuY291bnRlcmVkXG4gICAgICBsZXQgYWN0dWFsRXJyID0gZXJyO1xuXG4gICAgICBjdXJyZW50UHJvdG9jb2wgPSBjdXJyZW50UHJvdG9jb2wgfHwgZXh0cmFjdFByb3RvY29sKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkKTtcblxuICAgICAgbGV0IGVyck1zZyA9IGVyci5zdGFja3RyYWNlIHx8IGVyci5zdGFjaztcbiAgICAgIGlmICghXy5pbmNsdWRlcyhlcnJNc2csIGVyci5tZXNzYWdlKSkge1xuICAgICAgICAvLyBpZiB0aGUgbWVzc2FnZSBoYXMgbW9yZSBpbmZvcm1hdGlvbiwgYWRkIGl0LiBidXQgb2Z0ZW4gdGhlIG1lc3NhZ2VcbiAgICAgICAgLy8gaXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0YWNrIHRyYWNlXG4gICAgICAgIGVyck1zZyA9IGAke2Vyci5tZXNzYWdlfSR7ZXJyTXNnID8gKCdcXG4nICsgZXJyTXNnKSA6ICcnfWA7XG4gICAgICB9XG4gICAgICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuUHJveHlSZXF1ZXN0RXJyb3IpKSB7XG4gICAgICAgIGFjdHVhbEVyciA9IGVyci5nZXRBY3R1YWxFcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkKVxuICAgICAgICAgIC5kZWJ1ZyhgRW5jb3VudGVyZWQgaW50ZXJuYWwgZXJyb3IgcnVubmluZyBjb21tYW5kOiAke2Vyck1zZ31gKTtcbiAgICAgIH1cblxuICAgICAgW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XSA9IGdldFJlc3BvbnNlRm9yVzNDRXJyb3IoYWN0dWFsRXJyKTtcbiAgICB9XG5cbiAgICAvLyBkZWNvZGUgdGhlIHJlc3BvbnNlLCB3aGljaCBpcyBlaXRoZXIgYSBzdHJpbmcgb3IganNvblxuICAgIGlmIChfLmlzU3RyaW5nKGh0dHBSZXNCb2R5KSkge1xuICAgICAgcmVzLnN0YXR1cyhodHRwU3RhdHVzKS5zZW5kKGh0dHBSZXNCb2R5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5ld1Nlc3Npb25JZCkge1xuICAgICAgICBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgICAgaHR0cFJlc0JvZHkudmFsdWUuc2Vzc2lvbklkID0gbmV3U2Vzc2lvbklkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGh0dHBSZXNCb2R5LnNlc3Npb25JZCA9IG5ld1Nlc3Npb25JZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHR0cFJlc0JvZHkuc2Vzc2lvbklkID0gcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIERvbid0IGluY2x1ZGUgc2Vzc2lvbklkIGluIFczQyByZXNwb25zZXNcbiAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgZGVsZXRlIGh0dHBSZXNCb2R5LnNlc3Npb25JZDtcbiAgICAgIH1cblxuICAgICAgaHR0cFJlc0JvZHkgPSBmb3JtYXRTdGF0dXMoaHR0cFJlc0JvZHkpO1xuICAgICAgcmVzLnN0YXR1cyhodHRwU3RhdHVzKS5qc29uKGh0dHBSZXNCb2R5KTtcbiAgICB9XG4gIH07XG4gIC8vIGFkZCB0aGUgbWV0aG9kIHRvIHRoZSBhcHBcbiAgYXBwW21ldGhvZC50b0xvd2VyQ2FzZSgpXShwYXRoLCAocmVxLCByZXMpID0+IHtcbiAgICBCLnJlc29sdmUoYXN5bmNIYW5kbGVyKHJlcSwgcmVzKSkuZG9uZSgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSAoZHJpdmVyLCByZXEsIGNvbW1hbmQpIHtcbiAgLy8gZHJpdmVycyBuZWVkIHRvIGV4cGxpY2l0bHkgc2F5IHdoZW4gdGhlIHByb3h5IGlzIGFjdGl2ZVxuICBpZiAoIWRyaXZlci5wcm94eUFjdGl2ZShyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyB3ZSBzaG91bGQgbmV2ZXIgcHJveHkgZGVsZXRlU2Vzc2lvbiBiZWNhdXNlIHdlIG5lZWQgdG8gZ2l2ZSB0aGUgY29udGFpbmluZ1xuICAvLyBkcml2ZXIgYW4gb3Bwb3J0dW5pdHkgdG8gY2xlYW4gaXRzZWxmIHVwXG4gIGlmIChjb21tYW5kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gdmFsaWRhdGUgYXZvaWRhbmNlIHNjaGVtYSwgYW5kIHNheSB3ZSBzaG91bGRuJ3QgcHJveHkgaWYgYW55dGhpbmcgaW4gdGhlXG4gIC8vIGF2b2lkIGxpc3QgbWF0Y2hlcyBvdXIgcmVxXG4gIGlmIChkcml2ZXIucHJveHlSb3V0ZUlzQXZvaWRlZChyZXEucGFyYW1zLnNlc3Npb25JZCwgcmVxLm1ldGhvZCwgcmVxLm9yaWdpbmFsVXJsLCByZXEuYm9keSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG9Kd3BQcm94eSAoZHJpdmVyLCByZXEsIHJlcykge1xuICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZClcbiAgICAuaW5mbygnRHJpdmVyIHByb3h5IGFjdGl2ZSwgcGFzc2luZyByZXF1ZXN0IG9uIHZpYSBIVFRQIHByb3h5Jyk7XG5cbiAgLy8gY2hlY2sgdGhhdCB0aGUgaW5uZXIgZHJpdmVyIGhhcyBhIHByb3h5IGZ1bmN0aW9uXG4gIGlmICghZHJpdmVyLmNhblByb3h5KHJlcS5wYXJhbXMuc2Vzc2lvbklkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHByb3h5IHRvIGEgc2VydmVyIGJ1dCB0aGUgZHJpdmVyIGlzIHVuYWJsZSB0byBwcm94eScpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZHJpdmVyLmV4ZWN1dGVDb21tYW5kKCdwcm94eVJlcVJlcycsIHJlcSwgcmVzLCByZXEucGFyYW1zLnNlc3Npb25JZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcHJveHkuIFByb3h5IGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5cbmV4cG9ydCB7XG4gIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgaXNTZXNzaW9uQ29tbWFuZCxcbiAgZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSwgZGV0ZXJtaW5lUHJvdG9jb2wsIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsXG4gIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsIEdFVF9TVEFUVVNfQ09NTUFORCxcbn07XG4iXX0=
|
|
394
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIkdFVF9TVEFUVVNfQ09NTUFORCIsImRldGVybWluZVByb3RvY29sIiwiY3JlYXRlU2Vzc2lvbkFyZ3MiLCJfIiwic29tZSIsImlzVzNjQ2FwcyIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiaXNTZXNzaW9uQ29tbWFuZCIsImNvbW1hbmQiLCJpbmNsdWRlcyIsIk5PX1NFU1NJT05fSURfQ09NTUFORFMiLCJnZXRMb2dnZXIiLCJsb2ciLCJpbmZvIiwibG9nUHJlZml4IiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIiwic3Vic3RyaW5nIiwibG9nZ2VyIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImVycm9yIiwidmFsdWUiLCJjYXBhYmlsaXRpZXMiLCJ1dGlsIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJpc05hTiIsInBhcnNlSW50Iiwic3RhY2t0cmFjZSIsImVyciIsImFjdHVhbEVyciIsImVyck1zZyIsInN0YWNrIiwiUHJveHlSZXF1ZXN0RXJyb3IiLCJnZXRBY3R1YWxFcnJvciIsImlzU3RyaW5nIiwic2VuZCIsImpzb24iLCJ0b0xvd2VyQ2FzZSIsIkIiLCJyZXNvbHZlIiwiZG9uZSIsInByb3h5QWN0aXZlIiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsIm9yaWdpbmFsVXJsIiwiY2FuUHJveHkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvcHJvdG9jb2wuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIGxvZ2dlciwgbm9kZSB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB2YWxpZGF0b3JzIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7XG4gIGVycm9ycywgaXNFcnJvclR5cGUsIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZSxcbn0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgTUVUSE9EX01BUCwgTk9fU0VTU0lPTl9JRF9DT01NQU5EUyB9IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGZvcm1hdFJlc3BvbnNlVmFsdWUsIGZvcm1hdFN0YXR1cyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBNQVhfTE9HX0JPRFlfTEVOR1RILCBQUk9UT0NPTFMsIERFRkFVTFRfQkFTRV9QQVRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzVzNjQ2FwcyB9IGZyb20gJy4uL2hlbHBlcnMvY2FwYWJpbGl0aWVzJztcblxuXG5jb25zdCBDUkVBVEVfU0VTU0lPTl9DT01NQU5EID0gJ2NyZWF0ZVNlc3Npb24nO1xuY29uc3QgREVMRVRFX1NFU1NJT05fQ09NTUFORCA9ICdkZWxldGVTZXNzaW9uJztcbmNvbnN0IEdFVF9TVEFUVVNfQ09NTUFORCA9ICdnZXRTdGF0dXMnO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVQcm90b2NvbCAoY3JlYXRlU2Vzc2lvbkFyZ3MpIHtcbiAgcmV0dXJuIF8uc29tZShjcmVhdGVTZXNzaW9uQXJncywgaXNXM2NDYXBzKSA/IFBST1RPQ09MUy5XM0MgOiBQUk9UT0NPTFMuTUpTT05XUDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3RvY29sIChkcml2ZXIsIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgY29uc3QgZHN0RHJpdmVyID0gXy5pc0Z1bmN0aW9uKGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKVxuICAgID8gZHJpdmVyLmRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKVxuICAgIDogZHJpdmVyO1xuICBpZiAoZHN0RHJpdmVyID09PSBkcml2ZXIpIHtcbiAgICAvLyBTaG9ydGNpcmN1aXQgaWYgdGhlIGRyaXZlciBpbnN0YW5jZSBpcyBub3QgYW4gdW1icmVsbGEgZHJpdmVyXG4gICAgLy8gb3IgaXQgaXMgRmFrZSBkcml2ZXIgaW5zdGFuY2UsIHdoZXJlIGBkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbmBcbiAgICAvLyBhbHdheXMgcmV0dXJucyBzZWxmIGluc3RhbmNlXG4gICAgcmV0dXJuIGRyaXZlci5wcm90b2NvbDtcbiAgfVxuXG4gIC8vIEV4dHJhY3QgdGhlIHByb3RvY29sIGZvciB0aGUgY3VycmVudCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBkcml2ZXIgaXMgdGhlIHVtYnJlbGxhIG9uZVxuICByZXR1cm4gZHN0RHJpdmVyPy5wcm90b2NvbCA/PyBQUk9UT0NPTFMuVzNDO1xufVxuXG5mdW5jdGlvbiBpc1Nlc3Npb25Db21tYW5kIChjb21tYW5kKSB7XG4gIHJldHVybiAhXy5pbmNsdWRlcyhOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBjb21tYW5kKTtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nZ2VyIChkcml2ZXIsIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgY29uc3QgZHN0RHJpdmVyID0gc2Vzc2lvbklkICYmIF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICA/IChkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbihzZXNzaW9uSWQpID8/IGRyaXZlcilcbiAgICA6IGRyaXZlcjtcbiAgaWYgKF8uaXNGdW5jdGlvbihkc3REcml2ZXIubG9nPy5pbmZvKSkge1xuICAgIHJldHVybiBkc3REcml2ZXIubG9nO1xuICB9XG5cbiAgbGV0IGxvZ1ByZWZpeCA9IGRzdERyaXZlci5jb25zdHJ1Y3RvclxuICAgID8gYCR7ZHN0RHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZChkc3REcml2ZXIpLnN1YnN0cmluZygwLCA4KX1gXG4gICAgOiAnQXBwaXVtRHJpdmVyJztcbiAgaWYgKHNlc3Npb25JZCkge1xuICAgIGxvZ1ByZWZpeCArPSBgICgke3Nlc3Npb25JZC5zdWJzdHJpbmcoMCwgOCl9KWA7XG4gIH1cbiAgcmV0dXJuIGxvZ2dlci5nZXRMb2dnZXIobG9nUHJlZml4KTtcbn1cblxuZnVuY3Rpb24gd3JhcFBhcmFtcyAocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHBlcmZvcm1Ub3VjaCB3aGljaCB0YWtlIGEgc2luZ2xlIHBhcmFtZXRlciAocHJpbWl0aXZlIHR5cGUgb3IgYXJyYXkpLlxuICAgKiBTb21lIGRyaXZlcnMgY2hvb3NlIHRvIHBhc3MgdGhpcyBwYXJhbWV0ZXIgYXMgYSB2YWx1ZSAoZWcuIFthY3Rpb24xLCBhY3Rpb24yLi4uXSkgd2hpbGUgb3RoZXJzIHRvXG4gICAqIHdyYXAgaXQgd2l0aGluIGFuIG9iamVjdChlZycge2dlc3R1cmU6ICBbYWN0aW9uMSwgYWN0aW9uMi4uLl19KSwgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byB2YWxpZGF0ZS5cbiAgICogVGhlIHdyYXAgb3B0aW9uIGluIHRoZSBzcGVjIGVuZm9yY2Ugd3JhcHBpbmcgYmVmb3JlIHZhbGlkYXRpb24sIHNvIHRoYXQgYWxsIHBhcmFtcyBhcmUgd3JhcHBlZCBhdFxuICAgKiB0aGUgdGltZSB0aGV5IGFyZSB2YWxpZGF0ZWQgYW5kIGxhdGVyIHBhc3NlZCB0byB0aGUgY29tbWFuZHMuXG4gICAqL1xuICBsZXQgcmVzID0ganNvbk9iajtcbiAgaWYgKF8uaXNBcnJheShqc29uT2JqKSB8fCAhXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIHJlcyA9IHt9O1xuICAgIHJlc1twYXJhbVNldHMud3JhcF0gPSBqc29uT2JqO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHVud3JhcFBhcmFtcyAocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHNldE5ldHdvcmtDb25uZWN0aW9uIHdoaWNoIHNlbmQgcGFyYW1ldGVycyB3cmFwcGVkIGluc2lkZSBhIGtleSBzdWNoIGFzXG4gICAqIFwicGFyYW1ldGVyc1wiLiBUaGlzIGZ1bmN0aW9uIHVud3JhcHMgdGhlbSAoZWcuIHtcInBhcmFtZXRlcnNcIjoge1widHlwZVwiOiAxfX0gYmVjb21lcyB7XCJ0eXBlXCI6IDF9KS5cbiAgICovXG4gIGxldCByZXMgPSBqc29uT2JqO1xuICBpZiAoXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIC8vIHNvbWUgY2xpZW50cywgbGlrZSBydWJ5LCBkb24ndCB3cmFwXG4gICAgaWYgKGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF0pIHtcbiAgICAgIHJlcyA9IGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1zIChwYXJhbVNldHMsIGpzb25PYmosIHByb3RvY29sKSB7XG4gIGxldCByZXF1aXJlZFBhcmFtcyA9IFtdO1xuICBsZXQgb3B0aW9uYWxQYXJhbXMgPSBbXTtcbiAgbGV0IHJlY2VpdmVkUGFyYW1zID0gXy5rZXlzKGpzb25PYmopO1xuXG4gIGlmIChwYXJhbVNldHMpIHtcbiAgICBpZiAocGFyYW1TZXRzLnJlcXVpcmVkKSB7XG4gICAgICAvLyB3ZSBtaWdodCBoYXZlIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMsXG4gICAgICAvLyBvciBhbiBhcnJheSBvZiBhcnJheXMgb2YgcGFyYW1ldGVycywgc28gc3RhbmRhcmRpemVcbiAgICAgIGlmICghXy5pc0FycmF5KF8uZmlyc3QocGFyYW1TZXRzLnJlcXVpcmVkKSkpIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBbcGFyYW1TZXRzLnJlcXVpcmVkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gcGFyYW1TZXRzLnJlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBqdXN0IGFuIGFycmF5XG4gICAgaWYgKHBhcmFtU2V0cy5vcHRpb25hbCkge1xuICAgICAgb3B0aW9uYWxQYXJhbXMgPSBwYXJhbVNldHMub3B0aW9uYWw7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgYXMgdGhlICd2YWxpZGF0ZScga2V5LCBpdCB3aWxsIGhlcmUgYmUgY2FsbGVkIHdpdGhcbiAgICAvLyBqc29uT2JqIGFzIHRoZSBwYXJhbS4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZmFsc3ksIHZlcmlmaWNhdGlvbiB3aWxsIGJlXG4gICAgLy8gY29uc2lkZXJlZCB0byBoYXZlIHBhc3NlZC4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZWxzZSwgdGhhdCB3aWxsIGJlIHRoZVxuICAgIC8vIGFyZ3VtZW50IHRvIGFuIGVycm9yIHdoaWNoIGlzIHRocm93biB0byB0aGUgdXNlclxuICAgIGlmIChwYXJhbVNldHMudmFsaWRhdGUpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gcGFyYW1TZXRzLnZhbGlkYXRlKGpzb25PYmosIHByb3RvY29sKTtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKG1lc3NhZ2UsIGpzb25PYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHdlIGhhdmUgbm8gcmVxdWlyZWQgcGFyYW1ldGVycywgYWxsIGlzIHdlbGxcbiAgaWYgKHJlcXVpcmVkUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNvbWUgY2xpZW50cyBwYXNzIGluIHRoZSBzZXNzaW9uIGlkIGluIHRoZSBwYXJhbXNcbiAgaWYgKG9wdGlvbmFsUGFyYW1zLmluZGV4T2YoJ3Nlc3Npb25JZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ3Nlc3Npb25JZCcpO1xuICB9XG5cbiAgLy8gc29tZSBjbGllbnRzIHBhc3MgaW4gYW4gZWxlbWVudCBpZCBpbiB0aGUgcGFyYW1zXG4gIGlmIChvcHRpb25hbFBhcmFtcy5pbmRleE9mKCdpZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ2lkJyk7XG4gIH1cblxuICAvLyBnbyB0aHJvdWdoIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFuZCBjaGVjayBhZ2FpbnN0IG91ciBhcmd1bWVudHNcbiAgZm9yIChsZXQgcGFyYW1zIG9mIHJlcXVpcmVkUGFyYW1zKSB7XG4gICAgaWYgKF8uZGlmZmVyZW5jZShyZWNlaXZlZFBhcmFtcywgcGFyYW1zLCBvcHRpb25hbFBhcmFtcykubGVuZ3RoID09PSAwICYmXG4gICAgICAgIF8uZGlmZmVyZW5jZShwYXJhbXMsIHJlY2VpdmVkUGFyYW1zKS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIHdlIGhhdmUgYSBzZXQgb2YgcGFyYW1ldGVycyB0aGF0IGlzIGNvcnJlY3RcbiAgICAgIC8vIHNvIHNob3J0LWNpcmN1aXRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IocGFyYW1TZXRzLCByZWNlaXZlZFBhcmFtcyk7XG59XG5cbi8qXG4gKiBUaGlzIG1ldGhvZCB0YWtlcyAzIHBpZWNlcyBvZiBkYXRhOiByZXF1ZXN0IHBhcmFtZXRlcnMgKCdyZXF1ZXN0UGFyYW1zJyksXG4gKiBhIHJlcXVlc3QgSlNPTiBib2R5ICgnanNvbk9iaicpLCBhbmQgJ3BheWxvYWRQYXJhbXMnLCB3aGljaCBpcyB0aGUgc2VjdGlvblxuICogZnJvbSB0aGUgcm91dGUgZGVmaW5pdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGVuZHBvaW50IHdoaWNoIGhhcyBpbnN0cnVjdGlvbnNcbiAqIG9uIGhhbmRsaW5nIHBhcmFtZXRlcnMuIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGxcbiAqIGJlIGFwcGxpZWQgdG8gYSBjb21tYW5kLlxuICovXG5mdW5jdGlvbiBtYWtlQXJncyAocmVxdWVzdFBhcmFtcywganNvbk9iaiwgcGF5bG9hZFBhcmFtcywgcHJvdG9jb2wpIHtcbiAgLy8gV2Ugd2FudCB0byBwYXNzIHRoZSBcInVybFwiIHBhcmFtZXRlcnMgdG8gdGhlIGNvbW1hbmRzIGluIHJldmVyc2Ugb3JkZXJcbiAgLy8gc2luY2UgdGhlIGNvbW1hbmQgd2lsbCBzb21ldGltZXMgd2FudCB0byBpZ25vcmUsIHNheSwgdGhlIHNlc3Npb25JZC5cbiAgLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBwdXR0aW5nIHNlc3Npb25JZCBsYXN0LCB3aGljaCBtZWFucyBpbiBKUyB3ZSBjYW5cbiAgLy8gb21pdCBpdCBmcm9tIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaWYgd2UncmUgbm90IGdvaW5nIHRvIHVzZSBpdC5cbiAgbGV0IHVybFBhcmFtcyA9IF8ua2V5cyhyZXF1ZXN0UGFyYW1zKS5yZXZlcnNlKCk7XG5cbiAgLy8gSW4gdGhlIHNpbXBsZSBjYXNlLCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUgYSBiYXNpYyBhcnJheSBpblxuICAvLyBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkLCBzbyBzdGFydCB0aGVyZS4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZVxuICAvLyBtdWx0aXBsZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhvdWdoLCBzbyBoYW5kbGUgdGhhdCBjYXNlXG4gIC8vIHRvby5cbiAgbGV0IHJlcXVpcmVkUGFyYW1zID0gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZDtcbiAgaWYgKF8uaXNBcnJheShfLmZpcnN0KHBheWxvYWRQYXJhbXMucmVxdWlyZWQpKSkge1xuICAgIC8vIElmIHRoZXJlIGFyZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhlbiB3ZSB3aWxsIGhhdmUgYW5cbiAgICAvLyBhcnJheSBvZiBhcnJheXMgaW4gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCwgc28gbG9vcCB0aHJvdWdoIGVhY2ggc2V0IGFuZFxuICAgIC8vIHBpY2sgdGhlIG9uZSB0aGF0IG1hdGNoZXMgd2hpY2ggSlNPTiBwYXJhbXMgd2VyZSBhY3R1YWxseSBzZW50LiBXZSd2ZVxuICAgIC8vIGFscmVhZHkgYmVlbiB0aHJvdWdoIHZhbGlkYXRpb24gc28gd2UncmUgZ3VhcmFudGVlZCB0byBmaW5kIGEgbWF0Y2guXG4gICAgbGV0IGtleXMgPSBfLmtleXMoanNvbk9iaik7XG4gICAgZm9yIChsZXQgcGFyYW1zIG9mIHBheWxvYWRQYXJhbXMucmVxdWlyZWQpIHtcbiAgICAgIGlmIChfLndpdGhvdXQocGFyYW1zLCAuLi5rZXlzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyB3ZSBjb25zdHJ1Y3Qgb3VyIGxpc3Qgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kXG4gIGxldCBhcmdzO1xuICBpZiAoXy5pc0Z1bmN0aW9uKHBheWxvYWRQYXJhbXMubWFrZUFyZ3MpKSB7XG4gICAgLy8gSW4gdGhlIHJvdXRlIHNwZWMsIGEgcGFydGljdWxhciByb3V0ZSBtaWdodCBkZWZpbmUgYSAnbWFrZUFyZ3MnIGZ1bmN0aW9uXG4gICAgLy8gaWYgaXQgd2FudHMgZnVsbCBjb250cm9sIG92ZXIgaG93IHRvIHR1cm4gSlNPTiBwYXJhbWV0ZXJzIGludG8gY29tbWFuZFxuICAgIC8vIGFyZ3VtZW50cy4gU28gd2UgcGFzcyBpdCB0aGUgSlNPTiBwYXJhbWV0ZXJzIGFuZCBpdCByZXR1cm5zIGFuIGFycmF5XG4gICAgLy8gd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBoYW5kbGluZyBjb21tYW5kLiBGb3IgZXhhbXBsZSBpZiBpdCByZXR1cm5zXG4gICAgLy8gWzEsIDIsIDNdLCB3ZSB3aWxsIGNhbGwgYGNvbW1hbmQoMSwgMiwgMywgLi4uKWAgKHVybCBwYXJhbXMgYXJlIHNlcGFyYXRlXG4gICAgLy8gZnJvbSBKU09OIHBhcmFtcyBhbmQgZ2V0IGNvbmNhdGVuYXRlZCBiZWxvdykuXG4gICAgYXJncyA9IHBheWxvYWRQYXJhbXMubWFrZUFyZ3MoanNvbk9iaiwgcHJvdG9jb2wpO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgY29sbGVjdCBhbGwgdGhlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBwYXJhbXMgYW5kIGZsYXR0ZW4gdGhlbVxuICAgIC8vIGludG8gYW4gYXJndW1lbnQgYXJyYXlcbiAgICBhcmdzID0gXy5mbGF0dGVuKHJlcXVpcmVkUGFyYW1zKS5tYXAoKHApID0+IGpzb25PYmpbcF0pO1xuICAgIGlmIChwYXlsb2FkUGFyYW1zLm9wdGlvbmFsKSB7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoXy5mbGF0dGVuKHBheWxvYWRQYXJhbXMub3B0aW9uYWwpLm1hcCgocCkgPT4ganNvbk9ialtwXSkpO1xuICAgIH1cbiAgfVxuICAvLyBGaW5hbGx5LCBnZXQgb3VyIHVybCBwYXJhbXMgKHNlc3Npb24gaWQsIGVsZW1lbnQgaWQsIGV0Yy4uLikgb24gdGhlIGVuZCBvZlxuICAvLyB0aGUgbGlzdFxuICBhcmdzID0gYXJncy5jb25jYXQodXJsUGFyYW1zLm1hcCgodSkgPT4gcmVxdWVzdFBhcmFtc1t1XSkpO1xuICByZXR1cm4gYXJncztcbn1cblxuZnVuY3Rpb24gcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIChkcml2ZXIpIHtcbiAgaWYgKCFkcml2ZXIuc2Vzc2lvbkV4aXN0cykge1xuICAgIHRocm93IG5ldyBFcnJvcignRHJpdmVycyBtdXN0IGltcGxlbWVudCBgc2Vzc2lvbkV4aXN0c2AgcHJvcGVydHknKTtcbiAgfVxuXG4gIGlmICghKGRyaXZlci5leGVjdXRlQ29tbWFuZCB8fCBkcml2ZXIuZXhlY3V0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyaXZlcnMgbXVzdCBpbXBsZW1lbnQgYGV4ZWN1dGVDb21tYW5kYCBvciBgZXhlY3V0ZWAgbWV0aG9kJyk7XG4gIH1cblxuICAvLyByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCB3aWxsIGFkZCBhbGwgdGhlIHJvdXRlcyB0byB0aGUgZHJpdmVyLiBIZXJlIGV4dHJhTWV0aG9kcyBtaWdodCBiZVxuICAvLyBwYXNzZWQgaW4gYXMgZGVmaW5lZCBieSBBcHBpdW0gcGx1Z2lucywgc28gd2UgbmVlZCB0byBhZGQgdGhvc2UgdG8gdGhlIGRlZmF1bHQgbGlzdFxuICByZXR1cm4gZnVuY3Rpb24gYWRkUm91dGVzIChhcHAsIHtiYXNlUGF0aCA9IERFRkFVTFRfQkFTRV9QQVRILCBleHRyYU1ldGhvZE1hcCA9IHt9fSkge1xuICAgIC8vIHN0b3JlIGJhc2VQYXRoIG9uIHRoZSBkcml2ZXIgaW5zdGFuY2Ugc28gaXQgY2FuIHVzZSBpdCBpZiBuZWNlc3NhcnlcbiAgICAvLyBmb3IgZXhhbXBsZSBpbiBkZXRlcm1pbmluZyBwcm94eSBhdm9pZGFuY2VcbiAgICBkcml2ZXIuYmFzZVBhdGggPSBiYXNlUGF0aDtcblxuICAgIGNvbnN0IGFsbE1ldGhvZHMgPSB7Li4uTUVUSE9EX01BUCwgLi4uZXh0cmFNZXRob2RNYXB9O1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgbWV0aG9kc10gb2YgXy50b1BhaXJzKGFsbE1ldGhvZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFttZXRob2QsIHNwZWNdIG9mIF8udG9QYWlycyhtZXRob2RzKSkge1xuICAgICAgICAvLyBzZXQgdXAgdGhlIGV4cHJlc3Mgcm91dGUgaGFuZGxlclxuICAgICAgICBidWlsZEhhbmRsZXIoYXBwLCBtZXRob2QsIGAke2Jhc2VQYXRofSR7cGF0aH1gLCBzcGVjLCBkcml2ZXIsIGlzU2Vzc2lvbkNvbW1hbmQoc3BlYy5jb21tYW5kKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEhhbmRsZXIgKGFwcCwgbWV0aG9kLCBwYXRoLCBzcGVjLCBkcml2ZXIsIGlzU2Vzc0NtZCkge1xuICBsZXQgYXN5bmNIYW5kbGVyID0gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgbGV0IGpzb25PYmogPSByZXEuYm9keTtcbiAgICBsZXQgaHR0cFJlc0JvZHkgPSB7fTtcbiAgICBsZXQgaHR0cFN0YXR1cyA9IDIwMDtcbiAgICBsZXQgbmV3U2Vzc2lvbklkO1xuICAgIGxldCBjdXJyZW50UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gaWYgdGhpcyBpcyBhIHNlc3Npb24gY29tbWFuZCBidXQgd2UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24sXG4gICAgICAvLyBlcnJvciBvdXQgZWFybHkgKGVzcGVjaWFsbHkgYmVmb3JlIHByb3h5aW5nKVxuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhZHJpdmVyLnNlc3Npb25FeGlzdHMocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIGRyaXZlciBpcyBjdXJyZW50bHkgcHJveHlpbmcgY29tbWFuZHMgdG8gYW5vdGhlciBKU09OV1Agc2VydmVyLCBieXBhc3MgYWxsIG91clxuICAgICAgLy8gY2hlY2tzIGFuZCBhc3N1bWUgdGhlIHVwc3RyZWFtIHNlcnZlciBrbm93cyB3aGF0IGl0J3MgZG9pbmcuIEJ1dCBrZWVwIHRoaXMgaW4gdGhlXG4gICAgICAvLyB0cnkvY2F0Y2ggYmxvY2sgc28gaWYgcHJveHlpbmcgaXRzZWxmIGZhaWxzLCB3ZSBnaXZlIGEgbWVzc2FnZSB0byB0aGUgY2xpZW50LiBPZiBjb3Vyc2Ugd2VcbiAgICAgIC8vIG9ubHkgd2FudCB0byBkbyB0aGVzZSB3aGVuIHdlIGhhdmUgYSBzZXNzaW9uIGNvbW1hbmQ7IHRoZSBBcHBpdW0gZHJpdmVyIG11c3QgYmVcbiAgICAgIC8vIHJlc3BvbnNpYmxlIGZvciBzdGFydC9zdG9wIHNlc3Npb24sIGV0Yy4uLiBXZSBhbHNvIGFsbG93IHRoZSBjb21tYW5kIHNwZWMgdG8gZGVjbGFyZSB0aGF0XG4gICAgICAvLyB0aGlzIGNvbW1hbmQgc2hvdWxkIG5ldmVyIGJlIHByb3hpZWQgKHdoaWNoIGlzIHVzZWZ1bCBmb3IgcGx1Z2luIGRldmVsb3BlcnMgd2hvIGFkZFxuICAgICAgLy8gY29tbWFuZHMgYW5kIGdlbmVyYWxseSB3b3VsZCBub3Qgd2FudCB0aGF0IGNvbW1hbmQgdG8gYmUgcHJveGllZCBpbnN0ZWFkIG9mIGhhbmRsZWQgYnkgdGhlXG4gICAgICAvLyBwbHVnaW4pXG4gICAgICBsZXQgZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSA9IGZhbHNlO1xuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhc3BlYy5uZXZlclByb3h5ICYmIGRyaXZlclNob3VsZERvSndwUHJveHkoZHJpdmVyLCByZXEsIHNwZWMuY29tbWFuZCkpIHtcbiAgICAgICAgaWYgKCFkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kIHx8XG4gICAgICAgICAgICBkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kKHNwZWMuY29tbWFuZCwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IGRvSndwUHJveHkoZHJpdmVyLCByZXEsIHJlcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5kZWJ1ZyhgV291bGQgaGF2ZSBwcm94aWVkIGAgK1xuICAgICAgICAgIGBjb21tYW5kIGRpcmVjdGx5LCBidXQgYSBwbHVnaW4gZXhpc3RzIHdoaWNoIG1pZ2h0IHJlcXVpcmUgaXRzIHZhbHVlLCBzbyB3aWxsIGxldCBgICtcbiAgICAgICAgICBgaXRzIHZhbHVlIGJlIGNvbGxlY3RlZCBpbnRlcm5hbGx5IGFuZCBtYWRlIHBhcnQgb2YgcGx1Z2luIGNoYWluYCk7XG4gICAgICAgIGRpZFBsdWdpbk92ZXJyaWRlUHJveHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBhIGNvbW1hbmQgaXMgbm90IGluIG91ciBtZXRob2QgbWFwLCBpdCdzIGJlY2F1c2Ugd2VcbiAgICAgIC8vIGhhdmUgbm8gcGxhbnMgdG8gZXZlciBpbXBsZW1lbnQgaXRcbiAgICAgIGlmICghc3BlYy5jb21tYW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyB3cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLndyYXApIHtcbiAgICAgICAganNvbk9iaiA9IHdyYXBQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqKTtcbiAgICAgIH1cblxuICAgICAgLy8gdW53cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLnVud3JhcCkge1xuICAgICAgICBqc29uT2JqID0gdW53cmFwUGFyYW1zKHNwZWMucGF5bG9hZFBhcmFtcywganNvbk9iaik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IENSRUFURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGRldGVybWluZSBwcm90b2NvbCBieSBzZXNzaW9uIGNyZWF0aW9uIGFyZ3MsIHNvIHdlIGNhbiB0aHJvdyBhXG4gICAgICAgIC8vIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvciBpZiBhcmd1bWVudHMgdmFsaWRhdGlvbiBmYWlsc1xuICAgICAgICBjdXJyZW50UHJvdG9jb2wgPSBkZXRlcm1pbmVQcm90b2NvbChtYWtlQXJncyhyZXEucGFyYW1zLCBqc29uT2JqLCBzcGVjLnBheWxvYWRQYXJhbXMgfHwge30pKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGpzb24gcGF5bG9hZCBjb25mb3JtcyB0byB0aGUgc3BlY1xuICAgICAgY2hlY2tQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqLCBjdXJyZW50UHJvdG9jb2wpO1xuXG4gICAgICAvLyB0dXJuIHRoZSBjb21tYW5kIGFuZCBqc29uIHBheWxvYWQgaW50byBhbiBhcmd1bWVudCBsaXN0IGZvclxuICAgICAgLy8gdGhlIGRyaXZlciBtZXRob2RzXG4gICAgICBsZXQgYXJncyA9IG1ha2VBcmdzKHJlcS5wYXJhbXMsIGpzb25PYmosIHNwZWMucGF5bG9hZFBhcmFtcyB8fCB7fSwgY3VycmVudFByb3RvY29sKTtcbiAgICAgIGxldCBkcml2ZXJSZXM7XG4gICAgICAvLyB2YWxpZGF0ZSBjb21tYW5kIGFyZ3MgYWNjb3JkaW5nIHRvIE1KU09OV1BcbiAgICAgIGlmICh2YWxpZGF0b3JzW3NwZWMuY29tbWFuZF0pIHtcbiAgICAgICAgdmFsaWRhdG9yc1tzcGVjLmNvbW1hbmRdKC4uLmFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBydW4gdGhlIGRyaXZlciBjb21tYW5kIHdyYXBwZWQgaW5zaWRlIHRoZSBhcmd1bWVudCB2YWxpZGF0b3JzXG4gICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuZGVidWcoYENhbGxpbmcgYCArXG4gICAgICAgIGAke2RyaXZlci5jb25zdHJ1Y3Rvci5uYW1lfS4ke3NwZWMuY29tbWFuZH0oKSB3aXRoIGFyZ3M6IGAgK1xuICAgICAgICBfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGFyZ3MpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSkpO1xuXG4gICAgICBpZiAoZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSkge1xuICAgICAgICAvLyBUT0RPIGZvciBub3cgd2UgYWRkIHRoaXMgaW5mb3JtYXRpb24gb24gdGhlIGFyZ3MgbGlzdCwgYnV0IHRoYXQncyBtaXhpbmcgcHVycG9zZXMgaGVyZS5cbiAgICAgICAgLy8gV2UgcmVhbGx5IHNob3VsZCBhZGQgYW5vdGhlciAnb3B0aW9ucycgcGFyYW1ldGVyIHRvICdleGVjdXRlQ29tbWFuZCcsIGJ1dCB0aGlzIHdvdWxkIGJlXG4gICAgICAgIC8vIGEgYnJlYWtpbmcgY2hhbmdlIGZvciBhbGwgZHJpdmVycyBzbyB3b3VsZCBuZWVkIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5LlxuICAgICAgICBhcmdzLnB1c2goe3JlcUZvclByb3h5OiByZXF9KTtcbiAgICAgIH1cblxuICAgICAgZHJpdmVyUmVzID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVDb21tYW5kKHNwZWMuY29tbWFuZCwgLi4uYXJncyk7XG5cbiAgICAgIC8vIEdldCB0aGUgcHJvdG9jb2wgYWZ0ZXIgZXhlY3V0ZUNvbW1hbmRcbiAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKSB8fCBjdXJyZW50UHJvdG9jb2w7XG5cbiAgICAgIC8vIElmIGBleGVjdXRlQ29tbWFuZGAgd2FzIG92ZXJyaWRkZW4gYW5kIHRoZSBtZXRob2QgcmV0dXJucyBhbiBvYmplY3RcbiAgICAgIC8vIHdpdGggYSBwcm90b2NvbCBhbmQgdmFsdWUvZXJyb3IgcHJvcGVydHksIHJlLWFzc2lnbiB0aGUgcHJvdG9jb2xcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZHJpdmVyUmVzKSAmJiBfLmhhcyhkcml2ZXJSZXMsICdwcm90b2NvbCcpKSB7XG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGRyaXZlclJlcy5wcm90b2NvbCB8fCBjdXJyZW50UHJvdG9jb2w7XG4gICAgICAgIGlmIChkcml2ZXJSZXMuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBkcml2ZXJSZXMuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZHJpdmVyUmVzID0gZHJpdmVyUmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyB1bnBhY2sgY3JlYXRlU2Vzc2lvbiByZXNwb25zZVxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICBuZXdTZXNzaW9uSWQgPSBkcml2ZXJSZXNbMF07XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIG5ld1Nlc3Npb25JZClcbiAgICAgICAgICAuZGVidWcoYENhY2hlZCB0aGUgcHJvdG9jb2wgdmFsdWUgJyR7Y3VycmVudFByb3RvY29sfScgZm9yIHRoZSBuZXcgc2Vzc2lvbiAke25ld1Nlc3Npb25JZH1gKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgICAgICBkcml2ZXJSZXMgPSBkcml2ZXJSZXNbMV07XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgICAgZHJpdmVyUmVzID0ge1xuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXJSZXNbMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkcml2ZXJSZXMgPSBmb3JtYXRSZXNwb25zZVZhbHVlKGRyaXZlclJlcyk7XG5cbiAgICAgIC8vIGRlbGV0ZSBzaG91bGQgbm90IHJldHVybiBhbnl0aGluZyBldmVuIGlmIHN1Y2Nlc3NmdWxcbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpXG4gICAgICAgICAgLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGRyaXZlclJlcyksIHtsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEh9KX1gKTtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmRlYnVnKCdCdXQgZGVsZXRpbmcgc2Vzc2lvbiwgc28gbm90IHJldHVybmluZycpO1xuICAgICAgICBkcml2ZXJSZXMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgc3RhdHVzIGlzIG5vdCAwLCAgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGZvciBzdGF0dXMgY29kZS5cbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKGRyaXZlclJlcykpIHtcbiAgICAgICAgaWYgKHV0aWwuaGFzVmFsdWUoZHJpdmVyUmVzLnN0YXR1cykgJiYgIWlzTmFOKGRyaXZlclJlcy5zdGF0dXMpICYmIHBhcnNlSW50KGRyaXZlclJlcy5zdGF0dXMsIDEwKSAhPT0gMCkge1xuICAgICAgICAgIHRocm93IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGRyaXZlclJlcy5zdGF0dXMsIGRyaXZlclJlcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGRyaXZlclJlcy52YWx1ZSkgJiYgZHJpdmVyUmVzLnZhbHVlLmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JGcm9tVzNDSnNvbkNvZGUoZHJpdmVyUmVzLnZhbHVlLmVycm9yLCBkcml2ZXJSZXMudmFsdWUubWVzc2FnZSwgZHJpdmVyUmVzLnZhbHVlLnN0YWNrdHJhY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGh0dHBSZXNCb2R5LnZhbHVlID0gZHJpdmVyUmVzO1xuICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkKS5kZWJ1ZyhgUmVzcG9uZGluZyBgICtcbiAgICAgICAgYHRvIGNsaWVudCB3aXRoIGRyaXZlci4ke3NwZWMuY29tbWFuZH0oKSByZXN1bHQ6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShkcml2ZXJSZXMpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSl9YCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBpZiBhbnl0aGluZyBnb2VzIHdyb25nLCBmaWd1cmUgb3V0IHdoYXQgb3VyIHJlc3BvbnNlIHNob3VsZCBiZVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCB3ZSBlbmNvdW50ZXJlZFxuICAgICAgbGV0IGFjdHVhbEVyciA9IGVycjtcblxuICAgICAgY3VycmVudFByb3RvY29sID0gY3VycmVudFByb3RvY29sIHx8IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZCk7XG5cbiAgICAgIGxldCBlcnJNc2cgPSBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2s7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoZXJyTXNnLCBlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG1lc3NhZ2UgaGFzIG1vcmUgaW5mb3JtYXRpb24sIGFkZCBpdC4gYnV0IG9mdGVuIHRoZSBtZXNzYWdlXG4gICAgICAgIC8vIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdGFjayB0cmFjZVxuICAgICAgICBlcnJNc2cgPSBgJHtlcnIubWVzc2FnZX0ke2Vyck1zZyA/ICgnXFxuJyArIGVyck1zZykgOiAnJ31gO1xuICAgICAgfVxuICAgICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgICBhY3R1YWxFcnIgPSBlcnIuZ2V0QWN0dWFsRXJyb3IoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZClcbiAgICAgICAgICAuZGVidWcoYEVuY291bnRlcmVkIGludGVybmFsIGVycm9yIHJ1bm5pbmcgY29tbWFuZDogJHtlcnJNc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV0gPSBnZXRSZXNwb25zZUZvclczQ0Vycm9yKGFjdHVhbEVycik7XG4gICAgfVxuXG4gICAgLy8gZGVjb2RlIHRoZSByZXNwb25zZSwgd2hpY2ggaXMgZWl0aGVyIGEgc3RyaW5nIG9yIGpzb25cbiAgICBpZiAoXy5pc1N0cmluZyhodHRwUmVzQm9keSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cykuc2VuZChodHRwUmVzQm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdTZXNzaW9uSWQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICAgIGh0dHBSZXNCb2R5LnZhbHVlLnNlc3Npb25JZCA9IG5ld1Nlc3Npb25JZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodHRwUmVzQm9keS5zZXNzaW9uSWQgPSBuZXdTZXNzaW9uSWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGh0dHBSZXNCb2R5LnNlc3Npb25JZCA9IHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICAvLyBEb24ndCBpbmNsdWRlIHNlc3Npb25JZCBpbiBXM0MgcmVzcG9uc2VzXG4gICAgICBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgIGRlbGV0ZSBodHRwUmVzQm9keS5zZXNzaW9uSWQ7XG4gICAgICB9XG5cbiAgICAgIGh0dHBSZXNCb2R5ID0gZm9ybWF0U3RhdHVzKGh0dHBSZXNCb2R5KTtcbiAgICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cykuanNvbihodHRwUmVzQm9keSk7XG4gICAgfVxuICB9O1xuICAvLyBhZGQgdGhlIG1ldGhvZCB0byB0aGUgYXBwXG4gIGFwcFttZXRob2QudG9Mb3dlckNhc2UoKV0ocGF0aCwgKHJlcSwgcmVzKSA9PiB7XG4gICAgQi5yZXNvbHZlKGFzeW5jSGFuZGxlcihyZXEsIHJlcykpLmRvbmUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRyaXZlclNob3VsZERvSndwUHJveHkgKGRyaXZlciwgcmVxLCBjb21tYW5kKSB7XG4gIC8vIGRyaXZlcnMgbmVlZCB0byBleHBsaWNpdGx5IHNheSB3aGVuIHRoZSBwcm94eSBpcyBhY3RpdmVcbiAgaWYgKCFkcml2ZXIucHJveHlBY3RpdmUocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gd2Ugc2hvdWxkIG5ldmVyIHByb3h5IGRlbGV0ZVNlc3Npb24gYmVjYXVzZSB3ZSBuZWVkIHRvIGdpdmUgdGhlIGNvbnRhaW5pbmdcbiAgLy8gZHJpdmVyIGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIGl0c2VsZiB1cFxuICBpZiAoY29tbWFuZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGF2b2lkYW5jZSBzY2hlbWEsIGFuZCBzYXkgd2Ugc2hvdWxkbid0IHByb3h5IGlmIGFueXRoaW5nIGluIHRoZVxuICAvLyBhdm9pZCBsaXN0IG1hdGNoZXMgb3VyIHJlcVxuICBpZiAoZHJpdmVyLnByb3h5Um91dGVJc0F2b2lkZWQocmVxLnBhcmFtcy5zZXNzaW9uSWQsIHJlcS5tZXRob2QsIHJlcS5vcmlnaW5hbFVybCwgcmVxLmJvZHkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvSndwUHJveHkgKGRyaXZlciwgcmVxLCByZXMpIHtcbiAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpXG4gICAgLmluZm8oJ0RyaXZlciBwcm94eSBhY3RpdmUsIHBhc3NpbmcgcmVxdWVzdCBvbiB2aWEgSFRUUCBwcm94eScpO1xuXG4gIC8vIGNoZWNrIHRoYXQgdGhlIGlubmVyIGRyaXZlciBoYXMgYSBwcm94eSBmdW5jdGlvblxuICBpZiAoIWRyaXZlci5jYW5Qcm94eShyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBwcm94eSB0byBhIHNlcnZlciBidXQgdGhlIGRyaXZlciBpcyB1bmFibGUgdG8gcHJveHknKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGRyaXZlci5leGVjdXRlQ29tbWFuZCgncHJveHlSZXFSZXMnLCByZXEsIHJlcywgcmVxLnBhcmFtcy5zZXNzaW9uSWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuUHJveHlSZXF1ZXN0RXJyb3IpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHByb3h5LiBQcm94eSBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQge1xuICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIGlzU2Vzc2lvbkNvbW1hbmQsXG4gIGRyaXZlclNob3VsZERvSndwUHJveHksIGRldGVybWluZVByb3RvY29sLCBDUkVBVEVfU0VTU0lPTl9DT01NQU5ELFxuICBERUxFVEVfU0VTU0lPTl9DT01NQU5ELCBHRVRfU1RBVFVTX0NPTU1BTkQsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxXQUEzQjs7O0FBRUEsU0FBU0MsaUJBQVQsQ0FBNEJDLGlCQUE1QixFQUErQztFQUM3QyxPQUFPQyxnQkFBRUMsSUFBRixDQUFPRixpQkFBUCxFQUEwQkcsdUJBQTFCLElBQXVDQyxx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
|